可视化关系:全部关于蜂蜜 草图笔记由@sketchthedocs绘制 :---: 可视化关系 - 草图笔记由@nitya绘制 继续我们对自然的研究,让我们发现一些有趣的可视化方法来展示不同类型的蜂蜜之间的关系。这些数据源自美国农业部的数据集。 该数据集包含大约600个条目,显示了多个美国州的蜂蜜生产情况。因此,例如,你可以查看某个州的蜂群数量、每群蜂的产量、总产量、库存、每磅蜂蜜的价格以及从1998年到2012年的产值,每个州每年一个数据行。 将某个州每年的生产量与该州蜂蜜价格的关系进行可视化将会非常有趣。或者,你也可以将各州每群蜂的产量进行可视化。这个时间段涵盖了首次出现在2006年的毁灭性“CCD”或“蜂群崩坏症”(http://npic.orst.edu/envir/ccd.
![]() |
|---|
| 可视化关系 - 草图笔记由@nitya绘制 |
继续我们对自然的研究,让我们发现一些有趣的可视化方法来展示不同类型的蜂蜜之间的关系。这些数据源自美国农业部的数据集。
该数据集包含大约600个条目,显示了多个美国州的蜂蜜生产情况。因此,例如,你可以查看某个州的蜂群数量、每群蜂的产量、总产量、库存、每磅蜂蜜的价格以及从1998年到2012年的产值,每个州每年一个数据行。
将某个州每年的生产量与该州蜂蜜价格的关系进行可视化将会非常有趣。或者,你也可以将各州每群蜂的产量进行可视化。这个时间段涵盖了首次出现在2006年的毁灭性“CCD”或“蜂群崩坏症”(http://npic.orst.edu/envir/ccd.html),所以这是一个很有意义的数据集去研究。
在本节课中,你可以使用之前用过的Seaborn库来可视化变量之间的关系。特别有趣的是Seaborn的relplot函数,它可以方便地创建散点图和折线图,以快速可视化“统计关系”,这有助于数据科学家更好地理解变量之间是如何相互关联的。
使用散点图来展示每个州每年蜂蜜价格的变化。通过使用relplot,Seaborn可以很方便地将州数据分组,并显示分类和数值数据点。
首先,导入数据和Seaborn:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns honey = pd.read_csv('data/honey.csv') honey.head()
你注意到蜂蜜数据有多个有趣的列,包括年份和每磅价格。让我们按美国州来探索这些数据:
| 州 | 蜂群数量 | 每群蜂产量 | 总产量 | 库存 | 每磅价格 | 产值 | 年份 |
|---|---|---|---|---|---|---|---|
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
创建一个基本的散点图来展示每磅蜂蜜的价格与它的原产州之间的关系。确保y轴足够高以显示所有州:
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);

现在,使用蜂蜜色系来展示价格随年份的变化。你可以通过添加'hue'参数来显示逐年变化:
✅ 了解更多有关在Seaborn中使用的颜色调板 - 尝试一个美丽的彩虹色系!
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);

通过这种颜色变化,你可以看到每磅蜂蜜的价格在逐年显著上升。确实,如果你查看数据中的样本集来验证(选择一个给定的州,比如亚利桑那州)你会发现价格逐年增加的模式,尽管有一些例外:
| 州 | 蜂群数量 | 每群蜂产量 | 总产量 | 库存 | 每磅价格 | 产值 | 年份 |
|---|---|---|---|---|---|---|---|
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
另一种展示这种变化的方法是使用大小而不是颜色。对于色盲用户来说,这可能是一个更好的选择。编辑你的可视化,使价格的增加对应于圆点直径的增加:
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
你可以看到圆点的大小逐渐增加。

这是简单的供求关系吗?由于气候变化和蜂群崩坏症等因素,每年蜂蜜的供应量是否减少,从而导致价格上涨?
为了发现数据集中某些变量之间的相关性,让我们探索一些折线图。
问题:每磅蜂蜜的价格是否逐年明显上升?最简单的方法是创建一条折线图:
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
答案:是的,但2003年除外:

✅ 因为Seaborn将数据聚合在一个线上,它会“通过绘制平均值及其周围95%的置信区间来显示每个x值处的多次测量”。来源。可以通过添加ci=None来禁用这种耗时的行为。
问题:那么在2003年,我们是否还能看到蜂蜜供应量的激增?如果查看每年的总产量呢?
sns.relplot(x="year", y="totalprod", kind="line", data=honey);

答案:并没有。如果你查看总产量,实际上在那一年似乎有所增加,尽管总体上蜂蜜产量正在下降。
问题:在这种情况下,2003年左右蜂蜜价格的上涨是什么原因造成的?
为了发现这一点,你可以探索一个网格图。
网格图选取数据集的一个方面(在这个例子中,我们可以选择‘年’,以避免产生过多的网格)。Seaborn可以针对你选择的每个方面生成一个图表,以便更容易地进行视觉比较。在这样的比较中,2003年是否突出?
通过继续使用relplot来创建网格图,如Seaborn文档所推荐。
sns.relplot( data=honey, x="yieldpercol", y="numcol", col="year", col_wrap=3, kind="line"
在这个可视化中,你可以逐侧比较每年每群蜂的产量和蜂群数量,设置3列:

对于这个数据集,在每年每群蜂的产量和蜂群数量方面没有特别突出的地方。还有其他方法来查找这两个变量之间的相关性吗?
尝试一个多线图,通过在顶部叠加两个折线图,使用Seaborn的'despine'来移除它们的顶部和右侧边框,并使用ax.twinx来自Matplotlib。twinx允许图表共享x轴并显示两个y轴。因此,显示每群蜂的产量和蜂群数量,叠加在一起:
fig, ax = plt.subplots(figsize=(12,6)) lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey, label = 'Number of bee colonies', legend=False) sns.despine() plt.ylabel('# colonies') plt.title('Honey Production Year over Year'); ax2 = ax.twinx() lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r", label ='Yield per colony', legend=False) sns.despine(right=False) plt.ylabel('colony yield') ax.figure.legend();

虽然在2003年没有什么特别突出的地方,但这让我们以更积极的态度结束这一课:虽然蜂群数量总体上在减少,但蜂群数量正在稳定下来,即使每群蜂的产量在减少。
加油,蜜蜂们,加油!
蜜蜂爱❤️
在这节课中,你学习了一些散点图和折线图的其他用途,包括网格图。挑战自己使用不同的数据集创建一个网格图,也许是你之前用过的数据集。注意它们需要多长时间才能创建,并且要小心使用这些技术时需要绘制多少个网格。
折线图可以很简单也可以很复杂。在Seaborn文档中阅读有关构建折线图的不同方法。尝试用文档中列出的其他方法增强你在本课中构建的折线图。
**声明**: 本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。