当前位置: 首页 > web >正文

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 nxG = 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 pltplt.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 Networknet = Network(height='750px', width='100%', bgcolor='#222222', font_color='white')
net.from_nx(G)
net.show('network.html')
社区检测与颜色编码

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

import community as community_louvainpartition = 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()
http://www.xdnf.cn/news/13818.html

相关文章:

  • parquet批量读取图片文件示例
  • 树莓派5 ubuntu 24.04 docker配置镜像Docker pull时报错:https://registry-1.docker.io/v2/
  • 机器学习与深度学习21-信息论
  • 项目名称:基于计算机视觉的夜间目标检测系统
  • map与set的模拟实现
  • ABAP零碎记录
  • 事件(Event)
  • 56、原生组件注入-原生注解与Spring方式注入
  • 录制mp4 rospy
  • 数字人分身系统源码开发功能深度解析
  • 基于算力魔方与PP-OCRv5的OpenVINO智能文档识别方案
  • CSS实现元素撑满剩余空间的5种方法
  • Linux启动流程和内核管理自我总结
  • 杭州公司一面java题目和解答
  • 2025最新版使用VSCode和CMake图形化编译调试Cuda C++程序(保姆级教学)
  • IOT集群扩容实践:问题剖析与解决策略
  • Vue 3.6前瞻:响应式性能革命与Vapor模式展望
  • c#.net code httpPost请求,携带文件
  • 更进一步深入的研究ObRegisterCallBack
  • Kotlin 协程与 ViewModel 的完美结合
  • Rust 学习笔记:处理任意数量的 future
  • SQL进阶之旅 Day 28:跨库操作与ETL技术
  • 【C++】入门题目之定义Dog类
  • 三大能力升级,为老项目重构开辟新路径
  • [SPDM]SPDM 证书链验证过程详解
  • linux安装阿里DataX实现数据迁移
  • 组合边缘提取和亚像素边缘提取
  • word表格批量转excel,提取表格数据到excel
  • 企业签名分发跟应用商城分发有什么区别
  • mysql 的卸载- Windows 版