周学习笔记(2021.8.16-2021.8.22)

周学习笔记(2021.8.16-2021.8.22)

8.16

没学习

8.17

1. 偏态分布

看哪边尾巴长,左边尾巴长为左偏,右边尾巴长为右偏

2. drop_duplicates()

参考博客

用途:去除特定列下面的重复行。返回DataFrame格式的数据

DataFrame.drop_duplicates(subset=None,keep="first",inplace=False)

subset 用来指定特定的列,默认所有列

keep 默认first,删除重复项并保留第一次出现的项

inplace 是在原来的数据上修改还是保留一个副本

3. value_counts() & unique() & nuique()

(1)data.属性名.unique()

输出所有类别种类

(2)data.属性名.nuique()

输出类别种类数

(3)data.属性名.value_counts()

类别及对应数量

4. 异常值检测——孤立森林

from sklearn.ensemble import IsolationForest

def IF_drop(train):
    IForest = IsolationForest(contamination=0.01)
    IForest.fit(train["tradeMoney"].values.reshape(-1,1))
    y_pred = IForest.predict(train["tradeMoney"].values.reshape(-1,1))
    drop_index = train.loc[y_pred==-1].index
    print(drop_index)
    train.drop(drop_index,inplace=True)
    return train

5. GaussianMixture() 聚类特征

参考博客

from sklearn.mixture import GaussianMixture  #使用GaussianMixture做聚类特征
gmm = GaussianMixture(n_components=4, covariance_type='full', random_state=0)
data['cluster']=gmm.fit_predict(data) #该列值是0、1、2、3(共聚成四类)

data 中的属性应试数值型的,即select_dtypes (include=[np.number])

今天学到了一个封装好的算法可以有三部分

(1)参数

n_components 混合高斯模型个数,默认为1

covariance_type,默认为full

协方差类型 {“full”,“tied”,“diag”,“spherical”}

full 指每个分量有各自不同的标准协方差矩阵,完全协方差矩阵(元素都不为零)

tied 指所有分量有相同的标准协方差矩阵(隐马尔可夫模型——HMM会用到)

diag 指每个分量有各自不同的对角协方差矩阵(非对角为0,对角不为0)

spherical 指每个分量有各自不同的简单协方差矩阵,球面协方差矩阵(非对角为0,对角完全相同,球面特性)

random_state

(2)属性

(3)函数

8.18

1. DataFrame.index

参考博客

在这里插入图片描述

2. DataFrame.drop()

参数 columns= ,index= 来实现

3. agg()

参考博客

通常与groupby() 一起用

对分组后的部分列进行聚合,某些情况下,只需要对部分数据进行不同的聚合操作,可以通过**字典**来构建

num_agg={'Age':['min','mean','max']}
print(df.groupby('Country').agg(num_agg))

在这里插入图片描述

4. 特征工程

# 过大量级值取log平滑(针对线性模型有效)
data[feature]=np.log1p(data[feature])
# 特征编码
from sklearn.preprocessing import LabelEncoder
data['communityName'] = LabelEncoder().fit_transform(data['communityName'])

from sklearn.preprocessing import OneHotEncoder
data['communityName'] = OneHotEncoder().fit_transform(data['communityName'])

5. pop()

6. (重点)利用groupby() 计算统计特征

#重点解读
data.groupby(features) #按照features分组,但是什么都显示不出来,此时是groupby对象
data.groupby(features).size()  #显示每个属性出现的总次数
'''
communityName
XQ00001     1
XQ00002     2
XQ00003     1
XQ00004     3
XQ00005    13
           ..
XQ04232    13
XQ04233     4
XQ04234     3
XQ04235     3
XQ04236     1
Length: 4236, dtype: int64

'''

data.groupby(features).size().reset_index()
'''
     communityName   0
0          XQ00001   1
1          XQ00002   2
2          XQ00003   1
3          XQ00004   3
4          XQ00005  13
...            ...  ..
4231       XQ04232  13
4232       XQ04233   4
4233       XQ04234   3
4234       XQ04235   3
4235       XQ04236   1

[4236 rows x 2 columns]

'''

data.groupby(features).size().reset_index().rename(columns={0:new_feature}) #将原列名"0"替换为上面的new_feature
'''
     communityName  count_communityName
0          XQ00001                    1
1          XQ00002                    2
2          XQ00003                    1
3          XQ00004                    3
4          XQ00005                   13
...            ...                  ...
4231       XQ04232                   13
4232       XQ04233                    4
4233       XQ04234                    3
4234       XQ04235                    3
4235       XQ04236                    1

[4236 rows x 2 columns]
'''
#计算统计特征
def featureCount(train,test):
    train['data_type'] = 0 
    test['data_type'] = 1
    data = pd.concat([train, test], axis=0, join='outer')
    
    #重点
    def feature_count(data, features=[]):  #参数表示传一个列表
        new_feature = 'count' 
        for i in features:
            new_feature += '_' + i  #规定列名,例如"count_communityName"
        temp = data.groupby(features).size().reset_index().rename(columns={0: new_feature}) #重点解读
        data = data.merge(temp, 'left', on=features) #与原数据连接上
        return data

    data = feature_count(data, ['communityName'])
    data = feature_count(data, ['buildYear'])
    data = feature_count(data, ['totalFloor'])
    data = feature_count(data, ['communityName', 'totalFloor'])
    data = feature_count(data, ['communityName', 'newWorkers'])
    data = feature_count(data, ['communityName', 'totalTradeMoney'])
    new_train = data[data['data_type'] == 0]
    new_test = data[data['data_type'] == 1]
    new_train.drop('data_type', axis=1, inplace=True)
    new_test.drop(['data_type'], axis=1, inplace=True)
    return new_train, new_test
    
train, test = featureCount(train, test)
temp = data.groupby(['month', 'communityName']).size().reset_index(name='communityName_saleNum')
data = data.merge(temp, on=['month', 'communityName'], how='left')

7. python多行语句表示

参考博客

在这里插入图片描述

8. fine-tune 微调

参考博客

注:tune 调整

9. 分开训练集和测试集

(1) 感觉这都是最基本操作,但自己还是不熟

new_train = data[data['data_type'] == 0]
new_test = data[data['data_type'] == 1]

10. map() & apply()

区别在于axis参数

由于apply() 使用对象为 dataframe ,所以需要传入axis参数

axis=0 跨行操作,axis=1跨列操作

但是map() 使用对象为series,所以没有axis参数,可以直接对一列数据使用

8.19

没学习

8.20

没学习

8.21

没学习

8.22

没学习

== 0]
new_test = data[data[‘data_type’] == 1]


### 10. map() & apply()

区别在于axis参数

由于apply() 使用对象为 dataframe ,所以需要传入axis参数

axis=0 跨行操作,axis=1跨列操作

但是map() 使用对象为series,所以没有axis参数,可以直接对一列数据使用



## 8.19

### 没学习



## 8.20

### 没学习



## 8.21

### 没学习



## 8.22

### 没学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值