Python 處理分析 128 張 Excel 表格竟不到3秒?

有不少旁友想要了解怎麼用Python提升處理數據的效率,或者說怎麼用Python自動處理多張Excel表格,於是乎便有了本文。這篇文章算是Python數據分析實戰的第二個獨立案例。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

案例背景

在另一個平行世界,有一家專注於戶外運動的巨頭公司。既然是巨頭,為了更加親切,我們就叫他大頭吧。大頭的旗下有20個品牌,這些品牌涉及到128個類目(細分行業),涉及範圍之廣令人咋舌,可謂遍地開花。

平行世界的小Z就是這家巨無霸的數據分析師,今天剛來公司就接到了一個需求——下班前務必篩選出近一年銷售額總額TOP5的品牌以及對應的銷售額。

近一年?TOP5?

WOC,這麼簡單的需求也算需求?直接排個序不就好了。

還一天時間,不急不急,先來一杯咖啡,再看看新聞。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

一眨眼的功夫,時間來到了17:30,小Z覺得今天的需求可以開動了,做完之後還能簡單分析一下,應該能趕在18:00整點下班。

當他打開同事共享給他的表格文件,他才體會到,絕望,原來這麼遠,又這麼近。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

業務部門的同事總共發來了128張表,每一份表格對應著一個細分行業的數據,像什麼各類戶外服裝、垂釣裝備、救生裝備應有盡有。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

每張表,以月的維度(2018年9月-2019年8月,近一年)記錄著每個品牌的日期、訪客、客單、轉化、所屬類目(細分行業)等數據:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

注:不要問為啥表格數據存儲這麼奇葩,因為在平行世界,就是要任性,畢竟複雜的表格才能體現出Python的高效

小Z開始盤算,最終需求是要篩選出近一年銷售額總和排名前5的品牌,這一攤子數據,對單獨的一張表進行分類彙總,能夠得到該細分行業各品牌的銷售額,想要得到所有行業的銷售額總和,得分類彙總128次,最後對128次結果再次合併。

“這個任務看上去很艱鉅,不過,考驗的主要是體力。”小Z一眼就“看穿”了事情的本質。同時腦海中蹦出了“紅軍不怕遠征難”幾個紅彤彤的大字。接著,他帶上耳機,打開了唐朝樂隊的“國際歌”,在雙重buff的加持下,開始了表格的遠征。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

果然是個處理數據的好手,小Z右手食指在鼠標上飛速跳動,以90秒一張表格的速度瘋狂推進。按照這個速度,不考慮疲勞值對速度的拖累,大概3.2個小時就能夠完成任務。

國際歌循環到第10遍,小Z有些氣餒,第20遍,開始感到絕望。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

就在行將放棄之際,他想起了Python的潘大師(Pandas),雖然最近剛學還不是很熟練,但事到臨頭,黑暗中的一縷微光,那就是唯一的希望,小Z決定用Pandas來嘗試解決問題。

他明白,用Python解決批量問題的核心,在於梳理並解決單個問題,然後批量循環。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

單個表格處理

首先,導入模塊,打開單個表格:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

接著,是要彙總不同品牌在這個細分行業下的銷售額,我們要彙總的是各品牌近一年(2018年9月-2019年8月)的銷售額,先看看日期是否正確:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

正要彙總銷售額,小Z發現沒有銷售額的字段,但銷售額是可以通過訪客數*轉化率*客單價三者的乘積來計算的:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

按品牌來彙總銷售額,得到近一年各品牌銷售額合計:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

這裡有個細節,最終小Z要彙總的是所有細分行業的銷售額,對於單獨行業的銷售額,應該加一個區分的標籤以防覆蓋,而打開時候的文件名,具有天然的區分和防覆蓋優勢,但要注意去掉文件的後綴。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

OK,單個表格處理完成,我們把這一系列操作推而廣之即可。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

批量循環執行

小Z用os.listdir方法來遍歷文件名,批量循環訪問並處理文件,同時引入time計時,打算看一看,面對128張表,Python完成這些操作到底能夠比手動快多少:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

WOC,整個過程一氣呵成,不到3秒,平均一張表格0.02秒!真香!

為了確保數據正常,來預覽一下:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

這一串看起來很奇怪的銷售額,是pandas自作主張把實際銷售額變成了科學記數法形式來展示,要還原數值,需要更改一下原始的設置:

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

OK,無論是習慣還是法理,都得到了我們希望的結果——近一年銷售TOP5品牌及其對應的銷售額。從數據結果來看,大頭公司下的20個品牌全面開花,以品牌5為先鋒,一年銷售高達12.26億,排名最後的品牌體量也達到了9.79億元,平均單品牌銷售10.85億元。

Python 处理分析 128 张 Excel 表格竟不到3秒?| 附数据集

總結

本文以一個簡單又複雜的場景切入,簡單是需求本身非常簡單,而複雜則是基礎數據涉及到的表格多而雜。代碼和邏輯本身淺顯易懂,主要為了拋出一塊磚,敲開批量處理表格的思維藩籬,以引出同志們實踐中,在合適場景下用Python來化繁為簡的玉。案例中表格共128張,大家可以自己嘗試和探索更有趣的分析。

https://github.com/seizeeveryday/DA-cases/tree/master/Python%2Bexcel

作者:周志鵬,2年數據分析,深切感受到數據分析的有趣和學習過程中缺少案例的無奈,遂新開公眾號「數據不吹牛」,定期更新數據分析相關技巧和有趣案例(含實戰數據集),歡迎大家關注交流。

【END】


分享到:


相關文章: