はじめに
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
address列にping先、rtt列に各回のRTT値(ms)が保管されている。
箱ひげ図を作成する
dfの内容をもとに箱ひげ図を描画してみる。
今回はseabornのboxplotを使用する。x軸に'address'、y軸に'rtt'を指定している。
sns.boxplot(x='address', y='rtt', data=df)
図が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')
このように、アドレス別のRTTの値を可視化することができた。直感的に、各アドレスのRTTの値の違いとばらつきを見ることができる。
この他にも、ネットワークのスループットの値を可視化する場合などにも箱ひげ図を使用できる。
以上。