天池比赛数据挖掘心电图数据分析

黎明之道 等级 851 0 0

Task 2 数据分析

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())
<bound method DataFrame.info of           id                                  heartbeat_signals  label
0          0  0.9912297987616655,0.9435330436439665,0.764677...    0.0
1          1  0.9714822034884503,0.9289687459588268,0.572932...    0.0
2          2  1.0,0.9591487564065292,0.7013782792997189,0.23...    2.0
3          3  0.9757952826275774,0.9340884687738161,0.659636...    0.0
4          4  0.0,0.055816398940721094,0.26129357194994196,0...    2.0
...      ...                                                ...    ...
99995  99995  1.0,0.677705342021188,0.22239242747868546,0.25...    0.0
99996  99996  0.9268571578157265,0.9063471198026871,0.636993...    2.0
99997  99997  0.9258351628306013,0.5873839035878395,0.633226...    3.0
99998  99998  1.0,0.9947621698382489,0.8297017704865509,0.45...    2.0
99999  99999  0.9259994004527861,0.916476635326053,0.4042900...    0.0

[100000 rows x 3 columns]>

观察train数据集的行列信息

Train_data.shape
(100000, 3)

观察testA首尾数据

Test_data.head().append(Test_data.tail())
id    heartbeat_signals
0    100000    0.9915713654170097,1.0,0.6318163407681274,0.13...
1    100001    0.6075533139615096,0.5417083883163654,0.340694...
2    100002    0.9752726292239277,0.6710965234906665,0.686758...
3    100003    0.9956348033996116,0.9170249621481004,0.521096...
4    100004    1.0,0.8879490481178918,0.745564725322326,0.531...
19995    119995    1.0,0.8330283177934747,0.6340472606311671,0.63...
19996    119996    1.0,0.8259705825857048,0.4521053488322387,0.08...
19997    119997    0.951744840752379,0.9162611283848351,0.6675251...
19998    119998    0.9276692903808186,0.6771898159607004,0.242906...
19999    119999    0.6653212231837624,0.527064114047737,0.5166625...

观察testA数据集的行列信

Test_data.shape
(20000, 2)

要养成看数据集的head()以及shape的习惯,这会让你每一步更放心,导致接下里的连串的错误, 如果对自己的pandas等操作不放心,建议执行一步看一下,这样会有效的方便你进行理解函数并进行操作

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()
id    label
count    100000.000000    100000.000000
mean    49999.500000    0.856960
std    28867.657797    1.217084
min    0.000000    0.000000
25%    24999.750000    0.000000
50%    49999.500000    0.000000
75%    74999.250000    2.000000
max    99999.000000    3.000000

获取train数据类型

Train_data.info
<bound method DataFrame.info of           id                              heartbeat_signals  label
0          0  0.9912297987616655,0.9435330436439665,0.764677...    0.0
1          1  0.9714822034884503,0.9289687459588268,0.572932...    0.0
2          2  1.0,0.9591487564065292,0.7013782792997189,0.23...    2.0
3          3  0.9757952826275774,0.9340884687738161,0.659636...    0.0
4          4  0.0,0.055816398940721094,0.26129357194994196,0...    2.0
...      ...                                                ...    ...
99995  99995  1.0,0.677705342021188,0.22239242747868546,0.25...    0.0
99996  99996  0.9268571578157265,0.9063471198026871,0.636993...    2.0
99997  99997  0.9258351628306013,0.5873839035878395,0.633226...    3.0
99998  99998  1.0,0.9947621698382489,0.8297017704865509,0.45...    2.0
99999  99999  0.9259994004527861,0.916476635326053,0.4042900...    0.0

[100000 rows x 3 columns]>

获取testA数据的相关统计量

Test_data.describe()
                     id
count    20000.000000
mean    109999.500000
std    5773.647028
min    100000.000000
25%    104999.750000
50%    109999.500000
75%    114999.250000
max    119999.000000

获取testA数据类型

Test_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20000 entries, 0 to 19999
Data columns (total 2 columns):
 #   Column             Non-Null Count  Dtype 
---  ------             --------------  ----- 
 0   id                 20000 non-null  int64 
 1   heartbeat_signals  20000 non-null  object
dtypes: int64(1), object(1)
memory usage: 312.6+ KB

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']
0        0.0
1        0.0
2        4.0
3        0.0
4        0.0
        ... 
99995    4.0
99996    0.0
99997    0.0
99998    0.0
99999    1.0
Name: label, Length: 100000, dtype: float64
Train_data['label'].value_counts()
0.0    58883
4.0    19660
2.0    12994
1.0     6522
3.0     1941
Name: label, dtype: int64
## 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)

![image-20210131211440263](/Users/haoyue/Library/Application Support/typora-user-images/image-20210131211440263.png)

![image-20210131211452271](/Users/haoyue/Library/Application Support/typora-user-images/image-20210131211452271.png)

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

![image-20210131211600245](/Users/haoyue/Library/Application Support/typora-user-images/image-20210131211600245.png)

Train_data.skew(), Train_data.kurt()
(id       0.000000
 label    0.917596
 dtype: float64, id      -1.200000
 label   -0.825276
 dtype: float64)
sns.distplot(Train_data.kurt(),color='orange',axlabel ='Kurtness')

![image-20210131211722579](/Users/haoyue/Library/Application Support/typora-user-images/image-20210131211722579.png)

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

![image-20210131211751810](/Users/haoyue/Library/Application Support/typora-user-images/image-20210131211751810.png)

收藏
评论区

相关推荐

零基础应该如何开始学习python
随着人工智能时代的到来,Python也在不断发展壮大,越来越多的人选择学Python,只要因为它容易学习,功能又强大还可以跨平台。其实Python作为一门脚本语言,难度上相较于其他语言略微简单点,但是对于没有计算机基础的人来说,也是非常难得,可能安装这一步就会难倒大家!1、Python学习确定方向对于刚入门的人来说,要先把Python基础和进阶学透,再继续往
全网最全python学习路线图,让学习不迷路
学习Python有一段时间了,最近也是在不断的整理Python相关的基础知识和学习一些新的知识,想来分享给大家。我刚开始接触Python时,和大多数初学者一样不知道从那里开始学习python,我也在网上找了许多python相关的资料来学习,但是资料多也不见得就好,因为不知道从哪里开始下手,走了许多弯路。后面我就整理了一套对初学者来说学习python能很快上手
玩转python爬虫
&ensp;&ensp;&ensp;  近几年来,python的热度一直特别火!大学期间,也进行了一番深入学习,毕业后也曾试图把python作为自己的职业方向,虽然没有如愿成为一名python工程师,但掌握了python,也让我现如今的工作开展和职业发展更加得心应手。这篇文章主要与大家分享一下自己在python爬虫方面的收获与见解。 &ensp;&ensp;
浅析常用的Python Web的几大框架
在各种语言平台中,python涌现的web框架恐怕是最多的,是一个百花齐放的世界,各种microframework、framework不可胜数;猜想原因应该是在python中构造框架十分简单,使得轮子不断被发明。所 以在Python社区总有关于Python框架孰优孰劣的话题。下面就给大家介绍一下python的几大框架: Django Django 应该是最出
盘点一款Python二级考试模拟软件,带你轻松过关二级Python考试
大家好,我是Python进阶者。今天给大家讲的这个软件,主要是想让大家通过这个软件能将自己的Python基础进一步提高。一、前言相信有些小伙伴学习Python有一段时日,但是又不知道自己的Python基础学的如何,这个时候就需要一款神器来检测一下自己的Python基础了。要想检测自己的Python功力最直观的方法当然是做题了,至于做什么题了我们就不得而知了,
(二十九) 初遇python OOP面向对象编程
**各位读者大大们大家好,今天学习python的面向对象编程-属性装饰器,并记录学习过程欢迎大家一起交流分享。** ![](https://oscimg.oschina.net/oscnet/2bffb0067c4967eca2188c825154f2e4a5d.jpg) **新建一个python文件命名为py3\_oop6.py,在这个文件中进行操作代
055 Python第三方库安装
\[TOC\] 一、概述 ==== * 看见更大的Python世界 * 第三方库的pip安装方法 * 第三方库的集成安装方法 * 第三方库的文件安装方法 二、看见更大的Python世界 =============== 2.1 Python社区 ------------ \>13万个第三方库:<a target='\_blank' h
055 Python第三方库安装
\[TOC\] 一、概述 ==== * 看见更大的Python世界 * 第三方库的pip安装方法 * 第三方库的集成安装方法 * 第三方库的文件安装方法 二、看见更大的Python世界 =============== 2.1 Python社区 ------------ \>13万个第三方库:<a target='\_blank' h
Python 3 教程
Python 3 教程 =========== ![python3](https://www.runoob.com/wp-content/uploads/2014/05/python3.png) Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,
Python向来以慢著称,为啥Instagram却唯独钟爱它?
PyCon 是全世界最大的以 Python 编程语言 为主题的技术大会,大会由 Python 社区组织,每年举办一次。在 Python 2017 上,Instagram 的工程师们带来了一个有关 Python 在 Instagram 的主题演讲,同时还分享了 Instagram 如何将整个项目运行环境升级到 Python 3 的故事。本文为该次演讲的内容摘要
Python很慢?Python之父一句话亮了
### Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲ 译者丨诗书塞外 原文丨http://dwz.date/duAA Python的运行速度确实没有C或者Java快,但是有一些项目正在努力让Python变得更快。
Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
人生苦短,我用Python。众所周知,Python目前越来越火,学习Python的小伙伴也越来越多。最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了方便大家学习Python,小编整理了一套Python和Pycharm安装详细教程,只要大家按照这个步骤来,就可以轻松的搞定Python和Pycharm的安装了。
Python真是什么都能干!今天实现一下自动打开和运行电脑软件!
最近做项目,要用到软件自动化的操作,正好更大家分享一下! ![](https://img2018.cnblogs.com/blog/1627425/201909/1627425-20190911205328415-1196306902.png) 先看看Python操作: ============ ![都说了Python很牛逼!教大家用Pytho
Python解释器和IPython
简介 == 今天给大家介绍一下Python的一个功能非常强大的解释器IPython。虽然Python本身自带解释器,但是相对而言IPython的功能更加的强大。 Python解释器 ========= Python是自带解释器的,我们在命令行输入python即可进入python的解释器环境: $> pythonPython 2.7.15 (d
Python运算符大全
  一、 Python的算术运算   Python的算术运算符与C语言类似,略有不同。包括加(+)、减(-)、乘(\*)、除(/)、取余(%)、按位或(|)、按位与(&)、按位求补(~)、左移位(<<)、右移位(>>)、单目求反(-)、幂运算(\*\*)、整除运算(//)、增强运算、增强矩阵乘法(@)。   增强运算是将算术运算符或逻辑运算符放到等号的左