python 读取csv文件中心点算法代码
时间: 2023-06-21 13:23:35 浏览: 78
以下是使用Python读取CSV文件并实现K中心点算法的代码示例:
```python
import csv
import random
import math
# 读取CSV文件
def read_csv(filename):
data = []
with open(filename, 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
data.append([float(x) for x in row])
return data
# 计算两个点之间的欧几里得距离
def distance(p1, p2):
return math.sqrt(sum([(p1[i]-p2[i])**2 for i in range(len(p1))]))
# 找到最远的点作为新的聚类中心
def find_farthest_point(data, centers):
max_distance = 0
farthest_point = None
for point in data:
if point not in centers:
min_distance = min([distance(point, center) for center in centers])
if min_distance > max_distance:
max_distance = min_distance
farthest_point = point
return farthest_point
# K中心点算法
def k_center(data, k):
# 随机选择一个点作为第一个聚类中心
centers = [random.choice(data)]
while len(centers) < k:
# 找到最远的点作为新的聚类中心
farthest_point = find_farthest_point(data, centers)
centers.append(farthest_point)
# 分配数据点到聚类中心
clusters = [[] for i in range(k)]
for point in data:
distances = [distance(point, center) for center in centers]
cluster_index = distances.index(min(distances))
clusters[cluster_index].append(point)
return centers, clusters
# 测试代码
if __name__ == '__main__':
data = read_csv('data.csv')
centers, clusters = k_center(data, 3)
print('聚类中心:', centers)
for i, cluster in enumerate(clusters):
print('聚类', i+1, ':', cluster)
```
在这个示例中,我们首先使用`read_csv`函数读取CSV文件中的数据。然后,我们定义了`distance`函数来计算两个点之间的欧几里得距离,`find_farthest_point`函数来找到距离聚类中心最远的点,以及`k_center`函数来实现K中心点算法。最后,我们使用`centers`和`clusters`变量来存储聚类中心和聚类结果,并输出它们。
请注意,这只是一个简单的示例,实际应用中可能需要对算法进行优化。例如,可以使用KD树等数据结构来加速计算距离。
阅读全文