数据分析学习笔记(二)

心电图Task02

EDA-数据探索性分析。

比赛地址:https://tianchi.aliyun.com/competition/entrance/531883/introduction

1. EDA 目标

  • 了解数据集,熟悉数据类型、数据分布等。
  • 了解变量间的相互关系、变量与预测值之间的关系。
  • 为数据处理和特征工程做准备。

2. EDA 主要内容

  1. 数据观察:
    • 观察数据集首尾概况
    • 观察数据集shape
  2. 数据总览:
    • 通过describe()来熟悉数据的相关统计量
    • 通过info()来熟悉数据类型
  3. 判断数据缺失和异常
    • 查看每列的存在nan情况
    • 异常值检测(箱线图等)
  4. 了解预测值的分布
    • 总体分布概况
    • 查看skewness and kurtosis

3. 代码示例

Github开源地址:https://github.com/datawhalechina/team-learning-data-mining/tree/master/HeartbeatClassification
导入数据集

#coding:utf-8
#导入warnings包,利用过滤器来实现忽略警告语句。
import warnings
warnings.filterwarnings('ignore')
import missingno as msno
import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt 
import seaborn as sns

Train_data = pd.read_csv('./train.csv')
Test_data = pd.read_csv('./testA.csv')

观察首尾数据和行列信息

Train_data.head().append(Train_data.tail())
Train_data.shape
Test_data.head().append(Test_data.tail())
Test_data.shape

获取数据的相关统计量

Train_data.describe()
Train_data.info
Test_data.describe()
Test_data.info()

判断数据缺失

Train_data.isnull().sum()
Test_data.isnull().sum()
# 也可以使用msno查看数据分布概况
msno.matrix(Train_data,figsize=(3, 2))
msno.matrix(Test_data,figsize=(3, 2))

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

msno.bar(Train_data,figsize=(3, 2))
msno.bar(Test_data,figsize=(3, 2))

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

了解预测值标签的分布

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())
Skewness: 0.917596
Kurtosis: -0.825276

在这里插入图片描述

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89hQvDyH-1616038041196)(/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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADf6YzlW-1616038041202)(/Users/haoyue/Library/Application Support/typora-user-images/image-20210131211751810.png)]
用pandas_profiling生成数据报告

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

pandas_profiling是一个内容较多,输出比较漂亮的EDA工具库。少量几行代码即可对整个数据集有个overall的了解。

4. 总结思考

关于预测值分布
用直方图可以比较直观地看出数据的分布状态。直方图横坐标为分箱,纵坐标为落入每个分箱的观测次数。
可以通过sns.distplot画出直方图,并用各种概率密度函数图去fit。此处使用了johnsonsu,normal,log normal三种概率密度函数,用以直观了解数据的分布状态。
sns.distplot绘图参考:https://www.cntofu.com/book/172/docs/24.md

偏度和峰度

  • 偏度(skewness)是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度定义中包括正态分布(偏度=0),右偏分布(也叫正偏分布,其偏度>0),左偏分布(也叫负偏分布,其偏度<0)。
  • 峰度(peakedness;kurtosis)又称峰态系数。表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。随机变量的峰度计算方法为:随机变量的四阶中心矩与方差平方的比值。峰度包括正态分布(峰度值=3),厚尾(峰度值>3),瘦尾(峰度值<3)
    可参考:https://blog.csdn.net/xbmatrix/article/details/69360167

样本分类不均衡

  1. 危害:样本分类不均衡易导致模型很难从样本少的分类中提取到特征,因为目标函数需要照顾到大多数的样本,对样本少的分类就不够敏感。这样训练得到的模型作用到新的数据集上,若新数据集中训练样本少的分类占比较高,模型的准确度就会很差。
  2. 解决办法
  • 扩充数据集。通过更多渠道获取小类样本数据。
  • 重采样。对小类样本进行过采样来增加小类样本个数,或对大类数据样本进行欠采样来减少大类样本个数以达到不同类别数据平衡。
  • 造数据。例如:SMOTE算法,思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。
  • 改变分类算法。使用代价函数时,可以增加小类样本的权值,降低大类样本的权值,或把小类样本作为异常点,把问题转化为异常点检测问题。此时分类器需要学习到大类的决策分界面,即分类器是一个单个类分类器。
  • 改变评估指标。当正负样本数量差距不大的情况下,ROC和PR的趋势是差不多的,但是在正负样本分布极不均衡的情况下,PRC比ROC更能真实的反映出实际情况。
    参考:https://blog.csdn.net/heyongluoyao8/article/details/49408131
    https://www.jianshu.com/p/5831b1b921ee
    对此任务,不同类别间样本个数有量级的差距,应考虑样本分布不均匀问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值