从0开始入门数据挖掘(一)-EDA

本文将以天池的一道赛题入手,详细介绍数据挖掘的步骤,实际操作性强。

适合人群:想入门数据挖掘,入门数据挖掘类比赛,熟悉python,pandas,Numpy等库运用性选手

本文的结构为:

  • 准备工作(赛题的报名、数据的下载等。。。)
  • 数据挖掘赛题的理解
  • 数据探索性分析

1.准备工作

该赛题是关于二手车交易价格预测

赛题网址:
https://tianchi.aliyun.com/competition/entrance/231784/information

大家可以在上面网址下载训练和测试数据


2.数据挖掘赛题的理解

数据准备好之后,就开始要理解赛题。就像我们考试一样,需要仔细审题。这里的数据哇据赛题的理解需要明确目标是什么,是分类问题还是回归问题?

这些信息会直接对后面的特征工程、模型选择以及评分体系都会有很大的影响。因为分类和回归的问题用到的模型和评分标准是完全不一样的。有什么区别呢?

分类算法常见的评估指标如
下:

  • 对于二类分类器/分类算法,评价指标主要有accuracy, [Precision,Recall,F-score,Pr曲线],ROC-AUC曲线
  • 对于多类分类器/分类算法,评价指标主要有accuracy, [宏平均和微平均,F-score]

回归常用的评价标准为:
平均绝对误差(Mean Absolute Error,MAE),均方误差(Mean Squared Error,MSE),平均绝对百分误差(Mean Absolute Percentage Error,MAPE),均方根误差(Root Mean Squared Error), R2(R-Square)等
在这里插入图片描述
分类指标评价实例

## accuracy
import numpy as np
from sklearn.metrics import accuracy_score
y_pred = [0, 1, 0, 1]
y_true = [0, 1, 1, 1]
print('ACC:',accuracy_score(y_true, y_pred))

# ACC: 0.75
## Precision,Recall,F1-score
from sklearn import metrics
y_pred = [0, 1, 0, 0]
y_true = [0, 1, 0, 1]
print('Precision',metrics.precision_score(y_true, y_pred))
print('Recall',metrics.recall_score(y_true, y_pred))
print('F1-score:',metrics.f1_score(y_true, y_pred))

# Precision 1.0
# Recall 0.5
# F1-score: 0.6666666666666666
## AUC
import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print('AUC socre:',roc_auc_score(y_true, y_scores))

# AUC socre: 0.75

回归性指标实例

# coding=utf-8
import numpy as np
from sklearn import metrics

# MAPE需要自己实现
def mape(y_true, y_pred):
    return np.mean(np.abs((y_pred - y_true) / y_true))

y_true = np.array([1.0, 5.0, 4.0, 3.0, 2.0, 5.0, -3.0])
y_pred = np.array([1.0, 4.5, 3.8, 3.2, 3.0, 4.8, -2.2])

# MSE
print('MSE:',metrics.mean_squared_error(y_true, y_pred))
# RMSE
print('RMSE:',np.sqrt(metrics.mean_squared_error(y_true, y_pred)))
# MAE
print('MAE:',metrics.mean_absolute_error(y_true, y_pred))
# MAPE
print('MAPE:',mape(y_true, y_pred))
## R2-score
from sklearn.metrics import r2_score
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print('R2-score:',r2_score(y_true, y_pred))

针对这个二手车价格预测的赛题,很明显是典型的回归问题
以下为题目所有提供的特征:
name - 汽车编码
regDate - 汽车注册时间
model - 车型编码
brand - 品牌
bodyType - 车身类型
fuelType - 燃油类型
gearbox - 变速箱
power - 汽车功率
kilometer - 汽车行驶公里
notRepairedDamage - 汽车有尚未修复的损坏
regionCode - 看车地区编码
seller - 销售方
offerType - 报价类型
creatDate - 广告发布时间
price - 汽车价格
v_0’, ‘v_1’, ‘v_2’, ‘v_3’, ‘v_4’, ‘v_5’, ‘v_6’, ‘v_7’, ‘v_8’, ‘v_9’, ‘v_10’, ‘v_11’, ‘v_12’, ‘v_13’,‘v_14’(根据汽车的评论、标签等大量信息得到的embedding向量)【人工构造 匿名特征】


3.数据探索性分析

数据的探索性分析,先大致了解一下数据的大致分布,数据的类型,挖掘出离群点,分离出重要的特征等

3.1 首先以简单粗暴的方式查看具体数据,例如可以用pandas.head()方法,查看前几列数据,用pandas.info()查看数据的类型和数据量,用describe()查看数据的极值,均值、方差等统计指标。

  • pandas.head()
    在这里插入图片描述
  • pandas.info()
    在这里插入图片描述
  • pandas.describe()
    在这里插入图片描述
  • pandas.columns()
    在这里插入图片描述3.2 其次,再高阶一点的方式,可以进行可视化分析,如果是回归问题可以看是否有明显时序变化,分布是否符合要求,因为很多模型都要求变量之间独立同分布(正态分布),需要进行变量转换,例如对变量取对数等

3.2.1 查看缺失值情况
在这里插入图片描述

# nan可视化
missing = train_data.isnull().sum()
missing = missing[missing > 0]
missing.sort_values(inplace=True) # 排序
print(missing)
missing.plot.bar()

在这里插入图片描述

# 可视化看下缺省值
import missingno as msno
msno.matrix(train_data.sample(250))

在这里插入图片描述

msno.bar(train_data)

在这里插入图片描述
测试集的缺省和训练集的差不多情况, 可视化有四列有缺省,notRepairedDamage缺省得最多

3.2.2 查看异常值检测

train_data.info() 可以发现除了 notRepairedDamage 为object类型其他都为数字 这里我们把他的几个不同的值都进行显示就知道了

## 2) 查看异常值检测
train_data['notRepairedDamage'].value_counts()

在这里插入图片描述

# 可以看出来‘ - ’也为空缺值,因为很多模型对nan有直接的处理,这里我们先不做处理,先替换成nan
train_data['notRepairedDamage'].replace('-', np.nan, inplace=True)
train_data['notRepairedDamage'].value_counts()

在这里插入图片描述

  • v_0变量测试数据和训练数据是否同分布
    在这里插入图片描述

3.3 最后,还需要对各个变量进行相关性和独立性分析,而不同类型的变量需要采用不同的相关性分析方法,数值型和类别变量分析方法不同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值