【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
continentName continentEnglishName countryName countryEnglishName provinceName provinceEnglishName province_zipCode province_confirmedCount province_suspectedCount province_curedCount province_deadCount updateTime cityName cityEnglishName city_zipCode city_confirmedCount city_suspectedCount city_curedCount city_deadCount
0 亚洲 Asia 中国 China 澳门 Macau 820000 47 9.0 46 0 2021-01-22 23:40:08 NaN NaN NaN NaN NaN NaN NaN
1 北美洲 North America 美国 United States of America 美国 United States of America 971002 24632468 0.0 10845438 410378 2021-01-22 23:40:08 NaN NaN NaN NaN NaN NaN NaN
2 南美洲 South America 巴西 Brazil 巴西 Brazil 973003 8699814 0.0 7580741 214228 2021-01-22 23:40:08 NaN NaN NaN NaN NaN NaN NaN
3 欧洲 Europe 比利时 Belgium 比利时 Belgium 961001 686827 0.0 19239 20620 2021-01-22 23:40:08 NaN NaN NaN NaN NaN NaN NaN
4 欧洲 Europe 俄罗斯 Russia 俄罗斯 Russia 964006 3677352 0.0 3081536 68412 2021-01-22 23:40:08 NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
429911 亚洲 Asia 中国 China 辽宁省 Liaoning 210000 0 1.0 0 0 2020-01-22 03:28:10 NaN NaN NaN NaN NaN NaN NaN
429912 亚洲 Asia 中国 China * * 710000 1 0.0 0 0 2020-01-22 03:28:10 NaN NaN NaN NaN NaN NaN NaN
429913 亚洲 Asia 中国 Hongkong 香港 Hongkong 810000 0 117.0 0 0 2020-01-22 03:28:10 NaN NaN NaN NaN NaN NaN NaN
429914 亚洲 Asia 中国 China 黑龙江省 Heilongjiang 230000 0 1.0 0 0 2020-01-22 03:28:10 NaN NaN NaN NaN NaN NaN NaN
429915 亚洲 Asia 中国 China 湖南省 Hunan 430000 1 0.0 0 0 2020-01-22 03:28:10 NaN NaN NaN NaN NaN NaN NaN

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()
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 亚洲 中国 中国 99667 0.0 92275 4810
2021-01-21 亚洲 中国 中国 99513 0.0 92198 4809
2021-01-20 亚洲 中国 中国 99285 0.0 92130 4808
2021-01-19 亚洲 中国 中国 99094 0.0 92071 4806
2021-01-18 亚洲 中国 中国 98922 0.0 91994 4805

查看数据信息,是否有缺失数据/数据类型是否正确。若有缺失值,可以将其补全或舍弃,参见**“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
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 亚洲 中国 中国 99667 0.0 92275 4810
2021-01-21 亚洲 中国 中国 99513 0.0 92198 4809
2021-01-20 亚洲 中国 中国 99285 0.0 92130 4808
2021-01-19 亚洲 中国 中国 99094 0.0 92071 4806
2021-01-18 亚洲 中国 中国 98922 0.0 91994 4805

你所在省市疫情数据选取(最终选取的数据命名为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)
provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount cityName city_confirmedCount city_suspectedCount city_curedCount city_deadCount
2538 四川省 865 14.0 852 3 成都 468.0 13.0 455.0 3.0
7192 四川省 865 14.0 852 3 成都 468.0 13.0 455.0 3.0
8912 四川省 863 14.0 852 3 成都 466.0 13.0 455.0 3.0
10704 四川省 863 14.0 847 3 成都 466.0 13.0 450.0 3.0
12175 四川省 862 14.0 847 3 成都 465.0 13.0 450.0 3.0
... ... ... ... ... ... ... ... ... ... ...
427258 四川省 44 0.0 0 0 成都 22.0 0.0 0.0 0.0
428070 四川省 28 0.0 0 0 成都 16.0 0.0 0.0 0.0
428837 四川省 15 0.0 0 0 成都 7.0 0.0 0.0 0.0
429846 四川省 8 2.0 0 0 NaN NaN NaN NaN NaN
429866 四川省 5 2.0 0 0 NaN NaN NaN NaN NaN

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
provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount cityName city_confirmedCount city_suspectedCount city_curedCount city_deadCount
2538 四川省 865 14.0 852 3 成都 468.0 13.0 455.0 3.0
7192 四川省 865 14.0 852 3 成都 468.0 13.0 455.0 3.0
8912 四川省 863 14.0 852 3 成都 466.0 13.0 455.0 3.0
10704 四川省 863 14.0 847 3 成都 466.0 13.0 450.0 3.0
12175 四川省 862 14.0 847 3 成都 465.0 13.0 450.0 3.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
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 北美洲 美国 美国 24632468 0.0 10845438 410378
2021-01-22 南美洲 巴西 巴西 8699814 0.0 7580741 214228
2021-01-22 欧洲 比利时 比利时 686827 0.0 19239 20620
2021-01-22 欧洲 俄罗斯 俄罗斯 3677352 0.0 3081536 68412
2021-01-22 欧洲 塞尔维亚 塞尔维亚 436121 0.0 50185 5263
... ... ... ... ... ... ... ...
2020-01-27 NaN 马来西亚 马来西亚 3 0.0 0 0
2020-01-27 NaN 法国 法国 3 0.0 0 0
2020-01-27 NaN 越南 越南 2 0.0 0 0
2020-01-27 NaN 尼泊尔 尼泊尔 1 0.0 0 0
2020-01-27 NaN 加拿大 加拿大 1 0.0 0 0

62110 rows × 7 columns

world = pd.concat([china,o])
world
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 亚洲 中国 中国 99667 0.0 92275 4810
2021-01-21 亚洲 中国 中国 99513 0.0 92198 4809
2021-01-20 亚洲 中国 中国 99285 0.0 92130 4808
2021-01-19 亚洲 中国 中国 99094 0.0 92071 4806
2021-01-18 亚洲 中国 中国 98922 0.0 91994 4805
... ... ... ... ... ... ... ...
2020-01-27 NaN 马来西亚 马来西亚 3 0.0 0 0
2020-01-27 NaN 法国 法国 3 0.0 0 0
2020-01-27 NaN 越南 越南 2 0.0 0 0
2020-01-27 NaN 尼泊尔 尼泊尔 1 0.0 0 0
2020-01-27 NaN 加拿大 加拿大 1 0.0 0 0

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
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 亚洲 中国 中国 99667 0.0 92275 4810
2021-01-21 亚洲 中国 中国 99513 0.0 92198 4809
2021-01-20 亚洲 中国 中国 99285 0.0 92130 4808
2021-01-19 亚洲 中国 中国 99094 0.0 92071 4806
2021-01-18 亚洲 中国 中国 98922 0.0 91994 4805
... ... ... ... ... ... ... ...
2020-03-19 亚洲 中国 中国 81263 0.0 70561 3250
2020-03-18 亚洲 中国 中国 81202 0.0 69777 3242
2020-03-17 亚洲 中国 中国 81135 0.0 68820 3231
2020-03-16 亚洲 中国 中国 81099 0.0 67930 3218
2020-03-15 亚洲 中国 中国 81062 0.0 67037 3204

305 rows × 7 columns

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

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

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

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

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

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

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

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

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

# 四川累计治愈
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
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 亚洲 中国 中国 99667 0.0 92275 4810
2021-01-21 亚洲 中国 中国 99513 0.0 92198 4809
2021-01-20 亚洲 中国 中国 99285 0.0 92130 4808
2021-01-19 亚洲 中国 中国 99094 0.0 92071 4806
2021-01-18 亚洲 中国 中国 98922 0.0 91994 4805
... ... ... ... ... ... ... ...
2020-02-01 亚洲 泰国 泰国 19 0.0 5 0
2020-02-01 亚洲 马来西亚 马来西亚 8 0.0 0 0
2020-02-01 亚洲 阿联酋 阿联酋 4 0.0 0 0
2020-02-01 亚洲 印度 印度 1 0.0 0 0
2020-01-29 亚洲 阿联酋 阿联酋 1 0.0 0 0

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
continentName countryName provinceName province_confirmedCount province_suspectedCount province_curedCount province_deadCount
updateTime
2021-01-22 亚洲 中国 中国 99667 0.0 92275 4810
2021-01-22 亚洲 印度尼西亚 印度尼西亚 965283 0.0 781147 27453
2021-01-22 亚洲 日本 日本 351020 0.0 279214 4830
2021-01-22 亚洲 巴基斯坦 巴基斯坦 528891 0.0 482771 11204
2021-01-22 亚洲 菲律宾 菲律宾 509887 0.0 467720 10136
2021-01-22 亚洲 塞浦路斯 塞浦路斯 29472 0.0 2057 176
2021-01-22 亚洲 格鲁吉亚 格鲁吉亚 251071 0.0 238101 2998
2021-01-22 亚洲 约旦 约旦 318181 0.0 304200 4198
2021-01-22 亚洲 亚美尼亚 亚美尼亚 165528 0.0 153857 3021
2021-01-22 亚洲 阿曼 阿曼 132486 0.0 124730 1517
2021-01-22 亚洲 科威特 科威特 159834 0.0 152826 951
2021-01-22 亚洲 卡塔尔 卡塔尔 148521 0.0 144619 248
2021-01-22 亚洲 泰国 泰国 13104 0.0 10224 71
2021-01-22 亚洲 马尔代夫 马尔代夫 14765 0.0 13684 50
2021-01-22 亚洲 柬埔寨 柬埔寨 456 0.0 399 0
2021-01-22 亚洲 印度 印度 10610883 0.0 10162738 152869
2021-01-22 亚洲 伊朗 伊朗 1354520 0.0 1144549 57150
2021-01-22 亚洲 黎巴嫩 黎巴嫩 269241 0.0 158822 2151
2021-01-22 亚洲 土耳其 土耳其 2412505 0.0 2290032 24640
2021-01-22 亚洲 哈萨克斯坦 哈萨克斯坦 219527 0.0 121347 2956
2021-01-22 亚洲 以色列 以色列 582869 0.0 497578 4245
2021-01-22 亚洲 孟加拉国 孟加拉国 530271 0.0 475074 7966
2021-01-22 亚洲 马来西亚 马来西亚 172549 0.0 130152 642
2021-01-22 亚洲 阿联酋 阿联酋 267258 0.0 239322 766
2021-01-22 亚洲 伊拉克 伊拉克 611407 0.0 576725 12977
2021-01-22 亚洲 缅甸 缅甸 136166 0.0 119973 3013
2021-01-22 亚洲 韩国 韩国 74262 0.0 61415 1328
2021-01-22 亚洲 斯里兰卡 斯里兰卡 56076 0.0 47984 276
2021-01-22 亚洲 阿塞拜疆 阿塞拜疆 228246 0.0 218387 3053
2021-01-22 亚洲 叙利亚 叙利亚 13313 0.0 6624 858
2021-01-22 亚洲 阿富汗 阿富汗 54403 0.0 46759 2363
2021-01-22 亚洲 尼泊尔 尼泊尔 268646 0.0 262868 1979
2021-01-22 亚洲 巴林 巴林 98573 0.0 95240 366
2021-01-22 亚洲 吉尔吉斯斯坦 吉尔吉斯斯坦 83585 0.0 79509 1394
2021-01-22 亚洲 沙特阿拉伯 沙特阿拉伯 365775 0.0 357337 6342
2021-01-22 亚洲 也门* 也门* 2119 0.0 350 613
2021-01-22 亚洲 乌兹别克斯坦 乌兹别克斯坦 78219 0.0 76624 620
2021-01-22 亚洲 塔吉克斯坦 塔吉克斯坦 13714 0.0 12980 91
2021-01-22 亚洲 蒙古 蒙古 1584 0.0 1046 1
2021-01-22 亚洲 新加坡 新加坡 59197 0.0 58926 29
2021-01-22 亚洲 不丹 不丹 851 0.0 660 1
2021-01-22 亚洲 越南 越南 1546 0.0 1411 35
2021-01-22 亚洲 东帝汶 东帝汶 53 0.0 30 0
2021-01-22 亚洲 巴勒斯坦 巴勒斯坦 65802 0.0 32944 561
2021-01-22 亚洲 文莱 文莱 174 0.0 169 3
2021-01-22 亚洲 老挝 老挝 41 0.0 41 0
2020-05-03 亚洲 土库曼斯坦 土库曼斯坦 0 0.0 0 0
2020-03-15 亚洲 留尼汪 留尼汪 3 0.0 0 0
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()

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

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

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

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

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)]

少侠,等你来战!




上一篇:R语言方差分析(ANOVA)学生参加辅导课考试成绩差异


下一篇:python---tornado初识(1)