> “我的懲罰是什麼?”伊薩克問艾爾曼。 “孤寂。”艾爾曼回答道。 ## 引言: 在近日的python數據分析實戰課中,我學習到使用python進行數據分析的流程、方法,對常使用的函數有一些認識和瞭解,對 numpy, pandas 包有了一定的理解但不深。 這篇博客將是我自己用於總結歸納的聖地,我 ...
“我的懲罰是什麼?”伊薩克問艾爾曼。
“孤寂。”艾爾曼回答道。
引言:
在近日的python數據分析實戰課中,我學習到使用python進行數據分析的流程、方法,對常使用的函數有一些認識和瞭解,對 numpy, pandas 包有了一定的理解但不深。
這篇博客將是我自己用於總結歸納的聖地,我將對整個項目的 key point 進行歸納總結,提取其中精華之所在,汲取之加以奮發向前。
一、分析數據文件:
在拿到數據的第一刻,莫急,先打開數據文件看一看,明白文件里的數據能夠說明什麼。於是乎我們得以提出分析的目標,並開始思索如何能夠實現我們的目的。例如,我們手裡有一份某電商平臺一年的營銷數據,這份數據中包含了達成交易訂單的用戶ID、本次訂單對應的商品數量、總價、時間,思考:我們可以利用這些數據得到哪些結論?——從時間維度:分析不同月份的營銷額;從客戶維度:分析回購率、復購率、新老用戶比例。根據得出的結論,我們得以制定相應的策略來提高商家的盈利。
二、數據預處理:
提一嘴,在文件最開始導入包的時候輸入 plt.rcParams['font.sans-serif'] = 'SimHei' 以讓中文能夠正常顯示(IPython中如此)
首先讀取文件,利用 pandas 根據不同文件類型選擇不同的讀取函數:
-
csv: pd.read_csv('name.csv', encoding='utf-8/GBK')
-
text: pd.read_table('name.txt', names=columns, sep='\s+') # names指定每一列數據的含義,sep是劃分數據時的參考,\s+表示跳過任意多的空格
-
excel: pd.read_excel('name.xlsx')
接著進行數據的預處理:
-
對於出現NAN的行或列且需要刪除的:data.dropna(axis=0, how='any', inplace=True) # 刪除帶有NAN的一整行數據,並修改原值
-
對於重覆出現的行或列:data.drop_duplicates(axis=0, inplace=True) # 刪除重覆的行,並修改原值
-
對於無用的行或列:data.drop(columns='order_id', axis=1, inplace=True) # 刪除 order_id 這一列
-
對於需要更新索引的數據:data.reset_index(drop=True, inplace=True) 把原來的索引index列刪除,並更新index
-
對於單位不統一的數據:如下圖
看到銷售金額一列的單位有元也有萬元,並且含有逗號,為了方便處理,我們將其格式化。
def data_deal(number):
if number.find('萬元')!= -1:#找到帶有萬元的,取出數字,去掉逗號,轉成float,*10000
number_new = float(number[:number.find('萬元')].replace(',',''))*10000
else: # 找到帶有元的並處理
number_new = float(number[:number.find('元')].replace(',',''))
return number_new
data['銷售金額'] = data['銷售金額'].map(data_deal)
這裡我們使用到了 Series.map() 函數,該函數的作用與 apply 和 applymap 類似,接收一個函數或含有映射關係的字典型對象,區別如下:
-
apply:作用於dataframe的整行或整列
-
applymap:作用於dataframe的每一個元素
-
map:作用於series中的每一個元素,在df結構中無法使用map函數
Time:2023年7月13日23:22:21