產品經理數(shù)據(jù)分析不求人(1) - 第一個Python程序
產品經理處理數(shù)據(jù)一般有兩個階段,能寫SQL的有自助查詢工具的就自己寫SQL, 否則找BI拉數(shù)據(jù)。不管是自己取數(shù)還是別人取數(shù)一般都會導出一個Excel, 第二個階段就是處理Excel了,通過各種公式和制圖得到自己想要的分析結果,但是有了Python, 我們可以讓第二個環(huán)節(jié)更加高效和強大,而且可以不斷復用你的成果??赡苣銜f自己Excel應用的爐火純青,能熟練應用數(shù)據(jù)透視和宏,還記得一百多個公式,那無非也就等于熟練掌握了冷兵器時代的蒙古弓。相對于Excel, 程式化處理具備的優(yōu)勢是自動化和線上化。相對于零散的公式和宏,集中的自然語言風格的代碼易于解讀易于理解易于復用和改造,具備良好的遷移性。Excel是靠人做線下處理,如果能切換到代碼實現(xiàn),就能無縫和線上系統(tǒng)整合,貫穿全流程批量處理更復雜的問題。
Python有一個強大的數(shù)據(jù)處理庫叫Pandas用來分析結構化數(shù)據(jù),在金融數(shù)據(jù)分析領域廣泛應用。它已經集成到Anaconda中了,所以你都不用安裝。Pandas既可以處理Excel也可以直接操作SQL, 這一課我們只用它來做一些基本的Excel操作。Pandas有兩種數(shù)據(jù)結構,Series和DataFrame ,簡單理解前者是一維數(shù)據(jù),后者是二維數(shù)據(jù),下面的實例中會用到DataFrame映射表結構。

首先我準備一個簡單的Excel樣本文件工資表。只模擬六行記錄,每行幾個簡單字段,姓名,性別,年齡,收入,扣稅。
把這個文件保存到文件夾,然后我們就可以開始來進行一系列簡單的操作練習了。
為了節(jié)省你的時間這個文件我已經上傳到github提供下載: 點擊獲取

導入Pandas
因為要用到Pandas這個庫,所以我們先導入它,并給一個簡單的別名pd
import pandas as pd
讀取并打印記錄
注意表格里我特意加了一條重復記錄在第三行,當獲取和打印記錄的時候Pandas已經實現(xiàn)去重處理了,所以df.head()打印出來只有五條記錄。
#讀取excel數(shù)據(jù)到一個data frame中
df = pd.read_excel("d:/dev/salary.xlsx")#獲取頭部5條記錄
print(df.head())
print("----------")
#獲取頭部兩條記錄
print(df.head(2))
print("----------")
#獲取尾部三條記錄
print(df.tail(3))

查看記錄條數(shù)
print("number of rows: ", len(df))

基本統(tǒng)計
針對收入這一列求和,求平均數(shù),取最小最大值,求方差和偏差也很簡單,用std()和var()函數(shù)即可
print("income sum ", df["income"].sum())
print("income average ", df["income"].mean())
print("income minmal ", df["income"].min())
print("income max ", df["income"].max())

增加列
假入想要看看每個人的稅后收入就要用income減去tax, 最好能加多一列,Pandas也能簡單實現(xiàn),添加完后可以重新打印全部記錄看看
df['after tax'] = df['income'] - df['tax']
print(df.head())

刪除列
df.drop(['after tax'], axis = 1, inplace = True)
分組求和
假如我們想按照性別分組統(tǒng)計男性和女性的收入之和
gender_grouped = df.groupby("gender")
income_sum_groupby_gender = gender_grouped[['income']].sum(axis=1)
print(income_sum_groupby_gender)

切片
假如我想僅查看男性人員記錄,且只要名字和稅收兩個字段(橫切一刀,豎切一刀)
loc函數(shù)就相當于SQL中的where
slice = df.loc[df['gender']== 'male',['name', 'tax']]
print(slice)

保存文件
上面代碼略加修改,分別對男性和女性人員進行切片,再創(chuàng)建兩個worksheet寫入Excel保存
male_slice = df.loc[df['gender']== 'male',['name', 'tax']]
female_slice = df.loc[df['gender']== 'female',['name', 'tax']]writer = pd.ExcelWriter("d:/dev/tax.xlsx")
male_slice.to_excel(writer, 'male')
female_slice.to_excel(writer, 'female')
writer.save()
基本操作就先寫這么多,還有連接,合并, 轉置,畫圖等高級操作,可以參考下面的兩張cheatsheet自己嘗試練習。
下一次我們將結合一個實際的數(shù)據(jù)分析案例使用這里學到的知識來進行操作演示。

