科学の箱

科学・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

Rによるやさしい統計学/6-2つの平均値を比較する

(1) 統計が好きか嫌いかで統計テスト1の得点について有意な差はあるか。 指導法データは score.csvに作成する。 ID,名前,性別,数学,統計,心理学テスト,統計テスト1,統計テスト2,指導法 …

no image

wiresharkのエラー

Wiresharkでエラーが出ているかを確認する。 左下に赤い●が出ていたら、キャプチャしたパケットで大量にエラーが出ていることを示す。 エラーが発生しているパケットは、キャプチャしたパケットで黒くハ …

no image

oneway.test, aov, anovaの違い-2

さてoneway.test, aov, anovaの違いをもとにしてそれぞれの関数について調べてみる。 機能 advantage disadvantage oneway.test 分散分析 等分散を仮 …

no image

ウェブ分析をハンズオンで学ぶ

ウェブ分析の本を読んでもあまりあたまに入ってこない。実際に手を動かさないと、身につかないわけである。 ということでハンズオンで実践して見ることにした。ハンズオンで実践するに当たり必要なのはデータとツー …

no image

Core Concept in Data Analysis – Week 4

Contingency Table : 分割表 Nominal : 名目 (カテゴリカル) Taxon : 分類 Marginal : 周辺 Conditional Probability : 条件付 …

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

side bar top



アーカイブ

カテゴリー