基于詞頻統計的聚類算法(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.pswp.cn/bicheng/19601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19601.shtml
英文地址,請注明出處:http://en.pswp.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編碼,因而在輸出中文文本時會出…

Flutter 中的 SliverCrossAxisExpanded 小部件:全面指南

Flutter 中的 SliverCrossAxisExpanded 小部件:全面指南 Flutter 是一個由 Google 開發的跨平臺 UI 框架,它允許開發者使用 Dart 語言來構建高性能、美觀的移動、Web 和桌面應用。在 Flutter 的豐富組件庫中,SliverCrossAxisExpanded 是一個…

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…

Bytebase 2.18.0 - 支持創建用戶組

🚀 新功能 支持創建用戶組。支持 BigQuery。支持 SQL Server 庫表同步。支持 MongoDB 集群并支持直接連接到集群中的節點。支持 SQL Server 和 Oracle 顯示工單任務執行日志,如影響行數或錯誤。添加 SQL 審核規則: 禁止在 SQL Server 中進行跨庫查詢。禁…

代碼隨想錄算法訓練營第四十四天 | 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 三…

代碼隨想錄算法訓練營第四十五天|1049.最后一塊石頭的重量II、494.目標和、 474.一和零

1049.最后一塊石頭的重量II 文檔講解:代碼隨想錄 題目鏈接:. - 力扣(LeetCode) 本題其實就是盡量讓石頭分成重量相同的兩堆,相撞之后剩下的石頭最小,這樣就化解成01背包問題了。 和昨天講解的416. 分割等和…

visual studio code 全局搜索

VScode寫代碼的時候,會經常性的需要進行查找代碼,那么怎么在Visual Studio Code中進行查找呢,下面就來大家vscode全局搜索的方法。 想要在vscode全局搜索進行全局搜索,使用快捷鍵CTRLSHIFTF即可進行搜索,也可以在左邊…

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

哪吒監控cfcdn 反代grp端口 背景: 哪吒監控:感覺VPS線路不穩定,為了打消自己潛意識,希望量化延遲。 cfcdn:隱藏真實站點,保障小雞隱秘安全 反代grpc端口: 反代grpc到支持https(TLS)的端口,這…

Tomcat啟動閃退問題及解決方法

Tomcat啟動閃退問題可能由多種原因引起,以下是一些常見的原因及相應的解決方法,按照清晰的結構進行歸納: 一、環境變量問題 Java環境問題:Tomcat依賴于Java環境,如果JDK未正確安裝或環境變量配置不正確,會…

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 界面。…