八-工具包3-pandas数据清洗及相关性

news2024/11/26 18:47:14

数据清洗概述

数据清洗是对一些没有用的、不合理的数据进行处理的过程。

很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。

样本数据:

from io import StringIO
import pandas as pd

csv_data = """
PID,ST_NUM,ST_NAME,OWN_OCCUPIED,NUM_BEDROOMS,NUM_BATH,SQ_FT
100001000,104,PUTNAM,Y,3,1,1000
100002000,197,LEXINGTON,N,3,1.5,--
100003000, ,LEXINGTON,N,n/a,1,850
100004000,201,BERKELEY,12,1,NaN,700
,203,BERKELEY,Y,3,2,1600
100006000,207,BERKELEY,Y,NA,1,800
100007000,NA,WASHINGTON,'',2,HURLEY,950
100008000,213,TREMONT,Y,1,1,
100009000,215,TREMONT,Y,na,2,1800
100009000.0,215.0,TREMONT,Y,na,2,1800
100009000.0,215.0,TREMONT,Y,na,2,1800
,,,,,,
"""

# 使用StringIO来模拟文件对象
csv_file = StringIO(csv_data)
df = pd.read_csv(csv_file)
print(df)

#             PID ST_NUM     ST_NAME OWN_OCCUPIED NUM_BEDROOMS NUM_BATH SQ_FT
# 0   100001000.0    104      PUTNAM            Y            3        1  1000
# 1   100002000.0    197   LEXINGTON            N            3      1.5    --
# 2   100003000.0          LEXINGTON            N          NaN        1   850
# 3   100004000.0    201    BERKELEY           12            1      NaN   700
# 4           NaN    203    BERKELEY            Y            3        2  1600
# 5   100006000.0    207    BERKELEY            Y          NaN        1   800
# 6   100007000.0    NaN  WASHINGTON           ''            2   HURLEY   950
# 7   100008000.0    213     TREMONT            Y            1        1   NaN
# 8   100009000.0    215     TREMONT            Y           na        2  1800
# 9   100009000.0  215.0     TREMONT            Y           na        2  1800
# 10  100009000.0  215.0     TREMONT            Y           na        2  1800
# 11          NaN    NaN         NaN          NaN          NaN      NaN   NaN

空值数据,上表包含了几种空数据:

        pandas 读取后当做:np.NaN:n/a、NA、两个风格符之间什么不写、

        pandas 读取后当做字符串处理: --、na、空格、''

清洗空值数据

语法:DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

参数说明:

  • axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
  • how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
  • thresh:设置需要多少非空值的数据才可以保留下来的。
  • subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
  • inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

注意:简单粗暴,但实际可能清除掉了有效数据,常用清除空行,且修改源数据源。

df.dropna(how="all",inplace=True)
print(df)

注意:后续处理可以针对整个df ,也可以是几列df["col1"]

空值处置-缺失值自定义处置[导入时]

Pandas 把 n/a、NA、两个分隔符之间什么不写的 当作np.Nan空数据,但是有很多情况如na、--、''、空格、等自定义的空数据不被处置成空数据,可以通过na_values 配置缺失值为np.NaN

csv_file = StringIO(csv_data)
df2 = pd.read_csv(csv_file, na_values=["n/a", "na", "--", "\'\'", " "])
df2.dropna(how="all", inplace=True)
print(df2)
#             PID  ST_NUM     ST_NAME OWN_OCCUPIED  NUM_BEDROOMS NUM_BATH   SQ_FT
# 0   100001000.0   104.0      PUTNAM            Y           3.0        1  1000.0
# 1   100002000.0   197.0   LEXINGTON            N           3.0      1.5     NaN
# 2   100003000.0     NaN   LEXINGTON            N           NaN        1   850.0
# 3   100004000.0   201.0    BERKELEY           12           1.0      NaN   700.0
# 4           NaN   203.0    BERKELEY            Y           3.0        2  1600.0
# 5   100006000.0   207.0    BERKELEY            Y           NaN        1   800.0
# 6   100007000.0     NaN  WASHINGTON          NaN           2.0   HURLEY   950.0
# 7   100008000.0   213.0     TREMONT            Y           1.0        1     NaN
# 8   100009000.0   215.0     TREMONT            Y           NaN        2  1800.0
# 9   100009000.0   215.0     TREMONT            Y           NaN        2  1800.0
# 10  100009000.0   215.0     TREMONT            Y           NaN        2  1800.0

空值处理-填充[内存df]

自定义值填充fillna
# 所有空值 0 填充,不仅仅是0 其他值也可以
df3=df2.fillna(0)
print(df3)
空值后面的第一个有效值填充bfill
# 空值填充 使用 空值后面的第一个有效值填充 ,axis=0 同列下一行的值 ,axis=1 同行下一列的值 ,
df3 = df2.bfill(axis=0)
print(df3)
空值前面的最后一个有效值填充ffill
# 空值填充 使用 空值前面的最后一个有效值填充 ,axis=0 同列上一行的值 ,axis=1 同行前一列的值 ,
df3 = df2.ffill(axis=0)
print(df3)
数学值填充

某些特定含义的列,如果需要进行空值填充,不建议填充成0,会导致一些整列评估问题等。

针对此类列值替换空单元格的常用方法是计算列的均值、中位数值或众数。

Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)。

csv_file = StringIO(csv_data)
df = pd.read_csv(csv_file, na_values=["n/a", "na", "--", "\'\'", " "])
df.dropna(how="all", inplace=True)
print(df)
# x = df["ST_NUM"].mean()
# x = df["ST_NUM"].median()
x = df["ST_NUM"].mode().values[0]
df["ST_NUM"] = df["ST_NUM"].fillna(x)
print(df)
自定义替换-replace
df = df.replace('', np.nan) # 所有空字符串 替换 np.nan ,
df = df[["Age", "Money"]].replace('', np.nan) # 指定列 

清洗格式错误数据

可以通过包含空单元格的行,或者将列中的所有单元格转换为相同格式的数据。

# 第三个日期格式错误
data = {
    "Date": ['2020/12/01', '2020/12/02', '20201226'],
    "duration": [50, 40, 45]
}
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['Date'], format='mixed')

print(df.to_string())
#         Date  duration
# 0 2020-12-01        50
# 1 2020-12-02        40
# 2 2020-12-26        45

清洗错误数据

数据错误,可以对错误的数据进行替换或移除。

修改

person = {
    "name": ['zs', 'ls', 'ww'],
    "age": [50, 40, 12345]  # 12345 年龄数据是错误的
}
df = pd.DataFrame(person)
# 修改数据
df.loc[2, 'age'] = 30  
# 或者 条件判断修改
# for x in df.index:
#     if df.loc[x, "age"] > 120:
#         df.loc[x, "age"] = 120
print(df.to_string())

删除

person = {
    "name": ['zs', 'ls', 'ww'],
    "age": [50, 40, 12345]  # 12345 年龄数据是错误的
}
df = pd.DataFrame(person)
for x in df.index:
    if df.loc[x, "age"] > 120:
        df.drop(x, inplace=True)
print(df.to_string())
#   name  age
# 0   zs   50
# 1   ls   40

清洗重复数据

要清洗重复数据,可以使用 duplicated() 和 drop_duplicates() 方法。

过滤:duplicated() 会返回 True,否则返回 False  过滤去除重复的

from io import StringIO
import pandas as pd

csv_data = """
PID,ST_NUM,ST_NAME,OWN_OCCUPIED,NUM_BEDROOMS,NUM_BATH,SQ_FT
100001000,104,PUTNAM,Y,3,1,1000
100002000,197,LEXINGTON,N,3,1.5,--
100003000, ,LEXINGTON,N,n/a,1,850
100004000,201,BERKELEY,12,1,NaN,700
,203,BERKELEY,Y,3,2,1600
100006000,207,BERKELEY,Y,NA,1,800
100007000,NA,WASHINGTON,'',2,HURLEY,950
100008000,213,TREMONT,Y,1,1,
100009000,215,TREMONT,Y,na,2,1800
100009000.0,215.0,TREMONT,Y,na,2,1800
100009000.0,215.0,TREMONT,Y,na,2,1800
,,,,,,
"""

# 使用StringIO来模拟文件对象
csv_file = StringIO(csv_data)
df = pd.read_csv(csv_file, na_values=['--', '', "\'\'", "na"])
df.dropna(how='all', inplace=True)
print(df)
#             PID ST_NUM     ST_NAME OWN_OCCUPIED  NUM_BEDROOMS NUM_BATH   SQ_FT
# 0   100001000.0    104      PUTNAM            Y           3.0        1  1000.0
# 1   100002000.0    197   LEXINGTON            N           3.0      1.5     NaN
# 2   100003000.0          LEXINGTON            N           NaN        1   850.0
# 3   100004000.0    201    BERKELEY           12           1.0      NaN   700.0
# 4           NaN    203    BERKELEY            Y           3.0        2  1600.0
# 5   100006000.0    207    BERKELEY            Y           NaN        1   800.0
# 6   100007000.0    NaN  WASHINGTON          NaN           2.0   HURLEY   950.0
# 7   100008000.0    213     TREMONT            Y           1.0        1     NaN
# 8   100009000.0    215     TREMONT            Y           NaN        2  1800.0
# 9   100009000.0  215.0     TREMONT            Y           NaN        2  1800.0
# 10  100009000.0  215.0     TREMONT            Y           NaN        2  1800.0

print(df[~df.duplicated()])
#            PID ST_NUM     ST_NAME OWN_OCCUPIED  NUM_BEDROOMS NUM_BATH   SQ_FT
# 0  100001000.0    104      PUTNAM            Y           3.0        1  1000.0
# 1  100002000.0    197   LEXINGTON            N           3.0      1.5     NaN
# 2  100003000.0          LEXINGTON            N           NaN        1   850.0
# 3  100004000.0    201    BERKELEY           12           1.0      NaN   700.0
# 4          NaN    203    BERKELEY            Y           3.0        2  1600.0
# 5  100006000.0    207    BERKELEY            Y           NaN        1   800.0
# 6  100007000.0    NaN  WASHINGTON          NaN           2.0   HURLEY   950.0
# 7  100008000.0    213     TREMONT            Y           1.0        1     NaN
# 8  100009000.0    215     TREMONT            Y           NaN        2  1800.0
# 9  100009000.0  215.0     TREMONT            Y           NaN        2  1800.0

删除

df.drop_duplicates(inplace = True)

Pandas相关性分析

相关性计算df.corr

通过计算不同变量之间的相关系数来了解它们之间的关系

语法:df.corr(method='pearson', min_periods=1)

核心参数:

  • method (可选): 字符串类型,用于指定计算相关系数的方法。默认是 'pearson',还可以选择 'kendall'(Kendall Tau 相关系数)或 'spearman'(Spearman 秩相关系数)。

    • Pearson 相关系数: 即皮尔逊相关系数,用于衡量了两个变量之间的线性关系强度和方向。它的取值范围在 -1 到 1 之间,其中 -1 表示完全负相关,1 表示完全正相关,0 表示无线性相关。可以使用 corr() 方法计算数据框中各列之间的 Pearson 相关系数。
    • Spearman 相关系数:即斯皮尔曼相关系数,是一种秩相关系数。用于衡量两个变量之间的单调关系,即不一定是线性关系。它通过比较变量的秩次来计算相关性。可以使用 corr(method='spearman') 方法计算数据框中各列之间的 Spearman 相关系数。
  • min_periods (可选): 表示计算相关系数时所需的最小观测值数量。默认值是 1,即只要有至少一个非空值,就会进行计算。如果指定了 min_periods,并且在某些列中的非空值数量小于该值,则相应列的相关系数将被设为 NaN。

返回值:是一个相关系数矩阵,矩阵的行和列对应数据框的列名,矩阵的元素是对应列之间的相关系数。

示例:

import sys
import warnings
from io import StringIO
import seaborn as sns
import matplotlib.pyplot as plt

import numpy as np
import pandas as pd
warnings.filterwarnings('ignore')

csv_data = """
PID,ST_NUM,ST_NAME,OWN_OCCUPIED,NUM_BEDROOMS,NUM_BATH,SQ_FT
100001000,104,PUTNAM,Y,3,1,1000
100002000,197,LEXINGTON,N,3,1.5,--
100003000, ,LEXINGTON,N,n/a,1,850
100004000,201,BERKELEY,12,1,NaN,700
,203,BERKELEY,Y,3,2,1600
100006000,207,BERKELEY,Y,NA,1,800
100007000,NA,WASHINGTON,'',2,HURLEY,950
100008000,213,TREMONT,Y,1,1,
100009000,215,TREMONT,Y,na,2,1800
100009000.0,215.0,TREMONT,Y,na,2,1800
100009000.0,215.0,TREMONT,Y,na,2,1800
,,,,,,
"""

# 使用StringIO来模拟文件对象
csv_file = StringIO(csv_data)
df = pd.read_csv(csv_file, na_values=['--', '', "\'\'", "na", ' '])
df.dropna(how='all', inplace=True)
# print(df,df.dtypes)

# 去除ID 空值  数据
df_result = df[df["PID"].notna()]

# 使用drop_duplicates()去除重复的ID
# df_result = df_result.drop_duplicates(subset='PID', keep='first')
print(df_result,df_result.dtypes)
# PID             float64
# ST_NUM          float64
# ST_NAME          object
# OWN_OCCUPIED     object
# NUM_BEDROOMS    float64
# NUM_BATH         object
# SQ_FT           float64
# dtype: object

# 类型转换
df_result["PID"] = df_result["PID"].astype(str)
df_result["ST_NUM"] = df_result["ST_NUM"].astype(np.float16)
# 注意:np的int  没有NaN类型 ,.astype(np.int16) 报错
df_result["NUM_BEDROOMS"] = df_result["NUM_BEDROOMS"].astype(np.float16)
df_result["SQ_FT"] = df_result["SQ_FT"].astype(np.float16)

print(df_result,df_result.dtypes)
#            PID  ST_NUM     ST_NAME OWN_OCCUPIED  NUM_BEDROOMS NUM_BATH   SQ_FT
# 0   100001000.0   104.0      PUTNAM            Y           3.0        1  1000.0
# 1   100002000.0   197.0   LEXINGTON            N           3.0      1.5     NaN
# 2   100003000.0     NaN   LEXINGTON            N           NaN        1   850.0
# 3   100004000.0   201.0    BERKELEY           12           1.0      NaN   700.0
# 5   100006000.0   207.0    BERKELEY            Y           NaN        1   800.0
# 6   100007000.0     NaN  WASHINGTON          NaN           2.0   HURLEY   950.0
# 7   100008000.0   213.0     TREMONT            Y           1.0        1     NaN
# 8   100009000.0   215.0     TREMONT            Y           NaN        2  1800.0
# 9   100009000.0   215.0     TREMONT            Y           NaN        2  1800.0
# 10  100009000.0   215.0     TREMONT            Y           NaN        2  1800.0

# PID              object
# ST_NUM          float16
# ST_NAME          object
# OWN_OCCUPIED     object
# NUM_BEDROOMS    float16
# NUM_BATH         object
# SQ_FT           float16
# dtype: object

def getAvg(row):
    return (row["ST_NUM"] + row["NUM_BEDROOMS"]+ row["SQ_FT"])/3
# 计算 每人 数值列 平均值
df_result["agg"]=df_result.apply(lambda row:getAvg(row),axis=1)
# 计算 Pearson 相关系数
correlation_matrix = df_result[["ST_NUM","NUM_BEDROOMS","SQ_FT","agg"]].copy().corr()
print("*"*10)
print(correlation_matrix)

#                 ST_NUM  NUM_BEDROOMS     SQ_FT  agg
# ST_NUM        1.000000     -0.648580  0.405672 -1.0
# NUM_BEDROOMS -0.648580      1.000000  0.933257  1.0
# SQ_FT         0.405672      0.933257  1.000000  1.0
# agg          -1.000000      1.000000  1.000000  1.0

# 使用热图可视化 Pearson 相关系数
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.show()

结果分析

                ST_NUM  NUM_BEDROOMS     SQ_FT  agg
ST_NUM        1.000000     -0.648580  0.405672 -1.0
NUM_BEDROOMS -0.648580      1.000000  0.933257  1.0
SQ_FT         0.405672      0.933257  1.000000  1.0
agg          -1.000000      1.000000  1.000000  1.0

理解:如ST_NUM 与agg  列  -1 完全负相关

计算Spearman系数

# 计算 Spearman 相关系数
spearman_correlation_matrix = df_result[["ST_NUM","NUM_BEDROOMS","SQ_FT","agg"]].corr(method='spearman')
print(spearman_correlation_matrix)
#                 ST_NUM  NUM_BEDROOMS     SQ_FT  agg
# ST_NUM        1.000000     -0.894427  0.806452 -1.0
# NUM_BEDROOMS -0.894427      1.000000  1.000000  1.0
# SQ_FT         0.806452      1.000000  1.000000  1.0
# agg          -1.000000      1.000000  1.000000  1.0
sns.heatmap(spearman_correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.show()

理解:如ST_NUM 与agg  列  -1  单调负相关。

相关性可视化

        Seaborn 是一个基于 Matplotlib 的数据可视化库,专注于统计图形的绘制,旨在简化数据可视化的过程。在Matplotlib基础上进行了更高级的封装,使得数据可视化更加简单和美观。

        Seaborn 提供了一些简单的高级接口,可以轻松地绘制各种统计图形,包括散点图、折线图、柱状图、热图等,而且具有良好的美学效果。

热力图使用

# 计算 Pearson 相关系数
correlation_matrix = df.corr()
# 使用热图可视化 Pearson 相关系数
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.show()

将生成一个热图如上,用颜色表示相关系数的强度,其中正相关用温暖色调表示,负相关用冷色调表示。annot=True 参数在热图上显示具体的数值。

更多统计图形类型:

        散点图(Scatter plot):使用seaborn.scatterplot(x=[],y=[])函数可以绘制散点图,用于展示两个连续变量之间的关系。

        折线图(Line plot):使用seaborn.lineplot(x=[],y=[])函数可以绘制折线图,用于展示连续变量随着另一个变量的变化而变化的趋势。

        柱状图(Bar plot):使用seaborn.barplot(x=[],y=[])函数可以绘制柱状图,用于展示分类变量之间的比较。

        箱线图(Box plot):使用seaborn.boxplot()函数可以绘制箱线图,用于展示一组数据的分布情况,包括中位数、四分位数和异常值等。

        热力图(Heatmap):使用seaborn.heatmap()函数可以绘制热力图,用于展示两个分类变量之间的相关性。

        直方图(Histogram):使用sns.histplot()函数来绘制直方图。直方图将数值范围分成多个间隔(bin),并计算每个间隔内的观测值数量。直方图的x轴表示数值范围,y轴表示观测值数量。
        密度图(Density Plot):使用sns.kdeplot()函数来绘制核密度估计图。密度图通过平滑的曲线来估计数值变量的概率密度函数。密度图的x轴表示数值范围,y轴表示概率密度。
        树状图: sns.clustermap():绘制树状图,用于展示数据集中观察之间的相似性,并按照相似性分组
除了以上几种常见的统计图形类型,Seaborn还提供了其他一些更高级的图形类型,如密度图(Density plot)、面积图(Area plot)和小提琴图(Violin plot)等。这些图形类型可以根据数据集的特点进行选择和定制,使得数据可视化更加直观和有趣。

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

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

相关文章

新零售解决方案:线上线下融合,驱动现代商业新浪潮-亿发

在数字化和智能化的商业环境中,新零售正在迅速改变传统的商业模式。作为新时代的零售解决方案,新零售通过线上线下深度结合,为企业提供了更灵活、高效的运营方式。本文将探讨新零售的四大特征,并详细描述其在中小企业中的应用&…

MySQL的DML语句

文章目录 ☃️概述☃️DML☃️添加数据☃️更新和删除数据☃️DML的重要性 ☃️概述 MySQL 通用语法分类 ● DDL: 数据定义语言,用来 定义数据库对象(数据库、表、字段) ● DML: 数据操作语言,用来对数据库表中的数据进行增删改 …

深入解析Transformer架构:大模型核心技术揭秘

在大模型发展历程中,有两个比较重要点:第一,Transformer 架构。它是模型的底座,但 Transformer 不等于大模型,但大模型的架构可以基于 Transformer;第二,GPT。严格意义上讲,GPT 可能…

MySQL数据备份操作步骤

常见的数据备份命令 备份命令备份速度恢复速度介绍功能适用场景lvm2快照快快一般、支持几乎热备、速度快一般中小型数据量的备份cp快快物理备份、灵活性低很弱少量数据备份xtrabackup较快较快实现innodb热备、对存储引擎有要求强大较大规模的备份mysqldump慢慢逻辑备份、适用所…

易管理工厂设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

解决无限debugger总结

基本工具 1: Notepad(修改保存) ReRes(插件替换) ReRes安装教程 2: Fidder 编程猫 hook 情况 fidder基本:fidder插件使用hook构造器, 例如下 //配合编程猫专用工具进行hook (function() { use strict//过瑞数 debuger var eval_ window.eval; window.eval_ …

2007年-2021年 281个地级市-绿色创新效率相关数据收集

绿色创新效率是一个重要的概念,它涉及到在生产和消费过程中通过技术创新和管理创新来提高资源的利用效率,降低生产成本,减少对环境的负面影响,进而促进经济的可持续发展。这种效率的提升对企业、环境和社会都有积极的影响&#xf…

ffmpeg+nginx+video实现rtsp流转hls流,web页面播放

项目场景: 最近调试海康摄像头需要将rtsp流在html页面播放,因为不想去折腾推拉流,所以我选择ffmpeg转hls流,nginx转发,html直接访问就好了 1.首先要下载nginx和ffmpeg 附上下载地址: nginx nginx news ffmpeg htt…

昇思25天学习打卡营第3天|数据集 Dataset

1. 学习内容复盘 集数据 什么是数据集 数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transforms)实…

如何快速熟悉新公司产品

业务流程图 刚刚入职一家新公司,一般肯定是想快速提现自己的价值,让公司知道招聘到自己真是一件赚到的事情,但是往往我们都是接着上个产品的锅,不知道从何下手。 如果之前了解一点业务还好说,但是大部分时候我们做产品…

VB.net实战(VSTO):VSTOwpf体验框架打包教程

如果是考虑到Wps用户较多,就不建议采用侧边栏的形式 只是个体验框架,界面未作美化,office的用户可以用任意一种窗体,喜欢那个界面就写那个界面,wps的侧边栏只能弹出一部分,每次需要的手动拖动。 打包了案例…

力扣SQL50 项目员工 I ROUND AVG

Problem: 1075. 项目员工 I 👨‍🏫 参考题解 Code select project_id,ROUND(AVG(e.experience_years),2) as average_years FROMproject as p LEFT JOINemployee as e ONp.employee_id e.employee_id GROUP BYp.project_id;

智慧公厕系统厂家的核心技术与光明源应用案例

随着城市化进程的加快和智慧城市建设的推进,智慧公厕系统在提升公共服务质量和用户体验方面发挥了重要作用。智慧公厕系统厂家的核心技术是确保这一系统高效运转和用户满意度的关键。以下将介绍智慧公厕系统厂家的核心技术,并通过光明源的应用案例展示其…

【网络安全的神秘世界】docker启动失败?看我如何成功启动

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 🙋‍♂️问题描述 关闭docker后再启动就发现启动失败了 错误信息:Job for docker.service failed b…

分流井设备的监测控制和智慧运维

分流井是一种用于将雨水和污水进行分离的设施,通常设置在雨水管和污水管的汇合处。它可以根据不同的情况,将雨水和污水分别排放到不同的管道中,从而实现雨污分流的目的。 以下是一些常见的分流井类型和工作原理: 1、智能分流井&a…

WPF——Binding

一、作用 将Window GUI的运行机理从 “事件驱动” 转变为 “数据驱动”。将UI界面与业务逻辑解耦,使得改动一个而无需改动另一个。数据逻辑层自成体系,使得无需借助UI也可进行单元测试。 二、基础 1. Binding源模板 Binding包括源与目标,源…

反激开关电源输出假负载

1、为何需要假负载? 开关电源芯片的占空比最小不可能做到0%,都有一个最小导通时间,不过最小导通时间,在规格书中,不一定给出来 注意:如果没有最小导通时间,就相当于芯片都停止输出了&#xff…

侠客短视频解析,一款便捷的聚合短视频解析下载工具

软件链接:聚合视频下载神器,任何平台,任何资源,轻松下载! 现在短视频已成为人们获取信息和娱乐的重要渠道。随着短视频平台的增多,用户经常会遇到想要下载视频以便离线观看的需求。今天,我们就…

去水印助手,小熊录屏,OldRoll复古胶片相机

我们将带大家了解三款特色应用,软件是经过大佬处理过的,都非常的好用!今天分享给大家!如果你也喜欢这几款软件不要忘记给博主点击点赞和再看哦! 软件获取链接在链接的底部: 一键去水印助手 无论您是在各大社交平台上…

Spring MVC拦截器、文件上传和全局异常处理

目录 1.拦截器1.1.什么是拦截器?1.2 拦截器的API1.3 拦截器的执行顺序1.5 自定义拦截器1.5 登录拦截器案例 2.文件上传2.1 添加依赖2.2 配置文件上传解析器2.3 编写控制器2.4 编写jsp页面2.5 注意事项 3.全局异常处理器3.1 异常处理思路3.2 创建异常处理器3.3 编写异…