写点什么

数据分析原来还可以这么搞?

  • 2023-01-11
    山东
  • 本文字数:3438 字

    阅读完需:约 11 分钟

前言

目前“知乎”的用户群体非常广泛,很多机构、商家、个人都会使用“知乎”进行推广宣传。当我们想对知乎账号的内容进行分析时,知乎平台所提供的内容分析功能却不能满足更多个性化的分析需求,例如:

1、仅支持单账号的数据分析,不支持多账号数据横向对比。

2、数据分析维度太少,且无法支持分析维度的个性化设置和拓展。

针对于以上存在的问题,经过不断的探索,我找到了一种解决方案:开源项目"知乎数据分析小助手" + 开源数据可视化分析工具 DataEase。

本方案利用"知乎数据分析小助手"进行数据获取,使用 DataEase 进行数据分析,通过两者的结合最终实现对多个知乎账号的多维度内容分析。

一、数据分析成果展示



二、环境准备

1、部署 DataEase

此部分可以参考 DataEase 官方文档进行操作,我使用的是 Linux 单机离线部署。

附部署教程地址:​​离线安装 - DataEase 文档​

2、"知乎数据分析小助手"数据配置

(1)创建数据库

基于 DataEase 的数据库进行创建,若使用 DataEase 的默认 mysql 镜像,可参考以下步骤:


# 进入mysql容器docker exec -it mysql mysql -u root -p# 输入密码Password123@mysql# 创建数据库create database demo# 查看数据库show databases;# 退出
复制代码


若 DataEase 使用的是外部数据库地址,可在外部数据库中执行以下建库命令:


# 创建数据库create database demo# 查看数据库show databases;
复制代码


(2)配置知乎账号信息


# 进入DataEase的配置文件目录cd /opt/dataease/conf# 创建新的配置文件 demo.properties,具体配置可参考开源项目说明(附项目地址)vim demo.properties
复制代码


“知乎数据分析小助手”项目地址:


3、部署开源项目“知乎数据分析小助手”,有 Docker 镜像部署和 JAR 包部署两种部署方式(建议采用镜像部署)

(1)Docker 镜像部署(​​点击此处下载镜像压缩包​​),下载后按以下步骤进行操作


# 将压缩包传至服务器的 /opt 目录下,解压压缩包unzip zhihu-data-analysis.zip# 为脚本赋权chmod 777 installer.sh# 执行部署脚本 install.sh(执行脚本之前请确保 DataEase 已部署完成,且 DataEase 部署目录为默认的 /opt/dataease 目录,且配置文件demo.properties已配置完成)./installer.sh
复制代码



(2)JAR 包部署(​​点击此处下载JAR 包​​),JAR 包部署需要自行安装 JDK 环境(具体如何安装配置 JDK 可自行百度),配置好 JDK 环境变量后,执行命令启动程序


nohup java -jar demo-v1.0.jar &
复制代码


(注:也可自己下载项目源码进行打包部署)

三、获取并存储知乎账号的数据

1、定时同步,默认每天零点触发执行,可修改 cron 表达式进行配置



2、接口调用

全量同步请求接口地址:http://IP 地址:8099/test/sync/zhiHu



单用户同步请求接口地址:http://IP 地址:8099/test/sync/zhiHu/用户名



四、使用 DataEase 对数据进行分析

1、添加数据源



2、添加数据集(以下 sql 数据集仅作参考,可视个人情况进行修改)

(1)添加文章、回答两个数据表的数据库数据集




(2)添加“今日文章阅读量增长数” SQL 数据集

select t.title,sum(t.curPv) growthPv,t.user,t.created_time,t.publish_time from (    select answer1.pv-answer2.pv as curPv,answer1.title,answer1.user,answer1.`created_time`,answer1.publish_time from t_zhihu_answer  answer1      JOIN t_zhihu_answer answer2 on DATE_FORMAT(answer2.`created_time`,"%Y-%m-%d") = DATE_SUB(DATE_FORMAT(answer1.`created_time`,"%Y-%m-%d"),INTERVAL 1 DAY)      and answer1.title = answer2.title      and answer1.user = answer2.user    UNION    select article1.pv-article2.pv as curPv,article1.title,article1.user,article1.`created_time`,article1.publish_time from t_zhihu_article  article1      JOIN t_zhihu_article article2 on DATE_FORMAT(article2.`created_time`,"%Y-%m-%d") = DATE_SUB(DATE_FORMAT(article1.`created_time`,"%Y-%m-%d"),INTERVAL 1 DAY)      and article1.title = article2.title      and article1.user = article2.user  ) t  WHERE t.publish_time>'2022' and DATE_FORMAT(t.`created_time`,"%Y-%m-%d" )= CURDATE()  GROUP BY t.title
复制代码

(3)添加“每日阅读总量数据” SQL 数据集


select sum(t.sumpv) as sumpv, t.date from (select sum(pv) as sumpv,DATE_FORMAT( `created_time`, "%Y-%m-%d" ) as date from t_zhihu_answer WHERE publish_time>'2022' GROUP BY DATE_FORMAT( `created_time`, "%Y-%m-%d" )UNIONselect sum(pv) as sumpv,DATE_FORMAT( `created_time`, "%Y-%m-%d" ) as date from t_zhihu_article WHERE publish_time>'2022' GROUP BY DATE_FORMAT( `created_time`, "%Y-%m-%d" )) tGROUP BY t.date
复制代码


(4)添加“文章回答汇总” SQL 数据集


select id,pv,play,`show`,upvote,`comment`,`like`,collect,`share`,reaction,re_pin,title,publish_time,created_time,link,'回答' as type,`user` from t_zhihu_answerwhere publish_time>'2022'UNIONselect id,pv,play,`show`,upvote,`comment`,`like`,collect,`share`,reaction,re_pin,title,publish_time,created_time,link,'文章' as type,`user` from t_zhihu_articlewhere publish_time>'2022'ORDER BY pv desc
复制代码


(5)添加“文章回答占比” SQL 数据集


select sum(IF(t.type='回答',0,t.pv)) as '回答',sum(t.pv) sumPv,'回答' as type from (select id,pv,play,`show`,upvote,`comment`,`like`,collect,`share`,reaction,re_pin,title,publish_time,created_time,link,'回答' as type from t_zhihu_answer WHERE publish_time>'2022'UNIONselect id,pv,play,`show`,upvote,`comment`,`like`,collect,`share`,reaction,re_pin,title,publish_time,created_time,link,'文章' as type from t_zhihu_article WHERE publish_time>'2022') tUNIONselect sum(IF(t.type='文章',0,t.pv)) as '文章',sum(t.pv) sumPv,'文章' as type from (select id,pv,play,`show`,upvote,`comment`,`like`,collect,`share`,reaction,re_pin,title,publish_time,created_time,link,'回答' as type from t_zhihu_answer WHERE publish_time>'2022'UNIONselect id,pv,play,`show`,upvote,`comment`,`like`,collect,`share`,reaction,re_pin,title,publish_time,created_time,link,'文章' as type from t_zhihu_article WHERE publish_time>'2022') t
复制代码


(6)添加“账号回答文章阅读数” SQL 数据集


select sum(pv) as sumpv,`created_time`, `user`,'回答' as type from t_zhihu_answer WHERE publish_time>'2022' GROUP BY DATE_FORMAT( `created_time`, "%Y-%m-%d" ),`user`UNIONselect sum(pv) as sumpv,`created_time`, `user`,'文章' as type from t_zhihu_article WHERE publish_time>'2022' GROUP BY DATE_FORMAT( `created_time`, "%Y-%m-%d" ),`user`
复制代码


(7)添加“账号每日阅读增量” SQL 数据集

select tt.* from (  select SUM(t.sumpv) as addPvOneDay,t.date,t.`user` from (  select sum(pv) as sumpv,DATE_FORMAT( `created_time`, "%Y-%m-%d" ) as date, `user` from t_zhihu_answer WHERE publish_time>'2022' GROUP BY DATE_FORMAT( `created_time`, "%Y-%m-%d" ),`user`  UNION  select -sum(pv) as sumpv,DATE_FORMAT(DATE_ADD(`created_time`,INTERVAL 1 DAY), "%Y-%m-%d") as date, `user` from t_zhihu_answer WHERE publish_time>'2022' GROUP BY DATE_FORMAT( `created_time`, "%Y-%m-%d" ),`user`  ) t   GROUP BY t.date,t.`user`) tt WHERE tt.addPvOneDay>=0 and tt.date!='2022-09-26' and tt.date!='2022-09-27'
复制代码

3、制作仪表板(导入模板)

(1)通过导入模板的方式创建仪表板,仪表板创建成功后,逐个编辑仪表板中的视图,修改视图的数据集即可(​​点击此处下载模板​​)。





仪表板视图与数据集对应关系如下表:

五、总结

完成上面的步骤之后,一个简单的数据分析看板就制作完成了,我们得到了一个完整的“多知乎账号内容分析看板”,通过此仪表板你可以直观的看到所有账号的文章阅读量占比、回答阅读量占比,账号所有的内容列表,各个账号的阅读量走势,账号的阅读量排名情况,以及阅读量最高的文章有哪些等等。

这个方法不仅适用于对知乎账号的内容分析,同时也适用于各类账号的内容分析,只要你能拿到需要分析的数据,使用这些数据,结合 DataEase 进行数据分析,都可以制作数据分析看板。

用户头像

还未添加个人签名 2022-12-26 加入

还未添加个人简介

评论

发布
暂无评论
数据分析原来还可以这么搞?_数据分析_搞大屏的小北_InfoQ写作社区