Python數據分析實戰,簡單快速制作餐飲行業商業化報告
前些天有個朋友向我求救,他們公司最近要針對餐飲行業做數據分析,并為某些商家做出線上營銷方案。但是他一頭霧水,不知道該從哪方面下手。
我提醒他,是否先從商家的線上評價作為數據分析的入口例如美團、大眾點評、餓了么等等。
朋友點頭稱是:”是個好主意,但是具體怎么做呢?“
于是我花了點時間用Python幫他做了一個基于線上商家評價的數據分析演示。
本章知識點:
- 商家評價數據源的獲取
- pyecharts 柱狀圖數據分析
- pyecharts 餅圖數據分析
- Python的Counter使用方法
商家評價數據源的獲取
首先我們要找到合適的商家評價,在本文以大眾點評的數據為例,我隨機選擇一家餐廳的評價數據作為數據源。

因為隱私的關系,我隱去了商家具體的店名和地址,最終我通過線上的API接口拿到了一部分用戶評價數據,用于本次演示,如果出于真正的商業目的需要獲得更完整的數據,還需要大家自己去想辦法。
拿到的商家評價演示數據如下:

需要注意的是,我們需要對返回的數據內容做一下處理,把數據里的true、false、null分別轉換為Python語言所需要的True、False和None。原因在于這里線上數據API接口返回時是按照javascript的數據類型來的(true、false、null)。
數據清洗了之后,我們發現這個數據在Python其實就是一個大的字典,那么我們按照字典的格式對其中的數據進行解析即可。
現在我給這個大字典命名為review_data,并保存為data.py文件,方便在正式的數據分析程序里進行import使用。

隨后我新建了一個名為analysis.py的文件用于數據分析,并導入剛才的數據源測試一下數據是否正常。

OK,至此我們的數據準備工作已經做好,開始進行實戰吧。
個性化的pyecharts柱狀圖
首先我們來獲取概要性的數據分析,就是用戶對于該商家的整體印象嘛,這部分數據在review_data的summarys里,讓我們寫一段程序把它取出來進行展示。

最后圖表顯示效果如下:

看來這家店菜品比較新鮮、牛肉也不錯、老顧客也相對較多,不過分量好像挺少,哈哈。
接著我們來解析下我們的代碼:
- 程序入口從18行開始,Page組件就不多說了,上一章講過,作用是在一個頁面里顯示多個圖表。
- get_summarys()函數主要用于創建一個商家整體評價的柱狀圖,需要講的是第10行和12行

我們發現sumarrys的數據其實是一個list(列表)包含著多個dict(字典)數據。
那么我們的柱狀圖希望得到的格式數據應該是下面這樣:
- X軸數據 [‘菜品健康’,'牛肉贊','回頭客'] ,X軸數據用于顯示名稱。
- Y軸數據[51,32,29],Y軸數據用于顯示數量。
所以我們就用Python的列表推導式分別得到了X,Y軸的數據。
- #獲取整體評價名稱
- summary_name_list = [i.get('summaryString') for i in summarys]
- #獲取整體評價次數統計
- summary_count_list = [i.get('summaryCount') for i in summarys]
關于add_yaxis()函數里有個category_gap需要解釋一下,它的作用是設置同一系列的柱間距離,默認為類目間距的 20%,可設固定值。在這里我設置為80%,就顯得柱子比較遠,看起來更清晰一點。
拿到X,Y軸的數據后就沒什么好說的了,直接添加即可。
關于Python列表推導的內容請查看我之前的教程。
個性化的pyecharts餅圖
接下來我想獲取該商家的用戶打分比例,我們知道在很多點評網站上,用戶的分數從1-5顆星星不等。
那么在本文中這些數據是怎么體現的呢?

通過分析數據,我們可以發現每個用戶的評論里都包含一個叫star的數據,這里就是用戶的打分,30分代表3星。
現在我們寫一段代碼來把打分數據做成餅圖。

在截圖里為了看起來方便我隱藏了之前get_summarys()函數,大家只需要關心get_star()函數即可。
最終圖表效果如下:
- 可以發現這家店的評價其實偏低,2星和3星加起來占了很大一部分,5星評價只有30%。
現在來解釋一下代碼:
Python的Counter使用方法
其實餅圖大家在上一章已經學過了,我在這里著重講一下Counter庫。
Counter庫是Python自帶的一個計數工具,主要用于對序列里的數據進行計數,非常方便快捷,不用我們自己造輪子了。

以上三行代碼可以很快幫助我們明白Counter的用途,經過它的統計,我們可以發現列表里10數字有2個,其他數字只有1個。
那么回到剛才的打分數據里,我們通過
- all_star = [i.get('reviewDataVO').get('reviewData').get('star') for i in all_review]
這段代碼獲取到了所有的打分數據。看起來像這樣:
- [30, 50, 10, 20, 35, 50, 30, 20, 50, 20]
那么我們可以很方便的用Counter對其進行統計即可。
- stars = dict(Counter(all_star))
在這里之所以要用dict對Counter結果進行轉換成字典,是為了方便我們獲取字典的keys和values,正好可以作為餅圖所需的數據。大家也可以通過其他方式獲取所需內容,不用拘泥于這一種方式。
餅圖所需數據
最后的數據壓縮代碼里:
- data = zip(list(stars.keys()), list(stars.values()))
stars.keys()和starts.values()其實分別就是分數和該分數的個數
stars這個字典原始數據如下:
- {30: 2, 50: 3, 10: 1, 20: 3, 35: 1}
之所以要用list把keys()和values()的結果轉換成列表,也是因為直接獲取字典的keys()和values()得到的數據沒辦法直接使用,需要先轉換成列表才行。
到現在為止,我們基本上可以熟練的使用本章學到的知識來對數據進行各種分析了。
最后我得到了四個圖表,用于對一家店鋪的初步數據分析。


因為篇幅有限,我就不在本文里提供全部源碼了,對這個例子感興趣的朋友可以私信我獲取源碼。
總結:
通過對pyecharts的深度學習,以及Python自帶的各種統計工具的配合使用,我們可以做出更多有價值的數據分析案例,當這些案例慢慢成型后,就變成了一套完整的商業解決方案,希望大家可以從中得到啟發,也歡迎繼續關注我的Python數據分析系列,學習更多有價值的數據分析方法。

























