[数据可视化]Pandas单变量画图

Bar Chat Line Chart Area Chart Histogram
df.plot.bar() df.plot.line() df.plot.area() df.plot.hist()
适合定类数据和小范围取值的定序数据 适合定序数据和定距数据 适合定序数据和定距数据 适合定距数据

pandas库是Python数据分析最核心的一个工具库:“杀手级特征”,使整个生态系统融合在一起。除了数据读取、转换之外,也可以进行数据可视化。易于使用和富有 表现力的pandas绘图API是pandas流行的重要组成部分。

在本节中,我们将学习基本的“pandas”绘图工具,从最简单的可视化类型开始:单变量或“单变量”可视化。这包括条形图和折线图等基本工具。通过这些,我们将了解 pandas绘制库结构,并花一些时间检查数据类型。

数据分类:

  1. Norminal Data 定类变量:变量的不同取值仅仅代表了不同类的事物。问卷的人口特征中最常使用的问题,而调查被访对象的“性别”,就是 定类变量。对于定类变 量,加减乘除等运算是没有实际意义的;
  2. Ordinal Data定序变量:变量的值不仅能够代表事物的分类,还能代表事物按某种特性的排序,这样的变量叫定序变量。问卷的人口特征中最常使用的问题“教育程 度“,以及态度量表题目等都是定序变量,定序变量的值之间可以比较大小,或者有强弱顺序,但两个值的差一般没有什么实际意义。
  3. Interval Data 定距变量:变量的值之间可以比较大小,两个值的差有实际意义,这样的变量叫定距变量。有时问卷在调查被访者的“年龄”和“每月平均收入”,都>是定距变量。
  4. Ratio Data 定比变量, 有绝对0点,如质量,高度。定比变量与定距变量在市场调查中一般不加以区分,它们的差别在于,定距变量取值为“0”时,不表示“没有 ”,仅仅是取值为0。定比变量取值为“0”时,则表示“没有”
1
2
3
import pandas as pd
reviews = pd.read_csv("../input/wine-reviews/winemag-data_first150k.csv", index_col=0)
reviews.head(3)

结果:

条形图可以说是最简单的数据可视化。他们将类别映射到数字:例如,早餐(一类)消费的鸡蛋数量;或者,世界葡萄酒产区(类别)与其生产的葡萄酒标签数量(数量):

1
2
#取数据province特征下前10个最常出现的类别:province省份--->出现次数;
reviews['province'].value_counts().head(10).plot.bar()

这个图表告诉我们什么?它说加州生产的葡萄酒远远超过世界上任何其他省份!我们可能会问,加州葡萄酒总量的百分之几是多少?这个条形图告诉了我们绝对数字,但知道相对比例会更有用:

1
2
#取province特征,统计,取前10,计算比例,画图bar plot
(reviews['province'].value_counts().head(10)/len(reviews)).plot.bar()

加州生产葡萄酒占杂志评选到的葡萄酒的几乎三分之一!

条形图非常灵活:高度可以代表任何东西,只要它是一个数字。每个栏都可以代表任何东西,只要它是一个类别。

在这种情况下,类别是标称类别nominal categories:“纯”类别,类别排序没有多大意义。标称分类变量包括国家,邮政编码,奶酪类型等。另一种是序数类别ordinal categories:类别见的排序是有意义,如地震震级,有一定数量公寓的住宅小区,以及当地熟食店的薯条大小。

或者,在我们的案例中,Wine Magazine分配的某个评分的评论数量[ordinal categories]:

1
2
#统计各个得分的数目,直接显示:可以发现,第一个bar是87,第二个是88;按照数目多少排序的
reviews['points'].value_counts().plot.bar()

1
reviews['points'].value_counts().sort_index().plot.bar()

正如你所看到的,每个酿出的酒总分都在80到100之间。而且,如果我们相信葡萄酒杂志是一个品味良好的仲裁者,那么类别92就会比类别91更有意义地“更好”。

折线图Line charts

葡萄酒评论记分卡有20个不同的独特值可供填写,我们的条形图几乎不够。如果杂志评价0-100的话,有100个不同的类别,该怎么办?类别太多了,不适合用条形图处理!

在这种情况下,我们可以使用折线图代替条形图:

1
2
#统计各个得分的数目,将index排序-从小到大(显示更合理)
reviews['points'].value_counts().sort_index().plot.line()

折线图可以传递任意数量的单个取值[100类,1000类],使其成为具有许多唯一值或类别的分布的首选工具[类别性数据,但是有许多许多可能值]

但是,折线图有一个重要的缺点:与条形图不同,它们不适合名义分类数据。虽然条形图区分了点线图的每个“类型”,但它们将它们组合在一起。因此,折线图断言水平轴上的值的顺序,并且对于某些数据,顺序将没有意义。毕竟,从加利福尼亚到华盛顿到托斯卡纳的“下降”并不意味着什么![折线图更适合于ordinal数据,具有一定的连续性,类别间的大小是有关系的,变化趋势也有一定的意义]。

折线图也使得区分单个值变得更加困难[连线]。

通常,如果你的数据可以放入条形图中,只需使用条形图!

面积图Area charts

面积图就是底部有阴影的折线图

1
reviews['points'].value_counts().sort_index().plot.area()

当仅绘制一个变量时,面积图和折线图之间的差异主要是视觉方面上:一个底部有阴影,一个没有。在这种情况下,它们可以互换使用。

定距数据Interval data

定距变量的例子是太阳的温度。定距变量超出了序数分类变量:它具有有意义的顺序,在某种意义上我们可以量化两个条目之间的差异本身就是定距变量。

例如,如果我说这个样本的水是-20摄氏度,而另一个样本是120摄氏度,那么我可以量化它们之间的差异:140度“值”的热量。

有时差异可能是定性的。至少,能够如此清楚地陈述某些东西感觉比说“测量”要多得多,比如说,你会买这种酒而不是那种,因为这个在一些口味测试中得了92分而且只有一个得到了更确切地说,任何具有无限多个可能值的变量肯定是区间变量。

折线图适用于定距数据。条形图不行 - 除非你的测量能力非常有限,定距数据自然会有很大变化[取值太多]

将一个新工具直方图应用到我们的数据集中的定距变量价格上(我们将价格降低到200美元一瓶一下)。

直方图Histograms

1
reviews[reviews['price'] < 200]['price'].plot.hist()

直方图看起来很简单,就像一个条形图。它基本上是!实际上,直方图是一种特殊的条形图,它将您的数据拆分为均匀间隔,并显示每个条形区域中有多少行。唯一的分析差异是,每个条形代表不是代表单个值,而是代表一个区间取值范围

然而,直方图有一个主要缺点(之前我们筛选小于200美元的原因)。因为它们将空间分成均匀间隔[在变量price的取值范围内均匀划分成几个范围相同的区间,然后再进行统计画图],所以它们不能很好地处理偏斜的数据

1
reviews['price'].plot.hist()

这是之前排除大于200美元葡萄酒的真正原因;其中一些葡萄酒真的很贵!图表将“增长”以包含它们[扩大取值范围],从而损害所显示的其余数据。

1
reviews[reviews['price'] > 1500]

从上面显示结果可以看出,葡萄酒价格高于1500美元的只有3个,数据严重倾斜。

有许多方法可以处理偏斜的数据问题;但这些超出了本教程的范围。最简单的方法就是:在合理的范围内筛选数据,删除不合理的数据。 这种现象在统计学上称为偏斜,并且是区间变量中相当常见的现象

直方图最适用于没有偏斜的区间变量。它们对于像“points”这样的序数分类变量也很有效:

1
reviews['points'].plot.hist()

但是图表中出现了数据中不存在的取值,它只是表示一个范围区间。

原文链接:Click me

参考链接:nominal,ordinal,interval,ratio variable怎么区分?

您的支持就是我更新的最大动力!谢谢!