大数据开发_EDA

1. 前言

对于从事大数据开发,数据挖掘或者机器学习领域的同学来说,当面对陌生的海量数据时,往往最先做的不是急着去开发功能,而是去认识数据和清洗数据。这有可能会占据着整个开发流程40%左右的精力和时间。

2.数据认识和清洗的总体要求

  1. 理解问题 :我们将分析每一个变量,然后较全面地理解它的含义,以及对我们问题的重要性。
  2. 单变量研究:我们将重点关注因变量(SalePrice),并且对这个变量做一些了解。
  3. 多变量研究:我们尝试理解因变量和自变量之间的关系。
  4. 基础清洗: 我们将清洗数据并且处理缺失值,离群点数据和分类型变量。
  5. 测试验证: 我们将通过多变量技术来检测数据是否符合目标需求。

3. 具体过程

这里以kaggle的预测房价比赛为例:
相关链接:https://www.kaggle.com/c/house-prices-advanced-regression-techniques

导入相应的python包

#invite people for the Kaggle party
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import norm
from sklearn.preprocessing import StandardScaler
from scipy import stats
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline

加载数据到内存

df_train = pd.read_csv('./data/train.csv')
df_test = pd.read_csv('./data/test.csv')

我们期望从数据里分析出什么

为了理解我们的数据,我们可以去看每一个变量,并且理解他们的含义以及和与问题的相关性。我知道这一步将耗费大量的时间,但是将会给我们的数据集很大的支持。

为了在分析过程中有一些规范,我们可以创建一个excel文件,并且有如下列:
1. 变量:变量名字
2. 类型:变量的类型,在这里有两种主要的变量类型:数值型和分类型。数值型是指变量的值是数值。分类型是指变量类型是类型。
3. 片段:是变量的段。我们定义了三种可能的段:建筑,空间和位置。但我们说“建筑”,意思是说变量和建筑的物理特性有关系(比如:OverallQual);当我们说“空间”,意思是说和建筑的空间属性有关系(比如:TotalBsmtSF);当我们说“位置”,意思和建筑的地理位置有关系(你如:Neighborhood)。
4. 期望:我们的期望是变量对SalePrice的影响。我们可以用一个分类尺度来描述,分别是“High”,“Medium”和“Low”。
5. 结论:当对数据做了初步的分析之后,我们就可以对特征变量的重要性下一个结论。
备注:
“类型”和“片段”只是为了将来可能的参考,但是“期望”是非常重要的,因为它可以帮助我们建立第六感。为了完成这个表格,我们需要逐个逐个地去分析每一个特征,并且问自己:
你在买房子的时候 会考虑这个特征吗?
如果考虑,这个特征有多重要?
这个信息在其他特征那里有描述吗?例如:“LandContour”体现了物业的 平整度,那么我们真的需要知道”LandSlope”吗?
当以上这些工作做好了,我们就可以过滤表格,重点关注那些有高期望值的特征变量。然后我们就可以画出这些单个特征和SalePrice之间的关系图像。然后把结论填写上去作为对期望的补充更正。
我做完上述工作之后,发现以下几个特征比较重要:
1. OverallQual (这个特征我太喜欢,因为我不知道它是怎么计算得到的,一个有趣的事情是通过其他的特征来预测OverallQual的值)
2. YearBuilt
3. TotalBsmtSF
4. GrLivArea
就是最后我重点保留了两个“建筑”类特征(OveralQual和YearBuilt)和两个“空间”类特征(TotalBsmtSF和GrLivArea)。这可能有点出乎意料,因为它违背了房地产的咒语,所有重要的是“地点、地点和地点”。这种快速数据检查过程有可能对分类变量有点苛刻。例如,我预期“NigBuffID”变量更相关,但在数据检查之后,我最终排除了它。也许这与使用散点图而不是盒子图有关,这更适合于分类变量可视化。我们可视化数据的方式常常影响我们的结论。
然而,这次练习的要点是对我们的数据和预期行动进行一些思考,所以我认为我们实现了我们的目标.下面,就开始动手做起来把。

首要之事

“SalePrice”是我们追求的原因。这就像当我们要去参加一个晚会,我们总是有一个理由去那里。

df_train['SalePrice'].describe()
    count      1460.000000
    mean     180921.195890
    std       79442.502883
    min       34900.000000
    25%      129975.000000
    50%      163000.000000
    75%      214000.000000
    max      755000.000000
    Name: SalePrice, dtype: float64

结果非常好,最小的价格大于0,这非常好,你没有那种会破坏我模型的个人特质。

sns.distplot(df_train['SalePrice']);

这里写图片描述

目标值呈现出:
1. 偏离正态分布
2. 有明显的正偏态
3. 表现出赤裸裸的样子

# 样本值的偏度(三阶矩)
print("Skewness: %f" % df_train['SalePrice'].skew())
# 样本值的峰度(四阶矩)
print("Kurtosis: %f" % df_train['SalePrice'].kurt())
     Skewness: 1.882876
     Kurtosis: 6.536282

SalePrice, 她的伙伴和她的兴趣

和数值型变量的关系
#散点图 grlivarea/saleprice
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值