周学习笔记(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
### 没学习