掘金15W沸点简单分析(二)
一、数据预处理与入库
获取到了原始数据之后,下一步就是清洗入库。
1.1 数据模型
因为是简单分析,所以只获取话题、用户、消息三块内容。具体如下:
class Pins(object):
"""
沸点
"""
msg_id = None # 沸点ID
topic_id = None # 话题ID
topic_title = None # 话题名称
user_id = None # 用户ID
user_name = None # 用户名
msg_content = None # 沸点内容
msg_ctime = None # 沸点创建时间
msg_digg_count = 0 # 沸点点赞数
msg_comment_count = 0 # 沸点评论数
def __repr__(self):
return '<pins: %s>' % self.msg_id
1.2 数据库表创建
数据库的话,使用MySQL。因为沸点内容msg_content中含有emoji表情,所以在建表时字符集编码需要使用utf8mb4。
建表SQL语句如下:
CREATE SCHEMA `juejin` DEFAULT CHARACTER SET utf8mb4 ;
CREATE TABLE `juejin`.`pins` (
`msg_id` VARCHAR(20) NOT NULL COMMENT '消息ID',
`topic_id` VARCHAR(20) NOT NULL COMMENT '主题ID',
`topic_title` VARCHAR(16) NOT NULL COMMENT '主题名称',
`user_id` VARCHAR(20) NOT NULL COMMENT '用户ID',
`user_name` VARCHAR(32) NOT NULL COMMENT '用户昵称',
`msg_content` TEXT CHARACTER SET 'utf8mb4' NOT NULL COMMENT '消息内容',
`msg_ctime` VARCHAR(16) NOT NULL COMMENT '消息创建时间戳',
`msg_digg_count` INT(11) NOT NULL COMMENT '消息点赞数',
`msg_comment_count` INT(11) NOT NULL COMMENT '消息评论数',
`msg_createdate` DATETIME NOT NULL DEFAULT now() COMMENT '消息创建时间(同msg_ctime时间戳)',
PRIMARY KEY (`msg_id`));
1.3 原始数据的读取及入库
接上文,我们已经将所有沸点数据保存至json_data文件夹下。只需要将该文件下所有的json文件遍历读取出来,在做简单的处理,然后存入数据库即可。
示例代码如下:
def read_all_data():
"""
遍历读取所有json数据,然后入库
:return:
"""
pins_list = []
for dirpath, dirnames, filenames in os.walk('./json_data'):
filenames = sorted(filenames, key=lambda _: _[5: 9])
for filename in filenames:
filename = os.path.join('./json_data', filename)
print(filename)
with open(filename, 'r') as pins_file:
items_data = json.loads(''.join(pins_file.readlines()))['data']
for item in items_data:
pins = Pins().parse_from_item(item)
pins_list.append(pins)
insert_db([pins])
return pins_list
最终,数据库表如下图所示。
二、Superset简介
官方是这样描述的:A modern, enterprise-ready business intelligence web application.
先说下公司项目使用过程中的感受。我们主要是将配置好的图表以IFrame的形式嵌入到其他页面中,单独做图表的话是比较费时费力的。
- ①首先遇到的就是权限问题,当时为了赶进度直接对Public设置全部可读权限,但这有数据安全的隐患。
- ②Superset可以很方便的生成IFrame,但是不好的地方就是每次修改完图表后都需要更新IFrame代码。
- ③因为做的比较通用,所以丢失了很多特性,或者说很多功能是不太好实现的,比如数据下钻等。
- ④图表展示是基于
D3.js,感觉风格有些不符合国内的偏好,好在开源,可以扩展如echarts等图表。
整体来说,配置和使用还是比较方便的。毕竟是免费的,不要要求太高。
2.1 安装
根据官方文档,咱们使用OS dependencies的方式安装和使用Superset。
根据文档一步步走即可,virtualenv的使用可参考官方文档。
直接使用pip安装Superset即可,pip install apache-superset。当前最新版本为0.37.0。
最后,我们将官方示例加载如系统,superset load_examples。然后启动开发服务器即可,superset run -p 8088 --with-threads --reload --debugger 。
理论上,我们打开http://127.0.0.1:8088/superset/dashboard/births/,即可看到如下图所示:
2.2 官方文档
官方文档一定要看,http://superset.apache.org/
三、基于Superset构建图表
在制作图表前,咱们需要先制定几个目标,也就是想要从数据中获取什么主题。
我们就以下面6个主题来制作图表吧。
- 每日沸点数柱形图
- 沸点总数随时间的变化曲线图
- 沸点话题占比饼图TOP10
- 沸点发表数最多的用户TOP25
- 评论数最多的沸点TOP25
- 点赞数最多的沸点TOP25
3.0 图表制作准备工作
Superset图表的制作可以由数据库表直接生成。这里咱们选择更通用的一种方式,由SQL Lab -> SQL Editor通过SQL来直接获取目标数据。
3.0.1 新增数据库链接
格式为SLQAlchemy URI,使用过Python的同学对这款ORM肯定不会陌生。感兴趣的可以了解一下,官方文档:https://www.sqlalchemy.org/。
首次配置时,会抛出Could not load database driver: mysql异常。执行pip install mysqlclient安装mysql驱动即可。
3.1 图表制作示例
3.1.1 每日沸点数柱形图
3.1.2 沸点总数随时间的变化曲线图
3.1.3 沸点话题占比饼图TOP10
该数据统计时,将没有话题的沸点进行了排除。
3.1.4 发表数最多的用户TOP25
3.1.5 评论数最多的沸点TOP25
3.1.6 点赞数最多的沸点TOP25
不过这前两条沸点有刷赞的嫌疑。
3.2 使用已创建的图表制作Dashboard
四、后记
后续考虑对数据进行多维度、深层次的分析。如使用jieba分词+wordcloud对沸点内容关键词制作词云等。
可能的话,后台专门跑个服务对沸点数据进行定时抓取和更新,并制作数据大屏进行展示。
震惊😱!全部话题 竟有1/4在摸鱼
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Mysql的优化策略,提升PHP的运行效率
为了提升PHP的运行效率,程序员不光需要写出逻辑清晰,效率很高的代码,还要能对query语句进行优化。虽然我们对数据库的读取写入速度上却是无能为力,但在一些数据库类扩展像memcache、mongodb、redis这样的数据存储服务器的帮助下,PHP也能达到更快的存取速度,所以了解学习这些扩展也是非常必要。 大型存储方面优化 数据库主从复制和读写分离 1、master将改变记录到二进制日志中,slave将master的二进制拷贝到它的中继日志中,重新将数据返回到它自己的数据中,达到复制主服务器数据的目的。 主从复制可以用作:数据库负载均衡、数据库备份、读写分离等功能。 2、配置主服务器master 修改my.ini/my.conf [mysqld] log-bin=mysql-bin //启用二进制日志 server-id=102 //服务器唯一ID 3、配置从服务器slave log-bin=mysql-bin //启用二进制日志 server-id=226 //服务器唯一ID 4、在主服务器上授权从服务器 GRANT REPLICATION SLAVE ON ...
-
下一篇
jeecms x1.5.0 发布,基于数据运营网站
此次jeecms x1.5版本希望帮助用户打造一个基于数据来做网站运营的快速开发平台;在等保三级标准的基础上,结合国家对涉密信息系统分级保护相关标准,加入了针对性的控制及设置,进一步提高了jeecms系统的安全防护能力,助力政府及企业分级保护测评通过,jeecms x1.5中也增加了绩效管理功能,支持绩效考核规则个性化定制,支持排除周末、节假日及任意指定日期的人性化设置,灵活、全面、准确的达到绩效考核目的,为政府及企业绩效考核提供更多便利。 1、分级保护:对于要进行分保控制的涉密信息系统,只需要开启jeecms中的分级保护功能,系统将会自动进入分保控制模式并达到国家分级保护标准要求,实现真正的一键开启。部分界面效果如下: 分级保护设置 用户密级设置 2、绩效管理:个性化定制的绩效管理功能,可针对部门、用户、站点、栏目等不同的对象定制不同的绩效考核规则;支持对任意时间周期内进行绩效评分,并支持排除周末、节假日及任意指定日期的人性化设置,灵活、全面、准确的达到绩效考核目的。部分界面效果如下: 设置绩效考核规则 选择考核时间 绩效详情 3、内容发布统计:从栏目、用户、组织、以及站点等维度,了...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- MySQL表碎片整理
- CentOS关闭SELinux安全模块
- MySQL数据库中FOR UPDATE的使用

微信收款码
支付宝收款码