大数据分析案例-基于LightGBM算法构建银行客户流失预测模型

news2024/10/6 4:08:44

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章

大数据分析案例合集
大数据分析案例-基于随机森林算法预测人类预期寿命
大数据分析案例-基于随机森林算法的商品评价情感分析
大数据分析案例-用RFM模型对客户价值分析(聚类)
大数据分析案例-对电信客户流失分析预警预测
大数据分析案例-基于随机森林模型对北京房价进行预测
大数据分析案例-基于RFM模型对电商客户价值分析
大数据分析案例-基于逻辑回归算法构建垃圾邮件分类器模型
大数据分析案例-基于决策树算法构建员工离职预测模型

大数据分析案例-基于KNN算法对茅台股票进行预测

大数据分析案例-基于多元线性回归算法构建广告投放收益模型
大数据分案例-基于随机森林算法构建返乡人群预测模型
大数据分析案例-基于决策树算法构建金融反欺诈分类模型

目录

1.项目背景

2.项目简介

2.1项目说明

2.2数据说明

2.3技术工具

3.算法原理

4.项目实施步骤

4.1理解数据

4.2数据预处理

4.3探索性数据分析

4.3.1流失客户比例

4.3.2性别对客户流失率的影响 

4.3.3年龄对流失率的影响

4.3.4产品数量对流失率的影响

4.3.5地理因素对流失率的影响

4.3.6客户状态对流失率的影响

4.3.7相关关系分析

4.4特征工程

4.5模型构建

4.6模型评估

4.7特征重要性评分

4.8模型预测

5.实验总结


1.项目背景

        随着金融市场的不断发展和竞争的加剧,银行需要不断了解其客户,并为其提供更好的服务和体验,以保持客户忠诚度并减少客户流失。因此,预测银行客户流失成为了一个备受关注的问题。

        客户流失对银行的影响非常大。根据世界银行的数据,客户流失率每下降 10%,银行的收入和利润就会相应增长。然而,客户流失的原因很多,包括客户服务体验、银行产品、价格、地理位置等多个方面。因此,为了更好地预测客户流失,银行需要使用各种技术和方法来分析和评估这些因素。

        LightGBM 是一种基于 GBDT(Gradient Boosting Decision Tree) 算法的机器学习模型,其具有高效、易用、可扩展等优点,因此在机器学习领域中被广泛应用。本项目旨在使用 LightGBM 算法构建一个银行客户流失预测模型,以帮助银行更好地了解其客户,预测客户流失风险,并提供个性化的服务和建议,以提高客户满意度和忠诚度。

本项目的研究背景主要包括以下几个方面:

  1. 银行客户流失预测是一个备受关注的问题。随着金融市场的不断发展和竞争的加剧,银行需要不断了解其客户,并为其提供更好的服务和体验,以保持客户忠诚度并减少客户流失。

  2. LightGBM 是一种高效的机器学习模型,适用于大规模数据集的分析和预测。因此,使用 LightGBM 算法构建银行客户流失预测模型是一个可行的选择。

  3. 本项目旨在帮助银行更好地了解其客户,预测客户流失风险,并提供个性化的服务和建议,以提高客户满意度和忠诚度。这将有助于提高银行的竞争力和盈利能力。

        综上所述,基于 LightGBM 算法构建银行客户流失预测模型的项目具有重要的现实意义,可以为银行提供有价值的客户洞察和预测模型,帮助银行更好地留住客户并提高客户满意度和忠诚度。

2.项目简介

2.1项目说明

        本项目旨在分析银行客户流失数据,找出客户流失的原因,挖掘影响流失率的因素,最后使用机器学习算法构建银行客户流失预测模型,帮助企业及时针对即将流失的用户进行挽回。众所周知,与保留现有客户相比,签入新客户的成本要高得多。银行了解是什么导致客户做出离开公司的决定是有利的。客户流失预防使公司能够制定忠诚度计划和保留活动以保留尽可能多的客户。

2.2数据说明

        本数据集来源于Kaggle,数据集共有10000条,18个特征变量,各个变量具体含义如下:

1.RowNumber—行编号

2.CustomerId—客户ID

3.Surname—客户姓氏

4.CreditScore—信用评分

5.Geography—客户的地理位置

6.Gender—性别

7.Age—年龄

8.Tenure—客户成为银行客户的年限

9.Balance—余额

10.NumOfProducts—客户通过银行购买的产品数量

11.HasCrCard—客户是否有信用卡

12.IsActiveMember—客户是否是活跃状态

13.EstimatedSalary—银行估算客户的薪资

14.Exited—客户是否流失

15.Complain—客户有无投诉。

16.Satisfaction Score—客户为解决投诉而提供的分数

17.Card Type—客户持有的卡片类型

18.Points Earned—客户使用信用卡赚取的积分

2.3技术工具

Python版本:3.9

代码编辑器:jupyter notebook

3.算法原理

LightGBM算法基本原理

        GBDT算法的基本思想是把上一轮的训练残差作为下一轮学习器训练的输入,即每一次的输入数据都依赖于上一次训练的输出结果。因此,这种训练迭代过程就需要多次对整个数据集进行遍历,当数据集样本较多或者维数过高时会增加算法运算的时间成本,并且消耗更高的内存资源。

        而XGBoost算法作为GBDT的一种改进,在训练时是基于一种预排序的思想来寻找特征中的最佳分割点,这种训练方式同样也会导致内存空间消耗极大,例如算法不仅需要保存数据的特征值,还需要保存特征排序的结果;在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大,特别是当数据量级较大时,这种方式会消耗过多时间。

        为了对这些问题进行优化,2017年微软公司提出了LightGBM算法(Light Gradient Boosting Machine),该算法也是基于GBDT算法的改进,,但相较于GBDT、XGBoost算法,LightGBM算法有效地解决了处理海量数据的问题,在实际应用中取得出色的效果。LightGBM算法主要包括以下几个特点:直方图算法(寻找最佳分裂点、直方图差加速)、Leaf-wise树生长策略、GOSS、EFB、支持类别型特征、高效并行以及Cache命中率优化等。

(1)直方图Histogram算法(减少大量计算与内存占用)

        XGBoost算法在进行分裂时需要预先对每一个特征的原始数据进行预排序,而直方图Histogram算法则是对特征的原始数据进行“分桶#bin”,把数据划分到不同的离散区域中,再对离散数据进行遍历,寻找最优划分点。这里针对特征值划分的每一个“桶”有两层含义,一个是每个“桶”中样本的数量;另一个是每个“桶”中样本的梯度和(一阶梯度和的平方的均值等价于均方损失)。

        可以看出,通过直方图算法可以让模型的复杂度变得更低,并且特征“分桶”后仅保存了的离散值,大大降低内存的占用率。其次,这种“分桶”的方式从某种角度来看相当于对模型增加了正则化,可以避免模型出现过拟合。

        值得注意的是,直方图算法是使用了bin代替原始数据,相当于增加了正则化,这也意味着有更多的细节特征会被丢弃,相似的数据可能被划分到相同的桶中,所以bin的数量选择决定了正则化的程度,bin越少惩罚越严重,过拟合的风险就越低。

图 2 6 直方图作差

        另外,在LightGBM直方图算法中还包括一种直方图作差优化,即LightGBM在得到一个叶子的直方图后,能够通过直方图作差的方式用极小的代价得到其兄弟叶子的直方图,如上图所示,当得到某个叶子的直方图和父节点直方图后,另一个兄弟叶子直方图也能够很快得到,利用这种方式,LightGBM算法速度得到进一步提升。

(2)带深度限制的Leaf-wise的叶子生长策略(减少大量计算、避免过拟合)

        GBDT与XGBoost模型在叶子生长策略上均采用按层level-wise分裂的方式,这种方式在分裂时会针对同一层的每一个节点,即每次迭代都要遍历整个数据集中的全部数据,这种方式虽然可以使每一层的叶子节点并行完成,并控制模型的复杂度,但也会产生许多不必要搜索或分裂,从而消耗更多的运行内存,增加计算成本。

        而LightGBM算法对其进行了改进,使用了按叶子节点leaf-wise分裂的生长方式,即每次是对所有叶子中分裂增益最大的叶子节点进行分裂,其他叶子节点则不会分裂。这种分裂方式比按层分裂会带来更小的误差,并且加快算法的学习速度,但由于没有对其他叶子进行分裂,会使得分裂结果不够细化,并且在每层中只对一个叶子不断进行分裂将增大树的深度,造成模型过拟合[25]。因此,LightGBM算法在按叶子节点生长过程中会限制树的深度来避免过拟合。

(3)单边梯度采样技术 (减少样本角度)

        在梯度提升算法中,每个样本都有不同梯度值,样本的梯度可以反映对模型的贡献程度,通常样本的梯度越大贡献给模型的信息增益越多,而样本的梯度越小,在模型中表现的会越好。

        举个例子来说,这里的大梯度样本可以理解为“练习本中的综合性难题”,小梯度样本可以理解为“练习本中的简单题”,对于“简单题”平时做的再多再好,而“难题”却做的很少,在真正的“考试”时还是会表现不好。但并不意味着小梯度样本(“简单题”)就可以直接剔除不用参与训练,因为若直接剔除小梯度样本,数据的分布会发生改变,从而影响模型的预测效果。

        因此,LightGBM算法引入了单边梯度采样技术(Gradient-based One-Side Sampling,GOSS),其基本思想就是从减少样本的角度出发,利用样本的梯度大小信息作为样本重要性的考量,保留所有梯度大的样本点(“保留所有难题”),对于梯度小的样本点(“简单题”)按比例进行随机采样,这样既学习了小梯度样本的信息,也学习了大梯度样本的信息(“平时难题都做,简单题做一部分,在面临真正的考试时才可能稳定发挥,甚至超水平发挥”),在不改变原始数据分布的同时,减小了样本数量,提升了模型的训练速度。

(4)互斥特征捆绑(减少特征角度)

        高维度的数据通常是非常稀疏的,并且特征之间存在互斥性(例如通过one-hot编码后生成的几个特征不会同时为0),这种数据对模型的效果和运行速度都有一定的影响。

        通过互斥特征捆绑算法(Exclusive Feature Bundling,EFB)可以解决高维度数据稀疏性问题,如下图中,设特征1、特征2以及特征3互为互斥的稀疏特征,通过EFB算法,将三个特征捆绑为一个稠密的新特征,然后用这一个新特征替代原来的三个特征,从而实现不损失信息的情况下减少特征维度,避免不必要0值的计算,提升梯度增强算法的速度。

图  EFB特征合并示例

        总的来说,LightGBM是一个性能高度优化的GBDT 算法,也可以看成是针对XGBoost的优化算法,可以将LightGBM的优化用公式表达,如下式:LightGBM = XGBoost + Histogram + GOSS + EFB

图  LightGBM算法流程图

4.项目实施步骤

4.1理解数据

首先导入银行客户流失数据

查看数据大小 ,数据共有10000行18列

 

查看各变量的数据类型 

 

查看数据基本信息 

 

 从基本信息中,我们发现了各变量都不存在缺失值

查看数值型变量的描述性统计 

查看非数值型变量的描述性统计

4.2数据预处理

前面我们发现了数据不存在缺失值,现在使用any来检测数据是否存在重复值

 结果为False,说明数据集不存在重复值,也就不需要进行处理。

4.3探索性数据分析

4.3.1流失客户比例

 从结果看出,流失客户占比为20%,流失比例还是较高的。

4.3.2性别对客户流失率的影响 

 从结果发现性别对于流失率似乎没有什么影响。

4.3.3年龄对流失率的影响

 50-60岁的顾客流失最多,其次是40-50岁的顾客,主要流失客户都为中老年人。

4.3.4产品数量对流失率的影响

客户持有的产品数量会影响客户的流失。拥有较少产品的客户可能不太可能流失,而拥有更多产品的客户可能有更高的流失率。需要进一步的分析来了解具体的关系。

4.3.5地理因素对流失率的影响

 德国在拥有相对较高的流失客户数量方面表现突出。

4.3.6客户状态对流失率的影响

 客户活动状态是另一个重要因素。与不活跃的会员相比,活跃会员的流失率似乎更低。这表明,参与和活跃的客户更有可能留在银行。

4.3.7相关关系分析

4.4特征工程

在建模之前,我们需要对非数值型变量进行编码处理,才能让模型识别,所以这里我们需要对性别、地理位置、卡类型进行编码处理。

在编码完后,我们需要准备建模用到的数据,首先是特征挑选,由于原数据集前三列特征对建模没用,所以我们不选择它,然后使用Exited作为目标变量,最后拆分数据集为训练集和测试集并打印划分后的数据集大小。 

4.5模型构建

构建逻辑回归模型

构建KNN模型 

 

构建决策树模型

构建LightGBM模型,注意该模型需要pip安装 

对比上面构建的4个模型,我们发现LightGBM模型的准确率最高,为0.999,几乎接近100%,所以我们选择其作为我们最终的模型。 

4.6模型评估

对lightgbm模型进行评估,输出各项指标并作出ROC曲线

 

 从各项指标均可看出模型效果非常不错!

4.7特征重要性评分

 从特征重要性结果看出,客户使用信用卡赚取的积分、余额、年龄、估算薪资对于客户流失的影响程度最大,所以银行业需要针对这几项因素进行改善。

4.8模型预测

随机挑选10条预测结果进行检查,发现全部预测正确!

5.实验总结

        本次实验中,我们首先使用可视化的方法探究了影响客户流失率的因素,接着通过构建模型,我们最终选择LightGBM算法来构建客户流失预测模型,模型的准确率接近100%,效果很好!最后我们也根据模型的重要性评分,找出了影响客户流失最重要的因素,银行需要针对这几个因素进行改善弥补,进而降低客户流失率。

心得与体会:

通过这次Python项目实战,我学到了许多新的知识,这是一个让我把书本上的理论知识运用于实践中的好机会。原先,学的时候感叹学的资料太难懂,此刻想来,有些其实并不难,关键在于理解。

在这次实战中还锻炼了我其他方面的潜力,提高了我的综合素质。首先,它锻炼了我做项目的潜力,提高了独立思考问题、自我动手操作的潜力,在工作的过程中,复习了以前学习过的知识,并掌握了一些应用知识的技巧等

在此次实战中,我还学会了下面几点工作学习心态:

1)继续学习,不断提升理论涵养。在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后,我会用心响应单位号召,结合工作实际,不断学习理论、业务知识和社会知识,用先进的理论武装头脑,用精良的业务知识提升潜力,以广博的社会知识拓展视野。

2)努力实践,自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是透过实践活动来实现的,也只有透过实践才能锻炼人的品质,彰显人的意志。

3)提高工作用心性和主动性。实习,是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土,也分明感受到了沉甸甸的职责。在今后的工作和生活中,我将继续学习,深入实践,不断提升自我,努力创造业绩,继续创造更多的价值。

这次Python实战不仅仅使我学到了知识,丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中,为实现理想而努力。

import pandas as pd
import numpy as np
import warnings
import matplotlib.pylab as plt
import seaborn as sns
sns.set(font='SimHei')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示
warnings.filterwarnings('ignore')

df = pd.read_csv('Customer-Churn-Records.csv')
df.head()
df.shape
df.dtypes
df.info()
df.describe().T
df.describe(include='O')
any(df.duplicated())
# 流失客户比例
plt.figure(figsize=(5, 5))
churn_counts = df['Exited'].value_counts()
plt.pie(churn_counts, labels=['Retained', 'Churned'], autopct='%1.1f%%', startangle=45)
plt.title('Churn Distribution')
plt.show()
# 性别对客户流失的影响
plt.figure(figsize=(8, 6))
sns.countplot(x='Gender', hue='Exited', data=df)
plt.title('Churn by Gender')
plt.show()
看起来男女的流失率相对相似。
# 不同年龄组的流失率
df['AgeGroup'] = pd.cut(df['Age'], bins=[0, 30, 40, 50, 60, np.inf], labels=['<30', '30-40', '40-50', '50-60', '60+'])
plt.figure(figsize=(8, 6))
sns.countplot(x='AgeGroup', hue='Exited', data=df)
plt.title('Churn by Age Group')
plt.show()
50-60岁的顾客流失最多,其次是40-50岁的顾客。
# 产品数量对流失率的影响
plt.figure(figsize=(8, 6))
sns.countplot(x='NumOfProducts', hue='Exited', data=df)
plt.title('Churn by Number of Products')
plt.show()
客户持有的产品数量会影响客户的流失。拥有较少产品的客户可能不太可能流失,而拥有更多产品的客户可能有更高的流失率。需要进一步的分析来了解具体的关系。
# 地理因素对流失率的影响
plt.figure(figsize=(8, 6))
sns.countplot(x='Geography', hue='Exited', data=df)
plt.title('Churn by Geography')
plt.show()
德国在拥有相对较高的流失客户数量方面表现突出。
# 客户活动状态对流失率的影响
plt.figure(figsize=(8, 6))
sns.countplot(x='IsActiveMember', hue='Exited', data=df)
plt.title('Churn by Activity Status')
plt.show()
客户活动状态是另一个重要因素。与不活跃的会员相比,活跃会员的流失率似乎更低。这表明,参与和活跃的客户更有可能留在银行。
# 分析各因素之间的相关关系
fig = plt.figure(figsize=(18,18))
sns.heatmap(df.corr(),vmax=1,annot=True,linewidths=0.5,cbar=False,cmap='YlGnBu',annot_kws={'fontsize':18})
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.title('各个因素之间的相关系数',fontsize=20)
plt.show()
# 对性别变量进行编码
df['Gender'].replace(to_replace={'Female':0,'Male':1},inplace=True)
# 对地理变量进行编码
df['Geography'].replace(to_replace={'France':0,'Germany':1,'Spain':2},inplace=True)
# 对卡类型变量进行编码
df['Card Type'].replace(to_replace={'DIAMOND':0,'GOLD':1,'SILVER':2,'PLATINUM':3},inplace=True)
df.head()
from sklearn.model_selection import train_test_split
# 准备建模的数据
feature_col = ['CreditScore', 'Geography', 'Gender', 'Age', 'Tenure','Balance', 'NumOfProducts', 'HasCrCard', 
               'IsActiveMember', 'EstimatedSalary','Complain', 'Satisfaction Score', 'Card Type', 'Point Earned']
X = df[feature_col]
y = df['Exited']
# 划分数据集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42)
print('训练集大小:',X_train.shape[0])
print('测试集大小:',X_test.shape[0])
# 构建逻辑回归模型
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train,y_train)
print('逻辑回归模型准确率:',lr.score(X_test,y_test))
# 构建KNN模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(X_train,y_train)
print('KNN模型准确率:',knn.score(X_test,y_test))
# 构建决策树模型
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(X_train,y_train)
print('决策树模型准确率:',tree.score(X_test,y_test))
# 构建lightgbm模型
from lightgbm import LGBMClassifier
gbm = LGBMClassifier()
gbm.fit(X_train,y_train)
print('lightgbm模型准确率:',gbm.score(X_test,y_test))
from sklearn.metrics import f1_score,r2_score,confusion_matrix,classification_report,auc,roc_curve
# 模型评估
y_pred = gbm.predict(X_test)
print('gbm模型的F1值:',f1_score(y_test,y_pred))
print('gbm模型的R方值:',r2_score(y_test,y_pred))
print('模型混淆矩阵:','\n',confusion_matrix(y_test,y_pred))
print('模型分类报告:','\n',classification_report(y_test,y_pred))
# 画出ROC曲线
y_prob = gbm.predict_proba(X_test)[:,1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_prob) 
roc = auc(false_positive_rate, true_positive_rate)
plt.figure(figsize=(10,10))
plt.title('ROC')
plt.plot(false_positive_rate,true_positive_rate, color='red',label = 'AUC = %0.2f' % roc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],linestyle='--')
plt.axis('tight')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
# 特征重要性评分
feat_labels = X_train.columns[0:]
importances = gbm.feature_importances_
indices = np.argsort(importances)[::-1]
index_list = []
value_list = []
for f,j in zip(range(X_train.shape[1]),indices):
    index_list.append(feat_labels[j])
    value_list.append(importances[j])
plt.figure(figsize=(10,6))
plt.barh(index_list[::-1],value_list[::-1])
plt.yticks(fontsize=12)
plt.title('各特征重要程度排序',fontsize=14)
plt.show()
# 模型预测
res = pd.DataFrame()
res['真实值'] = y_test
res['预测值'] = y_pred
res.sample(10)

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

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

相关文章

第四章:运算符

第四章&#xff1a;运算符 4.1&#xff1a;算术运算符 ​ 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达值&#xff0c;对数值或表达式进行加()、减(-)、乘(*)、除(/)、取模(%)运算。 运算符名称作用示例加法运算符计算两个值或表达式的和SE…

chatgpt赋能python:Python如何遍历文件:一篇完整的指南

Python如何遍历文件: 一篇完整的指南 在进行文件操作时&#xff0c;遍历文件是相当普遍的需求。Python中提供了多种方法来遍历文件夹和文件&#xff0c;包括os模块&#xff0c;glob模块和os.walk方法。这篇文章将会介绍这些方法及其应用。 什么是遍历文件&#xff1f; 遍历文…

使用 ConstraintLayout

ConstraintLayout解析 1.前言2.了解ConstraintLayout3.基本用法3.1 看一个布局3.2再看一个布局 1.前言 你是不是一直不敢用ConstraintLayout&#xff0c;是以为属性太多太复杂&#xff1f;你心理上的惰性&#xff0c;畏惧它。它其实很好用很强大&#xff0c;如果要用就需要一个…

Day_40关于图的总结

一. 实际问题的抽象与建模 如果我们需要研究一个实际问题&#xff0c;首先第一步就是对这个实际问题进行抽象&#xff0c;抽象是从众多的事物中抽取出共同的、本质性的特征&#xff0c;而舍弃其非本质的特征的过程。具体地说&#xff0c;抽象就是人们在实践的基础上&#xff0c…

Java中的金钱陷阱

前言 有多少小伙伴是被标题 骗 吸引进来的呢&#xff0c;我可不是标题党&#xff0c;今天的文章呢确实跟”金钱“有关系。 但是我们说的不是过度追求金钱而掉入陷阱&#xff0c;而是要说一说在Java程序中&#xff0c;各种跟金钱运算有关的陷阱。 日常工作中我们经常会涉及到…

chatgpt赋能python:Python字幕滚动:如何让你的视频内容更吸引人

Python字幕滚动&#xff1a;如何让你的视频内容更吸引人 如果你是一位视频创作者&#xff0c;你可能知道如何通过字幕来增加你的视频的吸引力。Python提供了一种简单且高效的方法来制作字幕滚动。字幕滚动是指将文字逐个显示在视频下方&#xff0c;以帮助观众跟上视频的进展。…

让我们彻底了解Maven(一)--- 基础和进阶

Maven大家都很熟悉&#xff0c;但是我们很多人&#xff0c;对它其实都是似乎很熟&#xff0c;但是又好像不熟悉的感觉&#xff0c;包括我&#xff0c;今天咱们就一起来彻底了解Maven的所有功能&#xff0c;我们从入门&#xff0c;到原理剖析&#xff0c;再到实践操作&#xff0…

chatgpt赋能python:Python如何遍历列表并提取

Python如何遍历列表并提取 在Python编程语言中&#xff0c;列表是一种非常常见的数据类型。它是一个有序的集合&#xff0c;可以存储多个元素&#xff0c;可以是任何类型的数据&#xff0c;例如整数、字符串、布尔值等等。遍历一个列表并提取其中的元素是一个基本的操作&#…

测试用例设计方法——错误猜测法

很多软件测试从业者用到的黑盒测试用例设计方法大多是等价类划分法、边界值分析法、判定表法、因果图法和正交试验法等&#xff0c;其实还有一种方法不得不提到&#xff0c;那就是错误猜测法&#xff0c;这对资深测试人员尤为重要。因为随着在产品测试的实践中对产品的了解和测…

MySQL目录结构与源码

MySQL目录结构与源码 前言一、主要目录结构二、MySQL 源代码获取 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff…

Linux命令学习之文本查看命令cat、head和tail

for i in {1..100} do echo $i >> good.txt done把1到100写入到good.txt文件中。接下来使用good.txt这个文件来演示查看文本查看命令。 cat man cat可以看一下帮助使用说明&#xff0c;按q可以退出。 cat是连接文件并把文件内容输出到标准输出上。cat good.txt就可以…

Mirai 僵尸网络变体向 RCE、DDoS 开放 Tenda、Zyxel Gear

Mirai 僵尸网络的一个变体利用四种不同的设备漏洞将流行的基于 Linux 的服务器和物联网 (IoT) 设备添加到可以进行基于网络的攻击&#xff08;包括分布式拒绝服务 (DDoS) 攻击&#xff09;的僵尸网络中。 Palo Alto Networks 的 Unit 42 的一个团队观察到这个变体&#xff0c;…

【利用AI让知识体系化】Webpack 相关配置技巧

文章目录 章节一&#xff1a;了解 WebpackWebpack 是什么&#xff1f;为什么使用 Webpack&#xff1f;Webpack 的基本概念Webpack 的核心概念和实现原理 章节二&#xff1a;安装和配置 Webpack安装 Webpack配置 WebpackWebpack 的常用配置项 章节三&#xff1a;Webpack 的插件和…

企业应该如何选择适合自己的直播平台?

企业应该如何选择适合自己的直播平台&#xff1f;本文将从功能需求、可靠性与稳定性、用户体验、技术能与售后服务能力等方面进行综合考虑&#xff0c;帮助您做出明智的决策&#xff0c;或是说提供选型方面的参考。 企业在选择一家直播平台时应考虑以下因素&#xff1a; 1. 企…

2023/6/6总结

CSS 如果想要实现背景颜色渐变效果&#xff1a; left是从左边开始&#xff0c;如果想要对角线比如&#xff0c;左上角就是left top&#xff0c;渐变效果始终是沿着一条线来实现的。 下面是跟着视频教学用flex布局写的一个移动端网页&#xff1a; html代码&#xff1a; <!…

chatgpt赋能python:Python字符串:去除\n的方法和应用

Python字符串&#xff1a;去除\n的方法和应用 在Python编程中&#xff0c;字符串是非常常用的数据类型。在文本处理中&#xff0c;经常会遇到需要去除多余的换行符&#xff08;\n&#xff09;的情况。本文将介绍Python中去除\n的方法以及在实际应用中的使用。 方法一&#xf…

第六十七天学习记录:对陈正冲编著《C 语言深度解剖》中关于变量命名规则的学习

最近开始在阅读陈正冲编著的《C 语言深度解剖》&#xff0c;还没读到十分之一就感觉收获颇多。其中印象比较深刻的是其中的变量的命名规则。 里面提到的不允许使用拼音正是我有时候会犯的错。 因为在以往的工作中&#xff0c;偶尔会遇到时间紧迫的情况。 而对于新增加的变量不知…

chatgpt赋能python:Python安装和打开教程

Python安装和打开教程 Python作为一种高效、灵活、易学易用的编程语言&#xff0c;越来越受到广大程序员的青睐&#xff0c;越来越多的人想要学习Python。在学习Python之前&#xff0c;首先要进行Python的安装和打开。那么&#xff0c;本篇文章将为您介绍如何安装和打开Python…

为什么需要 git 和 相关的小知识

为什么需要git和相关的小知识 先看一个实际需求&#xff0c;引出Git 问题: 公司五一活动计划 ● 先说一个最简单的情况&#xff0c;比如你做了公司五一活动计划书(如图) 解决方案: 版本管理工具(Git) 一句话: Git 是目前最流行的分布式版本控制软件 Git 是怎么来的? Git…

读数据压缩入门笔记04_统计编码

1. 统计编码&#xff08;statistical encoders&#xff09;的算法 1.1. 每种编码方法都对每个符号的概率分布做了不同的假定 1.2. 需要处理的数据集中符号的概率分布与现有的VLC方法都不能完全匹配 1.3. 统计编码算法通过数据集中符号出现的概率来进行编码使结果尽可能与熵接…