↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:王茂霖,华中科技大学,Datawhale成员
摘要:数据竞赛对于大家理论实践和增加履历帮助比较大,但许多读者反馈不知道如何入门,本文以河北高校数据挖掘邀请赛为背景,完整梳理了从环境准备、数据读取、数据分析、特征工程和数据建模的整个过程。
赛事分析
本次赛题为数据挖掘类型,通过机器学习算法进行建模预测。
是一个典型的回归问题。
主要应用xgb、lgb、catboost,以及pandas、numpy、matplotlib、seabon、sklearn、keras等数据挖掘常用库或者框架来进行数据挖掘任务。
通过EDA来挖掘数据的信息。
赛事地址(复制打开或阅读原文):https://tianchi.aliyun.com/s/f4ea3bec4429458ea03ef461cda87c3f
数据概况
了解列的性质会有助于我们对于数据的理解和后续分析。Tip:匿名特征,就是未告知数据列所属的性质的特征列。数据下载地址:https://tianchi.aliyun.com/competition/entrance/531858/information
代码实践
Step 1:环境准备(导入相关库)
## 基础工具
import numpy as np
import pandas as pd
import warnings
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.special import jn
from IPython.display import display, clear_output
import time
warnings.filterwarnings('ignore')
%matplotlib inline
## 数据处理
from sklearn import preprocessing
## 数据降维处理的
from sklearn.decomposition import PCA,FastICA,FactorAnalysis,SparsePCA
## 模型预测的
import lightgbm as lgb
import xgboost as xgb
## 参数搜索和评价的
from sklearn.model_selection import GridSearchCV,cross_val_score,StratifiedKFold,train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error
Step 2:数据读取
## 通过Pandas对于数据进行读取 (pandas是一个很友好的数据读取函数库)
#Train_data = pd.read_csv('datalab/231784/used_car_train_20200313.csv', sep=' ')
#TestA_data = pd.read_csv('datalab/231784/used_car_testA_20200313.csv', sep=' ')
path = './data/'
## 1) 载入训练集和测试集;
Train_data = pd.read_csv(path+'train.csv', sep=' ')
TestA_data = pd.read_csv(path+'testA.csv', sep=' ')
## 输出数据的大小信息
print('Train data shape:',Train_data.shape)
print('TestA data shape:',TestA_data.shape)
Train data shape: (150000, 31)
TestA data shape: (50000, 30)
可以发现训练集有 15w 样本,而测试集有 5w 样本,特征维度并非很高,总体只有30维。
1) 数据简要浏览
## 通过.head() 简要浏览读取数据的形式
Train_data.head()
2) 数据信息查看
## 通过 .info() 简要可以看到对应一些数据列名,以及NAN缺失信息
Train_data.info()
# nan可视化
missing = Train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()
抽取出 'model'特征 为 NaN 的样本:
Train_data[np.isnan(Train_data['model'])]
TestA_data.info()
通过对于数据的基础 Infomation的查看,我们知道 'model','bodyType','fuelType','gearbox'特征 中存在缺失。
3) 数据统计信息浏览
#显示所有列
pd.set_option('display.max_columns', None)
## 通过 .describe() 可以查看数值特征列的一些统计信息
Train_data.describe()
TestA_data.describe()
通过数据的统计信息,可以对于数据中的特征的变化情况有一个整体的了解。
Step 3: 数据分析(EDA)
1) 提取数值类型特征列名
numerical_cols = Train_data.select_dtypes(exclude = 'object').columns
print(numerical_cols)
categorical_cols = Train_data.select_dtypes(include = 'object').columns
print(categorical_cols)
# out: Index(['notRepairedDamage'], dtype='object')
首先我们对于非数字特征列进行数值化处理
set(Train_data['notRepairedDamage'])
#