专栏首页数据森麟python的pyecharts绘制南丁格尔玫瑰图

python的pyecharts绘制南丁格尔玫瑰图

作者:数据猿Riggle

来源:文科数据员

from:偶然得知医护界有一位叫“”南丁格尔的“提灯女神”,而且这位女神还创造了一种图,即“玫瑰图”。

for:pandas的两个DataFrame合并、pyechartspie的使用,描绘G20国家当前确诊状况。

随着新型冠状病毒的全球演进,越来越多的大佬都宣称此次疫情很有可能会形成一次类似于世界大战的历史变局。

全球各国有大有小,单看整体和个别国家并不能把疫情一目了然,那么可以怎么衡量全球变局的真实影响力呢?参考道琼斯指数,30支股票看美股全局,同样,二十国集团也可以看全球全局。

图:二十国集团杭州峰会

二十国集团占据了世界20国集团的经济总量约占世界的90%,贸易额占全球的80%,人口约40亿,占到全球的一半以上。可以说,只要知道G20国家现在疫情发展的怎么样,就知道世界现在怎么样了。

那么,如何可视化这个疫情情况呢?数据猿最近看到一个很漂亮的数据新闻的图,非常喜欢。深入学习以后才发现,原来这就是玫瑰图。

数据猿本事尚浅、时间有限,本篇文章主要分析G20各国的确诊人数,涉及pandas的数据处理和pyecharts的数据可视化。各位看官若有兴趣可以继续深挖。

第0号工作,梳理全部步骤——

  1. 导入数据,拿到全球疫情现状
  2. 清洗数据,拿到G20国家的确诊人数
  3. 数据可视化,绘制南丁格尔玫瑰图

导入数据

主要包括导入全球确诊数据和G20国家的数据列表。

#%%
# 导入必要的第三方库
import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts

#%%
#导入疫情波及国家和地区的列表
data = pd.read_csv("data.csv",encoding='gbk')
data.head()

#%%
#将疫情所在国家转为数组
COVID_country = data['国家']
COVID_country.head()

国家

新增确诊

累计确诊

治愈

死亡

0

中国

39

81117.0

68801

3231

1

欧洲

7583

65743.0

3504

2762

2

意大利

3233

27980.0

2749

2158

3

西班牙

751

9942.0

571

309

4

德国

1174

7272.0

49

13

#%%
# 导入G20国家的列表
G20 = ['中国','阿根廷','澳大利亚','巴西','加拿大','法国','德国','印度','印度尼西亚','意大利','日本'
    ,'韩国','墨西哥','俄罗斯','沙特阿拉伯','南非','土耳其','英国','美国','欧洲联盟']
# 列表转化为DataFrame格式
G20_df = pd.DataFrame({'index':range(1,21),'国家':G20})
G20_df.head()

index

国家

0

1

中国

1

2

阿根廷

2

3

澳大利亚

3

4

巴西

4

5

加拿大

清洗数据

这里清洗数据,就需要将G20国家名与全球国家的DataFrame进行对比,从而筛选出G20国家的疫情。

这篇采用以下两种方法来进行DataFrameDataFrame的对比筛选。

方法一:可以使用for循环和append()来筛选
#%%
# 方法一:利用for循环枚举所有国家
country_lst = []
for index,i in enumerate(COVID_country):
    print(i)
    country_sick = dict()
    if i in G20_df['国家'].values:
        print(i)
        country_sick['country'] = i
        country_sick['Confirmed_case'] = data.loc[index,'累计确诊']#知道列的指数,就可以确定那一行的某个列
        country_lst.append(country_sick)
print(country_lst)

#%%
country_df = pd.DataFrame(country_lst)
country_df.sort_values(by='Confirmed_case',ascending=False)

国家

累计确诊

0

中国

81117.0

1

欧洲

65743.0

2

意大利

27980.0

3

西班牙

9942.0

4

德国

7272.0

方法二:使用pandasmerge()函数
#%%
# 第二种方法,直接用merge函数
df = pd.merge(data,G20_df,on='国家')
df = df.dropna(axis='columns',thresh=2).sort_values(by="累计确诊",ascending=False)

注:欧洲联盟和欧洲主要的G20国家有重叠,暂时去掉欧盟的数据,即共计19国。

数据可视化

数据都已经清洗完成,接下来就是可视化部分。

玫瑰图的绚丽多彩,其花瓣颜色和大小自然必不可少,需要设置漂亮的颜色,并根据数据选择适合的饼图半径和面积。

#%%
# 导入玫瑰图所需颜色
color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49',
                '#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA',
                '#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B'
                '#7D3990','#A63F98','#C31C88','#D52178','#D5225B',]

#%%
# 实例化Pie类
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
# 设置颜色
pie1.set_colors(color_series)
#%%
# 提取数据
v = df['国家'].values.tolist()
d = df['累计确诊'].values.tolist()

# 添加数据,设置饼图的半径,是否展示成南丁格尔图
import numpy as np
pie1.add("", [list(z) for z in zip(v, np.round(np.sqrt(d),0))],
        radius=["20%", "100%"],
        center=["30%", "65%"],
        rosetype="area"
        ) #将人数d取平方根,并且再四舍五入,注意都要有np导入

注:因为各国疫情确诊人数数据相差悬殊,所以不能

配置图中各项,最后生成html文件。

# 设置全局配置项
pie1.set_global_opts(title_opts=opts.TitleOpts(title='玫瑰图示例'),
                     legend_opts=opts.LegendOpts(is_show=False),
                     toolbox_opts=opts.ToolboxOpts())
# 设置系列配置项
pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12,formatter="{b}:{c}", font_style="italic",font_weight="bold", font_family="Microsoft YaHei"),)
# 生成html文档
pie1.render('G20疫情确诊严重性玫瑰图.html')

打开html文件

注:数据采自2020年3月21日凌晨,图中数值为疫情确诊人数的算术平方根

可以看出,G20国家目前还并没有全面被疫情笼罩,阿根廷、墨西哥、南非、俄罗斯、沙特、土耳其、印尼、巴西的疫情目前还处于相对较轻的状态。再考虑到中国的疫情已基本控制住,所以单从以上数据上,我们仍然可以保持一丢丢的乐观,人类世界目前只被疫情搞乱了一多半。

小结

之前都没有小结的习惯,不太好哈~

这篇文章有一些问题,南丁格尔玫瑰图不适合数据量相差非常大的数据。通过取算术平方根的形式虽然勉强弱化了这个问题,但又会使数据的意义产生偏差,或许不适合原定的问题。

◆ ◆ ◆ ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

笑死人不偿命的知乎沙雕问题排行榜

用Python扒出B站那些“惊为天人”的阿婆主!

全球股市跳水大战,谁最坑爹!

上万条数据撕开微博热搜的真相!

你相信逛B站也能学编程吗

本文分享自微信公众号 - 数据森麟(shujusenlin)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《囧妈》口碑扑街?Python告诉你观众这次为何不买账了

    【导语】:今天我们就来聊聊另类春节档的唯一一部电影《囧妈》,Python技术部分可以直接看第三部分。

    数据森麟
  • 用Python给女友 准备个绝对甜蜜的七夕礼物

    七夕就要到了,在这个有情人终成眷属的好日子里,小安在这里给大家带来Python的小福利,在七夕利用Python制造两个人之间的甜蜜。二人世界里少不了属于两个人之...

    数据森麟
  • 我所理解的互联网数据分析师

    数据分析师虽然是很多互联网公司都设立的一个职位,但不同公司对这一职位的定位不同。即使是统一公司,在不同的团队,数据分析师的职责,作用和地位也可能不一样。本文从笔...

    数据森麟
  • 【JavaWeb】72:JdbcTemplate入门

    我翻了下以前自己记的笔记,从第58天开始学习MySQL数据库,到今天已经14天了。

    刘小爱
  • Greenplum内核揭秘之执行引擎

    和迭代模型一样,每一个执行节点实现一个next函数,区别在于每一次迭代,执行节点返回一组tuple, 而非一个tuple

    小徐
  • 【编程基础】盖大楼地基要牢固

    水之积也不厚,则其负大舟也无力。——庄子 上一篇讲了几个编译编辑器,大家都可以用用,新手掌握几个是没有坏处的。 学编程要从基础学起,就像盖大楼,先把地基打好,...

    程序员互动联盟
  • 【微服务】164:商品微服务需要提供的接口

    因为涉及到一个分页查询,所以service层的代码较为复杂,当时详细编写并讲解过其代码实现,在此不再赘述。

    刘小爱
  • Access更新查询

    大家好,上节介绍了操作查询中的生成表查询,本节介绍更新查询的内容。操作查询的注意点上节有介绍过,不重复说明。

    无言之月
  • 人脸识别技术大总结1——Face Detection &Alignment

    用户1737318
  • 为你的 JavaScript 项目添加智能提示和类型检查

    最近在做项目代码重构,其中有一个要求是为代码添加智能提示和类型检查。智能提示,英文为 IntelliSense,能为开发者提供代码智能补全、悬浮提示、跳转定义等...

    逆葵

扫码关注云+社区

领取腾讯云代金券