基于python对本地excel文件数据利用kmeans算法进行聚类分析,不用sklearn,并对聚类可视化进行设计
时间: 2023-06-10 12:08:56 浏览: 116
首先,我们需要安装 pandas、numpy 和 matplotlib 库,这些库都可以使用 pip 命令进行安装。
```
pip install pandas
pip install numpy
pip install matplotlib
```
然后,我们需要读取 Excel 文件中的数据,并将其转换为 numpy 数组:
```python
import pandas as pd
import numpy as np
data = pd.read_excel('data.xlsx')
X = np.array(data)
```
接下来,我们需要实现 KMeans 算法。具体来说,我们需要随机初始化 K 个聚类中心,然后将每个数据点分配到离它最近的聚类中心,并重新计算每个聚类中心的位置。重复这个过程直到聚类中心不再发生变化。
```python
def kmeans(X, K, max_iters=100):
centroids = X[np.random.choice(X.shape[0], K, replace=False)]
for i in range(max_iters):
# 分配每个数据点到最近的聚类中心
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
labels = np.argmin(distances, axis=0)
# 更新聚类中心的位置
for k in range(K):
centroids[k] = X[labels == k].mean(axis=0)
return labels, centroids
```
最后,我们可以将聚类结果可视化。具体来说,我们可以使用 matplotlib 库绘制散点图,将每个数据点根据其所属的聚类分配到不同的颜色。
```python
import matplotlib.pyplot as plt
labels, centroids = kmeans(X, K=3)
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
完整代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters=100):
centroids = X[np.random.choice(X.shape[0], K, replace=False)]
for i in range(max_iters):
# 分配每个数据点到最近的聚类中心
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
labels = np.argmin(distances, axis=0)
# 更新聚类中心的位置
for k in range(K):
centroids[k] = X[labels == k].mean(axis=0)
return labels, centroids
data = pd.read_excel('data.xlsx')
X = np.array(data)
labels, centroids = kmeans(X, K=3)
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)