数据预处理
最近开始学习用机器学习进行建模,顺便在这里记录一下自己的学习过程。
首先说一下自己的工作进度,目前已经对手里的数据清洗完毕,接下来就是找一些机器学习的模型。
任何事都要一步一步来,下面开始机器学习的第一步,做特征工程
(这里主要分享一下常用的,比较方便的代码,具体的可以根据个人的需求去数据集上使用)
1、先瞅瞅数据长啥样
train.shape # 用来查看数据的大小,几行几列
train.info() # 粗略看数据的基本特征(多少条记录,多少列,有哪些数据类型)
train.describe() # 这个可以查看数据的情况(对每一列数据的数量,均值,方差等)
pd.isnull(train).values.any() # 查看数据是否存在缺失值
一个数据里肯定有多种类型的数据,与其打开数据自己肉眼一个一个看哪一列是哪种类型,有没有更方便点的呢。
看看下面这几行代码,应该可以方便解决了
# 打印类别特征
cat_features = list(train.select_dtypes(include=['object']).columns)
print "Categorical: {} features".format(len(cat_features))
# 打印连续特征-------(这里id和label一般不会进入模型,所以打印时会排除一下)
cont_features = [cont for cont in list(train.select_dtypes(
include=['float64', 'int64']).columns) if cont not in ['label', 'id']]
print "Continuous: {} features".format(len(cont_features))
2、类别特征编码
比如一列特征有多个类别,那么可以先自动的进行字典匹配,如下:
townstreets = train['街道']
townstreets_mapping = {lab: idx for idx, lab in enumerate(set(townstreets.dropna()))}
print(townstreets_mapping)
out:
{'南桥镇': 0, '半淞园街道': 1, '朱泾镇': 2, '龙华街道': 3, '车墩镇': 4, '塘外社区': 5,
'万里街道': 6, '殷行街道': 7, '田林街道': 8, '平安社区': 9, '华阳街道': 10}
下面就可以进行map(),,,对特征进行编码
townstreets_mapping = {'南桥镇': 0, '半淞园街道': 1, '朱泾镇': 2, '龙华街道': 3, '车墩镇': 4, '塘外社区': 5,
'万里街道': 6, '殷行街道': 7, '田林街道': 8, '平安社区': 9, '华阳街道': 10}
train['所属乡镇街道'] = train['所属乡镇街道'].map(townstreets_mapping)
train['所属乡镇街道'].unique()
out:
array([ 1, 0, 2, 3, 4, 5, 12, 6, 7, 8, 9, 10], dtype=int64)