本人是在一家零售行業工作,所出的教程,都是我日常工作中遇到的 複雜而大量重複的工作 我用python代替去完成它,都是原創內容,非粘貼複製,如果我的文章能夠幫助到大家,希望幫忙點個關注。當然,如果有很多錯別字,也請見諒。
問題來了:
領導總是叫我每天導出來分析,但是我們公司分析數據總是要到 大區和小區,因爲我們大區和小區都有負責人,KPI考覈要對應負責人,通過數據去體現問題。這一次領導叫我把線上的門店自提訂單數據導出來做數據分析。
題外話:因爲公司對接到第三方ERP系統都是以門店爲主去對接的,因爲我們錢給的少,所以第三方數據不支持定製化數據分析。只能靠我們手工用excel 去做表。但是如果只是做一次,還勉強用excel 能做好。如果是天天都需要數據跟進,那天天都需要做數據賽選和匹配。雖然excel 可以做到輸入好公式,把數據源複製粘貼進去,可以自動計算。但是excel 公式多,會非常的喫電腦性能,而且出現無響應等。所以這個時候我們需要利用代碼去完成這個,我們叫的高大上的名字 辦公自動化
先給大家看下從ERP導出來的數據源是什麼樣子:
訂單狀態 | 訂單金額(實付) | 下單時間 | 提貨門店 | 銷售門店(code) | 客服備註 | 商品金額總計 |
訂單支付已過期 | 0.10 | 2019-09-17 10:45:56 | 多多一上總部 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-17 17:33:07 | 江南摩爾店 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-17 17:33:59 | 多多一上總部 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-17 17:35:04 | 江南摩爾店 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 08:24:09 | 江南摩爾店 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 08:28:07 | 江南摩爾店 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 08:29:25 | 嘉興平湖店 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 08:53:05 | 江南摩爾店 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 09:51:24 | 多多一上總部 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 09:56:04 | 多多一上總部 | A9999 | 0.10 | |
訂單支付已過期 | 0.10 | 2019-09-18 10:17:22 | 多多一上總部 | A9999 | 0.10 | |
訂單取消 | 0.01 | 2019-09-18 10:55:52 | 江南摩爾店 | A9999 | 0.01 | |
待備貨 | 29.00 | 2019-09-23 19:36:06 | 蘭溪星辰店 | A0012 | 29.00 | |
待備貨 | 29.00 | 2019-09-23 19:38:32 | 巫山祥雲店 | B0203 | 29.00 | |
訂單支付已過期 | 19.00 | 2019-09-23 19:38:51 | 全椒新華路 | A0466 | 19.00 | |
訂單取消 | 29.00 | 2019-09-23 19:49:06 | 宣恩解放街 | A0465 | 29.00 | |
訂單支付已過期 | 29.00 | 2019-09-23 19:49:12 | 臨沂蘭山店 | A0265 | 29.00 | |
待備貨 | 29.00 | 2019-09-23 19:49:34 | 棗莊薛城財富步行街 | A0295 | 29.00 | |
待備貨 | 67.00 | 2019-09-23 19:50:12 | 三水灣店 | A0105 | 67.00 | |
待備貨 | 67.00 | 2019-09-23 19:50:12 | 三水灣店 | A0105 | 67.00 | |
待備貨 | 67.00 | 2019-09-23 19:50:12 | 三水灣店 | A0105 | 67.00 |
在數據合併前需要準備一個帶有大區,小區 ,門店 的表去根據 “提貨門店” 和 下方 的 “門店” 合併 如下表:我看到數據後先做的是 python 的 merge 數據合併,這裏合併就是excel 函數的vlookup 是一樣的基本功能,如果要區別的,我覺得merge 還是要強大。
大區 | 小區 | 門店 |
南方大區 | 溫州大區 | 溫州楠江店 |
南方大區 | 溫州大區 | 溫州新橋店 |
南方大區 | 溫州大區 | 溫州狀元店 |
南方大區 | 溫州大區 | 溫州浦西店 |
南方大區 | 溫州大區 | 溫州北白象新店 |
南方大區 | 溫州大區 | 路橋金清店 |
南方大區 | 溫州大區 | 溫嶺松門店 |
南方大區 | 溫州大區 | 溫州蟠鳳商業街 |
南方大區 | 溫州大區 | 區域合計 |
北方大區 | 江蘇一區 | 淮安幸福店 |
北方大區 | 江蘇一區 | 漕運廣場店 |
北方大區 | 江蘇一區 | 東長街店 |
北方大區 | 江蘇一區 | 淮安盱眙店 |
北方大區 | 江蘇一區 | 阜寧阜師路 |
北方大區 | 江蘇一區 | 淮安匯通店 |
北方大區 | 江蘇一區 | 東大街店 |
北方大區 | 江蘇一區 | 少年宮店 |
代碼如下:
#encoding:utf-8
import pandas as pd #導入pandas包
rd_excel1 = pd.read_excel(r"D:\111\Book1.xlsx") #讀取具有大區,小區,門店的表
rd_excel2 = pd.read_excel(r"D:\111\12049_2019092810070530368495.xls") #讀取數據源表
merge_excel = pd.merge(rd_excel1,rd_excel2,left_on='門店',right_on='提貨門店') # 進行指定相同值的合併
merge_excel.to_excel(r"D:\111\merge.xlsx") #保存爲merge.xlsx
合併後效果如下:
事情還沒完,這個只是在數據源中匹配合並好了提貨門店所屬的大區和小區
下面我們據需要根據上面的數據源 進行 對數據的分類彙總 和 計數 以及修改列名。
第一步,修改列名:
爲了生成的數據更好理解 所以需要修改列名 。把數據源列名的 訂單狀態 修改爲 訂單數量,購買數量 修改爲 購買件數
代碼如下:
rd_merge = pd.read_excel(r"D:\111\merge.xlsx") #讀取剛剛合併好的excel
changer =rd_merge.rename(columns={'訂單狀態':'訂單數量','購買數量':'購買件數'}) #修改列名
第二步,賽選出不要的數值,這裏是在excel 中 訂單狀態 那列除了“已自提”,“待備貨”,“待自提” 且 商品總金額 大於0。
這裏主要去除掉不要的數據,方便在生成的時候,不佔用太多資源。
代碼如下:
df = pd.DataFrame(changer) #講上面改變列名的表格轉成 DF
title = ['已自提','待備貨','待自提'] #定義一個列表,就是需要選中的列的值
sel_excel = df[(df['訂單數量'].isin(title)) & (df["商品金額總計"]>1)] #進行賽選
第三步,按條件進行分類彙總(按條件進行求和),進行按條件進行計數。
這裏主要根據自己工作業務邏輯去做求和 和 計數 等計算方式
代碼如下:
province = sel_excel.groupby(['大區']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})
to_city = sel_excel.groupby(['小區']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})
shop = sel_excel.groupby(['門店']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})
上述代碼解釋,以一行代碼爲例解釋,
province = sel_excel.groupby(['大區']).agg({'訂單數量':'count','商品金額總計':'sum','購買件數':'sum'})
按照上面“進行賽選” 後得出的數據進行 分組統計,也就是 groupby函數,然後集合agg函數,網上說agg 功能主要是提供基於列的聚合操作。在 groupby()中的值 就是要計算的條件。而後面的出 在訂單數量【前名字爲訂單狀態】爲計數,商品金額總計爲求和,購買件數 爲 求和 都是計算方式。
第四步,新建表格,將上面 大區,小區,門店,寫入到excel 不同sheet中。
代碼如下:
writer = pd.ExcelWriter(r"D:\111\m2.xlsx") #新建 m2.xlsx 表
sheet1 = pd.DataFrame(province) #進行轉成DF格式
sheet2 = pd.DataFrame(to_city) #進行轉成DF格式
sheet3 = pd.DataFrame(shop) #進行轉成DF格式
sheet1.to_excel(writer,sheet_name='大區') #寫入到m2.xlsx 的名叫 大區的sheet中
sheet2.to_excel(writer,sheet_name='小區') #寫入到m2.xlsx 的名叫 小區的sheet中
sheet3.to_excel(writer,sheet_name='門店') #寫入到m2.xlsx 的名叫 門店的sheet中
writer.save() #保存
writer.close() #關閉excel
最後代碼執行後效果如下:
下方是sheet的截圖
下方是門店sheet中的數據:
門店 | 訂單數量 | 商品金額總計 | 購買件數 |
萬州五橋上海大道 | 3 | 87 | 3 |
萬州新城一店 | 4 | 96 | 4 |
萬州新城二店 | 2 | 116 | 2 |
三臺老西街 | 2 | 58 | 2 |
三水灣店 | 5 | 249 | 5 |
上虞青春店 | 4 | 192 | 4 |
東大街店 | 3 | 77 | 3 |
東長街店 | 10 | 431 | 11 |
中江上南街店 | 2 | 38 | 2 |
臨沂義堂店 | 3 | 145 | 3 |
下方是小區sheet中的數據:
小區 | 訂單數量 | 商品金額總計 | 購買件數 |
安徽一區 | 18 | 508 | 18 |
安徽二區 | 19 | 669 | 19 |
安徽四區 | 28 | 866 | 28 |
山東一區 | 54 | 2125 | 56 |
山東二區 | 40 | 1870 | 46 |
江蘇一區 | 55 | 1918 | 56 |
江蘇三區 | 29 | 1215 | 32 |
浙北大區 | 24 | 969 | 25 |
浙西一區 | 6 | 182 | 6 |
浙西二區 | 10 | 448 | 10 |
溫州大區 | 17 | 939 | 17 |
下方是大區sheet中的數據:
大區 | 訂單數量 | 商品金額總計 | 購買件數 |
北方大區 | 243 | 9171 | 255 |
南方大區 | 57 | 2538 | 58 |
成都大區 | 399 | 15550 | 411 |
湖南大區 | 112 | 3848 | 116 |
貴州大區 | 104 | 7487 | 115 |
重慶大區 | 124 | 4419 | 126 |
分享就到這裏了,可能文字描述邏輯有些不對,還請原諒。
別忘記,如果對你帶來啓發和靈感,給我點個關注唄。