【Python爬虫(26)】Python爬虫进阶:数据清洗与预处理的魔法秘籍
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。
目录
- 一、数据清洗的重要性
- 二、数据清洗的常见任务
- 2.1 去除噪声数据
- 2.2 处理缺失值
- 2.3 纠正错误数据
- 三、使用 Python 库进行数据清洗与预处理
- 3.1 认识 pandas 库
- 3.2 数据导入与查看
- 3.3 利用 pandas 处理缺失值
- 3.4 利用 pandas 处理重复数据
- 3.5 利用 pandas 处理异常值
- 四、数据标准化与归一化方法
- 4.1 标准化与归一化的概念
- 4.2 标准化方法
- 4.3 归一化方法
- 4.4 标准化与归一化的应用场景
- 五、总结与展望
一、数据清洗的重要性
在使用 Python 爬虫获取数据后,数据清洗是至关重要的环节。从网页中爬取的数据往往包含大量噪声数据、缺失值和错误数据 ,这些 “脏数据” 会严重影响后续数据分析和模型训练的准确性与可靠性。例如,在进行市场趋势分析时,如果数据中存在大量重复的销售记录(噪声数据),可能会导致对市场需求的误判;若销售数据中存在缺失值,基于这些数据建立的销售预测模型可能会产生较大偏差。因此,数据清洗就像是数据处理流程中的 “质检员”,为后续更高级的数据处理和分析奠定坚实基础。
二、数据清洗的常见任务
2.1 去除噪声数据
噪声数据是指那些不符合数据模式或期望的数据点,它们会干扰数据分析的准确性 。在爬虫获取的数据中,常见的噪声数据类型包括乱码、特殊符号、重复数据等。比如在爬取网页新闻内容时,可能会混入一些 HTML 标签、JavaScript 代码片段等乱码和特殊符号,这些对于新闻内容分析毫无价值 。
使用正则表达式可以有效去除这些噪声。比如利用re模块来匹配并去除 HTML 标签:
import rehtml_text = "<p>这是一段新闻内容,<span style='color:red'>包含HTML标签</span></p>"
clean_text = re.sub(r'<.*?>', '', html_text)
print(clean_text)
上述代码中,re.sub(r’<.*?>', ‘’, html_text)表示使用空字符串替换掉所有的 HTML 标签,从而得到干净的文本内容。对于重复数据,可以使用pandas库的drop_duplicates方法去除。例如:
import pandas as pddata = {'col1': [1, 2, 2, 3], 'col2': ['a', 'b', 'b', 'c']}
df = pd.DataFrame(data)
unique_df = df.drop_duplicates()
print(unique_df)
通过drop_duplicates方法,DataFrame中的重复行被成功去除。
2.2 处理缺失值
缺失值是指数据集中某个或某些属性的值是缺失的情况。在现实世界的数据中,缺失值非常常见,比如在爬取电商商品信息时,部分商品的描述、价格等信息可能缺失。
常见的缺失值处理方法有以下几种:
- 删除:当数据集中缺失值较少时,可以直接删除含有缺失值的行或列。在pandas中,使用dropna方法实现。例如:
import pandas as pddata = {'col1': [1, None, 3], 'col2': ['a', 'b', 'c']}
df = pd.DataFrame(data)
filtered_df = df.dropna()
print(filtered_df)
- 填充:
-
- 均值填充:适用于数值型数据且数据整体极值差异不大时。例如对成年男性身高的缺失值进行填充。在pandas中,使用fillna方法结合mean函数实现。如:
import pandas as pddata = {'col1': [1, None, 3]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].fillna(df['col1'].mean())
print(df)
-
- 中位数填充:当数据整体极值差异较大时使用,比如对人均收入进行填充(数据中含有高收入人群,如马总)。代码如下:
import pandas as pddata = {'col1': [1, None, 1000]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].fillna(df['col1'].median())
print(df)
-
- 众数填充:用于字符类型或没有大小关系的数值类型数据。例如对城市信息的缺失进行填充。代码如下:
import pandas as pddata = {'col1': ['北京', '上海', None]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].fillna(df['col1'].mode()[0])
print(df)
- 插值法:对于数值型数据,当数据列的含义较为复杂,需要更精确的填充方法时可以使用。pandas中的interpolate方法本质是使用各种数学(统计学)中的插值方法进行填充,包含最近邻插值法、阶梯插值、线性插值、B 样条曲线插值等多种方法。例如:
import pandas as pddata = {'col1': [1, None, 3]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].interpolate()
print(df)
2.3 纠正错误数据
错误数据是指数据中存在不符合逻辑或与实际情况不符的数据。例如在爬取学生成绩数据时,可能出现成绩大于 100 分(假设满分 100 分)的情况,或者数据类型错误,如将成绩存储为字符串类型。
以识别和纠正成绩数据中的错误为例,假设存在一个包含学生成绩的DataFrame:
import pandas as pddata = {'姓名': ['张三', '李四', '王五'], '成绩': ['85', 120, 90]}
df = pd.DataFrame(data)# 检查数据类型并转换为数值类型
df['成绩'] = pd.to_numeric(df['成绩'], errors='coerce')# 纠正错误数据(成绩大于100分的设为100分)
df['成绩'] = df['成绩'].apply(lambda x: 100 if x > 100 else x)print(df)
在上述代码中,首先使用pd.to_numeric将成绩列转换为数值类型,errors='coerce’表示将无法转换的值设为NaN。然后通过apply方法结合匿名函数,将大于 100 分的成绩纠正为 100 分。
三、使用 Python 库进行数据清洗与预处理
在 Python 的数据清洗和预处理工作中,pandas库是一个强大且常用的工具,它提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。
3.1 认识 pandas 库
pandas是基于NumPy构建的,利用了NumPy数组计算的优势,在数据处理和分析方面表现出色。它主要有两个核心数据结构:Series(一维带标签数组)和DataFrame(二维表格型数据结构 ),这使得处理和分析各种类型的数据变得更加便捷。例如,DataFrame可以看作是由多个Series组成的表格,每列都是一个Series,且所有列共享同一索引。pandas库提供了丰富的函数和方法,涵盖数据读取、写入、清洗、处理、分析等各个环节,如读取常见的 CSV、Excel 等文件格式,处理缺失值、重复值和异常值等,还能进行数据的合并、分组、透视等操作。
3.2 数据导入与查看
使用pandas读取 CSV 文件非常简单,只需使用read_csv函数:
import pandas as pd# 读取CSV文件
data = pd.read_csv('data.csv')
读取 Excel 文件则使用read_excel函数:
# 读取Excel文件
data = pd.read_excel('data.xlsx')
读取数据后,可以使用shape属性查看数据的形状(行数和列数),使用dtypes属性查看每列的数据类型:
# 查看数据形状
print(data.shape) # 查看列数据类型
print(data.dtypes)
3.3 利用 pandas 处理缺失值
pandas提供了多种处理缺失值的方法。例如,dropna方法用于删除含有缺失值的行或列,fillna方法用于填充缺失值。假设我们有一个包含缺失值的DataFrame:
import pandas as pd
import numpy as npdata = {'col1': [1, np.nan, 3], 'col2': ['a', 'b', np.nan]}
df = pd.DataFrame(data)# 删除含有缺失值的行
filtered_df = df.dropna()
print(filtered_df) # 使用指定值填充缺失值
df.fillna(0, inplace=True)
print(df)
在上述代码中,首先创建了一个含有缺失值的DataFrame,然后使用dropna方法删除含有缺失值的行,接着使用fillna方法将缺失值填充为 0 ,inplace=True表示在原数据上进行修改。
3.4 利用 pandas 处理重复数据
使用pandas的drop_duplicates方法可以识别和删除重复数据。例如:
import pandas as pddata = {'col1': [1, 2, 2, 3], 'col2': ['a', 'b', 'b', 'c']}
df = pd.DataFrame(data)# 删除重复行
unique_df = df.drop_duplicates()
print(unique_df)
运行上述代码,drop_duplicates方法会自动检测并删除DataFrame中的重复行,只保留唯一的行数据。
3.5 利用 pandas 处理异常值
可以使用统计方法(如 Z-Score)或可视化工具(如箱线图)检测异常值。Z-Score 是一种常用的检测异常值的统计方法,它通过计算数据点与均值的距离(以标准差为单位)来判断数据点是否为异常值。一般来说,Z-Score 绝对值大于 3 的数据点可以被视为异常值。使用pandas结合numpy实现 Z-Score 检测异常值的代码如下:
import pandas as pd
import numpy as npdata = {'col1': [1, 2, 3, 100, 5]}
df = pd.DataFrame(data)# 计算Z-Score
df['z_score'] = np.abs((df['col1'] - df['col1'].mean()) / df['col1'].std())# 筛选出异常值
outliers = df[df['z_score'] > 3]
print(outliers)
使用箱线图可视化数据,直观地展示数据分布和异常值,需要借助matplotlib库,代码如下:
import pandas as pd
import matplotlib.pyplot as pltdata = {'col1': [1, 2, 3, 100, 5]}
df = pd.DataFrame(data)# 绘制箱线图
df['col1'].plot(kind='box')
plt.show()
在上述代码中,df[‘col1’].plot(kind=‘box’)用于绘制col1列数据的箱线图,通过箱线图可以直观地看到数据中的异常值(通常用离群点表示)。在检测到异常值后,可以根据具体情况进行处理,如删除异常值、对异常值进行修正或转换等。例如,如果确定某个异常值是由于数据录入错误导致的,可以将其修正为正确的值;如果异常值是真实存在的数据,但对分析结果有较大影响,可以考虑删除该数据点 。使用pandas删除异常值的代码如下:
import pandas as pd
import numpy as npdata = {'col1': [1, 2, 3, 100, 5]}
df = pd.DataFrame(data)# 计算Z-Score
df['z_score'] = np.abs((df['col1'] - df['col1'].mean()) / df['col1'].std())# 删除异常值
filtered_df = df[df['z_score'] <= 3]
print(filtered_df)
上述代码通过 Z-Score 方法检测出异常值,并使用布尔索引删除了异常值,得到了一个不包含异常值的DataFrame。
四、数据标准化与归一化方法
4.1 标准化与归一化的概念
在数据处理过程中,标准化和归一化是两种重要的数据变换方法,它们主要用于消除数据特征之间的量纲影响,使不同特征处于同一尺度,便于后续的数据分析和模型训练。
- 标准化(Standardization),也称为 Z-Score 标准化,是将数据按比例缩放,使之符合标准正态分布,即均值为 0,标准差为 1 。其核心思想是通过对数据进行平移和缩放,将数据转换为均值为 0、标准差为 1 的分布。标准化的作用在于,它能够保持数据的分布形状不变,只是对数据进行了位置和尺度的调整,使得不同特征之间具有可比性。例如,在分析学生的各科成绩时,不同科目的满分和平均分可能不同,通过标准化可以将各科成绩统一到一个标准尺度上,便于比较学生在不同科目上的相对表现。
- 归一化(Normalization)通常是将数据缩放到 [0,1] 或者 [-1,1] 的范围内 。它的目的是将数据映射到一个特定的区间,消除数据的尺度差异,使数据更加集中在一个较小的范围内。在图像数据处理中,像素值通常在 0 - 255 之间,通过归一化可以将其缩放到 [0,1] 区间,方便后续的计算和处理。
标准化和归一化的主要区别在于:标准化是基于数据的均值和标准差进行变换,而归一化是基于数据的最大值和最小值进行变换;标准化更注重数据的分布特征,而归一化更注重数据的尺度范围。
4.2 标准化方法
常见的标准化方法是 Z-Score 标准化,其计算公式为:
其中,是标准化后的数据,
是原始数据,
是数据的均值,
是数据的标准差。
计算步骤如下:
-
计算数据的均值:
-
计算数据的标准差:
-
根据公式计算标准化后的数据
。
使用 Python 的numpy库实现 Z-Score 标准化的代码如下:
import numpy as np# 原始数据
data = np.array([1, 2, 3, 4, 5])# 计算均值和标准差
mean = np.mean(data)
std = np.std(data)# 进行Z-Score标准化
standardized_data = (data - mean) / stdprint(standardized_data)
4.3 归一化方法
常见的归一化方法是 Min-Max 归一化,也称为离差标准化,它使结果值映射到 [0,1] 之间,转换函数如下:
其中,是归一化后的数据,
是原始数据,(min(X))和(max(X))分别是数据集中的最小值和最大值。
计算步骤如下:
- 找出数据集中的最小值(min(X))和最大值(max(X))。
- 对每个数据点
,根据公式计算归一化后的数据
。
使用 Python 的numpy库实现 Min-Max 归一化的代码如下:
import numpy as np# 原始数据
data = np.array([1, 2, 3, 4, 5])# 计算最小值和最大值
min_val = np.min(data)
max_val = np.max(data)# 进行Min-Max归一化
normalized_data = (data - min_val) / (max_val - min_val)print(normalized_data)
4.4 标准化与归一化的应用场景
在不同的机器学习算法和数据分析场景中,选择合适的标准化和归一化方法非常重要:
- 在基于距离度量的算法中:如 KNN、K-Means 聚类算法,标准化和归一化可以避免某一个取值范围特别大的特征对距离计算造成影响,提高模型的精度。在 KNN 算法中,如果一个特征的值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖。此时,使用标准化或归一化方法可以使各个特征在距离计算中发挥相对均衡的作用。
- 在梯度下降优化算法中:归一化可以加快模型的收敛速度。例如在逻辑回归和神经网络的训练中,归一化后的数据可以使目标函数的等高线变得更圆,梯度下降的方向更接近最小值的方向,从而更快地收敛。
- 当数据分布接近正态分布时:标准化可能是一个更好的选择,因为许多机器学习算法(如线性回归、逻辑回归、支持向量机等)在设计时都假设输入数据是正态分布的,标准化能够保持数据的分布形状,更符合这些算法的假设,从而提高模型的性能。
- 如果数据存在异常值,或者最大最小值非常不稳定:归一化可能更为合适。因为归一化主要受到最大值和最小值的影响,对异常值相对鲁棒,而标准化涉及均值和标准差,对异常值比较敏感,异常值的存在可能会影响处理后数据的分布。在处理房价数据时,如果存在个别价格极高的豪宅(异常值),使用归一化可以减少这些异常值对数据整体尺度的影响,使数据更稳定。
五、总结与展望
数据清洗与预处理是数据处理流程中不可或缺的环节,其重要性不言而喻。通过去除噪声数据、处理缺失值和纠正错误数据等常见任务,能够显著提高数据的质量和可用性,为后续的数据分析、机器学习和深度学习等任务提供坚实的数据基础。在实际应用中,Python 的pandas库为数据清洗与预处理提供了强大而便捷的工具,使我们能够高效地处理各种类型的数据。同时,数据标准化与归一化方法则针对数值型数据,消除了量纲影响,提升了数据的可比性和模型的性能。
展望未来,随着大数据和人工智能技术的迅猛发展,数据清洗与预处理技术也将迎来新的机遇和挑战。一方面,数据规模和复杂性的不断增加,将对数据清洗与预处理的效率和准确性提出更高要求,促使我们开发更加自动化、智能化的算法和工具,以适应大数据时代的需求。例如,利用深度学习算法自动识别和处理缺失值、异常值等问题,实现数据清洗的自动化和智能化。另一方面,随着人工智能技术在各个领域的广泛应用,对高质量数据的需求也将日益增长,这将进一步凸显数据清洗与预处理的重要性。在医疗领域,精准的疾病诊断和治疗需要高质量的医疗数据,数据清洗与预处理能够确保医疗数据的准确性和可靠性,为人工智能辅助医疗决策提供有力支持。此外,数据安全和隐私保护也将成为数据清洗与预处理过程中需要重点关注的问题,如何在保证数据质量的同时,保护数据的安全和隐私,将是未来研究的重要方向之一。
相关文章:

【Python爬虫(26)】Python爬虫进阶:数据清洗与预处理的魔法秘籍
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
机器学习数学基础:28.卡方检验
卡方检验教程 一、引言 在统计学的广阔领域中,卡方检验(Chi - Square Test)宛如一把锐利的手术刀,能够精准剖析数据背后隐藏的关系与模式。它主要用于两大核心任务:一是深入分析两个及两个以上分类变量之间错综复杂的…...

【工具插件类教学】实现运行时2D物体交互的利器Runtime2DTransformInteractor
目录 编辑 1. 插件核心功能 1.1 基础变换操作 1.2 高级特性 2. 安装与配置 2.1 导入插件 2.2 配置控制器参数 2.3 为物体添加交互功能 3. 使用示例 3.1 基础操作演示 3.2 多选与批量操作 3.3 自定义光标与外观 4. 高级配置技巧 4.1 动态调整包围框控件尺寸 4.…...

回调处理器
文章目录 什么是回调处理器回调处理器的工作流程回调处理器的使用自定义链组件中的回调 内置回调处理器自定义回调处理器 在编程领域中,回调是一个非常重要的概念。简而言之,回调是一种特殊的函数或方法,它可以被传递给另一个函数作为参数&am…...

Redis-03高级篇中-多级缓存:
说明: 分布式缓存和多级缓存的视频,与springcloud高级篇redis的一模一样。这里就不在重复学习了,如果后面用到关于redis的配置,直接到springcloud模块安装的redis中学习即可。 多级缓存 0.学习目标 1.什么是多级缓存 传统的缓…...
Spring Boot ShardingJDBC分库分表(草稿)
ShardingJDBC分库分表 1.Maven 引用 <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version></dependency><dependency><…...

Jenkins 环境搭建---基于 Docker
前期准备 提前安装jdk、maven、nodeJs(如果需要的话) 创建 jenkins 环境目录,用来当做挂载卷 /data/jenkins/ 一:拉取 Jenkins 镜像 docker pull jenkins/jenkins:lts 二:设置 Jenkins挂载目录 mkdir -p ~/jen…...
如何在自定义组件中使用v-model实现双向绑定
在 Vue 2 中,v-model 是双向数据绑定的语法糖,它默认将 value 作为 prop 传入组件,并通过监听 input 事件来更新父组件的数据。若要在自定义组件中实现 v-model 的双向绑定,需遵循以下步骤: 1. 基本实现:va…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pool_t 类型
ngx_pool_t 定义在 src/core/ngx_core.h typedef struct ngx_pool_s ngx_pool_t; ngx_pool_s 定义在 src/core/ngx_palloc.h struct ngx_pool_s {ngx_pool_data_t d;size_t max;ngx_pool_t *current;ngx_chain_t *chain;ng…...
如何在 ubuntu 上使用 Clash 与 docker 开启代理拉起
如何在 ubuntu 上使用 Clash https://github.com/doreamon-design/clash/releases上面是clash 的地址 clash_2.0.24_linux_386.tar.gz 下载 386 的 如果你的电脑是inter tar -xzvf clash_2.0.24_linux_386.tar.gz 启动 ./clash 然后会在电脑上生成一个config的文件 /home/xxx/…...
linux tcpdump抓包
参数说明: -i 指定网卡 -w 指定保存文件 -s0 完整抓包 -G 指定间隔时长(秒) -C 指定每个文件大小(M) 用法1: 指定端口输出到指定文件 tcpdump -i em3 -w 182910.pcap 用法2: 指定端口每10分钟输出到不同文件 tcpdump -i em3 -s0 -G 600 -w %Y_%m%d_%H%M_%S.pcap 用法3: 指…...
PLSQL连接Oracle 19c报错ORA-28040
PLSQL连接Oracle 19c报错ORA-28040 原因解析解决办法原因解析 使用PLSQL Developer连接19c数据库报错: ORA-28040: No matching authentication protocol报错信息解析: [oracle@ora19c ~]$ oerr ora 2804028040, 0000, "No matching authentication protocol" /…...

汽车免拆诊断案例 | 2010 款路虎揽胜车空调偶尔出风异常
故障现象 一辆2010款路虎揽胜车,搭载5.0 L发动机,累计行驶里程约为16万km。车主反映,接通空调开关后,有时出风忽大忽小,有时不出风,有时要等2 min左右才出风;有时两三天出现一次,…...

音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现
一、引言 由《音视频入门基础:RTP专题(2)——使用FFmpeg命令生成RTP流》可以知道,推流端通过下面FFmpeg命令可以将一个媒体文件转推RTP,生成RTP流: ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec cop…...

Nginx 安装及配置教程(Windows)【安装】
文章目录 一、 Nginx 下载 1. 官网下载2. 其它渠道 二、 Nginx 安装三、 配置四、 验证五、 其它问题 1. 常用命令2. 跨域问题 软件 / 环境安装及配置目录 一、 Nginx 下载 1. 官网下载 安装地址:https://nginx.org/en/download.html 打开浏览器输入网址 htt…...

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战
前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…...
嵌入式0xDEADBEEF
在嵌入式系统中,0xDEADBEEF 是一个常见的“魔数”(magic number),通常用于调试和内存管理。它的含义和用途如下: 1. 调试用途 未初始化内存的标记:在调试时,0xDEADBEEF 常用于标记未初始化或已…...
B+树作为数据库索引结构的优势对比
MySQL作为数据库,它的功能就是做数据存储和数据查找;使用B树作为索引结构是为了实现高效的查找、插入和删除操作。 B树的查找、插入、删除的复杂度都为 O(log n),它是一个多叉树的结构,能兼顾各种操作的效率的数据结构。如果使用…...
自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用
在Oracle Database 12c Release 1 (12.1)版本中,引入了对SQL计划管理(SPM)功能的增强,特别是关于SQL计划基线的自动进化机制。这一改进允许数据库更加智能地管理和优化SQL查询的执行计划,确保即使数据分布发生变化&…...

什么是DeFi (去中心化金融)
DeFi (去中心化金融) 概述 💰 1. DeFi 基础概念 1.1 什么是 DeFi? DeFi 是建立在区块链上的金融服务生态系统,它: 无需中心化中介开放且透明无需许可即可参与代码即法律 1.2 DeFi 的优势 开放性:任何人都可以参与…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...