R语言实战第5章(1)

第一部分:数学、统计和字符处理函数
  • 数学和统计函数:R提供了丰富的数学和统计函数,用于执行各种计算和分析。这些函数可以帮助用户快速完成复杂的数学运算、统计分析等任务,例如计算均值、方差、相关系数、进行假设检验等。
  • 字符处理函数:R也提供了多种字符处理函数,用于操作和处理字符串数据。这些函数可以用于字符串的拼接、分割、替换、查找等操作,对于文本数据的处理非常有用。
第二部分:循环和条件执行以及自编函数
  • 循环和条件执行:这部分将讲解如何使用循环(如forwhile)和条件语句(如ifelse)来控制程序的流程。这些控制结构是编程中非常重要的部分,可以帮助用户实现复杂的逻辑和重复的操作。
  • 自编函数:用户可以自己编写函数来完成特定的数据处理和分析任务。这部分将介绍如何定义函数、设置函数的参数、返回值等,并且讲解如何在实际的数据处理中调用这些自编函数。
第三部分:数据整合与重塑
  • 数据整合与概述:这部分将介绍如何对数据进行整合和概述。整合数据时,可以使用内建函数或自编函数来获取数据的统计信息、汇总信息等,从而对数据有一个全面的了解。
  • 数据集的重塑和重构:数据集的重塑和重构是指将数据从一种格式转换为另一种格式,以满足不同的分析需求。例如,将宽格式的数据转换为长格式,或者将数据进行分组、合并等操作。

5.1 一个数据处理难题

问题背景

假设有一组学生参加了数学、科学和英语三门课程的考试。现在需要完成以下任务:

  1. 组合成绩:将三门课程的成绩组合成一个单一的成绩衡量指标。
  2. 评定等级:根据组合后的成绩,将学生分为不同的等级(A、B、C、D、E),每个等级包含20%的学生。
  3. 排序:按字母顺序对学生进行排序。
数据示例

表5-1展示了部分学生的成绩数据:

学生姓名数学科学英语
John Davis5029525
Angela Williams6009922
Bullwinkle Moose4128018
David Jones3588215
Janice Markhammer4957520
Cheryl Cushing5128528
Reuven Ytzrhak4108015
Greg Knox6259530
Joel England5738927
Mary Rayburn5228618
面临的挑战
  1. 成绩不可比

    • 三门课程的成绩范围和分布不同(例如数学成绩可能在几百分,而科学和英语成绩可能在0-100分之间)。
    • 直接对这些成绩求平均是没有意义的,需要将它们转换为可比较的单位(例如标准化或归一化)。
  2. 评定等级

    • 需要一种方法来确定每个学生在组合成绩中的百分比排名。
    • 根据百分比排名将学生分为不同的等级(A、B、C、D、E),每个等级包含20%的学生。
  3. 排序问题

    • 学生姓名是一个整体字段,包含姓和名。
    • 为了按字母顺序排序,需要将姓和名拆开,分别处理。

解决方案的思路

这段内容的核心是通过R语言中的数值和字符处理函数来解决上述问题。具体步骤可能包括:

  1. 标准化或归一化成绩
    • 使用数学函数(如scale())将不同范围的成绩转换为可比较的单位。
  2. 计算百分比排名
    • 使用统计函数(如rank()ecdf())计算每个学生的百分比排名。
  3. 评定等级
    • 根据百分比排名将学生分为不同的等级。
  4. 拆分姓名字段
    • 使用字符处理函数(如strsplit())将学生姓名拆分为姓和名。
  5. 排序
    • 使用排序函数(如order())对学生进行排序。

5.2 数值和字符处理函数

5.2.1 数学函数

R提供了丰富的数学函数,这些函数可以用于执行各种数学运算和变换。以下是一些常用的数学函数及其描述:

函数描述用例
abs(x)绝对值abs(-4)返回值为4
sqrt(x)平方根sqrt(25)返回值为5,和25^(0.5)等价
ceiling(x)不小于x的最小整数ceiling(3.475)返回值为4
floor(x)不大于x的最大整数floor(3.475)返回值为3
trunc(x)向0的方向截取的x中的整数部分trunc(5.99)返回值为5
round(x, digits=n)将x舍入为指定位的小数round(3.475, digits=2)返回值为3.48
signif(x, digits=n)将x舍入为指定的有效数字位数signif(3.475, digits=2)返回值为3.5
cos(x)、sin(x)、tan(x)余弦、正弦和正切cos(2)返回值为–0.416
acos(x)、asin(x)、atan(x)反余弦、反正弦和反正切acos(-0.416)返回值为2
cosh(x)、sinh(x)、tanh(x)双曲余弦、双曲正弦和双曲正切sinh(2)返回值为3.627
acosh(x)、asinh(x)、atanh(x)反双曲余弦、反双曲正弦和反双曲正切asinh(3.627)返回值为2
log(x, base=n)对x取以n为底的对数log(10)返回值为2.3026
log10(x)对x取以10为底的对数log10(10)返回值为1
exp(x)指数函数exp(2.3026)返回值为10
数据变换

数学函数的一个主要用途是对数据进行变换。例如,对于存在明显偏倚的变量(如收入),在进一步分析之前取对数是一种常见的做法。数学函数也常用于公式中,用于绘图函数(例如xsin(x))和在输出结果之前对数值进行格式化。

5.2.2 统计函数

统计函数概述

R提供了丰富的统计函数,用于计算各种描述性统计量。这些函数不仅可以直接应用于数值向量,还可以通过参数调整来满足不同的需求。以下是一些常用的统计函数及其描述:

函数描述用例
mean(x)平均数mean(c(1,2,3,4))返回值为2.5
median(x)中位数median(c(1,2,3,4))返回值为2.5
sd(x)标准差sd(c(1,2,3,4))返回值为1.29
var(x)方差var(c(1,2,3,4))返回值为1.67
mad(x)绝对中位差(median absolute deviation)mad(c(1,2,3,4))返回值为1.48
quantile(x, probs)求分位数quantile(x, c(0.3, 0.84))返回x的30%和84%分位点
range(x)求值域range(c(1,2,3,4))返回值为c(1,4)
diff(range(x))求值域的差diff(range(c(1,2,3,4)))返回值为3
sum(x)求和sum(c(1,2,3,4))返回值为10
diff(x, lag=n)滞后差分diff(c(1,5,23,29))返回值为c(4,18,6)
min(x)求最小值min(c(1,2,3,4))返回值为1
max(x)求最大值max(c(1,2,3,4))返回值为4
scale(x, center=TRUE, scale=TRUE)中心化或标准化代码清单5-6中给出了示例
参数的灵活使用

许多统计函数提供了可选参数,这些参数可以显著影响输出结果。例如:

y <- mean(x)  # 计算x的算术平均数
z <- mean(x, trim = 0.05, na.rm = TRUE)  # 计算截尾平均数,丢弃最大5%和最小5%的数据,并忽略缺失值
  • trim参数用于计算截尾平均数,可以去除极端值的影响。
  • na.rm参数用于处理缺失值,设置为TRUE时会忽略缺失值。
代码示例:均值和标准差的计算

代码清单5-1展示了如何计算某个数值向量的均值和标准差的两种方式。

x <- c(1,2,3,4,5,6,7,8)
mean(x)  # 使用R内置函数计算均值
[1] 4.5
sd(x)  # 使用R内置函数计算标准差
[1] 2.449490# 手动计算均值和标准差
n <- length(x)  # 获取向量长度
meanx <- sum(x) / n  # 计算均值
css <- sum((x - meanx)^2)  # 计算修正平方和
sdx <- sqrt(css / (n - 1))  # 计算标准差
meanx  # 手动计算的均值
[1] 4.5
sdx  # 手动计算的标准差
[1] 2.449490
修正平方和的计算过程

在手动计算标准差的过程中,修正平方和(css)的计算步骤如下:

  1. 计算向量x的平均值meanx
  2. x的每个元素中减去meanx,得到偏差向量。
  3. 对偏差向量的每个元素求平方,得到平方偏差向量。
  4. 对平方偏差向量的所有元素求和,得到修正平方和css

数据的标准化

数据标准化是数据预处理中的一个重要步骤,它有助于改善分析结果的质量和可靠性。在R中,scale()函数提供了一种方便的方式来对数据进行标准化处理。

默认标准化

默认情况下,scale()函数对矩阵或数据框的指定列进行标准化,使得每列的均值为0,标准差为1。这在很多统计分析和机器学习算法中非常有用,因为它们通常假设数据是标准化的。

newdata <- scale(mydata)
  • mydata:输入的矩阵或数据框。
  • newdata:标准化后的数据。
自定义均值和标准差

如果你希望对每一列进行任意均值和标准差的标准化,可以使用以下代码:

newdata <- scale(mydata) * SD + M
  • M:目标均值。
  • SD:目标标准差。

这种标准化方式允许你将数据转换为具有特定均值和标准差的新分布。例如,你可能希望将数据标准化为均值为50,标准差为10的分布:

newdata <- scale(mydata) * 10 + 50
指定列的标准化

如果你只想对数据框中的某一列进行标准化,可以使用transform()函数。例如,将变量myvar标准化为均值为50,标准差为10的变量:

newdata <- transform(mydata, myvar = scale(myvar) * 10 + 50)
  • mydata:原始数据框。
  • myvar:需要标准化的列名。
  • newdata:新的数据框,其中myvar列已被标准化。
注意事项
  • 在非数值型的列上使用scale()函数将会报错。因此,在应用scale()之前,需要确保数据中不包含非数值型列,或者先将这些列从数据中分离或转换。
  • 数据标准化是许多数据分析和机器学习任务的前提,它有助于提高模型的性能和稳定性。
总结

scale()函数是R中进行数据标准化的强大工具。通过它可以轻松地将数据标准化为均值为0、标准差为1的格式,也可以通过简单的数学变换调整为目标均值和标准差。此外,transform()函数可以方便地对数据框中的指定列进行标准化处理。这些技巧在数据预处理阶段非常有用,尤其是在处理具有不同量纲和分布的数据时。

5.2.3 概率函数

概率函数概述

概率函数在统计学中扮演着重要角色,它们不仅用于生成模拟数据,还用于计算概率值。在R中,概率函数通常遵循特定的命名规则,以便于理解和使用。

命名规则

R中的概率函数命名规则如下:

  • d:密度函数(density)
  • p:分布函数(distribution function),通常也称为累积分布函数(CDF)
  • q:分位数函数(quantile function),用于找到给定概率值对应的分位点
  • r:生成随机数(random deviates)
常用概率函数

表5-4列出了R中常用的一些概率分布及其缩写:

分布名称缩写
Beta 分布beta
二项分布binom
柯西分布cauchy
卡方分布chisq
指数分布exp
F 分布f
Gamma 分布gamma
几何分布geom
正态分布norm
泊松分布pois
t 分布t
均匀分布unif
Weibull 分布weibull
正态分布函数

表5-5展示了正态分布的四个基本函数及其用法示例:

问题解法
在区间[–3, 3]上绘制标准正态曲线使用dnorm函数计算密度,然后使用plot绘制曲线
位于z=1.96左侧的标准正态曲线下方面积是多少?使用pnorm(1.96)计算累积概率,结果为0.975
均值为500,标准差为100的正态分布的0.9分位点值为多少?使用qnorm(.9, mean=500, sd=100)计算分位点,结果为628.16
生成50个均值为50,标准差为10的正态随机数使用rnorm(50, mean=50, sd=10)生成随机数
设置随机数种子

为了确保结果的可重现性,可以使用set.seed()函数设置随机数种子。这样,每次生成的随机数序列将是相同的。

生成多元正态数据

在模拟研究和蒙特卡洛方法中,经常需要从多元正态分布中抽取数据。MASS包中的mvrnorm()函数可以方便地实现这一需求。其调用格式为:

mvrnorm(n, mean, sigma)

其中:

  • n:样本大小
  • mean:均值向量
  • sigma:方差-协方差矩阵
示例:生成多元正态数据

代码清单5-3展示了如何从一个三元正态分布中抽取500个观测:

library(MASS)
options(digits=3)
set.seed(1234)
mean <- c(230.7, 146.7, 3.6)
sigma <- matrix(c(15360.8, 6721.2, -47.1,6721.2, 4700.9, -16.5,-47.1, -16.5, 0.3), nrow=3, ncol=3)
mydata <- mvrnorm(500, mean, sigma)
mydata <- as.data.frame(mydata)
names(mydata) <- c("y","x1","x2")
dim(mydata)
head(mydata, n=10)
  • 设置随机数种子以确保结果可重现。
  • 指定均值向量和方差-协方差矩阵。
  • 生成500个伪随机观测。
  • 将结果从矩阵转换为数据框,并为变量指定名称。
  • 确认数据框的维度,并输出前10个观测。

5.2.4 字符处理函数

字符处理函数概述

字符处理函数在R中用于处理文本型数据,它们可以帮助用户从文本中提取信息或重新设置文本格式。这些函数对于数据清洗、文本分析和报告生成等任务至关重要。

常用字符处理函数

表5-6列出了R中一些最常用的字符处理函数及其描述:

函数描述
nchar(x)计算字符串向量x中每个元素的字符数量
substr(x, start, stop)提取或替换字符串向量x中的子串
grep(pattern, x, ...)在字符串向量x中搜索与模式pattern匹配的元素,并返回匹配元素的下标
sub(pattern, replacement, x, ...)在字符串向量x中搜索模式pattern,并用文本replacement替换
strsplit(x, split, ...)在指定的分隔符split处分割字符串向量x中的元素
paste(..., sep="")连接字符串,sep参数指定连接符
toupper(x)将字符串向量x中的所有字符转换为大写
tolower(x)将字符串向量x中的所有字符转换为小写
正则表达式

正则表达式提供了一种强大的方式来匹配文本模式。例如,正则表达式^[hc]?at可以匹配以0个或1个hc开头,后接at的任意字符串,如hatcatat,但不会匹配bat

示例

以下是一些示例,展示了如何使用这些字符处理函数:

x <- c("ab", "cde", "fghij")
nchar(x[3])  # 返回值为5x <- "abcdef"
substr(x, 2, 4)  # 返回值为"bcd"
substr(x, 2, 4) <- "22222"  # x 将变成"a222ef"grep("A", c("b", "A", "c"), fixed=TRUE)  # 返回值为2sub("\\s", ".", "Hello There")  # 返回值为Hello.Therey <- strsplit("abc", "")  # 返回一个列表,包含"a" "b" "c"
unlist(y)[2]  # 返回"b"paste("x", 1:3, sep="")  # 返回值为c("x1", "x2", "x3")
paste("x", 1:3, sep="M")  # 返回值为c("xM1", "xM2", "xM3")toupper("abc")  # 返回值为"ABC"
tolower("ABC")  # 返回值为"abc"

5.2.5 其他实用函数

在R中,除了专门针对数值和字符处理的函数外,还有一些实用函数,它们在数据管理和处理中发挥着重要作用,但不容易归入特定的分类。以下是一些常用的实用函数:

表5-7 其他实用函数
函数描述
length(x)返回对象x的长度(元素数量)
seq(from, to, by)生成一个从fromto,步长为by的序列
rep(x, n)将对象x重复n
cut(x, n)将连续型变量x分割为n个水平的因子,可指定ordered_result创建有序因子
pretty(x, n)创建美观的分割点,将连续型变量x分割为n个区间,常用于绘图
cat(... , file ="myfile", append =FALSE)连接对象并输出到屏幕或文件中,可使用转义字符控制格式
示例

以下是一些示例,展示了如何使用这些实用函数:

x <- c(2, 5, 6, 9)
length(x)  # 返回值为4indices <- seq(1, 10, 2)  # 生成序列c(1, 3, 5, 7, 9)y <- rep(1:3, 2)  # 返回值为c(1, 2, 3, 1, 2, 3)# 将连续型变量x分割为3个水平的因子
cut(x, 3)# 创建美观的分割点,将连续型变量x分割为3个区间
pretty(x, 3)firstname <- c("Jane")
cat("Hello", firstname, "\n")  # 输出Hello Janename <- "Bob"
cat("Hello", name, "\b.\n", "Isn\'t R", "\t", "GREAT?\n")
# 输出:
# Hello Bob.
# Isn't R    GREAT?
转义字符

cat()函数中,可以使用转义字符来控制输出格式:

  • \n:新行
  • \t:制表符
  • \':单引号
  • \b:退格

例如,在输出时,可以在句号之前使用退格转义字符(\b),以避免在句号后面多出一个空格。

5.2.6 将函数应用于矩阵和数据框

R函数的一个强大特性是它们可以应用于多种数据对象,包括标量、向量、矩阵、数组和数据框。这使得R在数据处理方面非常灵活和强大。

示例:将函数应用于数据对象

代码清单5-4展示了如何将函数应用于不同类型的数据对象:

a <- 5
sqrt(a)  # 返回值为2.236068b <- c(1.243, 5.654, 2.99)
round(b)  # 返回值为c(1, 6, 3)c <- matrix(runif(12), nrow=3)
c  # 生成一个3x4的矩阵
log(c)  # 对矩阵c中的每个元素取对数
mean(c)  # 计算矩阵c中所有元素的均值,结果为0.444
应用函数到矩阵和数据框的特定维度

如果你希望对矩阵或数据框的行或列应用函数,可以使用apply()函数。apply()函数的格式如下:

apply(x, MARGIN, FUN, ...)
  • x:数据对象(矩阵、数组或数据框)。
  • MARGIN:维度的下标(在矩阵或数据框中,MARGIN=1表示行,MARGIN=2表示列)。
  • FUN:要应用的函数。
  • ...:传递给FUN的任何参数。
示例:将函数应用到矩阵的所有行和列

代码清单5-5展示了如何将函数应用到矩阵的所有行和列:

mydata <- matrix(rnorm(30), nrow=6)
mydata  # 生成一个6x5的矩阵apply(mydata, 1, mean)  # 计算每行的均值
apply(mydata, 2, mean)  # 计算每列的均值
apply(mydata, 2, mean, trim=0.2)  # 计算每列的截尾均值(忽略最高和最低20%的数据)
  • 第一个apply()计算了6行的均值。
  • 第二个apply()计算了5列的均值。
  • 第三个apply()计算了每列的截尾均值,基于中间60%的数据,忽略最高和最低20%的值。
总结

apply()函数是一种强大的机制,可以将任意R函数应用到矩阵、数组或数据框的任何维度上。这使得它在数据处理和分析中非常有用。此外,lapply()sapply()函数可以将函数应用到列表上,提供了更多的灵活性。

5.3 数据处理难题的一套解决方案

在5.1节中,我们提出了一个数据处理问题,涉及学生考试成绩的组合、评分和排序。现在,我们将通过代码清单5-6展示解决这一问题的详细步骤。

代码清单5-6 示例的一种解决方案
  1. 设置输出格式

    options(digits=2)
    

    这行代码设置输出的小数点后保留两位,使结果更易读。

  2. 创建学生数据框

    Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose", "David Jones", "Janice Markhammer", "Cheryl Cushing", "Reuven Ytzrhak", "Greg Knox", "Joel England", "Mary Rayburn")
    Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
    Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
    English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
    roster <- data.frame(Student, Math, Science, English, stringsAsFactors=FALSE)
    
  3. 标准化考试成绩

    z <- scale(roster[,2:4])
    score <- apply(z, 1, mean)
    roster <- cbind(roster, score)
    

    这里,我们首先使用scale()函数对数学、科学和英语成绩进行标准化,然后计算每个学生的标准化成绩均值,并将这些均值添加到数据框中。

  4. 计算成绩等级

    y <- quantile(score, c(.8,.6,.4,.2))
    roster$grade[score >= y[1]] <- "A"
    roster$grade[score < y[1] & score >= y[2]] <- "B"
    roster$grade[score < y[2] & score >= y[3]] <- "C"
    roster$grade[score < y[3] & score >= y[4]] <- "D"
    roster$grade[score < y[4]] <- "F"
    

    使用quantile()函数计算成绩的分位数,并根据这些分位数将学生成绩分为A到F等级。

  5. 拆分姓名并排序

    name <- strsplit((roster$Student), " ")
    Lastname <- sapply(name, "[", 2)
    Firstname <- sapply(name, "[", 1)
    roster <- cbind(Firstname, Lastname, roster[,-1])
    roster <- roster[order(Lastname, Firstname),]
    

    使用strsplit()函数拆分学生姓名为姓和名,然后使用sapply()提取姓和名,最后按姓和名对数据框进行排序。

总结

这个解决方案展示了如何使用R的基本函数来解决实际的数据处理问题。通过标准化考试成绩、计算成绩等级、拆分和排序姓名,我们能够将原始数据转换为一个结构化、易于理解的格式。这些步骤不仅解决了提出的问题,还展示了R在数据处理方面的强大能力。

这个过程也强调了R中函数的灵活性和实用性,无论是在处理标量、向量、矩阵还是数据框时。通过这些基本的数据处理技术,可以为更复杂的数据分析任务打下坚实的基础。

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

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

相关文章

k8s术语之Horizontal Pod Autoscaling

应用的资源使用率通常都有高峰和低谷的时候&#xff0c;如何削峰填谷&#xff0c;提高整体的整体资源利用率&#xff0c;让service中的Pod个数自动调整呢&#xff1f;Horizontal Pod Autoscaling:使pod水平自动缩放。这个Object也是最能体现kubernetes之于传统运维价值的地方&a…

Linux复习笔记(三) 网络服务配置(web)

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为你提供一点帮助。 二、网络服务配置 2.3 web服务配置 2.3.1通信基础&#xff1a;HTTP协议与C/S架构&#xff08;了解&#xff09; ​​HTTP协议的核心作用​​ Web服务基于HTTP/HTTPS协议实现客户端&#xff…

9.1.领域驱动设计

目录 一、领域驱动设计核心哲学 战略设计与战术设计的分野 • 战略设计&#xff1a;限界上下文&#xff08;Bounded Context&#xff09;与上下文映射&#xff08;Context Mapping&#xff09; • 战术设计&#xff1a;实体、值对象、聚合根、领域服务的构建原则 统一语言&am…

CSS Layer 详解

CSS Layer 详解 前言 最近在整理CSS知识体系时&#xff0c;发现Layer这个特性特别有意思。它就像是给样式规则提供了一个专属的「VIP通道」&#xff0c;让我们能更优雅地解决样式冲突问题。今天我就用最通俗的语言&#xff0c;带大家全面了解这个CSS新特性。 什么是CSS Laye…

【Dv3Admin】工具视图配置文件解析

在开发后台管理系统时,处理复杂的 CRUD 操作是常见的需求。Django Rest Framework(DRF)通过 ModelViewSet 提供了基础的增删改查功能,但在实际应用中,往往需要扩展更多的功能,如批量操作、权限控制、查询优化等。dvadmin/utils/viewset.py 模块通过继承并扩展 ModelViewS…

‌云原生CAE软件

‌云原生CAE软件‌是一种在设计和实现时就充分考虑了云环境特点的软件&#xff0c;能够充分利用云资源&#xff0c;实现高效、可扩展和灵活的仿真分析。 定义和特点 云原生CAE软件是一种在云端构建和运行的CAE&#xff08;Computer Aided Engineering&#xff0c;计算机辅助工…

若依定制pdf生成实战

一、介绍 使用 Java Apache POI 将文字渲染到 Word 模板是一种常见的文档自动化技术&#xff0c;广泛应用于批量生成或定制 Word 文档的场景。使用aspose可以将word转成pdf从而达到定制化pdf的目的。 参考文档&#xff1a;java实现Word转Pdf&#xff08;Windows、Linux通用&a…

Redis再次开源!reids8.0.0一键安装脚本分享

准备工作 1. 下载 Redis 8 安装包 # Redis 8.0.0 示例&#xff08;请替换为实际版本&#xff09; http://download.redis.io/releases/redis-8.0.0.tar.gz一、脚本内容&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*-import os import time import shutil import s…

stm32之BKP备份寄存器和RTC时钟

目录 1.时间戳1.1 Unix时间戳1.2 UTC/GMT1.3 时间戳转换**1.** time_t time(time_t*)**2.** struct tm* gmtime(const time_t*)**3.** struct tm* localtime(const time_t*)**4.** time_t mktime(struct tm*)**5.** char* ctime(const time_t*)**6.** char* asctime(const stru…

Android学习总结之算法篇八(二叉树和数组)

路径总和 import java.util.ArrayList; import java.util.List;// 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;// 构造函数&#xff0c;用于初始化节点值TreeNode(int x) {val x;} }public class PathSumProblems {// 路径总和 I&#xff1a;判…

Scala和Spark的介绍

Scala 1. Slaca的发展过程 由洛桑联邦理工学院的马丁 奥德斯在 2001 年基于 Funnel 的工作开始设计&#xff0c;设计初衷是想集成面向对象编程和函数式编程的各种特性。 Scala 是一种纯粹的面向对象的语言&#xff0c;每个值都是对象。 Scala 也是一种函数式语言&#xff0…

配置Hadoop集群环境-使用脚本命令实现集群文件同步

在 Hadoop 集群环境中&#xff0c;确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案&#xff0c;支持批量同步文件到所有节点&#xff1a; 1. 前提条件 所有节点已配置 SSH 免密登录主节点&#xff08;NameNode&#xff09;能通过主机…

Redis能保证数据不丢失吗之RDB

有了AOF为什么还需要RDB? 上一篇我们介绍了Redis AOF持久化策略。Redis能保证数据不丢失吗之AOF AOF虽然能实现持久化,但由于AOF恢复数据的时候是一条一条命令重新执行的,但数据量大的时候,Redis数据恢复的时间就会很久,这会导致Redis在重启的时候,有一大段时间的不可用…

AI浪潮下的艺术突围战:对话《名人百科数据库》执行主编刘鑫炜

当AI生成的画作在国际赛事中摘冠&#xff0c;当算法推荐主导艺术传播路径&#xff0c;技术革命正以前所未有的速度重塑艺术生态。我们独家专访深耕艺术推广领域的刘鑫炜主编&#xff0c;探讨当代艺术家在智能时代的生存法则。 图为《名人百科数据库》执行主编刘鑫炜 技术重构创…

Python 实现失败重试功能的几种方法

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 方法 1:手动 `while` 循环 + 异常捕获方法 2:使用 `tenacity` 库(推荐)方法 3:使用 `retrying` 库(旧版,已停止维护)方法 4:`requests` 自带重试(适用于 HTTP 请求)方法 5:自定义装饰器(灵活控制)方法…

2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型&#xff0c;721原理&#xff0c;721利用要注意什么&am…

Unity动画系统使用整理 --- Playable

​​Playable API​​ 是一个强大的工具&#xff0c;用于更灵活地控制动画、音频、脚本等时间轴内容的播放和混合。它提供了比传统 Animator 更底层、更可控的方式管理时间轴行为&#xff0c;尤其适合复杂动画逻辑或动态内容组合的场景。 优点&#xff1a; 1.Playables API 支…

基于STM32、HAL库的BMP390L气压传感器 驱动程序设计

一、简介: BMP390L 是 Bosch Sensortec 生产的一款高精度气压传感器,专为需要精确测量气压和海拔高度的应用场景设计。BMP390L 具有更低的功耗、更高的精度和更快的响应速度。 二、硬件接口: BMP390L 引脚STM32L4XX 引脚说明VDD3.3V电源GNDGND地SCLPB6 (I2C1 SCL)I2C 时钟线…

Arduino快速入门

Arduino快速入门指南 一、硬件准备 选择开发板&#xff1a; 推荐使用 Arduino UNO&#xff08;兼容性强&#xff0c;适合初学者&#xff09;&#xff0c;其他常见型号包括NANO&#xff08;体积小&#xff09;、Mega&#xff08;接口更多&#xff09;。准备基础元件&#xff1a…

破解 Qt QProcess 在 Release 模式下的“卡死”之谜

在使用 Qt 的 QProcess 以调用外部 ffmpeg/ffprobe 进行音视频处理时&#xff0c;常见的工作流程是&#xff1a; gatherParams&#xff1a;通过 ffprobe 同步获取媒体文件的参数&#xff08;分辨率、采样率、声道数、码率等&#xff09;。 reencode&#xff1a;逐个文件调用 f…