【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 | 台湾 | Taiwan | 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)
-
选取国内疫情数据
-
对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)
-
因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据。
提示:df.drop_duplicates(subset=[‘provinceName’, ‘updateTime’], keep=‘first’, inplace=False)
其中df是你选择的国内疫情数据的DataFrame
- 去除不在此次研究范围内的列,只留下[‘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)
此步也可在后面用到的再做
-
选取所在省市疫情数据(细化到市;若是直辖市,细化到区)
-
对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)
-
因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据,并以’updateTime’为行索引。
提示:df.drop_duplicates(subset=[‘cityName’, ‘updateTime’], keep=‘first’, inplace=False)
- 去除不在此次研究范围内的列
提示: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)
此步也可在后面用到的再做
- 选取国外疫情数据
提示:选取国外疫情数据(countryName!=‘中国’)
-
对于更新时间(updateTime)列,需将其转换为日期类型并提取出年-月-日,并查看处理结果。(提示:dt.date)
-
因数据每天按小时更新,一天之内有很多重复数据,请去重并只保留一天之内最新的数据。
提示:df.drop_duplicates(subset=[‘provinceName’, ‘updateTime’], keep=‘first’, inplace=False)
其中df是你选择的国内疫情数据的DataFrame
- 去除不在此次研究范围内的列,只留下[‘continentName’,‘countryName’,‘provinceName’,‘province_confirmedCount’,‘province_suspectedCount’,‘province_curedCount’,‘province_deadCount’,‘updateTime’]这几列,并以’updateTime’为行索引。
提示:两种方法都可以:(1)选取这几列 或 (2)去除其余的列
- 得到全球数据
提示:用 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()
# 全国累计治愈
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()
在这里插入图片描述
(三)全球疫情态势如何?
-
全球 TOP10 国家的疫情情况如何?
-
各大洲情况对比?
-
选一个你感兴趣的大洲,分析各国疫情之间的联系、分布、对比和构成情况。
提示:注意数据透视、分组和整合知识的运用
# 全球 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()
(四)结合你的分析结果,对未来半年的疫情趋势给出你的判断,对个人和社会在抗击疫情方面有何建议?
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)]
少侠,等你来战!