Experiment Report of complex network course
复杂网络实验报告
目录
Experiment Report of complex network course
复杂网络实验报告
实验目标(The objective of the experiment):
实验流程(The flow of the experiment):
实验总结(Summary of the experiment):
-
实验目标(The objective of the experiment):
使用在NASP网站中获取的网络数据,对数据进行可视化处理,利用gephi软件进行可视化操作,最终得到一份数据转化的可视化图片。再安装python中的数据包networkx,利用networkx验证节点数和边数是否正确。
-
实验流程(The flow of the experiment):
1、登录https://snap.stanford.edu/data/soc-sign-bitcoin-alpha.html网站进行下载我们队伍所选数据集——Bitcoin Alpha trust weighted signed network,下载好csv文件,我在第一次用gephi导入的时候,发现文件数据并没有列名,无法进行边表格导入。找到解决方法后,我尝试自助修改csv文件,在每一列上方加上一个列名,分别为:来源、目标、评级、时间;
(SOURCE,TARGET,RATING,TIME)
- 文件修改完成后,开始导入到gephi进行处理:
导入成功后,展示为该界面:
这里由于节点和边的数量过于庞大,所以未经处理的可视化的效果密密麻麻一团,需要进一步的处理;
- 利用度排序的方法,将节点的颜色进行划分;接着运行得出平均路径长度:
这里在统计工具中,还可以依次运行平均聚类系数、特征向量中心度进行进一步的数据分析;
- 在外观中,设置节点的排名:根据中间集中性设置,尺寸设置为17—170,区分节点的大小;
使用统计模块中的社区检测区域的模块化功能:
Modularity Report
Parameters:
Randomize: On
Use edge weights: On
Resolution: 1.0
Results:
Modularity: 0.456
Modularity with resolution: 0.456
Number of Communities: 19
- 在分割中,利用模块化的渲染方式进行渲染,得出如下可视化图片:
- 利用统计区的平均加权度进行测量,得出结果是
Average Weighted Degree: 6.393
可以看出大多数人在比特币交易平台的信用都是合格的;
- 过滤操作:范围设置为负数,其余的过滤后:
- 利用hu yifan视图进行布局操作,部分数据分布在边缘形成一个圆;(图中中心部分的数据还是占大多数的,只是聚集在了一起)
- (最后验证成功,我们选择的网络是无标度网络)
- 进行python验证:
代码:
import pandas as pdimport networkx as nximport matplotlib.pyplot as pltdf = pd.read_csv(r"D:\HuaweiMoveData\Users\shen'zhou\Desktop\soc-sign-bitcoinalpha.csv")G = nx.DiGraph()for index, row in df.iterrows():source = row['SOURCE']target = row['TARGET']rating = row['RATING']time = row['TIME']G.add_node(source)G.add_node(target)G.add_edge(source, target, rating=rating, time=time)print(nx.number_of_nodes(G))print(nx.number_of_edges(G))target_data = df['TARGET']plt.hist(target_data, bins=10)plt.xlabel('Value')plt.ylabel('Frequency')plt.title('Distribution of TARGET')plt.show()
运行后可以看出度分布直方图:
再求图的直径:
import networkx as nx
import pandas as pd
# 读取 CSV 文件并创建图
df = pd.read_csv(r"D:\HuaweiMoveData\Users\shen'zhou\Desktop\soc-sign-bitcoinalpha.csv")
G = nx.from_pandas_edgelist(df, 'SOURCE', 'TARGET', edge_attr="RATING", create_using=nx.Graph())
# 获取连通组件
connected_components = nx.connected_components(G)
diameters = []# 计算每个连通组件的直径
for component in connected_components:subgraph = G.subgraph(component)diameter = nx.algorithms.diameter(subgraph)diameters.append(diameter)
print("图的直径:", max(diameters))
运行代码后计算得出图的直径为10;
数据均符合。
至此,实验与验证均结束。
-
实验总结(Summary of the experiment):