Python使用Seaborn绘制钻石数据集可视化分析教程
本文介绍如何利用Python的Seaborn库对钻石数据集进行可视化分析。通过scatterplot、lmplot和jointplot等函数,展示钻石重量、价格、切割等级及尺寸的相关性。涵盖主题设置、颜色映射、散点图趋势线及分布图绘制,帮助开发者掌握高颜值数据图表的制作技巧。
挑钻石第二弹
seaborn作为matplotlib的扩展库,提供了一系列美观的图形界面,并集成了多种在线数据集。通过sns.load_dataset()函数即可调用这些数据集供学习使用。若遇到网络不稳定的情况,可将数据集下载至本地,并在调用时将cache参数设置为True以启用本地缓存。
scatter_plot
官方示例展示了diamonds数据集中的钻石信息。diamonds数据集共包含十项关键指标,具体包括:重量(克拉)、切割等级、颜色、净度、深度百分比、table值、价格,以及x、y、z三个方向的尺寸数据。
首先观察x与y方向尺寸之间是否存在相关性。
import seaborn as sns
import matplotlib.pyplot as plt
# 本地加载数据集
dia = sns.load_dataset("diamonds",data_home="seaborn-data", cache=True)
# 以上几行代码后面不再重复书写
sns.scatterplot(x=dia['x'],y=dia['y'],size=5)
plt.show() #用于显示图片,后文就不写了

图中x代表x轴数据,y代表y轴数据。从图中可以看出,大多数钻石的尺寸比例较为规则。
官方画廊生成的图像如下所示。

该图的横坐标表示重量(克拉),纵坐标表示价格。观察发现,钻石商人似乎存在某种“强迫症”,重量为2.0克拉、1.5克拉、1.0克拉等整数或半整数规格的钻石数量明显多于周围重量的钻石。
f, ax = plt.subplots(figsize=(6.5, 6.5))
sns.set_theme(style="whitegrid")
sns.despine(f, left=True, bottom=True)
clarity = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"] #颜色深浅的顺序
sns.scatterplot(x="carat", y="price", #声明x轴和y轴的值
hue="clarity", size="depth", #clarity和depth分别调控颜色和尺寸
palette="ch:rot=-.2,d=.3_r", #调色板
style_order=clarity,sizes=(1,10), #颜色标识的顺序和尺寸范围
linewidth=0,data=dia, ax=ax)
plt.show()
首先,set_theme函数用于设置绘图主题,其中style参数可以接收字符串或字典,用于调整整体主题风格。
其次,palette代表颜色映射。当其输入值为字符串时,其具体含义如下表所示。
| 缩写 | 取值范围 | ||
|---|---|---|---|
| start | s | [0,3] | 渐变始点颜色 |
| rot | r | 用于调控色相 | |
| gamma | g | 不小于0 | 小于1时,提高暗部;大于1时,加强高光 |
| hue | h | [0,1] | Saturation of the colors. |
| dark | d | [0,1] | 最暗处的强度 |
| light | l | [0,1] | 最亮处颜色的强度 |
sizes用于调整数据点的尺寸。当设置size参数时,系统会将size中的值映射到ssizes中,从而在图中体现点的大小差异。
注意到钻石属性中包含“切割水平”这一项,接下来我们将绘制切割等级与价格之间的关系图。
fig, ax = plt.subplots(figsize=(6.5, 6.5))
sns.set_theme(style="whitegrid")
sns.despine(fig, left=True, bottom=True)
sns.scatterplot(data = dia, x="carat", y="price",
style="cut",hue='cut',
linewidth=0)
plt.show()
去除渐变颜色后,图表的美观度有所下降,但我们可以发现very good并非最佳的切割等级。例如,在3.0克拉级别的钻石中,存在一颗very good级别的钻石价格最低。根据GIA的钻石分级标准,等级从高到低依次为Excellent、Very Good、Good、Fair和Poor。在该数据集中,ideal可能对应的是Excellent等级。

lmplot
若需更准确地观察cut对钻石价格的影响,可以通过lmplot在散点图基础上绘制趋势线。
sns.lmplot(data=dia, x="carat", y="price",hue='cut',markers = '.') plt.show()

通过趋势线可以明显看出,ideal等级的钻石表现最佳。
jointplot
前述图表主要关注消费者关心的价格、尺寸及透明度等指标。然而,商家更关注价格、重量与销量之间的关系,这涉及数据分布问题。Seaborn提供了优秀的双变量关系图——jointplot,效果如下。


从图中可见,价格较低的钻石更为畅销。相关代码如下。
# 左图代码 sns.jointplot(data=dia, x="carat", y="price",xlim=(0,3),ylim=(0,17500), ratio=10,kind='hex',color="#4CB391") # 右图代码 sns.jointplot(data=dia, x="carat", y="price",hue='cut', xlim=(0,3),ylim=(0,17500), ratio=10,marker='.')
其中,kind用于更改图像类型,sns库提供了六种可选风格:"scatter"、"kde"、"hist"、"hex"、"reg"和"resid"。
以上就是Python使用matplotlib和seaborn进行钻石数据可视化的详细内容,更多关于相关绘图技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













