用MongoDB分析合肥餐飲業(yè)
看了《從數(shù)據(jù)角度解析福州美食》后難免心癢,動(dòng)了要分析合肥餐飲業(yè)的念頭,因此特地寫了Node.js爬蟲爬取了合肥的大眾點(diǎn)評(píng)數(shù)據(jù)。分析數(shù)據(jù)庫(kù)我并沒(méi)有采用MySQL而是用的MongoDB,是因?yàn)榕廊〉臄?shù)據(jù)存在字段缺失的情況(schema不一致)。
1. 數(shù)據(jù)準(zhǔn)備
MongoDB簡(jiǎn)介
不同于MySQL,MongoDB是一種Schema-less的NoSQL數(shù)據(jù)庫(kù);與ElasticSearch類似,最小存儲(chǔ)單元Document為BSON object。MySQL與MongoDB的基本概念對(duì)比:
| MySQL | MongoDB |
|---|---|
| DB | DB |
| Table | Collection |
| Row | Document |
| Column | Field |
| Joins | Embedded documents, linking |
MongoDB不支持collection之間join操作,所以應(yīng)存儲(chǔ)待分析的join后的寬表。同時(shí),MongoDB具有靈活的數(shù)據(jù)模型及可擴(kuò)展的Schema,支持前后Document的schema不一致。
寫操作
Node.js將爬取的json數(shù)據(jù)寫入MongoDB,在寫之前對(duì)數(shù)據(jù)做了清洗過(guò)濾——將人均價(jià)格太離譜的餐館給剔除掉了:
var MongoClient = require('mongodb').MongoClient;
var fs = require('fs');
// Connection URL
var url = 'mongodb://<user>:<passwd>@<host1>:<port1>,<host2>:<port2>/<db>';
var insertDocuments = function (db, docs, callback) {
// Get the documents collection
var collection = db.collection('dianping');
// Insert documents
collection.insertMany(docs, function (err, result) {
console.log('Inserted', result.result.n, 'documents into the collection');
callback(result);
});
};
var array = fs.readFileSync('data1.json').toString().split('\n')
.filter(function (line) { // filter empty line
return line != '';
}).map(function (line) {
return JSON.parse(line);
}).map(function (doc) {
doc.taste = parseFloat(doc['taste']);
doc.surrounding = parseFloat(doc['surrounding']);
doc.service = parseFloat(doc['service']);
return doc;
})
.filter(function (doc) { // filter dirty data
return doc.price == '' || (doc.price >= 3 && doc.price <= 800)
});
MongoClient.connect(url, function (err, db) {
var docs = array;
console.log("Connected successfully to server");
insertDocuments(db, docs, function () {
db.close();
});
});
Diver用的是官方的,共計(jì)寫入4979家商戶。
2. 數(shù)據(jù)分析
商家分析
價(jià)格最貴的10家餐廳:
db.dianping.find(
{$where: "this.price != ''"},
{id: 1, name: 1, branchName: 1, price: 1, star: 1, taste: 1, surrounding: 1, service: 1, region: 1, _id: 0}).sort({price: -1}).limit(10)
| id | 商家名 | 分店名 | 價(jià)格 | 評(píng)級(jí) | 商圈 | 口味 | 環(huán)境 | 服務(wù) |
|---|---|---|---|---|---|---|---|---|
| 32332470 | 鍋德港式肥牛海鮮火鍋 | 499 | 4.5 | 三里庵 | 8.8 | 9 | 8.9 | |
| 56818450 | 萬(wàn)達(dá)威斯汀酒店思悅茲 | 436 | 3.5 | 包河區(qū) | 7.4 | 7.7 | 7.4 | |
| 3180424 | 祥記燕鮑翅餐廳 | 古井店 | 427 | 3.5 | 長(zhǎng)江東路 | 7.2 | 7.2 | 7.3 |
| 57634649 | 吉利亞特海洋餐廳 | 395 | 3.5 | 三里庵 | 7.6 | 8.6 | 8 | |
| 24757164 | 王品牛排 | 合肥萬(wàn)象城店 | 375 | 5 | 華潤(rùn)萬(wàn)象城 | 9.2 | 9.3 | 9.3 |
| 5666720 | 王品牛排 | 合肥銀泰店 | 373 | 5 | 淮河路步行街 | 9.1 | 9.3 | 9.3 |
| 26976035 | 白金漢爵大酒店餐廳 | 366 | 4 | 濱湖世紀(jì)城 | 8.2 | 9 | 8 | |
| 13754750 | 恒悅國(guó)際外商俱樂(lè)部酒店餐廳 | 366 | 3.5 | 天柱路 | 7.3 | 7.3 | 7.2 | |
| 23497952 | 綠地福朋喜來(lái)登酒店 | 聚味中餐廳 | 300 | 4 | 黃望潛 | 8 | 8.8 | 8.1 |
| 19630875 | 富山懷石料理 | 253 | 4 | 1912街區(qū) | 8.2 | 8.8 | 8.4 |
從上面可以看出,價(jià)格貴不一定代表口味好,貴的大部分是酒店餐廳。
最好吃的10家餐館:
db.dianping.find(
{},
{id: 1, name: 1, branchName: 1, price: 1, star: 1, taste: 1, surrounding: 1, service: 1, region: 1, _id: 0}).sort({taste: -1}).limit(10)
| id | 商家名 | 分店名 | 價(jià)格 | 評(píng)級(jí) | 商圈 | 口味 | 環(huán)境 | 服務(wù) |
|---|---|---|---|---|---|---|---|---|
| 19338040 | 懇的妙手海鮮火鍋 | 139 | 5 | 馬鞍山南路 | 9.3 | 9.3 | 9.3 | |
| 5641240 | 蜀王涮涮鍋 | 長(zhǎng)江西路店 | 57 | 5 | 長(zhǎng)江西路華聯(lián) | 9.3 | 9.2 | 9.3 |
| 6228284 | 海底撈火鍋 | 之心城店 | 102 | 5 | 三里庵 | 9.2 | 9.2 | 9.3 |
| 18067370 | 海底撈火鍋 | 銀泰中心店 | 103 | 5 | 淮河路步行街 | 9.2 | 9.2 | 9.3 |
| 48232229 | 蜀王火鍋那些年 | 65 | 5 | 三里庵 | 9.2 | 9.3 | 9.3 | |
| 24757164 | 王品牛排 | 合肥萬(wàn)象城店 | 375 | 5 | 華潤(rùn)萬(wàn)象城 | 9.2 | 9.3 | 9.3 |
| 14909570 | 海底撈 | 蒙城路店 | 100 | 5 | 白水壩 | 9.2 | 9.2 | 9.2 |
| 57701010 | 福記蒸汽海鮮 | 100 | 5 | 元一廣場(chǎng) | 9.2 | 9 | 9.2 | |
| 5458106 | 川鍋一號(hào) | 75 | 5 | 三孝口 | 9.2 | 9.2 | 9.3 | |
| 38306310 | 吞饞·夜食速遞 | 77 | 5 | 銀泰城 | 9.2 | 9.2 | 9.3 |
最好吃排行榜中火鍋類的餐館占了8個(gè),合肥人是有多喜歡吃火鍋!
“三九”餐廳,即口味、服務(wù)、環(huán)境評(píng)分都在9.0(包含9.0)之上的餐廳:
db.dianping.find(
{taste: {$gt: 9}, surrounding: {$gt: 9}, service: {$gt: 9}},
{id: 1, name: 1, branchName: 1, price: 1, star: 1, taste: 1, surrounding: 1, service: 1, region: 1, _id: 0}).sort({taste: -1})
| id | 商家名 | 分店名 | 價(jià)格 | 評(píng)級(jí) | 商圈 | 口味 | 環(huán)境 | 服務(wù) |
|---|---|---|---|---|---|---|---|---|
| 19338040 | 懇的妙手海鮮火鍋 | 139 | 5 | 馬鞍山南路 | 9.3 | 9.3 | 9.3 | |
| 5641240 | 蜀王涮涮鍋 | 長(zhǎng)江西路店 | 57 | 5 | 長(zhǎng)江西路華聯(lián) | 9.3 | 9.2 | 9.3 |
| 6228284 | 海底撈火鍋 | 之心城店 | 102 | 5 | 三里庵 | 9.2 | 9.2 | 9.3 |
| 18067370 | 海底撈火鍋 | 銀泰中心店 | 103 | 5 | 淮河路步行街 | 9.2 | 9.2 | 9.3 |
| 48232229 | 蜀王火鍋那些年 | 65 | 5 | 三里庵 | 9.2 | 9.3 | 9.3 | |
| 24757164 | 王品牛排 | 合肥萬(wàn)象城店 | 375 | 5 | 華潤(rùn)萬(wàn)象城 | 9.2 | 9.3 | 9.3 |
| 14909570 | 海底撈 | 蒙城路店 | 100 | 5 | 白水壩 | 9.2 | 9.2 | 9.2 |
| 5458106 | 川鍋一號(hào) | 75 | 5 | 三孝口 | 9.2 | 9.2 | 9.3 | |
| 38306310 | 吞饞·夜食速遞 | 77 | 5 | 銀泰城 | 9.2 | 9.2 | 9.3 | |
| 8690811 | 新辣道魚火鍋 | 蒙城路華聯(lián)店 | 72 | 5 | 雙崗 | 9.2 | 9.2 | 9.2 |
| 19659077 | 煲王粵菜餐廳 | 83 | 5 | 黃望潛 | 9.1 | 9.1 | 9.1 | |
| 58826504 | 海底撈火鍋 | 潛山路銀泰城店 | 100 | 5 | 蜀山區(qū) | 9.1 | 9.2 | 9.1 |
| 66109066 | 海銀海記潮汕牛肉火鍋 | 104 | 5 | 1912街區(qū) | 9.1 | 9.2 | 9.2 | |
| 64050497 | 花庭里成都火鍋 | 112 | 5 | 市府廣場(chǎng) | 9.1 | 9.3 | 9.1 | |
| 27375462 | 晉家門 | 華潤(rùn)萬(wàn)象城店 | 63 | 5 | 華潤(rùn)萬(wàn)象城 | 9.1 | 9.1 | 9.2 |
| 5666720 | 王品牛排 | 合肥銀泰店 | 373 | 5 | 淮河路步行街 | 9.1 | 9.3 | 9.3 |
| 45300772 | 大衛(wèi)壹番屋 | 宿州路店 | 37 | 5 | 淮河路步行街 | 9.1 | 9.3 | 9.3 |
| 24912528 | 新石器烤肉 | 合肥萬(wàn)象城店 | 66 | 5 | 華潤(rùn)萬(wàn)象城 | 9.1 | 9.1 | 9.1 |
| 65696913 | 百辣歸川重慶火鍋 | 79 | 5 | 蜀山區(qū) | 9.1 | 9.2 | 9.1 | |
| 17923508 | 花澗堂云南石鍋魚 | 90 | 5 | 銀泰城 | 9.1 | 9.2 | 9.2 | |
| 22029637 | 大鮨壽司 | 合家福店 | 55 | 5 | 馬鞍山南路 | 9.1 | 9.2 | 9.1 |
| 8931258 | 豆蔻餐廳. 電影主題店 | 四牌樓店 | 55 | 5 | 淮河路步行街 | 9.1 | 9.1 | 9.1 |
| 56903863 | 一品燜鍋 | 萬(wàn)達(dá)店 | 76 | 5 | 包河區(qū) | 9.1 | 9.2 | 9.2 |
| 559223 | 蜀王火鍋 | 金寨路店 | 62 | 5 | 中科大 | 9.1 | 9.1 | 9.1 |
| 32302396 | 棒約翰比薩 | 合肥港匯店 | 76 | 5 | 黃望潛 | 9.1 | 9.2 | 9.1 |
| 3707974 | 港鼎匯香港時(shí)尚火鍋料理 | 阜南路店 | 107 | 5 | 城隍廟 | 9.1 | 9.2 | 9.1 |
| 572662 | 蜀王火鍋 | 長(zhǎng)江東路店 | 71 | 5 | 長(zhǎng)江東路 | 9.1 | 9.2 | 9.2 |
| 20897019 | 鍋吧回轉(zhuǎn)小火鍋 | 18 | 5 | 三里庵 | 9.1 | 9.1 | 9.1 |
“三九”餐廳排行榜的人均價(jià)格在¥100上下,可以看出合肥餐飲業(yè)的價(jià)格保持在相對(duì)良心的水平。
分店最多的前15家餐廳:
db.dianping.aggregate([
{$group: {_id: {name: "$name", category: "$category"}, totalBranches: {$sum: 1}}},
{$sort: {"totalBranches": -1}},
{$limit: 15}])
| 商家名 | 分類 | 分店數(shù) |
|---|---|---|
| 老鄉(xiāng)雞 | 快餐簡(jiǎn)餐 | 106 |
| 仟吉西餅 | 面包西點(diǎn) | 40 |
| 采蝶軒 | 面包西點(diǎn) | 37 |
| 肯德基 | 快餐簡(jiǎn)餐 | 36 |
| 龍門花甲 | 小吃 | 31 |
| 肥叔鍋貼 | 生煎/鍋貼 | 25 |
| 艾比客 | 快餐簡(jiǎn)餐 | 25 |
| 大臉雞排 | 小吃 | 24 |
| 岸香咖啡 | 咖啡廳 | 22 |
| 必勝客 | 比薩 | 17 |
| 傣妹火鍋 | 更多火鍋 | 16 |
| 豪大大雞排 | 小吃 | 16 |
| 星巴克 | 咖啡廳 | 15 |
| 好利來(lái) | 面包西點(diǎn) | 14 |
| 良記卷餅王 | 小吃 | 14 |
在上面連鎖店中,快餐簡(jiǎn)餐、面包西點(diǎn)類占了多數(shù);其中,老鄉(xiāng)雞與采蝶軒是本土品牌。在合肥餐飲業(yè)的市場(chǎng)競(jìng)爭(zhēng),本土品牌還是占優(yōu)勢(shì)的。
商圈分析
最多吃貨Top 15商圈(商家數(shù)量與分類數(shù)量):
db.dianping.aggregate([
{$match: {"region": {$not: /.*[區(qū)縣].*/}}},
{$group: {_id: "$region", categorys: {$addToSet: "$category"}, totalShops: {$sum: 1}}},
{$unwind: "$categorys"},
{$group: {_id: {region :"$_id", totalShops: "$totalShops"}, categorys: {$sum: 1}}},
{$sort: {"_id.totalShops": -1}},
{$limit: 15}])
| 商圈 | 商家數(shù) | 商家分類數(shù) |
|---|---|---|
| 三里庵 | 245 | 44 |
| 黃望潛 | 176 | 42 |
| 淮河路步行街 | 162 | 34 |
| 天鵝湖萬(wàn)達(dá) | 131 | 41 |
| 包河萬(wàn)達(dá) | 114 | 33 |
| 濱湖世紀(jì)城 | 92 | 30 |
| 白水壩 | 84 | 33 |
| 馬鞍山南路 | 82 | 32 |
| 三孝口 | 76 | 28 |
| 青陽(yáng)路 | 75 | 30 |
| 大學(xué)城 | 60 | 22 |
| 明珠廣場(chǎng) | 53 | 20 |
| 銀泰城 | 52 | 26 |
| 南七里站 | 49 | 22 |
| 華潤(rùn)萬(wàn)象城 | 48 | 22 |
三里庵拿下了商家數(shù)、分類數(shù)的雙料冠軍;但是,在下面的最好吃排行榜上卻看不到其蹤影了,說(shuō)明三里庵商圈的餐館量大卻質(zhì)不高。
最好吃的Top 15商圈(平均口味評(píng)分):
db.dianping.aggregate([
{$match: {"region": {$not: /.*[區(qū)縣].*/}}},
{$group: {_id: "$region", avgTaste: {$avg: "$taste"}, avgSurr: {$avg: "$surrounding"}, AvgSer: {$avg: "$service"}}},
{$sort: {"avgTaste": -1}},
{$limit: 15}])
| 商圈 | 平均口味 | 平均環(huán)境 | 平均服務(wù) |
|---|---|---|---|
| 臥牛山街道 | 8.6 | 8.7 | 8.7 |
| 電子16所 | 8.5 | 8.6 | 8.4 |
| 三河鎮(zhèn) | 8.4 | 8.1 | 8.8 |
| 華潤(rùn)萬(wàn)象城 | 8.1 | 8.5 | 8.2 |
| 淮河路步行街 | 8.09 | 8.0 | 8.0 |
| 天鵝湖萬(wàn)達(dá) | 8.0 | 8.0 | 8.0 |
| 東風(fēng)路 | 8 | 7.85 | 7.8 |
| 元一哈街 | 8 | 7.85 | 7.9 |
| 人民路 | 7.9 | 8.0 | 7.9 |
| 阜南路 | 7.9625 | 8.125 | 7.8 |
| 銀泰城 | 7.9 | 8.0 | 7.9 |
| 一中 | 7.9 | 7.9 | 7.9 |
| 包河萬(wàn)達(dá) | 7.9 | 8.0 | 7.9 |
| 潁上路 | 7.9 | 7.93 | 7.8 |
| 市府廣場(chǎng) | 7.89 | 7.7 | 7.7 |
臥牛山街道拿了頭冠,說(shuō)實(shí)在的,我還沒(méi)去吃過(guò)。

浙公網(wǎng)安備 33010602011771號(hào)