起始聚類離散化就是根據利用一定規則對資料進行分類,可以用分桶式或者k-means 等方法
這裡用中醫證型關聯規則挖掘裡面的離散化舉例,k-means 舉例
首先看下圖的原資料,該病存在六種證型係數,為了後續的關聯演算法,需要先將其離散化。
import pandas as pd
from sklearn.cluster import kmeans #匯入k均值聚類演算法
datafile = '../data/data.xls' #待聚類的資料檔案
processedfile = '../tmp/data_processed.xls' #資料處理後檔案
typelabel =
k = 4 #需要進行的聚類類別數
#讀取資料並進行聚類分析
data = pd.read_excel(datafile) #讀取資料
keys = list(typelabel.keys())
result = pd.dataframe()
if __name__ == '__main__': #判斷是否主視窗執行,這句**的作用比較神奇,有興趣了解的讀取請自行搜尋相關材料。
for i in range(len(keys)):
#呼叫k-means演算法,進行聚類離散化
print(u'正在進行「%s」的聚類...' % keys[i])
kmodel = kmeans(n_clusters = k, n_jobs = 4) #n_jobs是並行數,一般等於cpu數較好
kmodel.fit(data[[keys[i]]]) #訓練模型
print(kmodel.cluster_centers_)
r1 = pd.dataframe(kmodel.cluster_centers_, columns = [typelabel[keys[i]]]) #聚類中心
#print('r1',r1,kmodel.labels_)
r2 = pd.series(kmodel.labels_).value_counts() #分類統計
r2 = pd.dataframe(r2, columns = [typelabel[keys[i]]+'n']) #轉為dataframe,記錄各個類別的數目
r = pd.concat([r1, r2], axis = 1).sort_values(typelabel[keys[i]]) #匹配聚類中心和類別數目
r.index = [1, 2, 3, 4]
print('r-1',r)
r[typelabel[keys[i]]] = r[typelabel[keys[i]]].rolling(2).mean() #rolling_mean()用來計算相鄰2列的均值,以此作為邊界點。
print('r-2', r)
r.iloc[0,0] = 0.0 #這兩句**將原來的聚類中心改為邊界點。
print('r-3', r)
result = result.sort_index() #以index排序,即以a,b,c,d,e,f順序排
result.to_excel(processedfile)
例子二,通過cut進行離散化
import pandas as pd
import numpy as np
index = pd.index(data=["tom", "bob", "mary", "james","kobe","kawayi"], name="name")
data =
user_info = pd.dataframe(data=data, index=index)
pd.cut(user_info.age,3) #分成3段,
#[(10.974, 19.667] < (19.667, 28.333] < (28.333, 37.0]] 按照資料的最大值最小值為區間分成3分
當然還可以自定義進行劃分
比如qujian=[5,15,25,40]
pd.cut(user_info.age,qujian,labels=['child','youth','middle'])
#此時就不會按最大值最小值分成3分,而是按照5-15,15-25,25-40的固定區間分,同時會按labels對區間命名
#若想檢視各區間的人數,可以用groupyby函式
pdd=pd.cut(user_info['age'],qujian)
user_info['age'].groupby(pdd).count()
#可以通過遍歷來檢視某一區間有哪些值,pdd相當於乙個列名,在翻閱其他例子時發現假如某列就是離散的,可以直接用#groupby("age")
for i in user_info['age'].groupby(pdd):
print(i)
參考文獻:
1,python資料分析與挖掘實戰
2,本文借鑑了
kmean聚類python實現
import pandas as pd import numpy as np import xlrd 匯入資料 df2 pd.read excel test2.xlsx data np.array df2 去掉前兩列 data data 2 分為k類 k 3 臨近均值e e 0.00001 獲得行數...
python 實現kmeans聚類
程式設計中在做數值相等判斷的時候,直接使用 判斷並不可靠。實際上經過運算後的兩個值 浮點型 並不可能完全一致,可能會因為小數點後的些許差異導致判斷為false。比如 1 print1e 5 1e 6 這肯定是false,但是實際這兩個值可以看作近似相等。在kmeans中判斷是否結束迴圈,就是判斷重新...
如何用DBSCAN聚類模型做資料分析?
dbscan屬於無監督學習演算法,無監督演算法的內涵是觀察無標籤資料集自動發現隱藏結構和層次,在無標籤資料中尋找隱藏規律。聚類模型在資料分析當中的應用 既可以作為乙個單獨過程,用於尋找資料內在規律,也可以作為分類等其他分析任務的前置探索。上篇我們講了基於原型的k means聚類演算法,這篇我們來講通...