日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Pandas/networkx图分析简单入门

發(fā)布時(shí)間:2024/8/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas/networkx图分析简单入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:?本文是一篇pandas/networkx圖分析入門,對(duì)所舉的欺詐檢測(cè)用例進(jìn)行了簡(jiǎn)單的圖論分析,便于可視化及操作。

? ? ? ?對(duì)于圖論而言,大家或多或少有些了解,數(shù)學(xué)專業(yè)或計(jì)算機(jī)相關(guān)專業(yè)的讀者可能對(duì)其更加清楚。圖論中的圖像是由若干給定的點(diǎn)及連接兩點(diǎn)的線所構(gòu)成的圖形,這樣的圖像通常用來描述某些事物之間的某種特定關(guān)系,用點(diǎn)代表事物,用兩點(diǎn)之間的連接線表示二者具有的某種關(guān)系,在互聯(lián)網(wǎng)與通信行業(yè)中應(yīng)用廣泛。圖論分析(Graph analysis)并不是數(shù)據(jù)科學(xué)領(lǐng)域中的新分支,也不是數(shù)據(jù)科學(xué)家目前應(yīng)用的常用首選方法。然而,圖論可以做一些瘋狂的事情,一些經(jīng)典用例包括欺詐檢測(cè)、推薦或社交網(wǎng)絡(luò)分析等,下圖是 NLP中的非經(jīng)典用例——處理主題提取。

欺詐檢測(cè)用例

? ? ? ?假設(shè)現(xiàn)在你有一個(gè)客戶數(shù)據(jù)庫(kù),并想知道它們是如何相互連接的。特別是,你知道有些客戶涉及復(fù)雜的欺詐結(jié)構(gòu),但是在個(gè)人層面上可視化數(shù)據(jù)并不會(huì)帶來欺詐證據(jù),欺詐者看起來像其他普通客戶一樣。
? ? ? ?只需查看原始數(shù)據(jù),處理用戶之間的連接就可以顯示更多信息。具體而言,對(duì)于通常的基于機(jī)器學(xué)習(xí)的評(píng)分模型而言,這些特征不會(huì)被視為風(fēng)險(xiǎn),但這些不會(huì)被認(rèn)為存在風(fēng)險(xiǎn)的特征可能成為基于圖表分析評(píng)分模型中的風(fēng)險(xiǎn)特征。

示例:三個(gè)具有相同電話號(hào)碼的人,連接到具有相同電子郵件地址的其他人,這是不正常的,且可能存在風(fēng)險(xiǎn)。電話號(hào)碼本身沒有什么價(jià)值,并不會(huì)提供任何信息(因此,即使最好的深度學(xué)習(xí)模型也不能從中獲取任何價(jià)值信息),但個(gè)人通過相同的電話號(hào)碼或電子郵件地址連接這一問題,可能是一種風(fēng)險(xiǎn)。

下面在Python中進(jìn)行一些處理:

設(shè)置數(shù)據(jù)、清理和創(chuàng)建圖表

?


(構(gòu)造的仿真數(shù)據(jù))


? ? ? ?首先從一個(gè)pandas DataFrame開始(它基本上是Python中的Excel表)

import pandas as pddf = pd.DataFrame({'ID':[1,2,3,4,5,6], 'First Name':['Felix', 'Jean', 'James', 'Daphne', 'James', 'Peter'], 'Family Name': ['Revert', 'Durand', 'Wright', 'Hull', 'Conrad', 'Donovan'],'Phone number': ['+33 6 12 34 56 78', '+33 7 00 00 00 00', '+33 6 12 34 56 78', '+33 6 99 99 99 99', '+852 0123 4567', '+852 0123 4567'],'Email': ['felix.revert@gmail.com', 'jean.durand@gmail.com', 'j.custom@gmail.com', pd.np.nan, 'j.custom@gmail.com', pd.np.nan]})

? ? ? ?從代碼中看到,先加載數(shù)據(jù),以df表示。下面對(duì)其做一些準(zhǔn)備,需要連接具有相同電話號(hào)碼和相同電子郵件的個(gè)人(由其ID表示)。首先從電話號(hào)碼開始:

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 )

? ? ? ?處理的數(shù)據(jù)看起來像這樣:


? ? ? ?從圖中看到,里面有一些聯(lián)系,但存在兩個(gè)問題:

  • 個(gè)人與自己聯(lián)系在一起
  • 從數(shù)據(jù)中看到,當(dāng)X與Y連接時(shí),Y也與X連接,有兩行數(shù)據(jù)用于同一連接。下面讓我們清理一下:
# By joining the data with itself, people will have a connection with themselves. # Remove self connections, to keep only connected people who are different. d = data_to_merge[~(data_to_merge[column_ID]==data_to_merge[column_ID+"_2"])] \.dropna()[[column_ID, column_ID+"_2", column_edge]]# To avoid counting twice the connections (person 1 connected to person 2 and person 2 connected to person 1) # we force the first ID to be "lower" then ID_2 d.drop(d.loc[d[column_ID+"_2"]<d[column_ID]].index.tolist(), inplace=True)

? ? ? ?下面,數(shù)據(jù)看起來像這樣:


? ? ? ?從圖中看到,1和3連接,5和6也連接。我們對(duì)電子郵件地址也進(jìn)行同樣的處理。下面構(gòu)建一個(gè)圖表,將在這里只分享代碼的一部分,因?yàn)樘砑尤看a比較棘手,項(xiàng)目代碼地址在文末給出。

import networkx as nxG = nx.from_pandas_edgelist(df=d, source=column_ID, target=column_ID+'_2', edge_attr=column_edge)G.add_nodes_from(nodes_for_adding=df.ID.tolist())

? ? ? ?下面進(jìn)行數(shù)據(jù)可視化

使用networkx進(jìn)行圖形可視化

? ? ? ?簡(jiǎn)單的nx.draw(G)代碼就能獲得以下內(nèi)容:


? ? ? ?從圖中看到,這是一個(gè)相當(dāng)有趣的形式!但是我們看不出圖中的每個(gè)點(diǎn)代表的是誰(shuí),誰(shuí)和誰(shuí)之間有什么連接。下面將其具體化:


? ? ? ?從圖中可以看到, 4個(gè)人通過2個(gè)不同的電話號(hào)碼和1個(gè)電子郵件地址連接在一起,后續(xù)還應(yīng)該進(jìn)行更多的調(diào)查!

真正實(shí)現(xiàn)工業(yè)化的下一步

? ? ? ?讓我們回顧一下我們前面做過的事情:

  • 根據(jù)用戶數(shù)據(jù)庫(kù)創(chuàng)建圖表
  • 自定義可視化,幫助我們發(fā)現(xiàn)潛在奇怪的模式
    ? ? ? ?如果你是業(yè)務(wù)驅(qū)動(dòng)的,并希望一些專家使用你已經(jīng)完成的工作,那么你的下一個(gè)重點(diǎn)應(yīng)該是:
  • 將查找多個(gè)人連接在一起的這一過程自動(dòng)化,或風(fēng)險(xiǎn)模式檢測(cè)
  • 通過圖形可視化和原始數(shù)據(jù)自動(dòng)創(chuàng)建可視化和創(chuàng)建自定義儀表板的過程
    ? ? ? ?本文不會(huì)在這里詳細(xì)介紹上述內(nèi)容,但是會(huì)告訴你如何繼續(xù)進(jìn)行上述兩個(gè)步驟:

1.風(fēng)險(xiǎn)模式檢測(cè)

這里有兩種方法:

  • 從你認(rèn)為有風(fēng)險(xiǎn)的人(或你被發(fā)現(xiàn)為欺詐者的人)那里開始,檢查他們與其他人的關(guān)系。這與機(jī)器學(xué)習(xí)相關(guān),這是一種“有監(jiān)督”方法。更進(jìn)一步,你還可以從機(jī)器學(xué)習(xí)評(píng)分(例如,使用XGBoost)開始,尋找他們之間存在的緊密聯(lián)系。
  • 從奇怪的模式(太多的連接、密集的網(wǎng)絡(luò)...),這是“無監(jiān)督”的方法。
    ? ? ? ?在我們舉的例子中,我們沒有已知的欺詐者,所以我們將采用上述的第二種方法。

? ? ? ?Networkx已經(jīng)實(shí)現(xiàn)了完全正確的算法:degree( )、centrality( )、pagerank( )、connected_components( )......這些算法可以讓你以數(shù)學(xué)的形式定義風(fēng)險(xiǎn)。

2.為業(yè)務(wù)創(chuàng)建可視化和自動(dòng)化分析

? ? ? ?對(duì)于大多數(shù)數(shù)據(jù)科學(xué)家來說,這內(nèi)容聽起來是老派,但快速做到這一點(diǎn)的方法就是使用Excel。
? ? ? ?Xlsxwriter軟件包可幫助你粘貼風(fēng)險(xiǎn)人物圖表中的數(shù)據(jù),并將我們創(chuàng)建的圖表圖像直接粘貼到Excel文件中。通過這種操作之后你將獲得每個(gè)風(fēng)險(xiǎn)網(wǎng)絡(luò)的儀表板,如下所示:


? ? ? ?對(duì)于每個(gè)具有潛在風(fēng)險(xiǎn)的網(wǎng)絡(luò),你都可以自動(dòng)地創(chuàng)建儀表板,讓專家完成他們的工作。同樣你也可以在信息中心中添加一些指標(biāo):涉及的人數(shù)、不同電話號(hào)碼的數(shù)量及電子郵件地址等。
? ? ? ?全文源碼在此,希望這篇文章對(duì)你有所幫助。

原文鏈接

本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

總結(jié)

以上是生活随笔為你收集整理的Pandas/networkx图分析简单入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。