1. 程式人生 > 其它 >冬天來了,用Python看看哪裡的人最喜歡吃火鍋

冬天來了,用Python看看哪裡的人最喜歡吃火鍋

本文僅用於學習和交流使用,不具有任何商業價值,如有問題,請與我聯絡,我將即時處理。

資料來源於百度地圖。開發者工具就不說了,直接上程式碼:

 1 """
 2     爬取百度地圖全國火鍋店並可視化
 3 """
 4 import pprint
 5 
 6 import openpyxl as op
 7 import requests
 8 
 9 # 熱門城市
10 wb_hotCity = op.Workbook() # 工作簿
11 ws_hotCity = wb_hotCity.create_sheet(index=0)
12 ws_hotCity.cell(row=1, column=1, value='
城市') 13 ws_hotCity.cell(row=1, column=2, value='數量') 14 15 # 省份 16 wb_province = op.Workbook() # 工作簿 17 ws_province = wb_province.create_sheet(index=0) #工作表 18 ws_province.cell(row=1, column=1, value='省份') 19 ws_province.cell(row=1, column=2, value='數量') 20 21 # 省份下的市數量 22 wb_province_cities = op.Workbook()
23 ws_province_cities = wb_province_cities.create_sheet(index=0) 24 ws_province_cities.cell(row=1, column=1, value='城市') 25 ws_province_cities.cell(row=1, column=2, value='數量') 26 27 def get_json(): 28 url = 'https://xx.baixx.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&c=1&wd=火鍋店&da_src=shareurl&on_gel=1&l=4&gr=1&b=(6818483.628395475,-1378890.6182441516;19500319.04895588,5539245.839424342)&pn=0&device_ratio=2&auth=G0dY4cVy9WzEHUcbN2egDb@CE3v8H2ESuxLBNRzEzNBtDcnVDpneC@BvYgP1PcGCgYvjPuVtvYgPMGvgWv@uVtvYgPPxRYuVtvYgP@vYZcvWPCuVtvYgP@ZPcPPuVtvYgPhPPyheuVtvhgMuxVVty1uVtCGYuVt1GgvPUDZYOYIZuVt1cv3uVtGccZcuVtPWv3Guxt58Jv7ucvY1SGpuxLt@jUfJxvYlcvIKMNQTXZbegHcEWe1GD8zv7u@ZPuVtc3CuVteuVtegvcguxLBNRzEzNBtquTTGdFrZZWuV&seckey=Ml81XZ+wbx7jyS5hXlEdUOZNM5KJW3eWH1zi1SkgdUw=,2ccphtdcku0z52vCIEYIggYcdu8QHAJF1lQ+5wl2NMlaWIlTiCrONly/LJX4jdosle2Jf9LuHi8DHeLXtZRfnXu5J/0ctPoquwFQq6tZMA4TzSUjV2KQkSKzylzZf30ZOmZRhyug2Upr+mVaZqFcTu6hRc8/N3XYrjIVwQLMken5x8Iaqv13CW13nUMjW9LO&tn=B_NORMAL_MAP&nn=0&u_loc=13182436,2819866&ie=utf-8&t=1637824275666&newfrom=zhuzhan_webmap
' 29 headers = { 30 'Cookie':cooikes, 31 'Referer':'https://map.baidu.com/search/xxxx/@13000533.070537817,2742247.240299427,4.95z?querytype=s&c=1&wd=%E7%81%AB%E9%94%85%E5%BA%97&da_src=shareurl&on_gel=1&l=4&gr=1&b=(6818483.628395475,-1378890.6182441516;19500319.04895588,5539245.839424342)&pn=0&device_ratio=2', 32 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', 33 } 34 response = requests.get(url=url, headers=headers) 35 return response.json() 36 37 # 熱門城市 38 def get_hotCities(json_data): 39 # 獲取熱門城市數量 40 hotCities = json_data['content'] 41 for item in hotCities: 42 cityName = item['name'] 43 num = item['num'] 44 ws_hotCity.append([cityName, num]) 45 46 def get_province(json_data): 47 # 獲取其他省市的總數量 48 moreProvince = json_data['more_city'] 49 for item in moreProvince: 50 province = item['province'] # 省份 51 num = item['num'] # 數量 52 ws_province.append([province, num]) # 各省總數 53 54 def get_cities(json_data): 55 # 獲取省下面市的數量 56 provinceCities = json_data['more_city'] 57 print(type(provinceCities)) # list 58 for item in provinceCities: 59 # print(item['city']) 60 for needitem in item['city']: 61 city = needitem['name'] 62 num = needitem['num'] 63 print(city, num) 64 ws_province_cities.append([city, num]) # 各省下城市總數量 65 json_data = get_json() 66 # pprint.pprint(json_data) 67 if __name__ == "__main__": 68 get_hotCities(json_data) 69 get_province(json_data) 70 get_cities(json_data) 71 wb_hotCity.save('熱門城市火鍋店數量.xlsx') 72 wb_province.save('各省總火鍋店數量.xlsx') 73 wb_province_cities.save('各省城市火鍋店數量.xlsx') 74 wb_hotCity.close() 75 wb_province.close() 76 wb_province_cities.close()

儲存結果,三張圖:

雖然資料來源於百度地圖,為了學習,用python也做個地圖:

 1 """
 2     首先是全國火鍋店分佈數量
 3 """
 4 import pandas as pd
 5 from pyecharts.charts import Map
 6 from pyecharts.globals import ThemeType
 7 import pyecharts.options as opts
 8 
 9 data = pd.read_excel('各省總火鍋店數量.xlsx') #用熊貓讀取資料
10 # 提取出省份和數量
11 provinceList = data['省份'].tolist() # 將省份名稱作為列表
12 num = data['數量'].tolist() # 將數量也做成列表
13 print(provinceList)
14 
15 provinces = []
16 # 修正省份引數,因為pyecharts只支援前面有標識的字,內蒙古自治區要處理成內蒙古,廣西壯族自治區要處理成廣西
17 for i in provinceList:
18     if '' and '' in i:
19         provinces.append(i[:-1])
20     elif '內蒙古' in i: # 處理內蒙古自治區為內蒙古
21         neimenggu = i[0:3]
22         provinces.append(neimenggu)
23     elif '自治區' in i: # 處理類似廣西壯族自治區和寧夏回族自治區之類的字元廣西和寧夏
24         provinces.append(i[0:2])
25     else:
26         provinces.append(i[:-1]) # 處理黑龍江省成黑龍江
27 # print(len(provinceList)) # 比較長度是否相等
28 # print(len(provinces)) # 比較長度是否相等
29 
30 # 開始繪圖
31 map = (
32     Map(init_opts=opts.InitOpts(width='1280px',height='960px', theme=ThemeType.VINTAGE))
33     .add('數量', [list(z) for z in zip(provinces, num)], 'china') # 中國地圖
34     .set_global_opts(
35         title_opts=opts.TitleOpts(title='全國火鍋店分佈數量',),
36         legend_opts=opts.LegendOpts(pos_left='10%', pos_top='10%')
37     )
38 ).render('全國火鍋店分佈數量.html')

執行截圖:

資料發現,全國火鍋店數量最多的不是四川,而是山東,做下山東地圖視覺化:

 1 """
 2 做一下全國火鍋店數量最多的省的視覺化
 3 """
 4 import pandas as pd
 5 from pyecharts.charts import Map
 6 import pyecharts.options as opts
 7 from pyecharts.globals import ThemeType
 8 
 9 # 讀取資料
10 data = pd.read_excel('各省城市火鍋店數量.xlsx')
11 cities = data['城市'].tolist()
12 counts = data['數量'].tolist()
13 # 資料發現山東最多,做下山東的圖
14 city = []
15 count = []
16 flag = 0
17 for i in range(0, len(cities)):
18     if cities[i] == '青島市':
19         flag = 1
20     if flag:
21         city.append(cities[i])
22         count.append(int(counts[i]))
23     if cities[i] == '日照市':
24         city.append(cities[i]) # 提取日照
25         count.append(int(counts[i])) # 將日照的數量提取
26         break
27 
28 print(city, count) #列印符合預期
29 
30 c = (
31     Map(init_opts=opts.InitOpts(width='1280px', height='960px', theme=ThemeType.VINTAGE))
32         .add("山東火鍋分佈", [list(z) for z in zip(city, count)], "山東")
33         .set_global_opts(
34             title_opts=opts.TitleOpts(title="山東火鍋店數量分佈"),
35             visualmap_opts=opts.VisualMapOpts(),
36             legend_opts=opts.LegendOpts(pos_left='5%', pos_top='10%'),
37     )
38 ).render("山東火鍋店數量分佈.html")

截圖:

收工。