10分钟了解PyGraphistry#

欢迎来到PyGraphistry,这是一个快速且易于使用的图可视化、查询、分析和AI平台。在本指南结束时,您将能够创建交互式的、GPU加速的数据图可视化。如果您已经熟悉数据框等概念,PyGraphistry将非常适合您。

PyGraphistry 可以独立使用,并自动优化适用于CPU系统和GPU系统。它通常用于Python笔记本、仪表板和Web应用程序中。该库包括GFQL数据帧原生图查询语言、用于Graphistry GPU可视化和分析服务器的官方Python绑定,以及各种图数据科学工具。

为什么选择图智能?#

图表表示实体之间的关系。无论您是在分析事件日志、社交媒体互动、安全警报、金融交易、点击流、供应链还是基因组数据,可视化和分析这些关系可以揭示难以通过其他方式检测到的模式和见解。

图形可视化和分析帮助您:

  • 识别模式:发现集群、行为、进展、根本原因、枢纽和异常。

  • 理解结构:查看实体如何连接以及信息如何流动。

  • 沟通洞察:以易于理解的方式呈现复杂的关系。

随着数据集变得越来越大,传统工具在性能和复杂性方面遇到困难,使得分析师难以高效地提取有意义的见解。

PyGraphistry 的特别之处是什么?#

PyGraphistry 是一个全面的 Python 库,简化了处理较大图形的工作。它以以下特点而闻名:

  • GPU加速:以视觉或编程方式处理更大的数据集

  • 高级可视化:丰富的开箱即用视觉编码(例如,颜色、大小、图标、徽章),交互式分析功能(例如,缩放、交叉过滤、下钻、时间条),多种布局算法。

  • 无缝集成:与流行的Python数据科学库(如Pandas、cuDF和NetworkX)无缝协作,并轻松集成到笔记本、仪表板工具、Web应用程序、数据库和其他工具中

  • GFQL 数据帧原生图查询语言:直接在数据帧上运行图查询和分析,可选择GPU加速,从而在不增加常规基础设施开销的情况下获得可扩展的结果。

  • Graphistry[AI]:通过原生支持GPU特征工程、UMAP聚类和嵌入,快速在大数据集上执行加速的图ETL、分析、ML/AI和可视化。

  • 我们建议从10分钟了解PyGraphistry开始,<span

安装#

安装 PyGraphistry#

pip install graphistry

这将执行一个最小安装,依赖项主要仅限于Pandas和PyArrow。

安装 cuDF GPU 数据框架(可选)#

为了使用DataFrames进行GPU加速,请通过NVIDIA RAPIDS安装指南安装cuDF

使用PyGraphistry注册(可选)#

虽然大部分PyGraphistry可以在本地运行,但使用GPU可视化服务器需要在你自己的自托管Graphistry服务器或Graphistry Hub上拥有一个账户。如果你还没有账户,可以在graphistry.com创建一个免费的GPU账户,或者启动你自己的服务器。

然后,登录您的 PyGraphistry 客户端:

import graphistry

graphistry.register(api=3, server='hub.graphistry.com', username='YOUR_USERNAME', password='YOUR_PASSWORD')

替换为您的实际服务器和凭据。

高效加载数据#

Python数据科学生态系统支持连接到大多数数据库和文件类型

许多用户从CSV、JSON和SQL数据库开始。我们经常看到团队采用ParquetApache Arrow等格式。Graphistry原生利用这些格式,因此使用它们加载数据通常比典型库快10倍以上。

示例:加载Parquet数据

import cudf
import graphistry

# Load the dataset using cuDF
df = cudf.read_parquet('data/honeypot.parquet')

print(df.head())

另外,如果你没有GPU或cuDF,你可以使用Pandas:

import pandas as pd
import graphistry

# Load the dataset using Pandas
df = pd.read_csv('https://raw.githubusercontent.com/graphistry/pygraphistry/master/demos/data/honeypot.csv')

print(df.head())

示例数据结构:

attackerIP       victimIP  victimPort         vulnName  count   time(max)   time(min)
0   1.235.32.141  172.31.14.66       139.0  MS08067 (NetAPI)      6  1421433577  1421422669
1  105.157.235.22  172.31.14.66       445.0  MS08067 (NetAPI)      4  1422497735  1422494755
...

创建一个基本可视化#

让我们使用蜜罐数据创建一个简单的图形可视化:

g = graphistry.edges(df, 'attackerIP', 'victimIP')
g.plot()  # Make sure you called graphistry.register() above

这将渲染一个交互式图表,其中节点代表IP地址,边代表攻击。

自动GPU加速#

请注意,plot() 步骤会将数据上传到 Graphistry 服务器,以便在您的服务器-GPU 加速的可视化会话中使用。这可以带来更流畅的交互和更快的渲染速度,即使处理大型数据集也是如此。

其他时候,PyGraphistry 会在本地对数据进行计算,例如使用 GFQL 查询。如果您的环境支持 GPU 计算,将自动使用 GPU 加速。

添加视觉编码#

PyGraphistry 支持各种视觉编码来表示数据中的不同属性。

示例:添加颜色编码#

让我们根据被利用的漏洞添加颜色编码。

# Plot with color encoding
g2 = g1.encode_edge_color(
    'vulnName',
    categorical_mapping={
        'MS08067 (NetAPI)': 'red',
        'OtherVuln': 'blue',
    },
    default_mapping='gray')

g2.plot()

现在,边缘根据漏洞类型着色,帮助您区分不同的攻击类型。

调整大小、标签、图标、徽章等#

您可以使用数据进一步调整节点和边的设置。示例调用包括:

  • bind(point_title=): 根据列分配标签给节点

  • encode_point_size(): 根据列调整节点大小

  • encode_point_icon(): 根据列分配不同的图标给节点

  • encode_point_badge(): 根据列向节点添加徽章

  • encode_point_weight(): 根据列调整节点权重

  • 边的等效函数:encode_edge_size(), encode_edge_icon(), encode_edge_badge()

还可以配置其他设置,例如背景颜色和徽标水印。

添加交互式时间条#

如果你的数据包含时间信息,你可以添加一个时间条来可视化随时间的变化。

# Ensure column has a datetime dtype
edges['time'] = cudf.to_datetime(df['time(max)'], unit='s')
g = graphistry.edges(edges)

# Plot with time encoding: Graphistry automatically detects Arrow/Parquet native types
g.plot()

时间轴在UI检测到日期时间值时立即出现,使您能够交互式地探索随时间演变的图表。

应用力导向布局#

默认情况下,PyGraphistry 使用力导向布局。您可以调整其参数:

# Adjust layout settings
g2 = g1.settings(url_params={'play': 7000, 'strongGravity': True, 'edgeInfluence': 2})
g2.plot()

更多布局算法#

PyGraphistry 提供了自己的额外布局算法,并简化了使用其他库的布局,因此您可以快速且有意义地展示您的图形。

例如,GraphViz布局以其高质量的小型树和有向无环图(DAGs)布局而闻名:

# pygraphistry handles format conversions behind-the-scenes
g2 = g1.layout_graphviz('dot')
g2.plot()

使用UMAP进行降维#

对于大型数据集,您可以使用UMAP进行降维,以便有意义地布局图形。UMAP将识别在其不同属性中相似的节点。

特别针对PyGraphistry,PyGraphistry记录并渲染相似实体之间的相似性边。我们发现这在实践中对于调查结果和在分析管道中使用UMAP至关重要。

# Compute UMAP layout by clustering on some subset of columns
g1 = graphistry.umap(X=['attackerIP', 'victimIP', 'vulnName'])
print('# similarity edges', len(g1._edges))
g1.plot()

使用GFQL查询图表#

GFQL,我们的数据框原生图查询语言,允许您直接在数据框上运行优化的图查询,而无需单独的图数据库系统。

假设您想要关注在某个特定时间戳以“MS08067 (NetAPI)”漏洞开始的攻击,并查看之后2跳的所有内容:

g2 = g1.chain([
    n(),
    e(edge_query="vulnName == 'MS08067 (NetAPI)' & `time(max)` > 1421430000"),
    n(),
    e(hops=2)
])

g2.plot()

此GFQL查询根据漏洞名称和时间过滤边,然后返回匹配的节点和边以进行可视化。

利用超图#

PyGraphistry 支持超图,这使您能够快速可视化涉及两个以上实体的复杂关系。

示例:将攻击可视化为超边

hg = graphistry.hypergraph(df, ['attackerIP', 'victimIP', 'vulnName', 'victimPort'])

hg['graph'].plot()

这将表示每次攻击作为一个超边连接攻击者IP、受害者IP、漏洞名称和端口节点。

将可视化嵌入到Web应用程序中#

您可以使用额外的SDK(如GraphistryJS)将PyGraphistry可视化嵌入到Web应用程序中。

JavaScript客户端有两种形式,并提供进一步的配置钩子:

  • Vanilla JavaScript: 使用 GraphistryJS 库直接嵌入可视化。

  • React: 使用Graphistry React组件实现无缝集成。

渲染选项#

内联渲染#

在 Jupyter 笔记本中,您可以内联渲染可视化效果。

g.plot()

URL 渲染#

或者,您可以生成一个URL以在单独的浏览器标签页中查看可视化。

url = g.plot(render=False)
print(f"View your visualization at: {url}")

下一步#

外部资源#

祝您绘图愉快!