一、任务要求
任务二:感冒高发期分析
【任务说明】
感冒是一种常见的急性上呼吸道病毒性感染性疾病,多由鼻病
毒、副流感病毒、呼吸道合胞病毒、埃可病毒、柯萨奇病毒、冠状病
毒、腺病毒等引起。临床表现为鼻塞、喷嚏、流涕、发热、咳嗽、头
痛等,多呈自限性。
现有某一医疗机构 10 年的患者诊断数据,请你根据诊断结果进
行感冒高发期分析。
【任务要求】
读取所需数据集后,对数据进行必要的清洗,绘制出感冒高发期
热力图,分析感冒高发期在每一年中的什么时候,并出具分析报告。
绘图要求如下:
1. 使用 PyEcharts 库绘制热力图;
2. 热力图横轴为年份,纵轴为月份;
3.使用 Django 框架在前端页面中渲染展示热力图;
二、代码部分
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import HeatMap
data = pd.read_csv('生病数据.csv')
print(f"len(data):{len(data)}")
data = data.dropna(subset=['year', 'month', 'diagnosis'])
cold = ['感冒', '流感', '发烧', '头疼']
data['diagnosis'] = data['diagnosis'].apply(lambda x: x.strip()) # 去除前后空值
print(f"")
cold_data = data[data['diagnosis'].isin(cold)]
cold_data = cold_data.sort_values(by='DiagnosisTime')
cold_data.reset_index(drop=True, inplace=True)
print(f"len(cold_data):{len(cold_data)}")
print(f"cold_data:{cold_data}")
cold_counts = cold_data.groupby(['year', 'month']).size().unstack(fill_value=0)
print(f"\ncold_counts:\n{cold_counts}")
def create_heatmap(cold_counts):
months = cold_counts.columns.tolist() # [1, 2, ..., 12]
years = cold_counts.index.tolist() # [2020, 2021, ..., 2024]
# 使用列表推导式构建 data 数据
data = [[months.index(month), years.index(year), cold_counts.loc[year, month]]
for month in months for year in years]
data = [[x, y, int(val)] for x, y, val in data]
# 创建基础热力图
heatmap_basic = (
HeatMap()
.add_xaxis(list(months))
.add_yaxis(
series_name="",
yaxis_data=list(years),
value=data,
label_opts=opts.LabelOpts(is_show=True, position="inside"),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="感冒高发期分析热力图"),
visualmap_opts=opts.VisualMapOpts(
min_=int(cold_counts.min().min()), # 最小值
max_=int(cold_counts.max().max()), # 最大值
is_piecewise=False # 不使用分段颜色映射
),
)
)
heatmap_basic.render("heatmap_basic.html")
create_heatmap(cold_counts)