diff --git a/6.md b/6.md index 45f418fd8b9bce0360fc3fff36c2a86ad891b8a4..bafbceced3f8ae599f260354ddc8dd4e37b5162c 100644 --- a/6.md +++ b/6.md @@ -714,3 +714,113 @@ heights (省略了 169 行) +`scatter`方法使我们能够可视化,儿子的身高如何与父母的身高有关。 在图中,儿子的身高将形成公共的横轴。 + +```py +heights.scatter('son') +``` + +注意我们仅仅指定了公共的横轴上的变量(儿子的身高)。 Python 绘制了两个散点图:这个变量和另外两个之间的关系,每个关系一个。 + +金色和蓝色的散点图向上倾斜,并显示出儿子的高度和父母的高度之间的正相关。 蓝色(父亲)的绘图一般比金色高,因为父亲一般比母亲高。 + +### 线形图 + +我们的下一个例子涉及更近的儿童数据。 我们将返回到人口普查数据表`us_pop`,再次在下面创建用于参考。 由此,我们将提取 0 至 18 岁年龄段的所有儿童的数量。 + +```py +# Read the full Census table +census_url = 'http://www2.census.gov/programs-surveys/popest/datasets/2010-2015/national/asrh/nc-est2015-agesex-res.csv' +full_census_table = Table.read_table(census_url) + +# Select columns from the full table and relabel some of them +partial_census_table = full_census_table.select(['SEX', 'AGE', 'POPESTIMATE2010', 'POPESTIMATE2014']) +us_pop = partial_census_table.relabeled('POPESTIMATE2010', '2010').relabeled('POPESTIMATE2014', '2014') + +# Access the rows corresponding to all children, ages 0-18 +children = us_pop.where('SEX', are.equal_to(0)).where('AGE', are.below(19)).drop('SEX') +children.show() +``` + +| AGE | 2010 | 2014 | +| --- | --- | --- | +| 0 | 3951330 | 3949775 | +| 1 | 3957888 | 3949776 | +| 2 | 4090862 | 3959664 | +| 3 | 4111920 | 4007079 | +| 4 | 4077551 | 4005716 | +| 5 | 4064653 | 4006900 | +| 6 | 4073013 | 4135930 | +| 7 | 4043046 | 4155326 | +| 8 | 4025604 | 4120903 | +| 9 | 4125415 | 4108349 | +| 10 | 4187062 | 4116942 | +| 11 | 4115511 | 4087402 | +| 12 | 4113279 | 4070682 | +| 13 | 4119666 | 4171030 | +| 14 | 4145614 | 4233839 | +| 15 | 4231002 | 4164796 | +| 16 | 4313252 | 4168559 | +| 17 | 4376367 | 4186513 | +| 18 | 4491005 | 4227920 | + +现在我们可以绘制两个叠加的线形图,显示 2010 年和 2014 年的不同年龄的儿童人数。方法调用类似于前面例子中的`scatter`调用。 + +```py +children.plot('AGE') +``` + +在这个刻度上,重要的是要记住我们只有`0,1,2`岁等等的数据。 两个图形的点相互“交织”。 + +这些图表在一些地方相互交叉:例如,2010 年的 4 岁人数比 2014 年多,2014 年的 14 岁人数比 2010 年多。 + +当然,2014 年的 14 岁儿童大部分都是 2010 年的 10 岁儿童。为了看到这一点,请查看 14 岁的金色图表和 10 岁的蓝色图表。事实上,您会注意到,整个金色图表(2014 年)看起来像蓝色图表(2010 年)向右滑了 4 年。 由于 2010 年至 2014 年间进入该国的儿童的净效应,这个下滑幅度还是有所上升, 幸运的是,在这些年代,没有太多的生命损失。 + +### 条形图 + +对于本节的最后一个例子,我们看看加利福尼亚州以及整个美国的成人和儿童的种族分布情况。 + +凯撒家庭基金会根据人口普查数据,编制了美国人口种族分布情况。基金会的网站提供了 2014 年整个美国人口以及当年 18 岁以下的美国儿童的数据汇总。 + +这里是一个表格,采用了美国和加利福尼亚州的数据。 这些列代表美国和加利福尼亚州的每个人,美国和加州的儿童。 表格的主体包含不同类别的比例。 每一列显示了,该列对应的人群的种族分布。 所以在每一列中,条目总计为 1。 + +```py +usa_ca = Table.read_table('usa_ca_2014.csv') +usa_ca +``` + + +| Ethnicity | USA All | CA All | USA Children | CA Children | +| --- | --- | --- | --- | --- | +| Black | 0.12 | 0.05 | 0.14 | 0.05 | +| Hispanic | 0.18 | 0.38 | 0.24 | 0.5 | +| White | 0.62 | 0.39 | 0.52 | 0.29 | +| Other | 0.08 | 0.18 | 0.1 | 0.16 | + +我们自然想要比较这些分布。 直接比较列是有意义的,因为所有条目都是比例,因此在相同刻度上。 + +`barh`方法允许我们通过在相同轴域上绘制多个条形图,将比较可视化。这个调用类似于`scatter`和`plot`:我们必须指定类别的公共轴。 + +> 译者注:轴域(Axes)是横轴和纵轴围城的区域。 + +```py +usa_ca.barh('Ethnicity') +``` + +虽然绘制叠加的条形图非常简单,但是我们可以在这个图表上找到太多的信息,以便能够理清种群之间的相似性和差异性。 似乎很清楚的是,美国所有人和美国儿童的种族分布比任何其他列都更相似,但是一次比较一对要容易得多。 + +首先比较美国和加利福尼亚的整个人口。 + +```py +usa_ca.select('Ethnicity', 'USA All', 'CA All').barh('Ethnicity') +``` + +这两个分布是完全不同的。 加利福尼亚州的拉美裔和其他类别比例较高,黑人和白人比例相应较低。 这种差异主要是由于,加利福尼亚州的地理位置和移民模式,无论是历史上还是近几十年来。 例如,加利福尼亚的“其他”类别包括相当一部分亚洲人和太平洋岛民。 + +从图中可以看出,2014 年加州近 40% 的人口是拉美裔。 与该州儿童人口的比较表明,未来几年拉美裔人口的比例可能会更高。 在加州儿童中,50% 属于拉美裔。 + +```py +usa_ca.select('Ethnicity', 'CA All', 'CA Children').barh('Ethnicity') +``` + +更复杂的数据集自然会产生各种有趣的可视化效果,包括不同种类的重叠图形。 为了分析这些数据,获得更多的数据操作技能的有帮助的,这样我们就可以将数据转化为一种形式,使我们能够使用本节中的方法。 在下一章中,我们将介绍其中的一些技巧。