IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> pandas数据预处理(标准化&归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样) -> 正文阅读

[人工智能]pandas数据预处理(标准化&归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样)

1. 数值型数据的处理

1.1 标准化&归一化

????????数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模、特征、分布差异等对模型的影响。

示例代码:

import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
data = np.loadtxt('../data/excel_data/data6.txt', delimiter='\t')  # 读取数据
data

# Z-Score标准化
zscore_scaler = preprocessing.StandardScaler()  # 建立StandardScaler对象
data_scale_1 = zscore_scaler.fit_transform(data)  # StandardScaler标准化处理
data_scale_1

#  归一化Max-Min
minmax_scaler = preprocessing.MinMaxScaler()  # 建立MinMaxScaler模型对象
data_scale_2 = minmax_scaler.fit_transform(data)  # MinMaxScaler标准化处理
data_scale_2

#  展示多网络结果
data_list = [data, data_scale_1, data_scale_2]  #  创建数据集列表
color_list = ['black', 'green', 'blue']  #  创建颜色列表
merker_list = ['o', ',','+']  #  创建样式列表
title_list = ['source data', 'zscore_scaler', 'minmax_scaler']  # 创建标题列表
plt.figure(figsize=(13, 3))
for i, data_single in enumerate(data_list):  #  循环得到索引和每个数值
    plt.subplot(1, 3, i + 1)  #  确定子网格
    plt.scatter(data_single[:, :-1], data_single[:, -1], s=10, marker=merker_list[i], c=color_list[i]) #  子网格展示散点图
    plt.title(title_list[i])  # 设置子网格标题
    
plt.suptitle("raw data and standardized data")  # 设置总标题   

1.2. 离散化/分箱/分桶

import pandas as pd
from sklearn.cluster import KMeans
from sklearn import preprocessing
# 读取数据
df = pd.read_table('../data/excel_data/data7.txt', names=['id', 'amount', 'income', 'datetime', 'age'])  # 读取数据文件
df.head(5)  # 打印输出前5条数据

# 针对时间数据的离散化
df['datetime'] = list(map(pd.to_datetime,df['datetime'])) # 将时间转换为datetime格式
df['datetime'] = [i.weekday() for i in df['datetime']]# 离散化为周几
df.head(5)  # 打印输出前5条数据

#  针对连续数据的离散化:自定义分箱区间实现离散化
bins = [0, 200, 1000, 5000, 10000]  # 自定义区间边界
df['amount1'] = pd.cut(df['amount'], bins)  # 使用边界做离散化
df.head(5)  # 打印输出前5条数据

#  针对连续数据的离散化:使用聚类法实现离散化
data = df['amount']  # 获取要聚类的数据,名为amount的列
data_reshape = data.values.reshape((data.shape[0], 1))  # 转换数据形状
model_kmeans = KMeans(n_clusters=4, random_state=0)  # 创建KMeans模型并指定要聚类数量
keames_result = model_kmeans.fit_predict(data_reshape)  # 建模聚类
df['amount2'] = keames_result  # 新离散化的数据合并到原数据框
df.head(5)  # 打印输出前5条数据

#  针对连续数据的离散化
df['amount3'] = pd.qcut(df['amount'], 4, labels=['bad', 'medium', 'good', 'awesome']) 
df = df.drop('amount', 1)  # 丢弃名为amount的列
df.head(5)  # 打印输出前5条数据

#  针对连续数据的二值化
binarizer_scaler = preprocessing.Binarizer(threshold=df['income'].mean())  # 建立Binarizer模型对象
income_tmp = binarizer_scaler.fit_transform(df[['income']])  # Binarizer标准化转换
income_tmp.resize(df['income'].shape)  # 转换数据形状
df['income'] = income_tmp  # Binarizer标准化转换
df.head(5)  # 打印输出前5条数据  

2. 分类数据的处理

举例:

  • 性别中的男和女 [0,1] [1,0]
  • 颜色中的红、黄和蓝
  • 用户的价值度分为高、中、低
  • 学历分为博士、硕士、学士、大专、高中

处理方法:

  • 将字符串表示的分类特征转换成数值类型,一般用one-hot编码表示,方便建模处理

示例代码:

import pandas as pd  # 导入pandas库
from sklearn.preprocessing import OneHotEncoder  # 导入库
# 生成数据
df = pd.DataFrame({'id': [3566841, 6541227, 3512441],
                   'sex': ['male', 'Female', 'Female'],
                   'level': ['high', 'low', 'middle'],
                   'score': [1, 2, 3]})
df  # 打印输出原始数据框

# 使用sklearn进行标志转换
# 拆分ID和数据列
id_data = df[['id']]  # 获得ID列
raw_convert_data = df.iloc[:, 1:]  # 指定要转换的列
raw_convert_data

# 将数值型分类向量转换为标志变量
model_enc = OneHotEncoder()  # 建立标志转换模型对象(也称为哑编码对象)
df_new2 = model_enc.fit_transform(raw_convert_data).toarray()  # 标志转换
df_new2

# 合并数据
df_all = pd.concat((id_data, pd.DataFrame(df_new2)), axis=1)  # 重新组合为数据框
df_all  # 打印输出转换后的数据框

#  使用pandas的get_dummuies ,此方法只会对非数值类型的数据做转换
df_new3 = pd.get_dummies(raw_convert_data)
df_all2 = pd.concat((id_data, df_new3), axis=1)  # 重新组合为数据框
df_all2  # 打印输出转换后的数据框

?3. 时间类型数据的处理

????????数据中包含日期时间类型的数据可以通过pandas的 to_datetime 转换成datetime类型,方便提取各种时间信息。

示例代码:

import pandas as pd
car_sales = pd.read_csv('../data/excel_data/car_data.csv')
car_sales.head()

car_sales.loc[:,'date'] = pd.to_datetime(car_sales['date_t'])
car_sales

?

#  取出关键时间信息
# 取出几月份
car_sales.loc[:,'month'] = car_sales['date'].dt.month
# 取出来是几号
car_sales.loc[:,'dom'] = car_sales['date'].dt.day
# 取出一年当中的第几天
car_sales.loc[:,'doy'] = car_sales['date'].dt.dayofyear
# 取出星期几
car_sales.loc[:,'dow'] = car_sales['date'].dt.dayofweek
car_sales.head()

4.? 样本类别分布不均衡数据处理

示例代码:

import pandas as pd
from imblearn.over_sampling import SMOTE  # 过抽样处理库SMOTE
from imblearn.under_sampling import RandomUnderSampler  # 欠抽样处理库RandomUnderSampler

# 导入数据文件
df = pd.read_table('../data/excel_data/data2.txt', sep='\t', names=['col1', 'col2', 'col3', 'col4', 'col5', 'label'])  # 读取数据文件
x, y = df.iloc[:, :-1],df.iloc[:, -1]  # 切片,得到输入x,标签y
groupby_data_orgianl = df.groupby('label').count()  # 对label做分类汇总
groupby_data_orgianl  # 打印输出原始数据集样本分类分布

# 使用SMOTE方法进行过抽样处理
model_smote = SMOTE()  # 建立SMOTE模型对象
x_smote_resampled, y_smote_resampled = model_smote.fit_resample(x, y)  # 输入数据并作过抽样处理
x_smote_resampled = pd.DataFrame(x_smote_resampled, columns=['col1', 'col2', 'col3', 'col4', 'col5'])  # 将数据转换为数据框并命名列名
y_smote_resampled = pd.DataFrame(y_smote_resampled, columns=['label'])  # 将数据转换为数据框并命名列名
smote_resampled = pd.concat([x_smote_resampled, y_smote_resampled], axis=1)  # 按列合并数据框
groupby_data_smote = smote_resampled.groupby('label').count()  # 对label做分类汇总
groupby_data_smote  # 打印输出经过SMOTE处理后的数据集样本分类分布

# 使用RandomUnderSampler方法进行欠抽样处理
model_RandomUnderSampler = RandomUnderSampler()  # 建立RandomUnderSampler模型对象
x_RandomUnderSampler_resampled, y_RandomUnderSampler_resampled = model_RandomUnderSampler.fit_resample(x, y)  # 输入数据并作欠抽样处理
x_RandomUnderSampler_resampled = pd.DataFrame(x_RandomUnderSampler_resampled,
                                              columns=['col1', 'col2', 'col3', 'col4', 'col5'])  # 将数据转换为数据框并命名列名
y_RandomUnderSampler_resampled = pd.DataFrame(y_RandomUnderSampler_resampled,
                                              columns=['label'])  # 将数据转换为数据框并命名列名
RandomUnderSampler_resampled = pd.concat([x_RandomUnderSampler_resampled, y_RandomUnderSampler_resampled],axis=1)  # 按列合并数据框
groupby_data_RandomUnderSampler = RandomUnderSampler_resampled.groupby('label').count()  # 对label做分类汇总
groupby_data_RandomUnderSampler  # 打印输出经过RandomUnderSampler处理后的数据集样本分类分布

5.? 数据抽样

示例代码:

import random  # 导入标准库
import numpy as np  # 导入第三方库

data = np.loadtxt('../data/excel_data/data3.txt')  # 导入普通数据文件
shuffle_index = np.random.choice(np.arange(data.shape[0]),2000,True)#随机生成200个行号
data_sample = data[shuffle_index] #从原始数据中取出200个行号对应的数据

print(len(data_sample))  # 打印输出抽样样本量
data_sample[:2]  # 打印输出前2条数据

# 等距抽样
data = np.loadtxt('../data/excel_data/data3.txt')  # 导入普通数据文件
sample_count = 2000  # 指定抽样数量
record_count = data.shape[0]  # 获取最大样本量
width = record_count / sample_count  # 计算抽样间距
data_sample = []  # 初始化空白列表,用来存放抽样结果数据
i = 0  # 自增计数以得到对应索引值
while len(data_sample) <= sample_count and i * width <= record_count - 1:  # 当样本量小于等于指定抽样数量并且矩阵索引在有效范围内时
    data_sample.append(data[int(i * width)])  # 新增样本
    i += 1  # 自增长

print(len(data_sample))  # 打印输出样本数量
data_sample[:2]  # 打印输出前2条数据

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:05:23  更:2022-01-03 16:05:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 22:38:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码