数据可视化-16. 日历图

server/2024/12/29 10:18:45/

目录

1. 日历图的概念

2. 日历图的适用场景

2.1 事件或活动的频率分析

2.2 数据的时间周期性分析

2.3 异常值检测

2.4 绩效监控

3. 日历图的缺陷

3.1 粒度受限于天数

3.2 数据密度过高时候难以解读

3.3 难以比较多个数据集

3.4 周期性较长的数据不易展示

4. 日历图的代码实现

4.1 基础日历图的代码实现

4.2 基础日历图的效果展示

4.3 聚合日历图的代码实现

4.4 聚合日历图的效果展示 


1. 日历图的概念

        在数据分析中,日历图(Calendar Heatmap/ Calendar Plot)是一种常用的可视化图表,用来展示时间序列数据在日历周期内的分布情况。它按照时间的顺序(通常是以天、周或月为单位)来展示数据,能够直观地揭示时间模式周期性变化

2. 日历图的适用场景

2.1 事件或活动的频率分析

        在商业领域展示每天的某种事件发生频率,例如网站访问量、客户订单量、报警次数等。在健康领域记录每天的运动时长、步数或其他健康指标。

2.2 数据的时间周期性分析

        确定特定时间段(如某个月、某一年)的模式和趋势,例如流量高峰期或淡季。

2.3 异常值检测

        通过颜色对比,快速定位数据的异常点,例如某天的数值特别高或特别低。

2.4 绩效监控

        追踪某个指标的日常表现,例如销售额、运动步数、代码提交次数。或者分析设备、服务或系统的资源每日利用率,例如服务器负载或网络带宽。

3. 日历图的缺陷

3.1 粒度受限于天数

        日历图通常以天为粒度,不适合展示更细粒度(如小时、分钟)或更粗粒度(如季度、年度)的数据。

3.2 数据密度过高时候难以解读

        当数据量非常大时(如分析多年的日数据),日历图可能显得杂乱,难以区分颜色和模式。

3.3 难以比较多个数据集

        日历图主要关注单一数据集的时间分布,多数据集的对比可能显得困难。

3.4 周期性较长的数据不易展示

        如果数据的周期性超出一年(如多年的数据),日历图可能无法有效展示全局趋势。

4. 日历图的代码实现

4.1 基础日历图的代码实现

python">import plotly.express as px
import pandas as pd
import numpy as np
import dash
from dash import html, dcc
import dash_bootstrap_components as dbcdef create_detailed_calendar_heatmap():"""创建一个详细的日历图,细化到每一天的数据返回日历图图形对象"""# 生成示例数据np.random.seed(42)dates = pd.date_range(start="2023-01-01", end="2023-12-31", freq='D')values = np.random.randint(0, 100, size=len(dates))# 创建数据框df = pd.DataFrame({'date': dates, 'value': values})# 提取年份和月份df['year'] = df['date'].dt.yeardf['month'] = df['date'].dt.monthdf['day'] = df['date'].dt.day# 创建透视表pivot_table = df.pivot_table(index='month', columns='day', values='value', aggfunc='mean')# 创建日历图fig = px.imshow(pivot_table,labels=dict(x="Day", y="Month", color="Value"),x=np.arange(1, 32),y=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],color_continuous_scale='Viridis')# 更新布局fig.update_layout(title='详细日历图示例',xaxis_title='日期',yaxis_title='月份',template='plotly_white')return figapp = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])app.layout = html.Div([html.H3("详细日历图展示", className="text-center mt-4 mb-3"),dcc.Graph(figure=create_detailed_calendar_heatmap())
])if __name__ == "__main__":app.run_server(debug=True, port=8051)

4.2 基础日历图的效果展示

4.3 聚合日历图的代码实现

        聚合日历图将一段时间内的数据进行汇总,然后以周、月或季度为单位进行展示。这种图表有助于观察数据在不同时间段内的总体趋势,适用于分析季节性变化或长期趋势。

python">import plotly.express as px
import pandas as pd
import numpy as np
import dash
from dash import html, dcc
import dash_bootstrap_components as dbcdef create_detailed_calendar_heatmap():"""创建一个详细的日历图返回日历图图形对象"""# 生成示例数据np.random.seed(42)dates = pd.date_range(start="2023-01-01", end="2023-12-31", freq='D')values = np.random.randint(0, 100, size=len(dates))categories = np.random.choice(['A', 'B', 'C', 'D'], size=len(dates))# 创建数据框df = pd.DataFrame({'date': dates, 'value': values, 'category': categories})# 创建日历图fig = px.density_heatmap(df, x='date', y='category', z='value',nbinsx=12,  # 每个月一个binnbinsy=4,   # 每个类别一个bincolor_continuous_scale='Viridis')# 更新布局fig.update_layout(title='详细日历图示例',xaxis_title='日期',yaxis_title='类别',template='plotly_white')return figapp = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])app.layout = html.Div([html.H3("详细日历图展示", className="text-center mt-4 mb-3"),dcc.Graph(figure=create_detailed_calendar_heatmap())
])if __name__ == "__main__":app.run_server(debug=True, port=8051)

4.4 聚合日历图的效果展示 


http://www.ppmy.cn/server/154170.html

相关文章

【elementplus】中文模式

设置中文 <el-date-picker v-model“userAddKey” type“daterange” style“width: 240px” start-placeholder“Start Date” end-placeholder“End Date” change“handleUserAddChange” /> 引入&#xff1a; import zhCn from “element-plus/es/locale/lang/zh-cn”…

WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)

项目中要用到样条曲线&#xff0c;必须过顶点&#xff0c;圆滑后还不能太走样&#xff0c;捣鼓一番&#xff0c;发现里面颇有玄机&#xff0c;于是把我多方抄来改造的方法发出来&#xff0c;方便新手&#xff1a; 如上图&#xff0c;看代码吧&#xff1a; -------------------…

3.基于 Temporal 的 Couchbase 动态 SQL 执行场景

在使用 Temporal 和 Go 语言 调用 Couchbase 执行 SQL 脚本时&#xff0c;可以通过动态参数传递到 SQL 脚本中&#xff0c;以下是完整实现的指南&#xff1a; 1. Temporal Workflow 的参数传递 Temporal 的 Workflow 支持接收动态参数&#xff0c;将这些参数传递给执行 SQL 的…

Hadoop中MapReduce过程中Shuffle过程实现自定义排序

文章目录 Hadoop中MapReduce过程中Shuffle过程实现自定义排序一、引言二、实现WritableComparable接口1、自定义Key类 三、使用Job.setSortComparatorClass方法2、设置自定义排序器3、自定义排序器类 四、使用示例五、总结 Hadoop中MapReduce过程中Shuffle过程实现自定义排序 一…

服务器如何划分空间?

服务器如何划分空间&#xff1f;服务器是存储和处理数据的核心&#xff0c;如何有效地划分服务器空间则直接关系到资源的利用效率和系统的性能。无论是大型企业的数据中心&#xff0c;还是小型网站的共享主机&#xff0c;合理的空间划分都至关重要。下面是聚名网关于服务器如何…

丢失的MD5

丢失的MD5 源代码&#xff1a; import hashlib for i in range(32,127):for j in range(32,127):for k in range(32,127):mhashlib.md5()m.update(TASCchr(i)O3RJMVchr(j)WDJKXchr(k)ZM)desm.hexdigest()if e9032 in des and da in des and 911513 in des:print des 发现给…

Qt之数据库使用(十四)

Qt开发 系列文章 - QSqlDatabase-SQLite&#xff08;十四&#xff09; 目录 前言 一、SQLite 二、SQLite使用 1.添加SQL 2.创建数据库 3.定义类及相关变量 4.相关功能函数 5.用户类定义 6.用户类使用 7.效果演示 8.SQLite数据库 总结 前言 ‌Qt支持的数据库包括SQ…

如何在 Spring Boot 微服务中设置和管理多个数据库

在现代微服务架构中&#xff0c;通常需要与多个数据库交互的服务。这可能是由于各种原因&#xff0c;例如遗留系统集成、不同类型的数据存储需求&#xff0c;或者仅仅是为了优化性能。Spring Boot 具有灵活的配置和强大的数据访问库&#xff0c;可以轻松配置多个数据库。在本综…