目录
2.4 提琴形图@数值特征-sns.violinplot()
3.1.2 散点图-plt.scatter()或sns.jointplot()
1、介绍
在机器学习领域中,可视化是十分重要的。在开始一项新任务时,通过可视化手段探索数据能更好地帮助人们把握数据的要点。在分析模型表现和模型报告的结果时,可视化能使分析显得更加生动鲜明。有时候,为了理解复杂的模型,我们还可以将高维空间映射为视觉上更直观的二维或三维图形。
总而言之,可视化是一个相对快捷的从数据中挖掘信息的手段。本文将使用 Pandas、Matplotlib、seaborn 等流行的库
2、单变量可视化
2.1 直方图@数值特征
直方图依照相等的间隔将值分组为柱,它的形状可能包含了数据分布的一些信息,如高斯分布、指数分布等。当分布总体呈现规律性,但有个别异常值时,你可以通过直方图辨认出来。当你使用的机器学习方法预设了某一特定分布类型(通常是高斯分布)时,知道特征值的分布是非常重要的。
2.1.1 DataFrame的hist()方法
最简单的查看数值变量分布的方法是使用 DataFrame 的hist() 方法绘制直方图。
DataFrame.hist(column=None, by=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, ax=None, sharex=False, sharey=False, figsize=None, layout=None, bins=10, backend=None, legend=False, **kwargs)[source]
# 方法一:df.hist()
features = ["Total day minutes","Total intl calls"]
df[features].hist(figsize=(10,4))
# 方法二:df.plot()
df[features].plot(kind="hist")
上图表明,变量 Total day minutes 每日通话时长 呈高斯分布,而 Total intl calls 总国际呼叫数 显著右倾(它右侧的尾巴更长)。
2.1.2 seaborn的distploy()实现
sns.distplot(df['Total intl calls'],kde=False,bins=8)
2.1.3 matplotlib的dist()方法
plt.hist(df['Total intl calls'])
2.2 密度图@数值特征
密度图(density plots),也叫核密度图(KDE)是理解数值变量分布的另一个方法。它可以看成是直方图平滑的版本。相比直方图,它的主要优势是不依赖于柱的尺寸,更加清晰。
2.2.1 DataFrame的plot()实现
df[features].plot(kind="density",subplots=True,layout=(1, 2),
sharex=False,figsize=(10,4),legend=False,title=features)
2.2.2 seaborn的distploy()实现
使用 seaborn 的 distplot() 方法观测数值变量的分布。默认情况下,该方法将同时显示直方图和密度图。
seaborn.distplot(a=None, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None, x=None)
2.3 箱型图@数值特征-sns.boxplot()
箱形图的主要组成部分是箱子(box),须(whisker)和一些单独的数据点(离群值),分别简单介绍如下:
- 箱子显示了分布的四分位距,它的长度由 25𝑡ℎ(Q1,下四分位数) 和 75𝑡ℎ(Q3,上四分位数) 决定,箱中的水平线表示中位数 (50%)。
- 须是从箱子处延伸出来的线,它们表示数据点的总体散布,具体而言,是位于区间 (Q1−1.5⋅IQR,Q3+1.5⋅IQR)的数据点,其中 IQR=Q3−Q1,也就是四分位距。
- 离群值是须之外的数据点,它们作为单独的数据点,沿着中轴绘制。
使用 seaborn 的 boxplot() 方法绘制箱形图
sns.boxplot(x='Total intl calls', data=df)
sns.boxplot(df["Total intl calls"])
上图表明,在该数据集中,大量的国际呼叫是相当少见的。
sns.boxplot(x="International plan",y="Total intl calls",data=df,
hue="Voice mail plan",palette="Set3")
2.4 提琴形图@数值特征-sns.violinplot()
提琴形图和箱形图的区别是,提琴形图聚焦于平滑后的整体分布,而箱形图显示了单独样本的特定统计数据。
使用 violinplot() 方法绘制提琴形图。下图左侧是箱形图,右侧是提琴形图。
_, axes = plt.subplots(1,2,sharey=True, figsize=(6,4))
sns.boxplot(data=df["Total intl calls"], ax=axes[0])
sns.violinplot(data=df["Total intl calls"], ax=axes[1])
一般来说,小提琴图是一种绘制连续型数据的方法,可以认为是箱形图与核密度图的结合体
2.5 条形图@类别特征-sns.countplot()
频率表的图形化表示是条形图。创建条形图最简单的方法是使用 seaborn的 countplot() 函数。让我们来画出两个分类变量的分布。
seaborn.countplot(*, x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, dodge=True, ax=None, **kwargs)
_, axes = plt.subplots(nrows=1,ncols=2,figsize=(12,4))
sns.countplot(x="Churn",data=df,ax=axes[0])
sns.countplot(x="Customer service calls