用python在kaggle上试了几个project,有点体会,记录下。
Step1: Exploratory Data Analysis
EDA,也就是对数据进行探索性的分析,一般就用到pandas和matplotlib就够了。EDA一般包括:
- 每个feature的意义,feature的类型,比较有用的代码如下
df.describe()
df['Category'].unique() - 看是否存在missing value
df.loc[df.Dates.isnull(),'Dates'] - 每个特征下的数据分布,可以用boxplot或者hist来看
%matplotlib inline
import matplotlib.pyplot as plt
df.boxplot(column='Fare', by = 'Pclass')
plt.hist(df['Fare'], bins = 10, range =(df['Fare'].min(),df['Fare'].max()))
plt.title('Fare >distribution')
plt.xlabel('Fare')
plt.ylabel('Count of Passengers')
#如果变量是categorical的,想看distribution,则可以:
df.PdDistrict.value_counts().plot(kind='bar', figsize=(8,10)) - 如果想看几个feature之间的联立情况,则可以用pandas的groupby,
temp = pd.crosstab([df.Pclass, df.Sex], df.Survived.astype(bool))
temp.plot(kind='bar', stacked=True, color=['red','blue'], grid=False)
在这步完成之后,要对以下几点有大致了解
- 理解每个特征的意义
- 要知道哪些特征是有用的,这些特征哪些是直接可以用的,哪些需要经过变换才能用,为之后的特征工程做准备
Step2: Data Preprocessing
数据预处理,就是将数据处理下,为模型输入做准备,其中包括:
- 处理missing value:这里学问有点深,如果各位有好的经验可以跟我交流下。以我浅薄的经验来说我一般会分情况处理
- 如果missing value占总体的比例非常小,那么直接填入平均值或者众数
- 如果missing value所占比例不算小也不算大,那么可以考虑它跟其他特征的关系,如果关系明显,那么直接根据其他特征填入;也可以建立简单的模型,比如线性回归,随机森林等。
- 如果missing value所占比例大,那么直接将miss value当做一种特殊的情况,另取一个值填入
- 处理Outlier:这个就是之前EDA的作用了,通过画图,找出异常值
处理categorical feature:一般就是通过dummy variable的方式解决,也叫one hot encode,可以通过pandas.get_dummies()或者 sklearn中preprocessing.OneHotEncoder(), 我个人倾向于用pandas的get_dummies()
看个例子吧,
原文链接