分类 python 下的文章

one_hot_encoder和label_encoder

one_hot_encoder和label_encoder可以处理类别类型的特征。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
from sklearn.preprocessing import LabelEncoder
def one_hot_encoder(df, nan_as_category = True):
    original_columns = list(df.columns)
    categorical_columns = [col for col in df.columns if df[col].dtype == 'object']
    df = pd.get_dummies(df, columns = categorical_columns, dummy_na = nan_as_category)
    new_columns = [c for in df.columns if not in original_columns]
    return df, new_columns
def label_encoder(df):
    original_columns = list(df.columns)
    categorical_columns = [col for col in df.columns if df[col].dtype == 'object']
    for col in categorical_columns:
        df[col] = LabelEncoder().fit_transform(df[col].astype('str'))
    new_columns = [c for in df.columns if not in original_columns]
    return df, categorical_columns

使用scipy.sparse保存稀疏矩阵

使用scipy.sparse保存稀疏矩阵可以省一些空间,将矩阵转化为稀疏矩阵进行计算可以省一些内存。

1
2
3
4
5
6
7
8
9
10
from scipy import sparse
from scipy.sparse import hstack, csr_matrix
import os
fname = 'df.npz'
if not os.path.exists(fname):
    df = get_df()
    df = hstack([csr_matrix(df), csr_matrix(df)])
    sparse.save_npz(fname, df, compressed=True)
else:
    df = sparse.load_npz(fname)

使用pandas保存h5文件

pandas读取的数据保存成h5文件,再次读取速度会快一些。

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
import os
fname = 'df.h5'
if not os.path.exists(fname):
    h5 = pd.HDFStore(fname,'w', complevel=4, complib='blosc')
    df = get_df()
    h5['df'= df
    h5.close()
else:
    h5 = pd.HDFStore(fname,'r')
    df = h5['df']
    h5.close()