数据挖掘 K-Means聚类

未格式化之前的代码:

python 复制代码
import pandas as pd#数据处理
from matplotlib import pyplot as plt#绘图
from sklearn.preprocessing import MinMaxScaler#归一化
from sklearn.cluster import KMeans#聚类
import os#处理文件

os.environ["OMP_NUM_THREADS"] = '4'

df = pd.read_excel("consumption_data.xls", usecols=["R", "F", "M"])#选取了"R"、"F"和"M"三列数据
df.dropna(inplace=True)#将缺失值删除
df_scale = MinMaxScaler().fit_transform(df)#归一化,使得数据在0到1的范围内
model = KMeans(n_clusters=3, random_state=0)#n_clusters参数设置为3,表示要将数据分成3个簇。random_state参数设置为0,以确保每次运行时都得到相同的结果
model.fit(df_scale)#训练模型
core = model.cluster_centers_#通过cluster_centers_属性获取聚类模型中心点的坐标,即每个簇的中心点
df["class"] = model.labels_#将每个数据点的簇标签保存在原始数据集的"class"列中,使用labels_属性获取每个数据点所属的簇的标签

fig = plt.figure(figsize=(9, 9))#创建一个大小为9x9的图形窗口
ax = plt.axes(projection='3d')#创建一个3D坐标轴
center_x = []#创建空列表用于存储各个簇的中心点坐标。
center_y = []
center_z = []
for i, j in df.groupby(by="class"):#对数据集按簇标签进行分组
    ax.scatter3D(j["F"], j["R"], j["M"], label=i)#将每个簇的数据点在3D空间中绘制为散点图
    center_x.append(j["F"].mean())#计算每个簇的中心点坐标,并将其添加到相应的列表中。
    center_y.append(j["R"].mean())
    center_z.append(j["M"].mean())
    # ax.scatter3D(j["F"].mean(),j["R"].mean(),j["M"].mean(),marker="X") 使用scatter3D()函数将每个簇的中心点坐标(j["F"].mean(), j["R"].mean(), j["M"].mean())以"X"形状的标记绘制在图中。
ax.scatter3D(center_x, center_y, center_z, label='center', marker="X", alpha=1)#以"X"形状的标记绘制簇的中心点。alpha参数设置为1,表示散点图的透明度为完全不透明
plt.legend()#显示图例
plt.show()#显示图形

for i, j in df.groupby(by="class"):#对数据集按簇标签进行分组。
    j[["R", "F", "M"]].plot(kind="kde", subplots=True, sharex=False)#对每个簇的三个特征绘制核密度图。kind="kde"指定绘制核密度图,subplots=True表示将三个子图绘制在同一画布上,sharex=False表示不共享x轴。
    plt.subplots_adjust(hspace=0.3)  # 调整子图的纵向间隙,hspace=0.3将纵向间隔设置为子图高度的30%。这将使得每个子图之间有一定的空白间隔
    plt.show()#显示图形

格式化之后的代码:

python 复制代码
import pandas as pd  # 数据处理
from matplotlib import pyplot as plt  # 绘图
from sklearn.preprocessing import MinMaxScaler  # 归一化
from sklearn.cluster import KMeans  # 聚类
import os  # 处理文件

os.environ["OMP_NUM_THREADS"] = '4'

df = pd.read_excel("consumption_data.xls", usecols=["R", "F", "M"])  # 选取了"R"、"F"和"M"三列数据
df.dropna(inplace=True)  # 将缺失值删除
df_scale = MinMaxScaler().fit_transform(df)  # 归一化,使得数据在0到1的范围内
model = KMeans(n_clusters=3, random_state=0)  # n_clusters参数设置为3,表示要将数据分成3个簇。random_state参数设置为0,以确保每次运行时都得到相同的结果
model.fit(df_scale)  # 训练模型
core = model.cluster_centers_  # 通过cluster_centers_属性获取聚类模型中心点的坐标,即每个簇的中心点
df["class"] = model.labels_  # 将每个数据点的簇标签保存在原始数据集的"class"列中,使用labels_属性获取每个数据点所属的簇的标签

fig = plt.figure(figsize=(9, 9))  # 创建一个大小为9x9的图形窗口
ax = plt.axes(projection='3d')  # 创建一个3D坐标轴
center_x = []  # 创建空列表用于存储各个簇的中心点坐标。
center_y = []
center_z = []
for i, j in df.groupby(by="class"):  # 对数据集按簇标签进行分组
    ax.scatter3D(j["F"], j["R"], j["M"], label=i)  # 将每个簇的数据点在3D空间中绘制为散点图
    center_x.append(j["F"].mean())  # 计算每个簇的中心点坐标,并将其添加到相应的列表中。
    center_y.append(j["R"].mean())
    center_z.append(j["M"].mean())
    # ax.scatter3D(j["F"].mean(),j["R"].mean(),j["M"].mean(),marker="X") 使用scatter3D()函数将每个簇的中心点坐标(j["F"].mean(), j["R"].mean(), j["M"].mean())以"X"形状的标记绘制在图中。
ax.scatter3D(center_x, center_y, center_z, label='center', marker="X",
             alpha=1)  # 以"X"形状的标记绘制簇的中心点。alpha参数设置为1,表示散点图的透明度为完全不透明
plt.legend()  # 显示图例
plt.show()  # 显示图形

for i, j in df.groupby(by="class"):  # 对数据集按簇标签进行分组。
    j[["R", "F", "M"]].plot(kind="kde", subplots=True,
                            sharex=False)  # 对每个簇的三个特征绘制核密度图。kind="kde"指定绘制核密度图,subplots=True表示将三个子图绘制在同一画布上,sharex=False表示不共享x轴。
    plt.subplots_adjust(hspace=0.3)  # 调整子图的纵向间隙,hspace=0.3将纵向间隔设置为子图高度的30%。这将使得每个子图之间有一定的空白间隔
    plt.show()  # 显示图形
相关推荐
程序员猫哥_3 小时前
AI建站工具选型指南:不同模式对比与筛选标准
数据挖掘
KaMeidebaby11 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
程序员猫哥_18 小时前
AI建站避坑指南:10个核心问题与客观解答
数据挖掘
高洁0120 小时前
打造行业知识图谱三步走
python·深度学习·数据挖掘·知识图谱
scx_link20 小时前
Softmax回归
人工智能·数据挖掘·回归
搞科研的小刘选手1 天前
【西安交通大学主办】第六届人工智能、自动化与高性能计算国际会议 (AIAHPC 2026)
网络·人工智能·机器学习·数据挖掘·自动化·云计算·并行式
电商API_180079052471 天前
技术分享:如何实现批量自动化获取淘宝商品视频主图API
运维·爬虫·数据挖掘·自动化
电商API_180079052471 天前
高可用采集架构:分布式定时抓取淘宝商品详情项目设计
大数据·分布式·架构·数据挖掘·网络爬虫
大霸王龙1 天前
机器人维修工程师
人工智能·数据挖掘·机器人
YangYang9YangYan1 天前
2026会计人员学数据分析对个人能力的提升
数据挖掘·数据分析