探索性分析

数据是3W大众点评八大热门糖水店的评论,包含字段:顾客id、评论时间、评分、评论内容、口味、环境、服务、店铺ID

#引入库
import pandas as pd
from matplotlib import pyplot as plt
import pymysql
import seaborn as sns
from wordcloud import WordCloud, STOPWORDS
%matplotlib inline

数据库读入数据

我们使用pymysql库连接mysql数据库,pd.read_sql函数直接通过连接读取数据库数据

#连接数据库,读入数据
db = pymysql.connect("localhost",'root','root','dianping') #服务器:localhost,用户名:root,密码:(空),数据库:TESTDB
sql = "select * from dzdp;"
data = pd.read_sql(sql,db)
db.close()

数据概要

查看数据大小以及基础信息

data.shape
(32483, 14)
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32483 entries, 0 to 32482
Data columns (total 14 columns):
cus_id          32483 non-null object
comment_time    32483 non-null object
comment_star    32483 non-null object
cus_comment     32474 non-null object
kouwei          32483 non-null object
huanjing        32483 non-null object
fuwu            32483 non-null object
shopID          32483 non-null object
stars           26847 non-null object
year            32483 non-null object
month           32483 non-null object
weekday         32483 non-null object
hour            32483 non-null object
comment_len     32483 non-null object
dtypes: object(14)
memory usage: 3.5+ MB
data.head()
cus_id comment_time comment_star cus_comment kouwei huanjing fuwu shopID stars year month weekday hour comment_len
0 迷糊泰迪 2018-09-20 06:48:00 sml-str40 南信 算是 广州 著名 甜品店 吧 好几个 时间段 路过 都 是 座无虚席 看着 餐单 上 ... 非常好 518986 4.0 2018 9 3 6 184
1 稱霸幼稚園 2018-09-22 21:49:00 sml-str40 中午 吃 完 了 所谓 的 早茶 回去 放下 行李 休息 了 会 就 来 吃 下午茶 了 服... 很好 很好 很好 518986 4.0 2018 9 5 21 266
2 爱吃的美美侠 2018-09-22 22:16:00 sml-str40 冲刺 王者 战队 吃遍 蓉城 战队 有 特权 五月份 和 好 朋友 毕业 旅行 来 了 广州... 很好 很好 很好 518986 4.0 2018 9 5 22 341
3 姜姜会吃胖 2018-09-19 06:36:00 sml-str40 都 说来 广州 吃 糖水 就要 来南信 招牌 姜撞奶 红豆 双皮奶 牛 三星 云吞面 一楼 ... 非常好 很好 很好 518986 4.0 2018 9 2 6 197
4 forevercage 2018-08-24 17:58:00 sml-str50 一直 很 期待 也 最 爱 吃 甜品 广州 的 甜品 很 丰富 很 多样 来 之前 就 一直... 非常好 很好 很好 518986 5.0 2018 8 4 17 261

查看标签列’comment_star’的情况,并进行处理标签数据

#查看情况
data['comment_star'].value_counts()
sml-str40    10849
sml-str50     9067
NAN           5636
sml-str30     5152
sml-str20      982
sml-str10      797
Name: comment_star, dtype: int64
#数据清洗
data.loc[data['comment_star'] == 'sml-str1','comment_star'] = 'sml-str10'
data['stars'] = data['comment_star'].str.findall(r'\d+').str.get(0)
data['stars'] = data['stars'].astype(float)/10
sns.countplot(data=data,x='stars')
<matplotlib.axes._subplots.AxesSubplot at 0x12be0396978>

可以看出好评和差评的分布并不平衡,好评占比大大高于差评,其中4分评价最高

sns.boxplot(data=data,x='shopID',y='stars')
<matplotlib.axes._subplots.AxesSubplot at 0x12bdf8e8400>

可以看出各家店铺的评价分布不尽相同,但都有一个特点,评分都集中在好评和中评上

数据预处理

时间特征提取

我们可以从时间中提取到年、月、日、星期、小时等常见特征

data.comment_time = pd.to_datetime(data.comment_time.str.findall(r'\d{4}-\d{2}-\d{2} .+').str.get(0))
data['year'] = data.comment_time.dt.year
data['month'] = data.comment_time.dt.month
data['weekday'] = data.comment_time.dt.weekday
data['hour'] = data.comment_time.dt.hour
#各星期的小时评论数分布图
fig1, ax1=plt.subplots(figsize=(14,4))
df=data.groupby(['hour', 'weekday']).count()['cus_id'].unstack()
df.plot(ax=ax1, style='-.')
plt.show()

周一到周日的小时评论分布较为类似,评论的高峰出现在,中午11点、下午4点以及晚上10点,周六晚活跃的用户更多,可能是第二天可以睡懒觉的缘故,哈

#评论的长短可以看出评论者的认真程度
data['comment_len'] = data['cus_comment'].str.len()
fig2, ax2=plt.subplots()
sns.boxplot(x='stars',y='comment_len',data=data, ax=ax2)
ax2.set_ylim(0,600)
(0, 600)

可以看出1分、5分的的评论长度更短,看来短一点的评论才更有力度

文本数据预处理

1.**去除非文本数据:**可以看出,爬虫获取的数据非常多类似“\xa0”的非文本数据,而且都还有一些无意义的干扰数据,如结尾的“收起评论”

data['cus_comment'][5]
'甜品 一直 是 我 的 心头肉 既然 来 了 广州 不吃 甜品 是 不会 罢休 的 可惜 还有 好几家 没有 办法 前往 南信 牛奶 甜品 专家 是 非常 火 的 甜品店 一 万多条 的 评论 就 能 看出 之 火爆 到 店 是 中午 点 左右 基本 是 爆满 还好 三楼 的 时候 刚好 有 一桌 起来 了 不然 还 真要 站 着 等 一会 先点 单 付钱 入座 等待 红豆 双皮奶 元份 等待 时 长 大概 分钟 食客 实在 太多 了 可 选择 冰热 夏天 当然 要 吃 冰 的 吃 的 有点 小 恶心 又'
#除去非文本数据和无意义文本
data['cus_comment'] = data['cus_comment'].str.replace(r'[^\u4e00-\u9fa5]','').str.replace('收起评论','')

2.**中文分词:**中文文本数据处理,怎么能离开中文分词呢,我们使用jieba库,简单又好用。这里我们把文本字符串处理为以空格区隔的分词字符串

#中文分词
import jieba
import importlib
import sys
importlib.reload(sys)
data['cus_comment'] = data['cus_comment'].astype(str).apply(lambda x:' '.join(jieba.cut(x)))
data['cus_comment'].head()
0    南信 算是 广州 著名 甜品店 吧 好几个 时间段 路过 都 是 座无虚席 看着 餐单 上 ...
1    中午 吃 完 了 所谓 的 早茶 回去 放下 行李 休息 了 会 就 来 吃 下午茶 了 服...
2    冲刺 王者 战队 吃遍 蓉城 战队 有 特权 五月份 和 好 朋友 毕业 旅行 来 了 广州...
3    都 说来 广州 吃 糖水 就要 来南信 招牌 姜撞奶 红豆 双皮奶 牛 三星 云吞面 一楼 ...
4    一直 很 期待 也 最 爱 吃 甜品 广州 的 甜品 很 丰富 很 多样 来 之前 就 一直...
Name: cus_comment, dtype: object

3.**去除停用词:**文本中有很多无效的词,比如“着”,“和”,还有一些标点符号,这些我们不想在文本分析的时候引入,因此需要去掉,因为wordcloud和TF-IDF都支持停用词,因此就不额外处理了

词云展示

from wordcloud import WordCloud, STOPWORDS #导入模块worldcloud
from PIL import Image #导入模块PIL(Python Imaging Library)图像处理库
import numpy as np #导入模块numpy,多维数组
import matplotlib.pyplot as plt #导入模块matplotlib,作图
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']#作图的中文
matplotlib.rcParams['font.serif'] = ['KaiTi']#作图的中文infile = open("stopwords.txt",encoding='utf-8')
stopwords_lst = infile.readlines()
STOPWORDS = [x.strip() for x in stopwords_lst]
stopwords = set(STOPWORDS) #设置停用词
def ciyun(shop_ID='all'):texts = data['cus_comment']if shop_ID == 'all':text = ' '.join(texts)else:text = ' '.join(texts[data['shopID']==shop_ID])wc = WordCloud(font_path="msyh.ttc",background_color = 'white',max_words = 100,stopwords = stopwords,max_font_size = 80,random_state =42,margin=3) #配置词云参数wc.generate(text) #生成词云plt.imshow(wc,interpolation="bilinear")#作图plt.axis("off") #不显示坐标轴
data['shopID'].unique()
array(['518986', '520004', '1893229', '520356', '3456244', '3179845','2447053', '521698'], dtype=object)
ciyun('520004')

#导出数据
data.to_csv('data.csv',index=False)

大众点评探索性数据分析相关推荐

  1. 大数据看美食 | 大众点评餐厅数据分析报告!

    就在上个周末,生活在朝阳区的我被一个世纪难题所困扰,那就是:中午吃什么?晚上吃什么?于是乎突发奇想,就想要统计一下朝阳区美食店的总体水平,哪些精品餐厅我还不知道,酒香不怕巷子深,我要把你们统统挖出来! ...

  2. 北京 mysql 饭店_11城大众点评美食数据分析(mysql版)

    一.数据来源 本次数据来源于大众点评11个城市的推荐美食数据.每个城市均爬取了城市推荐美食的50页数据,但由于部分数据爬取时出现问题,最终每个城市数据量并不一致,在720条到760条之间,分析时应主要 ...

  3. 大众点评热门餐厅抓取与数据分析

    大众点评热门餐厅抓取与数据分析 大众点评抓取与分析  背景 有没有一种去其他城市旅游的时候想吃地方特色,但是却又不知道到该去哪里吃的感觉呢?反正我是有这种感觉,尤其是不想去其他城市却在泡面中度过,无法 ...

  4. mysql 文本 挖掘_GitHub - myseve/dianping_textmining: 大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目...

    大众点评评论文本挖掘 [TOC] 一.爬虫 整体思路 爬取大众点评十大热门糖水店的评论,爬取网页后从html页面中把需要的字段信息(顾客id.评论时间.评分.评论内容.口味.环境.服务.店铺ID)提取 ...

  5. mysql 文本 挖掘_GitHub - cwff520/dianping_textmining: 大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目...

    大众点评评论文本挖掘 [TOC] 一.爬虫 整体思路 爬取大众点评十大热门糖水店的评论,爬取网页后从html页面中把需要的字段信息(顾客id.评论时间.评分.评论内容.口味.环境.服务.店铺ID)提取 ...

  6. mysql 文本挖掘_GitHub - HuiHuiT/dianping_textmining: 大众点评评论文本挖掘,包括点评数据爬取、数据清洗入库、数据分析、评论情感分析等的完整挖掘项目...

    大众点评评论文本挖掘 [TOC] 一.爬虫 整体思路 爬取大众点评十大热门糖水店的评论,爬取网页后从html页面中把需要的字段信息(顾客id.评论时间.评分.评论内容.口味.环境.服务.店铺ID)提取 ...

  7. 用Python获取大众点评上长沙口味虾店铺信息,并进行数据分析

    口味虾又叫麻辣小龙虾.在夏天的时候,邀上三五好友,来上几盘口味虾,搭配上啤酒,肥宅的生活就这么快乐的开始了,味道麻辣爽口,一口下去就想吃下一口!在湖南,没有吃上口味虾的夏天都是不完整的. 那么湖南的吃 ...

  8. python大众点评网实训报告中的参考文献_Python数据分析:大众点评数据进行选址...

    Python Python开发 Python语言 Python数据分析:大众点评数据进行选址 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时 ...

  9. 为了部落 来自艾泽拉斯勇士的python爬虫学习心得 爬取大众点评上的各种美食数据并进行数据分析

    为了希尔瓦娜斯 第一个爬虫程序 csgo枪械数据 先上代码 基本思想 问题1 问题2 爬取大众点评 URL分析 第一个难题 生成csv文件以及pandas库 matplotlib.pyplot库 K- ...

最新文章

  1. charles代理以及关于其抓取https信息的操作
  2. 网站关键词优化从这几方面下手效果会更好!
  3. 25个自适应菜单教程和脚本
  4. codeforces 496 div3(A-E1)(JAVA)
  5. AutoMapper在asp.netcore中的使用
  6. 栅格像元做地理坐标映射后的坐标值是像元中心点还是其他位置?
  7. 信息学奥赛一本通 2021:【例4.6】最大公约数
  8. python中的self怎么理解_python中的self理解
  9. 20180929 北京大学 人工智能实践:Tensorflow笔记04
  10. border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题
  11. linux mysql库文件路径设置_MySQL_linux修改mysql数据库文件的路径,mysql更改数据文件的存放路径 - phpStudy...
  12. 【ActiveMQ】ActiveMQ在CentOS的搭建与使用
  13. Spark内核解析之四:Spark 任务调度机制
  14. 最近在写个人网站,忙碌中。。。
  15. 调用百度地图API进行当前位置定位失败解决方法
  16. FigDraw 8. SCI 文章绘图之饼图 (Pieplot)
  17. 大连腾飞五期的企业_云存储腾飞的五个想法
  18. 计算机水平毕业研究生7分落户,应届生们注意啦!只要72分就可以落户上海
  19. python画拓扑图权值是线条粗细_拓扑图线条流动效果
  20. “熵”详细学习笔记——什么是熵?有什么性质?联合熵等其他熵的作用

热门文章

  1. MySQL冷备份过程
  2. 高性价比真无线蓝牙耳机哪款好?520情侣礼物推荐
  3. Leetcode刷题100天—524. 通过删除字母匹配到字典里最长单词(双指针)—day38
  4. android恢复出厂设置的源码解析
  5. 三诺+n20g+微型计算机,绝对超值 三诺N20G传承版新品仅卖199
  6. Netty学习笔记(1) NIO基础-3
  7. java 下溯造型_Java 的上溯造型和下溯造型以及举例,以及判断参数等指向的类
  8. 视频在手机浏览器关闭默认自动放大播放的问题(安卓)
  9. 区块链——物联网解决方案平台(转载)
  10. myeclipse git 上下箭头表示什么