和鲸社区数据分析每周挑战【第九十六期:汽车公司客户细分预测】

news2024/10/7 2:27:04

和鲸社区数据分析每周挑战【第九十六期:汽车公司客户细分预测】

文章目录

  • 和鲸社区数据分析每周挑战【第九十六期:汽车公司客户细分预测】
    • 一、前言
      • 1、背景描述
      • 2、什么是用户分群?
      • 3、数据说明
      • 4、数据集预览
    • 二、数据读取和数据初步观察
    • 三、潜在客户画像EDA
      • 1、性别分别
      • 2、婚姻状态分布
      • 3、是否拥有学位分布
      • 4、职业分布
      • 5、工作经验分布
      • 6、消费评分分布
      • 7、家庭规模分布
      • 8、匿名分组分布
      • 9、客户分类分布
    • 四、潜在客户的分类预测
      • 1、数据预处理
      • 2、使用随机森林进行预测
      • 3、使用极端随机树进行预测
      • 4、使用支持向量机分类器进行预测
    • 五、最后结论

一、前言

本周的挑战内容为:汽车公司客户细分预测

大家可以去我的和鲸鱼主页查看这个项目。

在这里插入图片描述

1、背景描述

本数据集包含一家汽车公司的潜在客户的数据。

该公司计划用他们现有的产品(P1、P2、P3、P4和P5)进入新市场。经过深入的市场调查,他们推断出新市场的行为与现有市场相似。

该公司的销售团队将所有客户分为四类(A、B、C、D)并且对不同的客户群进行了细分的宣传和沟通后发现转化效果非常好。因此他们计划在新的市场上使用同样的策略,并且已经确定了2627个新的潜在客户。

请尝试基于这些潜在客户的数据进行用户分群分析,帮助该公司预测出正确的新客户群画像。

2、什么是用户分群?

用户分群(User Segmentation)是一种数据挖掘和分析方法,通过对用户行为、消费习惯、兴趣爱好等多维度特征进行深入挖掘和分析,将大量用户按照相似性或差异性划分为若干个具有共同特征的群体。这些群体可以是基于地理位置、年龄、性别、收入水平、购买力等基本信息划分的常规用户群体,也可以是根据用户在产品或服务中的行为特点细分出的特定用户群体。

用户分群的主要目的是为了更好地理解不同群体的需求、偏好和行为模式,从而实现精准营销、优化产品设计和服务体验等目标。以下是用户分群的一些优势:

  1. 个性化推荐:通过了解不同用户群体的兴趣和需求,企业可以为每个群体提供更加精准的个性化推荐,提高用户满意度和忠诚度。
  2. 营销策略优化:通过分析不同用户群体的消费行为和偏好,企业可以制定更有针对性的营销策略,提高市场推广效果。
  3. 产品和服务优化:了解用户群体的需求和痛点,企业可以对产品和服务进行优化,提升用户体验和满意度。
  4. 风险评估与预警:通过对用户行为的分析,企业可以识别潜在的风险因素,提前采取措施防范损失。
  5. 提高客户生命周期价值:通过精细化的用户管理和维护,企业可以提高客户的生命周期价值,实现更高的收益。

在实际应用中,用户分群通常需要借助数据分析工具和技术手段,如聚类算法、关联规则挖掘、分类算法等。同时,为了获得更准确的用户分群结果,企业还需要结合业务场景和实际情况,不断调整和完善分群模型。

3、数据说明

字段说明
ID客户ID
Gender性别
Ever_Married客户的婚姻状况
Age年龄
Graduated客户是有拥有学位
Profession职业
Work_Experience参加工作的时间(单位:年)
Spending_Score客户消费评分(分数越低意味着客户花的钱越少,越高以为着客户花的越多)
Family_Size家庭规模(单位:人)
Var_1对客户匿名分组的组别
Segmentation客户分类(该客户被用户分群后的所属类别)

4、数据集预览

在这里插入图片描述

在这里插入图片描述

二、数据读取和数据初步观察

import pandas as pd

# 加载数据
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')

# 显示数据的前5行
train_data.head()

在这里插入图片描述

从上面的输出中,我们可以看到数据集包含以下字段:

  • ID:客户ID
  • Gender:性别
  • Ever_Married:客户的婚姻状况
  • Age:年龄
  • Graduated:客户是有拥有学位
  • Profession:职业
  • Work_Experience:参加工作的时间(单位:年)
  • Spending_Score:客户消费评分(分数越低意味着客户花的钱越少,越高以为着客户花的越多)
  • Family_Size:家庭规模(单位:人)
  • Var_1:对客户匿名分组的组别
  • Segmentation:客户分类(该客户被用户分群后的所属类别)

接下来,我们将进行更深入的数据分析。

# 查看数据的基本信息
train_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8068 entries, 0 to 8067
Data columns (total 11 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   ID               8068 non-null   int64  
 1   Gender           8068 non-null   object 
 2   Ever_Married     7928 non-null   object 
 3   Age              8068 non-null   int64  
 4   Graduated        7990 non-null   object 
 5   Profession       7944 non-null   object 
 6   Work_Experience  7239 non-null   float64
 7   Spending_Score   8068 non-null   object 
 8   Family_Size      7733 non-null   float64
 9   Var_1            7992 non-null   object 
 10  Segmentation     8068 non-null   object 
dtypes: float64(2), int64(2), object(7)
memory usage: 693.5+ KB

从上面的输出中,我们可以看到数据集包含8068条记录,11个字段。其中,有些字段存在缺失值,如Ever_MarriedGraduatedProfessionWork_ExperienceFamily_SizeVar_1

# 查看数据的描述性统计信息
train_data.describe(include='all')

在这里插入图片描述

三、潜在客户画像EDA

1、性别分别

import matplotlib.pyplot as plt
import seaborn as sns
#隐藏警告
import warnings
warnings.filterwarnings("ignore")               #忽略警告信息
plt.rcParams['font.sans-serif']  = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False      # 用来正常显示负号
plt.rcParams['figure.dpi']  = 100        #分辨率


# 设置风格
sns.set(style='whitegrid')

plt.figure(figsize=(8, 6))
sns.countplot(x='Gender', data=train_data)
plt.title('性别分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,男性客户的数量略多于女性客户。

2、婚姻状态分布

plt.figure(figsize=(8, 6))
sns.countplot(x='Ever_Married', data=train_data)
plt.title('婚姻状况分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,已婚的客户数量多于未婚的客户。

3、是否拥有学位分布

plt.figure(figsize=(8, 6))
sns.countplot(x='Graduated', data=train_data)
plt.title('是否拥有学位分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,拥有学位的客户数量多于没有学位的客户。

4、职业分布

plt.figure(figsize=(12, 8))
sns.countplot(y='Profession', data=train_data)
plt.title('职业分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,客户的职业主要集中在ArtistHealthcareEntertainment等几个类别。

5、工作经验分布

plt.figure(figsize=(12, 8))
sns.histplot(train_data['Work_Experience'].dropna(), kde=False, bins=30)
plt.title('工作经验分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,大部分客户的工作经验在10年以下,特别是在1年以下的客户最多。

6、消费评分分布

plt.figure(figsize=(8, 6))
sns.countplot(x='Spending_Score', data=train_data)
plt.title('消费评分分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,消费评分主要集中在LowAverage两个类别。

7、家庭规模分布

plt.figure(figsize=(12, 8))
sns.histplot(train_data['Family_Size'].dropna(), kde=False, bins=30)
plt.title('家庭规模分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,大部分客户的家庭规模在2-4人之间。

8、匿名分组分布

plt.figure(figsize=(8, 6))
sns.countplot(x='Var_1', data=train_data)
plt.title('匿名分组分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,匿名分组主要集中在Cat_6类别。

9、客户分类分布

plt.figure(figsize=(8, 6))
sns.countplot(x='Segmentation', data=train_data)
plt.title('客户分类分布')
plt.show()

在这里插入图片描述

从上图中我们可以看到在这个数据集中,客户分类较为均匀,每个类别的客户数量差异不大。

四、潜在客户的分类预测

1、数据预处理

# 填充缺失值
train_data['Ever_Married'].fillna(train_data['Ever_Married'].mode()[0], inplace=True)
train_data['Graduated'].fillna(train_data['Graduated'].mode()[0], inplace=True)
train_data['Profession'].fillna(train_data['Profession'].mode()[0], inplace=True)
train_data['Work_Experience'].fillna(train_data['Work_Experience'].median(), inplace=True)
train_data['Family_Size'].fillna(train_data['Family_Size'].median(), inplace=True)
train_data['Var_1'].fillna(train_data['Var_1'].mode()[0], inplace=True)

# 将分类变量转换为数值
train_data['Gender'] = train_data['Gender'].map({'Male': 0, 'Female': 1})
train_data['Ever_Married'] = train_data['Ever_Married'].map({'No': 0, 'Yes': 1})
train_data['Graduated'] = train_data['Graduated'].map({'No': 0, 'Yes': 1})
train_data['Spending_Score'] = train_data['Spending_Score'].map({'Low': 0, 'Average': 1, 'High': 2})
train_data['Segmentation'] = train_data['Segmentation'].map({'A': 0, 'B': 1, 'C': 2, 'D': 3})

# 对Profession和Var_1进行独热编码
train_data = pd.get_dummies(train_data, columns=['Profession', 'Var_1'])

# 显示处理后的数据
train_data.head()

在这里插入图片描述

在上面的步骤中,我们对数据进行了以下预处理:

  1. 填充了缺失值:对于分类变量,我们使用了最常见的类别进行填充;对于数值变量,我们使用了中位数进行填充。

  2. 将分类变量转换为数值:对于二元分类变量,我们使用了0和1进行编码;对于多元分类变量,我们使用了独热编码。

接下来,我们将进行模型训练和预测。

2、使用随机森林进行预测

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 定义特征和目标变量
X = train_data.drop(['ID', 'Segmentation'], axis=1)
y = train_data['Segmentation']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建随机森林分类器
clf = RandomForestClassifier(n_estimators=100, random_state=42)

# 训练模型
clf.fit(X_train, y_train)

# 预测测试集
y_pred = clf.predict(X_test)

print(classification_report(y_test, y_pred))
              precision    recall  f1-score   support

           0       0.38      0.37      0.37       391
           1       0.36      0.34      0.35       369
           2       0.49      0.51      0.50       380
           3       0.63      0.65      0.64       474

    accuracy                           0.48      1614
   macro avg       0.46      0.47      0.47      1614
weighted avg       0.47      0.48      0.48      1614

从分类报告中,我们可以看到模型的整体准确率为48%,其中对于类别3的预测效果最好,准确率为63%,而对于其他类别的预测效果较差。

from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)

# 绘制混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix for Random Forest Classifier')
plt.xlabel('Predicted Class')
plt.ylabel('True Class')
plt.show()

在这里插入图片描述

混淆矩阵是一种常用的模型评估工具,它可以帮助我们了解模型在各个类别上的预测效果。

从上图中,我们可以看到随机森林分类器在各个类别上的预测效果。对角线上的数字表示模型正确预测的数量,而非对角线上的数字表示模型预测错误的数量。

3、使用极端随机树进行预测

from sklearn.ensemble import ExtraTreesClassifier

# 创建极端随机树分类器
clf_ext = ExtraTreesClassifier(n_estimators=100, random_state=42)

# 训练模型
clf_ext.fit(X_train, y_train)

# 预测测试集
y_pred_ext = clf_ext.predict(X_test)

print(classification_report(y_test, y_pred_ext))
              precision    recall  f1-score   support

           0       0.37      0.38      0.37       391
           1       0.33      0.33      0.33       369
           2       0.48      0.47      0.47       380
           3       0.61      0.62      0.62       474

    accuracy                           0.46      1614
   macro avg       0.45      0.45      0.45      1614
weighted avg       0.46      0.46      0.46      1614
# 计算混淆矩阵
cm_ext = confusion_matrix(y_test, y_pred_ext)

# 绘制混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(cm_ext, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix for Extra Trees Classifier')
plt.xlabel('Predicted Class')
plt.ylabel('True Class')
plt.show()

在这里插入图片描述

从分类报告中,我们可以看到极端随机树分类器的整体准确率为46%,其中对于类别3的预测效果最好,准确率为61%,而对于其他类别的预测效果较差。

从混淆矩阵中,我们可以看到极端随机树分类器在各个类别上的预测效果,对角线上的数字表示模型正确预测的数量,而非对角线上的数字表示模型预测错误的数量。

4、使用支持向量机分类器进行预测

from sklearn.svm import SVC

# 创建支持向量机分类器
clf_svc = SVC(random_state=42)

# 训练模型
clf_svc.fit(X_train, y_train)

# 预测测试集
y_pred_svc = clf_svc.predict(X_test)

print(classification_report(y_test, y_pred_svc))
              precision    recall  f1-score   support

           0       0.39      0.47      0.43       391
           1       0.32      0.05      0.08       369
           2       0.41      0.64      0.50       380
           3       0.63      0.66      0.65       474

    accuracy                           0.47      1614
   macro avg       0.44      0.46      0.41      1614
weighted avg       0.45      0.47      0.43      1614
# 计算混淆矩阵
cm_svc = confusion_matrix(y_test, y_pred_svc)

# 绘制混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(cm_svc, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix for Support Vector Machine Classifier')
plt.xlabel('Predicted Class')
plt.ylabel('True Class')
plt.show()

在这里插入图片描述

从分类报告中,我们可以看到支持向量机分类器的整体准确率为47%,其中对于类别3的预测效果最好,准确率为63%,而对于类别1的预测效果最差,准确率仅为32%。

从混淆矩阵中,我们可以看到支持向量机分类器在各个类别上的预测效果,对角线上的数字表示模型正确预测的数量,而非对角线上的数字表示模型预测错误的数量。

五、最后结论

根据上面的数据探索性分析结果以及后续采用三种不同的模型对潜在客户的分类预测的结果来看,我们不难得出以下的结论:

  1. 数据集包含了客户的多个特征,如性别、婚姻状况、年龄、是否拥有学位、职业、工作经验、消费评分、家庭规模和匿名分组等,这些特征可以帮助我们理解客户的行为和需求。
  2. 我们对数据进行了探索性数据分析,发现了一些有趣的模式和关系,例如,年龄和消费评分之间存在一定的关系,年龄较大的客户往往消费评分较高;拥有学位的客户的消费评分也往往较高。
  3. 我们使用了随机森林、极端随机树和支持向量机三种模型对客户进行分类预测,得到的整体准确率都在46%-47%之间。其中,随机森林和极端随机树在类别0和1上的预测效果较好,而支持向量机在类别2和3上的预测效果较好。
  4. 综合比较三种模型的预测结果,我们可以看到,虽然三种模型的整体准确率都在46%-47%之间,但是在各个类别上的预测效果却有所不同。这说明在实际应用中,我们可能需要根据不同的业务需求和目标,选择不同的模型进行预测。

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

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

相关文章

【动态规划算法】第六题:63.不同路径II

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 &#x1f389;作者宣言&#xff1a;认真写好每一篇博客 &#x1f38a;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作…

2、DuiLib的入门程序以及资源压缩打包

标题 1、DuiLib入门程序11.1、DuiLib程序版本11.2、DuiLib程序版本21.3、DuiLib程序版本3&#xff0c;增加编写界面xml1.4、DuiLib程序版本4&#xff0c;继续修改xml布局1.5、DuiLib程序版本5&#xff0c;继续修改xml布局5.6、DuiLib程序版本5&#xff0c;继续修改xml布局 2、D…

Stable Diffusion 使用 SadTalker 生成图片数字人

Heygen和D-ID等照片转视频的工具&#xff0c;都需要在线付费使用。本次介绍一个SadTalker数字人。SadTalker有多种使用方式&#xff0c;包括完整安装程序和stable diffusion插件模式。安装程序操作较繁琐&#xff0c;因此推荐stable diffusion插件模式。 文章目录 SadTalker安…

【龙芯2K500先锋板】点亮RGB多彩发光板

文章目录 一、硬件准备1.1 DFRobot RGB多彩发光板1.2 龙芯2K0500开发板 二、背景知识三、实现点灯3.1 手动点亮3.2 手动熄灭3.3 实现PwmController3.4 实现呼吸灯效果 四、效果演示五、完整代码六、参考链接 前段时间乔帮主送了几个DFRobot的RGB多彩发光板&#xff0c;官方的演…

实现一个简单的录制软件:支持录制桌面与窗口

环境搭建 CSDN 将data文件与obs-plugins文件夹复制到bin/win32文件下 VS2019安装Qt插件&#xff08;附安装失败解决方案&#xff09;_振华OPPO的博客-CSDN博客 插件; 链接&#xff1a;https://pan.baidu.com/s/1fdNDJwrwrJ1SA0Q9AiM7qA?pwdiz4f 提取码&#xff1a;iz4f vs…

uniapp 微信小程序导航功能(从地址列表内点击某一个地址)

效果图&#xff1a; <template><view class"user"><view class"list"><view class"title">地址列表</view><view class"title-label"><view>名称</view><view>距离&#xff…

开启Windows共享文件夹审核,让用户查看谁删除了文件

在动画行业有个常用到的需求&#xff0c; 我的共享文件夹内的文件被谁删除了&#xff0c;查不到&#xff0c;只能查看谁创建&#xff0c;谁修改的&#xff0c;但查不到谁删除的&#xff0c;分享一下&#xff1a; 1 开始->运行->gpedit.msc 开发本地组策略编辑器, 在计算…

el-select 下拉选择框添加字段单位显示 el-select下拉按钮前加单位显示

背景&#xff1a;el-select可以通过自定义模版在下拉选项内加单位但是选择后没法显示单位 实现效果 实现代码 html <el-selectv-model"form.day"class"select-prefix"><el-option label"1" :value"1" /><el-option la…

Spark SQL 6-7

6. Spark SQL实战 6.1 数据说明 数据集是货品交易数据集。 每个订单可能包含多个货品&#xff0c;每个订单可以产生多次交易&#xff0c;不同的货品有不同的单价。 6.2 加载数据 tbStock&#xff1a; scala> case class tbStock(ordernumber:String,locationid:String,…

基于Java+vue前后端分离餐厅点菜管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Ext JS 如何设置工具栏按钮和一般按钮保持统一样式

在Ext JS 中, Button的背景色保持和系统的主色调一致, 样式如下: 但是使用工具栏(toolbar) 添加按钮的时候, 按钮的背景色确实灰色,如下图所示: 为什么会有这个差别呢? 如何让它们保持一致呢? 工具栏按钮与Button不一致的原因 看一下Toolbar里面的按钮最终产生…

C++中,C::C::C::C::foo() 为什么编译成功?

有人问&#xff1a; class Entity { public:static void foo() {} };int main() {Entity::Entity::Entity::Entity::Entity::foo(); } 为什么 最后那行&#xff1a; Entity::Entity::Entity::Entity::Entity::foo(); 能编译成功&#xff1f;这是什么规则&#xff1f; 嗯……

如何优雅的跳出 for 循环

文章目录 需求分析1. 普通for循环2. for..in循环3. for..of循环(ES6)4. forEach(callbackFn, ?thisArg)方法(ES5.1) 源码1. 终止 普通 for 循环2. 终止 forEach2.1 forEach 可以跳出本次循环&#xff0c;执行下一次循环2.2 forEach终止循环 需求 如何做到优雅的跳出 for 循环 …

像考研一样学个宇宙之刷题篇:剑指offerⅡ:整数系列——整数除法0706 TODO

001. 整数除法&#xff1a; 给定两个整数 a 和 b &#xff0c;求它们的除法的商 a/b &#xff0c;要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。 一些知识点和思路 第一题&#xff0c;easy题&#xff0c;狠狠来了个下马威。 首先是 “被除数/除数”关于溢出的情…

| 交互式建模与学习:重建人类运动功能

在报告《交互式建模与学习&#xff1a;重建人类运动功能》中&#xff0c;清华大学副教授眭亚楠介绍了AI在重建人类运动功能时&#xff0c;从无模型学习&#xff08;model-free learning&#xff09;到基于模型学习&#xff08;model-based learning&#xff09;的转变&#xff…

剑指 Offer II . 删除链表的倒数第 n 个结点

给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#x…

【MySQL入门实战5】-Linux PRM 包安装MySQL

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

【QT】QCustomPlot开发笔记

QCustomPlot开发 01、QCustomPlot简介1.1 帮助文档1.2 下载&使用 02、QCustomPlot项目使用笔记2.1 创建QCustomPlot 03、源代码 01、QCustomPlot简介 QCustomPlot 是一个用于科学绘图的 QT 第三方库&#xff0c;可以用于常见的二维图像绘制&#xff0c;比如函数曲线、参数…

管理类联考——择校——学费

截止2023年06月&#xff0c;关于广东的管理类联考的xuefei。 借鉴&#xff1a;https://zhuanlan.zhihu.com/p/421296334。罗列985相关院校 广州以本土MBA为主&#xff0c;共有9家院校&#xff1b; 深圳以外地MBA为主&#xff0c;有超过20家院校。 一梯队&#xff1a;北大光华…

日志---spdlog

spdlog中各对象都分为多线程与单线程版本&#xff1a; *_st&#xff1a;单线程版本&#xff0c;不用加锁&#xff0c;效率更高。*_mt&#xff1a;多线程版本&#xff0c;用于多线程程序是线程安全的。 spdlog是基于C11实现的一款纯头文件的日志管理库 git地址&#xff1a;htt…