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

目录

  • EDA 目标
  • 一、内容介绍
    • 1.1 载入各种数据科学以及可视化库
    • 1.2 载入数据
    • 1.3 数据总览
    • 1.4 判断数据缺失和异常
    • 1.5 了解预测值的分布
  • 二、代码示例
    • 2.1 载入各种数据科学与可视化库
    • 2.2 载入训练集和测试集
    • 2.3 总览数据概况
    • 2.4 判断数据缺失和异常
    • 2.5 了解预测值的分布
  • 运行结果的 HTML 页面下载


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())

数据挖掘-Task2:EDA-数据分析探索性分析_第1张图片

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

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

在这里插入图片描述

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

数据挖掘-Task2:EDA-数据分析探索性分析_第2张图片

# 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()

数据挖掘-Task2:EDA-数据分析探索性分析_第3张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第4张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第5张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第6张图片

2.4 判断数据缺失和异常

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

数据挖掘-Task2:EDA-数据分析探索性分析_第7张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第8张图片

2.5 了解预测值的分布

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

数据挖掘-Task2:EDA-数据分析探索性分析_第9张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第10张图片

# 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)

数据挖掘-Task2:EDA-数据分析探索性分析_第11张图片

数据挖掘-Task2:EDA-数据分析探索性分析_第12张图片

数据的偏度和蜂度 – 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())

数据挖掘-Task2:EDA-数据分析探索性分析_第13张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第14张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第15张图片

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

数据挖掘-Task2:EDA-数据分析探索性分析_第16张图片


运行结果的 HTML 页面下载

源码及运行结果

数据挖掘-Task2:EDA-数据分析探索性分析_第17张图片

你可能感兴趣的:(机器学习,数据分析,python,人工智能)