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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python社会网络度与聚类系数的计算(network+原理法)

發布時間:2024/1/1 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python社会网络度与聚类系数的计算(network+原理法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、借助包完成網絡度與聚類系數的計算與可視化

python為我們提供了networkx包,可以幫助進行網絡關鍵指標的實現。networkx是Python的一個包,用于構建和操作復雜的圖結構,提供分析圖的算法。本實驗重點講解在networkx包基礎上與實驗1不同之處。這個不難,直接上代碼。

# -*- coding: utf-8 -*- import networkx as nx import matplotlib.pyplot as plt import numpy as np # 解決中文顯示問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 生成網絡 def readnetwork(network_filename):network = open(network_filename) # 讀取txt文件network = network.readlines() # 將txt文件寫入列表G = nx.Graph() # 創建網絡圖# 處理邊for edge in network:edge = edge.strip('\n').split('\t')G.add_edge(edge[0], edge[1])nx.draw(G,node_size = 10,with_labels=True) # 可視化plt.show()print("網絡的全部節點依次為:", G.nodes())print("網絡的全部邊依次為:", G.edges())print("網絡邊的數量:", G.number_of_edges())return G # 根據一個列表求每個值的個數及所占比例,繪制折線圖 def percent(list, x_label, y_label, title):list.sort(reverse=False)list_new = []sum = 0# 處理成(列表元素,出現次數)格式,計算出出現次數sumfor i in list:if (i, list.count(i)) in list_new:continueelse:list_new.append((i, list.count(i)))sum = sum + list.count(i)print("列表元素及對應出現次數為", list_new)print("列表元素出現次數的總和為", sum)element_list = []element_percent = []for i in list_new:element_list.append(i[0])element_percent.append(i[1] / sum)plt.xlabel(x_label)plt.ylabel(y_label)plt.plot(element_list, element_percent, linewidth=1)plt.title(title)plt.show()print('-------------------------------------------------')print('本程序運行結果為借助networkx包完成的節點度和節點聚類系數的計算')# 讀取網絡 G = readnetwork('us 500.txt') # 計算網絡的節點度數 degree = nx.degree(G) print("網絡的節點度數", degree) print('排序后為',sorted(degree,reverse=False)) print('-------------------------------------------------') # 計算節點度數出現次數及分布概率 degree_num = [] for degree_edge in degree:degree_num.append(degree_edge[1]) percent(degree_num, '度數', '度數概率', '度分布概率') # 計算網絡節點聚類系數 cluster = nx.clustering(G) print("網絡節點聚類系數為:", cluster) print('-------------------------------------------------') # 計算節點聚類系數分布概率 clustering_coefficient = list(cluster.values()) percent(clustering_coefficient, '聚類系數', '聚類系數概率', '聚類系數分布概率') # 計算網絡聚類系數均值 print("網絡聚類系數的均值為", np.mean(list(cluster.values())))

二、借助原理法完成網絡度和聚類系數的計算與可視化

import matplotlib.pyplot as plt import numpy as np # 解決中文顯示問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False def percent(list, x_label, y_label, title):list.sort(reverse=False)list_new = []sum = 0# 處理成(列表元素,出現次數)格式,計算出出現次數sumfor i in list:if (i, list.count(i)) in list_new:continueelse:list_new.append((i, list.count(i)))sum = sum + list.count(i)print("列表元素及對應出現次數為", list_new)print("列表元素出現次數的總和為", sum)element_list = []element_percent = []for i in list_new:element_list.append(i[0])element_percent.append(i[1] / sum)plt.xlabel(x_label)plt.ylabel(y_label)plt.plot(element_list, element_percent, linewidth=1)plt.title(title)plt.show()print('-------------------------------------------------') print('本程序運行結果為按照原理完成的節點度和節點聚類系數的計算') network = open('us 500.txt') # 讀取txt文件 network = network.readlines() # 將txt文件寫入列表 edge_left_list = [] edge_right_list = [] edge_list = [] # 獲取網絡的點、邊 for edge in network:# 去掉字符串的換行符,以空格作為字符串分割依據,得到起始終止點edge = edge.strip('\n').split('\t')edge_left_list.append(edge[0])edge_right_list.append(edge[1])edge_list.append(edge) # 去掉重復的點 node_list = list(set(edge_right_list + edge_left_list))degree = [] for i in node_list:k = 0for j in edge_list:if j[0] == i or j[1] == i:k = k + 1degree.append((i, k)) degree = sorted(list(set(degree)), reverse=False) print('經過排序的節點度數為', degree)# 計算節點度數出現次數及分布概率 degree_num = [] for degree_edge in degree:degree_num.append(degree_edge[1]) percent(degree_num, '度數', '度數概率', '度分布概率') # 計算聚類系數 cluster_dict = {} for node in node_list:node_neighbour_list = []# 獲得所有鄰居點for edge in edge_list:if edge[0] == node:node_neighbour_list.append(edge[1])if edge[1] == node:node_neighbour_list.append(edge[0])n = len(node_neighbour_list)sum_edge = (n * (n - 1)) / 2real_edge = 0for edge in edge_list:if edge[0] in node_neighbour_list and edge[1] in node_neighbour_list:real_edge = real_edge + 1try:cluster_dict.update({node: real_edge / sum_edge})except:cluster_dict.update({node: 0}) print('節點的聚類系數依次為', cluster_dict) # 計算節點聚類系數分布概率 clustering_coefficient = list(cluster_dict.values()) percent(clustering_coefficient, '聚類系數', '聚類系數概率', '聚類系數分布概率') # 計算網絡聚類系數均值 print("網絡聚類系數的均值為", np.mean(list(cluster_dict.values())))

總結

以上是生活随笔為你收集整理的python社会网络度与聚类系数的计算(network+原理法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。