使用Python和SAS Viya分析社交網(wǎng)絡(luò)|附代碼數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=7303
原文出處:拓端數(shù)據(jù)部落公眾號
? 最近我們被客戶要求撰寫關(guān)于社交網(wǎng)絡(luò)的研究報告,包括一些圖形和統(tǒng)計輸出。
?

?
?
本示例使用Python和SAS分析了預(yù)防高危藥物研究的結(jié)果。這個社交網(wǎng)絡(luò)有194個節(jié)點和273個邊,分別代表藥物使用者和這些使用者之間的聯(lián)系。
?
背景
?
SAS Viya的最新版本提供了用于探索實驗問題的全套創(chuàng)新算法和經(jīng)過驗證的分析方法,但它也是基于開放式體系結(jié)構(gòu)構(gòu)建的。這意味著您可以將SAS Viya無縫集成到您的應(yīng)用程序基礎(chǔ)架構(gòu)中,并使用任何編程語言來驅(qū)動分析模型。?
盡管您可以繼續(xù)進行并簡單地發(fā)出一系列REST API調(diào)用來訪問數(shù)據(jù)??,?但通常使用編程語言來組織您的工作并使之可重復(fù)是更有效的。我決定使用Python,因為它在年輕的數(shù)據(jù)科學(xué)家中很流行 。
出于演示目的,我使用一個名為Jupyter的接口,該接口是一個開放的,基于Web的交互式平臺,能夠運行Python代碼以及嵌入標記文本。?
?
訪問SAS云分析服務(wù)(CAS)
SAS Viya的核心是稱為SAS Cloud Analytic Services(CAS)的分析運行時環(huán)境。為了執(zhí)行操作或訪問數(shù)據(jù),需要連接會話。您可以使用二進制連接(建議使用該連接來傳輸大量數(shù)據(jù)),也可以通過HTTP或HTTPS通信使用REST API。?
?
import matplotlib.colors as colors #程序包包括用于顏色范圍的程序
import matplotlib.cm as cmx import networkx as nx #呈現(xiàn)網(wǎng)絡(luò)圖
?
現(xiàn)在已經(jīng)加載了庫,我們可以發(fā)連接到CAS并為給定的用戶創(chuàng)建會話。?
?
s = CAS('http://sasviya.mycompany.com:8777', 8777, 'myuser', 'mypass')
對于此網(wǎng)絡(luò)分析,我將使用一個名為hyperGroup?的集。
s.loadactionset('hyperGroup')
加載數(shù)據(jù)?
為了執(zhí)行任何分析建模,我們需要數(shù)據(jù)。 將本地CSV文件上載到服務(wù)器,并將數(shù)據(jù)存儲到名為DRUG_NETWORK的表中。該表只有兩列數(shù)值類型的FROM和TO。
inputDataset = s.upload("data/drug_network.csv", casout=dict(name='DRUG_NETWORK', promote = True))
?
在分析建模期間,您通常必須更改數(shù)據(jù)結(jié)構(gòu),過濾或合并數(shù)據(jù)源。 這里的put函數(shù)將兩個數(shù)字列都轉(zhuǎn)換為新的字符列SOURCE和TARGET。
sasCode = 'SOURCE = put(FROM,best.); TARGET = put(TO,best.);\n'
dataset = inputDataset.datastep(sasCode,casout=dict(name='DRUG_NETWORK2', replace = True))
?
數(shù)據(jù)探索
建立分析模型時的常見任務(wù)是首先了解您的數(shù)據(jù)。下面的示例返回數(shù)據(jù)集的前5行。
dataset.fetch(to=5, sastypes=False, format=True) #列出開始5行
?

一個簡單的匯總統(tǒng)計數(shù)據(jù)會顯示更多詳細信息,包括我們數(shù)據(jù)集中273條邊的總數(shù)。
?
dataset.summary()
?

圖形布局
首先,我們將網(wǎng)絡(luò)可視化,以基本了解其結(jié)構(gòu)和大小。我們將通過力導(dǎo)向算法來計算頂點的位置。Hypergroup還可以用于查找群集,計算圖布局以及確定網(wǎng)絡(luò)度量標準,例如社區(qū)和中心性。
s.hyperGroup.hyperGroup( ? ?createOut = "NEVER", # 這樣可以禁止創(chuàng)建通常生成的表
? ?allGraphs = True, # 處理所有圖形
? ?inputs ? ?= ["SOURCE", "TARGET"], #指示邊和目標列
? ?table ? ? = dataset, # 輸入數(shù)據(jù)集
? ?edges ? ? = table(name='edges',replace=True), # 結(jié)果表包含edge屬性
? ?vertices ?= table(name='nodes',replace=True) ?# 包含點屬性的結(jié)果表
)
renderNetworkGraph() # 使用networkx包創(chuàng)建圖形
?
?呈現(xiàn)了以下網(wǎng)絡(luò),并提供了圖形的第一視圖。我們可以看到兩個主要分支,并了解高密度和低密度區(qū)域。?

?
?
社區(qū)檢測
為了了解社交網(wǎng)絡(luò)中用戶的關(guān)系,我們將分析個人所屬的社區(qū)。社區(qū)檢測或聚類是將網(wǎng)絡(luò)劃分為社區(qū),使社區(qū)子圖中的鏈接比社區(qū)之間的鏈接更緊密地連接的過程。同一社區(qū)中的人們通常具有共同的屬性,并表示他們之間有著密切的聯(lián)系。?
現(xiàn)在,更新后的節(jié)點表包含一個附加列?_Community_??,其中包含我們網(wǎng)絡(luò)中每個節(jié)點的值。給定此數(shù)據(jù)集,我們可以執(zhí)行基本統(tǒng)計信息,例如跨列的不同計數(shù):
結(jié)果表顯示,確定了我們網(wǎng)絡(luò)中的24個社區(qū)。

?
讓我們看一下最大的5個最大社區(qū),并分析節(jié)點分布。?
我們將獲取的行重定向到Python變量中。我們將使用它來生成條形圖,顯示前5個最大的社區(qū):
?

?
這表明最大的社區(qū)13具有35個頂點。 以下示例顯示社區(qū)4中的節(jié)點:
?

?
最后,讓我們再次渲染網(wǎng)絡(luò)–這次在為節(jié)點著色時考慮了社區(qū):
?

?
通常,需要根據(jù)您的網(wǎng)絡(luò)規(guī)模和期望的結(jié)果來調(diào)整社區(qū)的數(shù)量。將小型社區(qū)合并為大型社區(qū)。社區(qū)可以合并:
隨機進入鄰近社區(qū)
進入頂點數(shù)量最少的相鄰社區(qū)
以最大數(shù)量的頂點
進入已經(jīng)具有nCommunities頂點的社區(qū)
下面將通過指定nCommunities參數(shù)將社區(qū)總數(shù)減少到5?。
?

?
集中性分析
分析中心性有助于確定誰在網(wǎng)絡(luò)中很重要。重要人物將被很好地聯(lián)系起來,因此對網(wǎng)絡(luò)中的其他個人具有很高的影響力。就我們針對吸毒者的社交網(wǎng)絡(luò)而言,這將表明潛在的病毒傳播和個人的相關(guān)風(fēng)險行為。
每個度量標準都表示為節(jié)點數(shù)據(jù)集中的輸出列。
讓我們使用集中度度量之一作為節(jié)點大小再次渲染網(wǎng)絡(luò)。?
?
?

子集網(wǎng)絡(luò)分支
從我們的網(wǎng)絡(luò)來看,社區(qū)2中的用戶似乎扮演著重要角色。這由社區(qū)的整體中心地位,也由該社區(qū)中大多數(shù)個人的高beetweenness值表明。以下代碼過濾并渲染了社區(qū)2的網(wǎng)絡(luò),僅使我們對該子網(wǎng)絡(luò)有了更好的可視化。
?

?
?
上面的示例使用了標準的二維導(dǎo)向圖布局。在更復(fù)雜的情況下,可能還需要在分析網(wǎng)絡(luò)結(jié)構(gòu)時考慮使用其他維度。?
?

?
?

最受歡迎的見解
1.采用spss-modeler的web復(fù)雜網(wǎng)絡(luò)對所有腧穴進行分析
2.用R語言和python進行社交網(wǎng)絡(luò)中的社區(qū)檢測
3.R語言文本挖掘NASA數(shù)據(jù)網(wǎng)絡(luò)分析,tf-idf和主題建模
4.在R語言中使用航空公司復(fù)雜網(wǎng)絡(luò)對疫情進行建模
5.python隸屬關(guān)系圖模型 基于模型的網(wǎng)絡(luò)中密集重疊社區(qū)檢測
6.使用Python和SAS Viya分析社交網(wǎng)絡(luò)
7.關(guān)聯(lián)網(wǎng)絡(luò)分析:已遷離北京外來人口的數(shù)據(jù)畫像
8.情感語義網(wǎng)絡(luò):游記數(shù)據(jù)感知旅游目的地形象
9.用關(guān)聯(lián)規(guī)則數(shù)據(jù)挖掘探索藥物配伍中的規(guī)律
