对一个8行10列的csv数据集进行层次为3的层次聚类并输出每一簇的序号,打印出散点图和图像python代码实现
时间: 2024-02-24 22:55:11 浏览: 120
可以使用Python中的matplotlib库来绘制散点图和图像,下面是对一个8行10列的csv数据集进行层次为3的层次聚类并输出每一簇的序号,并打印出散点图和图像的代码实现:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage, fcluster
# 读取csv文件
data = pd.read_csv('data.csv')
# 进行层次聚类
Z = linkage(data, method='ward')
# 输出每一簇的序号
clusters = fcluster(Z, t=3, criterion='maxclust')
print(clusters)
# 绘制散点图
plt.scatter(data.iloc[:,0], data.iloc[:,1], c=clusters)
plt.show()
# 绘制图像
fig = plt.figure(figsize=(8, 6))
dn = dendrogram(Z)
plt.show()
```
其中,`plt.scatter`函数用于绘制散点图,`c=clusters`表示根据聚类结果给每个点着色;`fig = plt.figure(figsize=(8, 6))`表示设置图像的尺寸为8*6;`dendrogram`函数用于绘制树状图。
相关问题
利用樱花数据(yhkds.csv)实践k-means聚类算法。
首先,我们需要加载数据并对其进行预处理。在这个数据集中,我们有三个属性:年龄、收入和支出。我们将使用这些属性来聚类客户。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 加载数据
data = pd.read_csv('yhkds.csv')
# 删除不必要的列
data.drop(['序号'], axis=1, inplace=True)
# 查看数据
print(data.head())
```
接下来,我们将进行特征缩放,以确保每个特征的权重相等。
```python
# 特征缩放
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
```
现在我们可以应用K-Means算法来聚类数据。我们将尝试聚类2到10个簇,并使用肘方法来选择最佳的簇数。
```python
# 聚类
from sklearn.cluster import KMeans
# 计算SSE(误差平方和)
sse = []
for i in range(2, 11):
kmeans = KMeans(n_clusters=i, init='k-means++')
kmeans.fit(data_scaled)
sse.append(kmeans.inertia_)
# 画出SSE的曲线图
plt.plot(range(2, 11), sse)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.show()
```
根据上图,我们可以看到聚类2或3个簇是最好的选择,因为这些点后的SSE变化不大。
现在我们可以使用K-Means算法并将其应用于数据集,我们将选择3个簇。
```python
# 应用K-Means算法
kmeans = KMeans(n_clusters=3, init='k-means++')
kmeans.fit(data_scaled)
# 为每个客户分配簇
cluster_labels = kmeans.predict(data_scaled)
# 将簇分配添加到数据集中
data['Cluster'] = cluster_labels
# 查看结果
print(data.head())
```
最后,我们可以可视化聚类结果。
```python
# 可视化聚类结果
plt.scatter(data['收入'], data['支出'], c=data['Cluster'])
plt.xlabel('Income')
plt.ylabel('Spending')
plt.show()
```
如果一切都运行正常,您应该会看到一个具有三个不同颜色的散点图,每个颜色代表一个簇。
请帮我详细分析以下python代码的作用import numpy as np from matplotlib import pyplot as plt import pandas as pd from sklearn.cluster import AgglomerativeClustering from sklearn.cluster import KMeans # 读取 Excel 文件数据 df = pd.read_excel(r'D:/存储桌面下载文件夹/管道坐标数据.xlsx') label = df['序号'].values.tolist() x_list = df['X 坐标'].values.tolist() y_list = df['Y 坐标'].values.tolist() data = np.column_stack((x_list, y_list, label)) # 训练模型 ac = AgglomerativeClustering(n_clusters=18, affinity='euclidean', linkage='average') #ac=KMeans(n_clusters=12,n_init='auto') clustering = ac.fit(data[:, :-1]) # 获取每个数据所属的簇标签 cluster_labels = clustering.labels_ print(cluster_labels) # 将簇标签与数据合并,并按照簇标签排序 df['cluster_label'] = cluster_labels df_sorted = df.sort_values(by='cluster_label') # 保存排序后的结果到 CSV 文件 df_sorted.to_csv('18 类_result.csv', index=False) # 绘制聚类散点图 unique_labels = np.unique(cluster_labels) colors = ['red', 'blue', 'green', 'purple', 'orange', 'yellow', 'silver', 'cyan', 'pink', 'navy', 'lime', 'gold', 'indigo', 'cyan', 'teal', 'deeppink', 'maroon', 'firebrick', 'yellowgreen', 'olivedrab'] # 预定义颜色列表 for label, color in zip(unique_labels, colors): cluster_points = data[cluster_labels == label] plt.scatter(cluster_points[:, 0], cluster_points[:, 1], c=color, label=f'Cluster {label}') plt.scatter(26, 31, color='gold', marker='o', edgecolors='g', s=200) # 把 corlor 设置为空,通过 edgecolors 来控制颜色 plt.xlabel('X 坐标') plt.ylabel('Y 坐标') plt.legend() plt.show()
这段代码的作用是读取一个 Excel 文件中的数据,然后使用层次聚类算法(Agglomerative Clustering)将数据分成18个簇,并将每个数据点的簇标签与原数据合并并排序。最后,将排序后的结果保存到一个 CSV 文件中,并绘制聚类散点图。
具体的步骤如下:
1. 导入所需的库:numpy、matplotlib.pyplot、pandas、sklearn.cluster中的AgglomerativeClustering和KMeans。
2. 使用pandas库读取Excel文件中的数据,并将其中的'序号'、'X 坐标'、'Y 坐标'列分别存储到label、x_list和y_list列表中。
3. 使用numpy库的column_stack函数将x_list、y_list和label合并成一个二维数组data。
4. 创建一个AgglomerativeClustering对象ac,并设置n_clusters为18,affinity为'euclidean',linkage为'average'。然后使用fit方法对data进行训练,得到聚类结果。
5. 获取每个数据点的簇标签,存储在变量cluster_labels中。
6. 将簇标签与原数据合并,并按照簇标签进行排序,得到排序后的数据df_sorted。
7. 将排序后的结果保存到CSV文件'18 类_result.csv'中。
8. 绘制聚类散点图:首先获取簇标签的唯一值列表unique_labels,预定义一组颜色列表colors。然后根据每个簇标签,选择对应颜色,将属于该簇的数据点绘制成散点图。最后,在图中添加一个额外的数据点(26, 31)作为参考点,并设置其颜色为金色(gold),边缘颜色为绿色(green)。
9. 设置横纵坐标的标签,添加图例,并显示图形。
这段代码的目的是将数据进行聚类并可视化展示,以便分析数据的分布和聚类结果。
阅读全文
相关推荐















