机器学习入门 06 —— Seaborn使用


系列文章

机器学习入门 01 —— 机器学习概述
机器学习入门 02 —— 环境搭建(Jupyter Notebook 及扩展库的安装与使用)
机器学习入门 03 —— Matplotlib使用
机器学习入门 04 —— Numpy使用
机器学习入门 05 —— Pandas使用
机器学习入门 06 —— Seaborn使用


6 Seaborn

Seaborn也是用于绘制图形的,Matplotlib虽然已经是比较优秀的绘图库了,但它的API使用比较复杂,而Seaborn是基于Matplotlib核心库进行了更高级的API封装,可以轻松绘制更漂亮的图形,其配色更加舒适、图形样式更加细腻。

如果没有安装,可以通过命令pip3 install seaborn安装。我是使用了Anaconda进行包管理,所以基本上库都安装过了。可以看我另一篇博客,使用Anaconda管理Python包要方便很多。

Seaborn的使用非常简单,它不会像Matplotlib那样给你提供很多函数,通常我们根据变量的数目来决定使用哪个函数,单变量distplot()、双变量jointplot()

设置主题 sns.set_style("whitegrid")

1.darkgrid(灰色网格)
2.whitegrid(白色网格)
3.dark(黑色)
4.white(白色)
5.ticks(十字叉)

white和ticks两种主题都会包含没有必要的上边框和右边框。我们可以用despine()函数去除。

# 去掉多余的线
sns.despine()

 

6.1 绘制单变量分布

单变量顾名思义,就是只有一个变量,因此数据也是Series类型的。Seaborn的函数distplot()默认绘制的是带有核密度估计曲线的直方图。(核密度估计曲线不懂没关系,后面看例子就明白了)

seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, color=None)

  • a:表示要观察的数据,可以是Series、一维数组、列表等。
  • bins:用于控制条柱的数量。
  • hist:是否绘制直方图。
  • kde:是否绘制高斯核密度估计曲线。可以更加直观的看出数据分布特征。
  • rug:是否在轴上绘制rugplot。

下面通过例子来简单看看。

import numpy as np
import seaborn as sns

np.random.seed(0) # 确定随机种子,使得每次随机的数字相同以便观察
array = np.random.randn(100) # 生成100个随机数的数组

# 绘制直方图
sns.distplot(array, bins=10, hist=True, kde=True, rug=True)

在这里插入图片描述

 

6.2 绘制双变量分布

双变量也很简单,只需使用jointplot()就可以绘制,默认是绘制双变量散点图。

seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, ratio=5, space=0.2, dropna=True)

  • kind:表示绘制图形的类型,默认散点scatter,其他还有直方图hex、核密度估计曲线kde
  • stat_func:是否显示关系统计量。
  • color:绘图元素的颜色。例如 color='r’就是红色。
  • size:图的大小。
  • ratio:中心图与上侧、右侧图的比例,值越大,中心图占比越大。
  • space:中心图与上侧、右侧图的间隔。
import numpy as np 
import pandas as pd 
import seaborn as sns

sns.set() # 导入seaborn的默认设置
data = pd.DataFrame({'x':np.random.randn(500), 'y':np.random.randn(500)}) # 生成随机DataFrame

1 绘制散点图

sns.jointplot(x="x", y="y", data=data)

在这里插入图片描述

 

2 绘制二维直方图

sns.jointplot(x="x", y="y", data=data, kind='hex')

在这里插入图片描述

 

3 绘制核密度估计图

sns.jointplot(x="x", y="y", data=data, kind='kde')

在这里插入图片描述

4 绘制成对的双变量分布

要想在数据集中绘制多个成对的双变量分布,则可以使用pairplot()函数实现,该函数会创建一个坐标轴矩阵,并且显示Datafram对象中每对变量的关系。另外,pairplot()函数也可以绘制每个变量在对角轴上的单变量分布。

如果下面代码中加载数据集失败可以看我另一篇博客:解决sns.load_dataset()加载失败问题

# 这里使用seaborn自带的数据来显示
dataset = sns.load_dataset('iris') # 加载鸢尾花数据集
dataset.head()

在这里插入图片描述

# 绘制多个成对的双变量分布 
sns.pairplot(dataset)

在这里插入图片描述

 

6.3 绘制分类数据图

数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。

Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:

  • 分类数据散点图: swarmplot()与 stripplot()。
  • 类数据的分布图: boxplot() 与 violinplot()。
  • 分类数据的统计估算图:barplot() 与 pointplot()。

 

1 类别散点图

包括striplot()和swarmplot(),它们的区别是,swarmplot()不会让数据重叠。

 

striplot()

seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=True, dodge=False)

  • x,y,hue:x和y是坐标轴标签。hue是对数据再次分类。
  • data:用于绘制的数据集。如果x和y不存在,则它将作为宽格式,否则将作为长格式。
  • jitter:当有很多数据点重叠时,可以指定抖动的数量或者设为Tue使用默认值。(默认就是True)
  • dodge:是否让不同类别的数据分开显示。

下面用代码演示下:

# 获取tips数据
tips = sns.load_dataset('tips')
tips.head(3)

在这里插入图片描述

默认的样式

# 展示不同时间点time的总账单数目
sns.stripplot(x='time', y='total_bill', data=tips)

在这里插入图片描述

参数修改样式

# 展示不同时间点time的总账单数目
# hue='day',根据day进行细分。
# jitter=False,去除一些重合的数据。
# dodge=True,把不同day分开。(如果设为False,那么lunch的蓝色和黄色会重叠,dinner的三个也会重叠)
sns.stripplot(x='time', y='total_bill', hue='day', data=tips, jitter=False, dodge=True)

在这里插入图片描述

 

swarmplot()

以树状的形式展现,这样就不会重叠,其他用法和striplot差不多。

sns.swarmplot(x="day", y="total_bill", data=tips)

在这里插入图片描述

 

2 箱型图和小提琴图

  • 箱型图:它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

在这里插入图片描述

  • 小提琴图:
    • 小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。
    • 这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。
    • 中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。
    • 箱形图在数据显示方面受到限制,简单的设计往往隐藏了有关数据分布的重要细节。例如使用箱形图时,我们不能了解数据分布。虽然小提琴图可以显示更多详情,但它们也可能包含较多干扰信息。

在这里插入图片描述

 

箱型图

seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)

  • palette:用于设置不同级别色相的颜色变量。---- palette=[“r”,“g”,“b”,“y”]
  • saturation:用于设置数据显示的颜色饱和度。---- 使用小数表示
sns.boxplot(x="day", y="total_bill", data=tips)

在这里插入图片描述

 

小提琴图

seaborn.violinplot(x=None, y=None, hue=None, data=None)

sns.violinplot(x="day", y="total_bill", data=tips)

在这里插入图片描述

 

3 条形图和点图

要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。

 

条形图

最常用的查看集中趋势的图形就是条形图。默认情况下, barplot函数会在整个数据集上使用均值进行估计。若每个类别中有多个类别时**(使用了hue参数),则条形图可以使用引导来计算估计的置信区间(是指由样本统计量所构造的总体参数的估计区间)**,并使用误差条来表示置信区间(就是下面黑色的那条线)。

sns.barplot(x="day", y="total_bill", data=tips)

在这里插入图片描述

 

点图

另外一种用于估计的图形是点图,可以调用 pointplot()函数进行绘制,该函数会用高度低计值对数据进行描述,而不是显示完整的条形,它只会绘制点估计和置信区间。

sns.pointplot(x="day", y="total_bill", data=tips)

在这里插入图片描述

 

6.4 案例:NBA球员数据分析

1 基本数据介绍

每个球迷心中都有一个属于自己的迈克尔·乔丹、科比·布莱恩特、勒布朗·詹姆斯。 本案例将用jupyter notebook完成NBA菜鸟数据分析初探。

数据集下载:https://download.csdn.net/download/qq_39763246/20936311
案例中使用的数据是2017年NBA球员基本数据,数据字段见下表:

在这里插入图片描述

2 获取数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_csv("2017年NBA球员相关信息.csv")
data.head(3)

在这里插入图片描述

data.describe() # 查看每列的基本信息 统计、平均值、标准差、最值等

image-20210809212704389

 

3 数据分析

数据相关性分析

数据相关性用了热力图来体现,每个格子中的值表示x轴与y轴的相关性。值越大,说明越相关。例如,第一列中ORPM与RPM最相关,根据字段表可以看出,是进攻正负值和正负值。

# 这里只取了部分列,为了让图像更清晰
data_cor = data.loc[:, ['RPM', 'AGE', 'SALARY_MILLIONS', 'ORB', 'DRB', 'TRB',
                       'AST', 'STL', 'BLK', 'TOV', 'PF', 'POINTS', 'GP', 'MPG', 'ORPM', 'DRPM']]
# 获取两列数据之间的相关性
corr = data_cor.corr()
# 创建画布 以便用sns画图时好设置图像大小
plt.figure(figsize=(20, 8), dpi=100)  # 因为seaborn是基于matplotlib的,设置plt就可以设置sns。
# corr是数据,square让图像是正方形(默认是长方形),linewidths设置每个格子间隙,annot显示每个格子具体值
sns.heatmap(corr, square=True, linewidths=0.1, annot=True)

在这里插入图片描述

 

数据排名分析
# 按照球员薪资降序排名
data.loc[:, ["PLAYER", "SALARY_MILLIONS"]].sort_values(by="SALARY_MILLIONS", ascending=False).head()

在这里插入图片描述

 

球员薪资和年龄分布
# 利用seaborn中的distplot绘图来分别看一下球员薪水、年龄的分布情况

sns.set_style("darkgrid")

plt.figure(figsize=(14, 5)) # 创建画布(以便设置seaborn的图形大小)

plt.subplot(1, 2, 1) # 表明 这次有1行2列个图,这是第1个图。
sns.distplot(data["SALARY_MILLIONS"])
plt.ylabel("salary")

plt.subplot(1, 2, 2) # 表明 这次有1行2列个图,这是第2个图。
sns.distplot(data["AGE"])
plt.ylabel("AGE")

在这里插入图片描述

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python机器学习入门的第一个任务是处理数据。数据是机器学习的基础,因此了解如何处理和准备数据是非常重要的。在Python中,有许多库和工具可用于数据处理,例如NumPy和Pandas。NumPy是一个用于科学计算的强大库,可以处理多维数组和矩阵。Pandas是一个用于数据分析和处理的库,它提供了灵活的数据结构和数据操作功能。 在任务1中,您需要学习如何加载数据集,了解数据的结构和特征,处理缺失值和异常值,进行数据清洗和转换等。您可以使用Pandas库来加载和处理数据集,使用其提供的函数和方法来完成这些任务。例如,您可以使用Pandas的read_csv函数来加载CSV文件,使用head函数来查看数据的前几行,使用describe函数来获取数据的统计信息,使用dropna函数来删除缺失值等。 此外,您还可以使用Matplotlib和Seaborn等库来可视化数据,以便更好地理解数据的分布和关系。这些库提供了各种绘图函数和方法,可以创建直方图、散点图、箱线图等。 总之,Python机器学习入门的第一个任务是数据处理,您需要学习如何加载、清洗和转换数据。使用Pandas、NumPy和其他相关库可以帮助您完成这些任务。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [python机器学习模块_机器学习所需的python基础知识及其库模块](https://blog.csdn.net/weixin_26711425/article/details/108935596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老板来碗小面加蛋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值