人工智能常见的数据处理方法
在人工智能的数据处理中,常见的数据类型包括结构化数据(表格数据)、非结构化数据(文本、图像、音频)、时间序列数据等。以下是不同数据类型的典型处理任务、常用库及案例函数 / 方法:
一、结构化数据处理
1. 数据清洗
- 任务:处理缺失值、异常值、重复数据、格式转换
- 常用库:
pandas
、scikit-learn
- 案例函数 / 方法:
- 缺失值处理:
import pandas as pd df.dropna() # 删除含缺失值的行(axis=0)或列(axis=1) df.fillna(df.mean()) # 用均值填充数值型缺失值 from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='median') # 中位数填充(适用于偏态数据)
- 异常值处理(以 Z-score 法为例):
z_scores = (df['column'] - df['column'].mean()) / df['column'].std() df_clean = df[np.abs(z_scores) < 3] # 保留Z-score在(-3, 3)内的数据
- 重复数据处理:
df = df.drop_duplicates() # 删除完全重复的行 df = df.drop_duplicates(subset=['id']) # 按指定列去重
- 缺失值处理:
2. 数据转换
- 任务:类别变量编码、标准化、归一化
- 案例函数 / 方法:
- 类别编码:
pd.get_dummies(df['category']) # 独热编码(One-Hot Encoding) from sklearn.preprocessing import LabelEncoder le = LabelEncoder() # 标签编码(适用于有序类别) df['encoded'] = le.fit_transform(df['category'])
- 标准化与归一化:
from sklearn.preprocessing import StandardScaler, MinMaxScaler scaler = StandardScaler() # 标准化(均值为0,方差为1) normalized_data = MinMaxScaler(feature_range=(0, 1)).fit_transform(df) # 归一化到[0,1]
- 类别编码:
3. 特征工程
- 任务:特征选择、特征生成、降维
- 案例函数 / 方法:
- 特征选择:
from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold=0.1) # 删除方差低于阈值的特征 from sklearn.feature_selection import SelectKBest, f_classif X_selected = SelectKBest(score_func=f_classif, k=10).fit_transform(X, y) # 保留Top-10特征
- 降维:
from sklearn.decomposition import PCA pca = PCA(n_components=0.95) # 保留95%方差的主成分 X_pca = pca.fit_transform(X)
- 特征选择:
二、文本数据处理
1. 基础清洗与预处理
- 任务:分词、停用词去除、词形还原、大小写统一
- 常用库:
nltk
、spaCy
、jieba
(中文) - 案例函数 / 方法:
- 英文处理:
import nltk nltk.download('stopwords') from nltk.tokenize import word_tokenize from nltk.stem import PorterStemmer stopwords = set(nltk.corpus.stopwords.words('english')) tokens = [word.lower() for word in word_tokenize(text) if word.lower() not in stopwords] # 分词+去停用词+小写 stemmer = PorterStemmer() stemmed_tokens = [stemmer.stem(token) for token in tokens] # 词干提取
- 中文处理:
import jieba tokens = jieba.lcut(text) # 中文分词
- 英文处理:
2. 向量化
- 任务:将文本转换为数值特征(词袋、TF-IDF、嵌入向量)
- 案例函数 / 方法:
- 词袋模型与 TF-IDF:
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer vectorizer = TfidfVectorizer(max_features=5000) # 生成TF-IDF矩阵,保留前5000个高频词 X_tfidf = vectorizer.fit_transform(corpus)
- 预训练词向量:
from gensim.models import Word2Vec model = Word2Vec(sentences=tokenized_corpus, vector_size=100, window=5) # 训练Word2Vec模型 word_embedding = model.wv['example'] # 获取单词的嵌入向量
- 词袋模型与 TF-IDF:
3. 高级处理(如 NER、文本生成)
- 任务:命名实体识别、文本生成数据增强
- 案例工具:
- NER:
spaCy
(nlp = spacy.load("en_core_web_sm"); doc = nlp(text); entities = [(ent.text, ent.label_) for ent in doc.ents]
) - 数据增强:同义词替换(如
nlpaug
库):import nlpaug.augmenter.word as naw aug = naw.SynonymAug(aug_src='wordnet') # 基于WordNet的同义词替换 augmented_text = aug.augment(text)
- NER:
三、图像数据处理
1. 基础预处理
- 任务:读取图像、调整尺寸、灰度转换、数据增强
- 常用库:
OpenCV
、Pillow
、TensorFlow
- 案例函数 / 方法:
- 读取与尺寸调整:
import cv2 image = cv2.imread('image.jpg') # 读取BGR格式图像 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 转换为RGB(适用于Pytorch/TensorFlow) resized_image = cv2.resize(image, (224, 224)) # 调整尺寸为224x224
- 数据增强(训练集常用):
from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator(rotation_range=20, # 随机旋转20度width_shift_range=0.2, # 水平平移shear_range=0.2, # 剪切变换 ) augmented_images = datagen.flow(X_train, y_train, batch_size=32)
- 读取与尺寸调整:
2. 特征提取
- 任务:手动特征(如 HOG)、深度学习特征(预训练模型)
- 案例方法:
- HOG 特征:
from skimage.feature import hog hog_features = hog(image, orientations=8, pixels_per_cell=(16, 16))
- 预训练模型提取特征:
from tensorflow.keras.applications import ResNet50 model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) features = model.predict(resized_image[np.newaxis, ...])
- HOG 特征:
四、时间序列数据处理
1. 时间戳处理
- 任务:解析时间格式、生成时间特征(年 / 月 / 日、星期、时间间隔)
- 案例函数 / 方法:
import pandas as pd df['timestamp'] = pd.to_datetime(df['timestamp']) # 转换为datetime类型 df['year'] = df['timestamp'].dt.year # 提取年份 df['hour'] = df['timestamp'].dt.hour # 提取小时
2. 序列特征工程
- 任务:滑动窗口、差分、频率域转换
- 案例方法:
- 滑动窗口统计:
df['rolling_mean_7d'] = df['value'].rolling(window=7).mean() # 7天滚动均值 df['rolling_std_7d'] = df['value'].rolling(window=7).std() # 7天滚动标准差
- 傅里叶变换(提取频率特征):
import numpy as np fft = np.fft.fft(df['value'].values) freq_features = np.abs(fft)[:len(fft)//2] # 取前半段频率分量
- 滑动窗口统计:
3. 缺失值处理(时序特化)
- 任务:时间序列插值(线性、三次样条)
- 案例方法:
df['value'] = df['value'].interpolate(method='linear') # 线性插值 df['value'] = df['value'].interpolate(method='spline', order=3) # 三次样条插值
五、通用数据处理工具与流程
1. 数据加载与保存
- 结构化数据:
pd.read_csv()
/pd.to_csv()
,pd.read_excel()
/pd.to_excel()
- 图像数据:
cv2.imread()
/cv2.imwrite()
,PIL.Image.open()
- 文本数据:Python 内置
open()
函数,pd.read_json()
(JSON 格式文本)
2. 数据分桶与离散化
- 任务:将连续数据转换为类别(如年龄分桶)
- 案例方法:
df['age_bucket'] = pd.cut(df['age'], bins=[0, 18, 30, 50, 100], labels=['儿童', '青年', '中年', '老年'])
3. 数据平衡(处理类别不平衡)
- 任务:过采样(SMOTE)、欠采样(随机欠采样)
- 案例方法:
from imblearn.over_sampling import SMOTE X_resampled, y_resampled = SMOTE().fit_resample(X, y) # 过采样少数类 from imblearn.under_sampling import RandomUnderSampler X_resampled, y_resampled = RandomUnderSampler().fit_resample(X, y) # 欠采样多数类
六、总结:数据处理核心流程
- 数据加载:根据格式选择工具(Pandas、OpenCV、NLTK 等)。
- 数据清洗:处理缺失 / 异常 / 重复数据,统一格式(如时间戳、数值类型)。
- 数据转换:
- 结构化数据:类别编码、标准化、归一化。
- 非结构化数据:文本向量化、图像尺寸调整 / 增强、音频 MFCC 特征提取。
- 特征工程:生成新特征(如时间序列的滚动统计)、降维(PCA、t-SNE)。
- 数据保存:输出为模型输入格式(如 Numpy 数组、TFRecord、PyTorch 张量)。
通过上述方法,可将原始数据转换为适合机器学习模型输入的高质量特征,显著提升模型性能。针对具体场景(如自然语言处理、计算机视觉、时序预测),需结合领域知识选择最适配的工具和方法。
更多详细的内容可参考菜鸟教程👇欢迎交流学习
Pandas 数据清洗 | 菜鸟教程