希拉莉郵件分析

2021-10-10 08:46:41 字數 3410 閱讀 1517

1、提取收件名和發件名

首先我們需要將所有的檔案提取出來,轉化為字典模式,id對應姓名和真實身份,最後提取的emails.metadatato和emails.metadatafrom要對應其真實身份。

import pandas as pd

import networkx as nx

import numpy as np

from collections import defaultdict

import matplotlib.pyplot as plt

# 資料載入

emails = pd.read_csv("./input/emails.csv")

# 讀取別名檔案

file = pd.read_csv("./input/aliases.csv")

aliases = {}

for index, row in file.iterrows():

aliases[row['alias']] = row['personid']

# 讀取人名檔案

file = pd.read_csv("./input/persons.csv")

persons = {}

for index, row in file.iterrows():

persons[row['id']] = row['name']

# 針對別名進行轉換

def unify_name(name):

# 姓名統一小寫

name = str(name).lower()

# 去掉, 和@後面的內容

name = name.replace(",", "").split("@")[0]

# 別名轉換

if name in aliases.keys():

return persons[aliases[name]]

return name

# 將寄件人和收件人的姓名進行規範化

2、影象的準備函式

利用nexworkx畫圖:邊,點和標籤的大小,影象視覺化

# 畫網路圖

def show_graph(graph, layout='spring_layout'):

# 使用spring layout布局,類似中心放射狀

# - circular_layout:節點在乙個圓環上均勻分布

# positions = nx.spring_layout(graph)

if layout == "circular_layout":

positions = nx.circular_layout(graph)

else:

positions = nx.spring_layout(graph)

# 設定網路圖中的節點大小,大小與pagerank值相關,因為pagerank值很小所以需要*20000

nodesize = [x['pagerank'] * 20000 for v, x in graph.nodes(data=true)]

# 設定網路圖中的邊長度 (1, 2, ) -> e[2]['weight'] = 100000

# edgesize = [np.sqrt(e[2]['weight']) for e in graph.edges(data=true)]

# 繪製節點

nx.draw_networkx_nodes(graph, positions, node_size=nodesize, alpha=0.4)

# 繪製邊 width=edgesize,

nx.draw_networkx_edges(graph, positions, alpha=0.2)

# 繪製節點的label

nx.draw_networkx_labels(graph, positions, font_size=10)

# 輸出希拉莉郵件中的所有人物關係圖

plt.show()

3、權重的設定與遍歷

# 設定邊的權重等於發郵件的次數

edges_weights_temp = defaultdict(list)

for row in zip(emails.metadatafrom, emails.metadatato, emails.rawtext):

temp = (row[0], row[1])

if temp not in edges_weights_temp:

edges_weights_temp[temp] = 1

else:

edges_weights_temp[temp] = edges_weights_temp[temp] + 1

# 轉化格式 (from, to), weight => from, to, weight

edges_weights = [(key[0], key[1], val) for key, val in edges_weights_temp.items()]

4、最後利用pagerank和graph設定

# 建立乙個有向圖

graph = nx.digraph()

# 設定有向圖中的路徑及權重(from, to, weight)

graph.add_weighted_edges_from(edges_weights)

# 計算每個節點(人)的pr值,並作為節點的pagerank屬性

pagerank = nx.pagerank(graph)

# 獲取每個節點的pagerank數值

pagerank_list =

# 將pagerank數值作為節點的屬性

nx.set_node_attributes(graph, name='pagerank', values=pagerank_list)

# 畫網路圖

show_graph(graph)

5、設定pr值的閾值,篩選大於閾值的重要核心節點

pagerank_threshold = 0.005

# 複製乙份計算好的網路圖

small_graph = graph.copy()

# 剪掉pr值小於pagerank_threshold的節點

for n, p_rank in graph.nodes(data=true):

if p_rank['pagerank'] < pagerank_threshold:

small_graph.remove_node(n)

# 畫網路圖

希拉莉 高效的學習

高階學習方法 通過以下四種方法,希拉莉終於克服了內在危機,成為一名十分出色的優秀學生。人是一種奇妙的動物,他會本能地只考慮自己。按照這種本能生活是一件非常不幸的事情。如果能理性地戰勝這種本能,多為他人著想,生活就會變得幸福多了。人 要想成為由各個班級第一組成的小組中的第一名,最簡單最快捷的方法就是找...

郵件學習 python傳送郵件分析

首先呼叫python傳送乙個郵件 usr bin python3 import smtplib from email.mime.text import mimetext from email.utils import formataddr my sender 111111111 qq.com 發件人...

安全專家呼籲希拉莉要求重新計票

電子投票機不過是我們周圍具有嚴重漏洞的產品之一,3個搖擺州的投票結果應被複核,且新資料可能顛覆競選結果。一組投票安全專家和選舉律師這麼告訴希拉莉。賓夕法尼亞 威士頓康星和密西根州的初始計票顯示希拉莉以1.2 或更小的差距落敗,但該小組告訴希拉莉的競選團隊 投票結果明顯存疑。截至目前,該小組尚未丟擲投...