用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數據分析系列,學習更多有價值的數據分析方法。

對Python感興趣或者是正在學習的小夥伴,推薦我們的Python學習扣qun:784758214 ,看看前輩們是如何學習的!從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF,實戰源碼】,零基礎到項目實戰的資料都有整理。送給每一位python的小夥伴!每天都有大牛定時講解Python技術,分享一些學習的方法和需要注意的小細節,點擊加入我們的 python學習者聚集地

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章