kaggle入门笔记(Day1:Handling missing values)
最近想玩kaggel比赛来着,但是注册后无从下手。幸运的是kaggle给我推送了五天的练习题,我做了一下笔记,本人是小菜,如果有那个地方有问题,还希望大家多多指正。附上网址:
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是把上面的值传递给下面。