Datawhale 和天池联合举办了【零基础入门数据挖掘-心跳信号分类预测】的入门赛事,比赛链接:
https://tianchi.aliyun.com/competition/entrance/531883/introduction
EDA简介
探索性数据分析,英文简称 EDA。为什么要进行 EDA?
现在,你手头有一批数据,你想用它进行数据挖掘/机器学习,你需要干什么?
- 首先,当然是验证一下,这批数据到底可不可用?
- 如果可用,预计能有多大效果?
- 数据中的每个特征都是什么含义?为什么要用这个特征?特征之间有什么联系?我可否设计新的特征?甚至是否可以删除一些特征?
- 可否从数据中发现一些统计规律,作为先验知识?
- 可否从中发现一些业务sense,辅助对数据/问题的理解,进而抓住影响问题的关键点?
- 可否对数据进行适当的处理,比如剔除/调整异常值等,以提升效果?
太多太多了…
我们都知道,数据决定了最终模型效果的上限。倘若一上来就把数据喂进模型,指望通过模型调参达到“癫峰”,too young too simple…
数据的质与量,乃至人为添加的先验知识,都是提升最终效果的重要因素。
探索性分析示例
首先,导入常用的科学计算和可视化包:
#导入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
载入训练集和测试集:
train_data = pd.read_csv('./train.csv')
test_data = pd.read_csv('./test.csv')
pandas.DataFrame 实例的一些常用操作:
- data.head().append(data.tail()) —— 观察首尾数据
- data.shape —— 观察数据集的维
- data.describe() —— 观察数据的一些基本统计/描述信息,包括:每列的统计量,个数count、平均值mean、方差std、最小值min、中位数25% 50% 75% 、以及最大值。看这个信息主要是瞬间掌握数据的大概的范围以及每个值的异常值的判断。
- data.info() —— 通过 info 来了解数据每列的 type,有助于了解是否存在除了 nan 以外的特殊符号异常。
- data.isnull().sum()——查看每列的 nan 个数
除此之外,还有一个比较骚的操作是用 pandas_profiling 生成数据报告:
import pandas_profiling
pfr = pandas_profiling.ProfileReport(data_train)
pfr.to_file("./example.html")
手机码字,比较不方便,先这样。后续再补充更多更复杂的分析和数据预处理方法,以及更丰富的图表📊…