1LSGO软件技术团队
贡献人:李金原
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。
If you like the content here, the greatest helpyou can give meis forwarding, so tell your friends and encourage them to learn together.
我们已经从网站获取了原始数据,见如何利用Python 爬取【币乎】的数据,并把数据存储在数据库中,见如何利用 Python+MySQL 存储爬取的【币乎】数据。但这并不是我们的最终目的。我们需要对其进行导出、分析、再处理。
数据提取
首先,本次实战的是目的是分析每日文章,则提取数据的范围应是 每日 24 小时,在上篇图文中,我们已经将数据库中的时间格式设置为 "20180801 00:00:00" 这样的形式,则假设提取日期为 2018年 8 月 1 日发表的文章。代码如下:
其中列表 在运行时可以替换为 或者 输入,来实现每日分析和定期分析的目的,此处只做一个例子。该函数提取了 8 月 1 日每个板块各自的数据。
各板块高赞文章
因为上一个函数针对的是各板块自身,那么我们可以直接对提取的数据进行排序,得出文章赞数排名:
这里值得一提的便是 和 函数,我们希望对这一个嵌套列表每一项的第 5 个数据即赞数进行排序, 函数提供了这个功能, 关键字指定了排序规则,同时它还可以指定多个规则用作排序,最后一个参数 则是很常见的逆序排法。
文章总排行
因为提取数据时提取的是每一个版块,如果想得到全部文章数据,只需要加一个循环就可以:
此时, 即是当日文章的全部数据,分析排序方法则和上个函数一样。
同样的,如果想针对留言数、收益、踩数进行排序,只需更改 函数即可。
数据可视化
我们已经得到了当前文章的全部数据,自然想要对其进行可视化处理,达到直观比较各版块的效果。最终制作的效果图如上。
图中共有三个圆环,由内向外依次表示版块文章数占比、版块总赞数占比、版块总收益占比。取文章数前 8 名为大板块,其余合并为 “其他” 版块。
首先依旧是提取我们想要的数据:
此处的 是各版块的数据提取。再计算 和 时,采用了“列表解析”的方法,避免了多次用循环的用法。 函数意为保留两位小数。
接下来循环调用 函数,得出画图所需的数据列表,再进行取前 8 和“其他”的操作。
最后一步,就是画图,绘图采用的是 pyecharts (http://pyecharts.org/#/zh-cn/prepare) 这个库,是国人调用 制作的 绘图库,十分好用。 我们往其中填入参数即可。
在 中,还可以用此数据画多张图来进行可视化,此处不再过多介绍。
常见问题
在数据库插入时,常常因为字符集编码问题而导致插入失败,也是本次实战最令人头疼的地方。
因为 MySQL 默认的字符集时 ,我们需要将其转变为 编码,但是后来发现 还是偶尔会报错,仔细查看 json 文件,发现问题,部分文章的标题为 。此时 虽然能表示,但是在数据库中,默认 最大值为三个字节,而 为 四个字节,参照 这篇文章 (https://www.cnblogs.com/h--d/p/5712490.html) 成功解决。
总结
至此,放假时制定的一个小目标全部完成。LSGO软件技术团队是一支以输出倒逼输入、强调用以致学、以结果为导向的团队,认同我们的小伙伴们可以加入进来,一起学习成长!在微信公众平台回复关键词:学习路径,可以查看假期的学习任务哟!See You!
经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。
欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。
本微信公众平台长期系统化提供有关机器学习、软件研发、教育及学习方法、数学建模的知识,并将以上知识转化为实践。拒绝知识碎片化、耐心打磨技能、解决实际问题是我们的宗旨和追求。
领取专属 10元无门槛券
私享最新 技术干货