当前位置: 首页 > 后端技术 > Python

掘金15W沸点简单分析(二)

时间:2023-03-26 14:58:25 Python

一、数据预处理与存储得到原始数据后,接下来就是清洗与存储。1.1因为数据模型是简单的分析,所以只得到三块内容:topic、users、messages。具体如下:classPins(object):"""Boilingpoint"""msg_id=None#BoilingpointIDtopic_id=None#TopicIDtopic_title=None#Topicnameuser_id=None#UserIDuser_name=None#Usernamemsg_content=None#沸点内容msg_ctime=None#沸点创建时间msg_digg_count=0#沸点喜欢msg_comment_count=0#沸点注释计数def__repr__(self):return''%self.msg_id1.2数据库表创建数据库,使用MySQL。因为沸点内容msg_content包含emoji表情,所以建表时字符集编码需要使用utf8mb4。建表SQL语句如下:CREATESCHEMA`juejin`DEFAULTCHARACTERSETutf8mb4;CREATETABLE`juejin`.`pins`(`msg_id`VARCHAR(20)NOTNULLCOMMENT'消息ID',`topic_id`VARCHAR(20)NOTNULLCOMMENT'主题ID',`topic_title`VARCHAR(16)NOTNULLCOMMENT'主题名称',`user_id`VARCHAR(20)NOTNULLCOMMENT'用户ID',`user_name`VARCHAR(32)NOTNULLCOMMENT'用户昵称',`msg_content`TEXTCHARACTERSET'utf8mb4'NOTNULLCOMMENT'消息内容',`msg_ctime`VARCHAR(16)NOTNULLCOMMENT'消息创建时间戳',`msg_digg_count`INT(11)NOTNULLCOMMENT'messagelikes',`msg_comment_count`INT(11)NOTNULLCOMMENT'消息评论数',`msg_createdate`DATETIMENOTNULLDEFAULTnow()COMMENT'消息创建时间(与msg_ctime时间戳相同)',PRIMARYKEY(`msg_id`));1.3原始数据的读取和存储接上文,我们将所有的沸点数据都保存到了json_data文件夹中。只需要遍历读取该文件下的所有json文件,做简单的处理,然后存入数据库即可。示例代码如下:defread_all_data():"""遍历读取所有json数据,然后入库:return:"""pins_list=[]fordirpath,dirnames,filenamesinos.walk('./json_data'):filenames=sorted(filenames,key=lambda_:_[5:9])forfilenameinfilenames:filename=os.path.join('./json_data',filename)print(filename)withopen(filename,'r')aspins_file:items_data=json.loads(''.join(pins_file.readlines()))['data']foriteminitems_data:pins=Pins().parse_from_item(item)pins_list.append(pins)insert_db([pins])returnpins_list最后数据库表如下图所示。2.Superset简介官方描述如下:一个现代的、企业就绪的商业智能网络应用程序。先说说在公司项目使用过程中的感受吧。我们主要是将配置好的图表以IFrame的形式嵌入到其他页面中。单独做图表费时费力。①首先遇到的是权限问题。当时为了赶进度,直接在Public上设置了所有可读权限,但这在数据安全上存在隐患。②Superset可以轻松生成IFrame,但缺点是每次修改图表都需要更新IFrame代码。③因为比较通用,丢失了很多特性,或者很多功能不容易实现,比如数据下钻。④图表展示基于D3.js,感觉风格不符合国内喜好。好在是开源的,可以扩展echarts等图表。总体来说,配置和使用还是比较方便的。毕竟是免费的,所以不要要求太多。2.1安装根据官方文档,我们使用OS依赖来安装和使用Superset。大家可以按照文档一步步来,virtualenv的使用可以参考官方文档。直接用pip安装Superset就可以了,pipinstallapache-superset。当前最新版本为0.37.0。最后,我们加载官方示例作为系统,超集load_examples。然后启动开发服务器,`supersetrun-p8088--with-threads--reload--debugger`。理论上,如果我们打开http://127.0.0.1:8088/superset/dashboard/births/,可以看到如下图:2.2官方文档官方文档必读,http://superset.apache.org/3.基于Superset构建图表在制作图表之前,我们需要制定几个目标,即我们希望从数据中获取哪些主题。让我们用以下6个主题制作图表。每日沸点柱状图沸点总数随时间变化曲线图沸点占比话题饼状图TOP10沸点用户发帖数TOP25沸点点赞数TOP25沸点点赞数TOP253.0图表创建准备工作超集图表生产可直接生成数据库表。这里我们选择更通用的方式,从SQLLab->SQLEditor直接通过SQL获取目标数据。3.0.1新的数据库链接格式为SLQAlchemyURI,用过Python的同学肯定对这个ORM不陌生。有兴趣的可以看看官方文档:https://www.sqlalchemy.org/。第一次配置时,会抛出Couldnotloaddatabasedriver:mysql异常。执行pipinstallmysqlclient安装mysql驱动。3.1图表制作实例3.1.1每日沸点数柱状图3.1.2沸点总数随时间变化曲线3.1.3沸点主题比例饼图TOP10统计数据时剔除无主题沸点。3.1.4发帖最多的用户TOP253.1.5评论最多的沸点TOP253.1.6点赞最多的沸点TOP25不过,前两个沸点疑似被点赞。3.2使用创建的图表IV创建仪表板。后记后续考虑对数据多维度深入分析。比如用jieba分词+词云为沸点内容关键词制作词云。如果可能的话,在后台运行一个特殊的服务,定期捕获和更新沸点数据,并做一个大屏幕来显示数据。震惊?!所有题目1/4摸鱼源码已上传至GitHub、Gitee。