%config InlineBackend.figure_format = 'svg'

在jupyter notebook中使用这个命令绘制更清晰的图像,注意百分号后不能有空格。

1. Univariate visualization

单变量分析每次查看一个特征。当我们独立地分析一个特征时,我们通常最感兴趣的是它的值的分布。

1.1 数量特征

数量特征取有序的数值。这些值可以是离散的,像整数,或者是连续的,像实数,通常表达计数或者度量的含义。

使用 Histograms and density plots

# method in pandas
df['feature'].hist()
df['feature'].plot(kind='density')
# pandas的绘图函数中可以通过传入 subplot=True & layout=(m,n)来自定义绘制的多个子图的布局 # method in seaborn
sns.displot(df[feature])
# seaborn中的displot会同时绘制直方图和密度图

使用 Box plot and Violin plot

关于 Box plot 的很好的图视化解释参考 箱形图。Box plot中的离群值需要特别关注。

# method in pandas,不知道是缺少相关参数的问题还是什么,没有画出离群点,seaborn中有画
df['feature'].plot(kind = 'box')
df['feature'].plot.box() # method in seaborn
sns.boxplot(data=df['feature'])
sns.violinplot(data=df['feature'])

1.2 类别特征和二元特征

类别特征取固定数目的值。二元特征是类别特征只有两种取值时的一个特例情况。如果在类别特征上的值可以是无序的也可以是由顺序的。

使用频率表

df['feature'].value_counts()
# 默认结果中的 entry 按照最大频率到最小频率排列

使用 Bar plot

Bar plot 是频率表的图形化展示。

# method in pandas
df['feature'].value_counts().plot.bar() # method in seaborn
sns.countplot(x='feature', data=df) # 至少传两个参数

seaborn中的barplot() 利用矩阵条的高度反映数值变量的集中趋势,这个barplot并不是我们在此处想要使用的barplot。一定要记住,seaborn中的barplot展示的是某种变量分布的平均值 ,当需要精确观察每类数值变量(数值变量在类别变量上做groupby)的分布趋势,boxplot与violinplot往往是更好的选择。

Tips: 将多幅图对比绘制的方法

figure, axes = plt.subplots(nrows=m, ncols=n,figsize=(m*x_length,n*y_length))
sns.plot(..., ax=axes[0])
df.plot(..., ax=axes[1])
figure.show()

总结:

  1. 直方图表示数值变量的分布情况,而条形图表示类别变量的频率的分布情况。
  2. 直方图的x轴是连续的,条形图的x轴是离散的;二者的y轴都是连续的。

2. Multivariate visualization

多变量图表允许我们去看两个或多个变量(注意:可以通过技巧在二维平面上绘制三个变量之间的某些关系) 之间的关系。

2.1 数量 vs 数量

使用 Correlation matrix and heatmap

# method : {‘pearson’, ‘kendall’, ‘spearman’}
corr_matrix = df[num_features].corr()
sns.heatmap(corr_matrix)

使用 Scatter plot

# method in matplotlib
plt.scatter(df['num_x'], df['num_y']) # method in pandas
df.plot.scatter(x='num_x', y= 'num_y') # method in seaborn
sns.jointplot(x='num_x', y='num_y', data = df, kind='scatter') # this is the smoothed version of bivariate distribution
sns.jointplot('num_x', 'num_y', data=df, kink='kde')

使用 Scatterplot matrix

# method in pandas
pd.scatter_matrix(df['num_features']) # method in seaborn
sns.pairplot(df['num_features'])

2.2 数量 vs 类别

前面我们提到过可以在二维平面展示三个变量之间的关系,这种技巧就是利用pandas或者seaborn的语义映射能力,将第三个变量(只能是类别)用不同颜色区分开来。下面是一个例子:

sns.scatter('num_x', 'num_y', data=df, hue='cate_third_var')

使用 Box plot and Violin plot

一般是观察一个数值变量在不同类别下的分布情况

sns.boxplot(x='..._feat', y='..._feat', orient='v')
# orient 默认为'v',这时传给x类别特征,传给y数值特征;当x,y的特征类型反着传时,必须把 orient设置为'h'才能正确绘图。orient可以看作时数值特征轴的方向。 # sns.violinplot()类似

使用 sns.catplot()

当我们想要一次在两个类别变量维度来分析一个数值变量时,在seaborn中有一个非常适合的函数叫做catplot()。

sns.catplot(x='cate_feature1', y='num_feature', col='cate_feature2', data=df, kind='box', col_wrap=n, height=m, aspect=.8)

上面的代码将会画m*n个子图,每个子图中是一个sns.boxplot(x='cate_feature1', y='num_feature', data=df), 但是每个子图中的数据df是cate_feature2取某个类别时的子集。

2.3 类别 vs 类别

使用 sns.countplot() plus "hue semantic"

原理是通过条形图来描述类别的分布,并且通过颜色语义映射的方法来加入第二个类别变量。注意,这种方法研究的主要对象仍然是第一个类别变量,语义映射只是把第二个类别变量对其的影响表示出来,语义映射的变量相当于辅助变量。

sns.countplot(x='cate_feature1', hue='cate_feature2', data=df)

使用 Contingency table

除了使用图形的方式来分析类别变量,还有一个来自统计学的传统工具:列联表(contingency table)也叫做交叉表(cross tabulation)。它将多个类别变量的频率分布用一张表格来表示。特别的是,它允许我们通过沿着一行或是沿着一列来查看一个变量在其他变量某些条件下的分布。

pd.crosstab(df['cate_feautre1'], df['cate_feature2'])

3. Whole dataset

3.1 Naive approach

最简单的方法就是使用前面介绍的分析一个,两个或者是三个变量的方法逐个地探索完整个数据集。也可以使用sns.pairplot()或者pd.scatter_matrix()一次完成。

3.2 Dimensional reduction

使用 t-SNE

from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler # step1 对数值变量做归一化处理
# step2 对两类变量用LabelEncoder()
tsne = TSNE(random_state=17)
tsne_repr = tsne.fit_transform(X_scaled) plt.scatter(tsne_repr[:,0], tsne_repr[:,1], alpha =.5)

EDA cheat sheet的更多相关文章

  1. 转:PostgreSQL Cheat Sheet

    PostgreSQL Cheat Sheet CREATE DATABASE CREATE DATABASE dbName; CREATE TABLE (with auto numbering int ...

  2. Git Cheat Sheet

    Merge Undo git merge with conflicts $ git merge --abort Archive $ git archive --format zip --output ...

  3. CSS3 Animation Cheat Sheet:实用的 CSS3 动画库

    CSS3 Animation Cheat Sheet 是一组预设的动画库,为您的 Web 项目添加各种很炫的动画.所有你需要做的是添加样式表到你的网站,为你想要添加动画效果的元素应用预制的 CSS 类 ...

  4. XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

    本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...

  5. IOS Application Security Testing Cheat Sheet

    IOS Application Security Testing Cheat Sheet    [hide]  1 DRAFT CHEAT SHEET - WORK IN PROGRESS 2 Int ...

  6. XSS Filter Evasion Cheat Sheet 中文版

    前言 译者注: 翻译本文的最初原因是当我自己看到这篇文章后,觉得它是非常有价值.但是这么著名的一个备忘录却一直没有人把它翻译成中文版.很多人仅仅是简单的把文中的 各种代码复制下来,然后看起来很刁的发在 ...

  7. HTML5 Cheat sheet PNG帮助手册(标签、事件、兼容)

    HTML5 Cheat sheet PNG帮助手册(标签.事件.兼容) 1.HTML5标签 2.HTML5事件 3.HTML5兼容 最新HTML5手册资料请参考:http://www.inmotion ...

  8. [转]Swift Cheat Sheet

    原文:http://kpbp.github.io/swiftcheatsheet/ A quick cheat sheet and reference guide for Apple's Swift ...

  9. The iOS Design Cheat Sheet 界面设计速参

    http://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/ With the release of iOS 7, app designers ...

随机推荐

  1. EBS描述性弹性域及键弹性域总结

    一.描述性弹性域 前言介绍: 描述性弹性域的实质就是系统预留自定字段,系统可以使用说明性弹性域来获取业务所特有的重要附加信息.系统可能自定义说明性弹性域,以显示存储更多信息的字段,提供一套完整的“自定 ...

  2. laravel 中使用es 流程总结

    1. query_string 2.mutil_match 3.match 4.should.must.bool 5.analysiz

  3. 1.(基础)tornado初识

    tornado的话就不带着大家看源码了,今后可能会介绍,目前只是看简单的用法,而且当前的tornado版本不高,其实说白了这是很久以前写的文档,但是由于格式的原因,所以打算用Markdown重写一次. ...

  4. c++ 实时通信系统(c++socket篇)

    在上一篇简单的介绍了TCP/IP协议,在这一篇我们主要介绍socket的具体实现的函数 第一步首先我们套添加上头文件:(#pragma comment(lib, "WS2_32") ...

  5. verilog 实现DDS

    一.DDS的原理 直接数字频率合成器(DDS),功能是通过输入频率输入字从而实现改变输出信号的频率的功能,它所利用的原理就是虽然对于一段正弦信号来说其幅度值是非线性的,但是其相位的值却是线性增加的,如 ...

  6. Intellij Idea如何导入spring源码

    一.读源码的目的 我们在开发过程中往往会运用一些市场上一些主流的框架,例如spring,hibernate ,strust 和mybaities 等. 我们往往可能有时候只知道运用,却不知道这些框架内 ...

  7. springboot中使用servlet时返回结果乱码问题

    在总的配置文件:application.properties中做一个配置,把我的问题解决了. #编码格式 spring.http.encoding.force=true spring.http.enc ...

  8. 清北学堂提高组突破营考试T1

    题目如下: (想要作弊的后几届神仙们我劝你们还是别黈了,这个题如果你们不会只能证明你们上错班了). 好,题目看完了,发现是一道大模拟(%你)题,于是我们按照题目说的做: #include<ios ...

  9. 基于Twemproxy的Redis集群方案(转载)

    原文地址:基于Twemproxy的Redis集群方案 概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的 ...

  10. 【HDU5890】Eighty seven

    题目大意:给定 N 个数,M 个询问,每次询问如果去掉三个数(可能相同),能否选择恰好 10 个数字,凑出 87 这个数. 题解:骚操作.. 集合凑数问题是一个很经典的模型,即:背包问题. 先进行预处 ...