旗下产业: A产业/ A实习/ A计划
全国统一咨询热线:010-5367 2995
首页 > 热门文章 > 大数据分析 > 大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
时间:2020-10-08来源:www.aaa-cg.com.cn点击量:作者:Sissi
时间:2020-10-08点击量:作者:Sissi



  大数据分析如何在Python中生成FiveThirtyEight图?如果你阅读大数据分析文章,则可能已经迷失了FiveThirtyEight的内容。自然,他们的出色可视化使你印象深刻。你想制作自己的出色可视化文件,所以问百度一下如何做到这一点。你收到了一些答案,但它们相当模糊。你仍然无法自己完成图表。在大数据分析如何在Python中生成FiveThirtyEight图中,我们将为你提供帮助。使用Python的matplotlib和pandas,我们将看到复制任何FiveThirtyEight(FTE)可视化的核心部分都相当容易。我们将从这里开始:

大数据分析如何在Python中生成FiveThirtyEight图
 

  并且,在大数据分析如何在Python中生成FiveThirtyEight图的结尾,到达此处:

大数据分析如何在Python中生成FiveThirtyEight图
 

  要继续学习,你至少需要一些Python的基础知识。如果你知道方法和属性之间有什么区别,那么你就很好了。
 

  引入数据集
 

  我们将使用描述1970年至2011年美国授予女性的单身汉百分比的数据进行处理。我们将使用由大数据分析家汇编的数据集
 

  如果你想自己编写代码,请从Randal的博客中下载数据。为了节省时间,你可以跳过下载文件,而只需将直接链接传递给pandasread_csv() 函数。在以下代码单元中,我们:
 

  1)导入pandas模块。

  2)将指向数据集的直接链接作为分配string给名为的变量direct_link。

  3)使用读取数据read_csv(),并将内容分配给women_majors。

  4)使用info() 方法打印有关数据集的信息。我们正在寻找行和列的数量,并同时检查null值。

  5)使用该head() 方法显示前五行,以更好地理解数据集的结构。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  除了
 

  Year列,每隔一列的名称表示学士学位的主题。“学士学位”列中的每个数据点都代表授予女性学士学位的百分比。因此,每一行都描述了给定年份中授予女性的各种学士学位的百分比。如前所述,我们拥有1970年至2011年的数据。为确认后一个限制,我们使用tail() 方法打印数据集的最后五行:

大数据分析如何在Python中生成FiveThirtyEight图
 

  我们的FiveThirtyEight图的上下文
 

  几乎每个FTE图都是文章的一部分。图形通过说明一个小故事或一个有趣的想法来补充文本。在复制FTE图时,我们需要注意这一点。为了避免偏离大数据分析如何在Python中生成FiveThirtyEight图的主要任务,我们仅假装我们已经撰写了一篇有关中国教育中性别差距的演变的文章。现在,我们需要创建一个图表,以帮助读者直观地了解1970年情况对女性而言真的很差的单身汉的性别差异的演变。我们已经设定了20%的阈值,现在我们想要绘制每位女性的变化趋势图1970年,女性毕业生的学士学位比例不到20%。让我们首先确定那些特定的学士学位。在以下代码单元中,我们将:
 

  1)用途.loc,一个基于标签的索引,来:

  a)选择第一行(对应于1970年);

  b)仅在值小于20的情况下选择第一行中的项目;该Year字段也会被检查,但显然不会包括在内,因为1970年大于20。

  2)将结果内容分配给under_20。

大数据分析如何在Python中生成FiveThirtyEight图
 

  使用matplotlib的默认样式
 

  让我们开始研究图表。我们首先来看看默认情况下可以构建的内容。在下面的代码块中,我们将:
 

  1)运行Jupyter魔术%matplotlib以使Jupyter和matplotlib有效地协同工作,并添加inline使我们的图形显示在笔记本中。

  2)通过使用绘制图形plot() 的方法上women_majors。我们传入plot()以下参数:

  a)x–指定women_majors用于x轴的列;

  b)y–指定women_majors要用于y轴的列;我们将使用under_20存储在.index该对象属性中的索引标签;

  c)figsize–将图形的大小设置为tuple,(width, height)以英寸为单位。

  3)将绘图对象分配给一个名为的变量under_20_graph,并打印其类型以表明熊猫使用matplotlib引擎盖下的对象。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  使用matplotlib的第五十八样式
 

  上面的图形具有某些特征,例如,棘的宽度和颜色,y轴标签的字体大小,不存在网格等。所有这些特征构成了matplotlib的默认样式。作为简短的括号,值得一提的是,在大数据分析如何在Python中生成FiveThirtyEight图中,我们将使用一些技术术语来表示图形的各个部分。如果你感到迷茫,可以参考以下图例。

大数据分析如何在Python中生成FiveThirtyEight图
 

  除了默认样式外,matplotlib还带有一些内置样式,我们可以随时使用它们。要查看可用样式的列表,我们将:
 

  1)以名称 导入matplotlib.style 模块style。

  2)探索matplotlib.style.available(此模块的预定义变量)的内容,其中包含所有可用的内置样式的列表。

大数据分析如何在Python中生成FiveThirtyEight图
 

  你可能已经观察到有一种内置样式称为
 

  fivethirtyeight。让我们使用这种样式,看看结果如何。为此,我们将使用同一模块(我们以名称导入)中恰当命名的use() 函数。然后,我们将使用与之前相同的代码来生成图形。matplotlib.stylestyle

大数据分析如何在Python中生成FiveThirtyEight图
 

  哇,那是一个重大变化!关于我们的第一个图,我们可以看到该图具有不同的背景色,带有网格线,没有任何刺,主要刻度标签的粗细和字体大小均不同,等等。你可以阅读这里的fivethirtyeight样式的技术说明–它还应该使你对使用该样式时后台运行的代码有一个很好的了解。样式表的作者Cameron David-Pilon在这里讨论了一些特征。
 

  matplotlib第五十八样式的局限性
 

  总而言之,使用
 

  fivethirtyeight风格显然使我们更接近我们的目标。尽管如此,仍有许多工作要做。让我们检查一个简单的FTE图,并查看我们还需要添加到图中的内容。

大数据分析如何在Python中生成FiveThirtyEight图
 

  通过将上面的图表与到目前为止所做的比较,我们可以看到我们仍然需要:
 

  1)添加标题和副标题。

  2)删除块样式图例,并在相关绘图线附近添加标签。我们还必须使这些标签周围的网格线透明。

  3)添加一个签名底部栏,其中提到图形的作者和数据源。

  4)添加一些其他小的调整:

  a)增加刻度线标签的字体大小;

  b)在y轴的主要刻度标签之一上添加“%”符号;

  c)移除x轴标签;

  d)在y = 0处加粗水平网格线;

  e)在y轴的刻度标签旁边添加一条额外的网格线;

  f)增加图形的侧边距。

大数据分析如何在Python中生成FiveThirtyEight图
 

  为了最大程度地减少生成图形所花费的时间,请务必避免开始添加标题,副标题或任何其他文本片段,这一点很重要。在matplotlib中,通过指定x和y坐标来定位文本片段,如我们在以下某些部分中所见。要详细复制上面的FTE图,请注意,我们必须将y轴的刻度标签与标题和副标题垂直对齐。我们希望避免出现我们想要的垂直对齐方式,通过增加刻度线标签的字体大小而丢失它的情况,然后必须再次更改标题和副标题的位置。

大数据分析如何在Python中生成FiveThirtyEight图
 

  出于教学目的,我们现在将逐步调整FTE图。因此,我们的代码将跨越多个代码单元。但是,实际上,只需要一个以上的代码单元。
 

  自定义刻度标签
 

  我们将从增加刻度标签的字体大小开始。在以下代码单元中,我们:
 

  1)使用与之前相同的代码绘制图形,然后将结果对象分配给fte_graph。分配变量使我们能够重复轻松地在对象上应用方法或访问其属性。

  2)使用具有以下参数的tick_params() 方法来增加所有主要刻度标签的字体大小:

  a)axis–指定我们要修改的刻度标签所属的轴;这里我们要修改两个轴的刻度标签;

  b)which –指示要影响的刻度标签(主要或次要标签;如果不知道区别,请参见前面显示的图例);

  c)labelsize –设置刻度标签的字体大小。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  你可能已经注意到我们style.use('fivethirtyeight')这次没有使用。这是因为一旦在我们的代码中首次声明,任何matplotlib样式的首选项都会变为全局首选项。我们之前将样式设置为fivethirtyeight,从那里所有后续图形都继承了该样式。如果出于某种原因要返回默认状态,请运行style.use('default')。现在,我们将通过对y轴的刻度标签进行一些调整来建立以前的更改:
 

  1)我们将50%(y轴的最高可见刻度)添加一个“%”符号。

  2)我们还在其他可见标签之后添加了一些空白字符,以使它们与新的“ 50%”标签优雅地对齐。
 

  要对y轴的刻度标签进行这些更改,我们将使用
 

  set_yticklabels() 方法以及label参数。从下面的代码可以推断出,此参数可以采用混合数据类型的列表,并且不需要传入任何固定数量的标签。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  在y = 0处加粗水平线
 

  现在,我们将在y坐标为0的水平线上加粗。为此,我们将使用
 

  axhline() 方法来添加新的水平网格线,并覆盖现有的水平网格线。我们使用的参数axhline()是:
 

  1)y –指定水平线的y坐标;

  2)color –指示线条的颜色;

  3)linewidth –设置线宽;

  4)alpha–调节线条的透明度,但是我们在这里使用它来调节黑色的强度;值alpha范围从0(完全透明)到1(完全不透明)。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  添加额外的垂直线
 

  如前所述,我们必须在y轴刻度标签的紧邻处添加另一条垂直网格线。为此,我们只需调整x轴值的范围即可。增大范围的左限将导致我们需要额外的垂直网格线。在下面,我们使用
 

  set_xlim() 方法与不言自明的参数left和right。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  生成签名栏
 

  上面显示的示例FTE图的签名栏具有一些明显的特征:
 

  1)它位于图的底部。

  2)作者的姓名位于签名栏的左侧。

  3)数据源在签名栏的右侧提到。

  4)文本具有浅灰色(与图形的背景颜色相同)和深灰色背景。

  5)作者姓名和来源姓名之间的区域也具有深灰色背景。

大数据分析如何在Python中生成FiveThirtyEight图
 

  添加这样的签名栏似乎很困难,但是通过一点点巧思,我们可以很容易地完成它。我们将添加一个文本片段,为其提供浅灰色,并为深灰色的背景色。我们将作者的姓名和来源都写在一个文本片段中,但是我们将这两个空格隔开,使得它们的结尾在最左边,另一个在最右边。令人高兴的是,空白字符也将获得深灰色背景,这将产生签名栏的效果。我们还将使用一些空格字符来对齐作者的姓名和源名称,正如你将在下一个代码块中看到的那样。这也是移除x轴标签的好时机。这样,我们可以更好地看到签名栏如何适合图形的整体方案。
 

  1)通过将False值传递给set_visible()我们应用于对象的方法来删除x轴的标签fte_graph.xaxis.label。这样想:我们访问的xaxis属性fte_graph,然后访问的label属性fte_graph.xaxis。然后我们终于申请set_visible()了fte_graph.xaxis.label。
 

  2)以上述方式在图形上添加一小段文本。我们将使用具有以下参数的text() 方法:
 

  a)x –指定文本的x坐标;

  b)y –指定文本的y坐标;

  c)s –指示要添加的文本;

  d)fontsize –设置文本的大小;

  e)color–指定文字的颜色;我们在下面使用的值的格式为十六进制;我们使用这种格式来完全匹配整个图形的背景颜色(如样式代码中fivethirtyeight所指定);

  f)backgroundcolor –设置文本片段的背景色。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  通过反复试验找到添加的文本片段的x和y坐标。你可以通过floats向x和y参数,这样你就可以控制文本的位置高的精度水平。还值得一提的是,我们通过以下方式调整了签名栏的位置,即添加了一些视觉上令人耳目一新的横向边距(我们之前讨论了此调整)。为了增加左边距,我们只是降低了x坐标的值。为了增加右边的字符,我们在作者的名字和源的名字之间添加了更多的空格字符–这将源的名字推到右边,从而增加了所需的边距。
 

  另一种签名栏
 

  你还将遇到一种稍微不同的签名栏:

大数据分析如何在Python中生成FiveThirtyEight图
 

  FiveThirtyEight这种签名栏也可以很容易地复制。我们将只添加一些灰色文本,并在其上方添加一行。我们将通过添加多个下划线字符(“ _”)的文本片段来创建线条的视觉效果。你可能想知道为什么我们不习惯axhline()在所需的y坐标上简单地画一条水平线。我们不这样做,因为新行将向下拖动图形的整个网格,并且不会产生所需的效果。我们还可以尝试添加箭头,然后删除指针,以便最终得到一条线。但是,“下划线”解决方案要简单得多。在下一个代码块中,我们将实现刚刚讨论的内容。在前面的部分中,我们应该已经熟悉我们在这里使用的方法和参数。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  添加标题和字幕
 

  如果你检查
 

  几个FTE图,你可能会注意到标题和副标题的这些模式:
 

  1)标题几乎总是带有副标题。

  2)标题提供了从特定图形看的上下文角度。标题几乎从来都不是技术性的,它通常只表示一个简单的想法。它也几乎从来没有情绪中立。在上方的Fandango图表中,我们可以看到一个简单的“具有情感动感”的标题(“ Fandango LOVES电影”),而没有一个平淡的“各种电影分级类型的分布”。

  3)字幕提供了有关图形的技术信息。该信息经常使轴标签变得多余。由于我们已经删除了x轴标签,因此应谨慎定制相应的字幕。

  4)在视觉上,标题和副标题具有不同的字体粗细,并且它们是左对齐的(与大多数居中的标题不同)。而且,如我们先前所示,它们与y轴的主要刻度标签垂直对齐。
 

  现在,请注意上面的观察,在图中添加标题和副标题。在下面的代码块中,我们将基于到目前为止已编码的内容,我们将:
 

  5)通过使用与text()在签名栏中添加文本相同的方法来添加标题和副标题。如果你已经对matplotlib有一定的经验,你可能想知道为什么我们不使用title()andsuptitle()方法。这是因为这两种方法在精确移动文本方面都具有可怕的功能。的唯一新参数text()是weight。我们用它来加粗标题。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  如果你想知道,原始FTE图形中使用的字体是Decima Mono(付费墙字体)。因此,我们将坚持使用Matplotlib的默认字体,无论如何看起来都非常相似。
 

  添加色盲友好的颜色
 

  现在,我们有了笨拙的矩形图例。我们将摆脱它,并在每条绘图线附近添加彩色标签。每行将具有特定的颜色,并且相同颜色的单词将命名该行所对应的学士学位。但是,首先,我们将修改绘图线的默认颜色,并添加

大数据分析如何在Python中生成FiveThirtyEight图
 

  色盲友Bang Wong设计的色盲我们将使用上图中的值,为可色盲的颜色编译RGB参数列表。附带说明一下,我们避免使用黄色,因为带有该颜色的文本片段在图形的深灰色背景颜色上不易阅读。编译完此RGB参数列表后,我们将其传递给我们先前代码中使用color的plot()方法的参数。请注意,matplotlib将要求RGB参数在0-1范围内,因此我们将每个值除以255(最大RGB值)。我们不会费心将零除,因为0/255 = 0。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  好的颜色:
 

  通过添加彩色标签来更改图例样式
 

  最后,我们通过使用
 

  text()以前使用的方法。唯一的新参数是rotation,我们使用它旋转每个标签,以使其优雅地适合图形。我们还将在此处做一些技巧,通过简单地修改标签的背景颜色以使其与图形的颜色相匹配,使标签周围的网格线透明。在之前的代码中,我们仅plot()通过将legend参数设置为来修改方法False。这将使我们摆脱默认的图例。由于colors列表已经存储在上一个单元格的内存中,因此我们也跳过了重新声明列表的操作。

大数据分析如何在Python中生成FiveThirtyEight图
大数据分析如何在Python中生成FiveThirtyEight图
 

  下一步
 

  就是这样,我们的图形现在可以发布了!为了简短地回顾一下,我们从生成具有matplotlib默认样式的图形开始。然后,我们通过一系列步骤将该图带入“ FTE级”:
 

  1)我们使用了matplotlib的内置fivethirtyeight样式。

  2)我们添加了标题和副标题,并分别对其进行了自定义。

  3)我们添加了签名栏。

  4)我们删除了默认图例,并添加了彩色标签。

  5)我们还进行了一系列其他小的调整:自定义刻度线标签,在y = 0处加粗水平线,在刻度线标签附近添加垂直网格线,删除x轴的标签,并增加y的横向边距-轴。
 

  要基于你所学的知识,请考虑以下几个步骤:
 

  1)为其他学士学位生成相似的图形。

  2)生成各种FTE图:直方图,散点图等。

  3)探索matplotlib的图库,搜索可能的元素以丰富你的FTE图(例如插入图像或添加箭头等)。添加图像可以使你的FTE图达到一个全新的水平:
 

大数据分析如何在Python中生成FiveThirtyEight图






 

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!

©2007-2021/北京漫动者教育科技有限公司版权所有
备案号:京ICP备12034770号

老师想和你聊一聊

©2007-2021/ www.aaa-cg.com.cn 北京漫动者教育科技有限公司 备案号:京ICP备12034770号 监督电话:010-62568622 邮箱:bjaaa@aaaedu.cc