使用这些开源框架创建彩色地图,显示病毒的可能路径。在一个全球旅行司空见惯的世界里,疾病的传播是一个真正令人担忧的问题。一些组织跟踪重大流行病(以及一般的所有流行病)并公开其跟踪工作的数据。然而,人类可能难以处理这些原始数据,这就是数据科学如此重要的原因。例如,使用Python和Pandas可视化COVID-19在全球范围内的传播路径可能有助于分析这些数据。起初,可能很难从如此大量的原始数据入手。但是当你开始处理数据的时候,你会慢慢发现一些处理数据的方法。以下是使用COVID-19数据的一些常见情况:从GitHub下载COVID-19的全国每日传播作为Pandas中的DataFrame对象。这是您需要在Python中使用Pandas库的地方。对下载的数据进行处理清洗,使其符合可视化数据的输入格式。下载数据的条件良好(数据正则化)。该数据的一个问题是它通过名称来标识国家,但最好使用三位ISO3代码(国家代码表)来标识国家。为了生成ISO3代码,可以使用Python库pycountry。生成这些代码后,您可以在原始DataFrame中添加一列,并用这些代码填充它。最后,对于可视化,使用Plotly库中的express模块。这篇文章使用名为choropleth的地图(可在Plotly库中获得)来可视化该疾病的全球传播。第一步:Corona数据从以下网站下载最新的corona数据(LCTT译注:2020-12-14仍然可以访问,有墙):https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv在我们之间,我们将下载的数据加载到PandasDataFrame中。Pandas提供了一个函数read_csv(),可以直接使用URL读取数据,返回一个DataFrame对象,如下:importpycountryimportplotly.expressaspximportpandasaspdURL_DATASET=r'https://raw.githubusercontent。com/datasets/covid-19/master/data/countries-aggregated.csv'df1=pd.read_csv(URL_DATASET)print(df1.head(3))#获取数据帧中的前3个条目print(df1.tail(3))#Getlast3entriesinthedataframeoutputscreenshotonJupyter:Jupyterscreenshot从这个输出中,你可以看到这个DataFrame(df1)包括以下列数据:DateCountryConfirmedRecoveredDead之后,你还可以看到日期列包含从1月22日到3月31日的条目信息。此数据每天更新,因此您将获得当天的价值。第2步:清理和修改DataFrame我们需要向该DataFrame添加一列数据,即包含ISO3编码的数据。这可以通过三个步骤完成:创建所有国家/地区的列表。因为在df1的国家/地区列中,每个日期都会重复国家/地区。所以实际上,在“国家/地区”列中每个国家/地区都会有多个条目。我使用unique().tolist()函数来完成这项任务。我使用一个d_country_code字典对象(最初为空),然后将其键设置为国家名称,然后将其值设置为其对应的ISO3代码。我使用pycountry.countries.search_fuzzy(country)为每个国家/地区生成ISO3编码。您需要了解的是,此函数的返回值是一个Country对象列表。我将此函数的返回值分配给country_data对象。以该对象的第一个元素(编号0)为例。这个\对象有一个alpha_3属性。所以我可以使用country_data[0].alpha_3“获取”第一个元素的ISO3编码。但是,此DataFrame中的某些国家/地区名称可能没有相应的ISO3代码(例如有争议的领土)。然后对于这些“国家”,我将ISO3编码替换为空白字符串。您也可以将此部分替换为try-except代码。except中的语句可以这样写:print('couldnotaddISO3codefor->',country)。如果找不到这些“国家”的ISO3代码,这将给出输出提示。事实上,您会发现这些“国家/地区”在最终输出中以白色表示。在得到每个国家的ISO3编码后(有的是空字符串),我在之前的字典d_country_code中加入了国家名称(作为键)和国家对应的ISO3编码(作为值)。您可以使用Python中字典对象的update()方法来完成此任务。在创建国家名称字典及其相应的ISO3代码后,我使用一个简单的循环将它们添加到DataFrame中。第3步:使用Plotly可视化传播路径Choropleth地图是由彩色多边形组成的地图。它常被用来表示一个变量在空间中的变化。我们使用Plotly中的px模块来创建等值线图,具体函数为:px.choropleth。该函数包含的参数如下:plotly.express.choropleth(data_frame=None,lat=None,lon=None,locations=None,locationmode=None,geojson=None,featureidkey=None,color=None,hover_name=无,hover_data=无,custom_data=无,animation_frame=无,animation_group=无,category_orders={},labels={},color_discrete_sequence=None,color_discrete_map={},color_continuous_scale=None,range_color=None,color_continuous=None,projpointNone,scope=None,center=None,title=None,template=None,width=None,height=None)choropleth()还有几点要注意:geojson是一个geometry对象(上面的第六个参数功能)。这个对象有点令人困惑,因为它没有在函数文档中明确提及。您可以提供也可以不提供geojson对象。如果你提供一个geojson对象,那么这个对象将被用来绘制地球特征。如果您不提供geojson对象,则此函数将默认使用内置几何对象。(在我们的实验中,我们使用内置的几何对象,因此我们不会为geojson参数提供值)DataFrame对象有一个data_frame属性,我们之前在其中提供了一个我们创建的df1。我们使用Confirmed(诊断数)来确定每个国家多边形的颜色。最后,我们为Date列创建一个animation_frame。这样我们就可以按日期划分数据,国家的颜色会随着Confirmed的变化而变化。最后完整的代码如下:importpycountryimportplotly.expressaspximportpandasaspd#----------Step1-----------URL_DATASET=r'https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv'df1=pd.read_csv(URL_DATASET)#print(df1.head)#取消注释以查看数据帧是什么样的#-----------第2步----------list_countries=df1['Country'].unique().tolist()#print(list_countries)#取消注释以查看国家列表d_country_code={}#在list_countries中保存国家名称及其ISOforcountry:try:country_data=pycountry.countries.search_fuzzy(country)#country_data是类pycountry.db.Country的对象列表#第一项即索引0列表最适合#Country类的对象有一个alpha_3属性country_code=country_data[0].alpha_3d_country_code.update({country:country_code})except:print('couldnotaddISO3codefor->',country)#如果找不到国家,将ISO代码设为''d_country_code。update({country:''})#print(d_country_code)#取消注释以检查字典#在df#中创建一个新列iso_alpha并在d_country_code.items():df1.loc[(df1.Country==k),'iso_alpha']=v#print(df1.head)#取消注释以确认添加了ISO代码#----------步骤3------------图=px。choropleth(data_frame=df1,locations="iso_alpha",color="Confirmed",#'Confirmed'列中的值决定颜色hover_name="Country",color_continuous_scale='RdYlGn',#colorscalered,yellowgreenanimation_frame="Date")fig.show()这段代码的输出是下图的内容:Mapyoucandownloadandrunthefullcodefromhere最后,这里有一些Plotly上用于绘制等值线图的好资源。
