深圳网站建设黄浦网络 骗钱,专业团队什么梗,如何创建百度网站,哈尔滨建站服务网站开发文章目录 1 缺失值处理1.1 统计缺失值1.2 删除缺失值1.3 指定值填充1.4 均值/中位数/众数填充1.5 前后项填充 2 异常值处理2.1 3σ原则分析2.2 箱型图分析 3 重复值处理3.1 重复值计数3.2 drop_duplicates重复值处理 3 数据归一化/标准化3.1 0-1标准化3.2 Z-score标准化 技术交… 文章目录 1 缺失值处理1.1 统计缺失值1.2 删除缺失值1.3 指定值填充1.4 均值/中位数/众数填充1.5 前后项填充 2 异常值处理2.1 3σ原则分析2.2 箱型图分析 3 重复值处理3.1 重复值计数3.2 drop_duplicates重复值处理 3 数据归一化/标准化3.1 0-1标准化3.2 Z-score标准化 技术交流 1 缺失值处理
数据缺失主要包括记录缺失和字段信息缺失等情况其对数据分析会有较大影响导致结果不确定性更加显著缺失值的处理
删除记录数据插补不处理
首先导入相应的库文件处理缺失值的库主要是pandas。
import matplotlib.pyplot as plt首先参加示例数据用于分析
df pd.DataFrame({time:[2023-12-11 00:00,2023-12-11 01:00,2023-12-11 02:00,2023-12-11 03:00,2023-12-11 04:00,2023-12-11 05:00,2023-12-11 06:00,2023-12-11 07:00,2023-12-11 08:00,2023-12-11 09:00,2023-12-11 010:00],feature1:[12,33,45,23,np.nan,np.nan,66,54,np.nan,99,190],feature2:[np.nan,3.3,4.5,np.nan,5.2,np.nan,6.6,5.4,np.nan,9.9,1.0]})1.1 统计缺失值
(1) df.info()和df.describe()函数
可以通过df.info()函数大概查看缺失值情况df.info()可以查看列的数据类型数据数量信息df.describe()函数用于查看数据的统计信息。
info info方法返回DataFrame中的行数列数DataFrame中每一列的名称以及该列的非空值的数目以及每一列的数据类型。describe describe方法返回有关DataFrame中数字数据的一些有用统计信息例如均值标准偏差最大值和最小值以及一些百分位数。
df.info()(2) isnullnotnull判断是否是缺失值
isnull缺失值为True非缺失值为Falsenotnull缺失值为False非缺失值为True
df[df[feature2].notnull()]df[column_name].isnull().sum(axis0)1.2 删除缺失值
当数据存在缺失值可以通过不同的方式删除缺失值
df.dropna()#只要某个数据行中有缺失值则此操作就会将该行删除df.dropna(subset[column_1, column_2])#如果column_1和column_2两列数据中存在缺失值则将缺失值所在的行删除而不需要考虑其他列是否为缺失值df.dropna(axis1,howall)df.dropna(axis0,subset[Name,Age])#将会删除Name和“Age中有缺失值的行1.3 指定值填充
缺失值插补有多种方法可以通过df.fillna()函数实现
均值/中位数/众数插补临近值插补插值法
df.fillna(valueNone, methodNone, axisNone, inplaceFalse, limitNone, downcastNone,value 参数表示要填充的值method 参数表示填充的方法axis 参数表示要填充的轴(0 表示行1 表示列)inplace 参数表示是否在原数据框上进行修改limit 参数表示最多填充多少个空值downcast 参数表示在填充完成后对数据进行类型转换。
指定值填充可以通过df.fillna和df.replace实现
df1.fillna(0,inplace True)# df.replace(to_replaceNone, valueNone, inplaceFalse, limitNone, regexFalse, methodpad, axisNone)df2[feature1].replace(np.nan,0,inplace True)1.4 均值/中位数/众数填充
均值/中位数/众数可以通过 mean()、median()、mode()实现
df4[feature1].fillna(df4[feature1].mean(),inplace True)df4[feature1].fillna(df4[feature1].median(),inplace True)df4[feature1].fillna(df4[feature1].mode(),inplace True)1.5 前后项填充
前后项填充用前面和后面的值进行填充一般两个一起用避免最前面和最后面一行的值填充不到。
# pad / ffill → 用之前的数据填充 # backfill / bfill → 用之后的数据填充 df4[feature2].fillna(method pad,inplace True)2 异常值处理
异常值是指样本中的个别值其数值明显偏离其余的观测值异常值也称离群点异常值的分析也称为离群点的分析
异常值分析 → 3σ原则 / 箱型图分析异常值处理方法 → 删除 / 修正填补
首先创建一组数据用于分析
data pd.Series(np.random.randn(10000)*100)2.1 3σ原则分析
首先计算均值和标准差然后绘制密度曲线发现数据服从正态分布。
mean data.mean() # 计算均值std data.std() # 计算标准差print(均值为%.3f标准差为%.3f % (mean, std))stats.kstest(data, norm, (mean, std))fig, (ax1, ax2) plt.subplots(2, 1, figsize(10, 6))data.plot(kindkde, gridTrue, style-k, title密度曲线, axax1)然后根据计算的均值和标准差通过3σ原则可视化异常值。
error data[np.abs(data - mean) 3 * std]data_c data[np.abs(data - mean) 3 * std]print(异常值共%i条 % len(error))# 筛选出异常值error、剔除异常值之后的数据data_cax2.scatter(data_c.index, data_c, colorb, marker., alpha0.3, label正常值)ax2.scatter(error.index, error, colorr, marker., alpha0.5, label异常值)ax2.set_xlim([-10, 10010])2.2 箱型图分析
与上面3σ原则分析类似知识检测的标准笔筒箱型图分析采用四分位数进行统计。首先计算基本的统计量然后绘值箱型图。
data pd.Series(np.random.randn(10000) * 100)fig, (ax1, ax2) plt.subplots(2, 1, figsize(10, 6))print(分位差为%.3f下限为%.3f上限为%.3f % (iqr, mi, ma))color dict(boxesDarkGreen, whiskersDarkOrange, mediansDarkBlue, capsGray)data.plot.box(vertFalse, gridTrue, colorcolor, axax1, label样本数据)然后根据计算的统计量通过四分位数可视化异常值。
# 筛选出异常值error、剔除异常值之后的数据data_cerror data[(data mi) | (data ma)]data_c data[(data mi) (data ma)]print(异常值共%i条 % len(error))ax2.scatter(data_c.index, data_c, colorb, marker., alpha0.3, label正常值)ax2.scatter(error.index, error, colorr, marker., alpha0.5, label异常值)ax2.set_xlim([-10, 10010])3 重复值处理
3.1 重复值计数
同样创建一组数据用于分析数据的1和2行是重复数据
df pd.DataFrame({time:[2023-12-11 00:00,2023-12-11 00:00,2023-12-11 01:00,2023-12-11 02:00,2023-12-11 03:00,2023-12-11 04:00,2023-12-11 05:00,2023-12-11 06:00,2023-12-11 07:00,2023-12-11 08:00,2023-12-11 09:00,2023-12-11 010:00],feature1:[12,12,33,45,23,np.nan,np.nan,66,54,np.nan,99,190],feature2:[5.8,5.8,3.3,4.5,np.nan,5.2,np.nan,6.6,5.4,np.nan,9.9,1.0]})可以通过下面的的语句查看重复值可以看到有1个重复项
df.duplicated().value_counts()3.2 drop_duplicates重复值处理
用df.drop_duplicates的方法对某几列下面的重复行删除。
df.drop_duplicates(subsetNone, keepfirst, inplaceFalse)subset是用来指定特定的列默认为所有列 keep 当keepfirst时就是保留第一次出现的重复行其余删除
当keeplast时就是保留最后一次出现的重复行其余删除
当keepFalse时就是删除所有重复行inplace是指是否直接在原数据上进行修改默认为否
df.drop_duplicates(keepfirst,inplaceTrue)3 数据归一化/标准化
数据的标准化normalization是将数据按比例缩放使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到去除数据的单位限制将其转化为无量纲的纯数值便于不同单位或量级的指标能够进行比较和加权。最典型的就是数据的归一化处理即将数据统一映射到[0,1]区间上
0-1标准化Z-score标准化
3.1 0-1标准化
将数据的最大最小值记录下来并通过Max-Min作为基数即Min0Max1进行数据的归一化处理计算公式
x (x - Min) / (Max - Min)
同样创建一组数据用于分析
df pd.DataFrame({feature1: np.random.rand(10) * 20, feature2: np.random.rand(10) * 100})使用公式进行标准化
def data_norm(df, *cols):max_val df_n[col].max()min_val df_n[col].min()df_n[col] (df_n[col] - max_val) / (max_val - min_val)df_n data_norm(df, feature1, feature2)使用库函数实现0-1标准化
from sklearn.preprocessing import MinMaxScalerX_scaled scaler.fit_transform(df[feature1].values.reshape(-1, 1))3.2 Z-score标准化
Z分数z-score,是一个分数与平均数的差再除以标准差的过程 → z(x-μ)/σ其中x为某一具体分数μ为平均数σ为标准差Z值的量代表着原始分数和母体平均值之间的距离是以标准差为单位计算。在原始分数低于平均值时Z则为负数反之则为正数。
同样创建一组数据用于分析
df pd.DataFrame({feature1:np.random.rand(10) * 100,feature2:np.random.rand(10) * 100})使用公式进行标准化归一化后可以检测数据的均值和标准差
def data_Znorm(df, *cols):u df_n[col].mean()std df_n[col].std()df_n[col] (df_n[col] - u) / std# 使用功能函数实现Z-score标准化并替换原始数据df data_Znorm(df, feature1, feature2)使用库函数实现z-score标准化
from sklearn.preprocessing import StandardScalerscaler StandardScaler()X_scaled scaler.fit_transform(df[feature1].values.reshape(-1, 1))技术交流
技术要学会分享、交流不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
本文相关资料、技术交流答疑均可加我们的交流群获取群友已超过2000人添加时最好的备注方式为来源兴趣方向方便找到志同道合的朋友。 方式①、微信搜索公众号Python学习与数据挖掘后台回复加群 方式②、添加微信号dkl88194备注来自CSDN 技术交流 我们打造了《机器学习算法实战案例宝典》特点从0到1轻松学习方法论及原理、代码、案例应有尽有所有案例都按照这样的节奏进行的整理。