一、数据清洗
1、数据采集:
import os
# 想要更改图片所在的根目录
rootdir = "D:/data/植物"
# 获取目录下文件名清单
files = os.listdir(rootdir)
print(files)
# 对文件名清单里的每一个文件名进行处理
for filename in files:
# portion为名称和后缀分离后的列表
portion = os.path.splitext(filename)
#os.path.splitext()将文件名和扩展名分开
if portion[1] == ".png": # 如果为tiff则更改名字
newname = portion[0] + ".jpg" # 要改的新后缀
print(filename) # 打印出要更改的文件名
os.chdir(rootdir) # 修改工作路径
os.rename(filename, newname) # 重新命名
2、修改数据名称
import os
# 函数功能:批量修改文件夹路径下所有文件的文件名
def change_file_name(dir_path):
# 读取文件夹路径下的所有文件名
files = os.listdir(dir_path)
for i in files:
# 设置旧文件名(完整路径+文件名)
oldname = os.path.join(dir_path, i)
newname = os.path.join(dir_path, '15' + i)
# 使用os模块中的rename方法对文件进行重命名操作
os.rename(oldname, newname)
print(oldname, '======>', newname)
# 如果当前运行的是主程序,则执行change_file_name函数
if __name__ == '__main__':
change_file_name('D:\\data\\植物')
3、批量修改图像尺寸,注意文件路径,不要多或者少“/”,不然会报错
import cv2
import os
# os.mkdir(r"data_plus") #创建新文件夹
path = 'D:\\data\\植物' #原图像路径
save_path = 'data_plus/' # 修改后的图像路径
files = os.listdir(path)
for file in files:
img = cv2.imread(path + "/" + file)
# img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 转化为灰度图
try:
img = cv2.resize(img,(640,640))
cv2.imwrite(save_path+"/"+str(file),img)
except:
continue
批量修改图像尺寸
注意文件路径,不要多或者少“/”,不然会报错
4、保存
import cv2
import os
# os.mkdir(r"data_plus") #创建新文件夹
path = r'D:\university\DATA\JPEGImage' # 原图像路径
save_path = 'data_plus/' # 修改后的图像路径
files = os.listdir(path)
for file in files:
img = cv2.imread(path + "/" + file)
# img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 转化为灰度图
try:
img = cv2.resize(img, (640, 640))
cv2.imwrite(save_path + "/" + str(file), img)
except:
(1)处理缺失值:
删除缺失值: 如果缺失值占比较小,并且对整体数据影响有限,可以考虑直接删除包含缺失值的行或列。
import pandas as pd
# 删除包含缺失值的行
df.dropna(inplace=True)
#
# 使用均值填充缺失值
df['column_name'].fillna(df['column_name'].mean(), inplace=True)
插值填充: 使用插值方法填充缺失值,例如使用均值、中位数或前后值。
# 使用均值填充缺失值
df['column_name'].fillna(df['column_name'].mean(), inplace=True)
(2)处理异常值:
箱线图检测异常值: 使用箱线图识别数值型特征中的异常值。
import seaborn as sns
sns.boxplot(x=df['column_name'])
(3)截尾或转换: 将超出一定范围的异常值截尾或进行数值转换。
# 截尾处理
df['column_name'] = df['column_name'].clip(lower=min_value, upper=max_value)
标准化/归一化:
MinMax标准化: 将数据缩放到指定的范围。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['column1', 'column2']] = scaler.fit_transform(df[['column1', 'column2']])
(4)独热编码:
使用pandas进行独热编码:
df_encoded = pd.get_dummies(df, columns=['categorical_column'])
(5)特征选择:基于统计方法的特征选择: 使用统计测试(如方差分析)来选择与目标变量最相关的特征。
from sklearn.feature_selection import f_classif
f_scores, p_values = f_classif(X, y)
(6)处理不平衡数据:过抽样: 使用过抽样方法增加少数类别的样本。
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)
(7)处理文本数据:分词和词袋模型: 使用分词将文本转换为单词,然后使用词袋模型表示文本。
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(text_data)
(8)数据验证和质量检查:
查找重复值: 使用pandas检测和删除重复值。
df.duplicated().sum()
df.drop_duplicates(inplace=True)
这些方法和规则只是数据预处理过程中的一部分。实际应用中,你可能需要根据具体情况采用多个方法的组合,以确保数据质量和适应分析的需求。
二、数据集成
数据挖掘需要的数据往往分布在不同的数据源中,数据集成就是将多个数据源合并存放在一个一致的数据存储(如数据仓库)中的过程。
在数据集成时,来自多个数据源的现实世界实体的表达形式是不一样的,有可能不匹配,要考虑实体识别问题和属性冗余问题,从而将源数据在最低层上加以转换、提炼和集成。
a、实体识别
是指从不同数据源识别出现实世界的实体,他的任务是统一不同源数据的矛盾之处
同名异义:
数据源A中的属性ID和数据源B中的属性ID分别描述的是菜品编号和订单编号,即描述的是不同的实体。
异名同义:
数据源A中的sales_dt 和数据源B中的sales_ date 都是描述销售日期的,即A. sales_dt = B. sales_ date。
单位不统一:
描述同一个实体分别用的是国际单位和中国传统的计量单位,检测和解决这些冲突就是实体识别的任务。
b、冗余属性识别
数据集成往往导致数据冗余,例如:
1) 同一属性多次出现。
2) 同一属性命名不一致导致重复。
仔细整合不同源数据能减少甚至避免数据冗余与不一致,从而提高数据挖掘的速度和质量。对于冗余属性要先分析,检测到后再将其删除。
三、数据变换
主要是对数据进行规范化处理,将数据转换成 适当的 形式,以适用于挖掘任务以及算法的需要。
a、简单函数变换
简单函数变换是对原始数据进行某些数学函数变换,常用的变换包括平方、开方、取对数、差分运算等
b、规范化
数据规范化(归一化)处理是数据挖掘的一项 基础工作。不同评价指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,使之落入一个特定的区域,便于进行综合分析。如将工资收入属性值映射到[-1,1]或者[0,1]内。
数据规范化对于基于距离的挖掘算法尤为重要。
(1)最小 — 最大规范化:最 小—最大规范化也称为离差标准化,是对原始数据的线性变换,将数值值映射到[0,1]之间。
转换公式如下:
其中,max为样本数据的最大值,min 为样本数据的最小值。max-min 为极差。离差标准化保留了原来数据中存在的关系,是消除量纲和数据取值范围影响的最简单方法。这种处理方法的缺点是若数值集中且某个数值很大,则规范化后各值会接近于0,并且将会相差不大。若将来遇到超过目前属性[min, max]取值范围的时候,会引起系统出错,需要重新确定min和max。
(2) 零—均值规范化
零—均值规范化也称标准差标准化,经处理的数据的均值为0,标准差为1。
x ∗ = x − x ‾ 1 0 k x^* = \frac{x-\overline{x}}{10^k}
其中x的平均数为原始数据的均值,σ为原始数据的标准差。
(3) 小数定标规范化
通过移动属性值的小数位数,将属性值映射到[-1,1]之间,移动的小数位数取决于属性值绝对值的最大值。
转化公式为:
c、连续属性离散化
(1)离散化的过程
连续属性的离散化就是在数据的取值范围内设定若千个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。所以,离散化涉及两个子任务:确定分类数以及如何将连续属性值映射到这些分类值。
(2)常用的离散化方法
等宽法:将属性的值域分成具有相同宽度的区间,区间的个数由数据本身的特点决定,或者由用户指定,类似于制作频率分布表。
等频法:将相同数量的记录放进每个区间。
基于聚类分析的方法
维聚类的方法包括两个步骤,首先将连续属性的值用聚类算法(如K-Means算法)进行聚类,然后再将聚类得到的簇进行处理,合并到一个簇的连续属性值并做同一标记。聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。