大连城乡建设网站,房产备案查询,建网站网络公司,网页设计项目案例网站#x1f935;♂️ 个人主页#xff1a;艾派森的个人主页 ✍#x1f3fb;作者简介#xff1a;Python学习者 #x1f40b; 希望大家多多支持#xff0c;我们一起进步#xff01;#x1f604; 如果文章对你有帮助的话#xff0c; 欢迎评论 #x1f4ac;点赞#x1f4… ♂️ 个人主页艾派森的个人主页 ✍作者简介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不同组别的工作经验vs消费得分
4.3.4不同组别的客户分布
4.3.5不同组别的家庭规模
4.3.6客户年龄分布
4.3.7工作经验分布
4.3.8家庭规模分布
4.4特征工程
4.5模型构建
4.5.1KMeans
4.5.2DBSCAN
5.实验总结
源代码 1.项目背景 随着汽车行业的快速发展和竞争日益激烈汽车制造商和销售商需要更好地了解其客户群体以提供个性化的产品和服务提高客户满意度并在市场中取得竞争优势。对于汽车行业来说客户群体是非常多样化的包括不同地区、不同年龄、不同收入水平、不同购车动机等的消费者。 在这种背景下使用聚类分析算法如KMeans和DBSCAN可以帮助汽车行业进行客户细分即将客户划分为具有相似特征的群体。通过这样的细分汽车企业可以更好地了解不同客户群体的需求和行为根据客户的特点量身定制产品和服务提高客户满意度和忠诚度。 KMeans算法是一种常用的聚类分析方法它将数据点分为预先定义的K个簇使得每个数据点与所属簇的质心之间的距离最小化。通过KMeans算法汽车企业可以将客户群体划分为K个不同的类别每个类别具有相似的购车特征和行为习惯从而为市场营销和产品推广提供有针对性的策略。 DBSCAN算法是另一种常用的聚类算法它基于数据点的密度来发现不同形状和大小的簇。DBSCAN算法适用于发现具有不同密度和形状的簇这对于汽车行业来说尤为重要因为不同地区的客户群体可能具有不同的密度和规模。 综上所述基于KMeans和DBSCAN算法对汽车行业客户进行聚类分群的实验具有重要意义它可以帮助汽车企业深入了解不同客户群体的特征制定精准的营销策略提高客户满意度增加销售额并在激烈的市场竞争中取得优势。
2.项目简介
2.1项目说明 本实验旨在通过对汽车行业客户数据进行分析找出不同客户类型的属性和行为特征最后使用KMeans聚类算法进行聚类分群根据客户的特点量身定制产品和服务提高客户满意度和忠诚度增加销售额并在激烈的市场竞争中取得优势。
2.2数据说明
本数据集来源于kaggle原始数据集共有8068条11个特征变量各变量含义解释如下
ID客户ID Gender客户性别 Ever_Married客户婚姻状况 Age客户年龄 Graduated客户是毕业生吗 Profession客户的职业 Work_Experience多年工作经验 Spending_Score客户的消费评分 Family_Size客户家庭成员人数含客户 Var_1客户的匿名类别 Segmentation目标客户的客户群
2.3技术工具
Python版本:3.9
代码编辑器jupyter notebook
3.算法原理 4.项目实施步骤
4.1理解数据 首先导入本次实验用到的第三方库然后加载数据集 查看数据大小 查看数据基本信息 数值型变量描述性统计 非数值型变量描述性统计 4.2数据预处理 统计缺失值情况 删除缺失值 检测数据集是否存在重复值结果为False说明没有 4.3探索性数据分析 4.3.1不同组别的性别分布 4.3.2不同组别的年龄分布 4.3.3不同组别的工作经验vs消费得分 4.3.4不同组别的客户分布 4.3.5不同组别的家庭规模 4.3.6客户年龄分布 4.3.7工作经验分布 4.3.8家庭规模分布 4.4特征工程
先删除无关变量ID和目标变量 对非数值变量进行编码 做出相关性热力图 数据标准化处理 4.5模型构建
4.5.1KMeans 肘部法可视化 训练模型 获取聚类标签 模型结果评估
4.5.2DBSCAN
训练模型 模型评估 5.实验总结 针对以上四个细分类别的汽车行业客户可以制定相应的精准营销策略以满足不同客户群体的需求和偏好提高市场营销效果。
1. 细分D年龄在35岁以下的未婚人士消费得分低主要在医疗保健行业工作。 - 营销策略针对这一群体的客户可以推出经济实惠的汽车型号注重车辆的安全性和燃油经济性。强调汽车的安全性和便捷性例如配备先进的安全技术和智能连接功能以吸引年轻消费者。同时可利用社交媒体和互联网广告来宣传以吸引这一年龄段的年轻人。
2. 细分A年龄在25岁到53岁之间结婚率约为55%消费得分低。职业包括市场营销、娱乐、工程等。主要的家庭规模是1人和2人。 - 营销策略针对这一群体可以推出多样化的车型注重个性化定制服务。考虑到主要是小家庭可以强调车辆的空间利用和舒适性以满足家庭出行的需求。另外可以提供更多的金融方案和促销活动吸引这一群体的购车兴趣。
3. 细分B约75%的结婚率通常在33岁到55岁之间。混合支出得分分布(低:平均:高的比例为4:3:2)。通常在市场营销部门工作。这部分的家庭通常由2个成员组成。 - 营销策略针对这一群体可以推出豪华、高品质的汽车型号注重车辆的品牌价值和科技配置。强调汽车的豪华感和驾驶体验吸引这一群体对高品质车型的购买。同时可提供个性化的购车方案和定制服务满足这一群体的个性化需求。
4. 细分C80%左右的结婚率年龄在32 - 70岁之间。各个细分市场的消费得分各不相同(低:平均:高的比例为3:4:2)。主要从事市场营销工作。这部分的家庭规模通常在2到4人之间。 - 营销策略针对这一群体可以推出具有较高性价比的汽车型号注重车辆的耐用性和性能表现。强调汽车的经济实惠和可靠性满足这一群体对性价比的追求。此外可以开展与企业合作的促销活动吸引这一群体的购车兴趣。
心得与体会
通过这次Python项目实战我学到了许多新的知识这是一个让我把书本上的理论知识运用于实践中的好机会。原先学的时候感叹学的资料太难懂此刻想来有些其实并不难关键在于理解。
在这次实战中还锻炼了我其他方面的潜力提高了我的综合素质。首先它锻炼了我做项目的潜力提高了独立思考问题、自我动手操作的潜力在工作的过程中复习了以前学习过的知识并掌握了一些应用知识的技巧等
在此次实战中我还学会了下面几点工作学习心态
1继续学习不断提升理论涵养。在信息时代学习是不断地汲取新信息获得事业进步的动力。作为一名青年学子更就应把学习作为持续工作用心性的重要途径。走上工作岗位后我会用心响应单位号召结合工作实际不断学习理论、业务知识和社会知识用先进的理论武装头脑用精良的业务知识提升潜力以广博的社会知识拓展视野。
2努力实践自觉进行主角转化。只有将理论付诸于实践才能实现理论自身的价值也只有将理论付诸于实践才能使理论得以检验。同样一个人的价值也是透过实践活动来实现的也只有透过实践才能锻炼人的品质彰显人的意志。
3提高工作用心性和主动性。实习是开端也是结束。展此刻自我面前的是一片任自我驰骋的沃土也分明感受到了沉甸甸的职责。在今后的工作和生活中我将继续学习深入实践不断提升自我努力创造业绩继续创造更多的价值。
这次Python实战不仅仅使我学到了知识丰富了经验。也帮忙我缩小了实践和理论的差距。在未来的工作中我会把学到的理论知识和实践经验不断的应用到实际工作中为实现理想而努力。
源代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import seaborn as sns
from sklearn.cluster import DBSCANdf_train pd.read_csv(Train.csv)
df_train.head()
df_train.shape
df_train.info()
df_train.describe()
df_train.describe(includeO)
df_train.isnull().sum() # 统计缺失值
df_train.dropna(inplaceTrue) # 删除缺失值
df_train.shape
any(df_train.duplicated()) # 检测数据集是否存在重复值
# 不同组别的性别分布
sns.countplot(xSegmentation, hueGender, datadf_train)
plt.title(Segmentation based on Gender)
plt.show()
# 不同组别的年龄分布
sns.boxplot(xSegmentation, yAge, datadf_train)
plt.title(Age Distribution based on Segmentation)
plt.show()
# 不同组别的工作经验vs消费得分
sns.boxplot(xWork_Experience, ySpending_Score, hueSegmentation, datadf_train)
plt.title(Work Experience vs Spending Score based on Segmentation)
plt.show()
sns.violinplot(xSegmentation, yID, datadf_train)
plt.title(Profession Distribution based on Segmentation)
plt.show()
# 不同组别的家庭规模
plt.figure(figsize(8,8))
df_train[Family_Size].value_counts().plot.pie(autopct%1.1f%%)
plt.title(Family Size Distribution based on Segmentation)
plt.show()
# 客户年龄分布
plt.figure(figsize(10,5))
sns.histplot(df_train[Age], kdeTrue)
plt.title(Distribution of Age)
plt.xlabel(Age)
plt.ylabel(Frequency)
plt.show()
# 工作经验分布
plt.figure(figsize(10,5))
sns.histplot(df_train[Work_Experience], kdeTrue)
plt.title(Distribution of Work_Experience)
plt.xlabel(Work_Experience)
plt.ylabel(Frequency)
plt.show()
# 家庭规模分布
plt.figure(figsize(10,5))
sns.histplot(df_train[Family_Size], kdeTrue)
plt.title(Distribution of Family_Size)
plt.xlabel(Family_Size)
plt.ylabel(Frequency)
plt.show()
# 删除目标变量
df_train_kmeans df_train.drop([Segmentation, ID], axis1)
df_train_kmeans
# 将分类列转换为标签编码列
from sklearn.preprocessing import LabelEncoder
encoder LabelEncoder()
df_train_kmeans[Gender] encoder.fit_transform(df_train_kmeans[Gender])
df_train_kmeans[Ever_Married] encoder.fit_transform(df_train_kmeans[Ever_Married])
df_train_kmeans[Graduated] encoder.fit_transform(df_train_kmeans[Graduated])
df_train_kmeans[Profession] encoder.fit_transform(df_train_kmeans[Profession])
df_train_kmeans[Spending_Score] encoder.fit_transform(df_train_kmeans[Spending_Score])
df_train_kmeans[Var_1] encoder.fit_transform(df_train_kmeans[Var_1])
df_train_kmeans.head()
# 相关系数矩阵
corr df_train_kmeans.corr()
# 绘制热力图
plt.figure(figsize(10,10))
sns.heatmap(corr, annotTrue)
plt.show()
# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler StandardScaler()
df_train_kmeans_scaler scaler.fit_transform(df_train_kmeans)
df_train_kmeans_scaler
KMeans
# 肘部法寻找最佳簇数
Sum_of_squared_distances []
K range(2,15)
for k in K:km KMeans(n_clustersk)km km.fit(df_train_kmeans_scaler)Sum_of_squared_distances.append(km.inertia_)print(For k , k, , the inertia is, km.inertia_)
# 肘部法可视化
import matplotlib.pyplot as plt
plt.plot(K, Sum_of_squared_distances, bx-)
plt.xlabel(k)
plt.ylabel(Sum_of_squared_distances)
plt.title(Elbow Method For Optimal k)
plt.show()
# 根据肘部法确定最佳聚类数
best_k 4
# 训练KMeans模型
kmeans KMeans(n_clustersbest_k)
kmeans.fit(df_train_kmeans_scaler)
# 预测聚类标签
labels kmeans.predict(df_train_kmeans_scaler)
# 统计每个集群中的客户数量
from collections import Counter
counts Counter(labels)
# 在“Segmentation”列中获得目标类别“A”、“B”、“C”和“D”
target_categories df_train[Segmentation]
# 找出每个簇中出现频率最高的目标类别
cluster_categories {}
for label, count in counts.items():cluster_data target_categories[labels label]most_frequent_category cluster_data.value_counts().idxmax()cluster_categories[label] most_frequent_category
# 将预测的标签映射到目标类别
mapped_labels [cluster_categories[label] for label in labels]
# 将列n_Clusters添加到具有映射标签的数据框
df_train[n_Clusters] mapped_labels
df_train
# 计算正确预测的次数
correct_predictions sum(df_train[Segmentation] df_train[n_Clusters])
# 计算预测的总数
total_predictions df_train.shape[0]
# 以百分比计算准确度
accuracy (correct_predictions / total_predictions) * 100
print(-- Accuracy for KMeans: {:.2f}%.format(accuracy))
DBSCAN
# 训练DBSCAN模型
dbscan DBSCAN(eps0.6, min_samples5)
dbscan.fit(df_train_kmeans_scaler)
# 预测聚类标签
labels dbscan.labels_
# 统计每个集群中的客户数量
from collections import Counter
counts Counter(labels)
# 在 Segmentation 列中获得目标类别 A B C 和 D
target_categories df_train[Segmentation]
# 找出每个簇中出现频率最高的目标类别
cluster_categories {}
for label, count in counts.items():cluster_data target_categories[labels label]most_frequent_category cluster_data.value_counts().idxmax()cluster_categories[label] most_frequent_category
# 将预测的标签映射到目标类别
mapped_labels [cluster_categories[label] if label in cluster_categories else Noise for label in labels]
# 将列n_Clusters添加到具有映射标签的数据框
df_train[n_Clusters] mapped_labels
df_train
# 计算正确预测的次数
correct_predictions sum(df_train[Segmentation] df_train[n_Clusters])
# 计算预测的总数
total_predictions df_train.shape[0]
# 以百分比计算准确度
accuracy (correct_predictions / total_predictions) * 100
print(-- Accuracy for DBSCAN: {:.2f}%.format(accuracy))