数据挖掘 K-Means聚类

news/2024/5/20 6:23:09 标签: 数据挖掘, kmeans, 聚类

未格式化之前的代码:

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()#显示图形

格式化之后的代码:

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()  # 显示图形

http://www.niftyadmin.cn/n/5292338.html

相关文章

Linux期末考试复习

gcc编译 案例.c源代码-E预处理后.i文件gcc -E test.c -o test.i-S编译后.s文件gcc -S test.i -o test.s-c汇编.o文件 库文件gcc -c test.s -o test.o-I 链接后目标文件 gcc 不使用 –E、–S 和 –c选项&#xff0c;则会依次自动执行预处理、编译和汇编。 头文件#include <…

C语言实例_生成6位数的随机密码

一、前言 随着数字化时代的到来&#xff0c;人们在各个方面需要使用密码来保护个人隐私和敏感信息的安全。为了确保密码的安全性&#xff0c;密码应该是足够强大和难以猜测的&#xff0c;这就需要密码生成器来帮助用户生成高强度的随机密码。 随机密码生成器是一种计算机程序…

什么是骨传导耳机?骨传导能保护听力吗?

骨传导耳机是一种非常特殊的蓝牙耳机&#xff0c;它通过骨传导技术将声音直接传送到内耳。这种技术不同于传统耳机&#xff0c;它不通过空气传送声音&#xff0c;而是通过头骨的振动来传送声音。 并且骨传导耳机能够在一定程度上起到保护听力的作用&#xff0c;主要是因为它们不…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

释放资源的方式

为什么要学这个释放资源的方式&#xff1f; //5 关流outputStream.close();inputStream.close();原来这种方式&#xff0c;一般项目都会有很多代码&#xff0c;万一前面的代码有异常&#xff0c;就无法执行到这一步&#xff0c;绑定的系统资源就得不到释放&#xff0c;影响系统…

3D展2D数学原理

今年早些时候&#xff0c;我为 MAKE 杂志写了一篇教程&#xff0c;介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理&#xff0c;并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub&#xff0c;但我在这里编写了对使这一…

2023年的技术回顾

技术趋势 在人工智能领域&#xff0c;2023年见证了AI技术的快速发展&#xff0c;包括新的算法、模型的改进以及AI在各个领域的广泛应用。深度学习、机器学习、自然语言处理等领域取得了显著的进步&#xff0c;推动了AI在语音识别、图像识别、自动驾驶、医疗诊断等领域的应用。…

【11】ES6:async/await

一、概念 async/await 是 ES2017&#xff08;ES8&#xff09;的新特性&#xff0c;它是一种基于 Promise 实现的异步编程方式。async/await 也是一种语法糖。 1、async/await 实现了用同步方式来写异步代码&#xff08;promise是链式调用形式写异步代码&#xff09; 2、asyn…