数据竞赛基本流程
- 赛题理解
- 探索性数据分析
- 特征工程
- 建模调参
- 模型融合
探索性数据分析(Exploratory Data Analysis,EDA)
In statistics, exploratory data analysis(EDA) is an approach to analyzing data sets to summarize their maincharacteristics, often with visual methods. A statistical model can be used ornot, but primarily EDA is for seeing what the data can tell us beyond theformal modeling or hypothesis testing task. Exploratory data analysis waspromoted by John Tukey to encourage statisticians to explore the data, andpossibly formulate hypotheses that could lead to new data collection andexperiments. EDA is different from initial data analysis (IDA), which focusesmore narrowly on checking assumptions required for model fitting and hypothesistesting, and handling missing values and making transformations of variables asneeded. EDA encompasses IDA. (-From Wiki)
1 EDA的功能
美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)提出探索性数据分析(EDA)主要有如下功能:
- 尽可能洞察数据基本属性
- 发现潜在的数据结构
- 提取重要的变量
- 异常检测和处理异常值
- 检验统计假设
- 建立初步模型
- 决定最优模型因子的设定
2 EDA内容
- 载入各种数据科学以及可视化库:
- 数据科学库 pandas、numpy、scipy;
- 可视化库 matplotlib、seabon;
- 其他;
- 载入数据:
- 载入训练集和测试集( pd.read_csv());
- 简略观察数据(head()+tail()+shape);
- 数据预览:
- 通过describe()来熟悉数据的相关统计量,主要了解数据的大概范围以及每个值的异常值的初步判断
- 通过info()来熟悉数据类型,有助于了解是否存在除了nan以外的特殊符号异常
- 判断数据缺失和异常
- 缺失值检测
* df.isnull().sum(),df.notnull().sum()
* 使用 missingno库,常用missingno.bar(),missingno.matrix(),missingno.heatmap()等 - 异常值检测
- 缺失值检测
#缺失值检测
# nan可视化
missing = data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
- 了解预测值的分布
- 总体分布概况(无界约翰逊分布等)
- 查看skewness and kurtosis
- 查看预测值的具体频数
## 1) 总体分布概况(无界约翰逊分布等)
import scipy.stats as st
y = data['label']
plt.figure(1); plt.title('Johnson SU')
sns.distplot(y, kde=False, fit=st.johnsonsu)
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(data['label']);
print("Skewness: %f" % data['label'].skew())
print("Kurtosis: %f" % data['label'].kurt())
-
特征分为类别特征和数字特征,并对类别特征查看unique分布
-
数字特征分析
- 相关性分析
- 查看几个特征的偏度和峰值
- 每个数字特征的分布可视化
* 直方图 sns.distplot()
* 条形图 sns.barplot()
* 箱线图 sns.boxplot()
* 小提琴图 sns.violinplot()
* 散点图 sns.scatterplot() - 数字特征相互之间的关系可视化
* 相关性-热度图 sns.heatmap()
* 相关性 - 多变量互相回归关系可视化
-
类型特征分析
- data[‘label’].value_counts()查看各个类型特征的值出现的频次
- 计数图 sns.countplot()
- unique分布
- 类别特征箱形图可视化
- 类别特征的小提琴图可视化
- 类别特征的柱形图可视化类别
- 特征的每个类别频数可视化(count_plot)
-
用pandas_profiling生成数据报告
-
时间序列,需进行类型转换
pd.to_datetime()