
利用Python練習(xí)數(shù)據(jù)挖掘
覆蓋使用Python進(jìn)行數(shù)據(jù)挖掘查找和描述數(shù)據(jù)結(jié)構(gòu)模式的實(shí)踐工具。
第一節(jié)
介紹
數(shù)據(jù)挖掘是一個(gè)隱式提取以前未知的潛在有用的數(shù)據(jù)信息提取方式。它使用廣泛,并且是眾多應(yīng)用的技術(shù)基礎(chǔ)。
本文介紹那些使用Python數(shù)據(jù)挖掘實(shí)踐用于發(fā)現(xiàn)和描述結(jié)構(gòu)模式數(shù)據(jù)的工具。近些年來,Python在開發(fā)以數(shù)據(jù)為中心的應(yīng)用中被用的越來越多。感謝大型科學(xué)計(jì)算社區(qū)的支持以及大大豐富的數(shù)據(jù)分析函數(shù)庫。尤其是,我們可以看到如何:
? 導(dǎo)入和可視化數(shù)據(jù)
? 數(shù)據(jù)分類
? 使用回歸分析和相關(guān)測量法發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)系
? 數(shù)據(jù)降維以壓縮和可視化數(shù)據(jù)帶來的信息
? 分析結(jié)構(gòu)化數(shù)據(jù)
每個(gè)主題都會提供代碼實(shí)例,它們基于四個(gè)主要的Python數(shù)據(jù)分析和處理的類庫:numpy,matplotlib,sklearn和networkx。
第二節(jié)
數(shù)據(jù)導(dǎo)入和可視化
通常,數(shù)據(jù)分析的第一步由獲取數(shù)據(jù)和導(dǎo)入數(shù)據(jù)到我們的工作環(huán)境組成。我們可以使用以下的Python代碼簡單的下載數(shù)據(jù):
import urllib2
url = 'http://aima.cs.berkeley.edu/data/iris.csv'
u = urllib2.urlopen(url)
localFile = open('iris.csv'', 'w')
localFile.write(u.read())
localFile.close()
在以上的代碼片段中,我們使用了urllib2類庫以獲取伯克利大學(xué)網(wǎng)站的一個(gè)文件,并使用標(biāo)準(zhǔn)類庫提供的File對象把它保存到本地磁盤。數(shù)據(jù)包含鳶尾花(iris)數(shù)據(jù)集,這是一個(gè)包含了三種鳶尾花(山鳶尾、維吉尼亞鳶尾和變色鳶尾)的各50個(gè)數(shù)據(jù)樣本的多元數(shù)據(jù)集,每個(gè)樣本都有四個(gè)特征(或者說變量),即花萼(sepal)和花瓣(petal)的長度和寬度。以厘米為單位。
數(shù)據(jù)集以CSV(逗號分割值)的格式存儲。CSV文件可以很方便的轉(zhuǎn)化并把其中的信息存儲為適合的數(shù)據(jù)結(jié)構(gòu)。此數(shù)據(jù)集有5列(譯者注:原文是行,但這里應(yīng)該是列的意思),前4列包含著特征值,最后一列代表著樣本類型。CSV文件很容易被numpy類庫的genfromtxt方法解析:
from numpy import genfromtxt, zeros
# read the first 4 columns
data = genfromtxt('iris.csv',delimiter=',',usecols=(0,1,2,3))
# read the fifth column
target = genfromtxt('iris.csv',delimiter=',',usecols=(4),dtype=str)
在上面的例子中我們創(chuàng)建了一個(gè)包含特征值的矩陣以及一個(gè)包含樣本類型的向量。我們可以通過查看我們加載的數(shù)據(jù)結(jié)構(gòu)的shape值來確認(rèn)數(shù)據(jù)集的大?。?br />
print data.shape
(150, 4)
print target.shape
(150,)
我們也可以查看我們有多少種樣本類型以及它們的名字:
print set(target) # build a collection of unique elements
set(['setosa', 'versicolor', 'virginica'])
當(dāng)我們處理新數(shù)據(jù)的時(shí)候,一項(xiàng)很重要的任務(wù)是嘗試去理解數(shù)據(jù)包含的信息以及它的組織結(jié)構(gòu)??梢暬梢造`活生動的展示數(shù)據(jù),幫助我們深入理解數(shù)據(jù)。
使用pylab類庫(matplotlib的接口)的plotting方法可以建一個(gè)二維散點(diǎn)圖讓我們在兩個(gè)維度上分析數(shù)據(jù)集的兩個(gè)特征值:
from pylab import plot, show
plot(data[target=='setosa',0],data[target=='setosa',2],'bo')
plot(data[target=='versicolor',0],data[target=='versicolor',2],'ro')
plot(data[target=='virginica',0],data[target=='virginica',2],'go')
show()
上面那段代碼使用第一和第三維度(花萼的長和寬),結(jié)果如下圖所示:
在上圖中有150個(gè)點(diǎn),不同的顏色代表不同的類型;藍(lán)色點(diǎn)代表山鳶尾,紅色點(diǎn)代表變色鳶尾,綠色點(diǎn)代表維吉尼亞鳶尾。
另一種常用的查看數(shù)據(jù)的方法是分特性繪制直方圖。在本例中,既然數(shù)據(jù)被分為三類,我們就可以比較每一類的分布特征。下面這個(gè)代碼可以繪制數(shù)據(jù)中每一類型的第一個(gè)特性(花萼的長度):
from pylab import figure, subplot, hist, xlim, show
xmin = min(data[:,0])
xmax = max(data[:,0])
figure()
subplot(411) # distribution of the setosa class (1st, on the top)
hist(data[target=='setosa',0],color='b',alpha=.7)
xlim(xmin,xmax)
subplot(412) # distribution of the versicolor class (2nd)
hist(data[target=='versicolor',0],color='r',alpha=.7)
xlim(xmin,xmax)
subplot(413) # distribution of the virginica class (3rd)
hist(data[target=='virginica',0],color='g',alpha=.7)
xlim(xmin,xmax)
subplot(414) # global histogram (4th, on the bottom)
hist(data[:,0],color='y',alpha=.7)
xlim(xmin,xmax)
show()
結(jié)果如下圖:
根據(jù)上圖的直方圖,我們可以根據(jù)數(shù)據(jù)類型區(qū)分理解數(shù)據(jù)的特征。例如,我們可以觀察到,山鳶尾的平均花萼長度小于維吉尼亞鳶尾。
第三節(jié)
分類
分類是一個(gè)數(shù)據(jù)挖掘方法,用于把一個(gè)數(shù)據(jù)集中的樣本數(shù)據(jù)分配給各個(gè)目標(biāo)類。實(shí)現(xiàn)這個(gè)方法的模塊叫做分類器。使用分類器需要以下兩步:訓(xùn)練和分類。訓(xùn)練是指采集已知其特定類歸屬的數(shù)據(jù)并基于這些數(shù)據(jù)創(chuàng)建分類器。 分類是指使用通過這些已知數(shù)據(jù)建立的分類器來處理未知的數(shù)據(jù),以判斷未知數(shù)據(jù)的分類情況。
Sklearn類庫包含很多分類器的實(shí)現(xiàn),本章我們將會使用高斯樸素貝葉斯來分析我們在第一章載入的鳶尾花數(shù)據(jù),包含山鳶尾、變色鳶尾和維吉尼亞鳶尾。最后我們把字符串?dāng)?shù)組轉(zhuǎn)型成整型數(shù)據(jù):
t = zeros(len(target))
t[target == 'setosa'] = 1
t[target == 'versicolor'] = 2
t[target == 'virginica'] = 3
現(xiàn)在我們已經(jīng)做好實(shí)例化和訓(xùn)練分類器的準(zhǔn)備了:
from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(data,t) # training on the iris dataset
分類器可以由predict方法完成,并且只要輸出一個(gè)樣例就可以很簡單的檢測:
print classifier.predict(data[0])
[ 1.]
print t[0]
1
上例中predicted類包含了一個(gè)正確的樣本(山鳶尾),但是在廣泛的樣本上評估分類器并且使用非訓(xùn)練環(huán)節(jié)的數(shù)據(jù)測試是很重要的。最終我們通過從源數(shù)據(jù)集中隨機(jī)抽取樣本把數(shù)據(jù)分為訓(xùn)練集和測試集。我們將會使用訓(xùn)練集的數(shù)據(jù)來訓(xùn)練分類器,并使用測試集的數(shù)據(jù)來測試分類器。train_test_split方法正是實(shí)現(xiàn)此功能的:
from sklearn import cross_validation
train, test, t_train, t_test = cross_validation.train_test_split(data, t, …
test_size=0.4, random_state=0)
數(shù)據(jù)集被分一分為二,測試集被指定為源數(shù)據(jù)的40%(命名為test_size),我們用它反復(fù)訓(xùn)練我們的分類器并輸出精確度:
classifier.fit(train,t_train) # train
print classifier.score(test,t_test) # test
0.93333333333333335
在此例中,我們的精確度為93%。一個(gè)分類器的精確度是通過正確分類樣本的數(shù)量除以總樣本的數(shù)量得出的。也就是說,它意味著我們正確預(yù)測的比例。
另一個(gè)估計(jì)分類器表現(xiàn)的工具叫做混淆矩陣。在此矩陣中每列代表一個(gè)預(yù)測類的實(shí)例,每行代表一個(gè)實(shí)際類的實(shí)例。使用它可以很容易的計(jì)算和打印矩陣:
from sklearn.metrics import confusion_matrix
print confusion_matrix(classifier.predict(test),t_test)
[[16 0 0]
[ 0 23 3]
[ 0 0 18]]
在這個(gè)混淆矩陣中我們可以看到所有山鳶尾和維吉尼亞鳶尾都被正確的分類了,但是實(shí)際上應(yīng)該是26個(gè)的變色鳶尾,系統(tǒng)卻預(yù)測其中三個(gè)是維吉尼亞鳶尾。如果我們牢記所有正確的猜測都在表格的對角線上,那么觀測表格的錯誤就很容易了,即對角線以外的非零值。
可以展示分類器性能的完整報(bào)告的方法也是很好用的:
from sklearn.metrics import classification_report
print classification_report(classifier.predict(test), t_test, target_names=['setosa', 'versicolor', 'virginica'])
precision recall f1-score support
setosa 1.00 1.00 1.00 16
versicolor 1.00 0.85 0.92 27
virginica 0.81 1.00 0.89 17
avg / total 0.95 0.93 0.93 60
以下是該報(bào)告使用到的方法總結(jié):
Precision:正確預(yù)測的比例
Recall(或者叫真陽性率):正確識別的比例
F1-Score:precision和recall的調(diào)和平均數(shù)
以上僅僅只是給出用于支撐測試分類的數(shù)據(jù)量。當(dāng)然,分割數(shù)據(jù)、減少用于訓(xùn)練的樣本數(shù)以及評估結(jié)果等操作都依賴于配對的訓(xùn)練集和測試集的隨機(jī)選擇。如果要切實(shí)評估一個(gè)分類器并與其它的分類器作比較的話,我們需要使用一個(gè)更加精確的評估模型,例如Cross Validation。該模型背后的思想很簡單:多次將數(shù)據(jù)分為不同的訓(xùn)練集和測試集,最終分類器評估選取多次預(yù)測的平均值。這次,sklearn為我們提供了運(yùn)行模型的方法:
from sklearn.cross_validation import cross_val_score
# cross validation with 6 iterations
scores = cross_val_score(classifier, data, t, cv=6)
print scores
[ 0.84 0.96 1. 1. 1. 0.96]
如上所見,輸出是每次模型迭代產(chǎn)生的精確度的數(shù)組。我們可以很容易計(jì)算出平均精確度:
from numpy import mean
print mean(scores)
0.96
第四章
聚類
通常我們的數(shù)據(jù)上不會有標(biāo)簽告訴我們它的樣本類型;我們需要分析數(shù)據(jù),把數(shù)據(jù)按照它們的相似度標(biāo)準(zhǔn)分成不同的群組,群組(或者群集)指的是相似樣本的集合。這種分析被稱為無監(jiān)督數(shù)據(jù)分析。最著名的聚類工具之一叫做k-means算法,如下所示:
from sklearn.cluster import KMeans
kmeans = KMeans(k=3, init='random') # initialization
kmeans.fit(data) # actual execution
上述片段運(yùn)行k-measn算法并把數(shù)據(jù)分為三個(gè)群集(參數(shù)k所指定的)?,F(xiàn)在我們可以使用模型把每一個(gè)樣本分配到三個(gè)群集中:
c = kmeans.predict(data)
我們可以估計(jì)群集的結(jié)果,與使用完整性得分和同質(zhì)性得分計(jì)算而得的標(biāo)簽作比較:
from sklearn.metrics import completeness_score, homogeneity_score
print completeness_score(t,c)
0.7649861514489815
print homogeneity_score(t,c)
0.7514854021988338
當(dāng)大部分?jǐn)?shù)據(jù)點(diǎn)屬于一個(gè)給定的類并且屬于同一個(gè)群集,那么完整性得分就趨向于1。當(dāng)所有群集都幾乎只包含某個(gè)單一類的數(shù)據(jù)點(diǎn)時(shí)同質(zhì)性得分就趨向于1.
我們可以把集群可視化并和帶有真實(shí)標(biāo)簽的做可視化比較:
figure()
subplot(211) # top figure with the real classes
plot(data[t==1,0],data[t==1,2],'bo')
plot(data[t==2,0],data[t==2,2],'ro')
plot(data[t==3,0],data[t==3,2],'go')
subplot(212) # bottom figure with classes assigned automatically
plot(data[c==1,0],data[tt==1,2],'bo',alpha=.7)
plot(data[c==2,0],data[tt==2,2],'go',alpha=.7)
plot(data[c==0,0],data[tt==0,2],'mo',alpha=.7)
show()
結(jié)果如下圖所示:
觀察此圖我們可以看到,底部左側(cè)的群集可以被k-means完全識別,然而頂部的兩個(gè)群集有部分識別錯誤。
第五章
回歸
回歸是一個(gè)用于預(yù)測變量之間函數(shù)關(guān)系調(diào)查的方法。例如,我們有兩個(gè)變量,一個(gè)被認(rèn)為是解釋,一個(gè)被認(rèn)為是依賴。我們希望使用模型描述兩者的關(guān)系。當(dāng)這種關(guān)系是一條線的時(shí)候就稱為線性回歸。
為了應(yīng)用線性回歸我們建立一個(gè)由上所述的綜合數(shù)據(jù)集:
from numpy.random import rand
x = rand(40,1) # explanatory variable
y = x*x*x+rand(40,1)/5 # depentend variable
我們可以使用在sklear.linear_model模塊中發(fā)現(xiàn)的LinearRegression模型。該模型可以通過計(jì)算每個(gè)數(shù)據(jù)點(diǎn)到擬合線的垂直差的平方和,找到平方和最小的最佳擬合線。使用方法和我們之前遇到的實(shí)現(xiàn)sklearn的模型類似:
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(x,y)
我們可以通過把擬合線和實(shí)際數(shù)據(jù)點(diǎn)畫在同一幅圖上來評估結(jié)果:
from numpy import linspace, matrix
xx = linspace(0,1,40)
plot(x,y,'o',xx,linreg.predict(matrix(xx).T),'--r')
show()
圖見下:
觀察該圖我們可以得出結(jié)論:擬合線從數(shù)據(jù)點(diǎn)中心穿過,并可以確定是增長的趨勢。
我們還可以使用均方誤差來量化模型和原始數(shù)據(jù)的擬合度:
from sklearn.metrics import mean_squared_error
print mean_squared_error(linreg.predict(x),y)
0.01093512327489268
該指標(biāo)度量了預(yù)期的擬合線和真實(shí)數(shù)據(jù)之間的距離平方。當(dāng)擬合線很完美時(shí)該值為0。
第六章
相關(guān)
我們通過研究相關(guān)性來理解成對的變量之間是否相關(guān),相關(guān)性的強(qiáng)弱。此類分析幫助我們精確定位被依賴的重要變量。最好的相關(guān)方法是皮爾遜積矩相關(guān)系數(shù)。它是由兩個(gè)變量的協(xié)方差除以它們的標(biāo)準(zhǔn)差的乘積計(jì)算而來。我們將鳶尾花數(shù)據(jù)集的變量兩兩組合計(jì)算出其系數(shù)如下所示:
from numpy import corrcoef
corr = corrcoef(data.T) # .T gives the transpose
print corr
[[ 1. -0.10936925 0.87175416 0.81795363]
[-0.10936925 1. -0.4205161 -0.35654409]
[ 0.87175416 -0.4205161 1. 0.9627571 ]
[ 0.81795363 -0.35654409 0.9627571 1. ]]
corrcoef方法通過輸入行為變量列為觀察值的矩陣,計(jì)算返回相關(guān)系數(shù)的對稱矩陣。該矩陣的每個(gè)元素代表著兩個(gè)變量的相關(guān)性。
當(dāng)值一起增長時(shí)相關(guān)性為正。當(dāng)一個(gè)值減少而另一個(gè)只增加時(shí)相關(guān)性為負(fù)。特別說明,1代表完美的正相關(guān),0代表不相關(guān),-1代表完美的負(fù)相關(guān)。
當(dāng)變量數(shù)增長時(shí)我們可以使用偽彩色點(diǎn)很方便的可視化相關(guān)矩陣:
from pylab import pcolor, colorbar, xticks, yticks
from numpy import arrange
pcolor(corr)
colorbar() # add
# arranging the names of the variables on the axis
xticks(arange(0.5,4.5),['sepal length', 'sepal width', 'petal length', 'petal width'],rotation=-20)
yticks(arange(0.5,4.5),['sepal length', 'sepal width', 'petal length', 'petal width'],rotation=-20)
show()
結(jié)果如下:
看圖右側(cè)的彩條,我們可以把顏色點(diǎn)關(guān)聯(lián)到數(shù)值上。在本例中,紅色被關(guān)聯(lián)為最高的正相關(guān),我們可以看出我們數(shù)據(jù)集的最強(qiáng)相關(guān)是“花瓣寬度”和“花瓣長度”這兩個(gè)變量。
第七章
降維
在第一章中我們了解了如何將鳶尾花數(shù)據(jù)集的兩個(gè)維度可視化。單獨(dú)使用該方法,我們只能看到數(shù)據(jù)集的部分?jǐn)?shù)據(jù)視圖。既然我們可以同時(shí)繪制的最高維度數(shù)為3,將整個(gè)數(shù)據(jù)集嵌入一系列維度并建立一個(gè)整體可視化視圖是很有必要的。這個(gè)嵌入過程就被稱作降維。最著名的降維技術(shù)之一就是主成分分析(PCA)。該技術(shù)把數(shù)據(jù)變量轉(zhuǎn)換為等量或更少的不相關(guān)變量,稱為主成分(PCs)。
這次,sklearn滿足我們本次分析的所有需求:
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
上述片段中我們實(shí)例化了一個(gè)PCA對象,用于計(jì)算前兩個(gè)主成分。轉(zhuǎn)換計(jì)算如下:
pcad = pca.fit_transform(data)
然后如往常一樣繪制結(jié)果:
plot(pcad[target=='setosa',0],pcad[target=='setosa',1],'bo')
plot(pcad[target=='versicolor',0],pcad[target=='versicolor',1],'ro')
plot(pcad[target=='virginica',0],pcad[target=='virginica',1],'go')
show()
結(jié)果如下:
可以注意到上圖和第一章提到的有些相似,不過這次變色鳶尾(紅色的)和維吉尼亞鳶尾(綠色的)的間隔更清晰了。
PCA將空間數(shù)據(jù)方差最大化,我們可以通過方差比判斷PCs包含的信息量:
print pca.explained_variance_ratio_
[ 0.92461621 0.05301557]
現(xiàn)在我們知道第一個(gè)PC占原始數(shù)據(jù)的92%的信息量而第二個(gè)占剩下的5%。我們還可以輸出在轉(zhuǎn)化過程中丟失的信息量:
print 1-sum(pca.explained_variance_ratio_)
0.0223682249752
在本例中我們損失了2%的信息量。
此時(shí),我們可以是應(yīng)用逆變換還原原始數(shù)據(jù):
data_inv = pca.inverse_transform(pcad)
可以證明的是,由于信息丟失逆變換不能給出準(zhǔn)確的原始數(shù)據(jù)。我們可以估算逆變換的結(jié)果和原始數(shù)據(jù)的相似度:
print abs(sum(sum(data - data_inv)))
2.8421709430404007e-14
可以看出原始數(shù)據(jù)和逆變換計(jì)算出的近似值之間的差異接近于零。通過改變主成分的數(shù)值來計(jì)算我們能夠覆蓋多少信息量是很有趣的:
for i in range(1,5):
pca = PCA(n_components=i)
pca.fit(data)
print sum(pca.explained_variance_ratio_) * 100,'%'
上述片段輸出如下:
92.4616207174 %
97.7631775025 %
99.481691455 %
100.0 %
PCs用得越多,信息覆蓋就越全,不過這段分析有助于我們理解保存一段特定的信息需要哪些組件。例如,從上述片段可以看出,只要使用三個(gè)PCs就可以覆蓋鳶尾花數(shù)據(jù)集的幾乎100%的信息。
第八章
網(wǎng)絡(luò)挖掘
通常我們分析的數(shù)據(jù)是以網(wǎng)絡(luò)結(jié)構(gòu)存儲的,例如我,我們的數(shù)據(jù)可以描述一群facebook用戶的朋友關(guān)系或者科學(xué)家的論文的合作者關(guān)系。這些研究對象可以使用點(diǎn)和邊描述之間的關(guān)系。
本章中我們將會介紹分析此類數(shù)據(jù)的基本步驟,稱為圖論,一個(gè)幫助我們創(chuàng)造、處理和研究網(wǎng)絡(luò)的類庫。尤其我們將會介紹如何使用特定方法建立有意義的數(shù)據(jù)可視化,以及如何建立一組關(guān)聯(lián)稠密的點(diǎn)。
使用圖論可以讓我們很容易的導(dǎo)入用于描述數(shù)據(jù)結(jié)構(gòu)的最常用結(jié)構(gòu):
G = nx.read_gml('lesmiserables.gml',relabel=True)
在上述代碼我們導(dǎo)入了《悲慘世界》同時(shí)出現(xiàn)的單詞組成的網(wǎng)絡(luò),可以通過https://gephi.org/datasets/lesmiserables.gml.zip免費(fèi)下載,數(shù)據(jù)以GML格式存儲。我們還可以使用下面的命令導(dǎo)入并可視化網(wǎng)絡(luò):
nx.draw(G,node_size=0,edge_color='b',alpha=.2,font_size=7)
結(jié)果如下:
上圖網(wǎng)絡(luò)中每個(gè)點(diǎn)代表小說中的一個(gè)單詞,兩單詞間的聯(lián)系代表同一章里兩單詞同時(shí)出現(xiàn)了。很容易就發(fā)現(xiàn)這圖不是很有幫助。該網(wǎng)絡(luò)的大部分細(xì)節(jié)依然一藏著,并且發(fā)現(xiàn)很難發(fā)現(xiàn)那些重要點(diǎn)。我們可以研究節(jié)點(diǎn)度來獲取一些內(nèi)部細(xì)節(jié)。節(jié)點(diǎn)度是指一個(gè)最簡中心測量并由一個(gè)點(diǎn)的多個(gè)關(guān)聯(lián)組成。我們可以通過最大值、最小值、中位數(shù)、第一四分位數(shù)和第三四分位數(shù)來總結(jié)一個(gè)網(wǎng)絡(luò)的度分布:
deg = nx.degree(G)
from numpy import percentile, mean, median
print min(deg.values())
print percentile(deg.values(),25) # computes the 1st quartile
print median(deg.values())
print percentile(deg.values(),75) # computes the 3rd quartile
print max(deg.values())10
1
2.0
6.0
10.0
36
經(jīng)過分析我們決定只考慮節(jié)點(diǎn)度大于10的點(diǎn)。我們可以建立一副只包含我們需要的點(diǎn)的新圖來展現(xiàn)這些點(diǎn):
Gt = G.copy()
dn = nx.degree(Gt)
for n in Gt.nodes():
if dn[n] <= 10:
Gt.remove_node(n)
nx.draw(Gt,node_size=0,edge_color='b',alpha=.2,font_size=12)
結(jié)果見下圖:
現(xiàn)在這幅圖可讀性大大提高了。這樣我們就能觀察到相關(guān)度最高的單詞以及它們的關(guān)系。
通過識別團(tuán)來研究網(wǎng)絡(luò)也是很有趣的。團(tuán)是指一個(gè)點(diǎn)和其他所有點(diǎn)相連的群組,極大團(tuán)是指網(wǎng)絡(luò)中不屬于其它任何一個(gè)團(tuán)的子集的團(tuán)。我們可以通過如下方法發(fā)現(xiàn)我們網(wǎng)絡(luò)中所有的極大團(tuán):
from networkx import find_cliques
cliques = list(find_cliques(G))
用下面這行命令輸出極大團(tuán):
print max(cliques, key=lambda l: len(l))
[u'Joly', u'Gavroche', u'Bahorel', u'Enjolras', u'Courfeyrac', u'Bossuet', u'Combeferre', u'Feuilly', u'Prouvaire', u'Grantaire']
我們可以看見列表中的絕大部分名字都和上圖中可以看見的數(shù)據(jù)群中的相同。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03