Python数据可视化艺术:社交网络关系图制作

数据准备与预处理

社交网络数据通常以节点(用户)和边(关系)的形式存储。常见的格式包括CSV、JSON或数据库表。使用pandas读取数据并进行清洗,确保节点和边的数据完整。

import pandas as pd

# 读取节点数据
nodes = pd.read_csv('nodes.csv')
# 读取边数据
edges = pd.read_csv('edges.csv')
构建社交网络图

使用networkx库构建图结构。节点通常包含用户ID、姓名等属性,边包含关系的权重或类型。

import networkx as nx

G = nx.Graph()
# 添加节点
for _, row in nodes.iterrows():
    G.add_node(row['id'], name=row['name'], group=row['group'])
# 添加边
for _, row in edges.iterrows():
    G.add_edge(row['source'], row['target'], weight=row['weight'])
可视化布局选择

社交网络图的布局影响可读性。常用的布局包括力导向布局(spring_layout)、圆形布局(circular_layout)和随机布局(random_layout)。

pos = nx.spring_layout(G, k=0.15, iterations=50)
绘制基础网络图

使用matplotlib绘制基础网络图,设置节点大小、颜色和边透明度。

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 12))
nx.draw_networkx_nodes(G, pos, node_size=200, node_color='skyblue', alpha=0.9)
nx.draw_networkx_edges(G, pos, width=1.0, alpha=0.5)
nx.draw_networkx_labels(G, pos, font_size=10, font_family='sans-serif')
plt.axis('off')
plt.show()
增强可视化效果

为节点和边添加更多属性,如根据节点度调整大小、根据边权重调整宽度。

node_size = [G.degree(n) * 50 for n in G.nodes()]
edge_width = [d['weight'] * 0.5 for u, v, d in G.edges(data=True)]

plt.figure(figsize=(12, 12))
nx.draw_networkx_nodes(G, pos, node_size=node_size, node_color='skyblue', alpha=0.9)
nx.draw_networkx_edges(G, pos, width=edge_width, alpha=0.5)
nx.draw_networkx_labels(G, pos, font_size=10, font_family='sans-serif')
plt.axis('off')
plt.show()
使用交互式可视化工具

pyvis库提供交互式网络图,允许用户缩放、拖拽和查看节点详情。

from pyvis.network import Network

net = Network(height='750px', width='100%', bgcolor='#222222', font_color='white')
net.from_nx(G)
net.show('network.html')
社区检测与颜色编码

使用community库检测社区结构,并为不同社区分配不同颜色。

import community as community_louvain

partition = community_louvain.best_partition(G)
colors = [partition[n] for n in G.nodes()]

plt.figure(figsize=(12, 12))
nx.draw_networkx_nodes(G, pos, node_size=node_size, node_color=colors, cmap=plt.cm.tab20, alpha=0.9)
nx.draw_networkx_edges(G, pos, width=edge_width, alpha=0.5)
nx.draw_networkx_labels(G, pos, font_size=10, font_family='sans-serif')
plt.axis('off')
plt.show()
高级定制与美化

调整图例、标题和背景色,提升整体视觉效果。

plt.figure(figsize=(12, 12))
nx.draw_networkx_nodes(G, pos, node_size=node_size, node_color=colors, cmap=plt.cm.tab20, alpha=0.9)
nx.draw_networkx_edges(G, pos, width=edge_width, alpha=0.5)
nx.draw_networkx_labels(G, pos, font_size=10, font_family='sans-serif')
plt.title('社交网络关系图', fontsize=15)
plt.axis('off')
plt.tight_layout()
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小九不懂SAP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值