大数据HCIE成神之路之数据预处理(3)——数值离散化

数值离散化

    • 1.1 无监督连续变量的离散化 – 聚类划分
      • 1.1.1 实验任务
        • 1.1.1.1 实验背景
        • 1.1.1.2 实验目标
        • 1.1.1.3 实验数据解析
      • 1.1.2 实验思路
      • 1.1.3 实验操作步骤
      • 1.1.4 结果验证
    • 1.2 无监督连续变量的离散化 – 等宽划分
      • 1.2.1 实验任务
        • 1.2.1.1 实验背景
        • 1.2.1.2 实验目标
        • 1.2.1.3 实验数据解析
      • 1.2.2 实验思路
      • 1.2.3 实验操作步骤
      • 1.2.4 结果验证
    • 1.3 无监督连续变量的离散化 – 等频划分
      • 1.3.1 实验任务
        • 1.3.1.1 实验背景
        • 1.3.1.2 实验目标
        • 1.3.1.3 实验数据解析
      • 1.3.2 实验思路
      • 1.3.3 实验操作步骤
      • 1.3.4 结果验证
    • 1.4 有监督连续变量的离散化 – 基于卡方检验的方法
      • 1.4.1 实验任务
        • 1.4.1.1 实验背景
        • 1.4.1.2 实验目标
        • 1.4.1.3 实验数据解析
      • 1.4.2 实验思路
      • 1.4.3 实验操作步骤
      • 1.4.4 结果验证

1.1 无监督连续变量的离散化 – 聚类划分

聚类划分 是指使用聚类算法将数据分为K类,需要自己设定K值大小。从而把同属一类的数值标记为相同标签。目前常用的聚类划分方法是Kmeans算法。

聚类划分的实现使用Python中sklearn库的KMeans ( ) 函数,其基本格式如下:

KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto')

关键参数详解:

  • n_clusters=8,表示要分成的簇数,默认为8。
  • init=‘k-means++’,表示初始化质心,默认采用k-means++,是一种生成初始质心的算法。
  • n_init=10,表示选择的质心种子次数,默认为10次。返回质心最好的一次结果,即计算时长最短的一次结果)。
  • max_iter=300,表示每次迭代的最大次数,默认为300。
  • tol=0.0001,表示容忍的最小误差,当误差小于tol就会退出迭代,默认值为0.0001。
  • precompute_distances=auto,这个参数会在空间和时间之间做权衡,如果是True会把整个距离矩阵都放到内存中,auto状态下会默认在数据样本大于featurs*samples 的数量时则False。
  • verbose=0,表示是否输出详细信息 。
  • random_state=None,表示随机生成器的种子,和初始化中心有关。
  • copy_x=True,表示是否对输入数据继续copy 操作,以便不修改用户的输入数据。
  • n_jobs=1,表示使用进程的数量,默认为1。

1.1.1 实验任务

1.1.1.1 实验背景

KMeans是最简单的聚类算法之一,但是运用十分广泛。KMeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类研究不同聚类下数据的特点。

1.1.1.2 实验目标

掌握对数据进行KMeans聚类划分的操作。

1.1.1.3 实验数据解析

数据使用鸢尾花数据集。

1.1.2 实验思路

  • 导入实验数据集。

  • 使用KMean( )函数对数据进行聚类划分并可视化展示出来。

1.1.3 实验操作步骤

步骤 1 导入数据集

iris是150*4的数据集,为实验过程更易被理解。特取其中2-4列的数据进行聚类划分实验。

import numpy as np 
from sklearn.datasets import load_iris 
iris=load_iris()
# 只取数据集中的 3列【petal length (cm)】、4列【petal width (cm)】的数据
X = iris.data[:, 2:4]

X的部分结果如下:

array([[1.4, 0.2],
       [1.4, 0.2],
       [1.3, 0.2],
       [1.5, 0.2],
       [1.4, 0.2],
       [1.7, 0.4],
       [1.4, 0.3],
       [1.5, 0.2],
       [1.4, 0.2],

步骤 2 聚类划分

# 导入 KMeans 包
from sklearn.cluster import KMeans
# 构造聚类器实例
estimator = KMeans(n_clusters=3) 
# 聚类
estimator.fit(X) 
# 获取聚类标签
label_pred = estimator.labels_

补充:

label_pred 的结果如下:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

打印 label_pred==0 的值:

x0 = X[label_pred == 0]
x0

部分结果显示如下:

array([[1.4, 0.2],
       [1.4, 0.2],
       [1.3, 0.2],
       [1.5, 0.2],
       [1.4, 0.2],
       [1.7, 0.4],
       [1.4, 0.3],
       [1.5, 0.2],
       [1.4, 0.2],
       [1.5, 0.1],
       [1.5, 0.2],
       [1.6, 0.2],

解释: label_pred 的元素个数与 X 的行数是一样的(因为一个标签,对应一行数据), label_pred 的元素值如果为0,则为True, X[label_pred == 0] 其实就是把为True的对应位置的元素保留了下来,所以就相当于实现了筛选。

步骤 3 可视化展示聚类划分结果

# 导入可视化包
import matplotlib.pyplot as plt
# 可视化 k-means 结果
# 设置测试数据
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
# 设置绘制的图像为散点图,输入数据 x0,散点的颜色为红色,散点的形状为 o,标签为label0
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o',
            label='label0')
# 设置绘制的图像为散点图,输入数据 x1,散点的颜色为绿色,散点的形状为*,标签为label1
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*',
            label='label1')
# 设置绘制的图像为散点图,输入数据 x2,散点的颜色为蓝色,散点的形状为+,标签为label2
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+',
            label='label2')
# 设置 x 轴标题为'petal length'
plt.xlabel('petal length')
# 设置 y 轴标题为'petal width'
plt.ylabel('petal width')
# 设置图例显示的位置为左上角
plt.legend(loc=2)
# 显示可视化结果
plt.show()

输出结果如下:
在这里插入图片描述
扩展学习:

下面是一些常用的estimator属性和方法:

labels_ :聚类标签。它是一个大小为 n_samples 的一维数组,表示每个样本所属的聚类簇的标签。

label_pred = estimator.labels_

cluster_centers_ :聚类中心。它是一个大小为 (n_clusters, n_features) 的二维数组,表示每个聚类簇的中心点的坐标。

centers = estimator.cluster_centers_

inertia_ :聚类内部的平方和误差 (SSE) 。它是一个标量值,表示所有样本到其所属聚类中心的距离的总和。

sse = estimator.inertia_

n_clusters :聚类的 数量 。它是一个整数,表示聚类器指定的聚类簇的个数。

num_clusters = estimator.n_clusters

fit(X) :对数据进行聚类。X是一个大小为 (n_samples, n_features) 的二维数组,表示输入的特征数据。

estimator.fit(X)

fit_predict(X) :对数据进行聚类,并返回聚类 标签

labels = estimator.fit_predict(X)

整理成表格如下:

属性/方法描述
labels_聚类标签。大小为 n_samples 的一维数组,表示每个样本所属的聚类簇的标签。
cluster_centers_聚类中心。大小为 (n_clusters, n_features) 的二维数组,表示每个聚类簇的中心点的坐标。
inertia_聚类内部平方和误差(SSE)。标量值,表示所有样本到其所属聚类中心的距离的总和。
n_clusters聚类的数量。整数,表示聚类器指定的聚类簇的个数。
fit(X)对数据进行聚类。X 是一个大小为 (n_samples, n_features) 的二维数组,表示输入的特征数据。
fit_predict(X)对数据进行聚类,并返回聚类标签

这些属性和方法可以帮助你使用KMeans聚类器进行聚类操作,并获取聚类结果、聚类中心以及聚类质量的评估。你可以根据具体的需求选择适当的属性或方法来处理聚类结果。

1.1.4 结果验证

由上述实验结果可知,使用 k-means 方法对鸢尾花部分数据集进行聚类划分之后将数据的分成了三类,几乎没有数据点是异常的。

1.2 无监督连续变量的离散化 – 等宽划分

等宽划分 是指把连续变量按照相同的区间间隔划分几等份。换句话说,就是根据连续变量的 最大值最小值 ,将变量划分为N等份。

等宽划分的实现使用Python中pandas库的cut ( ) 函数,其基本格式如下:

pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)

关键参数详解:

  • x,表示进行划分的 一维数组
  • bins,定义分箱边界的标准,表示将x划分为多少个等间距的区间。
  • right=True,是否包含右端点,表示是否包含箱子的最右边的边界。如果right=True,那么箱子[1, 2, 3, 4]表示(1,2], (2,3], (3,4]。
  • labels=None,指定返回的箱子的标签,表示是否用标记来代替返回的bins,必须与结果的箱子长度相同。
  • retbins=False,表示是否返回箱子。默认为False,False 则返回x中每个值对应的bin的列表,Ture则返回x中每个值对应的bin的列表和对应的bins。
  • precision=3,表示存储和显示箱子标签的精度,默认为3,表示返回的数据将包含三位小数。
  • include_lowest=False,表示是否包含左端点,表示第一个区间是否应该是左包含的。

1.2.1 实验任务

1.2.1.1 实验背景

可以使用cut( )函数进行等宽划分,按照相同宽度将数据分成几等份。缺点是受到异常值的影响比较大。

1.2.1.2 实验目标

掌握对数据进行等宽划分的操作。

1.2.1.3 实验数据解析

实验使用鸢尾花数据集。

1.2.2 实验思路

  • 导入实验数据集。
  • 使用cut ( )函数对数据进行等宽划分。

1.2.3 实验操作步骤

步骤 1 数据准备

import pandas as pd
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data[:,1]

步骤 2 等宽划分

#指定分段的段数为 5 
x=pd.cut(X,5)
x

输出结果如下:

[(3.44, 3.92], (2.96, 3.44], (2.96, 3.44], (2.96, 3.44], (3.44, 3.92], ..., (2.96, 3.44], (2.48, 2.96], (2.96, 3.44], (2.96, 3.44], (2.96, 3.44]]
Length: 150
Categories (5, interval[float64]): [(1.998, 2.48] < (2.48, 2.96] < (2.96, 3.44] < (3.44, 3.92] < (3.92, 4.4]]

扩展:加上retbins=True

pd.cut(X, 5, retbins = True)

则多打印一行:

array([1.9976, 2.48  , 2.96  , 3.44  , 3.92  , 4.4   ]))

上面这六个数,其实就是分隔区间的边界值。

1.2.4 结果验证

系统自动将数据划分为(1.998, 2.48]、 (2.48, 2.96] 、(2.96, 3.44] 、(3.44, 3.92] 、(3.92, 4.4]五个等宽区间,并将原本的数据集中的 数据对应的区间显 示出来。

思考:为什么精度是3位小数,但是结果有一些是3位,有一些是两位,有一些是一位?
回答:precision参数可以控制分箱边界的最大小数位数,但实际的小数位数还取决于数据的分布。比如4.400其实也就是4.4,就没必要写4.400了。

1.3 无监督连续变量的离散化 – 等频划分

把连续变量划分几等份,保证每份的数值个数相同。具体来说,假设共有M个数值,划分N份,每份包含(M/N)个数值,使用Python中pandas库的qcut() 函数,其基本格式如下:

qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

关键参数详解:

  • x,表示进行划分的 一维数组
  • q,表示划分的组数。
  • labels=None,表示是否用标记来代替返回的bins。
  • retbins=False,表示返回值,False 代表返回x中每个值对应的bin的列表,Ture代表返回x中每个值对应的bin的列表和对应的bins。
  • precision=3,表示精度,默认为3。
  • duplicates如果bin值边缘不唯一,就提高错误值或删除非唯一性。

1.3.1 实验任务

1.3.1.1 实验背景

我们可以使用qcut( )函数进行等频划分,将数据分成几等份,每等份数据里面的个数是一样的。

1.3.1.2 实验目标

掌握使用qcut函数实现数据的等频划分。

1.3.1.3 实验数据解析

实验使用鸢尾花数据集。

1.3.2 实验思路

  • 导入实验数据集。

  • 使用qcut ( )函数对数据进行等频划分。

1.3.3 实验操作步骤

步骤 1 数据准备

iris是150*4的数据集,特取其中一个属性进行等频划分实验。

import pandas as pd
from sklearn.datasets import load_iris
iris=load_iris()
X=iris.data[:,1]

步骤 2 等频划分

#指定分段的段数为 5 
x=pd.qcut(X,5)
x

输出结果如下:

[(3.4, 4.4], (2.7, 3.0], (3.1, 3.4], (3.0, 3.1], (3.4, 4.4], ..., (2.7, 3.0], (1.999, 2.7], (2.7, 3.0], (3.1, 3.4], (2.7, 3.0]]
Length: 150
Categories (5, interval[float64]): [(1.999, 2.7] < (2.7, 3.0] < (3.0, 3.1] < (3.1, 3.4] < (3.4, 4.4]]

1.3.4 结果验证

系统自动将数据划分为(1.999, 2.7] 、(2.7, 3.0] 、(3.0, 3.1] 、(3.1, 3.4] 、(3.4, 4.4]五个等频区间。

补充一(precision参数的说明):
例如,如果我们有一个数据范围从0.123456到1.123456,我们想要将其划分为两个箱子,那么:
如果我们设置precision=2,那么我们得到的箱子边界将是(0.12, 0.62]和(0.62, 1.12]。
如果我们设置precision=3,那么我们得到的箱子边界将是(0.123, 0.623]和(0.623, 1.123]。
因此,precision参数影响了分箱标签的精度,这可能会影响我们对数据的理解和解释。但是,它并不会改变实际的分箱过程,也就是说,数据仍然会被均匀地分配到每个箱子中。

补充二(什么是等距分箱?什么是等频分箱):

  • 等距分箱:是最为常用的分箱方法之一,从最小值到最大值之间,均分为N等份,如果A,B为最小最大值,则每个区间的长度为W=(B−A)/N,则区间边界值为A+W,A+2W,….A+(N−1)W。这里只考虑边界,每个等份里面的实例数量可能不等。

  • 等频分箱:区间的边界值要经过选择,使得每个区间包含大致相等的实例数量。比如说 N=10,每个区间应该包含大约10%的实例。

这两种分箱方法都是无监督的分箱方法,只根据变量值的分布来划分区间,不需要有目标变量(标签)。

1.4 有监督连续变量的离散化 – 基于卡方检验的方法

该方法是一种自底向上的方法,运用卡方检验的策略,自底向上合并数值进行有监督离散化,核心操作是Merge。将数据集里的数值当做单独区间,递归找出可合并的最佳临近区间。判断可合并区间用到卡方统计量来检测两个区间的相关性,对符合所设定阀值的区间进行合并。常用的方法有ChiMerge、Chi2、Chi-Square Measure,下面对Chi2方法详细说明。

基于卡方检验的数值特征离散化的实现使用Python中scipy.stats统计函数库中的chi2 ( ) 函数,其基本使用格式如下:

chi2(X, y)

关键参数详解:

  • X,样本数据。
  • y,目标数据。

1.4.1 实验任务

1.4.1.1 实验背景

我们可以使用chi2 ( )函数进行卡方检验,这是一种基础的常用假设检验方法。

1.4.1.2 实验目标

掌握使用chi2 ( )函数实现数据集的卡方分箱操作。

1.4.1.3 实验数据解析

实验使用鸢尾花数据集。

1.4.2 实验思路

  • 导入实验数据集。
  • 使用chi2 ( )函数对数据进行基于卡方检验的有监督连续变量的离散化。

1.4.3 实验操作步骤

步骤 1 导入数据集

import pandas as pd
from sklearn.datasets import load_iris
iris=load_iris()

# 对数据集做基于卡方检验的有监督连续变量的离散化。
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# 选择 K 个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

输出的部分结果如下:

# 输出结果
array([[1.4, 0.2],[1.4, 0.2],[1.3, 0.2],[1.5, 0.2],[1.4, 0.2],[1.7, 0.4],

1.4.4 结果验证

由上述实验结果可知,原先没有规律的数据经过卡方检验操作后,对每个样本进行了有监督连续变量的离散化,从 Iris 数据集中选择的两个最佳特征是 “花瓣长度 (cm)” 和 “花瓣宽度 (cm)”。这两个特征被认为与目标变量具有较高的相关性,因此被选择作为特征子集。提示,虽然特征选择可能是数据预处理的一部分,但它着重于选择最重要的特征,而不是对数据进行转换或清洗。因此,在上述例子中,我们可以将其归类为特征选择相关的知识。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用户管理第2节课-idea 2023.2 后端--删除表,从零开始

一、鱼皮清空model文件夹下 二、鱼皮清空mapper文件夹下 三、删除 test 测试类下的部分代码 3.1删除SampleTest 3.2删除部分代码 UserCenterApplicationTests

自动化测试|Eolink Apikit 如何保存、使用测试用例

测试用例是测试过程中很重要的一类文档&#xff0c;它是测试工作的核心&#xff0c;是一组在测试时输入和输出的标准&#xff0c;是软件需求的具体对照。 测试用例可以帮助测试人员理清测试思路&#xff0c;确保测试覆盖率&#xff0c;发现需求漏洞&#xff0c;提高软件质量&a…

VC++ MinGW编译器将图片、字体等资源文件编译进程序和使用

Mingw使用附带的windres.exe可以将资源文件编译成.o文件, 之后与其他目标文件一起g++.exe链接生成程序 为了方便,使用mingw编译器版本的codeblock编写程序 用位图资源作为例子,新建一个空项目,在项目下新建一个资源文件,resource.rc,一个cpp文件main.cpp,一个头文件reso…

YOLOv8轻量化模型:模型轻量化创新 | MobileNetV3结合轻量级MLCA模块

💡💡💡本文解决什么问题:MobileNetV3结合轻量级的 Mixed Local Channel Attention (MLCA) 模块,实现轻量化 1.MLCA原理介绍 论文:https://www.sciencedirect.com/science/article/abs/pii/S0952197623006267 摘要:本项目介绍了一种轻量级的 Mixed Local Channel At…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -SpringMVC搭建框架

第一章 初识SpringMVC 1.1 SpringMVC概述 SpringMVC是Spring子框架 SpringMVC是Spring 为**【展现层|表示层|表述层|控制层】**提供的基于 MVC 设计理念的优秀的 Web 框架&#xff0c;是目前最主流的MVC 框架。 SpringMVC是非侵入式&#xff1a;可以使用注解让普通java对象&…

2万字揭秘阿里巴巴数据治理平台建设经验(上),附推荐系统完整源码

原文链接 https://mp.weixin.qq.com/s?__bizMjM5MjA0OTYwNQ&mid2247484210&idx1&sn5ceffbba79553219b792e2fcfb9c6789&chksma6ad739891dafa8eeabcde82ed24f04d9ffbbb837137fe7c1c72b38c986b38aa83f0c593e02a&token909431872&langzh_CN#rd 本文从七个…

Qt之判断一个点是否在多边形内部(射线法)

算法思想: 以被测点Q为端点,向任意方向作射线(一般水平向右作射线),统计该射线与多边形的交点数。如果为奇数,Q在多边形内;如果为偶数,Q在多边形外。计数的时候会有一些特殊情况。这种方法适用于任意多边形,不需要考虑精度误差和多边形点给出的顺序,时间复杂度为O(n)…

C# NPOI导出datatable----Excel模板画图表

1、创建Excel模板 2、安装NPOI管理包 3、创建工作簿 &#xff08;XLSX和XLS步骤一样&#xff0c;以XLS为例&#xff09; IWorkbook workbook null; string time DateTime.Now.ToString("yyyyMMddHHmmss"); string excelTempPath Application.StartupPath "…

VScode安装C/C++编译器步骤

一、安装C/C插件 二、安装 MinGW-w64 工具链 使用国内源 git clone https://gitee.com/cuihongxi/ubuntu2-mac.git 下载后进入到VScode文件夹下&#xff0c;点击msys2-x86_64-20231026.exe进行安装 完成后&#xff0c;确保选中“立即运行 MSYS2”框&#xff0c;然后选择“完…

比特币和区块链并非游离在法律之外

​​发表时间&#xff1a;2023年12月01日 近年来&#xff0c;围绕区块链监管的讨论&#xff0c;已经成为政策制定者、行业领袖和区块链爱好者之间越来越重要的话题。随着各国政府在促进创新和确保消费者保护之间寻求着平衡&#xff0c;有关区块链监管的持续讨论反映出这项变革性…

ssm445基于SSM的学生宿舍管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生宿舍管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

HDFS NFS Gateway(环境配置,超级详细!!)

HDFS NFS Gateway简介: ​ HDFS NFS Gateway是Hadoop Distributed File System&#xff08;HDFS&#xff09;中的一个组件&#xff0c;它允许客户端通过NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;与HDFS进行交互。具体来说&#xff0c;HDFS NFS…

管理类联考——数学——真题篇——按知识分类——代数——数列

【等差数列 ⟹ \Longrightarrow ⟹ 通项公式&#xff1a; a n a 1 ( n − 1 ) d a m ( n − m ) d n d a 1 − d A n B a_n a_1(n-1)d a_m(n-m)dnda_1-dAnB an​a1​(n−1)dam​(n−m)dnda1​−dAnB ⟹ \Longrightarrow ⟹ A d &#xff0c; B a 1 − d Ad&#x…

【CSS @property】CSS自定义属性说明与demo

CSS property property - CSS: Cascading Style Sheets | MDN At 规则 - CSS&#xff1a;层叠样式表 | MDN Custom properties (–*): CSS variables - CSS: Cascading Style Sheets | MDN CSS Houdini - Developer guides | MDN &#x1f4da; 什么是property? property CSS…

GitHub two-factor authentication开启教程

问题描述 最近登录GitHub个人页面动不动就有一个提示框”… two-factor authentication will be required for your account starting Jan 4, 2024 …“&#xff0c;点击去看了一下原来是GitHub对所有的用户登录都要开启双重身份认证&#xff0c;要在1月4号前完成 解决办法 …

mangokit:golang web项目管理工具,使用proto定义http路由和错误

文章目录 前言1、mangokit介绍1.1 根据proto文件生成http路由1.2 根据proto文件生成响应码1.3 使用wire来管理依赖注入 2、mangokit实现2.1 protobuf插件开发2.2 mangokit工具 3、使用示例3.1 创建新项目3.2 添加新的proto文件3.3 代码生成 前言 在使用gin框架开发web应用时&a…

精通服务器远程管理:全面指南

引言 在当今数字化世界中&#xff0c;IT专业人员和管理员能够远程管理服务器的能力是无价之宝。远程服务器管理不仅提高了效率&#xff0c;而且在无法物理访问服务器的情况下确保了持续的运营。本指南将深入探讨远程管理的不同类型、远程桌面的使用方法&#xff0c;以及如何安全…

Diary26-Vue综合案例1-书籍购物车

Vue综合案例1-书籍购物车 案例要求: 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

阿里推荐 LongAdder ,不推荐 AtomicLong !

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、CAS 1.1 CAS 全称 1.2 通俗理解CAS 1.3 CAS的问题 1.4 解决 ABA 问题 二、LongAdder 2.1 什么是 LongAdder 2.2 为什么推…

flutter自定义地图Marker完美展示图片

世人都说雪景美 寒风冻脚无人疼 只道是一身正气 结论 参考Flutter集成高德地图并添加自定义Maker先实现自定义Marker。如果自定义Marker中用到了图片&#xff0c;那么会碰到图片没有被绘制到Marker的问题&#xff0c;此时需要通过precacheImage来预加载图片&#xff0c;从而解…