将GFQL与PyGraphistry加载器、机器学习、人工智能和可视化结合#
常见的图可视化任务#
有关可视化技术的介绍,请参阅10 Minutes to Graphistry Visualization。
简单绘图#
目标: 使用 .plot() 方法快速可视化图表。
代码
g2 = g1.chain(gfql_query)
g2.plot()
解释:
这将使用graphistry.PlotterBase.PlotterBase.plot()方法创建一个交互式的GFQL结果图形可视化。
—
常见的数据加载和整理任务#
我们将涵盖与图结构的数据加载和整形相关的一系列常见任务:
使用Pandas从CSV加载数据#
目标: 演示如何使用pandas从CSV文件加载数据并将其转换为图结构。
代码
import pandas as pd
import graphistry
# pd.DataFrame[['src', 'dst', ...]]
df = pd.read_csv('data.csv')
# g._edges: df[['src', 'dst', ...]]
g = graphistry.edges(df, 'src', 'dst')
解释:
此示例说明了如何使用pandas从CSV文件加载数据,并通过graphistry.PlotterBase.PlotterBase.edges()将其绑定到图结构中以便使用GFQL。有关使用pandas的更多信息,请参阅官方pandas文档。
—
使用cuDF从Parquet加载GPU数据#
目标:演示如何使用GPU加速的cuDF从Parquet文件加载数据并将其转换为图结构。
代码
import cudf
import graphistry
# cudf.DataFrame[['src', 'dst', ...]]
df = cudf.read_parquet('data.parquet')
# g._edges: df[['src', 'dst', ...]]
g = graphistry.edges(df, 'src', 'dst')
解释:
此示例展示了如何使用cuDF从Parquet文件加载数据,并使用GFQL将其转换为图结构。有关使用cuDF的更多详细信息,请参阅官方cuDF文档。
—
绑定节点和边#
目标: 展示当.edges()和.nodes()都可用时,如何将加载的数据转换为图结构。
代码
# pd.DataFrame[['n_id', ...]]
df1 = pd.read_csv('nodes.csv')
# pd.DataFrame[['src', 'dst', ...]]
df2 = pd.read_csv('edges.csv')
# g._edges: df2[['src', 'dst', ...]]
# g._nodes: df1[['n_id', ...]] <-- optional
g = graphistry.edges(df2, 'src', 'dst').nodes(df1, 'n_id')
解释:
此示例演示了如何使用GFQL绑定节点和边的图形数据。graphistry.PlotterBase.PlotterBase.edges()方法用于加载边数据。绑定节点数据是可选的,通过方法graphistry.PlotterBase.PlotterBase.nodes实现。
—
使用超图处理多节点列#
目标:讨论如何使用默认的direct=False参数,通过超图从表示节点的多列行中创建图。
代码
g = graphistry.hypergraph(df, entity_cols=['a', 'b', 'c'])['graph']
# g._node == 'nodeID'
# g._nodes: df[['nodeTitle', 'type', 'category', 'nodeID', 'a', 'b', 'c', 'd', 'e', 'EventID']]
# g._source == 'attribID'
# g._destination == 'EventID'
# g._nodes.type.unique() == ['a', 'b', 'c', 'EventID']
# g._edges: df[['EventID', 'attribID', 'a', 'd', 'e', 'c', 'edgeType']]
解释:
本示例解释了如何使用默认的direct=False参数将图数据转换为超图格式。在这种情况下,列a、b和c中的所有值都成为节点。此外,由于direct=False,每一行也成为一个节点,并与其在列a、b和c中的对应值相连。当direct=True时,列a、b和c的节点将直接连接。有关更多变体和高级用法,请参阅graphistry.PlotterBase.PlotterBase.hypergraph()。
—
常见的图机器学习和图人工智能任务#
我们将介绍一系列与图机器学习和AI相关的常见任务,您可以在GFQL结果上执行这些任务:
UMAP聚类与降维用于嵌入和相似图#
目标: 展示如何应用UMAP进行降维,将宽数据转换为用于聚类、嵌入和相似性图的数据。
代码
df = pd.DataFrame({
'a': [0, 1, 2, 3, 4],
'b': [10, 20, 30, 40, 50],
'c': [100, 200, 300, 400, 500]
})
g = graphistry.nodes(df).umap() # Automatically featurizes & embeds into X, Y space
g.plot()
assert set(g._nodes.columns) == {'_n', 'a', 'b', 'c', 'x', 'y'}
assert set(g._edges.columns) == {'_src_implicit', '_dst_implicit', '_weight'}
assert isinstance(g._node_features, (pd.DataFrame, cudf.DataFrame))
解释:
此示例演示了如何利用graphistry.umap_utils.UMAPMixin.umap()。请参阅其参考文档以了解许多可选的覆盖和使用模式,例如定义X=['col1', 'col2', …]以指定要聚类的列。
—
UMAP 拟合/变换用于缩放#
目标: 解释如何使用UMAP的fit/transform功能来跨数据集缩放特征。
代码
# Train: Feature columns X and label column y are optional
g1 = graphistry.nodes(df_sample).umap(X=['col_1', ..., 'col_n'], y='col_m')
# Transform new data under initial UMAP embedding
g2 = g1.transform_umap(batch_df, return_graph=True)
# Visualize new data under initial UMAP embedding
g2.plot()
解释:
此示例说明了如何在一个数据集上拟合UMAP模型,然后使用该模型转换另一个数据集,从而实现特征的一致缩放。有关使用UMAP的fit/transform的更多详细信息,请参阅graphistry.umap_utils.UMAPMixin.umap()文档。
—
使用RGCN图神经网络进行异常检测#
目标: 介绍RGCN的基本概念以及如何构建和训练一个简单的图模型。
代码
# df: df[['src_ip', 'dst_ip', 'o1', 'dst_port', ...]]
g = graphistry.edges(df, 'src_ip', 'dst_ip') # graph
g2 = g.embed( # rerun until happy with quality
device=dev0,
#relation='dst_port', # always 22, so runs as a GCN instead of RGCN
relation='o1', # split by sw type
#==== OPTIONAL: NODE FEATURES ====
#requires node feature data, ex: g = graphistry.nodes(nodes_df, node_id_col).edges(..
#use_feat=True
#X=[g._node] + good_feats_col_names,
#cardinality_threshold=len(g._edges)+1, #optional: avoid topic modeling on high-cardinality cols
#min_words=len(g._edges)+1, #optional: avoid topic modeling on high-cardinality cols
epochs=10
)
def to_cpu(tensor, is_gpu=True):
return tensor.cpu() if is_gpu else tensor
score2 = pd.Series(to_cpu(g2._score(g2._triplets)).numpy())
# df[['score', 'is_low_score', ...]]
df.assign(
score=score2,
is_low_score=(score2 < (score2.mean() - 2 * score2.std()))
)
解释:
本示例介绍了如何使用graphistry.embed_utils.HeterographEmbedModuleMixin.embed()构建和训练一个基本的关系图卷积网络(RGCN)。有关此示例的更多信息,请参阅SSH日志RGCN演示笔记本。
—
使用DBSCAN进行聚类标注#
目标: 讨论使用DBSCAN基于特征对节点或边进行聚类。
代码
g2 = g1.umap().dbscan(eps=0.5, min_samples=5) # Apply DBSCAN clustering
print('labels: ', g2._nodes['_dbscan'])
解释:
此示例说明了如何使用graphistry.compute.cluster.ClusterMixin.dbscan()在通过UMAP降维后对图数据进行标签。
—
自动化特征生成#
目标: 说明如何从原始数据生成特征以供AI应用使用。
代码
g = graphistry.nodes(df).featurize(kind='nodes', X=['raw_feature_1', 'raw_feature_2'])
解释:
此示例演示了如何从GFQL查询返回的原始数据自动生成特征,以便与ML和AI一起使用,使用graphistry.feature_utils.FeatureMixin.featurize()方法。参数feature_engine= (graphistry.feature_utils.FeatureEngine)选择特征生成引擎。
—
图中的语义搜索#
目标: 使用图嵌入和自然语言查询实现语义搜索。
代码
g2 = g1.featurize(
X = ['text_col_1', .., 'text_col_n'],
kind='nodes',
model_name = "paraphrase-MiniLM-L6-v2")
results_df, query_vector = g2.search('my natural language query => df hits', ...)
g3 = g2.search_graph('my natural language query => graph', ...)
g3.plot()
解释:
此示例展示了如何使用嵌入在图数据中执行语义搜索。有关实现语义搜索的更多详细信息,请参阅我们文档中的语义搜索部分。
—
知识图谱嵌入#
目标: 解释知识图谱嵌入的训练模型和预测关系。
代码
g2 = g1.embed(relation='relationship_column_of_interest')
g3 = g2.predict_links_all(threshold=0.95) # score high confidence predicted edges
g3.plot()
# Score over any set of entities and/or relations.
g4 = g2.predict_links(
source=['entity_k'],
relation=['relationship_1', 'relationship_4', ..],
destination=['entity_l', 'entity_m', ..],
threshold=0.9, # score threshold
return_dataframe=False) # return graph vs _edges df
解释:
本示例描述了如何使用GFQL训练知识图谱嵌入模型,以及如何预测实体之间的关系。展示了如何使用graphistry.embed_utils.HeterographEmbedModuleMixin.embed()、graphistry.embed_utils.HeterographEmbedModuleMixin.predict_links_all()和graphistry.embed_utils.HeterographEmbedModuleMixin.predict_links()。