[[358773]]
成都创新互联服务项目包括临川网站建设、临川网站制作、临川网页制作以及临川网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,临川网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到临川省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
使用这些开源框架创建一个彩色地图,显示病毒的可能的传播路径。
对于一个全球旅行司空见惯的世界来说,疾病的传播是一个真正令人担忧的问题。一些组织会跟踪重大的流行病(还有所有普遍的流行病),并将他们的跟踪工作获得的数据公开出来。不过,这些原始的数据对人来说可能很难处理,这就是为什么数据科学如此重要的原因。比如,用 Python 和 Pandas 可视化 COVID-19 在全球范围内的传播路径可能对这些数据的分析有所帮助。
最开始,当面对如此大数量的原始数据时可能难以下手。但当你开始处理数据之后,慢慢地就会发现一些处理数据的方式。下面是用于处理 COVID-19 数据的一些常见的情况:
pycountry
这个 Python 库。生成了这些代码之后,可以在原有的 DataFrame 上增加一列,然后用这些代码填充进去。express
模块。这篇文章是使用名为choropleth 的地图(可在 Plotly 库中获得)来可视化该疾病在全球的传播。从下面这个网站上下载最新的 corona 数据(LCTT 译注:2020-12-14 仍可访问,有墙):
我们之间将这个下载好的数据载入为 Pandas 的 DataFrame。Pandas 提供了一个函数, read_csv()
,可以直接使用 URL 读取数据,并返回一个 DataFrame 对象,具体如下所示:
import pycountry
import plotly.express as px
import pandas as pd
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df1 = pd.read_csv(URL_DATASET)
print(df1.head(3)) # Get first 3 entries in the dataframe
print(df1.tail(3)) # Get last 3 entries in the dataframe
在 Jupyter 上的输出截图:
Jupyter screenshot
从这个输出可以看到这个 DataFrame(df1
)包括以下几列数据:
Date
Country
Confirmed
Recovered
Dead
之后还可以看到 Date
这一列包含了从 1 月 22 日到 3 月 31 日的条目信息。这个数据是每天更新的,所以你会得到你当天的值。
我们要往这个 DataFrame 中增加一列数据,就是那个包含了 ISO 3 编码。可以通过以下三步完成这个任务:
df1
的Country
列中,国家都是每个日期就重复一次。所以实际上Country
列中对每个国家就会有多个条目。我使用unique().tolist()
函数完成这个任务。d_country_code
字典对象(初始为空),然后将其键设置为国家的名称,然后它的值设置为其对应的 ISO 3 编码。pycountry.countries.search_fuzzy(country)
为每个国家生成 ISO 3 编码。你需要明白的是这个函数的返回值是一个Country
对象的列表。我将这个函数的返回值赋给country_data
对象。以这个对象的第一个元素(序号0
)为例。这个\
对象有一个alpha_3
属性。所以我使用country_data[0].alpha_3
就能“获得”第一个元素的 ISO 3 编码。然而,在这个 DataFrame 中有些国家的名称可能没有对应的 ISO 3 编码(比如有争议的领土)。那么对这些“国家/地区”,我就用一个空白字符串来替代 ISO 3 编码。你也可以用一个try-except
代码来替换这部分。except
中的语句可以写:print(‘could not add ISO 3 code for ->', country)
。这样就能在找不到这些“国家/地区”对应的 ISO 3 编码时给出一个输出提示。实际上,你会发现这些“国家/地区”会在最后的输出中用白色来表示。d_country_code
中。可以使用 Python 中字典对象的update()
方法来完成这个任务。choropleth 地图是一个由彩色多边形组成的地图。它常常用来表示一个变量在空间中的变化。我们使用 Plotly 中的 px
模块来创建 choropleth 图,具体函数为:px.choropleth
。
这个函数的所包含的参数如下:
plotly.express.choropleth(data_frame=None, lat=None, lon=None, locations=None, locationmode=None, geojson=None, featureidkey=None, color=None, hover_name=None, hover_data=None, custom_data=None, animation_frame=None, animation_group=None, category_orders={}, labels={}, color_discrete_sequence=None, color_discrete_map={}, color_continuous_scale=None, range_color=None, color_continuous_midpoint=None, projection=None, scope=None, center=None, title=None, template=None, width=None, height=None)
choropleth()
这个函数还有几点需要注意:
geojson
是一个geometry
对象(上面函数第六个参数)。这个对象有点让人困扰,因为在函数文档中没有明确地提到这个对象。你可以提供,也可以不提供geojson
对象。如果你提供了geojson
对象,那么这个对象就会被用来绘制地球特征,如果不提供geojson
对象,那这个函数默认就会使用一个内建的geometry
对象。(在我们的实验中,我们使用内建的geometry
对象,因此我们不会为geojson
参数提供值)data_frame
属性,在这里我们先前就提供了一个我们创建好的df1
。Confirmed
(确诊数)来决定每个国家多边形的颜色。Date
列创建一个animation_frame
。这样我们就能通过日期来划分数据,国家的颜色会随着Confirmed
的变化而变化。最后完整的代码如下:
import pycountry
import plotly.express as px
import pandas as pd
# ----------- Step 1 ------------
URL_DATASET = r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'
df1 = pd.read_csv(URL_DATASET)
# print(df1.head) # Uncomment to see what the dataframe is like
# ----------- Step 2 ------------
list_countries = df1['Country'].unique().tolist()
# print(list_countries) # Uncomment to see list of countries
d_country_code = {} # To hold the country names and their ISO
for country in list_countries:
try:
country_data = pycountry.countries.search_fuzzy(country)
# country_data is a list of objects of class pycountry.db.Country
# The first item ie at index 0 of list is best fit
# object of class Country have an alpha_3 attribute
country_code = country_data[0].alpha_3
d_country_code.update({country: country_code})
except:
print('could not add ISO 3 code for ->', country)
# If could not find country, make ISO code ' '
d_country_code.update({country: ' '})
# print(d_country_code) # Uncomment to check dictionary
# create a new column iso_alpha in the df
# and fill it with appropriate iso 3 code
for k, v in d_country_code.items():
df1.loc[(df1.Country == k), 'iso_alpha'] = v
# print(df1.head) # Uncomment to confirm that ISO codes added
# ----------- Step 3 ------------
fig = px.choropleth(data_frame = df1,
locations= "iso_alpha",
color= "Confirmed", # value in column 'Confirmed' determines color
hover_name= "Country",
color_continuous_scale= 'RdYlGn', # color scale red, yellow green
animation_frame= "Date")
fig.show()
Map
你可以从这里下载并运行完整代码。
最后,这里还有一些关于 Plotly 绘制 choropleth 图的不错的资源。
当前文章:如何使用Python绘制COVID-19的全球扩散图
文章源于:http://www.gawzjz.com/qtweb/news27/161127.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联