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

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

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

隨后我新建了一個(gè)名為analysis.py的文件用于數(shù)據(jù)分析,并導(dǎo)入剛才的數(shù)據(jù)源測試一下數(shù)據(jù)是否正常。

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

最后圖表顯示效果如下:

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

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

通過分析數(shù)據(jù),我們可以發(fā)現(xiàn)每個(gè)用戶的評論里都包含一個(gè)叫star的數(shù)據(jù),這里就是用戶的打分,30分代表3星。
現(xiàn)在我們寫一段代碼來把打分?jǐn)?shù)據(jù)做成餅圖。

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

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


因?yàn)槠邢蓿揖筒辉诒疚睦锾峁┤吭创a了,對這個(gè)例子感興趣的朋友可以私信我獲取源碼。
總結(jié):
通過對pyecharts的深度學(xué)習(xí),以及Python自帶的各種統(tǒng)計(jì)工具的配合使用,我們可以做出更多有價(jià)值的數(shù)據(jù)分析案例,當(dāng)這些案例慢慢成型后,就變成了一套完整的商業(yè)解決方案,希望大家可以從中得到啟發(fā),也歡迎繼續(xù)關(guān)注我的Python數(shù)據(jù)分析系列,學(xué)習(xí)更多有價(jià)值的數(shù)據(jù)分析方法。