【數據分析·實戰】真的是價格越高,越好吃嗎?

本文來自於@韓琦兒同學的投稿,經欄主本人排版編輯。

前言

我們都知道,民以食為天,物以稀為貴,作為一個資深吃貨,吃好吃的時候就經常有小夥伴說「果然是價格越高,越好吃」,那真的是這樣嗎? 在這篇文章里,我們主要以上海的美食為例,探尋這個問題

爬蟲數據獲取

首先,我爬取大眾點評上上海美食的數據,包括,價格,口味,環境,服務 ,菜系等等。

代碼如下:

hy1<-function(name,leftchar,rightchar){ left<-gregexpr(leftchar,name) right<-gregexpr(rightchar,name) for(i in 1:length(name)){ name[i]<-substring(name[i],left[[i]][1]+attr(left[[i]],"match.length"),right[[i]][1]-1) } name}myheader<-c( "User-Agent"="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ", "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language"="en-us", "Connection"="keep-alive", "Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")library(XML)library(bitops)library(RCurl)date_all<-data.frame()for (j in 1:50){ url<-paste("http://www.dianping.com/search/category/1/10/p",j,"?aid=67071007%2C17179979%2C5175874%2C63177252%2C57503551%2C2945809",sep = "") temp<-getURL(url,httpheader=myheader)#偽裝報頭訪問瀏覽器 k<-strsplit(temp,"
")[[1]] name1<-k[grep("data-hippo-type",k)+1] left<-gregexpr("<h4>",name1) right<-gregexpr("</h4>",name1) for(i in 1:length(left)){ name1[i]<-substring(name1[i],left[[i]][1]+attr(left[[1]],"match.length"),right[[i]][1]-1) } name<-name1 price1<-k[grep("¥",k)] price<-hy1(price1,"¥","</b>") price<-as.numeric(price) taste1<-k[grep("comment-list",k)+1] taste<-hy1(taste1,"<b>","</b>") taste<-as.numeric(taste) environment1<-k[grep("comment-list",k)+2] environment<-hy1(environment1,"<b>","</b>") environment<-as.numeric(environment) service1<-k[grep("comment-list",k)+3] service<-hy1(service1,"<b>","</b>") service<-as.numeric(service) address1<-k[grep("tag-addr",k)+1] address<-hy1(address1,"tag">","</span>") if (length(name)==length(price)&length(price)==length(taste)&length(taste)==length(environment)&length(environment)==length(service)) { date_0105<-data.frame(name,price,taste,environment,service,address) date_all<-rbind(date_0105,date_all) } else { print(paste("can"t get page",j)) }}

數據分析

然後,我們利用爬取到的進行簡單的數據分析:

  1. 價格和評價的散點圖

library(ggplot2) hy1<-hy0106hy1<-hy1[(hy1$price<1000),]#剔除價格超過1000的點ggplot(hy1,aes(x=taste,y=price))+geom_point()

圖中藍綠色是日本菜,紅色代表其他類。我們可以看到日本菜大多評價高,其評價和價格線性關係看不清楚,所以我們下面再具體對日本菜的數據進行具體分析。

2. 日本菜的價格和評價的回歸分析

hy2<-hy1[hy1$col==1,]lm_hy<-lm(price~taste,data=hy2)summary(lm_hy)Call:lm(formula = price ~ taste, data = hy2)Residuals: Min 1Q Median 3Q Max -259.96 -119.45 18.55 84.38 494.87 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -976.75 607.13 -1.609 0.110 taste 141.71 67.55 2.098 0.038 *---Signif. codes: 0 『***』 0.001 『**』 0.01 『*』 0.05 『.』 0.1 『 』 1Residual standard error: 152.2 on 123 degrees of freedomMultiple R-squared: 0.03454, Adjusted R-squared: 0.02669 F-statistic: 4.401 on 1 and 123 DF, p-value: 0.03797

可以看到,p值=0.03797 ,故而在0.05的顯著性水平下,價格和評價是有相關性的且相關係數為正,基本上驗證了「價格越高,評價越好」的說法。進一步的,那是不是所有菜都是 「價格越高,評價越好」 呢?

3. 所有菜品價格和評價的回歸分析

lm_hy1<-lm(price~taste,data=hy1)summary(lm_hy1)Call:lm(formula = price ~ taste, data = hy1)Residuals: Min 1Q Median 3Q Max -177.75 -100.20 -67.24 48.76 780.80 Coefficients: Estimate Std. Error t value Pr(>|t|)(Intercept) 335.16 222.04 1.509 0.132taste -14.82 24.88 -0.596 0.552Residual standard error: 163.7 on 691 degrees of freedomMultiple R-squared: 0.0005133, Adjusted R-squared: -0.0009331 F-statistic: 0.3549 on 1 and 691 DF, p-value: 0.5516

這次我們卻發現p值=0.55,遠遠大於0.1,所以並不是所以菜都是「價格越高,評價越好」。

至於原因,我個人認為日本菜的口味主要是看食材的新鮮程度,食材的品類,越新鮮越好的食材自然貴了,而其他菜系的口味可能受到其他因素的影響更多,不能直接反映在價格上,所以價格和口味評價之間並沒有直接的線性關係。

4. 菜系評價的箱線圖

最後,我們倆看看各個菜系的評價箱線圖:

從圖表中我們主要可以得到以下結論:

  1. 人們對日本菜和火鍋「愛憎分明」,日本菜和火鍋平均評價很高,但是分布很分散,也就有說 確實有一部分人不愛吃日本菜和火鍋。

  2. 私房菜的評價非常高,說明現在特性化的美食更受歡迎。

  3. 江浙菜和蟹宴評價都很低,這應該是太多商家只關註上海特產這個噱頭並沒有把精力花在提高美食上,最後被廣大的吃貨們識破了。

最後

想要了解關於R、Python、數據科學以及機器學習更多內容。

請關注專欄:Data Science with R&Python


推薦閱讀:

客戶關係管理CRM和數據挖掘結合,有沒有人做過比較成功的案例,能否分享一下?
pandas怎樣處理中文?
哪個網站可以找到本年度的各項經濟數據?
計算機專業學生如何在金融行業和數據挖掘之間做出抉擇?
怎樣理解"curse of dimensionality"?

TAG:R编程语言 | 数据分析 | 数据挖掘 |