最近想玩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是把上面的值传递给下面。