科学の箱

科学・IT・登山の話題

Network R 機械学習

tracertの分析

投稿日:2014年6月9日 更新日:

tracertを繰り返し実行した結果を分析し、経路上のホストについてどの程度時間がかかっているかを分析してみる。

tracertの結果は以下のように取得される。

$ tracert www.google.com

www.google.com [173.194.70.105] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1    68 ms    68 ms     3 ms  nn.nn.nn.nn
  2    <1 ms    <1 ms    <1 ms  nn.nn.nn.nn
  3     3 ms     1 ms     1 ms  nn.nn.nn.nn

tracertの繰り返し実行は以下のスクリプトで取得する。

set /a j=1
:start1
if %j% GTR 2000 goto last1
tracert nn.nn.nn.nn >> tr.log
timeout /T
set /a j+=1
timeout 60 /nobreak >nul
goto start1
:last1

目的はホップごとに最小・最大・平均値のRTT値を求める。取得したデータはtracertの結果であるので、エクセルに取り込み必要な処理をしてから、Rに取り込み分析をする。

エクセルで実行した作業は以下となる。

  1. IDをふり、作業中に気になったデータを把握できるようにする。
  2. 試行回数を明らかにする。これはtracert開始時の”Tracing route to”コメントと終了時の”Trace complete.”の出現回数をカウントした。
  3. コメント行を削除する。
  4. ms単位のカラムを削除する
  5. RTTについて数値変換 “<“がついている場合には削除する。
  6. fixed lenghtで読み込み、おかしくなったレコードについて修正

この結果以下のようなデータを取得できた。

ID Hop T1 T2 T3 Router
4 1 2 2 2 a
8 1 2 3 2 a
28 2 3 2 2 b
48 2 2 5 6 b
68 3 2 2 3 c
88 3 2 2 2 c
108 4 4 2 2 d
128 4 2 2 2 d
148 4 2 2 2 d
168 4 2 2 2 d
188 5 2 2 2 e
208 5 2 2 2 e
228 5 2 2 2 e

このデータをRに読み込み、分析をする。

# データを読み込みカラムを設定後一部確認
setwd("/RStudy/20140609_tr")
tr <- read.table("tr_analysis01.csv", header=T, sep=",")
names(tr) <- c("id", "hop", "t1", "t2", "t3", "router")
head(tr)

Rに読み込まれたデータは以下のようになっている。

> tr
    id hop t1 t2 t3 router
1    4   1  2  2  2      a
2    8   1  2  3  2      a
3   28   2  3  2  2      b
4   48   2  2  5  6      b
5   68   3  2  2  3      c
6   88   3  2  2  2      c
7  108   4  4  2  2      d
8  128   4  2  2  2      d
9  148   4  2  2  2      d
10 168   4  2  2  2      d
11 188   5  2  2  2      e
12 208   5  2  2  2      e
13 228   5  2  2  2      e

hopはファクタにしておく。このとき順番に並べておき、レポート作成時にtracertのhop番号でソートされるようにしておく。

# hopのfactorを確認する。
levels(factor(tr$hop))

# hopファクタは上の結果に基づいて設定する。
tr$hop <- factor(tr$hop, levels=c("1","2","3","4","5"))
levels(tr$hop)

summaryで確認してみる。

> summary(tr)
       id        hop         t1              t2              t3        router
 Min.   :  4.0   1:2   Min.   :2.000   Min.   :2.000   Min.   :2.000   a:2   
 1st Qu.: 48.0   2:2   1st Qu.:2.000   1st Qu.:2.000   1st Qu.:2.000   b:2   
 Median :108.0   3:2   Median :2.000   Median :2.000   Median :2.000   c:2   
 Mean   :109.2   4:4   Mean   :2.231   Mean   :2.308   Mean   :2.385   d:4   
 3rd Qu.:168.0   5:3   3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:2.000   e:3   
 Max.   :228.0         Max.   :4.000   Max.   :5.000   Max.   :6.000

hop別にサブセットする。

tr.list <- split(tr, tr$hop)

サブセットしたデータは以下のようになっている。

> tr.list
$a
  id hop t1 t2 t3 router
1  4   1  2  2  2      a
2  8   1  2  3  2      a

router名のテーブルを作成しておく。

> router_name <- tr[!duplicated(tr$hop),]
> router_name
    id hop t1 t2 t3 router
1    4   1  2  2  2      a
3   28   2  3  2  2      b
5   68   3  2  2  3      c
7  108   4  4  2  2      d
11 188   5  2  2  2      e

このデータはrouter = aのテスト結果である。集計するためにはサブセットごとにt1~t3でベクトルを作りたい。sapplyで要素別にベクトルを作るために以下の関数を定義する。

crtvec <- function(x){
  as.numeric(as.vector(as.matrix(x)[,c(-1,-2,-6)]))
}

router別要素にベクトルを作成する。

tr.result <- sapply(tr.list, crtvec)

以下のようにルータ別テスト結果のベクトルが作成された。

> tr.result
$a
[1] 2 2 2 3 2 2

$b
[1] 3 2 2 5 2 6

データを分析する。

sapply(tr.result, summary)
boxplot(tr.result,names=router_name$router[1:5])
> sapply(tr.result, summary)
            1     2     3     4 5
Min.    2.000 2.000 2.000 2.000 2
1st Qu. 2.000 2.000 2.000 2.000 2
Median  2.000 2.500 2.000 2.000 2
Mean    2.167 3.333 2.167 2.167 2
3rd Qu. 2.000 4.500 2.000 2.000 2
Max.    3.000 6.000 3.000 4.000 2

IF

本番データを使うとrouter名が長すぎてx軸のラベルが表示されなかった。下記のようにラベルを垂直にすることで対応した。

require(grDevices)
par(mar=c(8.1,4.1,4.1,2.1))
boxplot(tr.result, cex.axis=0.8, las=2, mar=c(2,2,2,2),names=router_name$router[1:5])

ラベルのマージンを変えようとしてmarパラメータを設定したがこちらはうまくいかなかった。

メタ情報

inarticle



メタ情報

inarticle



-Network, R, 機械学習
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

factor

factorを利用することでベクトルやデータフレームで質的変数を取り扱うことができる。 ファクター化するフィールドに対してfactor()関数を適用すると、ファクター化されたベクトルが取得できる。 値 …

no image

SIGNATE お弁当の需要予測-2

データの内容を確認する。 期間を調べる d_train[‘datetime’].min() ‘ ‘2013-11-18’ d_train[‘datetime’].max() ‘ ‘2014-9-9’ …

no image

Pythonではじめる機械学習 – 多様体学習

多様体学習 次元削減に利用できる手法として主成分分析がある。これは柔軟であり、すぐに実装可能な次元削減アルゴリズムの一つである。しかし一つだけ問題がある。それは主成分分析に適用できるデータは線形のみで …

no image

大気汚染データの観測

コーセラのDeveloping Data Productで知りたい場所の緯度経度を入力すると過去の観測データからオゾン濃度とPM25汚染濃度を予測するコードを紹介していた。Video Lectureの …

no image

一対比較法によるリーグ戦の分析

一対比較法を利用すると2者の比較から全体の重要度や実力を数字で表現できる。 一対比較法を使った分析の手順は以下のようにすすめる。 データを取得する。 一対比較法のデータは複数の項目から2者を選び比較し …

2014年6月
« 5月   7月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

side bar top



アーカイブ

カテゴリー