裝腔指南:如何優雅地用數據評判餐廳星級
文/數據俠 郝偉楠
和挑選酒店一樣,選擇飯店也是一門可以用數據分析去深究的學問。今天,數據俠就來教大家,如何用點評數據對各等級餐廳來一場多維度分析,實力超越米其林~
本文轉自知乎優達學習筆記(Udacity)
孔子老人家曾經曰過,食色性也。(有小夥伴指出了 其實是孟子說的。。。)今天咱不講色,就講講這個食字。俗話說民以食為天,這吃飽了幹活才不累嘛,奈何世面上的飯店多如牛毛,良莠不齊,經常你花了大價錢結果發現不好吃。
可這飯入口中方知好壞啊,吃也吃了總不能不給錢吧,那股子憋屈勁就別提了。於是乎,我就想著看看這成千上萬家飯店它到底是怎麼回事,有什麼規律,能不能找出一個判別一家店值不值的方法來。
時值此刻,剛好看到了 @路人甲 分享了一個關於大眾點評的數據,共爬取了58萬條記錄。這可真是剛想睡覺就有人遞枕頭啊,再好不過了,省了自己爬取數據的功夫了。看了下數據也都挺規整的,那就直接開始吧。
本文主要分4個方面:數據處理、數據分析、機器學習以及總結思考。
數據處理
1.數據去重
首先,先來查看下數據。啊哈,共有585915條數據,10個維度。
+ 「City」表示所屬城市,共有49個熱門城市;
+ 「Cuisine」表示所屬菜系,共有72種不同菜系;
+ 「Name」表示飯店名字,共有231877個;
+ 「Star」表示星級,取值為0、20、30、35、40、45、50;
+ 「Comments」表示評論數量;
+ 「PCC」表示人均消費;
+ 「Taste」表示口味評分,取值從0到10;
+ 「Environment」表示環境評分,取值從0到10;
+ 「Service」表示服務評分,取值從0到10;
+ 「Addr」表示地址
然而我發現這些數據中有不少是重複的,鑒於餐廳可能有分店所以名字重複可以理解(其實不能,分店也要加上XX分店呀~不過好像大眾點評沒那麼嚴格?),所以我選取了地址作為衡量標準,無論如何地址都應該是唯一的,如果兩家店地址重複了,那我只能認為他們是一家店了~
這樣經過去重後,發現數量由585915降到了516674,少了將近7000條數據~~2.缺失值處理
接下來在看看缺失值得情況。
「Name」 欄位有11個缺失值,鑒於名字是一個餐廳必不可少的要素,所以對這11家缺少名字的餐廳予以刪除懲罰(喂~你們什麼態度,連名字都懶得起?)「Addr」同理,沒地址我可找不到你啊。
對於「Taste」、「Environment」、「Service」以及「Comments」和「PCC」都存在缺失值的數據,我本來是想打算給他們回填0處理的,但是轉念一想,我是想找出優秀的餐廳啊,那麼這些「三無」餐廳對於整體分析沒有幫助,是冗餘值。
而且還會在計算平均值等各項指標時造成誤差,所以我決定「狠心」把他們都刪除了。
當然有些「三無」餐廳可能只是剛剛開業的新餐廳因為時間太短還沒有積攢到評價,確實會存在一部分的誤殺情況。不過去新餐廳就餐也是有風險的,我這次只想來個保險的分析。So,等你們攢夠了足夠的評分再來入選吧,相信是金子總會發光的。
刪去缺失值後,數據減少了差不多一半,這說明至少在這次的數據集中大眾點評上將近一半的店鋪是有缺失關鍵信息的,不能對我們以很好的指引。點評君你還要加油啊~
嗯,這下數據就乾淨了~~~~
3. 構建特徵
接下來為了後面在分析口味等評分時更方便,我在這裡構建了一個新的特徵——「overall」(綜合分),既『口味』、『環境』及『服務』三者的平均分,精度取一位小數。
最後在對處理後的數據有個直觀的了解,看看每個類目都包含了哪些數據~
數據分析(EDA)
1.整體分析
餐廳數量,我們先來看看全國的情況:
可以看出餐廳數量最多的還是北上廣深四個一線城市,其中帝都的數量是最多的共有12522間餐廳(帝都人民好幸福~),最少的是蘭州(呃,宇宙第一店蘭州拉麵的大本營啊,沒想到數量最少)。廣深兩座城市數量基本持平,不愧是我專吃福建人的大吃省(大霧~)。
這在一定程度上也反應出了城市的發展程度,畢竟民以食為天,人口凈流入大的城市其飯店等基礎民生的設施也更多。
除北上廣深四大一線城市外,像南京、天津、成都、杭州等明星二線城市飯店數量也很突出,都超過了平均值,而像一些欠發達地區飯店數量則較少,基本符合前面的分析~
其實不難理解,像廣闊的大西北除了旅遊景點外都見不到幾個人還怎麼開店 哈哈(為啥我知道,,因為我剛剛去完回來啊,大西北的景色真心漂亮,強烈安利~)菜系種類,再來看看哪個城市菜品對多樣化,菜系最多:
一線城市依然名列前茅,符合預期。帝都力壓群雄,拔得頭籌,不過令我感到驚訝的是天津竟然僅以一票之差屈居第二。
在我想來菜品最多樣化的城市應該都是外來人口流入巨大的城市,因為城市聚集了天南海北各地的人,大家口味不同自然就有了不同菜系的市場。而在一個歷史相對悠久,人口流動並不是特別大的城市,綿長的歷史早就使得當地人培養出了自己的飲食文化,因而種類不會特別多,所以對天津這麼高的成績我表示出了驚訝(最近剛看完河神,對老天津衛獨特的文化還挺感興趣的~)。
不過這也說明,天津作為直轄市之一,發展的越來越好了,潛力巨大。與此相似的還有成都、南京、杭州等熱門二線城市。
同時,菜系種類的多寡也能反映出一個城市的包容度及本土文化的強勢程度。種類多說明城市的包容性強,而種類少說明本土的飲食文化非常強勢,擠壓甚至同化了不少其他種類,譬如多少爽朗的北方爺們愛上了精緻的廣東早茶,又有多少吃不得辣的人一把鼻涕一把淚的在川菜館裡大快朵頤~(不過這一點在本次分析中存疑,因為按照這個思路下去的話北京的本土文化不夠強勢?長沙包容性最低?我以為並不見得~不過暫時我還沒想明白是什麼原因造成的這些認知偏差,留待後續改進思考,但我懷疑其中一個原因可能是因為本次數據並非全量數據造成的。)
整體角度,讓我們在從整體角度看一看:
可以看出本次採樣的49個城市中,飯店大多集中在東南沿海,尤其是長三角和珠三角地區,另外京津冀地區雖然並非沿海區域,但靠著帝都威名也同樣聚集了大量的飯店。
這也大體反應出了我國地域經濟形勢及發展態勢,東南沿海發達,西北地區欠發達的形勢並沒有得到太大的改善,祖國的發展還需要靠我們來建設啊。
另外,再次強調,本次分析數據並非全量數據,所以可能只是反映了一部分情況,真實情況或許不同~
2. 深圳情況
接下來讓我們聚焦到單個城市看一看,因為本人居住在深圳,所以我就來看看深圳的情況~~首先定位到深圳,查看下深圳的數據。
餐廳星級,讓我們先從星級開始吧~~
星級分布符合正態分布,主要集中在3.5星附近,2星和5星的都很少(1星數據清理時已去除)。
3.5星的基本上是其他星級之和,而從3.5星到4星的數量陡然下降,說明4星是一個非常大的瓶頸,想要突破對於大部分店家而言難度不小。絕大部分店家在達到一個平均水準(3.5星)後就停留在這裡了,很難做的更好。
而從3星到3.5星的陡然提升也說明3星是一個比較容易達到的星級。所以那些2星3星的店家~好好反省下吧 哈哈哈
人均消費,說完了星級來看看人均。
深圳飯店人均消費最高1806元,最低4元,平均67元。嗯,平均67元,好像跟我的感覺差不多,基本上每次跟小夥伴們出去吃飯人均都在七八十到一百多吧,比平均值略高一點。唉,收入沒有跑贏平均值,吃飯消費倒是跑贏了。。。怪不得恩格爾係數暴漲啊~
再來看看分布情況,將人均消費分成幾個範圍組~
非常明顯的一個右偏分布。。絕大部分人人均消費都是少於200元,普遍集中在100元以內(看到這裡我心裡又平衡了)。然而還是有少部分人人均消費大於1000的,對於這部分人我只想說,土豪求抱大腿啊啊啊。。。 看來這又給我一個小目標了啊,先吃它1000塊。
這也反應出深圳這座城市中,大部分人都是普通的工薪階級,人均消費能力相對較低,但同時依然有少量的資產階級擁有遠超大眾的消費能力,貧富差距很大,兩極分化嚴重,符合二八原則。
當然,深圳是一座年輕的城市,尋夢的城市,雖然貧富差距大,但總有不服輸的追夢者創造出了不少神話,在這個越來越定型的社會中脫離了自身所處階級,實現了階級躍遷blablalbla.....(幹了這碗雞湯~)
最後,出於好奇,我看了下最貴的是哪家餐廳。
額,西安老劉家?1806元?我怎麼沒聽過這家店。。。於是我去大眾點評看了下。。好吧畫風是這個樣子的。
這充分告訴我們,有時候數據是不可信的,這數據太離譜了,不知道點評君是怎麼得出這樣的數據的~~~
接下來我們看看人氣情況。
在這裡,我把評論數的多少作為判定其人氣高低的指標,畢竟人氣高的話點評的人也會多,而無人問津的店自然也就沒什麼人點評~雖然這樣判斷不是很準確,但至少應該是正相關的,所以在沒有想到(就是懶)更好的辦法前就勉強拿來一用吧~(當然,如果一家店特別坑,也會導致大量的評論前來吐槽,但負面人氣也是人氣啊~現在不都流行負面炒作嘛)
那麼評論最多的店有20094條評論,而最少的只有1條評論,平均是294條。
從圖一可以看到只有一家店評論超過了2萬,基本上大家還都是在1萬條以下的。針對2萬條評論的這家店我看了下,是「 幸福西餅生日蛋糕(布心店)分店」。
這麼高的評論數不像是自然情況下的產生的,應該是有人為干擾因素,可能是店家搞的什麼活動,類似於評論返現啊之類的造成的極端數據。
通常情況下,評論越多也就意味著店面規模或者品牌越大型,因為只有大型的店面,才能有更高的知名度,吸引更多的人過來就餐。
小店面在這一點上是無法與大店媲美的,當然也會有那種幾十年的老店就是一個小小的店面,然後人們口口相傳名聲打開了,但這種情況太少了,個例我們就不予考慮了。
那麼我們看一下分布情況,跟人均消費一樣,依然是個右偏分布,絕大部分都集中在100條以下。也就是絕大部分店面都是小店,真正能做大的、做成連鎖品牌的店面非常的少,看來成功總是屬於少部分人啊~
再看看「口味」、「環境」、「服務」及「綜合」等評分指標的情況~
把口味、環境、服務及之前構建的綜合指標放在一起查看其分布情況,可看出每一個指標都是呈正態分布的,大部分集中在7.2到7.6之間,剩下兩端的分布很少。
然後我發現了一個有意思的現象,在2星的時候,環境比其他項的評分均分要高,這說明在星級較低的餐廳就餐時人們對於其環境的容忍度是比較高的。
這或許是因為大家去一個低星級餐廳時已經對其環境有一定的心理預設。而隨著星級越來越高,各項指標也越發平衡,說明飯店如果想得到更高的星級必須要均衡發展,不能偏科。
同時,我還注意到5星級的飯店其服務得分會略微高於其他項,這說明越高星級的餐廳越重視服務水平。當然換句話說,這能否說明我們現在的很多餐廳,尤其是高檔餐廳,相比於食物本身的味道它們更注重形式和服務表現。
畢竟高級餐廳從口味上已經很難拉開距離了,這時候更多的附加價值軟實力才是制勝根本。
綜合水準:
看起來深圳的各項指標還是挺均衡的~~~
OK~我知道大家一定很想知道這幾項指標最高的分別都是哪些店面~~
以上飯店請聯繫我付廣告費~~謝謝~
那從菜系的角度,什麼菜系最貴?最受歡迎呢?
那麼什麼菜系最貴呢~來看看吧。海鮮~~~有木有想到呢,那最受歡迎的菜系咧~ 竟然是江浙菜,講道理,我還以為是早茶呢~畢竟我大廣東不是都喝早茶的么。
最後,來看看星級和評分之間的關係~
查看星級與評分之間的關係,發現呈正相關,星級越高綜合評分越高。跟我預計的差不多~~
機器學習
前面對數據進行了一個初步的探索,接下來想通過各項指標來預測星級,這是一個多分類問題,由於時間和精力有限,我決定把它轉化為一個二分類問題,既判斷一個餐廳是否為好餐廳。我將Star二值化,閾值取39,既簡單的取星級4星以上的為好餐廳,標記為1,以下的為還需努力的,標記為0。
然後將菜系由非數值標籤處理為數值標籤,本來應該再進行啞變數處理的,因為轉為數值標籤後,會有潛在順序關係。但是不知道為何,進行了啞變數處理後,後面篩選特徵重要性的時候就出問題了,由於時間有限,我後來就放棄了啞變數處理。所以這裡多少是會有點誤差的。
查看下處理後的數據。
接下來劃分feature和label。
Star為標籤,然後選Cuisine,Comments,PCC, Taste,Environment, Service作為特徵。
為什麼不選City呢,因為城市都是深圳,大家都一樣沒有意義;不選Name的原因很簡單,這又不是算卦,咱不看面相;不選Addr也是一個道理,咱也不看風水;不選overall是因為該分值就是由Taste,Environment,Service三個指標的均值構成的,相關性很高,可以捨去~
然後來計算下特徵重要性,取前80%的特徵作為訓練特徵。
既Comments,Taste, Environment,Service 這四個特徵~~
接著進行特徵縮放,因為評論數量和評分之間相差過大,所以進行特徵縮放,防止某一過大值擠壓其他過小的值。
隨後採取交叉驗證測試模型得分,CV取10~
我嘗試了 LinearSVC、SVM、樸素貝葉斯、隨機森林及XGBoost模型,測量下來XGBoost模型表現最好,所以下一步就是對XGBoost模型進行調參~
啊,終於到了苦逼的調參時刻了~
最後調完超參數後,得分由原來的0.9489上升到了0.9497,撒花~
那麼假使有這麼一家神秘的店面,其評論數為100,口味9.2,環境9.3,服務8.2,那麼這家店值不值得去呢?
對的,分類為1,看來值得去~哈哈哈哈
總結及思考
僅針對本次數據,通過上面的分析可以得出以下結論:
- 兩極分化。大眾點評上有52.1%商家沒有得到過任何點評,這說明有大量商家無人問津,無法依靠大眾點評為他們引流 ,帶來人氣。但同時熱門商家點評非常火爆,會進一步帶動人氣。這將會使得二者之間的差距愈來愈大。
- 一線城市不管是餐廳數量還是菜系種類都領先於二三線城市,反應了一線城市的發展水平目前還是其他城市所無法比擬的,待在一線還是可以享受到很多便利的。
- 重點二線城市發展速度很快,從餐廳數量和菜系種類上愈來愈逼近一線城市,甚至於出現了像天津這樣在菜系種類上已經超越一線的城市。如果要去二線城市發展的話,可以優先考慮如杭州、南京、成都、天津等這樣的重點二線城市。
- 地區集中。大多數餐廳都集中在長三角、珠三角及環京地區,而西部地區則很少。反應了目前我國還是處在東南地區發達,西部地區欠發達的局面下。另外長三角、珠三角這兩個超級城市群依然擁有很強的競爭力。
- 星級分布服從正態分布,從3.5星到4星是一個門檻,跨越難度很大,有73.8%的店面無法跨越,但過了之後前景也很好。
- 人均消費還是比較低的,大部分人都是工薪階級,86.4%的人消費低於100元。但仍有部分土豪消費水平遠超普通人,社會財富分布依然懸殊。
- 口味、環境、服務指標都服從正態分布。另外隨著星級越來越高,各項指標也越發平衡,飯店如果想得到更高的星級必須均衡發展。
- 利用機器學習簡單的對餐廳做好壞分類是可行的。
本次分析的數據由於不是全量數據,所以結論難免會與真實情況存在差異。而且本次分析的也比較簡陋,很多情況都沒有考慮到,結論也略顯稚嫩,部分地方或許會有純堆砌數據卻無深入分析的情況存在。這是我以後要盡量避免,努力提高自己的地方。
另外,機器學習的部分非常簡陋,特徵的選取應該有更好的方法,而且標籤的定義也過於簡單。本來是想做多分類任務的,從指標來預測星級,不過由於時間問題只好改成了二分類任務了。這點在以後的迭代中需要更加完善下。
註:本文僅為作者觀點,不代表DT財經立場。
題圖 | 視覺中國
期待更多數據俠乾貨分享、話題討論、福利發放?在公眾號DT數據俠(ID:DTdatahero)後台回復「數據社群」,可申請加入DT數據社群。
數據俠門派
本文數據俠郝偉楠,喜愛數據,更喜愛數據背後的一個個故事。擅長用心分析,走心敘述,以及一本正經的胡說八道。
加入數據俠
「數據俠計劃」是由第一財經旗下DT財經發起的數據社群,包含數據俠專欄、數據俠實驗室系列活動和數據俠聯盟,旨在聚集大數據領域精英,共同挖掘數據價值。了解數據俠計劃詳情請關注DT數據俠回復「數據俠計劃」,投稿、合作請聯繫datahero@dtcj.com。
推薦閱讀:
※一個獨特的展覽,展出了 8000 件作品
※為什麼現在有眾多知名的高端餐飲品牌都在開設「副牌」餐廳?
※廈門有哪些餐廳適合多人聚餐,味道也不錯的?
※包頭市有哪些好吃的餐廳?