数据处理与可视化案例:用Python分析新冠肺炎趋势

数据处理与可视化案例:用Python分析新冠肺炎趋势 🌐📊

作者注:本文使用小学生都能理解的日常比喻,手把手教你用代码处理数据和画图,附带超详细代码注解!无需编程基础,跟着做就会!


案例背景:分析疫情数据

假设你是一位社区志愿者,需要向居民展示疫情蔓延趋势。你从疾控中心获得了2020年1-3月某地区的每日数据(CSV格式):

日期,新增确诊,新增康复,现存病例
2020-01-20,5,0,5
2020-01-21,12,0,17
...

目标:

  1. ✔️ 处理不完整数据
  2. ✔️ 找出新增确诊最多的3天
  3. ✔️ 绘制动态变化趋势图

一、数据处理:给数据做“大扫除”🧹

🛠 工具准备:Pandas库

就像用Excel整理表格,Python的Pandas(简称「熊猫」库)是数据处理的瑞士军刀

# 安装必备工具(只需运行一次)
!pip install pandas matplotlib

📥 第一步:读取数据

import pandas as pd

# 像打开文件夹一样读取数据
data = pd.read_csv('covid_data.csv') 
print("原始数据预览:")
print(data.head())  # 显示前5行,像Excel的预览功能

🧼 第二步:数据清洗

常见问题处理:

# 1. 处理缺失值(如空单元格)
# 用前后两天的平均值填充(比如把空值变成左右日期的平均数)
data = data.fillna(method='ffill').fillna(method='bfill')

# 2. 删除重复行(像Excel的"删除重复值")
data = data.drop_duplicates()

# 3. 日期格式转换(确保系统能识别日期)
data['日期'] = pd.to_datetime(data['日期']) 

二、数据分析:让数据开口说话 📈

🔎 关键指标分析

# 找最严重的三天 -> 像班级排名,选出前三名
top3_days = data.nlargest(3, '新增确诊')  
print("\n新增确诊最多三天:")
print(top3_days[['日期', '新增确诊']])

# 计算治愈率 -> 做个算术题
data['治愈率'] = data['新增康复'] / data['新增确诊'] * 100

三、图形绘制:数据变动画 🎨

🛠 工具准备:Matplotlib库

画图就像在纸上绘制统计图表,这里使用Python的"Matplotlib"(数学绘图库)

📈 1. 绘制双指标发展趋势图

import matplotlib.pyplot as plt

plt.figure(figsize=(12,6))  # 设置画布大小(单位:英寸)

# 绘制折线图:就像用彩笔连点成线
plt.plot(data['日期'], data['新增确诊'], 
         color='red', 
         label='新增确诊', 
         marker='o')  # 每个数据点用圆圈标记

plt.plot(data['日期'], data['新增康复'], 
         color='green', 
         linestyle='--', 
         label='新增康复')

# 添加装饰元素
plt.title('2020年新冠病例趋势 📅', fontsize=14)  # 设置标题
plt.xlabel('日期 📆')  # X轴标签
plt.ylabel('人数 👥')  # Y轴标签
plt.legend()  # 显示图例(右上角的小图标说明)
plt.grid(True, linestyle=':')  # 添加虚线网格

# 自动旋转日期标签,避免重叠
plt.gcf().autofmt_xdate()

plt.show()

效果图预览:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


📊 2. 绘制治愈率柱状图

plt.figure(figsize=(10,5))

# 绘制柱状图:每个柱子对应一天的数值
bars = plt.bar(data['日期'], 
               data['治愈率'], 
               color='skyblue', 
               alpha=0.7)  # 透明度设置为70%

# 在柱子顶部添加数值标签
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height,
             f'{height:.1f}%',  # 显示到小数点后1位
             ha='center', va='bottom')  # 水平居中,垂直底部对齐

plt.title('每日新冠治愈率柱状图 💊')
plt.xticks(rotation=45)  # X轴标签旋转45度
plt.ylim(0, 120)  # Y轴范围从0到120%
plt.show()

四、实战技巧:让图表会说话 💡

🎨 图表美化技巧

# 设置全局字体(支持中文字体)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 添加注释重点信息
max_day = data.loc[data['新增确诊'].idxmax()]
plt.annotate(f'最高峰!\n{max_day["新增确诊"]}人',
             xy=(max_day['日期'], max_day['新增确诊']),
             xytext=(30,30),  # 文本偏移量
             textcoords='offset points',
             arrowprops=dict(arrowstyle='->', color='darkred'))

👩💻 自动生成HTML报告

# 把图表和表格保存为网页
with open('report.html', 'w', encoding='utf-8') as f:
    f.write("<h1>新冠疫情分析报告</h1>")
    f.write(top3_days.to_html())  # 表格转成HTML
    # 插入图片(需提前保存图片)
    f.write('<img src="./covid_trend.png" width="800">')

五、常见问题解答 ❓

Q:如何安装Python环境?
A:推荐使用Anaconda(下载地址:https://www.anaconda.com/),安装时勾选"Add to Path"

Q:数据里出现负数怎么办?
A:在读取数据后添加验证:

if (data.select_dtypes(include=['number']) < 0).any().any():
    print("发现异常负值!请检查数据准确性")

Q:怎样才能让图表动起来?
A:使用Plotly库即可轻松创建交互式图表,示例代码:

import plotly.express as px
fig = px.line(data, x='日期', y=['新增确诊','新增康复'])
fig.show()  # 会出现可缩放、悬停提示的动态图

扩展训练:
👉 尝试在代码中加入病死率 = 死亡病例 / 确诊病例
:使用Plotly库即可轻松创建交互式图表,示例代码:

import plotly.express as px
fig = px.line(data, x='日期', y=['新增确诊','新增康复'])
fig.show()  # 会出现可缩放、悬停提示的动态图

扩展训练:
👉 尝试在代码中加入病死率 = 死亡病例 / 确诊病例
👉 用散点图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值