学习的代码:https://blog.csdn.net/snoopy_yuan
Part 3 特征工程
该部分包括数据划分和各部分特征处理,首先是数据划分部分:
1. 关于DataFrame的数据显示时总是隐藏部分列的解决:
pd.set_option('max_columns',100)
参考:https://blog.csdn.net/yagamil/article/details/71642271
2. 关于DataFrame的drop_duplicates()方法:
DataFrame.drop_duplicates
(subset=None, keep='first', inplace=False)
其中,inplace参数,表示是否在原数据集上修改还是返回保留一个副本;默认值为false,即保留一个副本。
注意:
df.drop_duplicates(inplace=True) 是对原数据集df进行修改;
s=df.drop_duplicates(inplace=False) 与 s=df.drop_duplicates() 等价,原df不变,s中保存去重复项之后的内容。
参考:https://blog.csdn.net/leokingszx/article/details/78199638
3. pandas的groupby方法:
groupby,即按什么分组;其有一个参数为by,值可为list,Series等;
例:
df=pd.read_csv(open(paht_part_D,'r'))
df.groupby(['user_id','behavior_type'])
即按user_id和behavior_type分组,结果大概如下所示:
user_id behavior_type (出现次数)
1 1 2
2 5
2 1 3
2 2
cumcount()方法:
记录该条信息是按当前分组依据分组中的第几条,详见第三条参考网址(官方文档);
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.cumcount.html
https://blog.csdn.net/zhangxiaojiakele/article/details/78198568
cumcount(): http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.cumcount.html
4. pandas的get_dummies方法:
作用:为指定列的每个取值新建一个列;(类似《实用机器学习》书中说的,处理类别特征;如性别特征,则分为两列,Male和Female;)
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html
看下面的例子;
https://blog.csdn.net/lujiandong1/article/details/52836051
5. pandas的groupby.agg方法:
分组之后,在每个组内,求其他列的一些数学特征,如最小值、最大值、求和等;(挺难描述的……,具体看官方文档……)
举例:
df_part_1_u_b_count_in_6 = df_part_1_u_b_count_in_6.groupby('user_id').agg({'u_b1_count_in_6': np.sum,
'u_b2_count_in_6': np.sum,
'u_b3_count_in_6': np.sum,
'u_b3_count_in_6': np.sum,
'u_b4_count_in_6': np.sum})
(这个添加代码的功能还是蛮好用的~)
解释:原本是一个用户对应多条数据,每条数据除行为不同外,其他相同;(之前已经对用户各项行为进行求和,记录在u_b1_count_in_6,u_b2_count_in_6等列中);如下:
user_id u_b1_count_in_6 u_b2_count_in_6 u_b3_count_in_6 u_b4_count_in_6
1 5 0 0 0
1 0 8 0 0
1 0 0 2 0
1 0 0 0 6
......
经过该处理,先用user_id分组,再agg,得到的数据集如下:
user_id u_b1_count_in_6 u_b2_count_in_6 u_b3_count_in_6 u_b4_count_in_6
1 5 8 2 6
参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.agg.html
6. astype(int)解释:
数据类型转换
参考:https://blog.csdn.net/chinacmt/article/details/52230339
7. pandas的apply()方法
dataframe.apply(fun,axis=''),表示,对于datafram的每一行或一列,运用fun函数进行处理,例子见8。
axis=1或'columns',表示对行处理;
axis=0或'index',表示对列处理。
8. lambda表达式:
作用是定义匿名函数,举例:
lambda x:x+1
含义就是,输入参数是x,返回值是x+1;
应用:
df_part_1_u_b_count_in_6['u_b_count_in_6'] = df_part_1_u_b_count_in_6[['u_b1_count_in_6',
'u_b2_count_in_6',
'u_b3_count_in_6',
'u_b4_count_in_6']].apply(lambda x: x.sum(), axis = 1)
[[]]操作,表示获取指定列,返回值是dataframe;
含义:对每一行,进行求和操作,更新到'u_b_count_in_6'列中。