Bootstrap

心电图心跳信号多分类预测-EDA(二)

数据分析

赛题:心电图心跳信号多分类预测

2.1 EDA 目标

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

2.2 内容介绍

  1. 载入各种数据科学以及可视化库:
    • 数据科学库 pandas、numpy、scipy;
    • 可视化库 matplotlib、seabon;
  2. 载入数据:
    • 载入训练集和测试集;
    • 简略观察数据(head()+shape);
  3. 数据总览:
    • 通过describe()来熟悉数据的相关统计量
    • 通过info()来熟悉数据类型
  4. 判断数据缺失和异常
    • 查看每列的存在nan情况
    • 异常值检测
  5. 了解预测值的分布
    • 总体分布概况
    • 查看skewness and kurtosis
    • 查看预测值的具体频数

2.3 代码示例

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

#coding:utf-8
#导入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.3.2 载入训练集和测试集

导入训练集train.csv

import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt
Train_data = pd.read_csv('./train.csv')

导入测试集testA.csv

import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt 
Test_data = pd.read_csv('./testA.csv')

所有特征集均脱敏处理(方便大家观看)

  • id - 心跳信号分配的唯一标识
  • heartbeat_signals - 心跳信号序列
  • label - 心跳信号类别(0、1、2、3)

data.head().append(data.tail())——观察首尾数据

data.shape——观察数据集的行列信息

观察train首尾数据

Train_data.head().append(Train_data.tail())

在这里插入图片描述

观察train数据集的行列信息

Train_data.shape
(100000, 3)

观察testA首尾数据

Test_data.head().append(Test_data.tail())

在这里插入图片描述

观察testA数据集的行列信息

Test_data.shape
(20000, 2)

2.3.3 总览数据概况

  1. describe种有每列的统计量,个数count、平均值mean、方差std、最小值min、中位数25% 50% 75% 、以及最大值 看这个信息主要是瞬间掌握数据的大概的范围以及每个值的异常值的判断,比如有的时候会发现999 9999 -1 等值这些其实都是nan的另外一种表达方式,有的时候需要注意下
  2. info 通过info来了解数据每列的type,有助于了解是否存在除了nan以外的特殊符号异常

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

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

获取train数据的相关统计量

Train_data.describe()

在这里插入图片描述

获取train数据类型

Train_data.info()

在这里插入图片描述

获取testA数据的相关统计量

Test_data.describe()

在这里插入图片描述

获取testA数据类型

Test_data.info()

在这里插入图片描述

2.3.4 判断数据缺失和异常

data.isnull().sum()——查看每列的存在nan情况

查看trian每列的存在nan情况

Train_data.isnull().sum()
id                   0
heartbeat_signals    0
label                0
dtype: int64

查看testA每列的存在nan情况

Test_data.isnull().sum()
id                   0
heartbeat_signals    0
dtype: int64

2.3.5 了解预测值的分布

Train_data['label']

在这里插入图片描述

Train_data['label'].value_counts()

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

Train_data.skew(), Train_data.kurt()

在这里插入图片描述

sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness')

在这里插入图片描述

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


关于偏度和峰度可以参考文献:Measures of Shape: Skewness and Kurtosis

2.3.6 用pandas_profiling生成数据报告

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

pandas_profiling 生成数据报告虽然很便捷,但是不利于对数据的理解,对于一些不复杂的项目中可以酌情使用,但在实际项目中应该尽量少用该模块生成数据报告。

在之前有相关更详细的EDA文章,可以进行参考:数据挖掘-探索性数据分析

;