目录

1.什么是特征工程

2.基本预处理:缺失值处理

2.1缺失值的处理

2.2小练习

2数值型特征

2.1对数变换

2.2幅度缩放

2.3统计数值:描述统计分析

2.4高次特征与交叉特征

2.4.1高次特征

3.字符型特征

3.1哑变量

3.2标签编码


1.什么是特征工程

        特征是用于描述数据中的各种属性、变量或维度的信息,它们是模型用来做
出预测或分类的输入。特征工程是使用专业背景知识和技巧处理数据,使得特征能
在机器学习算法上发挥更好的作用的过程。良好的特征工程可以显著提高模型的性
能,而糟糕的特征选择或构建可能导致模型性能下降。

  • 意义:会直接影响机器学习的效果

特征工程的主要目标包括:

  1. 特征选择:选择最相关的特征,以减少维度和噪声,提高模型的泛化能力。这可以通过统计方法、领域知识、特征重要性评估等方式来完成。
  2. 特征构建:创建新的特征,以提供更多的信息或改善模型的性能。这可能包括将原始特征组合、进行数学变换、提取时间序列特征等操作。
  3. 特征缩放:确保特征具有相似的尺度,以避免某些特征对模型的权重产生不适当的影响。常见的缩放方法包括标准化和归一化。
  4. 处理缺失数据:处理缺失值,可以使用插补方法来填充缺失值,或者考虑是否删除包含缺失值的样本。
  5. 处理分类特征:将分类特征进行编码,例如独热编码(One-Hot Encoding)或标签编码(Label Encoding),以使其适用于机器学习模型。
  6. 特征交叉:将不同特征之间的关联性考虑在内,通过创建特征交叉来提供更多信息。
  7. 特征选择和降维:使用降维技术(如主成分分析PCA)来减少特征的数量,以提高模型的效率和可解释性。

2.基本预处理:缺失值处理

  • 删除属性或者删除样本:如果大部分样本该属性都缺失,这个属性能提供的信息有限,可以选择放弃使用该维属性
  • 统计填充:对于缺失值的属性,尤其是数值类型的属性,根据所有样本关于这维属性的统计值对其进行填充,如使用平均数、中位数、众数、最大值、最小值等,具体选择哪种统计值需要具体问题具体分析。
  • 统一填充:常用的统一填充值有:“空”、“0”、“正无穷”、“负无穷”等。
  • 预测/模型填充:可以通过预测模型利用不存在缺失值的属性来预测缺失值,也就是先用预测模型把数据填充后再做进一步的工作,如统计、学习等。虽然这种方法比较复杂,但是最后得到的结果比较好。
  • pandas库: fillna
  • sklearn库: Imputer

2.1缺失值的处理

缺失值处理,以Age年龄为例

  • 删除属性或者删除样本
  • 统计补充
  • 统一补充
  • 模型预测补充

示例:用特征工程处理泰坦尼克号的预数据

import pandas as pd

data = pd.read_csv(r'train.csv')
print(data)
"""
PassengerId:乘客ID
Survived:生存情况,1为存活,0为死亡
Pclass:客舱等级,1为高级,2为中级,3为低级
Name:乘客名字
Sex:乘客性别
Age:乘客年龄
SibSp:在船兄弟姐妹数/配偶数
Parch:在船父母数/子女数
Ticket:船票编号
Fare:船票价格
Cabin:客舱号
Embarked:登船港口
"""
print('*'*40)
print('data原始信息:')
data.info()
print('*'*40)
# 处理年龄缺失值,Age平均值填充
# data['Age'] = data['Age'].fillna(value=data['Age'].mean())
# print('Age填充平均值后:')
# data.info()
# print('*'*40)
# 或者
from sklearn.impute import SimpleImputer

# 机器学习方法填充
imp = SimpleImputer(strategy='mean')
data[['Age']] = imp.fit_transform(data[['Age']].values)
print('Age填充平均值后:')
data.info()
print('*'*40)

运行结果:

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0              1         0       3  ...   7.2500   NaN         S
1              2         1       1  ...  71.2833   C85         C
2              3         1       3  ...   7.9250   NaN         S
3              4         1       1  ...  53.1000  C123         S
4              5         0       3  ...   8.0500   NaN         S
..           ...       ...     ...  ...      ...   ...       ...
886          887         0       2  ...  13.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
888          889         0       3  ...  23.4500   NaN         S
889          890         1       1  ...  30.0000  C148         C
890          891         0       3  ...   7.7500   NaN         Q

[891 rows x 12 columns]
****************************************
data原始信息:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
****************************************
Age填充平均值后:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          891 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB
****************************************

2.2小练习

对于常用的缺失值字段,填充的方式都有哪些?多选
A删除属性或者删除样本
B统计(均值、中位数、众数)填充
C正负无穷和0
D模型进行预测

ABCD

2数值型特征

数值型的幅度变换:

  • log变换、多项式变换
  • 幅度缩放(数据预处理):MinMaxScaler、StandardScaler
  • 统计数值:Max、Min、AVG...
  • 四则运算:+ - * /

2.1对数变换

 

import numpy as np
import pandas as pd

pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)

# 对数变换
data['log_age'] = data['Age'].apply(lambda x:np.log(x))
print(data.head())

运行结果:

data原始前10行数据:
   PassengerId  Survived  Pclass  \
0            1         0       3   
1            2         1       1   
2            3         1       3   
3            4         1       1   
4            5         0       3   
5            6         0       3   
6            7         0       1   
7            8         0       3   
8            9         1       3   
9           10         1       2   

                                                Name     Sex   Age  SibSp  \
0                            Braund, Mr. Owen Harris    male  22.0      1   
1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   
2                             Heikkinen, Miss. Laina  female  26.0      0   
3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   
4                           Allen, Mr. William Henry    male  35.0      0   
5                                   Moran, Mr. James    male   NaN      0   
6                            McCarthy, Mr. Timothy J    male  54.0      0   
7                     Palsson, Master. Gosta Leonard    male   2.0      3   
8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0   
9                Nasser, Mrs. Nicholas (Adele Achem)  female  14.0      1   

   Parch            Ticket     Fare Cabin Embarked  
0      0         A/5 21171   7.2500   NaN        S  
1      0          PC 17599  71.2833   C85        C  
2      0  STON/O2. 3101282   7.9250   NaN        S  
3      0            113803  53.1000  C123        S  
4      0            373450   8.0500   NaN        S  
5      0            330877   8.4583   NaN        Q  
6      0             17463  51.8625   E46        S  
7      1            349909  21.0750   NaN        S  
8      2            347742  11.1333   NaN        S  
9      0            237736  30.0708   NaN        C  
****************************************
log_age为对数变换后新列:
   PassengerId  Survived  Pclass  \
0            1         0       3   
1            2         1       1   
2            3         1       3   
3            4         1       1   
4            5         0       3   
5            6         0       3   
6            7         0       1   
7            8         0       3   
8            9         1       3   
9           10         1       2   

                                                Name     Sex        Age  \
0                            Braund, Mr. Owen Harris    male  22.000000   
1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.000000   
2                             Heikkinen, Miss. Laina  female  26.000000   
3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.000000   
4                           Allen, Mr. William Henry    male  35.000000   
5                                   Moran, Mr. James    male  29.699118   
6                            McCarthy, Mr. Timothy J    male  54.000000   
7                     Palsson, Master. Gosta Leonard    male   2.000000   
8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.000000   
9                Nasser, Mrs. Nicholas (Adele Achem)  female  14.000000   

   SibSp  Parch            Ticket     Fare Cabin Embarked   log_age  
0      1      0         A/5 21171   7.2500   NaN        S  3.091042  
1      1      0          PC 17599  71.2833   C85        C  3.637586  
2      0      0  STON/O2. 3101282   7.9250   NaN        S  3.258097  
3      1      0            113803  53.1000  C123        S  3.555348  
4      0      0            373450   8.0500   NaN        S  3.555348  
5      0      0            330877   8.4583   NaN        Q  3.391117  
6      0      0             17463  51.8625   E46        S  3.988984  
7      3      1            349909  21.0750   NaN        S  0.693147  
8      0      2            347742  11.1333   NaN        S  3.295837  
9      1      0            237736  30.0708   NaN        C  2.639057

2.2幅度缩放

1)MinMaxScaler()最大最小化处理,将数据缩放到[0, 1]的范围内

python 计算特征稳定性psi代码_人工智能

import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)

#将Fare列最大最小归一化
from sklearn.preprocessing import MinMaxScaler

# 实例化最大最小值归一化类
mm_scaler = MinMaxScaler()
# 将数据缩放到[0, 1]的范围内
fare_trans = mm_scaler.fit_transform(data[['Fare']])
print('将数据缩放到[0, 1]的范围内:')
print(fare_trans)

 运行结果:

data原始前10行数据:
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S
5            6         0       3  ...   8.4583   NaN         Q
6            7         0       1  ...  51.8625   E46         S
7            8         0       3  ...  21.0750   NaN         S
8            9         1       3  ...  11.1333   NaN         S
9           10         1       2  ...  30.0708   NaN         C

[10 rows x 12 columns]
****************************************
将数据缩放到[0, 1]的范围内:
[[0.01415106]
 [0.13913574]
 [0.01546857]
 [0.1036443 ]
 [0.01571255]
 [0.0165095 ]
 [0.10122886]
 [0.04113566]
 [0.02173075]
 [0.05869429]
 [0.03259623]
 [0.05182215]
 [0.01571255]
 [0.06104473]
 [0.01533038]
 [0.03122992]
 [0.05684821]
 [0.02537431]
 [0.03513366]
 [0.01410226]
 [0.05074862]
 [0.02537431]
 [0.01567195]
 [0.06929139]
 [0.04113566]
 [0.06126432]
 [0.01410226]
 [0.51334181]
 [0.01537917]
 [0.01541158]
 [0.0541074 ]
 [0.28598956]
 [0.01512699]
 [0.02049464]
 [0.16038672]
 [0.10149724]
 [0.01411046]
 [0.01571255]
 [0.03513366]
   .......
 [0.02049464]
 [0.01376068]
 [0.05684821]
 [0.02537431]
 [0.0585561 ]
 [0.04577135]
 [0.0585561 ]
 [0.01512699]]

2)标准化处理

        sklearn.preprocessing中的StandardScaler是用于标准化数据的类,它可以移除数据的均值和方差,使数据符合标准正态分布,即均值为0,方差为1

        标准化转换的公式是:X_std = (X - X.mean()) / X.std(),其中X是原始数据,X_std是转换后的数据。

python 计算特征稳定性psi代码_机器学习_02

标准化的作用包括:

  • 不同特征量级不同,标准化可以把所有特征变换到同一量级下
  • 许多算法需要标准正态分布的数据,这时标准化是必要的预处理步骤

标准化不会改变数据分布的形状,这与归一化(MinMaxScaler)不同。

所以,如果数据本身符合正态分布,使用StandardScaler进行标准化,如果数据分布不均匀,使用MinMaxScaler归一化,使之在[0,1]区间。

import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'C:\Users\Administrator\Desktop\好课优选python\数据分析班_兮云\数据分析15期\17-特征工程\train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)

# 标准化处理
from sklearn.preprocessing import StandardScaler

#将fare列标准化
fare_std = StandardScaler()
# fit_transform方法:
# fit:计算数据的均值和方差,获得数据的转换参数。
# transform:使用fit获得的参数对数据进行标准化转换。
fare_std_trans = fare_std.fit_transform(data[['Fare']])
print('Fare列标准化后的数据:')
print(fare_std_trans)

运行结果:

data原始前10行数据:
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S
5            6         0       3  ...   8.4583   NaN         Q
6            7         0       1  ...  51.8625   E46         S
7            8         0       3  ...  21.0750   NaN         S
8            9         1       3  ...  11.1333   NaN         S
9           10         1       2  ...  30.0708   NaN         C

[10 rows x 12 columns]
****************************************
Fare列标准化后的数据:
[[-5.02445171e-01]
 [ 7.86845294e-01]
 [-4.88854258e-01]
 [ 4.20730236e-01]
 [-4.86337422e-01]
      ......
 [-3.86670720e-01]
 [-4.43810379e-02]
 [-1.76263239e-01]
 [-4.43810379e-02]
 [-4.92377828e-01]]

2.3统计数值:描述统计分析

import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)

# 最大最小值,在电商里经常用到
max_age = data['Age'].max( )
print('age列最大值:')
print(max_age)
print('*'*40)

min_age = data['Age'].min()
print('age列最小值:')
print(min_age)
print('*'*40)
# 分位数
# 1/4分位数
print('age 1/4分位数:')
age_quarter_1 = data['Age'].quantile(0.25)
print(age_quarter_1)
print('*'*40)
# 3/4分位数
print('age 3/4分位数:')
age_quarter_3 = data['Age'].quantile(0.75)
print(age_quarter_3)

运行结果:

data原始前10行数据:
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S
5            6         0       3  ...   8.4583   NaN         Q
6            7         0       1  ...  51.8625   E46         S
7            8         0       3  ...  21.0750   NaN         S
8            9         1       3  ...  11.1333   NaN         S
9           10         1       2  ...  30.0708   NaN         C

[10 rows x 12 columns]
****************************************
age列最大值:
80.0
****************************************
age列最小值:
0.42
****************************************
age 1/4分位数:
20.125
****************************************
age 3/4分位数:
38.0

课堂练习
对于数值的幅度变换,以下哪些不是()
A log对数
B 多项式变换
C 最大最小归一化
D 独热编码/哑变量

D是对字符类型的数据处理

计算家庭总人数

import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'C:\Users\Administrator\Desktop\好课优选python\数据分析班_兮云\数据分析15期\17-特征工程\train.csv')
print('data原始前10行数据:')
print(data.head(10))
print('*'*40)

# 计算家庭总人数
# SibSp:在船兄弟姐妹数/配偶数
# Parch:在船父母数/子女数
data.loc[:,'family_size'] = data['SibSp']+data['Parch' ]+1
print('family_size为家庭总人数:')
print(data.head())

运行结果:

data原始前10行数据:
   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S
5            6         0       3  ...   8.4583   NaN         Q
6            7         0       1  ...  51.8625   E46         S
7            8         0       3  ...  21.0750   NaN         S
8            9         1       3  ...  11.1333   NaN         S
9           10         1       2  ...  30.0708   NaN         C

[10 rows x 12 columns]
****************************************
family_size为家庭总人数:
   PassengerId  Survived  Pclass  ... Cabin Embarked  family_size
0            1         0       3  ...   NaN        S            2
1            2         1       1  ...   C85        C            2
2            3         1       3  ...   NaN        S            1
3            4         1       1  ...  C123        S            2
4            5         0       3  ...   NaN        S            1

2.4高次特征与交叉特征

preprocessing.PolynomialFeatures
是什么:

        PolynomialFeatures变换用于在机器学习中创建多项式特征,它的主要目的是扩展特征空间,使模型能够更好地拟合非线性关系。这种变换通常用于线性回归、逻辑回归、支持向量机(SVM)等模型,特别是当原始特征与目标之间存在复杂的非线性关系时,多项式特征变换可以提高模型的性能。

怎么用:

        对于给定的输入特征,例如一个特征向量[x1, x2,x3],PolynomialFeatures将其转换为多项式的形式,包括原始特征的各种幂和交叉项。例如,对于二次多项式,它会生成[x1,x2, x3, x1^2, x2^2, x3^2, x1x2, x1x3, x2x3]。

什么时候用:

1.非线性关系: 当你有理由相信目标变量与特征之间存在非线性关系时,多项式特征变换可以用来更好地捕捉这些非线性关系。
2.特定特征之间的交互效应:如果你怀疑某些特征之间的交互效应对目标变量有影响,你可以使用多项式特征变换来引入这些交互项,以改善模型性能。
3.特征工程: 在一些情况下,多项式特征变换是特征工程的一部分,用于改进模型的性能。
4.高次特征: 如果你认为某些特征具有高次项的影响,例如 x^2,x^3,等等,你可以使用多项式特征变换来引入这些高次项,以更好地描述数据的复杂性。
5.用于支持向量机(SVM):在支持向量机中,多项式特征变换可以将数据映射到高维空间,从而使支持向量机能够更好地分隔不同类别的数据。

2.4.1高次特征

import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'train.csv')

# 高次特征
from sklearn.preprocessing import PolynomialFeatures

# degree=2表示最高2次幂
poly = PolynomialFeatures(degree=2)
print('SibSp和Parch列的值:')
print(data[['SibSp','Parch']].head())
print('*'*40)
print('SibSp和Parch列的值做2次幂高次特征:')
#SibSp和Parch这两列的值的高次特征:1 SibSp^1 Parch^1 SibSp^2 SibSp*Parch Parch^2
poly_fea = poly.fit_transform(data[['SibSp','Parch']])
print(poly_fea)
print('*'*40)
#意思是:1 SibSp^1 Parch^1 SibSp^2 SibSp*Parch Parch^2
print('SibSp和Parch做2次幂高次特征:')
print(poly.get_feature_names_out(input_features=['SibSp','Parch']))

运行结果:

SibSp和Parch列的值:
   SibSp  Parch
0      1      0
1      1      0
2      0      0
3      1      0
4      0      0
****************************************
SibSp和Parch列的值做2次幂高次特征:
[[1. 1. 0. 1. 0. 0.]
 [1. 1. 0. 1. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 ...
 [1. 1. 2. 1. 2. 4.]
 [1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]]
****************************************
SibSp和Parch做2次幂高次特征:
['1' 'SibSp' 'Parch' 'SibSp^2' 'SibSp Parch' 'Parch^2']

离散化

import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'train.csv')


# 离散化
data.loc[:,'fare_cut'] = pd.cut(data['Fare'],5)
print(data.head())
print(data['fare_cut'].unique())

运行结果:

PassengerId  Survived  Pclass  ... Cabin Embarked           fare_cut
0            1         0       3  ...   NaN        S  (-0.512, 102.466]
1            2         1       1  ...   C85        C  (-0.512, 102.466]
2            3         1       3  ...   NaN        S  (-0.512, 102.466]
3            4         1       1  ...  C123        S  (-0.512, 102.466]
4            5         0       3  ...   NaN        S  (-0.512, 102.466]

[5 rows x 13 columns]
[(-0.512, 102.466], (204.932, 307.398], (102.466, 204.932], (409.863, 512.329]]
Categories (5, interval[float64, right]): [(-0.512, 102.466] < (102.466, 204.932] <
                                           (204.932, 307.398] < (307.398, 409.863] <
                                           (409.863, 512.329]]

3.字符型特征

类别型:

  • pandas get_dummies/哑变量
  • OneHotEncoder()/独热向量编码
  • LabelEncoder()/标签编码

3.1哑变量

独热编码/哑变量差不多

get_dummies()是pandas库中的一个函数,用于将分类变量转换为虚拟变量(哑变量)的形式。它将分类变量的每个不同取值创建一个新的二进制列,并为每个样本指示其所属的类别。

"""
pandas.get_dummies(data,
columns=None,
prefix=None, 
prefix_sep='_', 
drop_first=False,
dummy_na=False,
sparse=False,
dtype=None)
参数说明:
data: 要进行虚拟编码的数据,可以是一个DataFrame 或Series。
columns (可选):一个用于指定要编码的列名的列表。如果不指定,函数将
尝试对数据中的所有非数值列进行编码。
prefix (可选):一个字符串或字符串列表,用于指定生成的虚拟列的前缀。
如果提供了多个前缀,它们将与列名一一对应。默认情况下,生成的虚拟列
的名称将与原始分类值相同。
prefix_sep (可选):用于分隔前缀和列名的字符串。默认为下划线“_”。
drop_first(可选):如果设置为True,则将删除每个虚拟列中的第一个级
别,以避免多重共线性。默认为False。
dummy_na (可选):如果设置为 True,将为缺失值创建虚拟列,表示原始
列中的缺失值。默认为False。
sparse (可选): 如果设置为 True,则生成稀疏矩阵,否则生成密集矩阵。
稀疏矩阵在具有大量零值的情况下可以节省内存。默认为False。
dtype(可选):用于指定生成虚拟列的数据类型。默认为None,会自动根据
数据类型选择。
"""
import pandas as pd

# pd.set_option('display.max_columns', None)   #显示完整的列
data = pd.read_csv(r'train.csv')


# 哑变量
print('Embarked列的数据:')
print(data['Embarked'])
print('*'*30)
# 有多少唯一值就生成多少列,为True就表示是原来的值
embark_out = pd.get_dummies(data['Embarked'],prefix='Embarked')
print(embark_out)
print('*'*30)

运行结果:

Embarked列的数据:
0      S
1      C
2      S
3      S
4      S
      ..
886    S
887    S
888    S
889    C
890    Q
Name: Embarked, Length: 891, dtype: object
******************************
     Embarked_C  Embarked_Q  Embarked_S
0         False       False        True
1          True       False       False
2         False       False        True
3         False       False        True
4         False       False        True
..          ...         ...         ...
886       False       False        True
887       False       False        True
888       False       False        True
889        True       False       False
890       False        True       False

[891 rows x 3 columns]
******************************

特征提取文本信息

CountVectorizer是用于将文本数据转换为词频矩阵的类。它将文本数据作为输入,将每个文本转换为一个向量,其中每个元素表示一个词汇的出现次数。

# 特征提取文本信息
from sklearn.feature_extraction.text import CountVectorizer

data = ["Life is too short to spend time with people who suck the happiness out of you",
        " If someone wants you in their life,they’ll make room for you"]

transfer = CountVectorizer(stop_words=['just'])

"""
通过调用fit_transform()方法,CountVectorizer将计算每个文本中每个词汇的出现次数,
并返回一个稀疏矩阵new_data,其中每行表示一个文本样本,每列表示一个词汇。
"""
new_data = transfer.fit_transform(data)
print('列表中的两句话,对应下面的names中单词出现的次数:')
print(new_data.toarray())

names = transfer.get_feature_names_out()
print('单词名:')
print(names)

运行结果:

列表中的两句话,对应下面的names中单词出现的次数:
[[0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 1 1]
 [1 0 1 1 0 1 1 1 0 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 0 2]]
单词名:
['for' 'happiness' 'if' 'in' 'is' 'life' 'll' 'make' 'of' 'out' 'people'
 'room' 'short' 'someone' 'spend' 'suck' 'the' 'their' 'they' 'time' 'to'
 'too' 'wants' 'who' 'with' 'you']

这样,每个文本被转换为了一个向量,其中每个元素表示对应词汇的出现次数。特征名称列表显示了所有提取的词汇。

3.2标签编码

比如性别:男、女,将男变为1,将女变为2

后续持续学习更新