目标:利用12个月的温度数据,对城市进行聚类. 数据集:City_Temp.csv. 作业要求:用K-means聚类算法进行聚类,城市聚类的类别数分别选择3、4、5,观察并分析聚类结果
时间: 2024-05-09 21:15:23 浏览: 173
K-means算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法
好的,这个任务可以分为以下几个步骤:
1. 加载数据集City_Temp.csv
2. 对数据进行预处理,包括缺失值处理、数据归一化等
3. 选择K-means算法进行聚类,并选择合适数量的类别数
4. 对聚类结果进行可视化,并进行结果分析
下面我将一步一步为您讲解如何实现这个任务。
首先,我们需要导入必要的库,包括pandas、numpy、sklearn和matplotlib等。可以使用以下代码导入这些库:
```python
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
```
接下来,我们需要加载数据集City_Temp.csv。可以使用以下代码:
```python
data = pd.read_csv('City_Temp.csv')
```
然后,我们需要对数据进行预处理。首先,我们需要处理缺失值。可以使用以下代码将缺失值替换为平均值:
```python
data = data.fillna(data.mean())
```
接下来,我们需要将数据进行归一化,以确保各个特征对聚类结果的贡献度相同。可以使用以下代码:
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
```
现在,数据已经准备好了,我们可以开始使用K-means算法进行聚类了。首先,我们需要选择合适的类别数。可以使用肘部法则来确定最佳的类别数。代码如下:
```python
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(data_scaled)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
```
运行代码后,我们可以得到一个图形,其中x轴是类别数,y轴是WCSS(Within-Cluster-Sum-of-Squares),即每个聚类中心到该聚类中所有点的距离之和。我们需要选择一个类别数,使得增加类别数时,WCSS的下降幅度明显变小。在这个数据集中,可以看到当类别数为4时,WCSS的下降幅度明显变小,因此我们选择4作为聚类的类别数。
接下来,我们可以使用K-means算法进行聚类。代码如下:
```python
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=0)
pred_y = kmeans.fit_predict(data_scaled)
```
现在我们已经完成了聚类,可以将聚类结果可视化。由于数据集中有两个特征(月份和温度),我们需要一个二维图形来展示聚类结果。可以使用以下代码绘制散点图:
```python
plt.scatter(data_scaled[:,0], data_scaled[:,1], c=pred_y)
plt.xlabel('Month')
plt.ylabel('Temperature')
plt.show()
```
完成上述代码后,我们可以得到一个散点图,其中x轴是月份(1到12),y轴是温度,不同颜色的点表示不同的聚类。可以看到,不同的聚类在x轴和y轴上都有明显的差异,这说明聚类结果是有意义的。
最后,我们需要分析聚类结果。可以根据每个聚类的中心来分析不同聚类的特点。代码如下:
```python
centers = kmeans.cluster_centers_
for i in range(4):
print('Cluster ', i+1, ':')
print('Center: ', centers[i])
print(data[pred_y == i].describe())
print('-----------------------------------------------------')
```
运行上述代码后,我们可以得到每个聚类的中心和统计数据,包括平均值、标准差、最小值、最大值等。通过分析这些统计数据,我们可以了解每个聚类的特点。
综上所述,这就是如何利用K-means算法对城市进行聚类的过程。根据需要,我们可以尝试不同的类别数,并根据聚类结果进行分析和解释。
阅读全文