EDA数据分析

  • 2.1 数据加载
  • 2.2 查看数据概况
  • 2.3 检测缺失值、异常值、重复值
    • 2.3.1 缺失值判断
    • 2.3.2 缺失值可视化
      • missingno矩阵查看缺失值
      • missingno条形图查看缺失值
    • 2.3.3异常值检测
      • 倾斜值检测
  • 2.4 查看预测值分布
    • 查看skewness和kurtosis
    • 查看具体频数
  • 2.5 数据特征分析
    • 2.5.1数字特征分析
      • 相关性分析
      • 查看几个特征的 偏度和峰值
      • 每个数字特征得分布可视化
      • 数字特征相互之间的关系可视化
      • 多变量互相回归关系可视化
    • 2.5.2类型特征分析
      • 类别特征unique分析
      • 类别特征箱型图
      • 类别特征小提琴图
      • 类别特征的柱形图可视化
  • 2.6生成数据报

数据挖掘学习任务二是对数据进行EDA–数据性探索分析。
EDA定义:

探索性数据分析(Exploratory Data Analysis,简称EDA),是指对已有的数据(特别是调查或观察得来的原始数据)在尽量少的先验假定下进行探索,通过作图、制表、方程拟合、计算特征量等手段探索数据的结构和规律的一种数据分析方法。

通过EDA,我们可以更好的了解和熟悉数据集,方便接下来的机器学习或深度学习使用。

EDA一般步骤:

  1. 加载数据(必要时可以对列名重命名)

  2. 查看数据整体概况

  3. 检测缺失值、异常值、重复值问题

  4. 了解预测值的分布概况
    4.1 总体概况(无界约翰逊分布等)
    4.2 查看skewness 和 kurtosis
    4.3 查看预测值的具体频数

  5. 特征分析
    5.1 特征分类
    5.2 按照不同类别的方法进行分析
    (1)单变量分析(与预测值的相关性等)
    (2)多变量分析(变量间的关系等)

  6. 总结分析(数据报告)

以下以train_data数据集为样例进行数据分析分析学习。导入模块numpy、 pandas、 matplotlib、seaborn、missingno。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno
  • missingno:缺失值可视化包
  • Seaborn是基于matplotlib的Python可视化库。

2.1 数据加载

path = ""
Train_data = pd.read_csv(path+"used_car_train_20200313.csv", sep=' ')

2.2 查看数据概况

Train_data.shape # 数据集形状Train_data.head().append(Train_data.tail())  # 显示前5条数据(head())和后5条数据(tail())Train_data.describe() # 查看数据值列的汇总统计 可返回变量和观测的数量、缺失值和唯一值的数目、平均值、分位数等相关信息Train_data.info() # 显示有关DataFrame的信息,包括索引dtype和列dtype,非空值和内存使用情况。
  • df.info()结果

2.3 检测缺失值、异常值、重复值

2.3.1 缺失值判断

Train_data.isnull().sum() # 将列中的空值情况统计出来
  • df.isnull()
    元素级别的判断,把对应的所有元素的位置都列出来,元素为空或者NA就显示True,否则就是False

结果:

2.3.2 缺失值可视化

# 缺失值可视化
is_missing = Train_data.isnull().sum()
missing = is_missing[is_missing>0] # 获取具有空值的列
missing.sort_values(inplace=True) # 排序
missing.plot.bar()
  • sort_values(self,by,axis = 0,ascending = True,inplace = False,kind =’ quicksort ',na_position =‘last’,ignore_index = False )沿任一轴的值排序。

missingno矩阵查看缺失值
msno.matrix(Train_data.sample(250))

missingno条形图查看缺失值
msno.bar(Train_data.sample(1000))

2.3.3异常值检测

我们回过头看info()函数的结果,发现有一个object类型的数据。我们需要将它展开

Train_data["notRepairedDamage"].value_counts() # 统计唯一值

结果:

我们发现有 ‘-’ 这样的异常值,我们将其替换为缺失值:

Train_data["notRepairedDamage"].replace('-', np.nan, inplace=True) # 将数据中的'-'值替换为np.nan
倾斜值检测
for c in Train_data.columns:print(c)print(Train_data[c].value_counts())print()

结果:

可以看到seller 和 offerType的数据十分不平衡,我们可以选择删除掉。

del Train_data["seller"]
del Train_data["offerType"]

2.4 查看预测值分布

import scipy.stats as st
Y_train = Train_data['price'] # 分离预测值
Y_train.value_counts()# 总体分布概况可视化
y = Train_data['price']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu) # kde是否绘制高斯核密度估计图
plt.figure(2); plt.title('Norm')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)



  • scipy.stats 包含许多函数分布的库
  • seaborn.displot 单变量观测值分布图
  • scipy.stats所有可用函数分布
查看skewness和kurtosis
sns.distplot(Y_train)
print("Skewness: %f" % Y_train.skew())
print("Kurtosis: %f" % Y_train.kurt())sns.distplot(Train_data.skew(),color='blue',axlabel ='Skewness')sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness')
  • skew、kurt说明参考

Skewness: 3.346487
Kurtosis: 18.995183


查看具体频数
plt.hist(Train_data['price'], orientation = 'vertical',histtype = 'bar', color ='blue')
plt.show()#进行对数变换
plt.hist(np.log(Train_data['price']), orientation = 'vertical',histtype = 'bar', color ='red')
plt.show()

2.5 数据特征分析

我们观察数据特征,发现特征分为两类数字特征和类型特征

2.5.1数字特征分析

numeric_features = ['power', 'kilometer', 'v_0', 'v_1', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12', 'v_13','v_14' ]for cat_fea in categorical_features:print(cat_fea + "的特征分布如下:")print("{}特征有个{}不同的值".format(cat_fea, Train_data[cat_fea].nunique()))print(Train_data[cat_fea].value_counts())
  • df.nunique(): 回的是唯一值的个数
相关性分析
numeric_features.append('price')
price_numeric = Train_data[numeric_features]
correlation = price_numeric.corr()  # 返回各特征之间的相关系数DataFrame表格
# print(correlation['price'].sort_values(ascending = False),'\n')  # 查看各数字特征与价格的相关性f , ax = plt.subplots(figsize = (7, 7))  # 函数返回一个figure图像和子图ax的array列表。plt.title('Correlation of Numeric Features with Price',y=1,size=16)sns.heatmap(correlation,square = True,  vmax=0.8)  # 相关性热图

查看几个特征的 偏度和峰值
del price_numeric['price']
for col in numeric_features:print('{:15}'.format(col), 'Skewness: {:05.2f}'.format(Train_data[col].skew()) , '   ' ,'Kurtosis: {:06.2f}'.format(Train_data[col].kurt())  )
每个数字特征得分布可视化
f = pd.melt(Train_data, value_vars=numeric_features) # value_vars需要转换的值
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False) #  用于绘制成对关系的子图网格。col_wrap: 制网格的列维度 share{x, y} 是否共享x,y轴
g = g.map(sns.distplot, "value") # 数据填充
  • pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name=‘value’, col_level=None) 将列名转换为列数据(columns name → column values),重构DataFrame

数字特征相互之间的关系可视化
sns.set() # 一步设置美学参数。
columns = ['price', 'v_12', 'v_8' , 'v_0', 'power', 'v_5',  'v_2', 'v_6', 'v_1', 'v_14']
sns.pairplot(Train_data[columns],size = 2 ,kind ='scatter',diag_kind='kde') # 在数据集中绘制成对关系
plt.show()

多变量互相回归关系可视化
fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2, figsize=(24, 20))
# ['v_12', 'v_8' , 'v_0', 'power', 'v_5',  'v_2', 'v_6', 'v_1', 'v_14']
v_12_scatter_plot = pd.concat([Y_train,Train_data['v_12']],axis = 1)
sns.regplot(x='v_12',y = 'price', data = v_12_scatter_plot,scatter= True, fit_reg=True, ax=ax1)  # 绘制数据并拟合线性回归模型。v_6_scatter_plot = pd.concat([Y_train,Train_data['v_6']],axis = 1)
sns.regplot(x='v_6',y = 'price',data = v_6_scatter_plot,scatter= True, fit_reg=True, ax=ax7)
...

2.5.2类型特征分析

类别特征unique分析
for fea in categorical_features:print(fea+":", Train_data[fea].nunique())
类别特征箱型图
categorical_features = ['model','brand','bodyType','fuelType','gearbox','notRepairedDamage']
for c in categorical_features:Train_data[c] = Train_data[c].astype('category')if Train_data[c].isnull().any():Train_data[c] = Train_data[c].cat.add_categories(['MISSING'])Train_data[c] = Train_data[c].fillna('MISSING')def boxplot(x, y, **kwargs):sns.boxplot(x=x, y=y)x=plt.xticks(rotation=90)f = pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(boxplot, "value", "price")
  • 箱形图绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。
    -
类别特征小提琴图
catg_list = categorical_features
target = 'price'
for catg in catg_list :sns.violinplot(x=catg, y=target, data=Train_data)plt.show()
  • 小提琴图 (Violin Plot)是用来展示多组数据的分布状态以及概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。

类别特征的柱形图可视化
def bar_plot(x, y, **kwargs):sns.barplot(x=x, y=y)x=plt.xticks(rotation=90)f = pd.melt(Train_data, id_vars=['price'], value_vars=categorical_features)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False, size=5)
g = g.map(bar_plot, "value", "price")

2.6生成数据报

用pandas_profiling生成一个较为全面的可视化和数据报告(较为简单、方便) 最终打开html文件即可

import pandas_profiling
pfr = pandas_profiling.ProfileReport(Train_data)
pfr.to_file("./example.html")

总结:概要地学习了如何对数据集进行EDA,我的比赛之路又迈向一步。

参考资料:

  • AI蜗牛车 大大的教导ipynb

  • https://cloud.tencent.com/developer/ask/112712

  • https://www.cnblogs.com/zhhfan/p/11344310.html

  • https://www.cnblogs.com/nxf-rabbit75/p/11148932.html

  • https://www.cnblogs.com/wyy1480/p/10474046.html

  • pandas API

  • seaborn API

DataWhale数据挖掘学习--Task 2 数据分析相关推荐

  1. Datawhale分组学习—动手学数据分析(五)

    Datawhale分组学习-动手学数据分析(五)主要是做数据建模以及模型评估.模型搭建部分:1)切分数据集为训练集和测试集:2)搭建逻辑回归模型或随机森林模型完成分类任务,通过不断调参来优化模型.模型 ...

  2. Datawhale组队学习NLP之transformer Task 01

    Datawhale组队学习NLP之transformer Task 01 Transformers在NLP中的兴起 一.自然语言处理(Natural Language Processing, NLP) ...

  3. Datawhale组队学习-金融时序数据挖掘实践-Task01数据探索与分析

    Datawhale组队学习-金融时序数据挖掘实践-Task01数据探索与分析   在二手车交易价格预测之后,本菜鸟又加入了金融时序数据挖掘实践的学习.两个项目都是结构化数据,都着重于对数据本身的探索. ...

  4. 数据挖掘学习笔记——GEO数据库:芯片数据分析

    数据挖掘 数据挖掘学习笔记--GEO数据库:芯片数据分析 文章目录 数据挖掘 一.芯片基础知识 1.1.背景 二.GEO数据库概述 2.1.基础简介 2.2.检索页面展示 三.GSE项目的三种下载方式 ...

  5. DS:机器学习之数据科学方向最强学习路线之数据分析、数据挖掘、机器学习工程化团队之详细攻略(更新中)

    DS:机器学习之数据科学方向最强学习路线之数据分析.数据挖掘.机器学习工程化团队之详细攻略(更新中) 目录 最强学习路线 DS市场岗位要求 DS应用领域 基本必备技能

  6. Datawhale组队学习之集成学习——Task 6 Boosting

    Datawhale组队学习之集成学习--Task 6 Boosting 一.Boosting方法的基本思路 二.Adaboost算法 1.Adaboost基本原理 2.使用sklearn对Adaboo ...

  7. 【组队学习】【25期】Datawhale组队学习内容介绍

    第25期 Datawhale 组队学习活动马上就要开始啦! 本次组队学习的内容为: web开发入门教程 数据挖掘实战(异常检测) 集成学习(下) 大家可以根据我们的开源内容进行自学,也可以加入我们的组 ...

  8. Datawhale组队学习周报(第021周)

    本文总结了本周(07月05日~07月11日)Datawhale组队学习的运行情况,我们一直秉承"与学习者一起成长的理念",希望这个活动能够让更多的学习者受益. 第 25 期组队学习 ...

  9. Datawhale组队学习周报(第019周)

    本周(06月21日~06月27日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群,参与的学习者有 292 人,其中 web开发入门教程.数据挖掘实战(异常检测) 已经结营,另外一 ...

最新文章

  1. CentOS下用yum管理软件的好处
  2. assert()函数用法总结——转
  3. 推荐一个牛逼的 GitHub 项目+支付宝、微信支付项目实战!快来获取!
  4. Oracle左右链接
  5. 内核aio_今天来说说令人让人傻傻分不清的BIO,NIO,AIO
  6. 评分怎么读_英国留学本科中途被退学怎么申请硕士补救
  7. oracle 快速入门之第一章 数据库基础
  8. AE CC2018/64位安装步骤及各种出现问题!!(真的装了好久)
  9. 第5课 电子商务基础
  10. pptswot分析图怎么做_SWOT分析工具图表模板.ppt
  11. 串口接收完整一帧数据包的3种方法
  12. 39个大数据可视化工具
  13. android 通话自动录音服务
  14. 【2020】win10java(jdk安装)环境变量配置和相关问题解决
  15. 创业日志:一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝?
  16. 什么是组态?组态的概念及发展趋势
  17. 【转】人家在美国怎么过的,7年,我无比惭愧
  18. 服务器 远程桌面限制IP 与 (虚拟专用网络) 结合的安全策略
  19. 【原创】我所认识的银行业务之旅(账务篇)
  20. 用python绘制高光谱图像的光谱曲线图

热门文章

  1. switch case应用实例
  2. VUE activated,deactivated使用
  3. ArcGIS小知识(五)——arcmap锁定图层-编辑时只选择唯一图层
  4. (转)用遗传算法优化BP神经网络的Matlab编程实例
  5. win10系统如何连接宽带连接服务器,Win10系统如何连接宽带上网?,爱纯净官网
  6. python的静态局部变量怎么定义
  7. 大数据入门之学习视频资料分享
  8. 关于Hibernate的Session和SessionFactory
  9. 函数的递归调用(C++)
  10. cookies、sessions、token区别