美食之旅
本文中使用的数据是一份美食APP的数据,用来进行数据分析、处理和可视化图形的制作,主要包含内容:
- 数据的多种处理操作
- 基于
pyecharts
和plotly_express
的饼图和柱状图制作 - 基于
Wordcloud
和pyecharts
的词云图制作 - 利用
jieba
分词,和去停用词后的词云图改进
导入库
本文中使用的库比较多,尤其是pyecharts
相关的,库包含:
- 数据处理相关
- pyecharts相关
- 词云图相关
- plotly相关
如果没有装,需要先装下需要的库才能运行
1 | # 数据处理相关 |
测试Pyecharts
使用官网的示例进行测试,有时候在jupyter notebook
可能出不来图,最好是先进行测试,保证在线出图
1 | from pyecharts.charts import Bar |
在jupyter notebook中能够看到图形说明pyecharts出图成功
数据基本信息
数据信息
数据的主要信息:
-
用户id: cus_id
-
评论时间: comment_time
-
评价: sml-str40,表示4颗星✨
-
评价内容: cus_comment
-
口味、环境、服务: taste、environment、service
-
店铺id:shopID
-
星星数量:stars
-
年、月、星期、时间:year/month/weekly/hour
-
评论长度: comment_len
总长度是32483*14的数据
导入数据
查看数据类型
1 | meishi.dtypes |
时间数据转换
将上面👆的时间数据comment_time(object)转成时间类型的数据
1 | # 将评论时间comment_time的字符串类型 object 类型转成时间类型 |
查看转变之后的数据类型:
如何将时间类型的数据指定成对应的数据格式:
1 | # 如何将时间类型的数据变成字符串形式,使用 strftime() 方法指定时间格式 |
是否有缺失值
查看数据缺失值的方法
1 | meishi.isnull().sum() |
数据处理
基于用户cus_id
呈现的结果是每个用户对多少个店家进行评价
- sophie嘉最多评价了8次
- 总共有27467个用户进行了评价
选取前20个用户进行绘图
1 | df_custom = meishi['cus_id'].value_counts().reset_index().rename(columns={'index':'name', 'cus_id':'number'})[:20] # 前20个用户 |
1 | # 绘图:基于Plotly |
基于时间comment_time
基于评论时间的处理
1 | px.scatter(meishi, x='cus_id', y='comment_time',color='year') |
基于星星(stars或comment_star)
对应关系
我们通过观察数据发现,这两个字段是一一对应的关系:
-
sml-str50:5.0
-
sml-str40:4.0
-
sml-str30:3.0
-
sml-str20:2.0
-
sml-str10:1.0
-
NAN:0.0
在这里我们直接分析stars字段即可
数据处理
绘图
基于plotly_express
绘制每个星星数量的占比饼图
1 | px.pie(meishi_star, names='stars', values='number',color='number') |
口味-环境-服务
这3个字段的评价分为6种情况:非常好、很好、好、一般、差、无
。我们对6种评价进行饼图和柱状图的绘制
- 饼图基于
plotly_express
- 柱状图基于
pyecharts
数据处理
1 | # 口味 |
绘图饼图
以口味字段为例,绘制评价的占比饼图
1 | # 口味-taste |
环境和服务的饼图绘制如法炮制,不具体阐述,直接看结果:
绘制柱状图
使用的是Pyecharts这个库绘制
1 | # 三个评价在一个坐标系中 |
采用堆叠的柱状图
1 | # 使用堆叠柱状图 |
基于评论内容cus_comment
我们对顾客的评论使用词云图的方式展示,找出他们全部评论中重点关注的词语
jieba分词
- 将全部评价内容放在一起
- jieba分词
基于WordCloud实现
- 首先使用的wordcloud中自带的图形形状
1 | from wordcloud import WordCloud |
- 使用自定义的图形形状
使用的是一个动漫图画,原始图形为:
1 | #!/usr/bin/env python |
自定义图形形状的结果如下图:
基于pyecharts
在使用pyecharts实现之前,我们先使用去停用词技术将上面👆词云图中的无效词语去掉,比如:所以、真的、不过
等,停用词表是自己在收集汇总的
- 统计单词个数
1 | # 统计每个词的个数 |
- 去停用词
使用的是自己收集的停用词表
1 | # 去停用词 |
- 停用词反选
使用反选符号~
,留下有用的信息
- 排序
1 | df = df.sort_values("number", ascending=False) |
- 生成绘图数据
使用zip
函数生成绘图的数据
1 | df_zip = list(zip(df['name'], df['number'])) |
- 去停用词绘图
在使用去停用词后,基于pyecharts
绘图
1 | # 绘图 |
总结
本文主要是对一组美食数据进行了处理和可视化,使用的库主要是pandas,以及Plotly_express和pyecharts两个可视化库,绘制的图形包含:
- 基于时间的散点图
- 不同的柱状图📊
- 饼图
- 不同方式的词云图