[小白學Python數據分析之五]用NetworkX庫進行結構分析

2021-03-02 大數據與數據科學家

[編者按] Python是大數據分析的常用技術之一,用Python進行數據分析的眾多優勢使得越來越多的人開始走上Python數據分析之路。後臺也常常有讀者來信,希望我們分享關於Python數據分析的知識。從本期開始,我們推出「小白學Python數據分析」專欄,本專欄邀請到一位Python數據分析的初學者小白,記錄他學習Python數據分析的歷程。大家可以和小白一起學習,並完成每期專欄中的實例,就可以掌握Python數據分析的常用方法和技術。教材方面,我們參考的是王宏志老師編著的《大數據分析原理與實踐》。由於小白也在學習過程中,所以文中難免會有認識和理解不當之處,歡迎大家批評指正,更歡迎大家通過後臺留言與我們進行討論交流,大家共同向Python數據分析高手的目標前進!

 

本期我們將學習如何用NetworkX庫進行結構分析,主要將討論以下內容:

NetworkX庫簡介

最短路徑分析

Pagerank算法

結構計數

聚類係數

社團發現

1. NetworkX庫簡介

NetworkX是一個用Python語言開發的圖論與複雜網絡建模工具,內置了常用的圖與複雜網絡分析算法,可以方便地進行複雜網絡數據分析、仿真建模等工作。Networkx支持創建簡單無向圖、有向圖和多重圖。內置許多標準的圖論算法,節點可為任意數據;支持任意的邊值維度,功能豐富,簡單易用。本文我們將採用這個庫來實現結構分析的若干問題。

2. 最短路徑分析

最短路徑分析的基本原理是貪心算法,通過輸入的起點和終點以及各個線段的長度來計算出任意兩點之間的距離。首先我們有如下的數據,第一列代表起點,第二列代表終點,最後一列是長度:

然後我們載入這個文件,對數據進行處理:

在NetworkX中採用G=nx.Graph()來構建一個網絡,之後就可以進行計算:

搭好網絡以後我們可以畫圖,採用nx.draw:

可以輸出的圖像如下:

最後我們計算各個點之間的路徑長度的部分是:

得到輸出:

其中第一行是起點,第二行是終點,第三行是最短路徑長度,最短路徑計算完成。

3.Pagerank算法

PageRank起於網頁的搜索排序,Google 利用網頁的連結結構計算每個網頁的等級排名,其基本思路是:如果一個網頁被其他多個網頁指向,這說明該網頁比較重要或者質量較高。除考慮網頁的連結數量,還考慮網頁本身的權重級別,以及該網頁有多少條出鏈到其它網頁。對於用戶構成的人際網絡,除了用戶本身的影響力之外,邊的權重也是重要因素之一。例如,新浪微博的某個用戶,會更容易影響粉絲中關係比較親密的家人、同學、同事等,而對陌生的弱關係粉絲影響較小。

在NetworkX中有pagerank算法可以直接導出各個點的PR值(pagerank值),我們可以直接使用,但是要先按照(一)中的方法搭建一個網絡結構,然後再交由pagerank計算,在此不贅述搭建過程:

得到輸出結果為:

第一行為節點,第二行為pagerank值。

4.結構計數(以三角形為例)

對於三角形計數,在Networkx中有內置的triangles函數來完成三角形結構的計算。函數如下:

triangles函數的標準形式是:triangles(G, nodes=None)。G是提前編好的網絡,網絡的構建方法與前面一致。後面的nodes是需要參與計算的點,如果只想將某些點加入到計算體系中,就在「nodes=「後寫上你想加的點,如果沒有加上這個參量,默認為計算所有的點。

加入計算的點如下:

得出的結果為:

輸出的數據代表某個點是多少個三角形的公共頂點,例如:1是四個三角形的頂點。

5.聚類係數

結構聚類指的是對圖中的結點和邊進行聚類。對於結點聚類,輸入圖G,輸出其結點的分類,使得每個分類在結構上關聯密切。

我們用Python中的Networkx庫的clustering函數來說明點結構聚類的定義和實現。點聚類係數在無向圖G中,計算每一個節點周圍的稠密度,星狀網絡稠密度為0,全聯通網絡稠密度為1。邊聚類係數為在無向圖G中,計算每一條邊周圍的稠密度。

以點聚類係數為例,點聚類係數計算數據採用無向圖,該無向圖如下所示:

對應的列表為:

函數clustering(G,nodes=None, weight=None)的使用和前面的triangle類似,在此不贅述,結果如下:



6.社團發現

一個社區就是一個包含比其他圖的節點之間連接更加稠密的子圖;一個圖是一個社區結構若且唯若任意子圖內的連接數量比子圖之間的連接數目多得多。一般來說,同一社區內的節點與節點之間的連接很緊密,而社區與社區之間的連接比較稀疏。

Python的Networkx的k_clique_communities函數可以進行社團發現,這裡函數引用的是clique滲透算法,具體算法思路複雜,可以查閱下相關資料。

k_clique_communities的輸入結構和之前的兩個函數一樣,它有兩個輸入參量,一個是我們之前輸入的結構G,還有一個是設置的最小社群的節點個數。最後將返回的結果進行list轉化就可以列印出我們需要的答案了。

 

在這期文章中,我們主要介紹了Networkx的安裝和一些簡單的使用方法及其應用。這個庫是Python中能夠進行結構分析的一個非常好的庫,其中的函數和用法博大精深,有網絡結構分析需求的同學可以好好研究一下這個庫,它將對你的數據分析起到很大的作用。

 

 

 

 

「大數據與數據科學家」公眾號

主編:王宏志

特邀副主編: 朱劼

副主編: 丁小歐

責任編輯: 齊志鑫,宋揚,王雨茁、魏龑,張榮恩

編輯: 陶穎安

-精彩內容,記得分享到朋友圈-

長按下圖並點擊 「識別圖中二維碼」,即可關注大數據與數據科學家微信公共號 

相關焦點

  • 社會網絡分析(一) | python的Networkx庫基礎知識
    社會網絡又叫複雜網絡,社會網絡用節點與邊表示一組事物之間關係的方式,這種思想來源於數學中的圖論。對廣大文科生來說,雖然不需要理解圖論的全部知識,但需要了解社會網絡相關的基本概念,數據猿就以Networkx和Gephi為例,展開對社會網絡分析的探索。
  • 小白學 Python 數據分析(3):Pandas (二)數據結構 Series
    在家為國家做貢獻太無聊,不如跟我一起學點 Python順便問一下,你們都喜歡什麼什麼樣的文章封面圖,老用這一張感覺有點醜人生苦短,我用 Python前文傳送門:小白學Python 數據分析(1):數據分析基礎小白學 Python 數據分析(2):Pandas (一)概述引言先介紹下 Pandas 的數據結構,畢竟數據結構是萬物的基礎。
  • wxpy庫+Pyecharts庫:用Python對微信好友進行數據分析
    本文結構:一、前言二、Python庫簡單介紹wxpy庫Pyechats庫re庫jieba庫和collections庫三、分析結果和代碼展示1、數據準備導入需要的Python庫使用wxpy庫登錄微信整合數據2、數據分析微信好友的男女比例微信好友的省份分布微信好友的城市分布微信好友個性籤名分析一、前言之前在某個微信公眾號上貌似看到過一個文章
  • 小白學 Python(12):基礎數據結構(字典)(上)
    人生苦短,我選Python前文傳送門小白學 Python(1):開篇小白學 Python(2):基礎數據類型(上)小白學 Python(3):基礎數據類型(下)小白學 Python(4):變量基礎操作小白學 Python(5):基礎運算符(上)小白學 Python(6):基礎運算符(下)小白學 Python(7):基礎流程控制(上)小白學 Python(8):基礎流程控制(下)小白學 Python(9):基礎數據結構(列表)(上)小白學 Python(10):
  • python數據分析常用庫
    python被稱作膠水語言原因是具有非常非常多的庫可以使用。其中做數據分析時那些庫常用,怎麼用是本篇文字討論的內容。一、PandasPandas 是一個開源 Python 庫,它被廣泛用於分析數據,以及數據清洗和準等工作。它的名字來源是由 Panel data(面板數據,一個計量經濟學名詞)兩個單詞拼成的。簡單地說,你可以把 Pandas 看作是 Python 版的 Excel。
  • Python數據分析之NumPy庫
    NumPy庫簡介NumPy庫使用Python進行科學計算,尤其是數據分析時,所用到的一個基礎庫。它是大量Python數學和科學計算包的基礎,比如我們後面會講到的pandas庫就用到了NumPy。pandas庫專門用於數據分析,充分借鑑了Python標準庫NumPy的相關概念。
  • python數據分析專題 (7):python數據分析模塊
    也就是這些python的擴展包讓python可以做數據分析,主要包括numpy,scipy,pandas,matplotlib,scikit-learn等等諸多強大的模塊,在結合上ipython交互工具 ,以及python強大的爬蟲數據獲取能力,字符串處理能力,讓python成為完整的數據分析工具。
  • 小白學Python數據分析-Python初識和t分布實例
    [編者按] Python是大數據分析的常用技術之一,用Python進行數據分析的眾多優勢使得越來越多的人開始走上Python數據分析之路。
  • 量化交易之《Python數據分析》
    Numpy:提供數值數組和函數Scipy:科學計算庫Matplotlib:數據可視化 Numpy 數組的優勢1 Numpy數組能夠運用向量化運算來處理整個數組,而完成同樣的任務,python的列表則通常必須藉助循環語句遍歷列表,並對逐個元素進行相應的處理2 Numpy使用了優化過的C
  • 用 Python 對數據進行相關性分析
    在進行數據分析時,我們所用到的數據往往都不是一維的,而這些數據在分析時難度就增加了不少,因為我們需要考慮維度之間的關係。而這些維度關係的分析就需要用一些方法來進行衡量,相關性分析就是其中一種。本文就用python來解釋一下數據的相關性分析。
  • 在Python中進行探索式數據分析(EDA)
    介紹探索性數據分析(Exploratory Data Analysis ,EDA)是對數據進行分析並得出規律的一種數據分析方法。它是一個故事,一個數據試圖講述的故事。EDA是一種利用各種工具和圖形技術(如柱狀圖、直方圖等)分析數據的方法。
  • Python做數據分析-簡潔、易讀、強大
    由於python是一種解釋性語言,大部分編譯型語言都要比python代碼運行速度快,有些同學就因此鄙視python。但是python是一門高級語言,其生產效率更高,時間通常比CPU的時間值錢,因此為了權衡利弊,考慮用python是值得的。
  • 大數據分析Python NumPy庫使用教程
    我將在大數據分析Python NumPy庫使用教程中學到什麼? 大數據分析Python NumPy庫使用教程為數據工程師提供有關NumPy的從零開始的培訓。這意味著您不需要具有NumPy的任何經驗,也不會浪費任何時間學習與數據工程工作無關的東西。
  • python可視化庫大全
    matplotlib算是python比較底層的可視化庫,可定製性強、圖表資源豐富、簡單易用、達到出版質量級別。它的構建是為了用最少的代碼快速繪製專業又美觀的圖表。ggplot與python中的pandas有著共生關係。如果打算使用ggplot,最好將數據保存在DataFrames中。即若想使用ggplot,先將數據轉化為dataframe形式。橫向比較的話,plotnine的效果更好。
  • 基於共現使用Python來分析《紅樓夢》中賈寶玉與金陵十二釵的關係
    「千萬別走開,今天的分析結果中你可以驗證這個六度分割理論,雖然古代沒有網絡,但是六度分割理論貌似也能適用。【材料準備】我們準備好Python編譯環境,提前安裝好jieba庫、matplotlib庫、networkx庫,然後,自己下載一個《紅樓夢》的txt文件。下面我們對這些庫做一個簡單的介紹。
  • 教程|Python語言做數據分析教程
    但是,多年來,在強大的社區支持下,這種語言構建了用於數據分析和預測建模的專用庫。由於缺乏Python用於數據科學的資源,我決定創建本教程來幫助其他人更快地學習python。在本教程中,我們將得到關於如何使用Python進行數據分析的詳細信息,並在我們熟悉之後再進行實踐。你也可以瀏覽「數據科學概論」課程,這是一門全面介紹數據科學的課程。
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    這是對 pandas 數據幀進行探索性數據分析的一種簡單快速的方法。pandas df.describe()和 df.info()函數通常用作 EDA 過程的第一步。但是,它只提供了非常基本的數據概述,對於大型數據集沒有太大幫助。另一方面,pandas 分析函數使用 df.profile_report()擴展 pandas 數據幀,以便快速進行數據分析。
  • Python數據分析入門日記Day6:數據分析庫Pandas:Series和Dataframe
    Python數據分析入門日記Day6——Pandas:Series和Dataframe從今天起,開始學習Python中另一個經常用到的庫——Pandas,Pandas作為數據分析庫在日常的數據分析工作中起到重要作用,是一個基於Numpy的、處理數據較為專業的庫。
  • Python數據分析 - Numpy
    前言NUMPY(以下簡稱NP)是Python數據分析必不可少的第三方庫,np的出現一定程度上解決了Python運算性能不佳的問題,同時提供了更加精確的數據類型。如今,np被Python其它科學計算包作為基礎包,已成為Python 數據分析的基礎,可以說,NP是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。因此,理解np的數據類型對python數據分析十分有幫助。下面,本文將介紹Np的常用操作和基本數據類型。NP提供了以下重點功能。
  • python數據分析--回歸函數及線性回歸分析
    2.工具數據分析有很多成熟的工具可以使用,如R、python、spss等。此處我們選用python進行分析。首先,我們需要安裝並導入python數據分析常用的庫。# 工具:python3#固定導入import numpy as np #科學計算基礎庫,多維數組對象ndarrayimport pandas as pd #數據處理庫,DataFrame(二維數組)import matplotlib as mpl #畫圖基礎庫import matplotlib.pyplot