DBSCAN 无监督聚类实现:对 869 个 CSV 文件进行分类并可视化
以下是 DBSCAN 无监督聚类方法的实现代码:
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# 读取文件名列表
file_list = []
with open('abnormal_list.txt', 'r') as f:
for line in f:
file_list.append(line.strip())
# 定义聚类函数
def cluster(file_name):
# 读取数据
data = pd.read_csv(os.path.join('Abnormal', file_name), header=None, skiprows=1).values
# 数据标准化
scaler = StandardScaler()
data = scaler.fit_transform(data)
# 聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels = dbscan.fit_predict(data)
# 可视化
fig, ax = plt.subplots()
markers = ['*', 's', '^', 'o', 'v']
for i in range(-1, np.max(labels)+1):
if i == -1:
color = 'k'
else:
color = plt.cm.Set1(i/10)
ax.scatter(data[labels==i, 0], data[labels==i, 1], marker=markers[i%5], color=color, label=i)
ax.legend(loc='best')
ax.set_title(file_name)
plt.savefig(os.path.join('result', file_name[:-4]+'.png'))
plt.close()
# 保存分类结果
result = pd.DataFrame({'labels': labels})
result.to_csv(os.path.join('result', file_name[:-4]+'.csv'), index=False)
# 创建结果文件夹
if not os.path.exists('result'):
os.mkdir('result')
# 聚类并可视化每个文件
for file_name in file_list:
cluster(file_name)
上述代码中,首先读取文件名列表,然后定义了聚类函数cluster,该函数读取一个csv文件并进行聚类和可视化,并将分类结果保存到本地。在聚类过程中,使用了StandardScaler对数据进行标准化,然后使用DBSCAN进行聚类。在可视化过程中,使用了五种不同的标记符号来表示五个类别,使用不同的颜色来区分不同的簇。最后,创建了一个名为result的文件夹来保存可视化结果和分类结果。在主程序中,遍历文件名列表并调用cluster函数进行聚类和可视化。
代码说明:
abnormal_list.txt文件包含需要聚类的所有 CSV 文件名,每个文件名占一行。Abnormal文件夹包含所有 CSV 文件,每个文件包含 361 行数据,从第二行开始才是需要分析的数据。- 聚类结果将保存在
result文件夹中,每个 CSV 文件的聚类结果会生成一个.png图像文件和一个.csv文件,其中.png文件是可视化结果,.csv文件是分类结果。 - 代码使用五种不同的符号表示五个类别,分别是:五角星、三角形、方块、*、^。
- 可以根据需要调整
DBSCAN的参数eps和min_samples。
希望本代码可以帮助您实现对 869 个 CSV 文件的无监督聚类分析。
原文地址: https://www.cveoy.top/t/topic/jKr5 著作权归作者所有。请勿转载和采集!