数学建模----线性回归分析(引入热力图的绘制方法)

news2024/11/15 8:39:27

目录

0.直击重点

1.一元线性回归分析

1.1散点图的绘制

1.2相关性的分类

1.3计算相关系数

1.4模型的检验 

1.5模型的预测 

2.多重线性回归分析(上)

2.1多重线性的概念

2.2散点图的分类 

2.3热力图的绘制 

2.4根据结果确定新的变量

3.多重线性回归分析(下)

3.1多重共线性的判断方法

3.2多重共线性的解决 

3.3对于效果的检查

4.自我反思与总结


0.直击重点

第一个部分是一个自变量,一个因变量------里面会介绍到这个模型从训练,验证到预测的全部过程,涉及到了这个新的sllearn模块以及相关联的fit,core_,intercept_,score,predict等多个函数及其属性的相关的使用;

第二个部分是一个因变量,多个自变量------里面会介绍到这个seaborn模块里面的pairplot函数绘制对应的多自变量和一个因变量的相关性的关系图象(散点图)以及经过可视化之后的热力图(heatmap函数的使用)

第三个部分是在第二个的基础上面,多个自变量之间存在一定的相关关系,这个时候我们应该如何处理------多重共线性的解决方案:手动删除,岭回归和逐步回归的方法,我们介绍的手动删除快速,但是缺点也很明显,我们通过对于系数和截距的分析,发现这个手动删除前后对于这个系数的影响不是很大,这个截距一个是异常的,一个比较符合实际情况,这个也告诉我们贸然的删除数据,容易造成这个模型的失真,谨慎操作,岭回归和逐步回归后面我们还会介绍到的;

1.一元线性回归分析

###问题的背景:我们想要探讨的就是这个广告的曝光量exposure和新增用户new_user的关系,是不是增加曝光量就会新增用户,能否根据这个曝光量进行新增用户的预测;

1.1散点图的绘制

###首先我们可以通过下面的方式去绘制一个散点图直观地看一下这个关系,调用scatter函数进行图像的绘制;

# 导入pandas模块
import pandas as pd 
# 导入matplotlib.pyplot,简称plt
import matplotlib.pyplot as plt 

# 通过 rcParams 参数将字体设置为 Arial Unicode MS 
plt.rcParams["font.sans-serif"] = "Arial Unicode MS"

# TODO 读取文件,赋值给df

df = pd.read_csv("/Users/ad/exposure_to_new.csv")
# TODO 使用plt.scatter()函数
# 以df["exposure"]为x轴的值和df["new_user"]为y轴的值,绘制散点图
plt.scatter(df["exposure"], df["new_user"])

# 使用plt.xlabel()函数,将x轴标题设置为"曝光量"
plt.xlabel("曝光量")
# 使用plt.ylabel()函数,将y轴标题设置为"新增用户量"
plt.ylabel("新增用户量")

# 使用plt.show()函数显示图像
plt.show()

相关性的引入:这个散点图绘制的结果就可以去说明这两个变量之间具有一定的相关性;

1.2相关性的分类

###相关性分类:线性(实际上就是一次函数的关系),非线性(非线性相关,也就是不是一次函数的样子,但是这个函数图像依然是一个单调的函数),不相关(图像不具有单调性)

1.3计算相关系数

###相关系数的计算:相关系数的计算结果的绝对值越接近于1,表明这两个变量之间的相关性越高的,大于1是正相关,小于0是负相关;

import pandas as pd 
df = pd.read_csv("/Users/ad/exposure_to_new.csv")

# TODO 使用corr(),计算"exposure"和"new_user"这两列的相关系数,赋值给变量r
r = df["exposure"].corr(df["new_user"])

# 输出此时的r
print(r)

下面我们需要去探讨这个回归分析:

相关关系只能够去说明这两个之间的相关性,但是是否一个的改变会造成另外一个的改变,这个是因果关系的情况,想要弄清楚两个之间是否存在因果关系吗,这个时候需要进行回归分析和预测 

构建回归分析模型:虽然这个是一个一次函数的情况,但是我们构建这个方程的时候需要去写上一个爱普西陇作为误差;

  1. 这个首先我们需要导入一个模块 sllearn模块,我们使用这个模块对于数据集进行训练;
  2. 对应的数据集需要以二维的结构进行传参,因为后面还有这个多重的线性回归,因此这个系统会同意进行这个二维数组的识别,传递一维的结构就会报错;
  3. 调用LinearRegression进行这个模型的初始化,这个linear就是线性的意思,这个regression就是回归的意思;
  4. 使用fit函数对于我们的数据集进行训练,这个参数就是我们的自变量和因变量;
  5. coef_这个属性是获得对应的系数,就是我们常说的k值,这个是一个二维的,我们使用双索引的方式获得对应的数值;
  6. 我们使用intercept属性获得这个对应的常数项,这个就是一个一维数组,我们使用一个索引就可以获得对应的数值;
  7. 最后使用这个格式化的输出方式把这个结果打印输出即可;
import pandas as pd 
df = pd.read_csv("/Users/ad/exposure_to_new.csv")

# 导入sklearn.linear_model模块中的LinearRegression函数
from sklearn.linear_model import LinearRegression

#  以二维结构读取"exposure"这一列,作为自变量x
x = df[["exposure"]]
# 以二维结构读取"new_user"这一列,作为因变量y
y = df[["new_user"]]

# 使用LinearRegression()初始化模型,赋值给lr
lr = LinearRegression()
# 使用自变量x和因变量y,训练线性回归模型lr
lr.fit(x,y)

# 使用coef_[0][0],获取系数b的值
b = lr.coef_[0][0]
# 使用intercept_[0],获取截距a的值
a = lr.intercept_[0]
# 格式化输出,f"该线性回归模型为:Y={a}+{b}*X"
print(f"该线性回归模型为:Y={a}+{b}*X")

1.4模型的检验 

###对于模型的检验:使用的是这个判定系数,直接调用score函数,这个数值的范围是在0-1之间,越接近于1说明这个模型的准确性越高;

import pandas as pd 
df = pd.read_csv("/Users/ad/exposure_to_new.csv")

# 导入sklearn.linear_model模块中的LinearRegression类
from sklearn.linear_model import LinearRegression

#  以二维结构读取"exposure"这一列,作为自变量x
x = df[["exposure"]]
# 以二维结构读取"new_user"这一列,作为因变量y
y = df[["new_user"]]

# 使用LinearRegression()初始化模型,赋值给lr
lr = LinearRegression()
# 使用自变量x和因变量y,训练线性回归模型lr
lr.fit(x,y)

# TODO 将x,y传入score( )函数,对模型打分,获取判定系数r2
r2=lr.score(x,y)
# TODO 输出r2
print(r2)

1.5模型的预测 

 ###模型的预测:就是根据我们的回归方程进行这个合理的预测,这个可以使用自带的predict函数,也可以去直接带入进行计算,一般直接调用函数即可,参数就是我们的需要进行预测的数据

这个数据如果是单个数据,需要写成二维数组的方式,多个数据就也需要写成二维数组

import pandas as pd 
df = pd.read_csv("/Users/ad/exposure_to_new.csv")

# 导入sklearn.linear_model模块中的LinearRegression类
from sklearn.linear_model import LinearRegression

#  以二维结构读取"exposure"这一列,作为自变量x
x = df[["exposure"]]
# 以二维结构读取"new_user"这一列,作为因变量y
y = df[["new_user"]]

# 使用LinearRegression()初始化模型,赋值给lr
lr = LinearRegression()
# 使用自变量x和因变量y,训练线性回归模型lr
lr.fit(x,y)

# TODO 将200000,250000,300000以二维结构传入传入predict()函数进行预测,并赋值给y_predict

y_predict = lr.predict([[200000],[250000],[300000]])
# 输出此时的预测结果y_predict
print(y_predict)

2.多重线性回归分析(上)

2.1多重线性的概念

问题的背景就是这个因变量可能会和多个自变量相关,我们想要去套索哪一个自变量对于这个因变量的影响的程度会更大,影响的成都各自都是怎么样的,像这种一个因变量,多个自变量的情况就是多重线性回归模型;

2.2散点图的分类 

  • 散点图:
  • 单自变量散点图:matlibplot模块里面的scatter函数;
  • 多自变量散点图:需要安装seaborn模块,使用里面的pairplot函数;
  1. 代码解析:
  2. pairplot函数绘制的是两两之间的关系的散点图;
  3. df这个里面有5个自变量,这个时候就会绘制出来5*5的散点图;
import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")
# 导入matplotlib.pyplot,简称plt
import matplotlib.pyplot as plt

# TODO 导入seaborn模块,简称sns
import seaborn as sns
# TODO 使用sns的pairplot函数,绘制多变量散点图,df作为参数传入
sns.pairplot(df)

# 使用plt.show()函数显示图像
plt.show()
  1. 绘图结果说明:
  2. 这个里面的x,y轴上面标注了对应的含义,每一张图代表的都是这两个变量之间的关系,因为这个对角线上面是自己和自己的关系,所以使用的是直方图代替的; 

 

2.3热力图的绘制 

  1. 热力图的绘制代码分析:
  2. 我们首先是要计算这个相关系数,使用这个相关系数作为参数绘制热力图,因此我们需要使用corr函数;
  3. 使用这个corr函数之前,去掉这个日期,因为这个日期和其他的变量的相关性无法计算,因此使用drop函数去掉即可;
  4. heatmap函数是用来进行这个热力图绘制的函数;
  5. corr就是上面求解的相关系数的结果;
  6. square是这个热力图上面的形状,这个地方使用的就是正方形;
  7. annot表示对应的这个正方形上面回去标注对应的相关系数的数值情况;
import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 将名为"date"的列的数据删除
df.drop("date", axis=1)

# 导入seaborn模块,简称sns
import seaborn as sns
# 导入matplotlib.pyplot,简称plt
import matplotlib.pyplot as plt

# 对df计算相关性,并赋值给变量corr
corr = df.corr()

# TODO 绘制相关系数热力图
# 使用sns的heatmap函数,传入corr,
# 颜色参数cmap="RdBu",形状参数square=True,数字标记参数annot=True
sns.heatmap(corr, cmap="RdBu", square=True, annot=True)

# 使用plt.show()函数显示图像
plt.show()

 

2.4根据结果确定新的变量

##重新确定自变量:就是我们根据这个热力图上面的颜色深浅,选出来跟这个因变量的相关性较大的自变量3个进行分析;

这里有3个自变量,故多重线性回归模型可以表示为:Y = a + bX1 + cX2 + dX3;

  • 代码说明:
  • 下面的这个就是进行模型的初始化,训练,预测数据等等操作,基本上和我们的一元线性模型使用的方法相同,就是这个参数是3个自变量的一维数组,其他的完全一样;
  • round表示的是对于这个计算结果保留的小数的位数,计算结果太繁杂不利于我们的分析; 
import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# 导入sklearn.linear_model模块中的LinearRegression函数
from sklearn.linear_model import LinearRegression

# 使用LinearRegression()初始化模型,赋值给lr_model
lr_model = LinearRegression()
# 使用lr_model模型的fit()方法训练模型
lr_model.fit(x,y)

# 使用coef_[0][0],获取系数b的值,并保留4位小数
b = lr_model.coef_[0][0].round(4)
# 使用coef_[0][1],获取系数c的值,并保留4位小数
c = lr_model.coef_[0][1].round(4)
# 使用coef_[0][2],获取系数d的值,并保留4位小数
d = lr_model.coef_[0][2].round(4)
# 使用intercept_[0],获取截距a的值,并保留2位小数
a = lr_model.intercept_[0].round(2)
# 格式化输出,f"该线性回归模型为:Y={a}+{b}X1+{c}X2+{d}X3"
print(f"该线性回归模型为:Y={a}+{b}X1+{c}X2+{d}X3")

3.多重线性回归分析(下)

3.1多重共线性的判断方法

相关系数:使用corr函数对于这个自变量之间的相关性进行判断,这个打印输出的结果就是这个3*3的表格,里面的每一个数值都代表着两个自变量之间的相关性;

import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# 使用corr(),计算自变量之间的相关系数,并输出
print(x.corr())

 

这个问题就是相关系数高,可以证明存在多重共线性,但是相关系数低,不一定就没有多重共线性,这个时候就需要用到我们的方差膨胀系数; 

 

方差膨胀系数法:这个方法也叫做VIF检验,这个是用来衡量多重共线性严重程度的一个度量指标

代码分析:

  1. 首先需要导入对应的模块,这个模块里面的函数可以去计算对应的膨胀系数;
  2. variance_inflation_factor就是计算膨胀系数的函数;
  3. 函数的参数里面的通过for循环依次进行计算每一个自变量的膨胀系数;
  4. x.values表示的就是自变量x的数据;
  5. x.columns.get_loc(i)表示的就是返回i所在列的序号,这个地方返回的就是0,1,2,第一列返回0,第二列返回1以此类推,这个i就是我们的for循环里面每一次进行循环的i值;
import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# TODO 从statsmodels.stats.outliers_influence模块中导入variance_inflation_factor()函数
from statsmodels.stats.outliers_influence import variance_inflation_factor

# TODO 通过for循环依次求得每个自变量的方差膨胀系数,并将结果放入列表中,赋值给变量vif
vif = [variance_inflation_factor(x.values, x.columns.get_loc(i)) for i in x.columns]
# TODO 输出vif
print(vif)

 

结果分析:hot,search的VIF都是大于100的,我们需要进行处理,否则就会出现过拟合的现象(对于数据集里面的数据符合度很高,对于其他的数据不贴合)

我们首先可以通过改变这个数据集的划分方式解决这个过拟合的问题:

  1. 这个是进行数据集和测试集的划分,在一定程度上可以减少我们的共线性程度,提高模型的泛化能力(对于未知样品的预测能力);
  2. train_test_split函数就是进行的这个数据集的划分,test_size=0.2表明这个数据里面80%的是训练集,20%的测试集;
  3. random_state这个参数是每一次划分的结果都是不一样的,但是划分的数据集合是一样的
  4. 下面就是构建这个模型,进行数据的训练和预测,score对于我们的这个预测的结果进行打分
import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# 导入sklearn.linear_model模块中的LinearRegression函数
from sklearn.linear_model import LinearRegression

# 导入sklearn.model_selection模块中的train_test_split函数
from sklearn.model_selection import train_test_split

# 使用train_test_split()函数划分训练集和测试集,设置参数test_size=0.2,random_state=1
# 依次赋值给x_train,x_test,y_train,y_test
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1)

# 初始化线性回归模型,赋值给lr_model
lr_model = LinearRegression()

# 使用fit()函数训练模型,传入训练集数据
lr_model.fit(x_train,y_train)

# 使用score函数,传入测试集数据,得到模型的判定系数,赋值给r2
r2 = lr_model.score(x_test,y_test)

# 输出r2
print(r2)

3.2多重共线性的解决 

接下来是这个多重共线性的解决方案:手动移除变量,岭回归,逐步回归等等,今天我们知识学习一下这个最简单的手动移除变量,剩下的后续会学到的;

下面的这个就是我们去掉这个hot或者是search里面的一个重新计算VIF,这个下面的是去掉的search的情况,两个都是类似的;

import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# 从statsmodels.stats.outliers_influence模块中导入variance_inflation_factor()函数
from statsmodels.stats.outliers_influence import variance_inflation_factor

# 使用drop()函数,设置参数columns,删除"search"这一列,再赋值给x
x = x.drop(columns="search")

# 通过for循环依次求得每个自变量的方差膨胀系数,并将结果放入列表中,赋值给变量vif
vif = [variance_inflation_factor(x.values, x.columns.get_loc(i)) for i in x.columns]

# 输出vif
print(vif)

3.3对于效果的检查

查看效果:

看看系数和截距是否有明显的变化:

先看看系数:

#下面的这个试看看移除前后系数的变化情况


import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# for循环遍历列表["hot","search"]
for i in ["hot","search"]:
    # TODO 使用drop()函数,设置参数columns,删除i所在列,再赋值给xi
    xi = x.drop(columns=i)

    # 导入sklearn.model_selection模块中的train_test_split函数
    from sklearn.model_selection import train_test_split
    # 使用train_test_split()函数划分训练集和测试集,设置参数test_size=0.2,random_state=1
    # TODO 依次赋值给x_train,x_test,y_train,y_test
    x_train,x_test,y_train,y_test=train_test_split(xi,y,test_size=0.2,random_state=1)

    # 导入sklearn.linear_model模块中的LinearRegression函数
    from sklearn.linear_model import LinearRegression
    # 初始化线性回归模型,赋值给lr_model
    lr_model = LinearRegression()
    # TODO 使用fit()函数训练模型,传入训练集数据
    lr_model.fit(x_train,y_train)

    # TODO 使用score函数,传入测试集数据,得到模型的判定系数,并输出
    print(lr_model.score(x_test,y_test))

再看看截距:

为什么相悖,因为即使是没有曝光,没有热度,没有搜索,还有这么大的新增用户数量,这个显然是不成立的,因此这个是相悖的;

import pandas as pd 
df = pd.read_csv("/Users/mul/multiple_to_new.csv")

# 以二维结构读取"exposure","hot","search"这三列,作为自变量x
x = df[["exposure", "hot", "search"]]
# 以二维结构读取"new_user",作为因变量y
y = df[["new_user"]]

# for循环遍历列表["hot","search"]
for i in ["hot","search"]:
    # 使用drop()函数,设置参数columns,删除i所在列,再赋值给xi
    xi = x.drop(columns=i)

    # 导入sklearn.model_selection模块中的train_test_split函数
    from sklearn.model_selection import train_test_split
    # 使用train_test_split()函数划分训练集和测试集,设置参数test_size=0.2,random_state=1
    # 依次赋值给x_train,x_test,y_train,y_test
    x_train,x_test,y_train,y_test=train_test_split(xi,y,test_size=0.2,random_state=1)

    # 导入sklearn.linear_model模块中的LinearRegression函数
    from sklearn.linear_model import LinearRegression
    # 初始化线性回归模型,赋值给lr_model
    lr_model = LinearRegression()
    # 使用fit()函数训练模型,传入训练集数据
    lr_model.fit(x_train,y_train)

    # 使用coef_[0][0],获取系数b的值,并保留4位小数
    b = lr_model.coef_[0][0].round(4)
    # 使用coef_[0][1],获取系数c的值,并保留4位小数
    c = lr_model.coef_[0][1].round(4)
    # 使用intercept_[0],获取截距a的值,并保留2位小数
    a = lr_model.intercept_[0].round(2)
    # 格式化输出f"自变量为{xi.columns.values}时:"
    print(f"自变量为{xi.columns.values}时:")
    # 格式化输出,f"对应的线性回归模型为:Y={a}+{b}X1+{c}X2"
    print(f"对应的线性回归模型为:Y={a}+{b}X1+{c}X2")

 

4.自我反思与总结

通过上面的这个核实过程,我们发现手动删除的弊端,岭回归和逐步回归可能会解决这个问题,但是将会更加复杂,多重共线性的问题解决方案有很多,我们的这个只是最简单的一种,我们这个地方只是一次删除一个数据集,让两个之间的相关性取消,但是如果这个VIF>100 的数据集有3,45个呢,甚至更多呢,我们还是一个一个的删除吗,只保留一个,其他的全部删除的方法肯定就不合适了,因为这个时候我们删除的数据太多了,对于这个模型的损失比较大,肯定是不合适的;

但是如果我们删除的少了,例如我们只删除1-2组数据集,这个时候剩下的数据集之间依然是存在相关性的,这个时候又应该如何进行解决呢?

我只能说:路漫漫其修远兮,吾将上下而求索~~

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

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

相关文章

【开端】 如何判断手机号码属于哪个国家(手机号判断正则)汇总

import org.apache.commons.lang3.StringUtils; /** * 手机号判断正则 */ public enum MobileRegularExp { /** * 国家 正则 */ CN("中国", 86, "^(\\?0?86\\-?)?1[3456789]\\d{9}$"), TW("中国台湾", 886, "…

第七节 循环结构;goto语句

目录 7.1 while循环 7.1.1 if 和 while的对⽐ 7.1.2 while的执行流程 7.1.3 while的练习 7.2 for循环 7.2.1 语法形式 7.2.2 for循环的执⾏流程 7.2.3 for 循环的练习 7.3 while 和 for 循环的对比 7.4 do while 循环 7.4.1 do while 的语法形式 7.4.2 do while循…

Jamba前生今世:1.5开源来袭

AI21服务于企业,为企业构建基础模型和AI系统以加速GenAI在生产中的使用。AI21 成立于2017年,已从NVIDIA、Intel、Google等公司共筹集了3.36亿美元。它是最早将生成式AI推向大众的公司之一,借助AI21平台,企业可以构建自己的生成式A…

菲菲更名宝贝:批量处理,文件命名不再繁琐

你是否有这样的经历?曾几何时,在堆积如山的文件中迷失方向,为了一个个手动重命名文件而加班到深夜?是否渴望有一种魔法,能瞬间让你的文件整理得井井有条,让繁琐的命名工作变得轻松愉快?那么&…

大数据毕业设计开题报告100例

文章目录 🚩 1 前言1.1 选题注意事项1.1.1 难度怎么把控?1.1.2 题目名称怎么取? 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢? 🚩2 选题概览🚩 3 项目概览题目1 : 深度学习社…

前端网站优化-Brotli 压缩

杨绛先生说:“岁不声不响,你且不慌不忙。在凡俗的烟火里,愿以素心,阅来日方长。生活总是一地鸡毛,繁杂琐碎的日常,无力掌控的局面,以及猝不及防的变化,让日子多了几分慌张”。 市井长巷&#xf…

ssrf漏洞复现

环境搭建 zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台 (github.com) 直接将其复制到linux环境下拉取docker就行 我这里已经拉去过了,如果拉去速度慢话,可以在/etc/docker下的daemon.json中配置镜像加速 vim /etc/docker/daemon.js…

大模型学习笔记 - LLM 对齐优化算法 DPO

LLM - DPO LLM - DPO DPO 概述DPO 目标函数推导DPO 目标函数梯度的推导 DPO 概述 大模型预训练是从大量语料中进行无监督学习,语料库内容混杂,训练的目标是语言模型损失,任务是next token prediction,生成的token 不可控&…

MyBatis-Plus分页插件使用详解

一、简述 在使用mybatis开发项目的时候我们通常使用pagehelper来进行分页操作, 但是我们在使用MyBatis-Plus 开发时,MyBatis-Plus内置已经有分页功能了,其实不需要在额外引入pagehelper依赖了,而且两者同时引入有时候还会导致分页…

主流商品API接口在电商跨境电商企业应用/项目中的重要作用

618狂欢已经开启,为了获取更大利益,电商商家应使用价格接口系统。价格接口对电商商家有多方面的好处,主要体现在以下几个方面: 1、价格接口系统可以帮助品牌和商家实现更加科学和精准的定价策略。通过实时获取多个主流电商平台&a…

公众号里面的试卷怎么打印

经过我们的观察发现,微信公众号中的试卷通常有两种形式:图片和文档。如果试卷是以图片的形式嵌入在文章中作为配图,您只需点击图片并长按,选择“保存图片”到手机中。之后,您可以选择任何方便的方式完成打印。 不过&am…

ELK企业级日志分析系统(分布式文件系统与企业级应用)

一、ELK 概述 1、ELK简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch 是基于Lucene(一个全文检索引擎的架构…

笔记整理—uboot启动过程(4)BL2干了什么及内存排布

uboot的第一阶段结束于start_armboot,第二阶段的uboot代码主要负责soc外部硬件(inand、网卡、......)、uboot本身构建(uboot指令、环境变量、......)最后进入命令行,等待命令然后倒数,等待bootc…

Pytest框架环境切换实战教程

测试人员每天都跟不同的环境打交道,比如线上环境,测试环境,预上线环境等等,那么作为自动化测试人员写的代码,我们也要具备能自由切换环境的能力,那么今天小编就给大家聊一下,如何能让我们python…

linux 安装kafaka单体服务

1.下载kafka的linux安装包 前往Apache Kafka官方网站下载页面(Apache Kafkahttps://kafka.apache.org/downloads),选择最新稳定版的Kafka二进制分发文件,通常是以.tgz结尾的文件。 手动下载kafka_2.13-3.8.0.tgz到本地&#xff0…

Spring Boot 与 Spring Security 的集成及 OAuth2 实现

我的主页:2的n次方_ 在现代 Web 应用开发中,安全性是至关重要的。无论是保护用户的敏感数据,还是确保 API 只允许经过授权的请求访问,开发者都需要一个强大且灵活的安全框架来实现这些需求。Spring Security 作为 Spring 框架的…

MATLAB 生成指定范围、角度、厚度的含噪平面点云(77)

模拟生成点云并可视化显示,可以验证算法有效性,尤其是针对验证算法的某方面 MATLAB 生成指定范围、角度、厚度的含噪平面点云(77) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 如题,模拟生成一组平面点云,含有噪声点,确定算法稳定性,可以指定生成平面的范围,厚…

混合A*算法

混合A*算法是一种改进版的A*算法,特别针对车辆动力学进行了优化。这种算法在经典A*的基础上引入了新的维度和概念,以生成更加实际可行的路径。 首先,混合A*算法不仅考虑x和y的位置,还引入了θ维度来表示车辆的朝向。这意味着搜索…

Unity视频播放插件-VideoPro(Windows)

Unity视频播放插件-VideoPro-windows 🌮介绍🍤使用方法🥙示例🌳rtsp🌳本地视频🌳网络视频 🌮介绍 1.支持播放格式:rtsp、http、本地视频。 2.exe试用🌈 3.经测试i9 cpu 空…

【STM32开发笔记】搭建基于ST官方VSCode扩展的STM32开发环境

搭建基于ST官方VSCode扩展的STM32开发环境 一、安装软件1.1 安装VSCode1.2 安装STM32CubeMX1.3 安装STM32CubeCLT1.4 安装ST-MCU-FINDER-PC 二、安装插件2.1 安装 STM32 VS Code Extension 三、创建项目3.1 创建STM32CubeMX项目3.2 查阅原理图3.3 修改引脚功能3.4 生成CMake项目…