Exporting and visualising your graph
As with Raphtory's connectors for ingesting data, there are a host of different formats and libraries that you can export your graphs into. Below we explore three of these, namely Pandas dataframes, NetworkX graphs and Pyvis graphs.
All functions mentioned in this section work on both graphs/nodes/edges
and graph/node/edge views
, allowing you to specify different windows, layers and subgraphs before conversion.
By default exporting will include all properties and all update history. However, this can be modified via flags on each export function, depending on use case requirements. You can find a description of these flags in the API docs for the function. For example, here are the docs for the networkx conversion.
Info
This page doesn't contain an exhaustive list of all the different conversion methods - please feel free to check the API documentation for this list. If we are missing a format that you believe to be important, please raise an issue and it will be available before you know it!
For the examples in this tutorial we are going to be reusing the network traffic dataset from the ingestion tutorial and the monkey interaction network from the querying tutorial. In the below code segment you can get a refresher of what these datasets looks like.
from raphtory import Graph
import pandas as pd
server_edges_df = pd.read_csv("data/network_traffic_edges.csv")
server_edges_df["timestamp"] = pd.to_datetime(server_edges_df["timestamp"])
server_nodes_df = pd.read_csv("data/network_traffic_nodes.csv")
server_nodes_df["timestamp"] = pd.to_datetime(server_nodes_df["timestamp"])
print("Network Traffic Edges:")
print(f"{server_edges_df}\n")
print("Network Traffic Servers:")
print(f"{server_nodes_df}\n")
traffic_graph = Graph()
traffic_graph.load_edges_from_pandas(
df=server_edges_df,
src="source",
dst="destination",
time="timestamp",
properties=["data_size_MB"],
layer_col="transaction_type",
constant_properties=["is_encrypted"],
shared_constant_properties={"datasource": "data/network_traffic_edges.csv"},
)
traffic_graph.load_nodes_from_pandas(
df=server_nodes_df,
id="server_id",
time="timestamp",
properties=["OS_version", "primary_function", "uptime_days"],
constant_properties=["server_name", "hardware_type"],
shared_constant_properties={"datasource": "data/network_traffic_edges.csv"},
)
monkey_edges_df = pd.read_csv(
"data/OBS_data.txt", sep="\t", header=0, usecols=[0, 1, 2, 3, 4], parse_dates=[0]
)
monkey_edges_df["DateTime"] = pd.to_datetime(monkey_edges_df["DateTime"])
monkey_edges_df.dropna(axis=0, inplace=True)
monkey_edges_df["Weight"] = monkey_edges_df["Category"].apply(
lambda c: 1 if (c == "Affiliative") else (-1 if (c == "Agonistic") else 0)
)
print("Monkey Interactions:")
print(f"{monkey_edges_df}\n")
monkey_graph = Graph()
monkey_graph.load_edges_from_pandas(
df=monkey_edges_df,
src="Actor",
dst="Recipient",
time="DateTime",
layer_col="Behavior",
properties=["Weight"],
)
Output
Network Traffic Edges:
timestamp source ... transaction_type is_encrypted
0 2023-09-01 08:00:00+00:00 ServerA ... Critical System Request True
1 2023-09-01 08:05:00+00:00 ServerA ... File Transfer False
2 2023-09-01 08:10:00+00:00 ServerB ... Standard Service Request True
3 2023-09-01 08:15:00+00:00 ServerD ... Administrative Command False
4 2023-09-01 08:20:00+00:00 ServerC ... Critical System Request True
5 2023-09-01 08:25:00+00:00 ServerE ... File Transfer False
6 2023-09-01 08:30:00+00:00 ServerD ... Standard Service Request True
[7 rows x 6 columns]
Network Traffic Servers:
timestamp server_id ... primary_function uptime_days
0 2023-09-01 08:00:00+00:00 ServerA ... Database 120
1 2023-09-01 08:05:00+00:00 ServerB ... Web Server 45
2 2023-09-01 08:10:00+00:00 ServerC ... File Storage 90
3 2023-09-01 08:15:00+00:00 ServerD ... Application Server 60
4 2023-09-01 08:20:00+00:00 ServerE ... Backup 30
[5 rows x 7 columns]
Monkey Interactions:
DateTime Actor Recipient Behavior Category Weight
15 2019-06-13 09:50:00 ANGELE FELIPE Grooming Affiliative 1
17 2019-06-13 09:50:00 ANGELE FELIPE Grooming Affiliative 1
19 2019-06-13 09:51:00 FELIPE ANGELE Resting Affiliative 1
20 2019-06-13 09:51:00 FELIPE LIPS Resting Affiliative 1
21 2019-06-13 09:51:00 ANGELE FELIPE Grooming Affiliative 1
... ... ... ... ... ... ...
5370 2019-07-10 11:02:00 ARIELLE LIPS Touching Affiliative 1
5371 2019-07-10 11:05:00 LIPS NEKKE Playing with Affiliative 1
5372 2019-07-10 11:05:00 LIPS FELIPE Resting Affiliative 1
5373 2019-07-10 11:05:00 LIPS NEKKE Resting Affiliative 1
5374 2019-07-10 11:05:00 LIPS FELIPE Resting Affiliative 1
[3196 rows x 6 columns]