数据挖掘 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()  # 显示图形
相关推荐
可爱美少女5 小时前
Predict Podcast Listening Time-(回归+特征工程+xgb)
人工智能·数据挖掘·回归
lilye669 小时前
精益数据分析(63/126):移情阶段的深度潜入——从用户生活到产品渗透的全链路解析
数据挖掘·数据分析·生活
医只鸡腿子10 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发
王哥儿聊AI15 小时前
基于LLM合成高质量情感数据,提升情感分类能力!!
人工智能·分类·数据挖掘
小白—人工智能18 小时前
数据分析 —— 数据预处理
python·数据挖掘·数据分析
Blossom.1181 天前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
莫叫石榴姐1 天前
大模型在数据分析领域的研究综述
大数据·数据挖掘·数据分析
胡耀超1 天前
霍夫圆变换全面解析(OpenCV)
人工智能·python·opencv·算法·计算机视觉·数据挖掘·数据安全
人大博士的交易之路1 天前
今日行情明日机会——20250516
大数据·数学建模·数据挖掘·程序员创富·缠中说禅·涨停回马枪·道琼斯结构
Leo.yuan2 天前
基于地图的数据可视化:解锁地理数据的真正价值
大数据·数据库·信息可视化·数据挖掘·数据分析