1. 数据读取
1.1. 调用
#调用pandas库
import pandas as pd
1.2. 常用文件读取
#调用pandas库 import pandas as pd
1.2. 常用文件读取
CSV文件:以逗号将不同特征值分开的表格文件。
df_origin=pd.read_csv(filepath_or_buffer)
通用文件:支持通用格式文件。
df_origin=pd.read_table(filepath_or_buffer)
Pickle文件
df_origin=pd.read_pickle(filepath_or_buffer)
其他文件:如Excel、Json、Html等。
Reference:pandas.read_pickle — pandas 1.4.3 documentation
2. 数据预处理
2.1. 缺失值处理
#查看缺失值
df_origin.isna()
#删除缺失值
df_nona=df_origin.dropna()
#填补缺失值
#缺失值变为数值
df_nona=df_origin.fillna(0)
#缺失值由字典填补,a、b、c为特征即a特征的缺失值都变为0
df_nona=df_origin.fillna('a':0,'b':1,'c':2)
#缺失值变为同一特征上一对象的记录
df_nona=df_origin.fillna(method='ffill')
#查看缺失值
df_origin.isna()
#删除缺失值
df_nona=df_origin.dropna()
#填补缺失值
#缺失值变为数值
df_nona=df_origin.fillna(0)
#缺失值由字典填补,a、b、c为特征即a特征的缺失值都变为0
df_nona=df_origin.fillna('a':0,'b':1,'c':2)
#缺失值变为同一特征上一对象的记录
df_nona=df_origin.fillna(method='ffill')
Reference: pandas.DataFrame.fillna — pandas 1.4.3 documentation
2.2. 重复值处理
#查看重复值: 表格自上而下第一个会显示False,出现和上面重复的值会显示True
df_nona.duplicated()
#去除重复值
df_nodup=df_nona.drop_duplicates()
#去除特定列有重复值的行
df_nodup=df.nona.drop_duplicates(subset=['Price'])
重复值处理需注意:因为暴力去除重复值会导致数据分布(distribution)变化,因此可选择去除重复值后对重复值数据附加权重(Weight)。比如没记录去除了18个重复值,则带上原本自身的一个,Weight= 19。
Reference:
pandas.DataFrame.drop_duplicates — pandas 1.4.3 documentationhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html
2.3.特征编码
由于机器只能识别数值,因此需要将标称型特征categorical feature(String或其他类型)变为数值类型interger codes。
#OrdinalEncoder是将特征值bian为0到n_categories - 1的范围内 enc = preprocessing.OrdinalEncoder() enc.fit(df_nudup.X) #X是特征名 enc
由于OrdinalEncoder将非numerical数据变为有序的numerical,会影响模型的建立,因此可使用one-of-K,又称为独热码或dummy encoding。
将n个特征值变为长度为n的二进制特征向量,每个值只有一位是1,其余都是0
enc = preprocessing.OneHotEncoder()
enc.fit(df_nodup.X)
df_nodup
#可查看转换值
enc.transform([['female', 'from US', 'uses Safari'],
... ['male', 'from Europe', 'uses Safari']]).toarray()
array([[1., 0., 0., 1., 0., 1.],
[0., 1., 1., 0., 0., 1.]])
Ref: https://www.sklearncn.cn/40/
2.4. 降维(可选)对于2维数据,我们创建新的2维空间,让原本数据点都落在新的其中一个特征向量上,那么另一个新空间特征向量的特征值为0,则该特征向量失去意义,2维向量变为1维向量。N维也是同样的道理。
由于降维会将原本的多个特征进行合并,所以并不合适探索特征和标签之间关系的模型(如线性回归)
from sklearn.decomposition import PCA pca = PCA(n_components=2) pca=pca.fit(df_nodup) df_dr=transform(df_nodup)#获得新的矩阵 print(pca.explained_variance_ratio_) print(pca.singular_values_)



