【数据挖掘】实验4:数据探索
实验4:数据探索
一:实验目的与要求
1:熟悉和掌握数据探索,学习数据质量分类、数据特征分析和R语言的主要数据探索函数。
二:实验内容
1:数据质量分析
2:统计量分析
3:贡献度分析
4:相关性分析
5:统计特征函数
三:课堂练习
【练习1】PPT-06第12页——检测餐饮销售数据缺失值和异常值
第一步:用setwd设置工作空间
setwd('C:\\Users\\86158\\Desktop') getwd() |
第二步:读入数据
saledata <- read.csv(file="catering_sale.csv", header=TRUE, fileEncoding="GB2312") saledata |
完整运行结果:
日期 销量 1 2015/3/1 51.00 2 2015/2/28 2618.20 3 2015/2/27 2608.40 4 2015/2/26 2651.90 5 2015/2/25 3442.10 6 2015/2/24 3393.10 7 2015/2/23 3136.60 8 2015/2/22 3744.10 9 2015/2/21 6607.40 10 2015/2/20 4060.30 11 2015/2/19 3614.70 12 2015/2/18 3295.50 13 2015/2/16 2332.10 14 2015/2/15 2699.30 15 2015/2/14 NA 16 2015/2/13 3036.80 17 2015/2/12 865.00 18 2015/2/11 3014.30 19 2015/2/10 2742.80 20 2015/2/9 2173.50 21 2015/2/8 3161.80 22 2015/2/7 3023.80 23 2015/2/6 2998.10 24 2015/2/5 2805.90 25 2015/2/4 2383.40 26 2015/2/3 2620.20 27 2015/2/2 2600.00 28 2015/2/1 2358.60 29 2015/1/31 2682.20 30 2015/1/30 2766.80 31 2015/1/29 2618.80 32 2015/1/28 2714.30 33 2015/1/27 2280.80 34 2015/1/26 2414.00 35 2015/1/25 3130.60 36 2015/1/24 2716.90 37 2015/1/23 2930.80 38 2015/1/22 2504.90 39 2015/1/21 2559.50 40 2015/1/20 2168.60 41 2015/1/19 2436.40 42 2015/1/18 3234.30 43 2015/1/17 3061.00 44 2015/1/16 2900.10 45 2015/1/15 2646.80 46 2015/1/14 2615.20 47 2015/1/13 2124.40 48 2015/1/12 1958.00 49 2015/1/8 2259.10 50 2015/1/7 2419.80 51 2015/1/6 2775.00 52 2015/1/5 2594.90 53 2015/1/4 2468.30 54 2015/1/3 3004.30 55 2015/1/2 3313.30 56 2015/1/1 3613.60 57 2014/12/31 2655.90 58 2014/12/30 2644.30 59 2014/12/29 2565.30 60 2014/12/27 2525.90 61 2014/12/26 2778.00 62 2014/12/25 2542.10 63 2014/12/24 2473.30 64 2014/12/23 2240.10 65 2014/12/22 2575.00 66 2014/12/21 3802.80 67 2014/12/18 2274.70 68 2014/12/17 2687.20 69 2014/12/16 2577.80 70 2014/12/15 2583.00 71 2014/12/14 3282.60 72 2014/12/13 3113.70 73 2014/12/12 2661.40 74 2014/12/11 2553.20 75 2014/12/10 2511.30 76 2014/12/9 2710.30 77 2014/12/8 2468.10 78 2014/12/7 3041.50 79 2014/12/6 3178.90 80 2014/12/5 2594.40 81 2014/12/4 2381.10 82 2014/12/3 2415.00 83 2014/12/2 2236.40 84 2014/11/30 3207.20 85 2014/11/29 3059.50 86 2014/11/28 3039.10 87 2014/11/26 2817.50 88 2014/11/25 2891.80 89 2014/11/24 2470.10 90 2014/11/23 3556.60 91 2014/11/22 3397.70 92 2014/11/20 2761.60 93 2014/11/19 2618.20 94 2014/11/18 2758.30 95 2014/11/17 2614.30 96 2014/11/16 3437.10 97 2014/11/15 3250.00 98 2014/11/14 3063.70 99 2014/11/13 2839.20 100 2014/11/12 2360.90 101 2014/11/11 2158.50 102 2014/11/10 2005.50 103 2014/11/9 3236.40 104 2014/11/8 22.00 105 2014/11/7 2452.60 106 2014/11/6 2265.00 107 2014/11/5 2566.10 108 2014/11/4 2527.20 109 2014/11/3 2326.50 110 2014/11/2 2941.90 111 2014/11/1 60.00 112 2014/10/31 2520.90 113 2014/10/30 2446.20 114 2014/10/29 2549.40 115 2014/10/28 2449.30 116 2014/10/27 2162.50 117 2014/10/26 2781.30 118 2014/10/25 3060.60 119 2014/10/24 2064.00 120 2014/10/22 2439.70 121 2014/10/21 2476.20 122 2014/10/20 2478.30 123 2014/10/19 2826.20 124 2014/10/18 2924.80 125 2014/10/17 2417.50 126 2014/10/16 2450.10 127 2014/10/15 2533.00 128 2014/10/14 2238.70 129 2014/10/13 2388.80 130 2014/10/12 3291.30 131 2014/10/11 2738.80 132 2014/10/10 2344.10 133 2014/10/9 2068.80 134 2014/10/8 3185.30 135 2014/10/7 2778.60 136 2014/10/6 2921.10 137 2014/10/5 2524.30 138 2014/10/4 3057.10 139 2014/10/3 3039.60 140 2014/10/2 3193.40 141 2014/10/1 3075.40 142 2014/9/30 2847.60 143 2014/9/29 2311.40 144 2014/9/28 2327.30 145 2014/9/27 9106.44 146 2014/9/26 2616.60 147 2014/9/25 2620.20 148 2014/9/24 2616.40 149 2014/9/23 2655.80 150 2014/9/22 2310.70 151 2014/9/21 2935.80 152 2014/9/20 3017.90 153 2014/9/19 2625.50 154 2014/9/18 2752.70 155 2014/9/17 2181.50 156 2014/9/16 2440.50 157 2014/9/15 2422.80 158 2014/9/14 2583.60 159 2014/9/13 2728.90 160 2014/9/12 2525.30 161 2014/9/11 2531.70 162 2014/9/10 2300.50 163 2014/9/9 2097.50 164 2014/9/8 4065.20 165 2014/9/7 3555.20 166 2014/9/6 3462.50 167 2014/9/5 3033.10 168 2014/9/4 2926.10 169 2014/9/3 2431.40 170 2014/9/2 2706.00 171 2014/9/1 3049.90 172 2014/8/31 3494.70 173 2014/8/30 3691.90 174 2014/8/29 2929.50 175 2014/8/28 2760.60 176 2014/8/27 2593.70 177 2014/8/26 2884.40 178 2014/8/25 2591.30 179 2014/8/24 3022.60 180 2014/8/23 3052.10 181 2014/8/22 2789.20 182 2014/8/21 2909.80 183 2014/8/20 2326.80 184 2014/8/19 2453.10 185 2014/8/18 2351.20 186 2014/8/17 3279.10 187 2014/8/16 3381.90 188 2014/8/15 2988.10 189 2014/8/14 2577.70 190 2014/8/13 2332.30 191 2014/8/12 2518.60 192 2014/8/11 2697.50 193 2014/8/10 3244.70 194 2014/8/9 3346.70 195 2014/8/8 2900.60 196 2014/8/7 2759.10 197 2014/8/6 2915.80 198 2014/8/5 2618.10 199 2014/8/4 2993.00 200 2014/8/3 3436.40 201 2014/8/2 2261.70 |
第三步:缺失值检测并打印结果
sum(complete.cases(saledata)) sum(!complete.cases(saledata)) mean(!complete.cases(saledata)) saledata[!complete.cases(saledata),] |
第四步:异常值检测箱线图(扩展)
boxplot(saledata$销量, main="销售数据异常值检测", ylab="销售额", na.rm = TRUE) |
第五步:带有数值的异常值检测箱线图
# 异常值检测箱线图 sp <- boxplot(saledata$"销量", boxwex = 0.7) title("销量异常值检测箱线图") xi <- 1.1 sd.s <- sd(saledata[complete.cases(saledata), ]$"销量") mn.s <- mean(saledata[complete.cases(saledata), ]$"销量") points(xi, mn.s, col = "red", pch = 18) arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1) text(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)), labels = sp$out[order(sp$out)], sp$out[order(sp$out)] + rep(c(150, -150, 150, -150), length = length(sp$out)), col = "red") |
【练习2】PPT-06第32页——餐饮销售数据统计量分析
第一步:读入数据
sales <- saledata[, 2] sales |
第二步:计算均值
mean_ <- mean(sales, na.rm = T) mean_ |
第三步:计算中位数
median_ <- median(sales, na.rm = T) median_ |
第四步:计算极差
range_ <- max(sales, na.rm = T) - min(sales, na.rm = T) range_ |
第五步:计算标准差
std_ <- sqrt(var(sales, na.rm = T)) std_ |
第六步:计算变异系数
variation_ <- std_ / mean_ variation_ |
第七步:计算四分位数间距
q1 <- quantile(sales, 0.25, na.rm = T) q3 <- quantile(sales, 0.75, na.rm = T) distance <- q3 - q1 a <- matrix(c(mean_, median_, range_, std_, variation_, q1, q3, distance), 1, byrow = T) colnames(a) <- c("均值", "中位数", "极差", "标准差", "变异系数", "1/4分位数", "3/4分位数", "四分位间距") print(a) |
【练习3】PPT-06第37页——菜品盈利贡献度统计量分析
第一步:读取菜品数据
dishdata <- read.csv(file = "catering_dish_profit.csv",fileEncoding="GB2312") dishdata |
第二步:绘制帕累托图
barplot(dishdata[, 3], col = "blue1", names.arg = dishdata[, 2], width = 1, space = 0, ylim = c(0, 10000), xlab = "菜品", ylab = "盈利:元") accratio <- dishdata[, 3] for ( i in 1:length(accratio)) { accratio[i] <- sum(dishdata[1:i, 3]) / sum(dishdata[, 3]) } par(new = T, mar = c(4, 4, 4, 4)) points(accratio * 10000 ~ c((1:length(accratio) - 0.5)), new = FALSE, type = "b", new = T) axis(4, col = "red", col.axis = "red", at = 0:10000, label = c(0:10000 / 10000)) mtext("累积百分比", 4, 2) points(6.5, accratio[7] * 10000, col="red") text(7, accratio[7] * 10000,paste(round(accratio[7] + 0.00001, 4) * 100, "%")) |
【练习4】PPT-06第45页——餐饮销售数据相关性分析
第一步:读取数据
cordata <- read.csv(file = "catering_sale_all.csv", header = TRUE,fileEncoding="GB2312") cordata |
完整运行结果:
日期 百合酱蒸凤爪 翡翠蒸香茜饺 金银蒜汁蒸排骨 乐膳真味鸡 蜜汁焗餐包 1 2015/1/1 17 6 8 24 13 2 2015/1/2 11 15 14 13 9 3 2015/1/3 10 8 12 13 8 4 2015/1/4 9 6 6 3 10 5 2015/1/5 4 10 13 8 12 6 2015/1/6 13 10 13 16 8 7 2015/1/7 9 7 13 8 5 8 2015/1/8 9 12 13 6 7 9 2015/1/12 6 8 8 3 NA 10 2015/1/13 9 11 13 6 8 11 2015/1/14 6 7 8 9 4 12 2015/1/15 5 9 4 7 8 13 2015/1/16 9 7 11 9 11 14 2015/1/17 10 8 10 6 14 15 2015/1/18 13 12 12 10 9 16 2015/1/19 4 8 12 11 9 17 2015/1/20 6 12 10 9 11 18 2015/1/21 9 15 4 12 7 19 2015/1/22 3 10 13 13 13 20 2015/1/23 8 7 9 20 5 21 2015/1/24 11 6 11 8 7 22 2015/1/25 11 6 5 15 7 23 2015/1/26 4 7 10 7 6 24 2015/1/27 7 5 6 7 12 25 2015/1/28 8 8 12 14 8 26 2015/1/29 4 10 12 9 7 27 2015/1/30 6 7 7 11 7 28 2015/1/31 8 5 11 10 8 29 2015/2/1 8 6 7 9 6 生炒菜心 铁板酸菜豆腐 香煎韭菜饺 香煎罗卜糕 原汁原味菜心 1 13 18 10 10 27 2 10 19 13 14 13 3 3 7 11 10 9 4 9 9 13 14 13 5 10 17 11 13 14 6 9 12 11 5 9 7 7 10 8 10 7 8 8 6 12 11 5 9 4 5 5 7 10 10 7 6 9 8 9 11 7 8 5 3 10 12 9 15 9 13 9 13 8 14 9 9 15 14 13 16 9 4 14 15 11 8 12 9 15 16 7 10 6 11 11 17 4 8 14 6 13 18 9 1 5 12 8 19 8 13 5 11 11 20 12 8 7 8 11 21 8 9 7 10 9 22 14 14 7 6 8 23 10 9 12 7 5 24 15 6 12 9 4 25 11 7 12 10 6 26 8 8 10 10 11 27 7 9 16 10 11 28 11 8 10 10 9 29 4 6 11 6 9 |
第二步:求出相关系数矩阵
cor(cordata[, 2:11]) |
【练习5】PPT-06第51页
Eg1:计算两个列向量的相关系数,采用Spearman方法
x = c(1:8) y = c(2:9) R = cor(x,y,method="spearman") R |
Eg2:计算20×5随机矩阵的协方差矩阵
X = matrix(rnorm(100),20,5) R = cor(X) R |
四:实验知识点总结
1:数据质量分析是数据预处理的前提,其主要任务是检查原始数据中是否存在脏数据。脏数据主要包括:缺失值、异常值、不一致的值、重复数据和含有特殊符号的数据。
2:缺失值分析包括:(1)统计缺失值的变量个数;(2)统计每个变量的未缺失数;(3)统计变量的缺失数和缺失率;
3:异常值分析方法包括:(1)简单统计量分析;(2)3σ原则;(3)箱型图分析;
4:数据的不一致性是数据的矛盾性和不相容性,不一致数据的产生主要发生在数据集成的过程中。
5:数据特征分析的方法包括:(1)分布分析;(2)对比分析;(3)统计量分析;(4)周期性分析;(5)贡献度分析;(6)相关性分析;
6:常用的统计特征函数。
五:遇到的问题和解决方法
问题1:在读入csv数据时,出现以下报错。这个报错信息表明在尝试读取CSV文件时遇到了编码问题,即文件中可能包含了非标准ASCII字符。
解决1:直接指定读取文件的确切编码,此处使用GB2312。
相关文章:

【数据挖掘】实验4:数据探索
实验4:数据探索 一:实验目的与要求 1:熟悉和掌握数据探索,学习数据质量分类、数据特征分析和R语言的主要数据探索函数。 二:实验内容 1:数据质量分析 2:统计量分析 3:贡献度分析…...
PTA后缀式求值(整型版)
作者 周强 单位 青岛大学 我们人类习惯于书写“中缀式”,如 3 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?) 而计算机更加习惯“后缀式”(也叫“逆波兰式”ÿ…...
FPGA与以太网相关接口知识
一:一般硬件架构;(对于1000m网一般都使用普通io口,普通管脚能跑800M(正点技术说的))) 1:FPGA普通管脚——phy芯片(pcspma)——rg45 2:FPGA(GT)光口(利用fpga的GT,直接节约了phy芯片…...

使用git+ssh访问github,避免下载资源失败
一、创建github账户之后,记住注册邮箱和账户名 我的邮箱:yuanyan23mails.ucas.ac.cn 账户名:thekingofjumpshoot 下边的相关位置需要用自己的邮箱和用户名替代 二、输入本地生成秘钥和公钥命令,并且生成公私钥对 ssh-keygen …...
cookie、session和token的区别
引言 在当今的互联网时代,Web 应用程序的安全性和用户体验至关重要。身份验证和状态管理是构建安全、可靠的 Web 应用的核心部分。cookie、session、token都是常用的身份验证和状态管理机制。 Cookie 什么是 Cookie? Cookie 是存储在用户浏览器中的小…...

如何解决Layui后台接口返回数据,但是table.render不渲染表格数据的问题
我这边进行了pareData数据格式转换,response重新定义了layui的参数格式规范 接口正常返回了数据 但是就是不渲染,我这个郁闷啊!! 忽然,我把后台重新定义的layui规定的格式参数,有个参数名叫data࿰…...

matlab 将矩阵写入文件
目录 一、概述1、算法概述2、主要函数二、将矩阵写入到文本文件三、将矩阵写入电子表格文件四、将矩阵写入指定的工作表和范围五、将数据追加到电子表格六、将矩阵数据追加到文本文件七、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此…...

pandas的综合练习
事先说明: 由于每次都要导入库和处理中文乱码问题,我都是在最前面先写好,后面的代码就不在写了。要是copy到自己本地的话,就要把下面的代码也copy下。 # 准备工作import pandas as pd import numpy as np from matplotlib impor…...

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会
会议背景 随着全球对清洁能源的迫切需求,氢能能源转型、工业应用、交通运输等方面具有广阔前景,氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示,到2050年,绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…...
非插件方式为wordpress添加一个额外的编辑器
在WordPress中,要添加一个额外的区块编辑器(通常指的是Gutenberg区块编辑器中的一个自定义区块),你需要编写一些PHP代码来注册新的区块,并可能还需要一些JavaScript来处理前端的逻辑。下面是一个简单的示例,展示了如何注册一个自定…...

Spark Stage
Spark Stage 什么是Stage Spark中的一个Stage只不过是物理执行计划其中的一个步骤,它是物理执行计划的一个执行单元。一个Job会被拆分为多组Task,每组任务被称为一个Stage,可以简单理解为MapReduce里面的Map Stage, Reduce Stag…...

【国家计算机二级考试C语言.2024】学习备忘录
说明 分值 4060100 40分: 这里面有一大堆程序结果选这题,如果手速还可以。那遇到有疑问的情况就自己去倒计算器的ad E上面去打一打。能够跑出来,结果那是100%的没问题。 有些概念题比较讨厌,只能自己去记忆了。要去背诵熟熟的。…...
十分钟掌握redis精髓指令
编译安装 git clone https://gitee.com/mirrors/redis.git cd redis make make test make install # 默认安装在 /usr/local/bin # redis-server 是服务端程序 # redis-cli 是客户端程序启动 mkdir redis-data # 把redis文件夹下 redis.conf 拷贝到 redis-data # 修改 redis.…...
突然断电导致git损坏修复
背景 使用ide开发时突然断电启动后所有文件都成了没有提交的文件。打开git视图日志也消失不见 # git命令执行结果如下 git status No commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: .github/FUNDING.ymlnew …...
MATLAB入门指南:从零开始进行数学建模竞赛
第1部分:认识MATLAB 1.1 什么是MATLAB? MATLAB(Matrix Laboratory的缩写)是一个高性能的数值计算环境和第四代编程语言。由MathWorks公司开发,它提供了一个便捷的数学解决框架,主要用于算法开发、数据可视…...

【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理
目录 🚩volatile关键字 🎈volatile 不保证原子性 🎈synchronized 也能保证内存可见性 🎈Volatile与Synchronized比较 🚩wait和notify 🎈wait()方法 💻wait(参数)方法 🎈noti…...

GitHub配置SSH Key(详细版本)
GitHub配置SSH Key的目的是为了帮助我们在通过git提交代码是,不需要繁琐的验证过程,简化操作流程。比如新建的仓库可以下载, 但是提交需要账号密码。 步骤 一、设置git的user name和email 如果你是第一次使用,或者还没有配置过的话需要操作…...

JavaScript 权威指南第七版(GPT 重译)(六)
第十五章:JavaScript 在 Web 浏览器中 JavaScript 语言是在 1994 年创建的,旨在使 Web 浏览器显示的文档具有动态行为。自那时以来,该语言已经发生了显著的演变,与此同时,Web 平台的范围和功能也迅速增长。今天&#…...
Learning to summarize from human feedback
Abstract 人工参考总结以及 ROUGE 指标只是我们真实关心的目标(总结质量)的粗略代表。通过优化人工偏好来显著提升总结质量使用大量高质量的人类比较来训练一个模型来预测人类偏好的总结使用这个模型作为奖励函数对总结策略进行强化学习微调我们模型的效果在 TL;DR 数据集上显…...
数据库迁移测试
数据迁移测试 在进行项目重构或者更新的时候或多或少会对数据库进行变更,为了保证业务的稳定性对数据进行迁移测试是很有必要的,因为数据就是业务的基石,没有数据业务都是空中楼阁,形同虚设,小编结合近期的工作对数据…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...