高手如何做數據分析?這11招是你應該具備的技能
用Python來玩轉數據分析實在是太爽了,因為有強大的Pandas來處理數據非常方便,我個人對數據分析情有獨鐘,探索數據的秘密非常好玩!前段時間寫過一篇小白學數據分析入門招式,但是進階的部分上次沒有來得及整理,今天分享給大家。
我們依然用比較有名的泰坦尼克數據集來做示例,通過對這個數據集的處理,來快速上手數據分析的常見招式和基本手法,讓初學者可以快速上手數據分析!
要點:
數據的字符處理
數據的過濾
數據的分組
數據的透視表
1.數據集的字符處理
第一招:對列的處理
我們看一下這個數據集裏面的列都是英文的,不是很爽,我們把列的名字變成中文,這樣看的舒服。
df.rename(columns={'Survived':'是否獲救',
'Name':'姓名',
'Pclass':'船艙等級','Sex':'性別',
'Age':'年齡','SibSp':'兄弟姐妹數',
'Parch':'父母小孩數','Ticket':'船票',
'Fare':'船票費'})
這樣處理完之後看一下是不是舒服很多:
第二招:對數據集裏面的特定字符串進行替換
我們把性別裏面的male替換為男,female替換為女
df['性別'].map({'female':'女','male':'男'})
第三招:對列的字符進行替換
我們看到船票比如A/5 21171 有兩部分組成,一部分是英文字符,一部分是純數字,如果我們只想保留數字部分,我們直接用str字符串進行處理
df['船票']=df['船票'].str.replace(r'[^d+]','')
df.head(3)
pandas裏面的字符串功能非常強大,除了replace之外,
還有contains,split,match,findall,endswith等等,這招在清洗數據的非常有用。
2.數據集的過濾
我們在分析數據的時候經常要對數據內容進行過濾,或者是部分提取。
第四招:用邏輯表達式組合過濾
提取性別是女孩並且年齡在10歲以下的
df[(df['性別']=='女')&(df['年齡']<=10)]
df.head(3)
第五招:巧用不等於
提取非3等艙,並且獲救乘客信息
df[(df['是否獲救']==1)&(df['船艙等級']!=3)]
第六招:也可以用query函數
df.query('船艙等級==[1,2]')
3.數據的分類
我們有的時候需要對數據進行多維度的細分和統計,有下面幾招:
第七招:用where函數
第一種比較簡單,用where
比如我們認為比如我們認為 年齡在18以下都是未成年,18歲以上成年的
df['是否成年']=np.where(df['年齡']>=18,'成年','未成年')
df.sample(3)
第八招:用萬能的apply函數
apply可以處理比較復雜的邏輯,比如我們把年齡劃分為幾個階段,小孩,青年,成人,老人。
看一下新增的列"年齡分類"是不是層次分類更精準!
4.數據的切片和透視表
第九招:神奇的groupby函數
我們喜歡對數據按照某種類別分組統計:
1).從性別的維度來對是否獲救的人數進行統計
df.groupby('性別')['是否獲救'].count()
性別
女 314
男 577
Name: 是否獲救, dtype: int64
2).從船艙的等級來看是非獲救
df.groupby('船艙等級')['是否獲救'].count()
船艙等級
1 216
2 184
3 491
Name: 是否獲救, dtype: int64
第十招:對數據進行軸切片分析
比如我們希望對是非獲救和船艙等級這個兩個軸進行深入切片分析,這樣的伎倆在R語言裏面也經常用到,這裏pandas給我們提供了非常方便的agg函數
df.groupby(['是否獲救','船艙等級'])['年齡'].agg(['size','max','min','mean'])
這樣就很容易發現,獲救裏面的頭等艙的人比較多,平均年齡相對未獲救的要年輕不少.
第十一招:數據透視表
透視表在很多數據分析裏面都有,比如常見的excel裏面,pandas也提供了類似的功能.
根據一個或者多個鍵對數據進行聚合,我們用透視表也能做出類似上面的功能,比groupby還要強大.
df.pivot_table(columns=['性別'],
index=['是否獲救','船艙等級'],
values='年齡',
aggfunc={'年齡':[np.mean,min,max]})
看完上面的11招,加上前面的(18招,小白必看的數據分析招式|精選上篇),學會這些招數基本上可以算是入門數據分析了。
當然如果需要對數據分析進行系統的學習,還需要掌握很多其他的知識,如有不同見解,我在評論去等著你。
高手如何做數據分析?這11招是你應該具備的技能