天池离线赛——移动推荐算法学习笔记2_特征工程

学习的代码: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'列中。



猜你喜欢

转载自blog.csdn.net/shelly_Chestnut/article/details/80569907