一个超市,希望分析一下在这里购物的用户类型以更好的进行针对性营销活动。现在收集到了200名用户的消费信息,包括他们的性别(Gender),年龄(Age),年收入(Annual Income)和在超市中的消费水平(Spending Score)。数据文件:Mall_Customers.csv 需要用python完成如下任务: 1.使用Kmeans等无监督聚类的方式,尝试把他们分成合理的几个聚类簇,并评估这样聚类的合理性 2.尝试解释一下每个簇都表示了什么样的消费人群 3.对数据进行合理的降维,并把它展示为一张二维图像 请解决问题并给出代码实现
时间: 2024-02-17 07:03:08 浏览: 131
python超市销售数据分析
好的,我会根据您的要求回答您的问题,并提供相应的代码实现。
首先,我们需要导入必要的库和数据:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
data = pd.read_csv('Mall_Customers.csv')
```
接下来,我们可以对数据进行初步的探索和处理:
```python
data.head() # 查看前五行数据
data.info() # 查看数据信息
data.describe() # 查看数据统计信息
# 处理缺失值和重复值
data.isnull().sum() # 检查缺失值
data.drop_duplicates(inplace=True) # 删除重复值
```
接下来,我们可以使用Kmeans算法进行聚类:
```python
# 选择特征
X = data.iloc[:, [3, 4]].values
# 使用Elbow方法选择最优的K值
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, init='k-means++', random_state=42)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
# 使用Kmeans算法进行聚类
kmeans = KMeans(n_clusters=5, init='k-means++', random_state=42)
y_kmeans = kmeans.fit_predict(X)
```
接下来,我们可以对聚类结果进行分析和可视化:
```python
# 可视化聚类结果
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()
```
接下来,我们可以对每个簇进行解释:
```python
# 查看每个簇的统计信息
data['Cluster'] = y_kmeans
data.groupby('Cluster').agg({'Gender': 'count', 'Age': 'mean', 'Annual Income (k$)': 'mean', 'Spending Score (1-100)': 'mean'})
# 解释每个簇的特征
# Cluster 1: 年收入和消费水平都比较低,年龄偏大,可能是退休人群或低收入家庭
# Cluster 2: 年收入比较高,但消费水平较低,可能是理性消费者或节俭家庭
# Cluster 3: 年收入和消费水平都比较高,年龄偏低,可能是年轻人或高收入家庭
# Cluster 4: 年收入比较低,但消费水平较高,可能是年轻人或低收入家庭的消费习惯
# Cluster 5: 年收入和消费水平都比较低,但年龄偏低,可能是学生或刚入职的年轻人
```
最后,我们可以对数据进行降维并可视化:
```python
# 对数据进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 可视化降维后的数据
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_kmeans)
plt.title('Clusters of customers (PCA)')
plt.xlabel('PCA1')
plt.ylabel('PCA2')
plt.show()
```
以上就是完整的代码实现,您可以根据实际情况进行调整和优化。
阅读全文