You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计各伤害原因月度事件频次并绘制多线折线图的实现方法

实现方案

你需要先按季度(每3个月)聚合统计各伤害原因的发生频次,再基于统计结果绘图即可,以下分别提供R和Python的实现代码:


R 实现方案

1. 数据预处理

# 加载依赖包
library(tidyverse)
library(lubridate)

# 预处理:转换日期格式、生成季度维度、清理异常分类值
df_clean <- df %>%
  mutate(
    Injury.Date.Time = ymd_hms(Injury.Date.Time),
    # 按季度向下取整,生成统一的季度时间标签
    quarter = floor_date(Injury.Date.Time, unit = "quarter"),
    # 清理伤害原因的空格和异常输入,比如示例中的"Motor Vehicleter"修正为标准值
    Injury.Cause = str_squish(Injury.Cause),
    Injury.Cause = case_when(
      str_detect(Injury.Cause, "Motor Vehicle") ~ "Motor Vehicle",
      TRUE ~ Injury.Cause
    )
  )

2. 按季度统计各伤害类型频次

# 生成长表统计结果,可直接用于绘图
df_quarter_stat <- df_clean %>%
  group_by(quarter, Injury.Cause) %>%
  summarise(freq = n(), .groups = "drop")

# 若需要你提到的宽表格式,执行以下转换即可
df_wide <- df_quarter_stat %>%
  pivot_wider(names_from = Injury.Cause, values_from = freq, values_fill = 0)

3. 绘制多线折线图

ggplot(df_quarter_stat, aes(x = quarter, y = freq, color = Injury.Cause, group = Injury.Cause)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  # X轴按3个月为间隔展示,标签格式为 年份+季度
  scale_x_date(date_breaks = "3 months", date_labels = "%Y Q%q") +
  labs(x = "时间(季度)", y = "发生频次", color = "伤害原因") +
  theme_bw()

Python 实现方案

1. 数据预处理

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 转换日期格式
df['Injury.Date.Time'] = pd.to_datetime(df['Injury.Date.Time'])
# 生成季度标签
df['quarter'] = df['Injury.Date.Time'].dt.to_period('Q').dt.to_timestamp()
# 清理伤害原因异常值
df['Injury.Cause'] = df['Injury.Cause'].str.strip()
df.loc[df['Injury.Cause'].str.contains('Motor Vehicle'), 'Injury.Cause'] = 'Motor Vehicle'

2. 按季度统计频次

# 统计各季度各伤害类型的频次
df_quarter_stat = df.groupby(['quarter', 'Injury.Cause']).size().reset_index(name='freq')

# 转换为宽表的代码
df_wide = df_quarter_stat.pivot(index='quarter', columns='Injury.Cause', values='freq').fillna(0).reset_index()

3. 绘制多线折线图

plt.figure(figsize=(12, 6))
sns.lineplot(data=df_quarter_stat, x='quarter', y='freq', hue='Injury.Cause', marker='o', linewidth=2)
# X轴按3个月间隔设置刻度
plt.xticks(pd.date_range(start=df_quarter_stat['quarter'].min(), end=df_quarter_stat['quarter'].max(), freq='3M'), rotation=45)
plt.xlabel('时间(季度)')
plt.ylabel('发生频次')
plt.legend(title='伤害原因')
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Ram6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:39:01