ModelCube(modelcube.cn)是博雅数智自主研发的一站式人工智能科研平台。为全国高校和科研机构的大数据和人工智能科研团队提供一站式科研服务。基于MLOps的实践和企业核心技术,实现了科研场景中全类型数据管理与标注,实验环境快速获取与灵活定制,模型的全生命周期管理,科研成果的管理与发布,以及 AI驱动的论文检索和学习等功能。
在本实验中,大家将学习到如何利用Python的可视化库Seaborn来绘制散点图。在本实验中,大家将处理真实世界的数据集。
import pandas as pd
pd.plotting.register_matplotlib_converters()
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
print("Setup Complete")
Setup Complete
1. 加载并检查数据
我们将使用保险费用数据集,看看我们是否能理解为什么一些客户比其他客户支付更多的保险费用。
数据集共1,388条数据,7个字段,字段说明如下:
字段名称 | 字段说明 |
---|---|
age | 年龄 |
sex | 性别 |
bmi | 体重指数 |
children | 健康保险覆盖的子女数/受抚养子女数 |
smoker | 是否吸烟 |
region | 受益人在美国的居住区,东北部,东南部,西南部,西北部 |
charges | 医疗保险收取的个人医疗费用 |
insurance_filepath = "../dataset/10418/insurance.csv"
insurance_data = pd.read_csv(insurance_filepath)
和往常一样,我们通过打印前五行来检查数据集是否正确加载。
insurance_data.head()
2. 散点图
要创建一个简单的散点图,我们使用"sns.scatterplot"命令并指定以下值:
水平x轴('x=insurance_data['bmi']`)
垂直y轴("y=insurance_data["charges"]")
sns.scatterplot(x=insurance_data['bmi'], y=insurance_data['charges'])
上面的散点图表明体重指数(BMI)和保险费用呈正相关,BMI较高的客户通常也倾向于支付更多的保险费用。(这种模式是有道理的,因为高BMI通常与更高的慢性病风险有关。)
要仔细检查这种关系的强度,大家可能需要添加一条回归线或最适合数据的线。我们通过将命令更改为"sns.regplot"来完成此操作。
sns.regplot(x=insurance_data['bmi'], y=insurance_data['charges'])
3. 颜色编码散点图
我们可以使用散点图来显示('bmi','charges','smoker')三个变量之间的关系!一种方法是对点进行颜色编码。
例如,为了了解吸烟如何影响BMI和保险费用之间的关系,我们可以用"吸烟"对点进行颜色编码,并在轴上绘制其他两列("bmi"、"charges")。
sns.scatterplot(x=insurance_data['bmi'], y=insurance_data['charges'], hue=insurance_data['smoker'])
这个散点图显示,虽然不吸烟者往往会随着BMI的增加而支付略高的费用,但吸烟者支付的费用要高得多。
为了进一步强调这一事实,我们可以使用"sns.lmplot"命令添加两条回归线,分别对应吸烟者和非吸烟者。(大家会注意到,相对于不吸烟者的回归线,吸烟者的回归曲线斜率要陡得多!)
sns.lmplot(x="bmi", y="charges", hue="smoker", data=insurance_data)
上面的"sns.lmplot"命令的工作方式与大家迄今为止所了解的命令略有不同:
我们没有设置'x=insurance_data['bmi']'来选择'insurance_data'中的'bmi'列,而是设置'x="bmi"'来仅指定列的名称。
类似地,
y="charges"
和hue="smoker"
也包含列的名称。我们用
data=insurance_data
指定数据集。
最后,还有一个大家需要了解的图,它看起来可能与平常看到的散点图的方式略有不同。通常,我们使用散点图来突出两个连续变量(如"bmi"和"charges")之间的关系。然而,我们可以调整散点图的设计,使其在主轴之一上具有分类变量(如"吸烟者")。我们将把这种图类型称为分类散点图,并使用"sns.swamplot"命令构建它。
sns.swarmplot(x=insurance_data['smoker'],
y=insurance_data['charges'])
除其他外,这个图形向我们表明:
平均而言,非吸烟者的收费低于吸烟者
支付最多的顾客是吸烟者;而支付最少费用的顾客是非吸烟者。
在线运行本实验请登录ModelCube
http://modelcube.cn/experiment/experiment-detail/1002553
在线运行本实验请登录ModelCube
http://modelcube.cn/experiment/experiment-detail/1002553