1. 程式人生 > 實用技巧 >用Python獲取大眾點評上長沙口味蝦店鋪資訊,並進行資料分析

用Python獲取大眾點評上長沙口味蝦店鋪資訊,並進行資料分析

前言

口味蝦又叫麻辣小龍蝦。在夏天的時候,邀上三五好友,來上幾盤口味蝦,搭配上啤酒,肥宅的生活就這麼快樂的開始了,味道麻辣爽口,一口下去就想吃下一口!在湖南,沒有吃上口味蝦的夏天都是不完整的。

那麼湖南的吃貨們都喜歡吃哪家的口味蝦呢?今天我們就用資料來盤一盤。

我們使用Python獲取了大眾點評上長沙口味蝦店鋪的相關資訊,進行了資料分析,整體流程如下:

  • 網路資料獲取
  • 資料讀入
  • 資料探索與視覺化
  • K-means聚類分析

資料讀入

首先匯入所需包,並讀入獲取的資料集。

#匯入包
importnumpyasnp
importpandasaspd
importmatplotlib.pyplotasplt
importseabornassns
importjieba

frompyecharts.chartsimportBar,Pie,Page
frompyechartsimportoptionsasopts
frompyecharts.globalsimportSymbolType,WarningType
WarningType.ShowWarning=False

importplotly.expressaspx
importplotly.graph_objectsasgo

此資料集包含50個搜尋頁面共745條資料,欄位包含:餐廳名、星級、星級評分、評論數、人均消費、推薦菜、口味、環境和服務得分。

資料預覽如下:

#讀入資料
df=pd.read_excel('../data/長沙小龍蝦資料.xlsx')
df.drop('detail_url',axis=1,inplace=True)
df.head()

資料預處理

此處我們對資料進行如下處理以便後的分析工作。

  • title: 去除前後符號
  • star:提取星級
  • score: 提取數值,轉換為類別型
  • comment_list:提取口味、環境、服務得分
  • 刪除多餘的行和列
#星級轉換
transform_star={
20:'二星',
30:'三星',
35:'準四星',
40:'四星',
45:'準五星',
50:'五星'
}

#處理title
df['title']=df['title'].str.replace(r"\[\'|\'\]","")
#star處理
df['star']=df.star.str.extract(r'(\d+)')[0].astype('int')
df['star_label']=df.star.map(transform_star)
#處理score
df['score']=df['score'].str.replace(r"\[\'|\'\]","").replace("[]",np.nan)
df['score']=df['score'].astype('float')

#口味
df['taste']=df.comment_list.str.split(',').str[0].str.extract(r'(\d+\.*\d+)').astype('float')
#環境
df['environment']=df.comment_list.str.split(',').str[1].str.extract(r'(\d+\.*\d+)').astype('float')
#服務
df['service']=df.comment_list.str.split(',').str[1].str.extract(r'(\d+\.*\d+)').astype('float')

#刪除列
df.drop('comment_list',axis=1,inplace=True)
#刪除行
df.dropna(subset=['taste'],axis=0,inplace=True)
#刪除記錄少的
df=df[df.star!=20]

處理之後的資料如下,分析樣本為560條。

df.head()

資料視覺化

以下展示部分視覺化程式碼:

1、不同星級店鋪數量分佈

準四星商戶最多,佔比高達65%,超過四星以上的商戶佔比18%,其中五星商戶數量最少,僅有10家。

#產生資料
star_num=df.star.value_counts().sort_index(ascending=True)
x_data=star_num.index.map(transform_star).tolist()
y_data=star_num.values.tolist()

#條形圖
bar1=Bar(init_opts=opts.InitOpts(width='1350px',height='750px'))
bar1.add_xaxis(x_data)
bar1.add_yaxis('',y_data)
bar1.set_global_opts(title_opts=opts.TitleOpts(title='不同星級商戶數量分佈'),
visualmap_opts=opts.VisualMapOpts(max_=365)
)
bar1.render()

2、店鋪評論數分佈

我們假設評論數目為店鋪的熱度,也就是它越火,消費人數越多,評論數目越多。

從直方圖中可以看出,資料呈現比較嚴重的右偏分佈,其中超過1萬評論的僅有兩家,我們挑選出來看一下,發現這兩家都是超級文和友,超級文和友是長沙網紅打卡地,國慶期間一天排16000+個號的超級網紅龍蝦館,難怪熱度會這麼高。

#直方圖
px.histogram(data_frame=df,x='review_num',color='star_label',histfunc='sum',
title='不同星級的評論數分佈',
nbins=20,width=1150,height=750)

3、人均價格區間分佈

我們繪製了所有店鋪口味蝦人均消費價格分佈的直方圖,發現價格分佈在20~180元之間,其中人均消費大部分都在67-111元的區間內。擴充套件看,人均消費和商戶的星級有關係嗎?

#直方圖
px.histogram(data_frame=df,x='mean_price',color='star_label',histfunc='sum',
title='小龍蝦人均消費價格分佈',nbins=20,width=1150,height=750)

4、不同星級店鋪與價格等因素的關係

不同星級與價格的關係:

這裡繪製了星級和價格分佈的小提琴圖,用來展示多組資料的分佈狀態以及概率密度。從圖形可以看出,不同星級和價格之間的分佈有顯著差異,表現為星級越高,平均消費價格越高。

#小提琴圖
plt.figure(figsize=(15,8))
sns.violinplot(x='star_label',y='mean_price',data=df,
order=['五星','準五星','四星','準四星','三星']
);
plt.title('不同星級和價格的關係',fontsize=20)
plt.show()

不同星級和其他得分項的關係:

我們預想,星級評價越好,它在口味、環境和服務的得分越高,熱度也就越高,從繪製出來的箱線圖也可以驗證我們的這一假設。

那麼店鋪得分與口味、環境、服務、評論數量、平均價格有關係嗎?接下來我們繪製一張多變數圖看一下。

5、數值型變數關係

數值型變數關係

多變數圖用於探索數值型變數之間的關係,從多變數圖可以看出:

  • 店鋪得分與口味、環境、服務得分呈現較為顯著的線性相關,這也和之前的驗證一致;
  • 店鋪得分和人均消費價格、評論數量關係不顯著;
  • 口味、環境、服務得分之間有顯著的正相關,三者存在高則同高的情況。
#多變數圖
sns.pairplot(data=df[['score','review_num','mean_price','taste','environment','service','star_label']]
,hue='star_label')
plt.show()

數值型變數之間的相關係數

為了驗證上述視覺化的結果,我們通過Python計算數值型變數之間的pearson相關係數,根據經驗,|r|>=0.8時,可視為高相關。從熱力圖中也可以得到上述結論。

#相關係數
data_corr=df[['score','review_num','mean_price','taste','environment','service']].corr()

#熱力圖
plt.figure(figsize=(15,10))
sns.heatmap(data_corr,linewidths=0.1,cmap='tab20c_r',annot=True)
plt.title('數值型變數間相關係數',fontdict={'fontsize':'xx-large','fontweight':'heavy'})
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()

6、 推薦菜詞雲圖

假設店鋪的推薦菜就是不同店鋪的熱門菜,我們使用jieba對推薦菜進行分詞並繪製詞雲圖:

發現"滷蝦"、"口味蝦"、"油爆蝦"是大家愛點的熱門菜。另外大家點口味蝦的同時也愛點"口味花甲"、"鳳爪"、"牛油"之類的串兒等菜。

7、K-means聚類分析群集佔比

K-means聚類分析群集佔比:

聚類分析用於將樣本做群集劃分,同一叢集內成員的相似性要愈高愈好, 而不同叢集間成員的相異性則要愈高愈好。我們使用Python進行了K-means聚類,對數值型變數:得分、評論數、平均價格、口味、環境、服務評論做群集劃分,這裡取K為3。得到以上三群,其中非常推薦的數量有3家,一般推薦的459家,非常不推薦的有97家。我們看一下這三群的描述性統計:

K-means聚類分析分佈:

以上是不同群集的直方圖分佈,通過群集分佈圖,可以總結如下:

  • 非常推薦:各項得分最高、評論數最多、價格最高
  • 一般推薦:各項得分居中、評論數居中、價格居中
  • 非常不推薦:各項得分最低、評論數最低、價格最低

由於在做聚類分析時候去除了一個評論數為30509.0的異常樣本。加上這條樣本,得到最終推薦的四家店鋪:

最後附上大眾點評上熱度值Top10的口味蝦店,看看有沒有你種草的店吧~

版權宣告:本文為CSDN博主「CDA·資料分析師」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:https://blog.csdn.net/yoggieCDA/article/details/107333826