python如何绘制疫情图

1. 疫情图简介

随着新型冠状病毒的爆发,人们开始关注疫情的实时情况。疫情图就是一种用于展示疫情数据的图表形式,可以直观地表示疫情的传播趋势和分布情况。

在疫情图中,通常会使用地图、折线图、条形图等形式呈现,同时也可以根据数据的不同维度进行分类展示,例如按照国家、省份、城市等划分。作为一种重要的数据可视化工具,疫情图在全球新冠疫情期间得到了广泛的应用。

2. 绘制疫情地图

2.1 准备工作

绘制疫情地图需要用到Python中的一些常用库,包括pandas、matplotlib、geopandas等。其中,geopandas库是用于地理数据处理的常用库,可以方便地处理地图数据并进行可视化。

首先需要安装需要的库,可以使用pip工具进行安装,如下所示:

pip install pandas matplotlib geopandas

安装完成后,需要准备地图数据和疫情数据。

这里以全球疫情地图为例,使用GeoJSON格式的地图数据和CSV格式的疫情数据。可以从各种公开数据源中获取这些数据,例如百度迁徙、腾讯疫情实时追踪等。

地图数据一般包含地图边界和各个区域的属性信息,如下所示:

{

"type":"Feature",

"properties":{

"NAME":"United States",

"ISO_A3":"USA",

"CONTINENT":"North America",

"SUBREGION":"Northern America"

},

"geometry":{

"type":"Polygon",

"coordinates":[

[...]

]

}

}

而疫情数据则包含各个地区的相关信息,例如确诊人数、死亡人数、治愈人数等,如下所示:

{

"provinceName":"湖北省",

"provinceShortName":"湖北",

"confirmedCount":67800,

"suspectedCount":0,

"curedCount":62826,

"deadCount":4512

}

这里的数据是从腾讯疫情实时追踪中获取的。

2.2 数据预处理

在开始绘制疫情地图之前,需要对数据进行预处理,使其符合绘制要求,并且方便地进行处理。

首先需要将地图数据和疫情数据进行合并,以便在地图上绘制疫情数据。这里可以使用pandas库中的merge方法实现。

import pandas as pd

# 读取地图数据

world = pd.read_json('world.json')

# 读取疫情数据

data = pd.read_csv('data.csv')

# 合并数据

merged_data = pd.merge(world, data, left_on='NAME', right_on='provinceName')

print(merged_data.head())

合并完成后,数据的格式如下所示:

{

"type":"Feature",

"properties":{

"NAME":"United States",

"ISO_A3":"USA",

"CONTINENT":"North America",

"SUBREGION":"Northern America",

"provinceName":"美国",

"provinceShortName":"美国",

"confirmedCount":31383830,

"suspectedCount":0,

"curedCount":0,

"deadCount":562568

},

"geometry":{

"type":"Polygon",

"coordinates":[

[...]

]

}

}

接下来需要对数据进行清洗和处理,以适配地图的绘制要求。这里需要对一些字段进行处理,例如将确诊人数进行分段操作,以便在地图上进行着色。同时还可以对一些字段进行筛选,以便在绘制地图时只关注特定的数据。

import numpy as np

import geopandas as gpd

# 筛选部分需要的数据

merged_data = merged_data.loc[:, ['NAME', 'geometry', 'confirmedCount']]

# 对确诊人数进行分段处理

bins = [0, 1000, 10000, 100000, 1000000, np.inf]

labels = ['0-1k', '1k-10k', '10k-100k', '100k-1m', '1m+']

merged_data['confirmedCount'] = pd.cut(merged_data['confirmedCount'], bins=bins, labels=labels)

# 将数据转化为地理对象

merged_data = gpd.GeoDataFrame(merged_data)

print(merged_data.head())

处理后的数据格式如下所示:

{

"type":"Feature",

"properties":{

"NAME":"United States",

"confirmedCount":"10k-100k"

},

"geometry":{

"type":"Polygon",

"coordinates":[

[...]

]

}

}

2.3 地图绘制

数据预处理完成后,就可以开始绘制地图了。这里使用geopandas库的plot方法进行绘制。

import matplotlib.pyplot as plt

# 绘制地图

merged_data.plot(column='confirmedCount', cmap='OrRd', linewidth=0.8, edgecolor='white', legend=True)

# 去除坐标轴

plt.axis('off')

# 添加标题

plt.title('Global Confirmed Cases')

# 显示地图

plt.show()

绘制后的地图如下所示:

3. 绘制疫情折线图

3.1 折线图简介

除了地图形式的疫情图,还可以使用折线图等形式展现疫情的变化趋势。

折线图是一种常用的数据可视化形式,可以用于展示各种类型的时间序列数据。在疫情图中,折线图一般用于表示疫情数据随时间的变化趋势,如确诊人数、治愈人数和死亡人数等。

3.2 绘制折线图

在绘制折线图之前,同样需要进行数据预处理,包括数据清洗、格式转换等操作。这里以中国疫情数据为例,使用CSV格式的数据文件。

首先需要读取CSV文件并进行简单的格式转换,如下所示:

import pandas as pd

# 读取疫情数据

data = pd.read_csv('data.csv')

# 转换日期格式

data['date'] = pd.to_datetime(data['date'])

# 筛选中国地区数据

data_china = data[data['provinceName'] == '中国']

# 获取全国的疫情数据

total_data = data_china.groupby('date')['confirmedCount', 'suspectedCount', 'curedCount', 'deadCount'].sum().reset_index()

print(total_data.head())

读取和转换完成后,数据格式如下所示:

{

"date":"2021-04-11",

"confirmedCount":101931,

"suspectedCount":0,

"curedCount":95073,

"deadCount":4841

}

接下来使用matplotlib库进行绘图。首先需要创建一个画布和子图,然后调用plot方法绘制折线图。

import matplotlib.pyplot as plt

# 创建画布和子图

fig, ax = plt.subplots(figsize=(10, 6))

# 绘制折线图

ax.plot(total_data['date'], total_data['confirmedCount'], label='confirmed', lw=2)

ax.plot(total_data['date'], total_data['curedCount'], label='cured', lw=2)

ax.plot(total_data['date'], total_data['deadCount'], label='dead', lw=2)

# 添加标题和标签

ax.set_title('China COVID-19 Cases')

ax.set_xlabel('Date')

ax.set_ylabel('Cases')

ax.legend()

# 显示图形

plt.show()

绘制后的折线图如下所示:

4. 总结

在这篇文章中,我们介绍了Python如何绘制疫情图的方法和步骤。疫情图是一种重要的数据可视化工具,可以将疫情数据进行直观、清晰地展示,方便了人们对疫情的了解和掌握。

其中,地图形式的疫情图可以使用geopandas库方便地处理地图数据,并进行可视化展示;折线图形式的疫情图可以使用matplotlib库进行绘制,对于疫情数据随时间的变化趋势有非常好的呈现效果。

如果您对数据可视化感兴趣,可以尝试使用Python进行更多类型的图表绘制和数据处理。

后端开发标签