21017-05-13 21:05

本系列将每日更新一篇关于计算机网络的专业知识,旨在深入探讨并分享该领域的最新进展和技术要点。
import numpy as np from matplotlib import pyplot as plt import scapy.all as scapy from collections import defaultdict from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score import pandas as pd # ====================== # 1. PCAP文件解析与流重组 # ====================== print("正在解析PCAP文件...") packets = scapy.rdpcap('test.pcap') # 按五元组重组网络流 flows = defaultdict(list) for pkt in packets: if 'IP' in pkt: # 获取协议类型 (TCP=6, UDP=17, ICMP=1) proto = pkt['IP'].proto src_port = pkt[proto].sport if proto in pkt else 0 dst_port = pkt[proto].dport if proto in pkt else 0 # 创建流标识键 (源IP, 目的IP, 源端口, 目的端口, 协议) flow_key = (pkt['IP'].src, pkt['IP'].dst, src_port, dst_port, proto) flows[flow_key].append(pkt) print(f"共识别出 {len(flows)} 个网络流") # ====================== # 2. 特征工程 # ====================== print("正在提取流量特征...") features = [] valid_flows = [] for flow_key, packets in flows.items(): # 跳过包含少于5个包的流 if len(packets) < 5: continue # 基础统计特征 packet_count = len(packets) total_bytes = sum(len(p) for p in packets) # 时序特征 timestamps = [float(p.time) for p in packets] # 关键修改:转换为float iat = np.diff(timestamps) # 包间隔时间 mean_iat = np.mean(iat) if len(iat) > 0 else 0 std_iat = np.std(iat) if len(iat) > 1 else 0 # 包长特征 pkt_lengths = [len(p) for p in packets] mean_pkt_len = np.mean(pkt_lengths) std_pkt_len = np.std(pkt_lengths) min_pkt_len = min(pkt_lengths) max_pkt_len = max(pkt_lengths) # 方向特征 (0=客户端到服务器, 1=服务器到客户端) directions = [1 if p['IP'].src == flow_key[0] else 0 for p in packets] up_ratio = sum(directions) / len(directions) features.append([ packet_count, total_bytes, mean_iat, std_iat, mean_pkt_len, std_pkt_len, min_pkt_len, max_pkt_len, up_ratio ]) valid_flows.append(flow_key) # 转换为特征矩阵 feature_matrix = np.array(features) feature_names = [ '包数量', '总字节数', '平均包间隔', '包间隔标准差', '平均包长', '包长标准差', '最小包长', '最大包长', '上行比例' ] print(f"提取了 {len(features)} 个有效流的 {len(feature_names)} 维特征") # ====================== # 3. 数据标准化 # ====================== print("正在进行数据标准化...") scaler = StandardScaler() scaled_features = scaler.fit_transform(feature_matrix) # ====================== # 4. 肘部法则确定最佳K值 # ====================== print("使用肘部法则确定最佳聚类数...") n_samples = scaled_features.shape[0] # 获取实际样本数 # 根据样本数量动态调整K范围 if n_samples < 5: print(f"警告:样本数量较少({n_samples}),将使用简化聚类策略") k_range = range(1, min(11, n_samples + 1)) # K值上限不超过样本数 else: k_range = range(1, 11) # 测试1-10个聚类 sse = [] kmeans_models = {} # 存储每个K的模型 for k in k_range: # 确保K值不超过样本数 if k > n_samples: print(f"跳过K={k}(超过样本数{n_samples})") continue kmeans = KMeans(n_clusters=k, n_init=10, random_state=42) kmeans.fit(scaled_features) sse.append(kmeans.inertia_) # 获取SSE kmeans_models[k] = kmeans # 存储模型 # 如果没有足够的点绘制肘部图,直接选择K值 if len(sse) < 2: optimal_k = min(2, n_samples) # 至少2类,但不超过样本数 print(f"样本过少,直接设置K={optimal_k}") else: # 绘制肘部法则图 plt.figure(figsize=(10, 6)) plt.plot(list(k_range)[:len(sse)], sse, 'bo-') plt.xlabel('聚类数量 $ K$') plt.ylabel('SSE (误差平方和)') plt.title('肘部法则确定最佳聚类数') plt.grid(True) plt.savefig('elbow_method.png', dpi=300) plt.close() print("肘部法则图已保存为 elbow_method.png") # 自动检测拐点 (肘点) if len(sse) >= 3: # 至少有3个点才能计算二阶差分 knee_point = np.argmin(np.diff(sse, 2)) + 2 optimal_k = max(2, min(10, knee_point)) # 确保在2-10之间 else: # 样本较少时使用简单策略 optimal_k = max(2, min(3, n_samples)) # 选择2或3 print(f"自动检测的最佳聚类数: K = {optimal_k}") # ====================== # 5. K-means聚类 # ====================== print(f"正在进行K-means聚类 (K={optimal_k})...") # 如果样本数小于K,调整K值 if optimal_k > n_samples: optimal_k = max(1, n_samples) # 确保K不超过样本数 print(f"调整聚类数为样本数: K = {optimal_k}") # 使用之前存储的模型或创建新模型 if optimal_k in kmeans_models: kmeans = kmeans_models[optimal_k] cluster_labels = kmeans.labels_ else: kmeans = KMeans(n_clusters=optimal_k, n_init=10, random_state=42) cluster_labels = kmeans.fit_predict(scaled_features) # 计算轮廓系数(仅当K>1时) if optimal_k > 1: silhouette_avg = silhouette_score(scaled_features, cluster_labels) print(f"轮廓系数: {silhouette_avg:.4f} (接近1表示聚类效果良好)") else: print("聚类数为1,无需计算轮廓系数") # ====================== # 6. 结果分析与可视化 # ====================== # 创建结果DataFrame result_df = pd.DataFrame({ '源IP': [flow[0] for flow in valid_flows], '目的IP': [flow[1] for flow in valid_flows], '协议': [f"TCP(6)" if flow[4] == 6 else f"UDP(17)" for flow in valid_flows], '聚类标签': cluster_labels }) # 添加特征值到结果表 for i, name in enumerate(feature_names): result_df[name] = feature_matrix[:, i] # 保存聚类结果 result_df.to_csv('cluster_results.csv', index=False) print("聚类结果已保存为 cluster_results.csv") # 各簇统计信息 cluster_stats = result_df.groupby('聚类标签').agg({ '包数量': 'mean', '总字节数': 'mean', '平均包间隔': 'mean', '上行比例': 'mean' }).rename(columns={ '包数量': '平均包数量', '总字节数': '平均总字节数', '平均包间隔': '平均包间隔(s)', '上行比例': '平均上行比例' }) print("\n各用户簇流量特征统计:") print(cluster_stats.round(2)) # 可视化聚类结果 (使用前两个主成分) from sklearn.decomposition import PCA pca = PCA(n_components=2) principal_components = pca.fit_transform(scaled_features) plt.figure(figsize=(12, 8)) scatter = plt.scatter( principal_components[:, 0], principal_components[:, 1], c=cluster_labels, cmap='viridis', alpha=0.6 ) # 添加簇中心 centers = pca.transform(kmeans.cluster_centers_) plt.scatter( centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.9, marker='X', edgecolor='black' ) plt.colorbar(scatter, label='用户簇') plt.xlabel('主成分 1') plt.ylabel('主成分 2') plt.title(f'校园网用户流量聚类 (K={optimal_k})') plt.grid(alpha=0.3) plt.savefig('cluster_visualization.png', dpi=300) plt.close() print("聚类可视化图已保存为 cluster_visualization.png") print("\n聚类完成! 结果文件已保存:") print("- elbow_method.png: 肘部法则图") print("- cluster_results.csv: 详细聚类结果") print("- cluster_visualization.png: 聚类可视化") 编译结果如下,解释一下编译结果 E:\用户画像\聚类分离用户数据\.venv\Scripts\python.exe E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py 正在解析PCAP文件... 共识别出 3 个网络流 正在提取流量特征... 提取了 3 个有效流的 9 维特征 正在进行数据标准化... 使用肘部法则确定最佳聚类数... 警告:样本数量较少(3),将使用简化聚类策略 E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 35823 (\N{CJK UNIFIED IDEOGRAPH-8BEF}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 24046 (\N{CJK UNIFIED IDEOGRAPH-5DEE}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 26041 (\N{CJK UNIFIED IDEOGRAPH-65B9}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 21644 (\N{CJK UNIFIED IDEOGRAPH-548C}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 32920 (\N{CJK UNIFIED IDEOGRAPH-8098}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 37096 (\N{CJK UNIFIED IDEOGRAPH-90E8}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 27861 (\N{CJK UNIFIED IDEOGRAPH-6CD5}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 21017 (\N{CJK UNIFIED IDEOGRAPH-5219}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 30830 (\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 23450 (\N{CJK UNIFIED IDEOGRAPH-5B9A}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 26368 (\N{CJK UNIFIED IDEOGRAPH-6700}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 20339 (\N{CJK UNIFIED IDEOGRAPH-4F73}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 32858 (\N{CJK UNIFIED IDEOGRAPH-805A}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 31867 (\N{CJK UNIFIED IDEOGRAPH-7C7B}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:132: UserWarning: Glyph 25968 (\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans. plt.savefig('elbow_method.png', dpi=300) Font 'default' does not have a glyph for '\u805a' [U+805a], substituting with a dummy symbol. Font 'default' does not have a glyph for '\u7c7b' [U+7c7b], substituting with a dummy symbol. Font 'default' does not have a glyph for '\u6570' [U+6570], substituting with a dummy symbol. Font 'default' does not have a glyph for '\u91cf' [U+91cf], substituting with a dummy symbol. C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 35823 (\N{CJK UNIFIED IDEOGRAPH-8BEF}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 24046 (\N{CJK UNIFIED IDEOGRAPH-5DEE}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 26041 (\N{CJK UNIFIED IDEOGRAPH-65B9}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 21644 (\N{CJK UNIFIED IDEOGRAPH-548C}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 32920 (\N{CJK UNIFIED IDEOGRAPH-8098}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 37096 (\N{CJK UNIFIED IDEOGRAPH-90E8}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 27861 (\N{CJK UNIFIED IDEOGRAPH-6CD5}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 21017 (\N{CJK UNIFIED IDEOGRAPH-5219}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 30830 (\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 23450 (\N{CJK UNIFIED IDEOGRAPH-5B9A}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 26368 (\N{CJK UNIFIED IDEOGRAPH-6700}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 20339 (\N{CJK UNIFIED IDEOGRAPH-4F73}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 32858 (\N{CJK UNIFIED IDEOGRAPH-805A}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 31867 (\N{CJK UNIFIED IDEOGRAPH-7C7B}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 25968 (\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) Font 'default' does not have a glyph for '\u805a' [U+805a], substituting with a dummy symbol. Font 'default' does not have a glyph for '\u7c7b' [U+7c7b], substituting with a dummy symbol. Font 'default' does not have a glyph for '\u6570' [U+6570], substituting with a dummy symbol. Font 'default' does not have a glyph for '\u91cf' [U+91cf], substituting with a dummy symbol. 肘部法则图已保存为 elbow_method.png 自动检测的最佳聚类数: K = 2 正在进行K-means聚类 (K=2)... 轮廓系数: 0.1744 (接近1表示聚类效果良好) 聚类结果已保存为 cluster_results.csv 各用户簇流量特征统计: 平均包数量 平均总字节数 平均包间隔(s) 平均上行比例 聚类标签 0 10.5 3721.0 0.04 1.0 1 6.0 1023.0 0.16 1.0 E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 20027 (\N{CJK UNIFIED IDEOGRAPH-4E3B}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 25104 (\N{CJK UNIFIED IDEOGRAPH-6210}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 20998 (\N{CJK UNIFIED IDEOGRAPH-5206}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 26657 (\N{CJK UNIFIED IDEOGRAPH-6821}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 22253 (\N{CJK UNIFIED IDEOGRAPH-56ED}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 32593 (\N{CJK UNIFIED IDEOGRAPH-7F51}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 29992 (\N{CJK UNIFIED IDEOGRAPH-7528}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 25143 (\N{CJK UNIFIED IDEOGRAPH-6237}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 27969 (\N{CJK UNIFIED IDEOGRAPH-6D41}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 37327 (\N{CJK UNIFIED IDEOGRAPH-91CF}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 32858 (\N{CJK UNIFIED IDEOGRAPH-805A}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 31867 (\N{CJK UNIFIED IDEOGRAPH-7C7B}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) E:\用户画像\聚类分离用户数据\聚类分离校园网数据.py:234: UserWarning: Glyph 31751 (\N{CJK UNIFIED IDEOGRAPH-7C07}) missing from font(s) DejaVu Sans. plt.savefig('cluster_visualization.png', dpi=300) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 20027 (\N{CJK UNIFIED IDEOGRAPH-4E3B}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 25104 (\N{CJK UNIFIED IDEOGRAPH-6210}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 20998 (\N{CJK UNIFIED IDEOGRAPH-5206}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 26657 (\N{CJK UNIFIED IDEOGRAPH-6821}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 22253 (\N{CJK UNIFIED IDEOGRAPH-56ED}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 32593 (\N{CJK UNIFIED IDEOGRAPH-7F51}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 29992 (\N{CJK UNIFIED IDEOGRAPH-7528}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 25143 (\N{CJK UNIFIED IDEOGRAPH-6237}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 27969 (\N{CJK UNIFIED IDEOGRAPH-6D41}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 37327 (\N{CJK UNIFIED IDEOGRAPH-91CF}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 32858 (\N{CJK UNIFIED IDEOGRAPH-805A}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 31867 (\N{CJK UNIFIED IDEOGRAPH-7C7B}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) C:\Program Files\JetBrains\PyCharm 2025.1.2\plugins\python-ce\helpers\pycharm_matplotlib_backend\backend_interagg.py:124: UserWarning: Glyph 31751 (\N{CJK UNIFIED IDEOGRAPH-7C07}) missing from font(s) DejaVu Sans. FigureCanvasAgg.draw(self) 聚类可视化图已保存为 cluster_visualization.png 聚类完成! 结果文件已保存: - elbow_method.png: 肘部法则图 - cluster_results.csv: 详细聚类结果 - cluster_visualization.png: 聚类可视化 进程已结束,退出代码为 0
07-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值