前言
有两份广州的美食数据来自 A,B 两个网站,以及一份它们的地理信息数据(源码和数据都在文末~):
为了给去广州的游玩的人提供一些美食的参考,制作一个 BI 仪表盘,需求如下:
广州美食地图分布(广州地图)
哪个行政区美食最多(饼图)
集中在哪些商圈(前十)(柱状图)
星级分布(圆环图)
美食类型(条形)
推荐美食词云(词云)
评论数,人均价格,口味评分,环境评分,服务评分的相关性(热力图)
综合评分=(口味评分+环境评分+服务评分)/3 与人均价格关系(散点图)
制作可视化仪表盘
数据预处理
导入库并查看数据:
A,B 两数据的结构是一样的,但有两列的列名不同,我们修改 A 的列名后,并把 A 数据中【人均价格】列中的【元】去掉,再纵向合并两个数据集,并去重,接着他们的地理信息数据以【店铺ID】为键进行连接:
根据我们的需求,选择需要用到的列并查看有无缺失值需要处理:
从结果上看并没有缺失值,接下来就先制作每一个需求的图表。
图表制作
绘制的每一张图表,需要封装成函数给仪表盘使用,每一张图表没有使用默认的主题,而是使用了一种紫色的主题。
广州美食地图分布:选取经纬度,以及店铺名称,在广州地图上绘制散点,一个点代表一家店铺:
美食主要集中在天河,越秀,海珠,荔湾,番禺,白云,黄埔区。
哪个行政区美食最多:需要先计算各个行政区的美食数量,在绘制饼图:
可以看到美食数量最多行政区的是天河区。
集中在哪些商圈:需要先计算各个出现商圈的次数,在绘制柱状图:
美食数量最多的商圈是珠江新城。
星级分布:需要先计算各个出现的星级的数量,在绘制圆环图:
四星与准五星占了大多数。
美食类型:计算各个类型的数量,绘制条形图:
从结果看,店铺美食类型为西餐的是比较多的。
推荐美食:在每个店的数据中,都有推荐美食,把所有美食连接起来,并计算词频,绘制词云:
评论数,人均价格,口味评分,环境评分,服务评分的相关性:绘制他们两两的相关性热力图,越偏红,正相关性越强:
综合评分与人均价格关系:综合评分=(环境评分+口味评分+服务评分)/3,新增一列保存起来,绘制它与人均价格散点图:
接下来就把这些图合成仪表盘
仪表盘
pyecharts 官网文档:
http://pyecharts.org/#/zh-cn/composite_charts?id=page%ef%bc%9a%e9%a1%ba%e5%ba%8f%e5%a4%9a%e5%9b%be
我们上面的绘图,都是封装成函数的,接下来使用下面代码调用绘制函数(page.add 中就是,这里折叠了):
上面代码就绘制图表并保存为 html 文件,需要注意的是 18-19 行为注释。
调用绘制函数后生成了一个 page.html 文件,里面包含了所有图表,通过拖拽图表设计成我们想要布局的样子(下图是随便放的)然后点击左上角【save config】保存布局的 json 文件:
修改代码,17 行注释,18-19 行取消注释,因为我们已经生成了图表不需要再生成一次,在生成一次的话图表 id 会改变,那刚刚下载布局文件就用不了了:
page.html 为生成的所有图表的文件
page.json 为下载的布局文件
仪表盘.html 为布局好的的仪表盘文件
打开仪表盘.html:
这样我们就完成了 pyecharts 仪表盘的制作。
源码和数据集:https://github.com/5zjk5/guanzgzhou_food