【Python可视化大屏】“淄博烧烤”热评舆情分析大屏
一、开发背景
您好,我是 @马哥python说 ,一枚10年程序猿。
自从2023.3月以来,淄博烧烤现象持续占领热搜流量,体现了后疫情时代众多网友对人间烟火气的美好向往,本现象级事件存在一定的数据分析实践意义。
静态截图:

动态演示:

二、爬虫代码
2.1 爬微博列表
通过m端的搜索页面,爬取以淄博烧烤为关键词的微博id,获取到微博id的目的,是传给评论爬虫。
发送请求部分:
注意,type=60代表"热门",如下:

解析数据部分:
至此,已经获取到以淄博烧烤为关键词的微博id列表 id_list_list 了。
2.2 爬微博评论
从2.1章节获取到微博id列表之后,传入爬取微博评论函数 get_comments
这部分爬虫讲解可移步:

最终,爬取到的微博评论数据,示例如下:

说明:无论微博搜索页,还是微博评论页,都可以自定义设置max_page,满足自己的个性化数据量要求。
2.3 导入MySQL数据库
最核心的三行代码:
用create_engine创建数据库连接,格式为:
create_engine('数据库类型+数据库驱动://用户名:密码@数据库IP地址/数据库名称')
这样,数据库连接就创建好了。
然后,用pandas的read_csv函数读取csv文件。
最后,用pandas的to_sql函数,把数据存入MySQL数据库:
name='college_t2' #mysql数据库中的表名
con=engine # 数据库连接
index=False #不包含索引字段
if_exists='replace' #如果表中存在数据,就替换掉,另外,还支持append(追加数据)
非常方便地完成了反向导入,即:从csv向数据库的导入。
这个部分的讲解视频:

三、可视化代码
3.1 大标题
由于pyecharts组件没有专门用作标题的图表,我决定灵活运用Line组件实现大标题。
首先,找到一张星空图作为大屏背景图:

然后,在Line组件中加入js代码,加载背景图:
大标题效果如下:

3.2 词云图(含:加载停用词)
绘制词云图,需要先进行中文分词。既然分词,就要先设置停用词,避免干扰词影响分析结果。
这里采用哈工大停用词作为停用词词典。
这样,所有停用词就存入stopwords_list这个列表里了。
如果哈工大停用词仍然无法满足需求,再加入一些自定义停用词,extend到这个列表里:
现在就可以愉快的绘制词云图了,部分核心代码:
词云图效果:

3.3 玫瑰图(含:snownlp情感分析)
先对评论数据进行情感判定,采用snownlp技术进行情感打分及判定结果:
将情感分析结果用pandas保存到一个Excel文件里,如下:

绘制玫瑰图,部分核心代码:
玫瑰图效果:

3.4 柱形图-TOP10关键词
先根据词云图部分提取出TOP10高频词(过滤掉停用词之后的):
然后带入柱形图,部分核心代码:
柱形图效果:

3.5 折线图-讨论热度趋势
首先,根据评论时间统计出每天的微博评论数量:
然后,根据统计数据画出折线图,部分核心代码:
折线图效果:

3.6 地图-IP分布
由于IP属地字段都包含"来自"两字,先进行数据清洗,将"来自"去掉:
然后统计各个IP属地的数量,方便后续带入地图可视化:
下面开始绘制地图,部分核心代码:
地图效果,如下:

当然,地图中的颜色,都是自己设置的十六进制颜色,可以根据自己的喜好更改。
3.7 Page组合大屏
最后,也是最关键的一步,把以上所有图表组合到一起,用Page组件,并且选用DraggablePageLayout方法,即拖拽的方式,组合图表:
本代码执行完毕后,打开临时html并排版,排版完点击Save Config,把json文件放到本目录下。
再执行最后一步,调用json配置文件,生成最终大屏文件。
至此,所有代码执行完毕,生成了最终大屏html文件。
四、彩蛋-多种颜色主题
分享一个小技巧,我设置了一键更换颜色主题:
只需更换ThemeType参数,即可实现一键更换主题!
4.1 INFOGRAPHIC主题

4.2 MACARONS主题

4.3 SHINE主题

4.4 WALDEN主题

4.5 WESTEROS主题

4.6 WHITE主题

4.7 WONDERLAND主题

更多颜色主题等待小伙伴去发掘!
五、技术总结
整体技术开发流程,如下:
requests 爬虫发送请求
json 解析返回数据
re 正则表达式清洗文本
pandas保存csv文件
sqlalchemy 保存MySQL数据
pyecharts 可视化开发
snownlp 情感分析
jieba 中文分词
pyecharts+page 组合大屏
flask 启动网页服务
六、在线体验
为了方便大家体验可视化动态交互效果,我把此大屏部署到了服务器,请移步:
http://81.70.253.63:8888
七、演示视频
效果演示视频:

八、获取完整源码
爱学习的小伙伴,本次分析过程的完整python源码及结果数据,我已打包好,并上传至我的微信公众号"老男孩的平凡之路",后台回复"淄博烧烤大屏"即可获取。

我是@马哥python说 ,持续分享python干货中!