python 读取csv文件 k中心点算法代码
时间: 2023-07-18 10:13:46 浏览: 39
以下是一个简单的 Python 代码示例,用于读取 CSV 文件并使用 k-中心点算法计算其中所有点的 k 个中心点坐标:
```python
import csv
import random
# 读取 CSV 文件
with open('file.csv', newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=',', quotechar='|')
# 初始化 k 个中心点
k = 3
centers = []
for i in range(k):
row = next(reader)
centers.append((float(row[0]), float(row[1])))
# 迭代计算 k 个中心点
max_iterations = 100
for iteration in range(max_iterations):
# 初始化 k 个簇
clusters = [[] for i in range(k)]
# 遍历所有数据点,并将其分配到最近的中心点所属的簇中
for row in reader:
x, y = float(row[0]), float(row[1])
distances = [((x - center_x) ** 2 + (y - center_y) ** 2) ** 0.5 for center_x, center_y in centers]
nearest_center_index = distances.index(min(distances))
clusters[nearest_center_index].append((x, y))
# 更新 k 个中心点为其所在簇的所有点的平均值
new_centers = []
for i in range(k):
if len(clusters[i]) > 0:
center_x = sum([x for x, y in clusters[i]]) / len(clusters[i])
center_y = sum([y for x, y in clusters[i]]) / len(clusters[i])
new_centers.append((center_x, center_y))
else:
# 若某个簇为空,则随机选择一个数据点作为其中心点
row = random.choice(list(reader))
new_centers.append((float(row[0]), float(row[1])))
# 检查 k 个中心点是否发生变化,若未发生变化则退出迭代
if centers == new_centers:
break
else:
centers = new_centers
# 打印结果
for i in range(k):
print("第 {} 个中心点坐标为:({}, {})".format(i+1, centers[i][0], centers[i][1]))
```
请将代码中的 `file.csv` 替换为实际的 CSV 文件名,并根据 CSV 文件中数据的格式更新代码中的解析方法。同时,您可以根据需要更改 `k` 的值和最大迭代次数 `max_iterations` 的值。