Pandas/networkx图分析简单入门
摘要:?本文是一篇pandas/networkx圖分析入門,對所舉的欺詐檢測用例進行了簡單的圖論分析,便于可視化及操作。
? ? ? ?對于圖論而言,大家或多或少有些了解,數學專業或計算機相關專業的讀者可能對其更加清楚。圖論中的圖像是由若干給定的點及連接兩點的線所構成的圖形,這樣的圖像通常用來描述某些事物之間的某種特定關系,用點代表事物,用兩點之間的連接線表示二者具有的某種關系,在互聯網與通信行業中應用廣泛。圖論分析(Graph analysis)并不是數據科學領域中的新分支,也不是數據科學家目前應用的常用首選方法。然而,圖論可以做一些瘋狂的事情,一些經典用例包括欺詐檢測、推薦或社交網絡分析等,下圖是 NLP中的非經典用例——處理主題提取。
欺詐檢測用例
? ? ? ?假設現在你有一個客戶數據庫,并想知道它們是如何相互連接的。特別是,你知道有些客戶涉及復雜的欺詐結構,但是在個人層面上可視化數據并不會帶來欺詐證據,欺詐者看起來像其他普通客戶一樣。
? ? ? ?只需查看原始數據,處理用戶之間的連接就可以顯示更多信息。具體而言,對于通常的基于機器學習的評分模型而言,這些特征不會被視為風險,但這些不會被認為存在風險的特征可能成為基于圖表分析評分模型中的風險特征。
示例:三個具有相同電話號碼的人,連接到具有相同電子郵件地址的其他人,這是不正常的,且可能存在風險。電話號碼本身沒有什么價值,并不會提供任何信息(因此,即使最好的深度學習模型也不能從中獲取任何價值信息),但個人通過相同的電話號碼或電子郵件地址連接這一問題,可能是一種風險。
下面在Python中進行一些處理:
設置數據、清理和創建圖表
?
(構造的仿真數據)
? ? ? ?首先從一個pandas DataFrame開始(它基本上是Python中的Excel表)
? ? ? ?從代碼中看到,先加載數據,以df表示。下面對其做一些準備,需要連接具有相同電話號碼和相同電子郵件的個人(由其ID表示)。首先從電話號碼開始:
column_edge = 'Phone number' column_ID = 'ID'data_to_merge = df[[column_ID, column_edge]].dropna(subset=[column_edge]). drop_duplicates() # select columns, remove NaN# To create connections between people who have the same number, # join data with itself on the 'ID' column. data_to_merge = data_to_merge.merge(data_to_merge[[column_ID, column_edge]].rename(columns={column_ID:column_ID+"_2"}), on=column_edge )? ? ? ?處理的數據看起來像這樣:
? ? ? ?從圖中看到,里面有一些聯系,但存在兩個問題:
- 個人與自己聯系在一起
- 從數據中看到,當X與Y連接時,Y也與X連接,有兩行數據用于同一連接。下面讓我們清理一下:
? ? ? ?下面,數據看起來像這樣:
? ? ? ?從圖中看到,1和3連接,5和6也連接。我們對電子郵件地址也進行同樣的處理。下面構建一個圖表,將在這里只分享代碼的一部分,因為添加全部代碼比較棘手,項目代碼地址在文末給出。
? ? ? ?下面進行數據可視化
使用networkx進行圖形可視化
? ? ? ?簡單的nx.draw(G)代碼就能獲得以下內容:
? ? ? ?從圖中看到,這是一個相當有趣的形式!但是我們看不出圖中的每個點代表的是誰,誰和誰之間有什么連接。下面將其具體化:
? ? ? ?從圖中可以看到, 4個人通過2個不同的電話號碼和1個電子郵件地址連接在一起,后續還應該進行更多的調查!
真正實現工業化的下一步
? ? ? ?讓我們回顧一下我們前面做過的事情:
- 根據用戶數據庫創建圖表
- 自定義可視化,幫助我們發現潛在奇怪的模式
? ? ? ?如果你是業務驅動的,并希望一些專家使用你已經完成的工作,那么你的下一個重點應該是: - 將查找多個人連接在一起的這一過程自動化,或風險模式檢測
- 通過圖形可視化和原始數據自動創建可視化和創建自定義儀表板的過程
? ? ? ?本文不會在這里詳細介紹上述內容,但是會告訴你如何繼續進行上述兩個步驟:
1.風險模式檢測
這里有兩種方法:
- 從你認為有風險的人(或你被發現為欺詐者的人)那里開始,檢查他們與其他人的關系。這與機器學習相關,這是一種“有監督”方法。更進一步,你還可以從機器學習評分(例如,使用XGBoost)開始,尋找他們之間存在的緊密聯系。
- 從奇怪的模式(太多的連接、密集的網絡...),這是“無監督”的方法。
? ? ? ?在我們舉的例子中,我們沒有已知的欺詐者,所以我們將采用上述的第二種方法。
? ? ? ?Networkx已經實現了完全正確的算法:degree( )、centrality( )、pagerank( )、connected_components( )......這些算法可以讓你以數學的形式定義風險。
2.為業務創建可視化和自動化分析
? ? ? ?對于大多數數據科學家來說,這內容聽起來是老派,但快速做到這一點的方法就是使用Excel。
? ? ? ?Xlsxwriter軟件包可幫助你粘貼風險人物圖表中的數據,并將我們創建的圖表圖像直接粘貼到Excel文件中。通過這種操作之后你將獲得每個風險網絡的儀表板,如下所示:
? ? ? ?對于每個具有潛在風險的網絡,你都可以自動地創建儀表板,讓專家完成他們的工作。同樣你也可以在信息中心中添加一些指標:涉及的人數、不同電話號碼的數量及電子郵件地址等。
? ? ? ?全文源碼在此,希望這篇文章對你有所幫助。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的Pandas/networkx图分析简单入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Jenkins+Sonarqueb进
- 下一篇: 理论与实践:如何从Hadoop迁移到Ma