如何绘制 UGR16 数据集的交通连接可视化?

How can plot traffic connection visualization for UGR16 dataset?

最近我读了一篇peper,它提供了网络流量连接的可视化类型,如下所示:

这种可视化的名称是什么,我们如何使用 UGR16 dataset 绘制它?

我也有兴趣了解和理解他们在 8 月 1 日 5 分钟观察期间的第 2 次和第 5 次爆发中通过此类可视化呈现的异常,如下所示: 有关数据集的更多信息,请参见 here.

我已经尝试了以下实现,但我无法弄清楚如何才能达到异常上下文的这种类型的图:

import requests
import pandas as pd
import matplotlib.pyplot as plt

# Get UGR16 Dataset
DOWNLOAD_REPO = "https://raw.githubusercontent.com/krisbolton/machine-learning-for-security/master/"
DOWNLOAD_FILENAME = DOWNLOAD_REPO + "ugr16-july-week5-first5k.csv"

DATASET_FILENAME = "ugr16-july-week5-first5k.csv"

response = requests.get(DOWNLOAD_FILENAME)
response.raise_for_status()
with open(DATASET_FILENAME, "wb") as f:
    f.write(response.content)
print("Download complete.")

# View dataset info
df = pd.read_csv("ugr16-july-week5-first5k.csv")
df.info()

df.shape
#(4999, 13)

# View visual representation of dataset columns
df.hist(bins=50, figsize=(30,15))
plt.show()

df.columns = ['Date_time', 'Duration', 'Source_IP',
              'Destination_IP', 'Source_Port', 'Destination_Port',
              'Protocol', 'Flag', 'Forwarding_status', 'ToS',
              'Packets', 'Bytes', 'Label']
df.head()

以下是数据框的性质:

它被称为hive plot, it originated in Krzywinski et al。这个想法是首先将节点分成几个重要的组(使用传统的网络分析技术),将它们用作轴,然后沿着这些轴对齐节点并绘制组之间和组内的边。

Here is a Python library for hive plotting, and here's 一个不错的博客 post 将其应用于 NetworkX 的空手道俱乐部数据集。