机器学习算法实战案例:时间序列数据最全的预处理方法总结

news2024/12/25 2:06:46

文章目录

      • 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) isnull,notnull判断是否是缺失值

  • isnull:缺失值为True,非缺失值为False
  • notnull:缺失值为False,非缺失值为True
df[df['feature2'].notnull()]

df["column_name"].isnull().sum(axis=0)
1.2 删除缺失值

当数据存在缺失值,可以通过不同的方式删除缺失值

df.dropna()#只要某个数据行中有缺失值,则此操作就会将该行删除

df.dropna(subset=['column_1', 'column_2'])#如果column_1和column_2两列数据中存在缺失值,则将缺失值所在的行删除,而不需要考虑其他列是否为缺失值

df.dropna(axis=1,how="all")

df.dropna(axis=0,subset=["Name","Age"])#将会删除"Name"和“Age"中有缺失值的行
1.3 指定值填充

缺失值插补有多种方法,可以通过df.fillna()函数实现:

  • 均值/中位数/众数插补
  • 临近值插补
  • 插值法
df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None,
  • value 参数表示要填充的值
  • method 参数表示填充的方法
  • axis 参数表示要填充的轴(0 表示行,1 表示列)
  • inplace 参数表示是否在原数据框上进行修改
  • limit 参数表示最多填充多少个空值
  • downcast 参数表示在填充完成后对数据进行类型转换。

指定值填充可以通过df.fillna和df.replace实现

df1.fillna(0,inplace = True)
# df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad', axis=None)

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(kind='kde', grid=True, style='-k', title='密度曲线', ax=ax1)

然后根据计算的均值和标准差通过3σ原则可视化异常值。

error = data[np.abs(data - mean) > 3 * std]

data_c = data[np.abs(data - mean) <= 3 * std]

print('异常值共%i条' % len(error))

# 筛选出异常值error、剔除异常值之后的数据data_c

ax2.scatter(data_c.index, data_c, color='b', marker='.', alpha=0.3, label='正常值')

ax2.scatter(error.index, error, color='r', marker='.', alpha=0.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(boxes='DarkGreen', whiskers='DarkOrange', medians='DarkBlue', caps='Gray')

data.plot.box(vert=False, grid=True, color=color, ax=ax1, label='样本数据')

然后根据计算的统计量通过四分位数可视化异常值。

# 筛选出异常值error、剔除异常值之后的数据data_c

error = data[(data < mi) | (data > ma)]

data_c = data[(data >= mi) & (data <= ma)]

print('异常值共%i条' % len(error))

ax2.scatter(data_c.index, data_c, color='b', marker='.', alpha=0.3, label='正常值')

ax2.scatter(error.index, error, color='r', marker='.', alpha=0.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(subset=None, keep='first', inplace=False)
  • subset:是用来指定特定的列,默认为所有列

  • keep:

    当keep='first'时,就是保留第一次出现的重复行,其余删除  
    当keep='last'时,就是保留最后一次出现的重复行,其余删除  
    当keep=False时,就是删除所有重复行
    
  • inplace是指是否直接在原数据上进行修改,默认为否

df.drop_duplicates(keep='first',inplace=True)

3 数据归一化/标准化

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上

  • 0-1标准化
  • Z-score标准化
3.1 0-1标准化

将数据的最大最小值记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进行数据的归一化处理,计算公式

  • 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 MinMaxScaler

X_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 StandardScaler

scaler = StandardScaler()

X_scaled = scaler.fit_transform(df['feature1'].values.reshape(-1, 1))

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

本文相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
方式②、添加微信号:dkl88194,备注:来自CSDN + 技术交流

我们打造了《机器学习算法实战案例宝典》,特点:从0到1轻松学习,方法论及原理、代码、案例应有尽有,所有案例都按照这样的节奏进行的整理。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Openssl生成Https免费证书以及Nginx配置

1 证书和私钥的生成 1.创建服务器证书密钥文件 server.key&#xff1a; openssl genrsa -des3 -out server.key 2048 输入密码&#xff0c;确认密码&#xff0c;自己随便定义&#xff0c;但是要记住&#xff0c;后面会用到。 2.创建服务器证书的申请文件 server.csr openssl r…

外包干了4年,废了···

有一说一&#xff0c;外包没有给很高的薪资&#xff0c;是真不能干呀&#xff01; 先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0…

Linux的基础命令学习

pwd - 显示当前工作目录的路径 cd - 切换工作目录&#xff0c;ls - 列出当前目录的文件和子目录 rm - 删除文件或目录 mkdir - 创建新目录 rm - 删除目录 nano/vi - 编辑文本文件&#xff0c;按Enter键进入 之后按i键就可以进入写入模式 之后输入文字以后按Esc键与:q就不保…

【设计模式-05】Facade门面Mediator调停者 | Decorator装饰器 | Chain Of Responsibility责任链

Facade门面Mediator调停者 1、Facade门面图解 2、Mediator调停者 一般是系统内部相互交错&#xff0c;比如消息中间件(MQ)就是这种设计模式&#xff0c;对各个功能或系统之间进行解耦。 Decorator装饰器 1、问题 2、解决方案 Chain Of Responsibility责任链 一、例子场景 业…

(Java企业 / 公司项目)JMeter接口压测使用(保姆式手把手教会)

一. JMeter简介认识&#xff08;重点是下面的使用方法&#xff09; JMeter是一个开源的Java应用程序&#xff0c;由Apache软件基金会开发和维护&#xff0c;可用于性能测试、压力测试、接口测试等。 1. 原理 JMeter的基本原理是模拟多用户并发访问应用程序&#xff0c;通过发…

手把手教你如何搭建Spring本地编译环境

大家好&#xff0c;我是极客涛&#xff0c;不知道小伙伴有没有和我一样的情况&#xff0c;在阅读Spring源码时&#xff0c;只通过静态的代码阅读很难有更深刻的理解&#xff0c;所以建议通过写测试类进行debug的方式&#xff0c;对核心的代码进行运行时的状态调试&#xff0c;这…

2024年腾讯云服务器活动价格整理汇总,5年和三年选择

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

TLS握手流程分析

1.SSL/TLS 历史 HTTP 是明文传输的协议&#xff0c;可能受到第三方的攻击&#xff0c;非常不安全。因此才诞生 “HTTPS”。 这个 “S” 表示 SSL/TLS 协议&#xff0c;用公式说明&#xff1a;HTTPS HTTP SSL(TLS)。 其中 SSL 即安全套接层&#xff08;Secure Sockets Layer&…

【开发篇】四、MAT堆内存分析(Memory Analyzer Tool)

文章目录 1、使用2、报错3、MAT支配树4、MAT内存泄漏的检测原理5、导出运行中系统的内存快照6、补充 1、使用 内存溢出后&#xff0c;分析泄露的思路是&#xff1a; 在OOM前&#xff0c;将整个堆内存保存成一个hprof文件MAT打开hprof文件&#xff0c;MAT自行分析可疑对象 添…

模拟器安装XPosed框架教程

Xposed框架下载&#xff08;搞不懂就先看完本篇教程再下载&#xff09; 99%的情况只需要下载里面的XPosed鸭就行了 安卓8及以下XPosed框架 - 多开鸭模拟器安装XPosed框架图文视频教程 关于本站XPosed框架的说明 XPosed框架(即XP框架)&#xff0c;由rovo89开发。适用于安卓7以…

Kafka消费流程

Kafka消费流程 消息是如何被消费者消费掉的。其中最核心的有以下内容。 1、多线程安全问题 2、群组协调 3、分区再均衡 1.多线程安全问题 当多个线程访问某个类时&#xff0c;这个类始终都能表现出正确的行为&#xff0c;那么就称这个类是线程安全的。 对于线程安全&…

HNU-算法设计与分析-实验4

算法设计与分析实验4 计科210X 甘晴void 202108010XXX 目录 文章目录 算法设计与分析<br>实验41 回溯算法求解0-1背包问题问题重述想法代码验证算法分析 2 回溯算法实现题5-4运动员最佳配对问题问题重述想法代码验证算法分析 3 分支限界法求解0-1背包问题问题重述想法…

OpenGL Assimp加载各类型模型(.obj、.fbx、.glb、.3ds)

1.简介 本博客以.glb格式为例&#xff0c;加载glb格式的3d模型&#xff0c;网上找了一圈&#xff0c;基本上都是根据OpenGL官方示例&#xff0c;加载.obj格式的3d模型。 下面以.obj和.glb格式的3D模型简单介绍一下。 常见的.obj格式的3D模型如下所示&#xff1a;纹理都已经被…

FineBI实战项目一(23):订单商品分类词云图分析开发

点击新建组件&#xff0c;创建订单商品分类词云图组件。 选择词云&#xff0c;拖拽catName到颜色和文本&#xff0c;拖拽cat到大小。 将组件拖拽到仪表板。 结果如下&#xff1a;

MYSQL的学习——单行函数详解

目录 1. 数值函数 1) 基本函数 2) 角度与弧度互换函数 3) 三角函数 4) 指数与对数函数 5) 进制间的转换 2. 字符串函数 3. 日期和时间函数 1) 获取日期、时间 2) 日期与时间戳的转换 3) 获取月份、星期、星期数、天数等函数 4) 日期的操作函数 5) 时间和秒钟转换的…

商业世界,从2023到2024

作者&#xff5c;潮汐商业评论 编辑&#xff5c;Ray 变化总在发生&#xff0c;你不去迎接进步的变化&#xff0c;就会等到退步的变化。 —— 查理.芒格 2023, 我们似乎总在不断告别。从“一生自由”的大家黄永玉到“智慧”投资家查理.芒格&#xff0c;再到写出《不能承受的生命…

条款24:若所有参数皆需类型转换,请为此采用非成员函数

设计一个表示有理数的类时&#xff0c;允许从整数隐式转换为有理数是有用的&#xff1a; class Rational { public:Rational(int numerator 0, // 该构造函数没有explicit限制;int denominator 1); int numerator() const; int denominator() const; const Rational opera…

如何用GPT制作PPT和写代码?

详情点击链接&#xff1a;如何用GPT制作PPT和写模型代码&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定…

04.SpringCloud网关-gateway

1.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…

qt.qpa.plugin: Could not find the Qt platform plugin “windows“ in ““

系统环境&#xff1a;Win10家庭中文版 Qt : 5.12.9 链接了一些64位的第三方库&#xff0c;程序编译完运行后出现 qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "" 弹窗如下&#xff1a; 网上搜了一些都是关于pyQt的&#xff0c…