基于词频统计的聚类算法(kmeans)

基于词频统计的聚类算法(kmeans)

数据集是三个政府报告文件,这里就不做详细描述了,就是简单的txt文件。

实验过程主要分为如下几步:
1.读取数据并进行停用词过滤
2.统计词频
3.基于三篇文章词频统计的层次聚类
4.基于三篇文章词频统计的k-means
代码如下:

#词频统计模块
import jieba
##########文件操作##########
#读取文本
f = open(r"D:\dataset\文件1.txt","r",encoding='UTF-8')
text = f.read()#读取文件
f.close()#关闭文件#读取停用词
f_stop = open(r"D:\dataset\中文停用词表.txt","r",encoding='utf-8')
stop = f_stop.read()#读取文件
f_stop.close()#关闭文件
##########文件操作###########删除停用词
for s in stop:text = text.replace(s, "");
text = text.replace(' ', '')
list = jieba.lcut(text)dict = {}
final_dict = {}
for l in list:dict[l] = list.count(l);#获取单词数目if l in final_dict:final_dict[l][0] = list.count(l) else:final_dict[l] = [0 for _ in range(3)]final_dict[l][0] = list.count(l)d = sorted(dict.items(),reverse = True,key = lambda d:d[1]); #排序cnt = 0
for i in d:cnt += i[1]print("该文章单词总频率 : ", cnt)
print("前20个单词出现频率为:")
for i in range(20):print(d[i][0]," : ",d[i][1], '/', cnt);import pandas as pd
pd.DataFrame(data = d).to_csv('count1.csv',encoding = 'utf-8')
#保存为.csv格式
##########文件操作##########
#读取文本
f = open(r"D:\dataset\文件2.txt","r",encoding='UTF-8')
text = f.read()#读取文件
f.close()#关闭文件#删除停用词
for s in stop:text = text.replace(s, "");
text = text.replace(' ', '')
list = jieba.lcut(text)dict = {}
for l in list:dict[l] = list.count(l);#获取单词数目if l in final_dict:final_dict[l][1] = list.count(l) else:final_dict[l] = [0 for _ in range(3)]final_dict[l][1] = list.count(l)d = sorted(dict.items(),reverse = True,key = lambda d:d[1]); #排序cnt = 0
for i in d:cnt += i[1]print("该文章单词总频率 : ", cnt)
print("前20个单词出现频率为:")
for i in range(20):print(d[i][0]," : ",d[i][1], '/', cnt);pd.DataFrame(data = d).to_csv('count2.csv',encoding = 'utf-8')
#保存为.csv格式##########文件操作##########
#读取文本
f = open(r"D:\dataset\文件3.txt","r",encoding='UTF-8')
text = f.read()#读取文件
f.close()#关闭文件#删除停用词
for s in stop:text = text.replace(s, "");
text = text.replace(' ', '')
list = jieba.lcut(text)dict = {}
for l in list:dict[l] = list.count(l);#获取单词数目if l in final_dict:final_dict[l][2] = list.count(l) else:final_dict[l] = [0 for _ in range(3)]final_dict[l][2] = list.count(l)d = sorted(dict.items(),reverse = True,key = lambda d:d[1]); #排序cnt = 0
for i in d:cnt += i[1]
print("该文章单词总频率 : ", cnt)
print("前20个单词出现频率为:")
for i in range(20):print(d[i][0]," : ",d[i][1], '/', cnt);pd.DataFrame(data = d).to_csv('count3.csv',encoding = 'utf-8')f_dict = sorted(final_dict.items(), reverse = True, key = lambda d:d[1][0] + d[1][1] + d[1][2])
final_dict_cpy = final_dict.copy()
#保存为.csv格式
pd.DataFrame(data = f_dict).to_csv('count_whole.csv', encoding = 'utf-8')
pd.DataFrame(data = final_dict).to_csv('all_data.csv', encoding = 'utf-8')
#按总频数排序,前二十个对象。
print("前二十个总频率最大的对象:")
for i in range(20):print(f_dict[i][0], "  : ", f_dict[i][1])
print(final_dict)import numpy as np
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram,linkage
import xlrd as xr
import pandas as pd
from sklearn import preprocessing
from sklearn.cluster import AgglomerativeClustering
#数据处理
# Reading the csv file
df_new = pd.read_csv('all_data.csv')# saving xlsx file
GFG = pd.ExcelWriter('all_data.xlsx')
df_new.to_excel(GFG, index=False)GFG.save()file_location="all_data.xlsx"
data=xr.open_workbook(file_location)
sheet = data.sheet_by_index(0)
#形成数据矩阵
lie=sheet.ncols
hang=sheet.nrows
stats = [[sheet.cell_value(c,r) for c in range(1,sheet.nrows)] for r in range(1,sheet.ncols)]#得到所有行列值
stats = pd.DataFrame(stats)
#输出聚类过程
stats_frame=pd.DataFrame(stats)
normalizer=preprocessing.scale(stats_frame)
stats_frame_nomalized=pd.DataFrame(normalizer)
print(stats_frame)
print(stats_frame_nomalized)
#输出数据矩阵结果
print("_____________")
import numpy as np
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram
from scipy.cluster.hierarchy import linkage, dendrogram
#z=linkage(stats,"average",metric='euclidean',optimal_ordering=True)
#print(z)
#print("_____________")
## average=类平均法,ward=离差平方和法,sin=最短距离法,com=最长距离法,med=中间距离法,cen=重心法,fle=可变类平均法
#fig, ax = plt.subplots(figsize=(20,20))
#dendrogram(z, leaf_font_size=1) #画图##plt.axhline(y=4) #画一条分类线
##plt.show()
##可视化输出print(stats)Z = linkage(stats, method='median', metric='euclidean')
p = dendrogram(Z, 0)
plt.title("Hierachial Clustering Dendrogram")
plt.xlabel("Cluster label")
plt.ylabel("Distance")
plt.show()cluster = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='average')
#linkage模式可以调整,n_cluser可以调整
print(cluster.fit_predict(stats))
for i in cluster.fit_predict(stats):print(i, end=",")
plt.figure(figsize=(10, 7))  
plt.scatter(stats_frame[0],stats_frame[1], c=cluster.labels_)
plt.show()
#保存结果
# print(final_dict)
cnt = 0
res = cluster.fit_predict(stats)
final_item = final_dict.items()
# print(final_item)
for i in final_item:i[1].append(res[cnt])cnt += 1
# print(final_dict)
pd.DataFrame(data = final_dict).to_csv('result_hierarchicalClustering.csv', encoding = 'utf-8')
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
colo = ['b', 'g', 'r', 'c', 'm', 'y', 'k']
# print(x)
x = []
for i in final_dict_cpy.items():x.append(i[1])
# print(x)
x = np.array(x)
fig = plt.figure(figsize=(12, 8))
ax = Axes3D(fig,  elev=30, azim=20)shape = x.shape
sse = []
score = []
K = 4 # 分为K类
for k in [K]:clf = KMeans(n_clusters=k)clf.fit(x)sse.append(clf.inertia_)lab = clf.fit_predict(x)score.append(silhouette_score(x, clf.labels_, metric='euclidean'))for i in range(shape[0]):plt.xlabel('x')plt.ylabel('y')plt.title('k=' + str(k))ax.scatter(x[i, 0],x[i, 1], x[i, -1], c=colo[lab[i]])plt.show()# 保存结果
cnt = 0
res = clf.fit_predict(x)
final_item = final_dict_cpy.items()
for i in final_item:i[1].append(res[cnt])cnt += 1
pd.DataFrame(data = final_dict_cpy).to_csv('result_k-means.csv', encoding = 'utf-8')

运行结果如下:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

废品回收小程序怎么做?有哪些核心功能?

废品回收行业正逐步走向高质量发展的道路。在国家政策的推动下,再生资源市场需求旺盛,行业内部竞争格局逐渐明朗。 随着互联网技术的发展,"互联网回收"成为废品回收行业的一个新趋势。通过微信小程序这种线上平台,用户…

数据可视化在智慧园区中的核心价值解析

数据可视化在智慧园区中发挥着至关重要的价值。智慧园区是一种基于物联网、大数据、云计算等先进技术的现代化管理模式,旨在通过智能化手段提升园区的管理效率、服务水平和用户体验。而数据可视化作为数据处理和展示的重要工具,正是智慧园区实现这些目标…

BUG: VS Code C++输出中文乱码

BUG: VS Code C输出中文乱码 环境 Windows 11 VS Code 编辑器详情 在Windows 使用 cout 函数输出中文时出现乱码 问题的原因在cmd的显示编码和c程序编码的不同。cmd默认的是gbk编码,而VS Code 软件的CMD终端默认是utf-8编码,因而在输出中文文本时会出…

Ubuntu server 24 安装配置 snort3 3.2.1.0 网络入侵检测防御系统 配置注册规则集

一 下载并安装源代码 地址:https://github.com/snort3/snort3/releases #下载,解压 wget https://github.com/snort3/snort3/archive/refs/tags/3.2.1.0.tar.gz tar zxvf 3.2.1.0.tar.gz 二 安装软件依赖包 1 安装依赖包 sudo apt update sudo apt install…

代码随想录算法训练营第四十四天 | 01背包问题 二维、 01背包问题 一维、416. 分割等和子集

01背包问题 二维 代码随想录 视频讲解:带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili 1.dp数组定义 dp[i][j] 下标为[0,i]之间的物品&…

【C#】类和对象的区别

1.区别概述 结构体和类的最大区别是在存储空间上,前者是值类型,后者是引用类型,它们在赋值上有很大的区别,在类中指向同一块空间的两个类的值会随一个类的改变而改变另一个,请看如下代码所示: namespace …

【漯河市人才交流中心_登录安全分析报告-Ajax泄漏滑动距离导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

JavaSE:异常

1、什么是异常 在生活当中,不管是人还是动物又或是植物,都会生病;在程序中也是,作为程序猿,虽然我们会尽力将程序写的完美,可难免会出现一些问题~ 在程序执行过程中,发生的一些不正常行为&…

Windows系统安装openvino(2024.1.0)

一、openvino下载: 下载地址:下载英特尔发行版 OpenVINO 工具套件 (intel.cn) 下载完之后将压缩包解压,然后重命名文件夹为openvino_2024.1.0。 二、环境配置 以python环境为例:(建议使用moniconda虚拟环境来安装&am…

Android 图表开发开源库 MPAndroidChart 使用总结

1. 引言 电视项目中需要一个折线图表示节电数据变化情况,类比 H5 来说,Android 中也应该有比较成熟的控件,经过调研后,发现 MPAndroidChart 功能比较强大,网上也有人说可能是目前 Android 开发最好用的一个三方库了&a…

【力扣】LCR 130. 衣橱整理

一、题目描述 二、算法思路 这是⼀道非常典型的「搜索」类问题。 我们可以通过「深搜」或者「宽搜」,从 [0, 0] 点出发,按照题目的要求(选择 向右移动一格 或 向下移动一格,但不能移动到衣柜之外 )一直往 [m - 1, …

详解Spring IoCDI(二)

目录 承接上文:详解Spring IoC&DI (一) 1.IoC详解 1.1方法注解Bean 1.2方法注解要配合类注解使用 1.3定义多个对象 1.4重命名Bean 1.5扫描路径 2.DI详解 2.1DI与IoC的关系 2.2属性注入 2.3构造方法注入 2.4Setter注入 2.5 三…

visual studio code 全局搜索

VScode写代码的时候,会经常性的需要进行查找代码,那么怎么在Visual Studio Code中进行查找呢,下面就来大家vscode全局搜索的方法。 想要在vscode全局搜索进行全局搜索,使用快捷键CTRLSHIFTF即可进行搜索,也可以在左边…

哪吒监控+cfcdn+ 反代grp端口

哪吒监控cfcdn 反代grp端口 背景: 哪吒监控:感觉VPS线路不稳定,为了打消自己潜意识,希望量化延迟。 cfcdn:隐藏真实站点,保障小鸡隐秘安全 反代grpc端口: 反代grpc到支持https(TLS)的端口,这…

Elasticsearch 认证模拟题 - 3

1、题目 有一索引有 3 个字段,请写一个查询去匹配这三个字段,并且将三个字段的评分相加作为最后的总评分 # 创建索引 PUT task {"mappings": {"properties": {"fielda":{"type": "text"},"fie…

TrueNAS开启SSH登录ROOT

简介: 从 SCALE Bluefin 22.12.0 开始,为了加强安全性并遵守联邦信息处理标准 (FIPS),root帐户登录已被弃用。所有 TrueNAS 用户都应创建具有所有必需权限的本地管理员帐户,并开始使用它来访问 TrueNAS。当根用户密码被禁用时,只有管理用户帐户才能登录 TrueNAS Web 界面。…

低代码开发平台(Low-code Development Platform)的模块组成部分

低代码开发平台(Low-code Development Platform)的模块组成部分主要包括以下几个方面: 低代码开发平台的模块组成部分可以按照包含系统、模块、菜单组织操作行为等维度进行详细阐述。以下是从这些方面对平台模块组成部分的说明: …

【喜报】科大睿智服务企业通过CMMI3级认证

​北京建投科信科技发展股份有限公司(以下简称“北京建投科技” )前身为北京银帝科技发展公司,成立于1993年,注册资本6,000万元,为中国建银投资有限责任公司(简称“中国建投”)的成员企业建投华…

现在,所有人都能免费用GPT-4o了!

OpenAI今日官宣,ChatGPT正式向所有用户免费开放!所有用户均可以访问定制化GPT、分析图表、询问有关照片的问题以及5月初GPT-4o添加的其他功能。 OpenAI今天在X上发布推文: 「所有ChatGPT免费用户现在都可以使用浏览、视觉、数据分析、文件上…

element table表格行列合并span-method,根据数据动态行列合并

表格行列合并需要用到 table的方法 span-method 根据数据来进行动态的行列合并&#xff0c;实例如下&#xff1a; <el-table:data"tableData":span-method"objectSpanMethod" style"width: 100%"><el-table-columnprop"key"l…