欢迎光临散文网 会员登陆 & 注册

Power BI仿豆瓣读书日历型热力图

2023-04-17 10:01 作者:wujunmin  | 我要投稿

豆瓣在个人主页上提供了热力地图总结,颜色越深代表当日标记读完的书越多。方框的多少代表读书(含影音)的频率。Power BI其实也能实现类似的功能,甚至实用性上更胜一筹。本文仅以读书记录为例尝试操作。


该热力图除了用深浅颜色表示读书数量,还可以悬窗动态提示当日阅读情况,信息包含:当天是几号,截止当天全年累计读了多少本书,本月读了多少本书,并显示当天标记的图书封面。那么如何实现呢?

当日标记读完一本


当日标记读完两本




一、数据准备


在豆瓣个人主页的“已读”记录中,可以看到你在豆瓣标记的所有图书信息。将需要的书名、阅读日期、图片链接等信息批量下载下来。



因豆瓣对网抓有限制,该信息无法像抓取电影数据那样使用Power BI直接下载,读者需要使用其他网抓手段批量下载。如果不懂网抓也没关系,可以直接将全部页面手动复制粘贴到Excel,稍微清洗即可使用。


获得的规范数据如下图所示:


将整理好的数据导入Power BI,并对格式进行规范设置,注意“封面”字段的数据类别设置为图像URL:


“书籍链接”字段如后期需跳转豆瓣,则设置为Web URL:



二、建模


首先,新建一个日期表,包含完整年份,并添加年、月、周等必要字段。可以使用CALENDAR函数新建,也可Excel手工新建。


周指全年周排序,公式如下:

第几周 = WEEKNUM('日期表'[Date],2)

月份字段有两个,一个是自然月,一个是图表月。后续在作图的时候使用图表月,图表月的计算列公式是:

图表月 = MAXX(FILTER('日期表',EARLIER('日期表'[第几周])='日期表'[第几周]),'日期表'[月])

这样做的原因是,如上图,2020年第5周,有的日期在2月份,有的日期在1月份。如果采用自然月份作图,会产生下图中的问题:因为月份区隔,第5周被分割成了两列。因此单独设立图表月,使得跨月周取最大月份值作为唯一值。

接着,将日期表和准备好的豆瓣数据关联:


最后,新建需要的基础度量值:


数量 =DISTINCTCOUNT(data[书籍链接])

年度累计 = TOTALYTD([数量],'日期表'[Date]) 月度累计 = TOTALMTD([数量],'日期表'[Date])

提示信息 = "全年累计"&[年度累计]&"本书,"&"本月累计"&[月度累计]&"本书"


三、作图


图表市场有日历热力地图Calendar Visual,加载到Power BI后,字段如下设置:



生成的热力图如下图所示:

该图表非常遗憾,只能设置显示颜色,没有更多功能。如需实现文章开始提到的悬窗信息,则需要使用矩阵实现

如下字段设置新建矩阵:

默认的矩阵显示的是数据,热力图不需要数据,需要的是有颜色的方块。

因此,我们可以将背景色和字体设置为相同颜色,即可隐藏具体数字。

另外,颜色还有按数字大小变化的需求,新建颜色度量值,阅读数量越多,颜色越深:

颜色 =SWITCH 

( [数量], 0, "#FFFFFF", 1, "#CBECB4", 2, "#86D665", "#11AD2B" )

豆瓣的颜色代码可通过colorpix获取。点击上图条件格式中的“高级控件”,按照“颜色”度量值变化颜色。

写到这里,热力图基本做完了,但仍有个小问题,比方第6周没有读书,图表不会显示,直接从第5周跳到第7周:

这样不符合日历常识,选中“第几周”,鼠标右键,勾选“显示无数据的项目”即可避免这一问题:


接着制作悬浮页面,新建空白页,页面大小选择“工具提示”;日期和读书信息使用卡片图;书籍封面使用第三方图表Image Grid。



图表制作完成后,将该页面的“工具提示”功能打开:



返回热力图页面,“工具提示”选择刚刚设置好的“工具提示”页面:


以上即是整个制作过程。

Power BI仿豆瓣读书日历型热力图的评论 (共 条)

分享到微博请遵守国家法律