1
0

ネットワークのRTTをPythonで箱ひげ図を描いて可視化してみる

Last updated at Posted at 2024-04-12

はじめに

Pythonを使ってネットワークのRTTを分析してみる。
今回はいくつかのアドレスのPing応答を記録したファイルをPythonで読み込みグラフ化する。

前提

  • JupyterNotebook
  • 適当なping結果から作ったファイル(サンプルでは8.8.8.8、8.8.4.4、およびホームルーターへのpingのRTT値を使用して事前に以下のようなファイルを作成している。)

ping001.txt
ping先とRTT値(ms)をまとめたファイルとなっている。
各アドレスへのpingはそれぞれ100回実行している。
※8.8.4.4へのpingのみ、RTTに意図的に違いを出すために無線LAN経由で行っている。

8.8.8.8 7.107
8.8.8.8 6.780
8.8.8.8 6.534
8.8.8.8 6.750
8.8.8.8 6.441
8.8.8.8 7.029
8.8.8.8 6.588
8.8.8.8 6.797
8.8.8.8 6.559
〜〜中略〜〜
8.8.4.4 16.180
8.8.4.4 14.894
8.8.4.4 9.960
8.8.4.4 16.592
8.8.4.4 15.650
8.8.4.4 10.359
8.8.4.4 16.290
8.8.4.4 16.179
8.8.4.4 15.197
〜〜中略〜〜
192.168.1.1 0.611
192.168.1.1 0.585
192.168.1.1 0.654
192.168.1.1 0.632
192.168.1.1 0.495
192.168.1.1 0.633
192.168.1.1 0.640
192.168.1.1 0.641
192.168.1.1 0.631
〜〜略〜〜

必要なモジュールのインポート

今回使用するモジュールをインポートする。
なお、以降は全てJupyterNotebook上で実行している。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

ファイルの読み込み

ファイルをデータフレームdfに読み込む。(今回は前処理の都合上CSVではなくスペース区切りのファイルを使っているが、CSVでももちろん問題ない。)
今回のファイルにはヘッダーが無いため、各列にaddressとrttという名前を付けている。

df = pd.read_csv('ping001.txt', sep=' ', names=['address', 'rtt'])

dfの内容を表示してみる。

df

スクリーンショット 2024-04-12 17.49.57.png
address列にping先、rtt列に各回のRTT値(ms)が保管されている。

箱ひげ図を作成する

dfの内容をもとに箱ひげ図を描画してみる。

今回はseabornのboxplotを使用する。x軸に'address'、y軸に'rtt'を指定している。

sns.boxplot(x='address', y='rtt', data=df)

以下のような箱ひげ図が出力される。
スクリーンショット 2024-04-12 17.56.47.png

図がRTTの順に並んでいないので、見やすくするためにorderオプションを追加して並べ替えてみる。また軸ラベルもxlabelsとylabelsで指定する。

sns.boxplot(x='address', y='rtt', order=['192.168.1.1', '8.8.8.8', '8.8.4.4'], data=df)
plt.ylabel('RTT(ms)')
plt.xlabel('Ping Address')

スクリーンショット 2024-04-12 18.00.30.png

このように、アドレス別のRTTの値を可視化することができた。直感的に、各アドレスのRTTの値の違いとばらつきを見ることができる。
この他にも、ネットワークのスループットの値を可視化する場合などにも箱ひげ図を使用できる。

以上。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0