kaggle入门笔记(Day1:Handling missing values)

最近想玩kaggel比赛来着,但是注册后无从下手。幸运的是kaggle给我推送了五天的练习题,我做了一下笔记,本人是小菜,如果有那个地方有问题,还希望大家多多指正。附上网址:

https://www.kaggle.com/rtatman/data-cleaning-challenge-handling-missing-values?utm_medium=email&utm_source=mailchimp&utm_campaign=5DDC-data-cleaning



1、Take a first look at the data

当我们拿到数据之后,我应该先大致的扫一下,这可以让我们了解数据,知道接下来要对数据进行怎样的处理。我会查看都有哪些缺失值,是用NaN表示,还是用None表示

# modules we'll use
import pandas as pd
import numpy as np

# read in all our data
nfl_data = pd.read_csv("../input/nflplaybyplay2009to2016/NFL Play by Play 2009-2017 (v4).csv")
sf_permits = pd.read_csv("../input/building-permit-applications-data/Building_Permits.csv")

# set seed for reproducibility
np.random.seed(0) 

pandas百度百科解释:Python Data Analysis Library 或pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。

我的理解pandas就是对数据进行处理和分析的一个工具包。是一个强大的python数据分析工具包

这里面提供了nfl比赛的一些数据

np.random.seed(0)是为了后面能够提供不变的随机数

# look at a few rows of the nfl_data file. I can see a handful of missing data already!
nfl_data.sample(5)

取出五个例子进行观察,就会发现中间有很多缺失值

2、See how many missing data points we have

# get the number of missing data points per column
missing_values_count = nfl_data.isnull().sum()

# look at the # of missing points in the first ten columns
missing_values_count

可以看到每个属性的缺失值的个数

Date                                0
GameID                              0
Drive                               0
qtr                                 0
down                            61154
time                              224
TimeUnder                           0
TimeSecs                          224
PlayTimeDiff                      444
SideofField                       528
yrdln                             840
yrdline100                        840
ydstogo                             0
ydsnet                              0
GoalToGo                          840
FirstDown                       28811
posteam                         24992
DefensiveTeam                   24992
desc                                2
PlayAttempted                       0
Yards.Gained                        0
sp                                  0
Touchdown                           0
ExPointResult                  397578
TwoPointConv                   407083
DefTwoPoint                    407664
Safety                              0
Onsidekick                          0
PuntResult                     385317
PlayType                            0
                                ...  
AwayTeam                            0
Timeout_Indicator                   0
Timeout_Team                        0
posteam_timeouts_pre                0
HomeTimeouts_Remaining_Pre          0
AwayTimeouts_Remaining_Pre          0
HomeTimeouts_Remaining_Post         0
AwayTimeouts_Remaining_Post         0
No_Score_Prob                     176
Opp_Field_Goal_Prob               176
Opp_Safety_Prob                   176
Opp_Touchdown_Prob                176
Field_Goal_Prob                   176
Safety_Prob                       176
Touchdown_Prob                    176
ExPoint_Prob                        0
TwoPoint_Prob                       0
ExpPts                            176
EPA                               369
airEPA                         248394
yacEPA                         248498
Home_WP_pre                     24954
Away_WP_pre                     24954
Home_WP_post                    26587
Away_WP_post                    26587
Win_Prob                        25009
WPA                              5541
airWPA                         248501
yacWPA                         248762
Season                              0
Length: 102, dtype: int64

但是这样看起来对我们来说并没有很好的概念,我们对这些数据做一些统计

# how many total missing values do we have?
total_cells = np.product(nfl_data.shape)
total_missing = missing_values_count.sum()

# percent of data that is missing
(total_missing/total_cells) * 100
这样我们可以得到空值数据的比值
24.87214126835169

我们可以看到有四分之的数据都是空的,接下来我们对数据进行进一步分析,看一些对那些空值的数据需要进行怎样的处理

有些值的缺失是本来就是没有,例如如果一个人还没有还在,那么记录他的孩子中最大的身高,那么这个值本来就应该是空的。那么尝试把这个值给补上是没有意义的。而有些值是因为没有记录导致的空,这个时候我们就需要补齐

对于和这个例子我们会看到有些关于剩余秒数的记录信息是空的,这个值本来应该是有的。 而PenalizedTeam也有缺失值,如果这个这个队伍没有被惩罚,那么这个值就应该是不记录的。    

如果您要进行非常仔细的数据分析,您可以逐个查看每列值,找出填补这些缺失值的最佳策略。下面介绍的是快速进行数据的补全和删除,但是可能会删除一些有用的信息也会添加一些杂数据

3\删除丢失数据行或者列

如果您没有时间或者理由找出缺失值的原因,那么您可以选择删除包含缺失值的行或者列(但是对于重要的项目,一般不推荐这么做,还是有必要花时间分析一下数据的)

# remove all the rows that contain a missing value
nfl_data.dropna()

结果发现所有数据被删除了

# remove all columns with at least one missing value
columns_with_na_dropped = nfl_data.dropna(axis=1)
columns_with_na_dropped.head()

Filling in missing values automatically

# get a small subset of the NFL dataset
subset_nfl_data = nfl_data.loc[:, 'EPA':'Season'].head()
subset_nfl_data

# replace all NA's with 0
subset_nfl_data.fillna(0)


 replace all NA's the value that comes directly after it in the same column, 
# then replace all the reamining na's with 0
subset_nfl_data.fillna(method = 'bfill', axis=0).fillna("0")

ffill是把上面的值传递给下面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值