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.pswp.cn/web/79594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79594.shtml
英文地址,請注明出處:http://en.pswp.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…