Python教程

【Python】利用python进行数据分析——以新型冠状病毒疫情为例

本文主要是介绍【Python】利用python进行数据分析——以新型冠状病毒疫情为例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

【Python】利用python进行数据分析——以新型冠状病毒疫情为例

在这里插入图片描述

重要说明

只提交该文档这一个文件,做完后提交到学习通"结课大作业"中。

1. 文件命名

必须以学号-姓名-专业-班级.ipynb命名,(如:202011030101-乔峰-测控技术与仪器-测控20-1.ipynb)

另外,本文档开头第二行(文档中已标出)也改成你自己的学号-姓名-专业-班级

2. 截止时间

2021年04月30日24时

3. 评分规则

分析文档:完成度:代码质量 3:5:2

其中分析文档是指你数据分析的过程中,对各问题分析的思路、对结果的解释、说明(要求言简意赅,不要为写而写)

ps:你自己写的代码远胜一切之代笔,无关美丑,只问今日比昨日更长进!加油!

温馨提示

疫情尚肆虐,请积极防护,保护自己

预祝各位取得好成绩

由于数据过多,查看数据尽量使用head()或tail(),以免程序长时间无响应

=======================

本项目数据来源于丁香园。本项目主要目的是通过对疫情历史数据的分析研究,以更好的了解疫情与疫情的发展态势,为抗击疫情之决策提供数据支持。

一. 提出问题

从全国范围,你所在省市,国外疫情等三个方面主要研究以下几个问题:

(一)全国累计确诊/疑似/治愈/死亡情况随时间变化趋势如何?

(二)你所在的省市情况如何?

(三)全球疫情总体态势如何?

(四)结合你的分析结果,对未来半年的疫情趋势给出你的判断,对个人和社会在抗击疫情方面有何建议?

二. 理解数据

原始数据集:AreaInfo.csv,导入相关包及读取数据,并赋值为 areas

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

areas = pd.read_csv('data\AreaInfo.csv')
areas
continentNamecontinentEnglishNamecountryNamecountryEnglishNameprovinceNameprovinceEnglishNameprovince_zipCodeprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountupdateTimecityNamecityEnglishNamecity_zipCodecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
0亚洲Asia中国China澳门Macau820000479.04602021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
1北美洲North America美国United States of America美国United States of America971002246324680.0108454384103782021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
2南美洲South America巴西Brazil巴西Brazil97300386998140.075807412142282021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
3欧洲Europe比利时Belgium比利时Belgium9610016868270.019239206202021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
4欧洲Europe俄罗斯Russia俄罗斯Russia96400636773520.03081536684122021-01-22 23:40:08NaNNaNNaNNaNNaNNaNNaN
............................................................
429911亚洲Asia中国China辽宁省Liaoning21000001.0002020-01-22 03:28:10NaNNaNNaNNaNNaNNaNNaN
429912亚洲Asia中国China台湾Taiwan71000010.0002020-01-22 03:28:10NaNNaNNaNNaNNaNNaNNaN
429913亚洲Asia中国Hongkong香港Hongkong8100000117.0002020-01-22 03:28:10NaNNaNNaNNaNNaNNaNNaN
429914亚洲Asia中国China黑龙江省Heilongjiang23000001.0002020-01-22 03:28:10NaNNaNNaNNaNNaNNaNNaN
429915亚洲Asia中国China湖南省Hunan43000010.0002020-01-22 03:28:10NaNNaNNaNNaNNaNNaNNaN

429916 rows × 19 columns

areas.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 429916 entries, 0 to 429915
Data columns (total 19 columns):
 #   Column                   Non-Null Count   Dtype  
---  ------                   --------------   -----  
 0   continentName            429872 non-null  object 
 1   continentEnglishName     429872 non-null  object 
 2   countryName              429916 non-null  object 
 3   countryEnglishName       403621 non-null  object 
 4   provinceName             429916 non-null  object 
 5   provinceEnglishName      403621 non-null  object 
 6   province_zipCode         429916 non-null  int64  
 7   province_confirmedCount  429916 non-null  int64  
 8   province_suspectedCount  429913 non-null  float64
 9   province_curedCount      429916 non-null  int64  
 10  province_deadCount       429916 non-null  int64  
 11  updateTime               429916 non-null  object 
 12  cityName                 125143 non-null  object 
 13  cityEnglishName          119660 non-null  object 
 14  city_zipCode             123877 non-null  float64
 15  city_confirmedCount      125143 non-null  float64
 16  city_suspectedCount      125143 non-null  float64
 17  city_curedCount          125143 non-null  float64
 18  city_deadCount           125143 non-null  float64
dtypes: float64(6), int64(4), object(9)
memory usage: 62.3+ MB

查看与统计数据,以对数据有一个大致了解

相关字段含义介绍:

小提示:

国外数据的provinceName并非是省名,而是用其国家名标注,即数据不再细分到省。

中国数据的provinceName中也有’中国’这样的记录,代表当日全国各省之合计。善用之,对全国情况进行分析时就方便多了。

三. 数据清洗

(一)基本数据处理

数据清洗主要包括:选取子集,缺失数据处理、数据格式转换、异常值数据处理等。

提示:因数据皆赖各国上报,情势危杂之际,难免瞒报漏报,故存在较多缺失值,可以将其补全或舍弃,参见"Pandas之缺失值的处理.ipynb"

国内疫情数据选取(最终选取的数据命名为china)

  1. 选取国内疫情数据

  2. 对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)

  3. 因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据。

提示:df.drop_duplicates(subset=[‘provinceName’, ‘updateTime’], keep=‘first’, inplace=False)

其中df是你选择的国内疫情数据的DataFrame

  1. 去除不在此次研究范围内的列,只留下[‘continentName’,‘countryName’,‘provinceName’,‘province_confirmedCount’,‘province_suspectedCount’,‘province_curedCount’,‘province_deadCount’,‘updateTime’]这几列,并以’updateTime’为行索引。

提示:两种方法都可以:(1)选取这几列 或 (2)去除其余的列

# 此处给出代码,后面省市数据和全球数据的获取与此大同小异
china = areas.loc[areas.countryName=='中国',:].copy()
china['updateTime'] = pd.to_datetime(china.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
china = china.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=False)

# 将"字符类型的日期列(Index)"转为"时间戳索引(DatetimeIndex)"
china['updateTime'] = pd.to_datetime(china['updateTime'])
china.set_index('updateTime',inplace=True)

china = china[['continentName','countryName','provinceName','province_confirmedCount','province_suspectedCount','province_curedCount','province_deadCount']]
china = china[china.provinceName=='中国']
china.head()
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
2021-01-20亚洲中国中国992850.0921304808
2021-01-19亚洲中国中国990940.0920714806
2021-01-18亚洲中国中国989220.0919944805

查看数据信息,是否有缺失数据/数据类型是否正确。若有缺失值,可以将其补全或舍弃,参见**“Pandas之缺失值的处理.ipynb”**

# 查看数据信息,是否有缺失数据/数据类型是否正确。若有缺失值,可以将其补全或舍弃
china.info()
china.head(5)
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 305 entries, 2021-01-22 to 2020-03-15
Data columns (total 7 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   continentName            305 non-null    object 
 1   countryName              305 non-null    object 
 2   provinceName             305 non-null    object 
 3   province_confirmedCount  305 non-null    int64  
 4   province_suspectedCount  305 non-null    float64
 5   province_curedCount      305 non-null    int64  
 6   province_deadCount       305 non-null    int64  
dtypes: float64(1), int64(3), object(3)
memory usage: 19.1+ KB
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
2021-01-20亚洲中国中国992850.0921304808
2021-01-19亚洲中国中国990940.0920714806
2021-01-18亚洲中国中国989220.0919944805

你所在省市疫情数据选取(最终选取的数据命名为myhome)

此步也可在后面用到的再做

  1. 选取所在省市疫情数据(细化到市;若是直辖市,细化到区)

  2. 对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)

  3. 因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据,并以’updateTime’为行索引。

提示:df.drop_duplicates(subset=[‘cityName’, ‘updateTime’], keep=‘first’, inplace=False)

  1. 去除不在此次研究范围内的列

提示:df.drop([‘continentName’,‘continentEnglishName’,‘countryName’,‘countryEnglishName’,‘provinceEnglishName’,
‘province_zipCode’,‘cityEnglishName’,‘updateTime’,‘city_zipCode’],axis=1,inplace=True)

其中df是你选择的省市疫情数据的DataFrame

# 省市数据的获取
df = areas.loc[areas.provinceName=='四川省',:].copy()
df
df['updateTime'] = pd.to_datetime(df.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
df = df.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=False)

# 将"字符类型的日期列(Index)"转为"时间戳索引(DatetimeIndex)"
df['updateTime'] = pd.to_datetime(df['updateTime'])
# df.set_index('updateTime',inplace=True)

df.drop(['continentName','continentEnglishName','countryName','countryEnglishName','provinceEnglishName','province_zipCode','cityEnglishName','updateTime','city_zipCode'],axis=1,inplace=True)
# df = df[df.provinceName=='湖北省']
df
# df.head(10)
provinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
2538四川省86514.08523成都468.013.0455.03.0
7192四川省86514.08523成都468.013.0455.03.0
8912四川省86314.08523成都466.013.0455.03.0
10704四川省86314.08473成都466.013.0450.03.0
12175四川省86214.08473成都465.013.0450.03.0
.................................
427258四川省440.000成都22.00.00.00.0
428070四川省280.000成都16.00.00.00.0
428837四川省150.000成都7.00.00.00.0
429846四川省82.000NaNNaNNaNNaNNaN
429866四川省52.000NaNNaNNaNNaNNaN

267 rows × 10 columns

df.info()
df.head()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 267 entries, 2538 to 429866
Data columns (total 10 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   provinceName             267 non-null    object 
 1   province_confirmedCount  267 non-null    int64  
 2   province_suspectedCount  267 non-null    float64
 3   province_curedCount      267 non-null    int64  
 4   province_deadCount       267 non-null    int64  
 5   cityName                 265 non-null    object 
 6   city_confirmedCount      265 non-null    float64
 7   city_suspectedCount      265 non-null    float64
 8   city_curedCount          265 non-null    float64
 9   city_deadCount           265 non-null    float64
dtypes: float64(5), int64(3), object(2)
memory usage: 22.9+ KB
provinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCountcityNamecity_confirmedCountcity_suspectedCountcity_curedCountcity_deadCount
2538四川省86514.08523成都468.013.0455.03.0
7192四川省86514.08523成都468.013.0455.03.0
8912四川省86314.08523成都466.013.0455.03.0
10704四川省86314.08473成都466.013.0450.03.0
12175四川省86214.08473成都465.013.0450.03.0
df_clean = df.dropna()
df_clean.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 265 entries, 2538 to 428837
Data columns (total 10 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   provinceName             265 non-null    object 
 1   province_confirmedCount  265 non-null    int64  
 2   province_suspectedCount  265 non-null    float64
 3   province_curedCount      265 non-null    int64  
 4   province_deadCount       265 non-null    int64  
 5   cityName                 265 non-null    object 
 6   city_confirmedCount      265 non-null    float64
 7   city_suspectedCount      265 non-null    float64
 8   city_curedCount          265 non-null    float64
 9   city_deadCount           265 non-null    float64
dtypes: float64(5), int64(3), object(2)
memory usage: 22.8+ KB

查看数据信息,是否有缺失数据/数据类型是否正确。若有缺失值,可以将其补全或舍弃,参见**“Pandas之缺失值的处理.ipynb”**

全球疫情数据选取(最终选取的数据命名为world)

此步也可在后面用到的再做

  1. 选取国外疫情数据

提示:选取国外疫情数据(countryName!=‘中国’)

  1. 对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)

  2. 因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据。

提示:df.drop_duplicates(subset=[‘provinceName’, ‘updateTime’], keep=‘first’, inplace=False)

其中df是你选择的国内疫情数据的DataFrame

  1. 去除不在此次研究范围内的列,只留下[‘continentName’,‘countryName’,‘provinceName’,‘province_confirmedCount’,‘province_suspectedCount’,‘province_curedCount’,‘province_deadCount’,‘updateTime’]这几列,并以’updateTime’为行索引。

提示:两种方法都可以:(1)选取这几列 或 (2)去除其余的列

  1. 得到全球数据

提示:用 concat 函数将前面的china与国外数据按「轴」连接得到全球数据。

# 省市数据的获取
o = areas.loc[areas.countryName!='中国',:].copy()
# df = areas.loc[areas.provinceName=='湖北省',:].copy()
o
o['updateTime'] = pd.to_datetime(o.updateTime,format="%Y-%m-%d",errors='coerce').dt.date
o = o.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=False)

# 将"字符类型的日期列(Index)"转为"时间戳索引(DatetimeIndex)"
o['updateTime'] = pd.to_datetime(o['updateTime'])
# o.set_index('updateTime',inplace=True)

o = o[['continentName','countryName','provinceName','province_confirmedCount','province_suspectedCount','province_curedCount','province_deadCount','updateTime']]

o.set_index('updateTime',inplace=True)
o
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22北美洲美国美国246324680.010845438410378
2021-01-22南美洲巴西巴西86998140.07580741214228
2021-01-22欧洲比利时比利时6868270.01923920620
2021-01-22欧洲俄罗斯俄罗斯36773520.0308153668412
2021-01-22欧洲塞尔维亚塞尔维亚4361210.0501855263
........................
2020-01-27NaN马来西亚马来西亚30.000
2020-01-27NaN法国法国30.000
2020-01-27NaN越南越南20.000
2020-01-27NaN尼泊尔尼泊尔10.000
2020-01-27NaN加拿大加拿大10.000

62110 rows × 7 columns

world = pd.concat([china,o])
world
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
2021-01-20亚洲中国中国992850.0921304808
2021-01-19亚洲中国中国990940.0920714806
2021-01-18亚洲中国中国989220.0919944805
........................
2020-01-27NaN马来西亚马来西亚30.000
2020-01-27NaN法国法国30.000
2020-01-27NaN越南越南20.000
2020-01-27NaN尼泊尔尼泊尔10.000
2020-01-27NaN加拿大加拿大10.000

62415 rows × 7 columns

world.info()
world_clean = world.dropna()
world_clean.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 62415 entries, 2021-01-22 to 2020-01-27
Data columns (total 7 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   continentName            62377 non-null  object 
 1   countryName              62415 non-null  object 
 2   provinceName             62415 non-null  object 
 3   province_confirmedCount  62415 non-null  int64  
 4   province_suspectedCount  62415 non-null  float64
 5   province_curedCount      62415 non-null  int64  
 6   province_deadCount       62415 non-null  int64  
dtypes: float64(1), int64(3), object(3)
memory usage: 3.8+ MB
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 62377 entries, 2021-01-22 to 2020-01-29
Data columns (total 7 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   continentName            62377 non-null  object 
 1   countryName              62377 non-null  object 
 2   provinceName             62377 non-null  object 
 3   province_confirmedCount  62377 non-null  int64  
 4   province_suspectedCount  62377 non-null  float64
 5   province_curedCount      62377 non-null  int64  
 6   province_deadCount       62377 non-null  int64  
dtypes: float64(1), int64(3), object(3)
memory usage: 3.8+ MB

查看数据信息,是否有缺失数据/数据类型是否正确。

提示:因数据皆赖各国上报,情势危杂之际,难免瞒报漏报,故存在较多缺失值,可以将其补全或舍弃,参见**“Pandas之缺失值的处理.ipynb”**

四. 数据分析及可视化

在进行数据分析及可视化时,依据每个问题选取所需变量并新建DataFrame再进行分析和可视化展示,这样数据不易乱且条理更清晰。

基础分析

基础分析,只允许使用numpy、pandas和matplotlib库

可以在一张图上多个坐标系展示也可以在多张图上展示

请根据分析目的选择图形的类型(折线图、饼图、直方图和散点图等等),实在没有主意可以到百度疫情地图或其他疫情分析的站点激发激发灵感。

(一)全国累计确诊/治愈/死亡情况随时间变化趋势如何?

china
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
2021-01-20亚洲中国中国992850.0921304808
2021-01-19亚洲中国中国990940.0920714806
2021-01-18亚洲中国中国989220.0919944805
........................
2020-03-19亚洲中国中国812630.0705613250
2020-03-18亚洲中国中国812020.0697773242
2020-03-17亚洲中国中国811350.0688203231
2020-03-16亚洲中国中国810990.0679303218
2020-03-15亚洲中国中国810620.0670373204

305 rows × 7 columns

# 全国累计确诊
plt.figure()
plt.plot(china.province_confirmedCount)
plt.title('China')
plt.xlabel('Time')
plt.ylabel('Count')
plt.show()

在这里插入图片描述

# 全国累计治愈
plt.figure()
plt.plot(china.province_curedCount)
plt.title('China')
plt.xlabel('Time')
plt.ylabel('Count')
plt.show()

在这里插入图片描述

# 全国累计死亡
plt.figure()
plt.plot(china.province_deadCount)
plt.title('China')
plt.xlabel('Time')
plt.ylabel('Count')
plt.show()

在这里插入图片描述

(二)你所在的省市情况如何?

# 四川累计确诊
plt.figure()
plt.plot(df.province_confirmedCount)
plt.title('Sichuan')
plt.xlabel('Time')
plt.ylabel('Count')
plt.show()

在这里插入图片描述

# 四川累计治愈
plt.figure()
plt.plot(df.province_curedCount)
plt.title('China')
plt.xlabel('Time')
plt.ylabel('Count')
plt.show()
# 四川累计死亡
plt.figure()
plt.plot(df.province_deadCount)
plt.title('China')
plt.xlabel('Time')
plt.ylabel('Count')
plt.show()

在这里插入图片描述

(三)全球疫情态势如何?

  1. 全球 TOP10 国家的疫情情况如何?

  2. 各大洲情况对比?

  3. 选一个你感兴趣的大洲,分析各国疫情之间的联系、分布、对比和构成情况。

提示:注意数据透视、分组和整合知识的运用

#  全球 TOP10 国家的疫情情况如何?

# 按各国最高确诊数目
world_clean
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
world_clean.sort_values("province_confirmedCount",inplace=False)
world_clean
world_clean = world_clean.drop_duplicates(subset=[ 'province_confirmedCount','countryName'], keep='first', inplace=False)
world_clean
name = world_clean['countryName'].drop_duplicates()
name[:10]
ww = world_clean.copy()
ii = ww.loc[ww['countryName']=='中国']
ii.province_confirmedCount
for i in name[:10]:
    ii = ww.loc[ww['countryName']==i]
    plt.figure()
    plt.title(i)
    plt.plot(ii.province_confirmedCount)
    plt.show()

# world_clean['provinceName'].drop_duplicates().values
# world_clean['time'] = world_clean.index
# world_clean = world_clean.drop_duplicates(subset=[ 'updateTime','countryName'], keep='first', inplace=False)
# world_clean = world_clean.drop_duplicates(subset=[ 'province_confirmedCount','countryName'], keep='first', inplace=False)
# world_clean.groupby(by='').max()
# # df['city'].drop_duplicates()
# # list(country_name[-5:])
# # world_clean
# world_clean
# 各大洲情况对比?
www = world_clean.copy()
name = www['continentName'].drop_duplicates()
name
for i in name:
    ii = www.loc[www['continentName']==i]
    plt.figure()
    plt.title(i)
    plt.plot(ii.province_confirmedCount)
    plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygkpdj8j-1620734802831)(output_32_0.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ux0n1XLf-1620734802833)(output_32_1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kgAmTK1b-1620734802835)(output_32_2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gL8Hqeku-1620734802839)(output_32_3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ggRosVN2-1620734802843)(output_32_4.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GeDEsEFp-1620734802848)(output_32_5.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vzStKWuY-1620734802851)(output_32_6.png)]

# 选一个你感兴趣的大洲,分析各国疫情之间的联系、分布、对比和构成情况。

ww1 = world_clean.copy()
df_yazhou = ww1.loc[ww1['continentName']=='亚洲']
df_yazhou
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-21亚洲中国中国995130.0921984809
2021-01-20亚洲中国中国992850.0921304808
2021-01-19亚洲中国中国990940.0920714806
2021-01-18亚洲中国中国989220.0919944805
........................
2020-02-01亚洲泰国泰国190.050
2020-02-01亚洲马来西亚马来西亚80.000
2020-02-01亚洲阿联酋阿联酋40.000
2020-02-01亚洲印度印度10.000
2020-01-29亚洲阿联酋阿联酋10.000

10960 rows × 7 columns

# 一天内有很多重复数据
# o = o.drop_duplicates(subset=['provinceName', 'updateTime'], keep='first', inplace=False) 
# 我们只关心各个国家最大确诊、患病、医治人数等
df_yazhou_1 = df_yazhou.drop_duplicates(subset=['countryName'], keep='first', inplace=False) 
df_yazhou_1
continentNamecountryNameprovinceNameprovince_confirmedCountprovince_suspectedCountprovince_curedCountprovince_deadCount
updateTime
2021-01-22亚洲中国中国996670.0922754810
2021-01-22亚洲印度尼西亚印度尼西亚9652830.078114727453
2021-01-22亚洲日本日本3510200.02792144830
2021-01-22亚洲巴基斯坦巴基斯坦5288910.048277111204
2021-01-22亚洲菲律宾菲律宾5098870.046772010136
2021-01-22亚洲塞浦路斯塞浦路斯294720.02057176
2021-01-22亚洲格鲁吉亚格鲁吉亚2510710.02381012998
2021-01-22亚洲约旦约旦3181810.03042004198
2021-01-22亚洲亚美尼亚亚美尼亚1655280.01538573021
2021-01-22亚洲阿曼阿曼1324860.01247301517
2021-01-22亚洲科威特科威特1598340.0152826951
2021-01-22亚洲卡塔尔卡塔尔1485210.0144619248
2021-01-22亚洲泰国泰国131040.01022471
2021-01-22亚洲马尔代夫马尔代夫147650.01368450
2021-01-22亚洲柬埔寨柬埔寨4560.03990
2021-01-22亚洲印度印度106108830.010162738152869
2021-01-22亚洲伊朗伊朗13545200.0114454957150
2021-01-22亚洲黎巴嫩黎巴嫩2692410.01588222151
2021-01-22亚洲土耳其土耳其24125050.0229003224640
2021-01-22亚洲哈萨克斯坦哈萨克斯坦2195270.01213472956
2021-01-22亚洲以色列以色列5828690.04975784245
2021-01-22亚洲孟加拉国孟加拉国5302710.04750747966
2021-01-22亚洲马来西亚马来西亚1725490.0130152642
2021-01-22亚洲阿联酋阿联酋2672580.0239322766
2021-01-22亚洲伊拉克伊拉克6114070.057672512977
2021-01-22亚洲缅甸缅甸1361660.01199733013
2021-01-22亚洲韩国韩国742620.0614151328
2021-01-22亚洲斯里兰卡斯里兰卡560760.047984276
2021-01-22亚洲阿塞拜疆阿塞拜疆2282460.02183873053
2021-01-22亚洲叙利亚叙利亚133130.06624858
2021-01-22亚洲阿富汗阿富汗544030.0467592363
2021-01-22亚洲尼泊尔尼泊尔2686460.02628681979
2021-01-22亚洲巴林巴林985730.095240366
2021-01-22亚洲吉尔吉斯斯坦吉尔吉斯斯坦835850.0795091394
2021-01-22亚洲沙特阿拉伯沙特阿拉伯3657750.03573376342
2021-01-22亚洲也门共和国也门共和国21190.0350613
2021-01-22亚洲乌兹别克斯坦乌兹别克斯坦782190.076624620
2021-01-22亚洲塔吉克斯坦塔吉克斯坦137140.01298091
2021-01-22亚洲蒙古蒙古15840.010461
2021-01-22亚洲新加坡新加坡591970.05892629
2021-01-22亚洲不丹不丹8510.06601
2021-01-22亚洲越南越南15460.0141135
2021-01-22亚洲东帝汶东帝汶530.0300
2021-01-22亚洲巴勒斯坦巴勒斯坦658020.032944561
2021-01-22亚洲文莱文莱1740.01693
2021-01-22亚洲老挝老挝410.0410
2020-05-03亚洲土库曼斯坦土库曼斯坦00.000
2020-03-15亚洲留尼汪留尼汪30.000
yazhou1 = df_yazhou_1[['countryName','province_confirmedCount']]
yazhou1.set_index('countryName',inplace=True)
yazhou1
list(yazhou1.index)
['中国',
 '印度尼西亚',
 '日本',
 '巴基斯坦',
 '菲律宾',
 '塞浦路斯',
 '格鲁吉亚',
 '约旦',
 '亚美尼亚',
 '阿曼',
 '科威特',
 '卡塔尔',
 '泰国',
 '马尔代夫',
 '柬埔寨',
 '印度',
 '伊朗',
 '黎巴嫩',
 '土耳其',
 '哈萨克斯坦',
 '以色列',
 '孟加拉国',
 '马来西亚',
 '阿联酋',
 '伊拉克',
 '缅甸',
 '韩国',
 '斯里兰卡',
 '阿塞拜疆',
 '叙利亚',
 '阿富汗',
 '尼泊尔',
 '巴林',
 '吉尔吉斯斯坦',
 '沙特阿拉伯',
 '也门共和国',
 '乌兹别克斯坦',
 '塔吉克斯坦',
 '蒙古',
 '新加坡',
 '不丹',
 '越南',
 '东帝汶',
 '巴勒斯坦',
 '文莱',
 '老挝',
 '土库曼斯坦',
 '留尼汪']
# province_confirmedCount

plt.figure(figsize=(6,9)) #调节图形大小
plt.pie(yazhou1)
plt.legend(list(yazhou1.index))
plt.show()


# province_curedCount
yazhou2 = df_yazhou_1[['countryName','province_curedCount']]
yazhou2.set_index('countryName',inplace=True)
yazhou2
list(yazhou2.index)
plt.figure(figsize=(6,9)) #调节图形大小
plt.pie(yazhou2)
plt.legend(list(yazhou2.index))
plt.show()


# province_deadCount
yazhou3 = df_yazhou_1[['countryName','province_deadCount']]
yazhou3.set_index('countryName',inplace=True)
yazhou3
list(yazhou3.index)
plt.figure(figsize=(6,9)) #调节图形大小
plt.pie(yazhou3)
plt.legend(list(yazhou3.index))
plt.show()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(四)结合你的分析结果,对未来半年的疫情趋势给出你的判断,对个人和社会在抗击疫情方面有何建议?

from pyecharts import Map,Geo
import pandas as pd
 
# df = pd.read_csv("主要城市年度数据.csv",encoding="gb2312")
city = china['provinceName']
count = china['province_confirmedCount']
hospital_map = Geo("各城市地区数量","2021-01-22")#分别是标题和子标题hospital_map.use_theme=("white")
hospital_map.add("",city,count,maptype="china",is_visualmap=True,is_lable_show=True,visual_range=[min(count),max(count)],visual_text_color="#000")
hospital_map.render("hospital map.html")

附加分析(选做,但做的出彩会加分哦)

附加分析,所使用的库不限,比如可以使用seaborn、pyecharts等库。

童鞋们,自由发挥吧!!(实在没有idea,到百度疫情地图或其他疫情分析的站点激发激发灵感。)

比如,这样滴…

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a711p47D-1620734802865)(images/chinamap.png)]

或者,这样滴…

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkjHqX7o-1620734802866)(images/worldmap.png)]

或者,这样滴…

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qwYlGObf-1620734802867)(images/meiguitu.png)]

少侠,等你来战!



这篇关于【Python】利用python进行数据分析——以新型冠状病毒疫情为例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!