kaggle学习笔记-餐厅数据挖掘

Zomato Complete EDA and LSTM model

背景

分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素,每个餐厅的总评级,班加罗尔是这样一个城市,拥有超过12,000家餐厅,餐厅供应来自世界各地的菜肴。每天都有新的餐馆开业,这个行业还没有饱和,需求也在与日俱增。然而,尽管需求不断增加,新餐馆却很难与老牌餐馆竞争。大多数餐厅都供应同样的食物。班加罗尔是印度的IT之都。这里的大多数人主要依靠餐馆的食物,因为他们没有时间自己做饭。由于对餐馆的需求如此巨大,因此研究一个地方的人口统计学就变得很重要。

在一个地方哪种食物更受欢迎?
整个地方的人都喜欢吃素吗?如果是,那么该地区是否有特定的人群居住?耆那教徒、马尔瓦尔人、古吉拉特邦人,他们大多是素食主义者。这些类型的分析可以通过数据来完成,通过研究因素,如:

  • 餐厅的位置•食品的大致价格主题餐厅与否
  • 在那个城市的哪个地方提供这种菜系的餐馆最多?那些努力得到附近最好的菜系
  • 的人的需求?是否是一个以自己的食物而闻名的特定社区?

导入模块

import numpy as np 
import pandas as pd
import os
import seaborn as sns
print(os.listdir("../input"))
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import plotly.offline as py
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode
init_notebook_mode(connected=False)
from wordcloud import WordCloud
from geopy.geocoders import Nominatim
from folium.plugins import HeatMap
import folium
from tqdm import tqdm
import re
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM, SpatialDropout1D
from sklearn.model_selection import train_test_split
from nltk import word_tokenize
from sklearn.feature_extraction.text import TfidfVectorizer
import gensim
from collections import Counter
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import matplotlib.colors as mcolors
from sklearn.manifold import TSNE
from gensim.models import word2vec
import nltk
# Any results you write to the current directory are saved as output.

加载数据

df=pd.read_csv("../input/zomato.csv")

数据集格式

kaggle学习笔记-餐厅数据挖掘_第1张图片

数据集描述

kaggle学习笔记-餐厅数据挖掘_第2张图片
列描述

Url包含zomato网站中餐厅的Url

address包含班加罗尔餐厅的地址

Name包含餐厅的名称

Online_order餐厅是否提供在线点餐

Book_table表图书选项是否可用

Rate包含餐厅的整体评分,满分为5分

Votes包含截至上述日期该餐厅的评分总数

Phone包含餐厅的电话号码

Location包含餐厅所在的社区

Rest_type餐厅类型

餐馆里人们喜欢的菜

菜系的食物风格,用逗号分隔

Approx_cost(对于两人)包含两人用餐的大致费用

Reviews_list包含餐厅评论的元组列表,每个元组

Menu_item包含餐厅中可用的菜单列表

listd_in (type)餐的类型

listd_in (city)包含餐馆所在的社区

kaggle学习笔记-餐厅数据挖掘_第3张图片
正如你所看到的Cafe coffee day,Onesta,Just Bake在班加罗尔及其周边拥有最多的门店。
这是相当有趣的,我们将在后面逐一检查。
kaggle学习笔记-餐厅数据挖掘_第4张图片
30444
21273
接受与不接受网上订单
正如明确指出的那样,班加罗尔近60%的餐馆接受网上订餐。
近40%的餐厅不接受网上订餐。
这可能是因为这些餐厅无法支付给zomoto网上订单的佣金。如果Zomato想要增加在线服务客户的餐厅数量,他们可能会考虑给他们更多的好处。

kaggle学习笔记-餐厅数据挖掘_第5张图片

在班加罗尔,几乎90%的餐馆不提供订座服务。
在印度,一般的餐厅都找不到订座设施,通常只有五星级餐厅才提供订座服务。
我们将进一步检查。

kaggle学习笔记-餐厅数据挖掘_第6张图片
几乎50%以上的餐厅的评级在3到4之间。
评分超过4.5的餐厅非常罕见。

cost_dist=df[['rate','approx_cost(for two people)','online_order']].dropna()
cost_dist['rate']=cost_dist['rate'].apply(lambda x: float(x.split('/')[0]) if len(x)>3 else 0)
cost_dist['approx_cost(for two people)']=cost_dist['approx_cost(for two people)'].apply(lambda x: int(x.replace(',','')))
plt.figure(figsize=(10,7))
sns.scatterplot(x="rate",y='approx_cost(for two people)',hue='online_order',data=cost_dist)
plt.show()

kaggle学习笔记-餐厅数据挖掘_第7张图片

plt.figure(figsize=(6,6))
sns.distplot(cost_dist['approx_cost(for two people)'])
plt.show()

kaggle学习笔记-餐厅数据挖掘_第8张图片

我们可以看到,如果分布偏左。
这意味着几乎90%的餐馆提供的食物预算低于1000印度卢比(15美元)。

kaggle学习笔记-餐厅数据挖掘_第9张图片
是的,你可以观察到两个类别的中位数是不同的。
接受在线订餐的餐厅往往会得到更多的顾客投票,因为通过zomato应用程序,每点一份订单后都会弹出一个评级选项。

kaggle学习笔记-餐厅数据挖掘_第10张图片
毫无疑问,班加罗尔是印度的科技之都,忙碌和现代生活的人们更喜欢速食。
我们可以观察到速食类型的餐馆占主导地位。

kaggle学习笔记-餐厅数据挖掘_第11张图片
两个人一顿饭的费用中位数大约是400英镑。
50%的餐厅双人单餐收费在300 - 650美元之间。

我实现了一个简单的过滤机制,可以在班加罗尔的任何地方找到最好的经济型餐厅。
你可以传递位置和餐厅类型作为参数,函数将返回餐厅的名称。

return_budget('BTM',"Quick Bites")

kaggle学习笔记-餐厅数据挖掘_第12张图片
kaggle学习笔记-餐厅数据挖掘_第13张图片
我们可以看到BTM,HSR和Koranmangala第5街区的餐厅数量最多。
BTM以拥有5000多家餐厅而占据主导地位。

data.head(10)

kaggle学习笔记-餐厅数据挖掘_第14张图片
kaggle学习笔记-餐厅数据挖掘_第15张图片
我们已经使用地理数据找到了数据集中列出的每个位置的经纬度。
这是用来绘制地图的。

热力图

basemap

很明显,餐馆往往集中在班加罗尔市中心地区。
当我们离开市中心时,杂乱的餐厅就会减少。
因此,潜在的餐馆企业家可以参考这一点,找到适合他们创业的好地方。

kaggle学习笔记-餐厅数据挖掘_第16张图片
我们可以观察到,北印度人、中国人、南印度人和比亚尼人最常见。
这是否意味着班加罗尔比南印度更受北印度文化的影响?

kaggle学习笔记-餐厅数据挖掘_第17张图片
kaggle学习笔记-餐厅数据挖掘_第18张图片
在南班加罗尔地区看到一群北印度餐馆很有趣!
这可能表明这些地区有更多的北印度人居住。
kaggle学习笔记-餐厅数据挖掘_第19张图片
kaggle学习笔记-餐厅数据挖掘_第20张图片
它们往往遍布整个班加罗尔。
南印度美食往往集中在班加罗尔市中心附近。

kaggle学习笔记-餐厅数据挖掘_第21张图片
我们可以看到,Empire餐厅、Beijing bites和Mani’s dum biriyani是班加罗尔最受欢迎的休闲餐饮连锁店。
我们将进一步检查……

kaggle学习笔记-餐厅数据挖掘_第22张图片
我们可以看到,Mani’s dum biriyani餐厅有一半的餐厅位于班加罗尔市中心。
帝国餐厅目前在整个班加罗尔。
Mani’s dum Biriyani在乌尔苏尔有12家分店,是一个地方最多的。

kaggle学习笔记-餐厅数据挖掘_第23张图片
令人惊讶的是,五星鸡肉在快餐餐厅中占据了主导地位,超过了著名的达美乐披萨和麦当劳。
五星鸡是正大集团食品公司的一个分支,正大集团是一家泰国跨国企业集团,在农业和食品行业拥有超过120亿美元的业务。五星鸡的特色炸鸡。

kaggle学习笔记-餐厅数据挖掘_第24张图片
kaggle学习笔记-餐厅数据挖掘_第25张图片
毫不奇怪,Cafe coffee day餐厅在班加罗尔的其他连锁咖啡馆中占据主导地位。
Cafe coffee day在班加罗尔有96家分店。
caf咖啡日于1996年作为一家零售餐厅开始。第一个CCD出口于1996年7月11日在卡纳塔克邦班加罗尔的旅路设立。

kaggle学习笔记-餐厅数据挖掘_第26张图片
词云图挖掘
kaggle学习笔记-餐厅数据挖掘_第27张图片
kaggle学习笔记-餐厅数据挖掘_第28张图片
在本节中,我们将继续准备评审数据框架。
我们将提取每个餐厅的评论和评级,并用它创建一个数据框架。

all_ratings = []

for name,ratings in tqdm(zip(df['name'],df['reviews_list'])):
    ratings = eval(ratings)
    for score, doc in ratings:
        if score:
            score = score.strip("Rated").strip()
            doc = doc.strip('RATED').strip()
            score = float(score)
            all_ratings.append([name,score, doc])
rating_df=pd.DataFrame(all_ratings,columns=['name','rating','review'])
rating_df['review']=rating_df['review'].apply(lambda x : re.sub('[^a-zA-Z0-9\s]',"",x))

kaggle学习笔记-餐厅数据挖掘_第29张图片

kaggle学习笔记-餐厅数据挖掘_第30张图片
kaggle学习笔记-餐厅数据挖掘_第31张图片
我们将分别对正面评论和负面评论进行主题建模,以了解两种类型之间的差异。

作为第一步,我们将根据所提供的评级将评论分为负面和正面。
评分低于2.5的评论被归类为负面,高于2.5的评论被归类为正面。

rating_df['sent']=rating_df['rating'].apply(lambda x: 1 if int(x)>2.5 else 0)

现在,

我们将删除停顿词
把每个单词按词序排列
创建语料库
标记他们

现在我们将使用Termfrequency Inverse doc frequency(Tfidf)对标记进行矢量化。

主题关键词字数统计

当涉及到主题中的关键字时,关键字的重要性(权重)很重要。除此之外,这些词在文档中出现的频率也很有趣。

让我们在同一图表中绘制单词计数和每个关键字的权重。

你要注意那些在多个主题中出现的单词,以及那些相对频率大于权重的单词。通常情况下,这样的话被证明不那么重要。我在下面绘制的图表是在开始时将几个这样的单词添加到停止单词列表并重新运行训练过程的结果。

counter=Counter(corpus)

kaggle学习笔记-餐厅数据挖掘_第32张图片
kaggle学习笔记-餐厅数据挖掘_第33张图片
我们可以清楚地观察到这两种评论的区别
所使用的词语清晰可辨。
在负面评论中使用的词语显然是批评。
在积极的评论中使用的词显然是赞赏的。

t分布随机邻域嵌入是一种用于探索高维数据的非线性降维算法。它将多维数据映射到适合人类观察的两个或多个维度。在t-SNE算法的帮助下,下次处理高维数据时,您可能需要绘制更少的探索性数据分析图。

在本节中,我们将在二维空间中可视化评论中使用的单词。

为此,我们将首先对每个评论进行词序化和标记化,并从中构建一个语料库。

现在我们将使用word2vec将每个单词表示为一个向量。

tsne_plot(model)

kaggle学习笔记-餐厅数据挖掘_第34张图片
哇,我们可以在2D空间中观察到正面评价中使用的所有形容词。
kaggle学习笔记-餐厅数据挖掘_第35张图片
kaggle学习笔记-餐厅数据挖掘_第36张图片
情感分析是通过计算确定一篇文章是积极的、消极的还是中立的过程。它也被称为观点挖掘,获取说话者的观点或态度。

数据预测

对用户提供的评论进行情感分析。我们必须以适当的格式准备资料。我们将根据每个用户提供的评分将评论划分为正面和负面。因此,如果给出的评分小于2.5,我们将把评论映射为负面,如果评分大于2.5,我们将把评论映射为正面

rating_df['sent']=rating_df['rating'].apply(lambda x: 1 if int(x)>2.5 else 0)

接下来,我们将标记数据并对评论进行矢量化,以将其提供给我们的模型。

kaggle学习笔记-餐厅数据挖掘_第37张图片
现在我们将对目标变量进行编码。pd。Get_dummies用于on-hot编码。
33%的数据保留用于测试我们的模型

batch_size = 3200
model.fit(X_train, Y_train, epochs = 5, batch_size=batch_size)

kaggle学习笔记-餐厅数据挖掘_第38张图片
我们将使用1500行来验证我们的模型。我们选择准确性作为我们的评价标准。

在这里插入图片描述

你可能感兴趣的:(kaggle,学习,笔记,数据挖掘,深度学习,神经网络,人工智能)