前言
目前“知乎”的用户群体非常广泛,很多机构、商家、个人都会使用“知乎”进行推广宣传。当我们想对知乎账号的内容进行分析时,知乎平台所提供的内容分析功能却不能满足更多个性化的分析需求,例如:
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" )
UNION
select 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" )
) t
GROUP 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_answer
where publish_time>'2022'
UNION
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_article
where 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'
UNION
select 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
UNION
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'
UNION
select 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`
UNION
select 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)通过导入模板的方式创建仪表板,仪表板创建成功后,逐个编辑仪表板中的视图,修改视图的数据集即可(点击此处下载模板)。
仪表板视图与数据集对应关系如下表:
视图(12个) | 数据集(8个) |
阅读总量 | 每日阅读总量数据 |
文章总数、文章阅读量分布 | 知乎_t_zhihu_article |
回答总数、回答阅读量分布 | 知乎_t_zhihu_answer |
文章阅读量占比、回答阅读量占比 | 文章回答占比 |
账号阅读量走势图 | 账号每日阅读增量 |
账号阅读总量对比图 | 账号回答文章阅读数 |
累计阅读量Top5、内容列表 | 文章回答汇总 |
今日阅读增长量排名Top10 | 今日文章阅读量增长数 |
五、总结
完成上面的步骤之后,一个简单的数据分析看板就制作完成了,我们得到了一个完整的“多知乎账号内容分析看板”,通过此仪表板你可以直观的看到所有账号的文章阅读量占比、回答阅读量占比,账号所有的内容列表,各个账号的阅读量走势,账号的阅读量排名情况,以及阅读量最高的文章有哪些等等。
这个方法不仅适用于对知乎账号的内容分析,同时也适用于各类账号的内容分析,只要你能拿到需要分析的数据,使用这些数据,结合DataEase进行数据分析,都可以制作数据分析看板。
标签:-%,同步,pv,created,DataEase,报错,publish,time,zhihu From: https://blog.51cto.com/u_15922912/6002357