國慶回了一趟松江大學(xué)城,好吃的真是越來越多了溶浴,可惜只有一個胃」芤回來后突然有了靈感,不如分析看看大學(xué)城什么類型的美食最多吧闯两!
為什么選擇餓了么這個平臺呢褥伴,因為當(dāng)年外賣APP還沒有火的時候,我們就是在網(wǎng)頁版的餓了么上叫外賣的漾狼,也算是一種情懷吧~
數(shù)據(jù)來源平臺:餓了么
地點選擇:松江大學(xué)城四期
抓取地址:https://www.ele.me/place/wtw0tgvd7yr(翻頁鏈接:https://www.ele.me/restapi/shopping/restaurants?geohash=wtw0tgvd7yr&latitude=31.04641&limit=0&longitude=121.19791&offset=24&terminal=web)
抓取數(shù)據(jù):只抓取了店名(name)和店的口味(flavors)
image.png
分析內(nèi)容:1重慢、對店名進行分詞然后詞頻統(tǒng)計繪制詞云圖,因為結(jié)巴分詞對小吃的分詞不是很準(zhǔn)確逊躁,所以在分詞時加入了自己的字典fooddic似踱;
2、對口味進行統(tǒng)計繪制條形圖(偷懶沒有排序)
爬蟲和繪圖代碼:
# -*- coding: utf-8 -*-
"""
Created on Thu Oct 11 09:05:59 2018
@author: Shirley
"""
import requests
import json
import re
import csv
from collections import defaultdict
import jieba
from wordcloud import WordCloud as wd#詞云
from PIL import Image#打開圖片稽煤,用于詞云背景層
import numpy as np#轉(zhuǎn)換圖片核芽,用于詞云背景層
import matplotlib.pyplot as plt#繪圖
from matplotlib.font_manager import FontProperties#中文顯示
font = FontProperties(fname=r"D:\anaconda\shirleylearn\cipintongji\simsun.ttf", size=14)#設(shè)置中文字體
data = []
restaurants = []
foodtype = []
def Getdata(page):#爬蟲
url = "https://www.ele.me/restapi/shopping/restaurants?geohash=wtw0tgvd7yr&latitude=31.04641&limit=24&longitude=121.19791&offset=%d&terminal=web"%page
headers = {"accept":"application/json, text/plain, */*",
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36",
"cookie":"登陸后的cookie"}
html = requests.get(url,headers=headers)
content = re.findall(r'"flavors":.*?,"next_business_time"',html.text)#用正則獲取包含數(shù)據(jù)的那部分
for con in content:
jsonstring = "{" + con.replace(',"next_business_time"',"}")#完善格式,使其成為準(zhǔn)確的json格式
jsonobj = json.loads(jsonstring)
restaurant_id = jsonobj["id"]
restaurant_name = jsonobj["name"].encode("gbk","ignore").decode("gbk")
flavors = jsonobj["flavors"]
restaurant_type = []
for f in flavors:#有些flavors中只有一個值酵熙,有些有2個轧简,所以要for循環(huán)
restaurant_type.append(f["name"])
restaurants.append(restaurant_name)#用于后面詞云圖
foodtype.append(restaurant_type)#用于后面條形圖
data.append([restaurant_id,restaurant_name,restaurant_type])
with open("elemedata.csv","w",newline="") as f:#保存數(shù)據(jù)到本地
writer = csv.writer(f)
writer.writerow(["restaurant_id","restaurant_name","restaurant_type"])
for d in data:
writer.writerow(d)
return restaurants,foodtype#返回值應(yīng)用到下面2個函數(shù)
def Eleme_wordcloud(restaurants):#詞云圖
jieba.load_userdict("D:/anaconda/shirleylearn/eleme/fooddic.txt")
text = ""
for i in restaurants:
name = re.sub(r'(.*',"",i)
name = re.sub(r'\(.*',"",name)
text = text + " " + name
fenci = jieba.lcut(text)
wordfrequency = defaultdict(int)
for word in fenci:
if word != " ":
wordfrequency[word] += 1#詞頻統(tǒng)計
img = Image.open("D:/anaconda/shirleylearn/eleme/bowl.jpg")#打開圖片
myimg = np.array(img)#轉(zhuǎn)換圖片
path = "D:/anaconda/shirleylearn/eleme/simsun.ttf"
wordcloud = wd(width=1000,height=860,margin=2,font_path=path,background_color="white",max_font_size=100,mask = myimg).fit_words(wordfrequency)#根據(jù)詞頻字典生成詞云
plt.imshow(wordcloud)
plt.axis('off')#不顯示坐標(biāo)軸
plt.savefig('eleme_wordcloud.png', dpi=300)
plt.clf()# 清除當(dāng)前 figure 的所有axes,但是不關(guān)閉這個 window匾二,所以能繼續(xù)復(fù)用于其他的 plot哮独。否則會影響下面的繪圖
def Eleme_bar(foodtype):#條形圖
#foodtype的格式:[['蓋澆飯', '簡餐'],['川湘菜', '簡餐'],['日韓料理']]
wordfrequency2 = defaultdict(int)
foodtypes = []#放總的類型,有重復(fù)項
types = []#放詞頻統(tǒng)計后的類型察藐,無重復(fù)項
numbers = []#放詞頻統(tǒng)計后的詞頻
for f in foodtype:
for t in f:
foodtypes.append(t)#把每個詞匯總到列表中
for type in foodtypes:
wordfrequency2[type] += 1#用字典進行詞頻統(tǒng)計
for key in wordfrequency2:
types.append(key)
numbers.append(wordfrequency2[key])
plt.bar(range(len(types)),numbers)
plt.xticks(range(len(types)),types,fontproperties = font,fontsize=5,rotation=90)
plt.savefig('eleme_bar.png', dpi=300)
plt.show()
plt.clf()
if __name__ == '__main__':
for p in range(0,24):
page = p*24
restaurants,foodtype = Getdata(page)
Eleme_wordcloud(restaurants)
Eleme_bar(foodtype)
運行中遇到的問題:運行界面只顯示了條形圖皮璧,沒有顯示詞云圖,不過保存下來的圖是正確的分飞。
詞云圖
eleme_wordcloud.png
看起來在大學(xué)城米飯類要比面食類更受歡迎悴务,粥、香鍋浸须、麻辣燙也是我讀大學(xué)的時候經(jīng)常吃的惨寿。
對于鮮花這個詞,我查看了原始數(shù)據(jù)删窒,確實外送的花店比較多裂垦,但是距離都較遠(yuǎn),實際上大多可以排除在大學(xué)城外肌索。
條形圖
eleme_bar.png
除簡餐外蕉拢,蓋澆飯、地方小吃、米粉面館是三巨頭晕换,甜品午乓、奶茶和炸雞也是大家的心頭好。