使用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具有内置的绘图功能,可以在Series或DataFrame上调用它。 我喜欢这些绘图功能,因为它们简洁,使用合理的默认值,并且可以快速了解发生的情况。 要创建绘图,请对数据调用.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吧。