python常见的数据预处理的方法preprocessing模块

利用python进行常见的数据预处理,主要是通过sklearn的preprocessing模块以及自写的方法来简单介绍下:

加载包及导入数据
# -*- coding:utf-8 -*-
import math
import numpy as np
from sklearn import datasets
from sklearn import preprocessing

iris = datasets.load_iris()
iris_X = iris.data[:4]
iris_y = iris.target[:4]
z-score标准化方法,均值为0,方差为1
# 方法1.sklearn下方法多列处理
def scale_encoder(iris_X):
    X = preprocessing.scale(iris_X)
    print(X[:4],'\n',np.mean(X),np.std(X))
    return X
f1 = scale_encoder(iris_X)
# 方法2.单列处理
def zscore_encoder(colvalue):
    average = float(sum(colvalue)) / len(colvalue)
    X = [(x - average) / np.std(colvalue) for x in colvalue]
    print(X[:4],'\n',np.mean(X),np.std(X))
    return X
f2 = zscore_encoder(iris_X[:,0])

在这里插入图片描述

min-max标准化(Min-Max Normalization)
# 方法1:处理多列
def min_max_scaler(iris_X):
    min_max_scaler = preprocessing.MinMaxScaler()
    X2 = min_max_scaler.fit_transform(iris_X)
    return X2
min_max_scaler(iris_X)
# 方法2:处理单列
def min_max_encoder(colvalue):
    new_value = [(x - min(colvalue))/(max(colvalue) - min(colvalue)) for x in colvalue]
    return new_value
min_max_encoder(iris_X[:,0])

在这里插入图片描述

规范化(Normalization),其中L2 norm:平方和为1;L1 norm:绝对值和为1
def normalize_encoder(iris_X):
    X3 = preprocessing.normalize(iris_X, norm='l2')
    X4 = preprocessing.normalize(iris_X, norm='l1')
    return X3
normalize_encoder(iris_X)

在这里插入图片描述

均值归一化方法[-1,1]
def average_max_min(data):
    average = float(sum(data)) / len(data)
    new_value = [(x - average) / (max(data) - min(data)) for x in data]
    return new_value
average_max_min(iris_X[:,0])

在这里插入图片描述

特征二值化(Binarization),以某个阈值作为分割点进行切分数据
def binary_encoder(iris_X):
    binarizer = preprocessing.Binarizer(threshold=2)	#本例以阈值2为例
    X5 = binarizer.transform(iris_X)
    return X5
binary_encoder(iris_X)

在这里插入图片描述

标签二值化(Label binarization)
def label_encoder(iris_y):
    lb = preprocessing.LabelBinarizer()
    y2 = lb.fit_transform(iris_y)
    return y2
label_encoder(iris_y)

在这里插入图片描述

数值或字符标签化
def label_encoder(data):
    le = preprocessing.LabelEncoder()
    le.fit(data)
    t = le.transform(data)
    return t
label_encoder(iris_X[:,0])

在这里插入图片描述

独热编码
def onehot_encoder(data):
    enc = preprocessing.OneHotEncoder(sparse = False,categories='auto')
    t = enc.fit_transform(data)
    return t
onehot_encoder(iris_X)

在这里插入图片描述

对数变换
def log_encoder(col,logn):
    if logn == 2:
        new_value = [math.log2(x) for x in col]
    elif logn == 10:
        new_value = [math.log10(x) for x in col]
    else:
        print('暂不支持')
    return new_value
log_encoder(iris_X[:,0],logn=10)

在这里插入图片描述

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Spark是一个用于大规模数据处理的开源分布式计算框架,它提供了丰富的API和工具来进行数据预处理。下面是Python Spark数据预处理的一般步骤: 1. 导入必要的库和模块: ``` from pyspark.sql import SparkSession from pyspark.sql.functions import col, when, count, isnull ``` 2. 创建SparkSession对象: ``` spark = SparkSession.builder.appName("DataPreprocessing").getOrCreate() ``` 3. 读取数据: ``` data = spark.read.csv("path/to/data.csv", header=True, inferSchema=True) ``` 4. 数据探索和清洗: - 查看数据的前几行: ``` data.show() ``` - 查看数据的列名和数据类型: ``` data.printSchema() ``` - 统计缺失值数量: ``` data.select([count(when(isnull(c), c)).alias(c) for c in data.columns]).show() ``` - 处理缺失值: ``` data = data.fillna(0) # 填充缺失值为0 ``` - 数据类型转换: ``` data = data.withColumn("age", col("age").cast("integer")) # 将age列转换为整数类型 ``` 5. 特征工程: - 特征选择: ``` selected_features = ["age", "gender", "income"] data = data.select(selected_features) ``` - 特征缩放: ``` from pyspark.ml.feature import MinMaxScaler scaler = MinMaxScaler(inputCol="age", outputCol="scaled_age") data = scaler.fit(data).transform(data) ``` - 特征编码: ``` from pyspark.ml.feature import StringIndexer, OneHotEncoder indexer = StringIndexer(inputCol="gender", outputCol="gender_indexed") data = indexer.fit(data).transform(data) encoder = OneHotEncoder(inputCol="gender_indexed", outputCol="gender_encoded") data = encoder.transform(data) ``` 6. 数据转换和准备: - 将数据转换为适合机器学习算法的格式: ``` from pyspark.ml.feature import VectorAssembler assembler = VectorAssembler(inputCols=["scaled_age", "gender_encoded", "income"], outputCol="features") data = assembler.transform(data) ``` - 划分训练集和测试集: ``` train_data, test_data = data.randomSplit([0.7, 0.3], seed=123) ``` 7. 数据预处理完成后,可以将数据用于机器学习模型的训练和评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值