一、数据预处理与入库

获取到了原始数据之后,下一步就是荡涤入库。

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在摸鱼

源码已上传至GitHub, Gitee。