用資料分析的方法來探討 — 如何成為資料科學家?-系列1

chiaoya 許喬雅
Marketingdatascience
16 min readNov 2, 2020

相信大家都有耳聞過「21世紀最性感的職業 — 資料科學家」,這是源自《哈佛商業評論》(Harvard Business Review)於2012年發表的文章。臺灣的《Cheers雜誌》評論本世紀最「性感」的5種職業,分別為資料科學家、資料視覺化分析師、商業智慧分析師、資料管理師、資料工程師,其中有四種職業與「資料」有密切的關聯,到底資料「性感」在哪裡呢? 而「資料科學家」真正的工作內容又在做什麼呢?

Data Scientist: The Sexiest Job of the 21st Century (原文連結:https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century)

資料對於數據分析非常的重要,使用「好的資料」與準確的分析來解決問題,絕對能給你一個好飯碗!

Glassdoor是一個職場資訊平台,在美國它是一個很重要的薪資資訊分享網站。根據2020年10月Glassdoor的資料,資料科學家的平均年薪為US$113,309,相當於台幣320萬! 雖然美國與臺灣有一部分的薪資差距,但資料科學家在臺灣的平均薪水也絕對能讓您滿意!

資料科學家在美國的平均年薪 (網站連結:https://www.glassdoor.com/Salaries/data-scientist-salary-SRCH_KO0,14.htm)

資料科學是什麼?

在探討資料科學家前,我們先來討論什麼是資料科學。「資料科學」的定義為「使用科學化的方法,從許多結構化及非結構化的資料中得到資訊及可行的見解,進而解決問題。」更直觀一點來說,資料科學由以下八大學科所構成:

構成資料科學的八大學科

由此可知,資料科學要兼顧多種面向,並且可以歸類成三種專業領域:

1. 數理能力

包括基礎數學微積分線性代數,由於「建構分析模型」是資料科學很重要的部分,因此微積分上的極限、極值、函數逼近…等等概念是不可或缺的;而線性代數中最重要的為「矩陣」觀念,對於思考實際資料的架構,還有分析模型有很大的幫助,因此也是資料科學的基本技能之一。

(圖片來源:https://commons.wikimedia.org/wiki/File:Matrix_logo.svg)

此外,還有更專業的學科:統計學機率論,許多機器學習的估計方法就是建構在機率與數理統計之上的,還有其他的理論基礎、概念在機器學習上十分重要,如:隨機變數、大數法則、中央極限定理等等。

(圖片來源:https://www.vecteezy.com/vector-art/143608-linear-icons-with-charts-and-statistics)

2. 資訊科學能力

在資料分析上程式設計能力是不可或缺的技能,其中最相關的基礎學科包含:資料結構演算法,若掌握了這兩個專業能力,會對你在編程執行效率及程式可讀性上有很顯著的效果。
更進階的資訊科學為機器學習深度學習,縱使現今有很多機器學習的套件方便我們做使用,如:Python的Scikit-learn、R的rpart、e1071。但是更龐大的數據、更複雜的資料結構及資料科學日益增加的應用領域,其所需的演算法深度也大為增加,例如:我們能夠將Kaggle平台上不同資料科學家致力開發新的演算法,透過更好的調參技術、優化模型,增加預測的準確度。由此可知,資訊科學的重要性,強大的程式執行能力,及精益求精的精神,是資料科學的必備條件。

3. 應用領域知識

資料科學是一種科學方法,必須要應用在實際的領域,才能發揮其效用來解決問題。
我們以「行銷資料科學」為例,其應用領域的專業知識就是「行銷管理」。企業透過行銷管理來研究市場、制訂相關行銷策略、滿足消費者需求,而在行銷資料科學之中,需要行銷管理的技能才得以進行更準確的資料分析,如:我們可以透過客戶消費的資料來進行「RFM顧客分群」找出行銷資源及預算配置的最佳方法,進行精準行銷,滿足顧客的需求並達到更大的獲利。
而想要要建構出此分析架構,並產出資料分析的最佳決策,除了強大的分析能力外,Domain Knowledge也擔任很重要的角色。

因此,要擔任資料科學家,「數理能力」「資訊科學能力」「應用領域知識」是最主要的核心技能,要有此三種跨領域的專業,並且透過數據分析進行完善的決策,累積經驗產出有用的洞見。

要具備以上的能力是需要經過很長的學習時間與努力才能達成,這也體現了資料科學家養成的不易。雖然資料科學家的工作門檻很高,但如果能透過完善的學習及練習,一定也能成為資料科學界中的佼佼者!

所以…要怎麼成為資料科學家呢?

想必大家如果是想踏上或是轉職到資料科學領域的新手,在學習或是實做前心裡都會有幾個問題:

  • 資料科學家主要工作內容有哪些?
  • 資料科學家會使用哪種程式語言?
  • 如果要深入資料科學,可以透過什麼資源來了解呢?

接下來我們將使用先前所介紹過的Kaggle競賽 “2019 Machine Learning and Data Science Survey” 的資料集,透過「資料科學」中的方法,來釐清上述關於「資料科學家」的問題,並且深入了解此資料集的內容,透過程式碼進行資料預處理及視覺化。

一、資料集簡介

此競賽的數據是源自於2019年針對資料科學及機器學習的使用者所做的調查,詢問了34個問題並蒐集了19,717筆數據。接下來,我們將使用競賽中所提供的資料集 ”multiple_choice_responses.csv”, 並使用以下程式碼,概觀的統整出此份調查詢問的問題及填答內容 (如下圖一)。

# 載入pandas套件
import pandas as pd
# 讀取資料
multiple_choice = pd.read_csv('multiple_choice_responses.csv')
multiple_choice.head(8)
圖一、讀取資料

二、資料科學家主要工作內容有哪些?

此題主要探討資料科學家&工作間的分配關係,因此在資料集中,我們選擇與「職業」及「工作內容」最有關聯的調查題目來進行研究,以下分別為Q5及Q9的題目設定:

Q5. Select the title most similar to your current role (or most recent title if retired): — Selected Choice

Q9. Select any activities that make up an important part of your role at work: (Select all that apply) — Selected Choice

找出所需要的資料之後,接下來我們使用程式碼,遵循以下步驟來進行視覺化分析吧:

1. 資料預處理

繪製圖表前,最重要的就是資料處理啦!
首先,我們取出Q5及Q9的資料,並在Q5. 職業的資料中篩選,只取出「資料科學家」的填答內容。
另外可以發現,Q9. 工作內容是一個複選題,因此此題由多個欄位組成 (如下圖二)。

# 抓出第九題的資料
lst = []
for i in multiple_choice.columns:
if i[:2] == 'Q9':
lst.append(i)
activity = multiple_choice[lst]
# 加入Q5的資料
activity = activity.join(multiple_choice.iloc[1:,6],lsuffix='Q9_Part_1', rsuffix='Q5')
# 將Q5擷取出「資料科學家」
activity = activity[activity['Q5'] == 'Data Scientist']
activity
圖二、資料預處理

接下來,我們取出Q9. 工作內容複選題的所有選項 (如下圖三)。

# 抓出選項內容
choose = multiple_choice[lst].iloc[0].apply(lambda x: ''.join(x.split('-')[2:]))
choose.values
圖三、Q9複選題選項

並計算Q9每個選項在填資料科學家中的選擇數量 (如下圖四)。

activity_df = pd.DataFrame()# 將選項題目放入
activity_df['choice'] = list(choose.values)
# 計算選擇數量並放入
activity_df['value'] = list(map(lambda i: len(activity.iloc[:,i].dropna()), list(range(activity.shape[1]-1))))
activity_df
圖四、資料科學家在Q9複選題的選擇數量

2. 資料視覺化

我們藉由plotly套件繪製此資料,並使用水平柱狀圖來呈現 (如下圖五)。

# 刪除'Other'及'Text'
activity_df = activity_df.iloc[:-2, :]
# 由大到小排序
activity_df = activity_df.sort_values(by = ['value'], ascending=False)
# 自動儲存plotly圖表
import plotly as py
pyplt = py.offline.plot
# 繪製
import plotly.graph_objects as go
fig = go.Figure(go.Bar(
x=[*activity_df['value']],
y=[*activity_df['choice']],
orientation='h'),
go.Layout(yaxis=dict(autorange="reversed")))
fig.update_layout(title_text='The Activity of Data Scientist')
fig.show()
# 圖表儲存
pyplt(fig, filename ='The Activity of Data Scientist.html')
圖五、The Activity of Data Scientist

3. 分析

以下為資料科學家主要工作內容的前三名:

  • 分析並了解資料對產品或企業決策的影響
  • 探索機器學習應用領域
  • 改善現有的機器學習模型

我們可以將此結果與數據分析的過程來比較。
數據分析的過程可以簡單的統整為:資料選擇->資料分析方法->應用及改善

資料選擇階段:資料科學家會面對到的問題應是「要解決什麼問題?」和「該使用哪些資料作分析?」由於開啟一段資料分析的過程需要花費很多的資源及時間,因此一開始的資料分析的導向十分重要,要考量的面向也很多,例如:企業政策、現有資料內容、預期效益等等,每一個決策都有可能對企業的營運有很大的影響,因此「分析並了解資料對產品或企業決策的影響」是資料科學家主要工作內容。

資料分析方法階段:選定好資料分析的方向及所需資料後,接下來會遇到的問題是「該使用什麼方法分析?」不同的資料集,各自有適合的機器學習方法,有時資料包含了特殊的資料結構,需要特別開發演算法來擬合,因此「探索機器學習應用領域」為資料科學家主要工作內容之一。

應用及改善階段:「改善現有的機器學習模型」對於資料分析也是很重要的過程,有時使用的演算法無法達到我們的預期效益或實際需求,持續的改善機器學習模型是資料科學家必備的能力。

三、資料科學家會使用哪種程式語言?

我們了解到「資訊科學能力」對於資料科學家的重要性之後,該學習哪種程式語言作為入門應該是大家心裡面的第一個問題。程式語言有千千百百種,資料科學家們都使用哪一個呢? 他們推薦使用哪一種語言呢? 我們將在以下從資料科學家的經驗為大家解答。

我們將使用資料集中的Q18. 使用語言Q19.推薦語言來進行分析,以下分別為Q18、Q19的題目設定:

Q18. What programming languages do you use on a regular basis? (Select all that apply) — Selected Choice

Q19. What programming language would you recommend an aspiring data scientist to learn first? — Selected Choice

找出所需要的資料之後,接下來我們使用程式碼,分別繪製各職業使用語言各職業推薦語言的圖表:

1. 各職業使用語言資料預處理

首先如同前面的資料處理方式,抓取出Q18. 使用語言Q5. 職業資料,並更改column names (如下圖六)。

# 抓出Q18的資料
lst = []
for i in multiple_choice.columns:
if i[:3] == 'Q18':
lst.append(i)
job = multiple_choice[lst].iloc[1:,]
# 加入Q5的資料
job = job.join(multiple_choice.iloc[1:,6],lsuffix='Q18_Part_1', rsuffix='Q5')
# 提出Q18複選題的選項
choose = multiple_choice[lst].iloc[0].apply(lambda x: ''.join(x.split('-')[2:]).replace(' ',''))
job.columns = list(choose.values) + ['Q5']
job
圖六、各職業使用語言資料預處理(抓出Q18及Q5)

並將Q18. 使用語言複選題的欄位合併,整理成Treemap所需格式 (如下圖七)。

# dataframe整理成Treemap的格式
df = job[['Python','Q5']].dropna()
df.columns= ['language','Q5']
for language in list(choose.values[1:-3]):
lan_df = job[[language,'Q5']].dropna()
lan_df.columns= ['language','Q5']
df = df.append(lan_df)
df['value'] = 1
df
圖七、 各職業使用語言資料預處理(整理成Treepmap格式)

2. 各職業推薦語言資料預處理

我們一樣將Q19.推薦語言Q5. 職業資料作合併,並去掉空值整理成Treemap所需格式 (如下圖八)。

# 取出Q19、Q5資料,並去除空值
recommend = multiple_choice[['Q19','Q5']].iloc[1:,].dropna()
recommend.columns = ['language','job']
recommend['value'] = 1
recommend
圖八、各職業推薦語言資料預處理

3. 各職業使用語言資料視覺化

資料整理完後就開始來繪圖吧,以下圖表是使用plotly套件提供的Treepmap function來繪製的 (如下圖九)。
plotly套件最大的特色是可以製作動態的圖表,可以點選圖表內容並得到圖表實際數值 (如下影一),在資料呈現上是非常好的工具,若對plotly套件有興趣,下篇文章將有更詳細的介紹!

# 繪製各職業使用語言Treemap
import plotly.express as px
fig = px.treemap(df, path=['Q5', 'language',], values='value', color='language', color_discrete_sequence=px.colors.qualitative.Pastel,
title ='Language Used For Each Jobs')
fig.show()
# 圖表儲存
pyplt(fig, filename ='Language Used For Each Jobs.html')
圖九、各職業使用語言Treemap
影一、plotly treemap展示

4. 各職業推薦語言資料視覺化

各職業推薦語言資料也是使用plotly套件的Treepmap來進行繪製的 (如下圖十)。

# 繪製各職業推薦語言Treemap
import plotly.express as px
fig = px.treemap(recommend, path=['job', 'language',], values='value', color='language', color_discrete_sequence=px.colors.qualitative.Pastel,
title ='Language Recommend For Each Jobs')
fig.show()
# 圖表儲存
pyplt(fig, filename ='Language Recommend For Each Jobs.html')
圖十、各職業使用語言Treemap

5. 分析

相信大家從以上兩個圖表都可以發現到「Python」不管是在使用或推薦語言,在各個職位中都是名列前茅的佼佼者!
尤其在本文所探討的「資料科學家」Python都取得第一名的位置,因此我們推薦,若要加入資料科學家的行列,Python是最推薦的程式語言! 另外第二及第三名為R及SQL語言,以下是我們簡單統整出各語言的特色與應用領域:

  • Python -> 容易撰寫、直觀、適合入門,在資料整理使用機器學習演算法執行深度學習時建議使用。
  • R -> 在統計分析視覺化上功能強大,適合用來數據檢視製作視覺化圖表統計分析。
  • SQL -> 用於建立、查詢、更新及管理關聯式資料庫系統。

若想了解更多數據分析領域各程式語言的比較與特色,可以參考下文連結,有更詳細的介紹喔!

數據分析的領導者 — 爲什麼要使用Python語言呢?

下篇文章,我們將和大家分享繼續分享,若是想要深入資料科學的學習,成為一位優秀的資料科學家,可以透過那些資源來強化呢?

作者:許喬雅(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

--

--