用Python分析統計必勝客餐廳
在之前的一篇文章100行代碼爬取全國所有必勝客餐廳信息,我講到如何爬取必勝客官網中全國各大城市餐廳的信息。雖然餐廳數據信息被抓取下來,但是數據一直在硬盤中“躺尸”。不曾記得,自己已經第 n 次這么做了。說到這里,要追溯到自己的大學時光。
自己從大學開始就接觸 Python,當時是自己的好奇心很強烈。好奇為什么 Python 不需要瀏覽器就能抓取網站數據。內心感嘆到,這簡直是太妙了。自己為了體驗這種抓取數據的樂趣,所以寫了很多的爬蟲程序。
隨著自己知識面地拓展,自己了解到數據分析這領域。自己從而才知道爬取到的數據,原來背后還隱藏的一些信息。自己也是在學習這方面的相關知識。這篇文章算是數據分析的處女稿,主要內容是從數據中提取出必勝客餐廳的一些信息。
01環境搭建
百度前端技術部開源一個基于 Javascript 的數據可視化圖表庫。其名字為 ECharts。它算是前端數據可視化的利器,能提供直觀,生動,可交互,可個性化定制的數據可視化圖表。
國內有個大神突發奇想,這么好用的庫如果能和 Python 結合起來就好了。于是乎,pyecharts 庫就應運而生。因此,pyecharts 的作用是用于生成 Echarts 圖表的類庫。本文中的所有圖標,自己都是利用 pyecharts 生成的。
安裝該庫也很簡單,使用 pip 方式安裝。
- pip install pyecharts
02數據清洗
數據清洗工作是數據分析必不可少的步驟。這一步是為了清洗一些臟數據。因為可能網站本身就有空數據,或者匹配抓取網站信息時,有些混亂的數據。這些都需要清除掉。
我之前是將數據寫到一個 json 文件中,我先將數據讀取出來。然后把 json 文本數據轉化為字典類型。
- def get_datas():
- """ 從文件中獲取數據 """
- file_name = 'results.json'
- with open(file_name, 'r', encoding='UTF-8') as file:
- content = file.read()
- data = json.loads(content, encoding='UTF-8')
- # print(data)
- return data
接著對字典進行遍歷, 統計每個城市的餐廳總數。
- def count_restaurants_sum(data):
- """ 對字典進行遍歷, 統計每個城市的餐廳總數 """
- results = {}
- for key, value in data.items():
- results[key] = len(value)
- # print(key, len(value))
- return results
再將字典中的每個 key-value 轉化為元組,然后根據 value 進行倒序排序。
- restaurants_sum = sorted(restaurants_sum.items(), key=lambda item: item[1], reverse=True)
最后根據顯示結果,手動刪除一些臟數據。
- def clean_datas(data):
- """
- 清除臟數據。
- 經過分析發現 ('新區', 189), ('南區', 189), ('朝陽', 56) 是臟數據, 必勝客官網的地區選項中就有這三個名字
- [('新區', 189), ('上海市', 189), ('南區', 189), ('北京市', 184), ('深圳', 95),
- ('廣州', 86), ('杭州', 78), ('天津市', 69), ('朝陽', 56), ('蘇州', 54)]
- """
- data.remove(('新區', 189))
- data.remove(('南區', 189))
- data.remove(('朝陽', 56))
- return data
到此,數據工作已經完成。
03數據分析
我們已經拿到了經過清洗的數據,我們簡單對數據進行打印,然后繪制直方圖。
- def render_top10():
- """
- 繪制直方圖顯示 全國必勝客餐廳總數 Top 10 的城市
- 根據清洗過后數據的結果, Top 城市如下
- ('上海市', 189), ('北京市', 184), ('深圳', 95), ('廣州', 86), ('杭州', 78),
- ('天津市', 69), ('蘇州', 54), ('西安', 52), ('武漢', 51), ('成都', 48)
- """
- attr = ["上海", "北京", "深圳", "廣州", "杭州", "天津", "蘇州", "西安", "武漢", "成都"]
- values = [189, 184, 95, 86, 78, 69, 54, 52, 51, 48]
- bar = Bar("全國各大城市必勝客餐廳數量排行榜")
- bar.add("總數", attr, values, is_stack=True, is_more_utils=True)
- bar.render("render_bar.html")
繪制出來的結果如下:
不難看出,一線城市擁有必勝客的餐廳數比較多,省會城市擁有餐廳數要比非省會城市要多。
我們繼續繪制餅狀圖,看看北上廣深的餐廳數在全國的占比。
- def render_top10_percent():
- """
- 繪制餅狀圖 顯示北上廣深餐廳數在全國中的比例
- """
- configure(global_theme='macarons')
- attr = ["上海", "北京", "深圳", "廣州", "其他城市"]
- value = [189, 184, 95, 86, 1893] # 根據 count_other_sum() 計算出來的
- pie = Pie("北上廣深餐廳數的占比")
- pie.add("", attr, value, is_label_show=True, is_more_utils=True)
- pie.render("render_pie.html")
繪制出來的結果如下:
從數據上看,北上廣深的餐廳數占據全國餐廳數的 22.64%。其他二三線城市共占據 77.36%。說明必勝客餐廳不僅主打大城市路線,還往二三四線城市發展,擴展領域。
作者:極客猴,熱衷于 Python,目前擅長利用 Python 制作網絡爬蟲以及 Django 框架。