1.项目背景
在当代社会,汽车作为人们生活中不可或缺的交通工具,其销售和使用数据一直受到广泛关注。汽车制造商、销售商以及相关的市场调研机构需要对汽车客户信息进行深入分析,以了解消费者的需求、喜好和行为习惯,从而优化产品设计、提高市场营销效率,并增加销售额。
随着信息技术的不断发展,数据可视化成为一种强大的工具,可以将大量的汽车客户信息呈现为直观、易懂的图表和图像。通过数据可视化分析,汽车制造商和销售商可以更好地洞察客户群体的特征和行为,例如他们的地理分布、购车偏好、购买决策因素、购车周期等。同时,数据可视化也有助于发现市场趋势和潜在机会,指导企业制定更精准的营销策略,提高竞争力。
此外,随着大数据技术的普及和应用,汽车行业积累了大量的客户数据,包括车辆销售记录、售后服务反馈、在线咨询聊天记录等。利用这些数据进行可视化分析,可以挖掘更深层次的信息,帮助企业更好地了解客户的需求和意愿。
综上所述,进行汽车客户信息数据可视化分析对于汽车行业的企业来说具有重要意义,它可以帮助企业做出更明智的决策,提升客户满意度,提高市场份额,进而推动整个汽车产业的发展。
2.数据集介绍
本数据集来源于kaggle,原始数据集共有8068条,11个特征变量,各变量含义解释如下:
ID:客户ID
Gender:客户性别
Ever_Married:客户婚姻状况
Age:客户年龄
Graduated:客户是毕业生吗?
Profession:客户的职业
Work_Experience:多年工作经验
Spending_Score:客户的消费评分
Family_Size:客户家庭成员人数(含客户)
Var_1:客户的匿名类别
Segmentation:(目标)客户的客户群
3.技术工具
Python版本:3.9
代码编辑器:jupyter notebook
4.导入数据
查看数据大小
查看数据基本信息
数值型变量描述性统计
非数值型变量描述性统计
5.数据预处理
统计缺失值情况
删除缺失值
检测数据集是否存在重复值,结果为False说明没有
6.数据探索性分析
6.1不同组别的性别分布
6.2不同组别的年龄分布
6.3不同组别的工作经验vs消费得分
6.4不同组别的客户分布
6.5不同组别的家庭规模
6.6客户年龄分布
6.7工作经验分布
6.8家庭规模分布
6.9相关系数热力图
7.分析总结
经过前面的数据可视化分析,我们可以总结出以下规律:
细分D:通常是35岁以下的未婚人士,消费得分低,主要在医疗保健行业工作。
细分A:年龄在25岁到53岁之间,结婚率约为55%,消费得分低。职业包括市场营销、娱乐、工程等。主要的家庭规模是1人和2人。
细分B:约75%的结婚率,通常在33岁到55岁之间。混合支出得分分布(低:平均:高的比例为4:3:2)。通常在市场营销部门工作。这部分的家庭通常由2个成员组成。
细分C: 80%左右的结婚率,年龄在32 - 70岁之间。各个细分市场的消费得分各不相同(低:平均:高的比例为3:4:2)。主要从事市场营销工作。这部分的家庭规模通常在2到4人之间。
8.实验源代码
df_train = pd.read_csv('Train.csv') df_train.head() df_train.shape df_train.info() df_train.describe() df_train.describe(include='O') df_train.isnull().sum() # 统计缺失值 df_train.dropna(inplace=True) # 删除缺失值 df_train.shape any(df_train.duplicated()) # 检测数据集是否存在重复值 # 不同组别的性别分布 sns.countplot(x='Segmentation', hue='Gender', data=df_train) plt.title("Segmentation based on Gender") plt.show() # 不同组别的年龄分布 sns.boxplot(x='Segmentation', y='Age', data=df_train) plt.title("Age Distribution based on Segmentation") plt.show() # 不同组别的工作经验vs消费得分 sns.boxplot(x='Work_Experience', y='Spending_Score', hue='Segmentation', data=df_train) plt.title("Work Experience vs Spending Score based on Segmentation") plt.show() sns.violinplot(x='Segmentation', y='ID', data=df_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'], kde=True) plt.title("Distribution of 'Age'") plt.xlabel("Age") plt.ylabel("Frequency") plt.show() # 工作经验分布 plt.figure(figsize=(10,5)) sns.histplot(df_train['Work_Experience'], kde=True) 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'], kde=True) plt.title("Distribution of 'Family_Size'") plt.xlabel("Family_Size") plt.ylabel("Frequency") plt.show() # 删除目标变量 df_train_kmeans = df_train.drop(['Segmentation', 'ID'], axis=1) 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, annot=True) plt.show()