数据处理
在处理数据之前需要导入数据分析相关numpy,pandas,matplotlib.pyplot,seaborn(是matplotlib更高级的API封装,为其补充物而不是替代物)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
Step1: Exploratory Data Analysis
读入的数据框为df_train
- 查询信息字段名字和类型,均值方差
df_train.describe()
- 查询变量的取值范围
df['wether'].unique()
- 看是否存在missing value
df_train.count()
df.loc[df.weather.isnull(),'weather']
- 删除不需要的字段
df_train=df_train.drop(['datetime','casual','registered'], axis = 1
- 数据列与列之间联结
df = pd.concat([data_train, dummies_Cabin, dummies_Embarked, dummies_Sex, dummies_Pclass], axis=1)
- 按正则表达式提取列
test=df_test.filter(regex='Age_.*|SibSp|Parch|Fare_.*|Cabin_.*|Embarked_.*|Sex_.*|Pclass_.*')
- 时间数据处理:通常将月日小时单独拎出来,添加到原数据框,df_train[’ xxx’]为已预处理好数据框的新增列
df_train['month'] = pd.DatetimeIndex(df_train.datetime).month
df_train['day'] = pd.DatetimeIndex(df_train.datetime).dayofweek
df_train['hour'] = pd.DatetimeIndex(df_train.datetime).hour
数据可视化
subplot
在画图便签中显示中文字,需要添加以下代码
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
import matplotlib.pyplot as plt
import seaborn as sns #要注意的是一旦导入了seaborn,matplotlib的默认作图风格就会被覆盖成seaborn的格式
sns.distplot(births['prglngth'])
sns.plt.show()
df_train_origin.groupby('windspeed').mean().plot(y='count', marker='o')# 对windspeed分组求平均
# scatter一下各个维度,plot的对象时数据框,参数axs为位置
fig, axs = plt.subplots(2, 3, sharey=True)
df_train_origin.plot(kind='scatter', x='temp', y='count', ax=axs[0, 0], figsize=(16, 8), color='magenta')#散点图主要适合特征取值较多的类目值或者连续值
plt.subplot2grid((2,3),(0,0)) # 在一张大图里分列几个小图
df_train.Data.value_counts().plot(kind='bar')#柱状图主要适合0-1特征取值较少
plt.title(u"获救情况 (1为获救)") # 添加图片标题
plt.ylabel(u"人数")
#分组绘制密度曲线图
data_train.Age[data_train.Pclass == 1].plot(kind='kde') # plots a kernel desnsity estimate of the subset of the 1st class passanges's age
data_train.Age[data_train.Pclass == 2].plot(kind='kde')
data_train.Age[data_train.Pclass == 3].plot(kind='kde')
plt.xlabel(u"年龄")# plots an axis lable
plt.ylabel(u"密度")
plt.title(u"各等级的乘客年龄分布")
plt.legend((u'头等舱', u'2等舱',u'3等舱'),loc='best') # sets our legend for our graph.
#箱线或者柱状图观察特征
data.boxplot(column=['EMI_Loan_Submitted'],return_type='axes')
df.boxplot(column='Fare', by = 'Pclass')#分组箱图
plt.hist(df['Fare'], bins = 10, range =(df['Fare'].min(),df['Fare'].max()))
# 来看看相关度咯
corr =df_train_origin[['temp','weather','windspeed','day', 'month', 'hour','count']].corr()
# 用颜色深浅来表示相关度
plt.figure()
plt.matshow(corr)
plt.colorbar()
plt.show()
Data Processing 数据处理
1、运用逻辑回归建模的时候,输入的特征都是数值型特征,故需要将类目型特征离散/因子化
- prefix 类目化的前缀
dummies_Cabin = pd.get_dummies(data_train['Cabin'], prefix= 'Cabin')
- 查看各个变量缺省值个数(lambda x 指代前面data)
data.apply(lambda x: sum(x.isnull()))
- 每个变量不同取值出现的次数(value_counts()代表分组计数)
var = ['Gender','Salary_Account','Mobile_Verified','Var1','Filled_Form','Device_Type',