R语言数学建模(一)—— 基础知识

R语言数学建模(一)—— 基础知识


文章目录

  • R语言数学建模(一)—— 基础知识
  • 前言
  • 一、建模软件
    • 1.1 软件建模的基础
    • 1.2 模型的分类
    • 1.3 不同类型模型间的联系
    • 1.4 一些术语
    • 1.5 建模如何适应数据分析过程
  • 二、Tidyverse基础
    • 2.1 tidyverse的原则
      • 2.1.1 为人类设计
      • 2.1.2 重现现有的数据结构
      • 2.1.3 管道设计与函数编程
    • 2.2 tidyverse语法示例
  • 三、R建模基础
    • 3.1 一个例子
    • 3.2 R公式的作用
    • 3.3 为什么整洁(tidy)对于建模很重要
    • 3.4 Base R和tidyverse的结合
    • 3.5 tidymodels元包(metapackage)
  • 总结


前言

这一节开始,我们来学习R语言的又一大功能——数学建模。这是数据分析常用到的数学知识。R提供了一些简洁好用的包,让这一过程变得更加简单易懂。在学习这部分内容的同时,强烈建议自行学习关于统计学的相关知识点,这样在学习到相关内容时才会有更加深刻的理解与收获。

一、建模软件

模型的效用取决于其还原能力,或者将复杂的关系简化为简单术语的能力。

1.1 软件建模的基础

首先,重点在于使用建模软件要易于正确操作。其次,建模软件应该推广良好的科学方法论,软件应该尽可能保护用户避免犯错。(R:yyds。R包tidyverse:牛。)

1.2 模型的分类

按建模目的分的话:

  • 描述模型:目的时描述说明数据的特征,在视觉上强调数据中的一些趋势等。比如平滑器模拟数据趋势等。

  • 推理模型:为问题提供一个解决方案或特定的假设。例如临床上判断某种决定的所带来的影响。

  • 预测模型:对新数据做出尽可能准确的预测。这种模型的重点在于不同方法都可以创建预测模型,到底应该如何开发是重点。

1.3 不同类型模型间的联系

注意我们是根据模型目的来定义其类型的,不是根据其数学性质。

1.4 一些术语

首先,许多模型都可以分为有监督模型和无监督模型。无监督模型就是那些学习模式,聚类,或者数据的其他特征但是缺乏结果的模型。PCA、聚类或者自动编码器都是这个类型的例子,他们用于理解预测因子和结果的关系,而预测因子与结果间没有明确的关系。监督模型是那些有结果变量的模型,线性回归,神经网络和许多其他方法都是这一类的。

监督模型中,有两个主要的子类别:

  • 回归预测一个数字结果

  • 分类预测的结果是一组有序或无序的定性值

不同的变量有不同的角色,特别是监督分析中。输出结果(也可叫labels终点因变量)是监督模型中预测的值。独立变量是预测结果的基础,也被称为预测因子特征协变量

1.5 建模如何适应数据分析过程

建模之前还有一些步骤。首先,数据清理(tidy data)过程是一个重要的程序。无论什么情况,都应该调查数据,确保其适用于你的项目目标,准确和适合。这些步骤往往花费的时间更久(即是数据预处理过程)。

数据清理可以与理解数据的第二阶段重叠,该阶段称为探索性数据分析(EDA)。EDA揭示了不同变量之间的相互关系、他们的分布、典型范围和其他属性。这个阶段一个很好的问题是"我是怎么得到这些数据的"这个问题可以帮你了解数据如何采样和过滤的,从而确定这些操作是否合适。另一个问题是这些数据是否与研究相关。

最后,开始数据分析过程前,应该对模型的目标及如何判断性能有一个明确的预期。至少应该确定一个性能度量的标准,并确定可以实现的现实目标。常见的统计度量包括准确率、真阳性率和假阳性率、均方根误差等。

确定合适模型的典型过程如下:

  • EDA:在数值分析和可视化之间有一个来回的过程来发现导致更多问题和数据分析的任务。

  • Feature engineering:从EDA中获得的结果导致创建特定的模型术语,从而更为容易准确的为观察到的数据建模。

  • 模型交替和选择:生成多种模型对其性能进行比较。

  • 模型评估:检查模型的性能指标

二、Tidyverse基础

tidyverse包是一个用于数据分析的R包集合,这些包是根据共同的思想和规范开发的。

2.1 tidyverse的原则

http://design.tidyverse.org可以找到全套的使用策略,下面简要介绍几个通用的原则。也可以在R语言数据分析专栏对其进行了解。

2.1.1 为人类设计

tidyverse专注于设计易于理解和广泛使用的R包和函数。

为了将数据框中的某一或多列进行排序,使用R核心语言,我们可以通过order()实现。你不能使用一个函数来进行该功能,比如sort()。要对mtcars其中的两列进行排序,可能要这样调用:

mtcars[order(mtcars$gear, mtcars$mpg), ]

当你使用dplyr包时,就只需要:

library(dplyr)
arrange(.data = mtcars, gear, mpg)

2.1.2 重现现有的数据结构

有可能的话,函数应该尽可能避免返回新的数据结构。这将减少使用软件时的认知负荷。

tidyversetidymodels包中,使用的数据结构是数据框。具体来讲,他们支持一种叫tibble的格式。

2.1.3 管道设计与函数编程

magrittr中的管道函数(%>%)是一个在函数间传参的工具(或R原生中的|>)。函数式编程应该尽量使输出只依赖于输入。

2.2 tidyverse语法示例

tibble与R中的基本data.frame有所不同。例如,tibble可以使用在语法上无效的列名:

# 想要的无效名称(空格)
data.frame(`v 1` = 1:2, `two` = 3:4)
#>   v.1 two
#> 1   1   3
#> 2   2   4
# 空格转换为了.,但也可以这样:
df <- data.frame(`v 1` = 1:2, `two` = 3:4, check.names = FALSE)
df
#>   v 1 two
#> 1   1   3
#> 2   2   4# 但是tibble直接:
tbbl <- tibble(`v 1` = 1:2, `two` = 3:4)
tbbl
#> # A tibble: 2 × 2
#>   `v 1`   two
#>   <int> <int>
#> 1     1     3
#> 2     2     4

标准数据框支持参数的部分匹配,tibble防止了这种情况:

df$tw
#> [1] 3 4tbbl$tw
#> Warning: Unknown or uninitialised column: `tw`.
#> NULL

tibble还避免了维度下降的可能。

。。。

三、R建模基础

本节简要说明如何使用R核心进行创建、训练和使用模型。

3.1 一个例子

为了了解R的基础建模功能,我们使用使用两个物种的数据,这些物种包含在crickets的数据框中,包含31个数据点:

library(tidyverse)data(crickets, package = "modeldata")
names(crickets)
#> [1] "species" "temp"    "rate"ggplot(crickets, aes(x = temp, y = rate, color = species, pch = species, lty = species)) + geom_point(size = 2) +geom_smooth(method = lm, se = FALSE, alpha = 0.5) +scale_color_brewer(palette = "Paired") +labs(x = "Temperature (C)", y = "Chirp Rate (per minute)")
#> `geom_smooth()` using formula = 'y ~ x'

在这里插入图片描述

数据显示,每个物种都呈现线性的趋势。对于一个给定的温度,数据显示O.e似乎比另一个物种每分钟鸣叫的次数更多。但其实对于这个推论模型来说,研究者可能在看到数据前就指定了以下原假设(H0):

  • 温度对于鸣叫速率没有影响

  • 不同物种鸣叫速率没有差异

为了在R中拟合普通线性模型,最常用的是lm()函数。此函数重要参数是模型公式和包含的数据框。可以使用以下公式来指定:

rate~temp

左侧是输出,右侧是预测因子。假设数据包含一天内的时间,其中测量值是在名为time的列中,这个公式表示为:

rate~temp + time

这里并不会将temp和time相加,而只是象征性的表示温度和时间应该作为单独的主效应添加至模型中。如果某个预测因子是一个分类变量,R会将其转换为数值向量进行模型的预测。比如两个分类变量是上述所示的两个物种,将会使用0,1代替。如果变量个数是5个而不是两个,这时会创建四个二进制列作为四个物种的二元指示器。

创建两个具有交互作用的预测因子的模型的方式如下:

rate~temp + species + temp:species# 有以下快捷方式进行展示
# 这就表示了两种预测因子的相互作用:
rate~(temp + species)^2#另一种快捷表示方式如下:
rate~temp * species

创建预测因子还有以下的形式:

  • 公式中可以使用内联函数。比如rate~log(temp)使用temp的自然对数值。如果想要使用一些特殊的公式可以用到I()函数。比如华氏温度的转换:rate~I((temp * 9/5) + 32)

  • R有许多在公式中都很有用的函数。比如,poly(x, 3)添加了线性、二次、三次的x在模型的主要效应中。

  • 对于有多个预测因子的数据集,可以使用一些快捷方式表示。比如使用~(.)^3表示在模型中添加所有两个和三个变量交互的主效应值

回到我们的实例中,使用双因素交互模型:

intercation_fit <- lm(rate ~ (temp + species)^2, data = crickets)intercation_fit
#> 
#> Call:
#> lm(formula = rate ~ (temp + species)^2, data = crickets)
#> 
#> Coefficients:
#>           (Intercept)                   temp       speciesO. niveus  
#>               -11.041                  3.751                 -4.348  
#> temp:speciesO. niveus  
#>                -0.234

输出结果有些难读,因为R将物种指示变量的变量名于因子级别混在一起显示了,中间并没有分割符。

在对于该模型的任何推断结果之前,都应该使用诊断图来评估其合理性。我们可以使用plot()方法对于lm对象作图。该方法为对象生成四个图,每个图显示拟合的不同方面。

# 相邻放置两个plots
par(mfrow = c(1,2))# 显示残差与预测值
plot(intercation_fit, which = 1)# 残差上正常分位数的曲线图
plot(intercation_fit, which = 2)

在这里插入图片描述

我们的下一步工作就是评估是否有必要包括相互作用。对于此模型,最合适的方法是重新计算没有交互作用的模型,并使用anova()方法。

main_effect_fit <- lm(rate ~ temp + species, data = crickets)
anova(main_effect_fit, intercation_fit)
#> Analysis of Variance Table
#> 
#> Model 1: rate ~ temp + species
#> Model 2: rate ~ (temp + species)^2
#>   Res.Df    RSS Df Sum of Sq     F Pr(>F)
#> 1     28 89.350                          
#> 2     27 85.074  1    4.2758 1.357 0.2542

p值为0.25,不能拒绝原假设,即模型不需要相互作用项。我们后续使用不包含相互作用项的模型。

我们可以使用summary()来检查每个模型项的系数、标准误和p值:

summary(main_effect_fit)
#> 
#> Call:
#> lm(formula = rate ~ temp + species, data = crickets)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -3.0128 -1.1296 -0.3912  0.9650  3.7800 
#> 
#> Coefficients:
#>                   Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)       -7.21091    2.55094  -2.827  0.00858 ** 
#> temp               3.60275    0.09729  37.032  < 2e-16 ***
#> speciesO. niveus -10.06529    0.73526 -13.689 6.27e-14 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 1.786 on 28 degrees of freedom
#> Multiple R-squared:  0.9896, Adjusted R-squared:  0.9888 
#> F-statistic:  1331 on 2 and 28 DF,  p-value: < 2.2e-16

这些数据显示,温度每提升一度,rate提升3.6个单位,这里显示出很强的统计学意义,p是证据。对于物种表明,每个温度下O.n都比O.e的rate小10个单位,p也是证据。这里唯一有问题的在于截距(Intercept)表示0度时的rate是负数,这明显不符。但是数据最低温度仅为17.2度,这说明结论在温度值的适用范围内是良好的。

如果我们想要得到在实验中未观察到的温度下的rate,可以使用predict()函数:

new_values <- data.frame(species = "O. exclamationis", temp = 15:20)
predict(main_effect_fit, new_values)
#>        1        2        3        4        5        6 
#> 46.83039 50.43314 54.03589 57.63865 61.24140 64.84415

这一例子表明:

  • R有可表达的语法,用于为简单和复杂模型指定术语

  • R公式可以为建模提供许多便利

  • 有许多有用的函数可以在模型建立后进行特定的计算(anova()summary()predict()等)

终:R语言,一开始就是为了数据分析而设计的!

3.2 R公式的作用

R模型的公式(formula)有许多用途:

  • 定义模型使用的列

  • 使用公式将列编码成为合适的格式

  • 列的角色使用公式来定义

最后一个用途的意思就是要告诉模型怎么使用列,比如上述例子中的:

(temp + species)^2

3.3 为什么整洁(tidy)对于建模很重要

R的一个优点在于,它可以让用户选择适合自己的方法来处理数据。比如,下面是在一个数据框内创建图形的三种方式:

plot(plot_data$x, plot_data$y)library(lattice)
xyplot(y ~ x, data = plot_data)library(ggplot2)
ggplot(plot_data, aes(x = x, y = y)) + geom_point()

这里,不同开发成员设计了三个使用界面,格局优劣。在这方面与Python不同,Python推崇一种用户使用形式。虽然这样R可以随着时间发展有不同的应用形式,但是R包之间的差异无疑会加大用户的使用难度。

假如你的建模项目可以使用多种函数进行,为了实现获得每个样本的类概率估计值,不同函数提供了相应的predict()方法。其实这些方法存在显著的异质性,但即使很有经验的人也无法看出:

FunctionPackageCode
lda()MASSpredict(object)
glm()statspredict(object, type = “response”)
gbm()gbmpredict(object, type = “response”, n.trees)
mda()mdapredict(object, type = “posterior”)
rpart()rpartpredict(object, type = “prob”)
variousRWekapredict(object, type = “probability”)
logitboost()LogitBoostpredict(object, type = “raw”, nIter)
pamr.train()pamrpamr.predict(object, type = “posterior”)

最后一种甚至没有调用predict(),这些情况就是日常使用R建模时的阻碍。

另一个问题在于缺失值的处理,一个缺失值往往会引起缺失值的传播,比如一个缺失值会引起平均值的缺失。模型预测时会有几个选项加入到na.action()中。一般常用的是na.fail()na.omit()选项,前者报错,后者删除案例值。

为了解决这些问题,tidyverse包有一大组设计目标,大多数tidymodels设计目标都属于tidyverse的“Design for Humans”:

  • R具有优秀的面向对象的能力,我们使用它来替代创建新的函数名。(比如一个新的predict_sample()函数)

  • 合理的默认值很重要。另外如果需要强制用户做出选择,不应该设置默认值。(如read_csv()

  • 类似的,参数的默认值应该来自于数据中。即在数据内部寻找。

  • 函数应该采用用户拥有的数据结构。例如,模型的接口不要唯一为矩阵。

我们在这里使用的broom::tidy()函数是另一个R的标准化工具。它可以以更易用的格式返回多种类型的R对象。例如,根据预测值与结果列的相关性来筛选预测值,使用purrr::map(),cor.test()的结果可以在每个预测值的列表中返回:

corr_res <- map(mtcars %>% select(-mpg), cor.test, y = mtcars$mpg)corr_res[[1]]
#> 
#>  Pearson's product-moment correlation
#> 
#> data:  .x[[i]] and mtcars$mpg
#> t = -8.9197, df = 30, p-value = 6.113e-10
#> alternative hypothesis: true correlation is not equal to 0
#> 95 percent confidence interval:
#>  -0.9257694 -0.7163171
#> sample estimates:
#>       cor 
#> -0.852162

如果想要在plot中使用该结果,标准格式的假设检验结果并没有什么用。tidy()方法可以将其作为具有标准化的tibble名称返回:

library(broom)tidy(corr_res[[1]])
#> # A tibble: 1 × 8
#>   estimate statistic  p.value parameter conf.low conf.high method    alternative
#>      <dbl>     <dbl>    <dbl>     <int>    <dbl>     <dbl> <chr>     <chr>      
#> 1   -0.852     -8.92 6.11e-10        30   -0.926    -0.716 Pearson'… two.sided

这结果可以被堆叠在ggplot()中使用:

corr_res |> map_dfr(tidy, .id = "predictor") |> ggplot(aes(x = fct_reorder(predictor, estimate))) +geom_point(aes(y = estimate)) +geom_errorbar(aes(ymin = conf.low, ymax = conf.high), width = .1) +labs(x = NULL, y = "Correlation with mpg")

在这里插入图片描述

3.4 Base R和tidyverse的结合

R的核心语言可以或其他R包中的建模函数可以与tidyverse结合使用,特别是dplyr、purrr、tidyr包的结合使用。例如我们想要为每个蟋蟀物种建立不同的模型,我们可以首先使用dplyr::group_nest()按此列分解蟋蟀数据:

split_by_species <- crickets |> group_nest(species)
split_by_species
#> # A tibble: 2 × 2
#>   species                        data
#>   <fct>            <list<tibble[,2]>>
#> 1 O. exclamationis           [14 × 2]
#> 2 O. niveus                  [17 × 2]

数据包含列表中蟋蟀的rate和temp列。由此,purrr::map()函数可以为每个物种创建单独的模型:

model_by_species <- split_by_species |> mutate(model = map(data, ~ lm(rate ~ temp, data = .x)))
model_by_species
#> # A tibble: 2 × 3
#>   species                        data model 
#>   <fct>            <list<tibble[,2]>> <list>
#> 1 O. exclamationis           [14 × 2] <lm>  
#> 2 O. niveus                  [17 × 2] <lm>

要收集每个模型的系数,需要使用broom::tidy()将其转化为一致的数据框格式,以便可以取消嵌套:

model_by_species |> mutate(coef = map(model, tidy)) |> select(species, coef) |> unnest(cols = c(coef))
#> # A tibble: 4 × 6
#>   species          term        estimate std.error statistic  p.value
#>   <fct>            <chr>          <dbl>     <dbl>     <dbl>    <dbl>
#> 1 O. exclamationis (Intercept)   -11.0      4.77      -2.32 3.90e- 2
#> 2 O. exclamationis temp            3.75     0.184     20.4  1.10e-10
#> 3 O. niveus        (Intercept)   -15.4      2.35      -6.56 9.07e- 6
#> 4 O. niveus        temp            3.52     0.105     33.6  1.57e-15

3.5 tidymodels元包(metapackage)

tidyverse被设计为一组模块化的R包,每个包的范围都非常窄。tidymodels遵循类似的设计,例如,rsample包侧重于数据的拆分和重采样。尽管采样方法对于其他建模活动至关重要,但他们位于单个包中,而性能指标包含在不同的单独yardstick包中。

tidymodels包会加载一系列核心的tidymodelstidyverse包:

library(tidymodels)

tidymodels包的框架实际上构建在一些基本的tidyverse包上。

加载metapackage会显示函数名与先前加载的包是否冲突。作为一个例子,加载tidymodels之前,调用filter()函数将会执行stats包中的函数。加载后,将会执行同名函数dplyr::filter()

有几种方法可以处理命名冲突,例如可以使用命名空间(如:stats::filter())。

另一种方法是使用conflicted包。我们可以设置一个在R对话结束前一直有效的规则,以确保在代码没有给出命名空间的情况下始终运行某个函数:

library(conflicted)
conflict_prefer("filter", winner = "dplyr")

为方便起见,tidymodels包含了一个函数,可以捕获我们可能遇到的大多数常见的命名冲突:

tidymodels_prefer(quiet = FALSE)

注意:使用conflicted::conflict_prefer()会让你选择所有命名空间的冲突,迫使你选择所要使用的函数。函数tidymodels::tidymodels_prefer()处理来自tidymodels函数的常见冲突,但R中的其他冲突还需自行处理。

总结

本节介绍了关于R建模的基础知识,算是一个对于R建模的引入。其实关于数学建模的知识,可能我们在学习实践中早有接触,只是在当时并未有深刻体会。比如回归曲线就是使用数学建模来拟合一段数据的趋势。再比如平时可能会使用到的一些数据分类的方法,(随机森林等一系列模型)都是通过建模来解释数据的分类特征。再后面的学习中,我们将会逐步进行学习。(PS:开学了,完全不想干活~)

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

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

相关文章

Linux学习笔记11——用户组添加删除

Linux 是多用户多任务操作系统&#xff0c;换句话说&#xff0c;Linux 系统支持多个用户在同一时间内登陆&#xff0c;不同用户可以执行不同的任务&#xff0c;并且互不影响。 例如&#xff0c;某台 Linux 服务器上有 4 个用户&#xff0c;分别是 root、www、ftp 和 mysql&…

【README 小技巧】在项目README.md 中展示发布到maven 仓库版本

在项目README.md 中展示发不到nexus 的快照版本 <p align"center"><a target"_blank" href"https://search.maven.org/search?qwu-lazy-cloud-network%20wu-lazy-cloud-network"><img src"https://img-home.csdnimg.cn/ima…

逆向案例二:关键字密文解密,自定义的加密解密。基于企名片科技的爬取。

import requests import execjsfor i in range(4):i i1url https://vipapi.qimingpian.cn/Activity/channelInformationByChannelNamedata {channel_name: 24新声,page: f{i},num: 20,unionid: W9wLD4rHIZrB3GLTUncmHgbZcEepR78xJa5Zit6XTMtata86DehdxDt/fDbcHeeJWqqIs6k…

idea 更新maven java版本变化

今天遇到个问题就是&#xff0c;点击maven的reload&#xff0c;会导致setting 里的java compiler 版本变化 这里的话&#xff0c;应该是settings.xml文件里面的这个限定死了&#xff0c;修改一下或者去掉就可以了 <profile><id>JDK-1.8</id><activatio…

Spring Boot项目误将Integer类型写成int来进行传参

在处理项目中Idea中无报错&#xff1a; 问题&#xff1a; localhost:8080/param/m2在浏览器中输入&#xff1a;localhost:8080/param/m2 产生报错&#xff1a; This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Feb 27 20:55…

springboot+vue+mysql+easyexcel实现文件导出+导出的excel单元格添加下拉列表

Excel导出 EasyExcel官方文档 官方文档本身写的非常详细&#xff0c;我就是根据官方文档内的写Excel里web中的写实现的导出 后端 对象 需要写一个实体类 其中涉及到一些用到的EasyExcel的注解 ColumnWidth(20) 列宽设为20&#xff0c;自定义的&#xff0c;放在实体类上面是…

如何在有限的预算里做好服务器的DDOS防护?

在网络安全领域&#xff0c;防御分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一项持续且复杂的挑战。尤其对于预算有限的组织来说&#xff0c;如何在不牺牲安全性的前提下进行有效的防护&#xff0c;更是一个需要深思熟虑的问题。以下是一些建议&#xff0c;帮助你在有限…

网络初识(概念入门)

目录 1.局域网VS广域网 1.1局域网 1.2广域网 2.五元组 2.1 IP和端口 2.1.1 IP 2.1.2端口号 2.2协议 3.协议分层 4. TCP/IP五层模型 5.封装和分用 5.1封装 5.2分用 1.局域网VS广域网 1.1局域网 简单介绍&#xff1a;指在某一特定区域内由多台计算机组成的互联网组…

Nginx网络服务六-----IP透传、调度算法和负载均衡

1.实现反向代理客户端 IP 透传 就是在日志里面加上一个变量 Module ngx_http_proxy_module [rootcentos8 ~]# cat /apps/nginx/conf/conf.d/pc.conf server { listen 80; server_name www.kgc.org; location / { index index.html index.php; root /data/nginx/html/p…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的生活垃圾检测与分类系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本篇博客详细讲述了如何利用深度学习构建一个生活垃圾检测与分类系统&#xff0c;并且提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并进行了与前代算法YOLOv7、YOLOv6、YOLOv5的细致对比&#xff0c;展示了其在图像、视频、实时视频流和批量…

node.js提取excel中的信息填充到word文件,批量生成合同

1.npm下载 npm i pizzip docxtemplater xlsx 2.excel模板 3.word模板 4.代码 // 引入所需模块 var PizZip require(pizzip); var Docxtemplater require(docxtemplater); var fs require(fs); var path require(path); var xl require(xlsx);// 读取并导出Excel文件 …

Python数据处理(三)-txt文件指定数据提取并可视化作图

系列文章&#xff1a; 1&#xff0c;20G文件&#xff0c;分类&#xff0c;放入不同文件&#xff0c;每个单独处理 2&#xff0c;数据的归类并处理 3&#xff0c;txt文件指定数据提取并可视化作图&#xff08;本文&#xff09; 4&#xff0c;......... 一&#xff0c;数据格…

使用 kubeadm 部署k8s集群

一、所有节点系统初始化 1、常规初始化 2、内核版本升级以及内核限制文件参数修改 还可以考虑将旧版本的内核卸载 二、准备nginx负载均衡器和keepalived nginx四层代理&#xff1a; keepalived配置&#xff1a; nginx检测脚本&#xff1a; 三、所有节点部署docker&#xff0c…

Scala 的安装与使用

目录 1 安装 JDK 1.82 安装 Scala3 Scala 插件安装4 Hello Scala 案例 Windows环境安装 1 安装 JDK 1.8 可参见 Windows下安装JDK1.8详细步骤 2 安装 Scala 解压文件&#xff1a;scala-2.12.11.zip&#xff08;解压目录要求无中文无空格&#xff09; 配置环境变量 环境测试 如…

STM32 +合宙1.54“ 电子墨水屏(e-paper)驱动显示示例

STM32 合宙1.54“ 电子墨水屏&#xff08;e-paper&#xff09;驱动显示示例 &#x1f4cd;相关篇《Arduino框架下ESP32/ESP8266合宙1.54“ 电子墨水屏&#xff08;e-paper&#xff09;驱动显示示例》&#x1f516;程序是从GooDisplay品牌下同型号规格墨水屏的示例程序参考Ardui…

2024牛客寒假算法基础集训营1(补题)

文章目录 ABCDEFGHIJKL A n的范围很小暴力直接 O ( n 3 ) O(n^3) O(n3)直接做就行。 我还傻的统计了一下前后缀&#xff0c;不过怎么写都行这道题。 #include <bits/stdc.h> #define int long long #define rep(i,a,b) for(int i (a); i < (b); i) #define fep(i,…

[WebUI Forge]ForgeUI的安装与使用 | 相比较于Auto1111 webui 6G显存速度提升60-75%

ForgeUI的github主页地址:https://github.com/lllyasviel/stable-diffusion-webui-forge Stable Diffusion WebUI Forge 是一个基于Stable Diffusion WebUI(基于Gradio)的平台,可简化开发、优化资源管理并加快推理速度。 “Forge”这个名字的灵感来自于“Minecraft Forge”…

拼多多上货API:自动化上架商品批量获取商品详情信息

随着电子商务的蓬勃发展&#xff0c;淘宝作为中国最大的在线购物平台之一&#xff0c;每天需要处理海量的商品上架和交易。为了提高工作效率&#xff0c;自动化上架商品和批量获取商品详情信息成为了许多商家和开发者的迫切需求。本文将详细介绍淘宝的API接口及其相关技术&…

GIS之深度学习02:Anaconda2019版本安装(py38)

Anaconda是一个专注于数据科学和机器学习的开源发行版&#xff0c;内置了丰富的工具和库&#xff0c;包括Python解释器、NumPy、SciPy、Pandas、Scikit-learn、TensorFlow等&#xff0c;使用户能够轻松进行科学计算和数据分析。其强大的包管理器conda简化了软件包的安装和环境管…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…