登录
首页大数据时代使用python来绘制漂亮的图表:pandas篇!
使用python来绘制漂亮的图表:pandas篇!
2020-05-27
收藏
使用Python绘制数据,可以使用三种不同方式,它们分别是pandas,Seaborn和Plotly。 我们将通过利用《 2019年世界幸福报告》中的数据来做到这一点。我用Gapminder和Wikipedia的信息丰富了《世界幸福报告》数据,以便探索新的关系和可视化。在整篇文章中,我将使用Life Ladder作为目标变量。

我使用Python绘图的历史
大约两年前,我开始更认真地学习Python。 从那以后,几乎没有一个星期不让我惊叹于Python本身,或生态系统中众多令人惊叹的开源库的简单性和易用性。 我熟悉的命令,模式和概念越多,那么所有事情就越有意义。
Matplotlib
使用Python进行绘图的情况恰恰相反。 最初,我用Matplotlib创建的几乎每个图表都看起来像是八十年代逃脱的罪犯。 更糟糕的是,要创建这些可憎的东西,我通常不得不在Stackoverflow上花费数小时。 例如,研究nitty-gritty命令以更改x-ticks的倾斜度或类似的愚蠢行为。 甚至没有让我开始使用多张图表。 结果看起来令人印象深刻,并且以编程方式创建这些图表是一种奇妙的感觉。 例如,一次生成50个针对不同变量的图表。 但是,这只是很多工作,需要您记住很多其他本来没用的命令。
Seaborn
了解Seaborn是一种解脱。 Seaborn提取了许多微调。 毫无疑问,最终图表的美学意义是一个巨大的飞跃。 但是,它也是基于Matplotlib构建的。 通常,对于非标准调整,仍然有必要深入了解机器级的matplotlib代码。
Bokeh
简要了解一下Bokeh,我以为Bokeh将成为我的首选解决方案。 当我从事地理空间可视化工作时遇到了Bokeh。 但是,我很快意识到,虽然Bokeh与众不同,但它与matplotlib一样复杂。
Plotly
我确实在一段时间前尝试了plot.ly(从现在开始被称为plotly)。 再一次,致力于地理空间数据的可视化。 那时,它似乎比前面提到的库还要不靠谱。需要一个帐户,必须通过笔记本电脑登录,然后才能使所有内容在线呈现。 然后,还需要下载结果图表。 我迅速放弃了。 但是,最近,我看了一个有关YouTube的视频,该视频关于plotly express和plotly 4.0,最重要的是,他们摆脱了所有这些在线限制。 我玩了一下,这篇文章就是它的结果。 我想迟到总比没有好。
Kepler.gl(地理空间数据荣誉奖)
Kepler.gl虽然绝对不是Python库,但它是一种用于地理空间数据的基于Web的强大可视化工具。 您只需要CSV文件,即可使用Python轻松创建。 试试看!
我目前的工作流程
最终,我决定使用Pandas原始绘图进行快速检查,并使用Seaborn生成要在报告和演示文稿中使用的图表(视觉效果很重要)。

分布的重要性在圣地亚哥学习期间,我教过统计学(Stats 119)。 统计119是统计的入门课程。 该课程包括统计基础,例如数据汇总(可视和定量),几率和概率的概念,回归,抽样以及最重要的分布。 这次是我对数量和现象的理解几乎全部转变为基于分布表示(大部分时间是高斯)。
时至今日,我发现这两个数量的平均含义令人吃惊,而标准偏差可以帮助您把握现象。 仅通过了解这两个数字,就可以轻松得出特定结果的可能性。 人们立即知道大部分结果将在哪里。 它为您提供了一个参考框架,可以快速将轶事与有统计意义的事件区分开来,而无需进行过于复杂的计算。
一般而言,面对新数据时,我的第一步是尝试可视化其分布,以更好地理解数据。

加载数据和导入库让我们加载本文中将要使用的数据。 我确实对数据进行了一些预处理。 我在有意义的地方进行数据填充处理。
# Load the data data = pd.read_csv('https://raw.githubusercontent.com/FBosler/AdvancedPlotting/master/combined_set.csv') # this assigns labels per year data['Mean Log GDP per capita'] = data.groupby('Year')['Log GDP per capita'].transform( pd.qcut, q=5, labels=(['Lowest','Low','Medium','High','Highest']) )数据集包含以下各列的值:
· Year 年:计量年(从2007年到2018年)
· Life Ladder 人生阶梯:受访者根据Cantril阶梯,以0到10的等级(10最佳)衡量他们今天的生活价值
· Log GDP per capita 对数人均GDP:根据购买力平价(PPP)调整的人均GDP,根据世界银行于2018年11月14日发布的世界发展指标(WDI)得出
· Social support 社会支持:对问题的回答:“如果遇到麻烦,您是否有亲戚或朋友可以在需要时帮助您?”
· Healthy life expectancy at birth 出生时的健康预期寿命:出生时的预期寿命是根据世界卫生组织(WHO)全球卫生观察站数据存储库中的数据构建的,其中提供了2005、2010、2015和2016年的数据。
· Freedom to make life choices 选择生活的自由度:对问题的回答:“您对选择自己的生活的自由感到满意还是不满意?”
· Generosity 慷慨度:与"人均GDP"相比,对"您在过去一个月向慈善机构捐款了吗?"的回应
· Perceptions of corruption 对腐败的看法:回答"腐败是否在整个政府范围内广泛存在?“和"腐败是否在企业内部广泛分布?”
· Positive affect 积极影响:包括前一天的幸福,笑声和享受的平均频率。
· Negative affect 负面影响:包括前一天担忧,悲伤和愤怒的平均频率。
· Confidence in national government 对国家政府的信心:不言自明
· Democratic Quality 民主素质:一个国家的民主程度
· Delivery Quality 交付质量:一个国家兑现其政策的效果如何
· Gapminder Life Expectancy Gapminder预期寿命:Gapminder的预期寿命
· Gapminder Population Gapminder人口:一个国家的人口

快速:使用Pandas进行基本绘图
Pandas具有内置的绘图功能,可以在SeriesDataFrame上调用它。 我喜欢这些绘图功能,因为它们简洁,使用合理的默认值,并且可以快速了解发生的情况。
要创建绘图,请对数据调用.plot(kind = ),如下所示:
np.exp(data[data['Year']==2018]['Log GDP per capita']).plot( kind='hist' )运行上面的命令将产生以下图表。

2018: Histogram of the number of countries per GDP per Capita bucket. Not surprisingly, most countri
使用Pandas进行绘图时,有五个主要参数:
· kind:Pandas必须知道您要创建哪种图,以下选项可用hist,bar,barh,scatter,area,kde,line,box,hexbin,饼图。
· figsize:允许覆盖6英寸宽和4英寸高的默认输出大小。 figsize需要一个元组(例如,我经常使用的figsize =(12,8))
· title:向图表添加标题。 在大多数情况下,我用它来澄清图表中显示的内容,以便当我回到图表上时,可以快速确定发生了什么。 title需要一个字符串。
· bins:允许覆盖直方图的bin宽度。 bins需要一个列表或类似列表的值序列(例如bins = np.arange(2,8,0.25))
· xlim / ylim:允许覆盖轴的最大值和最小值的默认值。 xlim和ylim都期望有一个元组(例如xlim =(0,5))
让我们快速浏览各种可用的plots类型。
垂直条形图data[ data['Year'] == 2018 ].set_index('Country name')['Life Ladder'].nlargest(15).plot( kind='bar', figsize=(12,8) )
2018: List of 15 happiest countries is led by Finnland
水平条形图np.exp(data[ data['Year'] == 2018 ].groupby('Continent')['Log GDP per capita'].mean()).sort_values().plot( kind='barh', figsize=(12,8) )!

Average GDP per capita by continent in 2011 USD Dollars clearly led by Australia and New Zealand
箱形图data['Life Ladder'].plot( kind='box', figsize=(12,8) )
Box plot of the distribution of Life Ladder shows that the median is somewhere around 5.5 ranging fr
散点图data[['Healthy life expectancy at birth','Gapminder Life Expectancy']].plot( kind='scatter', x='Healthy life expectancy at birth', y='Gapminder Life Expectancy', figsize=(12,8) )
Scatter plot of the World Happiness Report life expectation against the Gapminder life expectation s
六边形图data[data['Year'] == 2018].plot( kind='hexbin',   x='Healthy life expectancy at birth',   y='Generosity',   C='Life Ladder',   gridsize=20,   figsize=(12,8),    cmap="Blues", # defaults to greenish   sharex=False # required to get rid of a bug )
2018: Hexbin plot, plotting life expectancy against generosity. The color of bins indicates the aver
饼图data[data['Year'] == 2018]  .groupby( ['Continent'])['Gapminder Population']   .sum()   .plot(     kind='pie',     figsize=(12,8),     cmap="Blues_r", # defaults to orangish   )
2018: Pie chart showing the total population by continent
堆积面积图data.groupby( ['Year','Continent'])['Gapminder Population'] .sum() .unstack() .plot(     kind='area',     figsize=(12,8),     cmap="Blues", # defaults to orangish )
Population numbers accross the globe are on the rise.
折线图data[ data['Country name'] == 'Germany'] .set_index('Year')['Life Ladder'] .plot( kind='line', figsize=(12,8) )
Line chart depicting the development of happiness in Germany.
关于Pandas绘图的结论用Pandas绘图很方便。 它易于访问,而且速度很快。 Plot很难看。 偏离默认值是不可能的,这是可以的,因为我们还有其他工具可以使图表更具美学吸引力。 去看看seaborn吧。

本文翻译自Fabian Bosler的文章《Learn how to create beautiful and insightful charts with Python — the Quick, the Pretty, and the Awesome》 参考https://towardsdatascience.com/plotting-with-python-c2561b8c0f1f)

数据分析咨询请扫描二维码

客服在线
立即咨询