数据建模:常用EDA方法

一、样本统计描述

1、数据基本情况

df.sample(5) # 随机抽取数据,查看数据内容,df,head(2)、df,tail(2)。

df.shape # 查看数据量大小。

df.info # 查看数据类型,字符型、数值型等,df.value、df.info()直接查看数据。

df['gender'].value_counts(dropna=False)

# 类别性变量查看分布,df['gender'].nunique()、df['gender'].unique()。

df.describe() # 数据型分布查看,include=['O'],类别型设置参数亦可。

2、数据质量分析

缺失率分析

df.isnull().any()

df.isnull().all()

var_null = (df.isnull().sum() / df.isnull().count()).sort-values(ascending=False) * 100 

var_null[var_null > 80].index.values

# 缺失率分析,并可根据阈值筛选变量。

同一性分析

异常值分析

p = df[var].boxplot(return_type='dict', sym='o', whis=3, flierprops={'maker':'o', 'markerfacecolor':'red', 'color':‘black’})

plt.savefig(folder + '{}-{}.png'.format(index, var)) 

# 主要通过箱型图观测,更复杂的异常值检测方法见孤立森林等算法。

其他常用方法

agg_grouops =pd.cut(df[''age], bins=[19, 40, 65, np.inf])

pd.crosstab(age_groups, df['sex'])

# crosstab示例,常用groupby、pivot_table。

二、变量可视化分析

主要使用matplotlib、seaborn两个库。

1、单变量分析

数值型变量

# 直方图

sns.set_style('white')

from scipy.stats import norm

# df['age'] = np.log(df['age'])

sns.distplot(df['age'], kde=True, hist=False, fit=norm)

# kdeplot(绘制累计分布)

# df['age'].plot(kind='hist')

# pandas通用作图函数,boxplot箱型图,scatter散点图,lie折线图,bar条形图,pie # 饼图。

# 箱型图

sns.boxplot(x='type', y='income', data=df)   # x增加了分析的适用性。

类别性变量

# 条形图

plt.figure(figsize=(14, 8))

ax = sns.barplot(x='type', y='income', hue='gender', data=df)

# estimatoer可修改计算函数,默认平均值,修改为count时,等同于countplot()

# sns.countplot(x='type', hue='gender', data=df)

# capsize设置误差棒帽条的宽度,可对ax进行图片参数设置更改。

# ax.set(yscale='log')

# ax.figure.savefig('pic')

plt.title('barplot')

plt.legend(loc='best')

# 饼图

fig, axs = plt.subplots(1, 2, figsize=(14, 8))

sns.countplot(x='astro', hue='target', data=df, ax=axs[0])

axs[0] .set_title('astro')

df['target'].value_counts().plot(x=None, y=None, kind='pie', ax=axs[1], autopct='%1.2f%%') # 输出百分好的样式。

axs[0] .set_title('target')

plt.xticks(rotataion=90) # 未生效,原因易知。

2、多变量分析

数值型变量

# 联合分布

sns.jointplot('age', 'worktime', data=df, kind='reg', size=10)

sns.pairplot(df, vars=['age', 'debt', 'cs_cnt'], hue='target', diag_kind='kde', kind='reg', size=7) # vars中的变量,必须都是数值型。

类别性变量

# 类别型与数值型

sns.pointplot(x='hour', y='count', hue='season', join=True, data=df)

# 参考官方文档,此图的实际含义更加清楚。


g = sns.FacetGrid(df, col='target', row='sex')

# g.sharex=False

g,map(plt.scatter, 'age', 'worktime') # 分析起来非常方便。

热点图

三、常用技巧及子图绘制

1、常用参数及技巧

plt.style.use('ggplot') # r语言风格

plt.style.available

%config inlinebackend.figure_format = 'retina'

plt.grid(True, axis='y') # 增加网格

plt.text(3.1, 0.3, 'sin function') # 增加文字描述


plt.xlim([-10, 15]) # 制定x轴的取值范围

plt.axis([0, 6, 0, 20]) # 制定坐标轴范围,xmin,xmax,ymin,ymax

plt.xticks((0, 500, 1000), ('0', '0.5K', '1k')) # 替换坐标刻度值

#  plt.xticks(np.arange(10), top10.name)

# plt.set_xticks(range(0, n, 20))

# plt.set_xticklabels(['%d' %val for val in range(0, n, 20)])


2、子图绘制

fig.subplots_adjust(wspace=0.5, hspace=0.3) # 调整子图横纵向距离。

fig.tight_layout() # 自动调整subplot间距离。

# 方法很多,这里只列出自己用的最顺手的。

fig = plt.figure()

ax1 = fig.add_subplot(131)

3、通用绘图函数

g = sns.FacetGrid(df, col='target')

g.map(sns.distplot, 'age')

sns.factorplot(data=df, x='type', y='cum', col='target') # kind='bar'

# 默认绘制的此图类,类似于jointpoint。

g = sns.JointGrid(x='age', y='debt', data=df, size=10) # 类似的有sns.PairGrid。

g.plot_joint(sns.regplot, order=3)

g.plot_marginals(sns.distplot)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352