数据挖掘-Task2:EDA-数据分析探索性分析


EDA 目标

  • EDA 的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来确定所获得数据集可以用于接下来的机器学习或者深度学习使用;
  • 当了解了数据集之后我们下一步就是要去了解变量间的相互关系以及变量与预测值之间的存在关系;
  • 引导数据科学从业者进行数据处理以及特征工程的步骤,使数据集的结构和特征集让接下来的预测问题更加可靠;
  • 完成对于数据的探索性分析,并对与数据进行一些图表或者文字总结。

一、内容介绍

1.1 载入各种数据科学以及可视化库

  • 数据科学库:pandas、numpy、scipy;
  • 可视化库:matplotlib、seabon;

1.2 载入数据

  • 载入训练集和测试集;
  • 简略观察数据(head()+shape);

1.3 数据总览

  • 通过 describe() 来熟悉数据的相关统计量;
  • 通过 info() 来熟悉数据类型;

1.4 判断数据缺失和异常

  • 查看每列的存在 nan 情况;
  • 异常值检验;

1.5 了解预测值的分布

  • 总体分布概况;
  • 查看 skewness and kurtosis;
  • 查看预测值的具体频数;

二、代码示例

2.1 载入各种数据科学与可视化库

# In[1]:载入各种数据科学与可视化库
#导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')
import missingno as msno
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plt 
import seaborn as sns
import numpy as np

2.2 载入训练集和测试集

# In[2]:导入训练集train.csv
import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt
Train_data = pd.read_csv('D:/Cadabra_tools002/tianqi_file/train.csv')
# In[3]:导入测试集testA.csv
import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt 
Test_data = pd.read_csv('D:/Cadabra_tools002/tianqi_file/testA.csv')

所有特征集均脱敏感处理:

  • id - 心跳信号分配的唯一标识
  • heartbeat_signals - 心跳信号序列
  • label - 心跳信号类别(0、1、2、3)
  • data.head().append(data.tail()) – 观察首尾数据
  • data.shape – 观察数据集的行列信息
# In[4]:观察train首尾数据
Train_data.head().append(Train_data.tail())

在这里插入图片描述

查看训练集的前 5 5 5 行和末尾 5 5 5

# In[5]:观察train数据集的行列信息
Train_data.shape

在这里插入图片描述

# In[6]:观察testA首尾数据
Test_data.head().append(Test_data.tail())

在这里插入图片描述

# In[7]:观察testA数据集的行列信息
Test_data.shape

在这里插入图片描述

2.3 总览数据概况

  1. describe 中有每列的统计量,个数 count、平均值 mean、方差std、最小值min、中位数25% 50% 75% 、以及最大值 看这个信息主要是瞬间掌握数据的大概的范围以及每个值的异常值的判断,比如有的时候会发现999 9999 -1 等值这些其实都是nan的另外一种表达方式;

  2. info 通过info来了解数据每列的type,有助于了解是否存在除了nan以外的特殊符号异常

    data.describe() – 获取数据的相关统计量

    data.info() – 获取数据类型

# In[8]:获取train数据的相关统计量
Train_data.describe()

在这里插入图片描述

# In[9]:获取train数据类型
Train_data.info

在这里插入图片描述

# In[10]:获取testA数据的相关统计量
Test_data.describe()

在这里插入图片描述

# In[11]:获取testA数据类型
Test_data.info()

在这里插入图片描述

2.4 判断数据缺失和异常

data.isnull().sum() -- 查看每列的存在 nan 情况
# In[12]:查看trian每列的存在nan情况
Train_data.isnull().sum()

在这里插入图片描述

# In[13]:查看testA每列的存在nan情况
Test_data.isnull().sum()

在这里插入图片描述

2.5 了解预测值的分布

# In[14]:查看label属性
Train_data['label']

在这里插入图片描述

# In[15]:统计label属性值
Train_data['label'].value_counts()

在这里插入图片描述

# In[16]:
## 1) 总体分布概况(无界约翰逊分布等)
import scipy.stats as st
y = Train_data['label']
plt.figure(1); plt.title('Default')
sns.distplot(y, rug=True, bins=20)
plt.figure(2); plt.title('Normal')
sns.distplot(y, kde=False, fit=st.norm)
plt.figure(3); plt.title('Log Normal')
sns.distplot(y, kde=False, fit=st.lognorm)

在这里插入图片描述

在这里插入图片描述

数据的偏度和蜂度 – df.skew()、df.kurt()

我们一般会拿偏度和峰度来看数据的分布形态,而且一般会跟正态分布做比较,我们把正态分布的偏度和峰度都看做零。如果我们在实操中,算到偏度峰度不为0,即表明变量存在左偏右偏,或者是高顶平顶这么一说。

一、偏度(Skewness):
Definiton:是描述数据分布形态的统计量,其描述的是某总体取值分布的对称性,简单来说就是数据的不对称程度。
偏度是三阶中心距计算出来的。

(1)Skewness = 0 ,分布形态与正态分布偏度相同。
(2)Skewness > 0 ,正偏差数值较大,为正偏或右偏。长尾巴拖在右边,数据右端有较多的极端值。
(3)Skewness < 0 ,负偏差数值较大,为负偏或左偏。长尾巴拖在左边,数据左端有较多的极端值。
(4)数值的绝对值越大,表明数据分布越不对称,偏斜程度大。

计算公式:

S k e w n e s s = E [ ( ( x − E ( x ) ) / ( D ( x ) ) ) 3 ] Skewness=E[((x-E(x))/(\sqrt{D(x)}))^3] Skewness=E[((xE(x))/(D(x) ))3]
∣ S k e w n e s s ∣ | Skewness| Skewness 越大,分布形态偏移程度越大。

二、峰度(Kurtosis):
Definition:偏度是描述某变量所有取值分布形态陡缓程度的统计量,简单来说就是数据分布顶的尖锐程度。
峰度是四阶标准矩计算出来的。

(1)Kurtosis=0 与正态分布的陡缓程度相同。
(2)Kurtosis>0 比正态分布的高峰更加陡峭——尖顶峰
(3)Kurtosis<0 比正态分布的高峰来得平台——平顶峰

计算公式:

K u r t o s i s = E [ ( ( x − E ( x ) ) / ( ( D ( x ) ) ) ) 4 ] − 3 Kurtosis=E[ ( (x-E(x))/ (\sqrt(D(x))) )^4 ]-3 Kurtosis=E[((xE(x))/(( D(x))))4]3

# In[17]:
# 2)查看skewness(偏态) and kurtosis(峰度)
sns.distplot(Train_data['label']);
print("Skewness: %f" % Train_data['label'].skew())
print("Kurtosis: %f" % Train_data['label'].kurt())

在这里插入图片描述

# In[18]:其他列的偏态和峰度
Train_data.skew(), Train_data.kurt()

在这里插入图片描述

# In[19]:心跳信号类别的蜂度
sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness')

在这里插入图片描述

# In[20]:
## 3) 查看预测值的具体频数
plt.hist(Train_data['label'], orientation = 'vertical',histtype = 'bar', color ='red')
plt.show()

在这里插入图片描述


运行结果的 HTML 页面下载

源码及运行结果

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值