• 検索結果がありません。

平成28年11月

N/A
N/A
Protected

Academic year: 2021

シェア "平成28年11月"

Copied!
82
0
0

読み込み中.... (全文を見る)

全文

(1)

平成28年11月

秋田工業高等専門学校 環境都市工学科

助教  

長谷川 裕修

交通関連ビッグデータ活用に向けたデータの 前処理・クリーニングに関する研究

2014

-

11

(2)

(一財)日本建設情報総合センター研究助成事業

交通関連ビッグデータ活用に向けたデータの 前処理・クリーニングに関する研究報告書

平成

28

9

(3)

助成研究者紹介

ハセガワ ヒロノブ 長谷川 裕修

現職:秋田工業高等専門学校 環境都市工学科 准教授(博士(工学))

主要論文(審査付)

長谷川裕修,内藤利幸,有村幹治,田村亨:アンサンブル学習による交通機関選択モデルの構築とその評価,

土木学会論文集D3(土木計画学),Vol.68,No.5,pp.773-780 (2012)

HASEGAWA Hironobu, FUJII Masaru, ARIMURA Mikiharu, TAMURA Tohru: A Basic Study on Traffic

Accident Data Analysis Using Support Vector Machine,Journal of the Eastern Asia Society of Trans- portation Studies, Vol.7, pp.2873-2880 (2007)

長谷川裕修,藤井勝,有村幹治,田村亨:北海道発着貨物のグリ−ン物流戦略,交通学研究,Vol.50pp.219-228 (2007)

8編の審査付論文に加えて,国際会議・国内学会発表多数

(4)

目 次

I部 はじめに 1

1. 研究の背景と目的 1

2. 本報告書の構成 3

II部 データの読み込み 4

3. テキストデータの読み込み 5

(1) 固定長テキストデータの読み込み . . . . 5

(2) CSVデータの読み込み . . . . 5

4. Excelファイルの読み込み 9 III データの前処理・クリーニング 15 5. 欠損値への対応 16 (1) 欠損値の特定 . . . . 16

(2) 欠損値の補完 . . . . 18

a) 確率的回帰代入法. . . . 19

b) 完全情報最尤推定法 . . . . 20

(3) 欠損値の削除 . . . . 20

6. 連続データの離散化 22 (1) 等間隔区間による離散化 . . . . 22

(2) 等頻度区間による離散化 . . . . 24

(3) k-means法によるクラスタリング . . . . 27

(4) 離散変数のダミー化 . . . . 32

7. 次元削減 35 (1) 主成分分析による次元削減 . . . . 35

(2) k-means法による次元削減 . . . . 43

8. データの正規化 46 (1) データの平均が0,分散が1になるように正規化 . . . . 46

(2) データの最小値が0,最大値が1になるように正規化 . . . . 49

9. 標本抽出 52 (1) 単純無作為抽出法 . . . . 52

(2) 層別抽出法 . . . . 55

a) データフレームの操作による層別抽出 . . . . 56

b) subset()関数による層別抽出. . . . 58

IV部 おわりに 60

V 補遺 61

(5)

10.データフレームの操作 61

11.データの概要を確認 64

(1) データの列数・行数・要約 . . . . 64

(2) データの簡単な集計・図化 . . . . 65

12.付属Rスクリプトの実行方法 68 (1) RscriptAndData.zipの解凍 . . . . 68

(2) Rスクリプトを読み込む . . . . 68

(3) 作業ディレクトリを設定 . . . . 71

(4) データの読み込み . . . . 71

(5) ライブラリの読み込み . . . . 71

(6)

図 目 次

1 データマイニングによる知識発見プロセス . . . . 1

2 7時台の交通量分布 . . . . 23

3 EWDによって離散化した7時台の交通量分布 . . . . 25

4 EFDによって離散化した7時台の交通量分布 . . . . 26

5 非階層型クラスタリング結果. . . . 28

6 k-meansによって離散化した7時台の交通量分布 . . . . 30

7 7時台の交通量分布の離散化 . . . . 31

8 ダミー変数作成のイメージ図. . . . 32

9 固有値のスクリープロット . . . . 37

10 主成分分析のバイプロット . . . . 42

11 クラスタ別時間帯別交通量(クラスタ1–6) . . . . 44

12 クラスタ別時間帯別交通量(クラスタ7–12) . . . . 45

13 時間帯別交通量(台/時) . . . . 67

14 付属Rスクリプトおよびデータのディレクトリ構造 . . . . 68

15 WindowsRでのRスクリプトの文字化け . . . . 69

16 WindowsRstudioで開いたRスクリプト . . . . 70

表 目 次 1 sagamiharaデータ . . . . 8

2 平成22年度道路交通センサス一般交通量調査時間帯別交通量表(秋田県の一部を抜粋) . . . . 10

3 比較演算子・比較演算関数・論理演算子 . . . . 55

4 H22年度道路交通センサス 天候区分 . . . . 55

(7)

I

はじめに

1. 研究の背景と目的

近年,センサ技術の発達とデータ保存コストの低下を背景に,システムによって自動的に記録・蓄積されるデー タ(=ビッグデータ)の量的・質的な増加が加速している.交通分野におけるビッグデータとしては,公共交通機 関の乗降履歴を記録する交通系ICカードデータが代表的であるが,それ以外にもトラフィックカウンターによっ て断面交通量を記録するトラカンデータ,車両に積んだGPSや加速度計を用いて詳細な移動経路を取得可能なプ ローブデータなど様々な交通現象が時々刻々と記録されている.

これら増大し続ける交通関連ビッグデータからマーケティング・政策立案等における意志決定に有用な知識を発 掘するためには,データマイニングによる知識発見プロセス(=広義のデータマイニング)が必要となる(図–1

┠ⓗࢹ࣮ࢱ

๓ฎ⌮῭

ࢹ࣮ࢱ

ኚ᥮ᚋ ࢹ࣮ࢱ

ࣃࢱ࣮ࣥ

⋓ᚓ࣭㑅ᢥ

๓ฎ⌮

ࢡ࣮ࣜࢽࣥࢢ

ኚ᥮

ࣃࢱ࣮ࣥࡢⓎぢ ゎ㔘࣭ホ౯

▱㆑

ࢹ࣮ࢱ

図–1: データマイニングによる知識発見プロセス

(元田ら1)p.81.2を参考に筆者作成)

データマイニングプロセスのうち,データセットから頻出するパターンやルールを発見するパターンの発見は 狭義のデータマイニングとも呼ばれる中心的な過程であり,これまで筆者は交通関連データからのパターン発見 を目指した研究に取り組んできた2),3),4),5),6),7).また,国内外における交通関連データへのデータマイニング技術 適用事例の多くも,このパターン発見を主目的とするものであった(例えば,8),9),10),11)).

一方,パターン発見の前段階として行われるデータの前処理・クリーニングは,分析の一過程として,外れ値の 削除や変数変換,セグメント毎のデータ分割などが行われているものの,いずれも探索的に行われているのが実 情であり,交通分野において体系だった整理は行われていない.また,それぞれの論文等においてどのような前 処理・クリーニングが行われているかについては,紙幅の制約により詳しい説明は省略されることが多く,『科学 における再現性』という観点からも問題がある.

データの前処理・クリーニングは分析精度に大きく影響するだけでなく,増え続けるデータを現実的な計算時 間で取り扱うためにも重要である.交通関連データの持つ情報量の損失を抑えつつ,扱いやすい形に変換するた めには,統計や機械学習の知識・技術と共に,当該交通現象に関する領域知識が必要となる.

以上を踏まえて本研究では,交通系ビッグデータからの知識発見への応用を念頭に,交通関連データの前処理・

クリーニングの方法論を整理することを目的とする.

具体的には,オープンソースのデータ解析環境Rおよびその拡張パッケージを用いて,オープンデータとして

(8)

公開されているデータや,Web経由で簡単に入手可能な交通関連データへのデータの前処理・クリーニングの適 用例として整理を行った.

(9)

2. 本報告書の構成

本報告書は報告書本編と付属Rスクリプトからなる.

報告書本編の構成は以下の通りである.まず,第II部において,テキストデータとExcelファイルをRに読み 込む方法を説明する.次に,第III部において,読み込んだデータに欠損値がある場合の対応,連続データの離散 化,次元削減,データの正規化,標本抽出について説明する.最後に,第IV部において,本研究の成果と今後の 展望を述べる.なお,第V部に,Rの基本的な操作方法の説明と,付属Rスクリプトの実行方法をまとめている ので,Rに不慣れな読者の参考になれば幸いである.

本報告書はその性格上,本文とプログラムの記述が混在している.また,PDFファイル内にハイパーリンクを 多数設定している.これらはフォントの色や装飾,文書の装飾によって書き分けており,それぞれが意味すると ころは以下の通りである.

内部リンク

図へのリンク:図–1(p. 1)

脚注へのリンク:*1

部・章・節・項の見出しへのリンク:・III・5.・(2)・a) 参考文献へのリンク:2)

Rスクリプトへのリンク:Rスクリプト 2(p. 5)

外部リンク:日本建設情報総合センターホームページ

索引語:文末の索引に載っている語句は,本文中で索引語のように太字で表記されている.

引用文

引用元(文献名2)

引用文はこのように,ブロックの中に囲まれており,両端にスペースが入っている.引用元と なる文献名および末尾の参考文献へのリンクは右上にある.

Rスクリプト文法の説明:ただし,この記述方法はあくまでも文法の説明であり,実際にそのまま動くスク リプトではないことに注意されたい.

Rスクリプト1: Rスクリプト文法の説明

1 getwd( ) # 現 在 の 作 業 デ ィ レ ク ト リ を 表 示 2 q( ) # Rコ ン ソ ー ル を 終 了

3 # シ ャ ー プ 以 下 は コ メ ン ト と し て 扱 わ れ る . 4 i f( 0 ){

5 複 数 行 に 渡 る コ メ ン ト は

6 こ の よ う にi f( 0 ){}の 間 に 記 入 す れ ば 良 い

7 }

Rスクリプトの実行例:以下のように薄いグレーの背景となっているブロックがRスクリプトの実行例であ る.Rスクリプトとその実行結果からなり,実行結果は先頭に”$$”が追加されている.

# データの読み込み

data <- iris # Rに標準で組み込まれているirisデータセット

# 読み込んだデータを上から3行分表示 head(data, 3)

$$ Sepal.Length Sepal.Width Petal.Length Petal.Width Species

$$ 1 5.1 3.5 1.4 0.2 setosa

$$ 2 4.9 3.0 1.4 0.2 setosa

$$ 3 4.7 3.2 1.3 0.2 setosa

∗1本文を補足する記述は脚注に記載

(10)

II

データの読み込み

交通分野におけるデータの獲得・選択方法は以下の4パターンに類型化できる.

(a) 新規に調査を行う

(b) 既存の統計調査結果を用いる

(c) システムによって自動的に記録されたログデータを用いる(ビッグデータ)

(d) 既存データ同士の紐付けによって新たな属性を付加したデータを生成する(データフュージョン)

今後はセンサ技術の更なる発達やデータフュージョン技術の一般化によって,それぞれの交通現象を記述する 変数が増えていくことが予想され,データの前処理・クリーニング技術の重要性も増していくものと考えられる.

以下,獲得したデータをRにおいて読み込む方法を説明する.

Rは基本的にメモリ上にデータを展開して,逐次計算処理を行うため,数TB規模の超大規模データの分析に そのまま使うには適していない.プローブデータやトラフィックカウンターデータなどデータサイズが非常に大 きいものであれば,リレーショナルデータベースに格納した方が良い.また,システムによって自動的に記録さ れるログデータも通常,データベースに格納される.データベースとRを連携させるRODBCパッケージもあ るが,本報告書では扱わない.

交通分野において通常用いられる,パーソントリップ調査や交通事故調査データ程度*2であれば,Rに読み込 んで使用することで,データの前処理・クリーニング,その後の解析まで連続的・統一的に行うことができ,便利 である.

Rのインストール方法や基本的な取扱い方は,既に多くの書籍が刊行されている*3ので,そちらを参照された い.なお,Web上にも多くの有益な情報が公開されているが,通常の検索エンジンでは検索が難しい場合がある.

この場合は情報が集積されたRjpWikiR-Tipsを参照するか,seekRという検索エンジンを用いて検索すること が効率的である.

2マシンに登載しているメモリサイズにもよるが,筆者の経験では1GB程度までは問題ない.

∗3例えば,初学者向けとしては12),網羅的なものとしては13)など

(11)

3. テキストデータの読み込み

小規模なアンケート調査などであれば,Excelなどの表計算ソフトウェアを用いて結果をコード化し,そのまま 用いることが多いが,それ以上の規模(例えば,パーソントリップ調査や交通系ICカード履歴など)のデータで あれば,一度データベースに格納し,必要に応じてテキストファイルに書き出して用いることが多い.本節では テキストデータをRで読み込む方法について整理する.

Rに限らず,プログラムでテキストデータを読み込む際に一番多いトラブルは日本語などの非アスキー文字の 文字化けであるが,これは殆どの場合,データの入出力に際して文字エンコーディング指定が適切になされてい ないことで起きる.このようなトラブルに見舞われた際には,使用するテキストデータの文字エンコーディング を確認することを勧める.

(1) 固定長テキストデータの読み込み

固定長テキストデータの読み込みには,read.fwf()関数を使用する.なお,通常のWindows環境で作成し たテキストファイルをMacLinux環境で読み込む場合には,文字エンコーディングを指定する必要があり,

fileEncoding引数で”cp932”を指定する*4.各フィールドの文字数はwidth引数に数字ベクトルの形で与えて 指定する.その他の引数についてはhelp(read.fwf )を参照のこと.

Rスクリプト23つのフィールドを持ち,それぞれのフィールドの文字数が1, 3, 5文字からなる*5input.txt という名称の固定長テキストを読み込む際のRスクリプトを示す.

Rスクリプト2: read.fwf()関数による固定長テキストの読み込み

1 read.fwf(f i l e=” i n p u t . t x t ” , f i l e E n c o d i n g=” c p9 32 ” , wi dt h=c( 1 , 3 , 5 ) )

固定長テキストに限らず他のテキストデータでも同様だが,Rに比較的大規模なテキストデータを読み込む際に Rの標準関数*6を使用すると,多くの時間がかかる.一例として,筆者が過去の研究2),5)で使用した108.4MB の固定長テキストファイル*7read.fwf()関数で読み込むと,筆者環境では読み込みに3分以上かかる.一方,

readrパッケージが提供するread fwf()関数を用いると2秒弱で読み込みが終わる.

よって特別な理由がない限りはread fwf()関数を使う方が良いが,その際には (a) 引数の与え方が変わること

(b) 文字列が因子型(factor)ではなく,文字列型(character)として読み込まれること

(c) 文字エンコーディングの指定ができないため,非アスキー文字(日本語など)を含む場合にはあらかじめ文 字エンコーディングを使用する環境に適したもの*8に変更する*9必要があること

に注意が必要である.なお,readrパッケージは2015820日現在,CRANからダウンロード可能である.

Rスクリプト 3read fwf()関数による固定長テキストの読み込み例を示す.

Rスクリプト3: read fwf()関数による固定長テキストの読み込み

1 i n s t a l l.packages( ” r e a d r ” ) # r e a d r パ ッ ケ ー ジ が イ ン ス ト ー ル さ れ て い な い 場 合 2 l i b r a r y( r e a d r )

3 read fwf(f i l e=” i n p u t . t x t ” , fwf w i d t h s (c( 1 , 3 , 5 ) ) )

(2) CSVデータの読み込み

CSVcomma-separated valuesの略で,いくつかのフィールドをカンマ「,」で区切ったテキストデータのこ

とを指す.表形式で表現されるデータをやり取りする際に最も多く用いられるデータ形式である.

4Shift-JISCP932との関係はhttp://qiita.com/kasei-san/items/cfb993786153231e5413を参照

5一行当たり9文字(= 1 + 4 + 5)

6read.table()関数,read.csv()関数など

7 平成18年に札幌市およびその周辺市町村を対象として行われた第4回道央都市圏パーソントリップ調査結果を固定長テキストファイ ルとして保存したファイル.データは,目的トリップ毎に個人属性・トリップ属性・調査日など1レコード当たり162フィールド,全

233177レコードからなり,ファイルサイズは108.4MB

8Macや最近のLinuxであればUTF-8

9コマンドラインツールのnkfや文字エンコーディングを変更出来るテキストエディタ(VIM(Linux,Mac,Windows)やNotepad++

(Windows),Coteditor(Mac)など)を使う

(12)

RCSVを読み込むには,標準のread.csv()関数を用いるか,readrパッケージのread csv()関数を用い る.以下に相模原市オープンデータライブラリーにて公開されている,相模原市内の各駅における一日当たりの 平均乗降人員の推移(ファイル名jyoukou 20141111.csv,表–1(p. 8)参照)をread.csv()関数を使って読 み込む例を示す*10

# データの読み込み

sagamihara <- read.csv(file = "jyoukou_20141111.csv", header = TRUE, fileEncoding = "UTF-8")

# 列名の付け直し

colnames(sagamihara) <- c("路線名", "駅名", "1975年", "1980年", "1985年",

"1989年", "1993年", "1998年", "2003年", "2008年", "2009年", "2010年",

"2011", "2012", "2013")

# 読み込んだデータを表示 sagamihara

$$ 路線名 駅名 1975 1980 1985 1989 1993 1998

$$ 1 横浜線 橋本駅 31954 35144 44758 57466 88988 94680

$$ 2 横浜線 相模原駅 29144 31732 39784 48172 52430 52812

$$ 3 横浜線 矢部駅 6706 9516 11562 16974 20532 20384

$$ 4 横浜線 淵野辺駅 27228 32378 39840 52544 59198 58794

$$ 5 横浜線 古淵駅 NA NA NA 14802 30840 37590

$$ 6 横浜線 相原駅(参考) 6488 7812 11278 16058 20530 22174

$$ 7 横浜線 町田駅(参考) 54506 79366 119620 171478 195652 197638

$$ 8 相模線 南橋本駅 2536 2006 2316 4244 9536 10176

$$ 9 相模線 上溝駅 4526 4562 3292 4210 8686 9910

$$ 10 相模線 番田駅 1218 2334 1928 2766 4558 5490

$$ 11 相模線 原当麻駅 1874 2930 3126 4164 5834 6616

$$ 12 相模線 下溝駅 836 856 1082 1184 1572 1652

$$ 13 相模線 相武台下駅 700 794 808 1114 1532 1798

$$ 14 中央本線 相模湖駅 NA NA NA NA NA NA

$$ 15 中央本線 藤野駅 NA NA NA NA NA NA

$$ 16 中央本線 高尾駅(参考) NA NA NA NA NA NA

$$ 17 中央本線 八王子駅(参考) NA NA NA NA NA NA

$$ 18 小田急線 相模大野駅 83267 84879 87864 95594 106006 109717

$$ 19 小田急線 小田急相模原駅 48952 50881 54001 61564 63542 57429

$$ 20 小田急線 東林間駅 19818 20921 22554 25316 27219 24346

$$ 21 小田急線 町田駅(参考) 154831 197393 236259 281813 297703 279498

$$ 22 小田急線 相武台前駅(参考) 32405 36235 39880 44960 47728 44228

$$ 23 小田急線 唐木田(参考) NA NA NA 2944 9190 12845

$$ 24 京王線 橋本駅(京王) NA NA NA 33755 55492 67917

$$ 25 京王線 多摩境駅(参考) NA NA NA NA 2947 4464

$$ 2003 2008 2009 2010 2011 2012 2013

$$ 1 104522 118162 118098 120244 120482 122254 125510

$$ 2 53448 56370 55774 56158 55716 56566 57552

$$ 3 21220 22648 22348 22356 22646 22960 23594

$$ 4 72368 77154 78518 79600 78700 80870 74276

10この資料は以下の著作物を改変して利用しています. 相模原市駅別乗降人員の推移,相模原市,クリエイティブ・コモンズ・ライセンス 表示4.0

(13)

$$ 5 39480 42410 42404 42796 42626 43370 44614

$$ 6 21334 20330 20194 20422 20198 20392 20842

$$ 7 211864 216428 215598 218154 218084 221086 221880

$$ 8 9836 10886 10622 10622 10378 10426 10820

$$ 9 9798 11456 11206 11060 10702 11204 11600

$$ 10 5484 5980 6076 6388 6384 6630 7076

$$ 11 6890 8282 8266 8328 8266 8834 9030

$$ 12 1694 2002 1994 1968 2016 2128 2252

$$ 13 1856 2510 2404 2184 2070 2282 2406

$$ 14 6744 6914 6904 6746 6586 5118 5144

$$ 15 5898 5892 5742 5550 5382 5310 5352

$$ 16 65108 63334 61724 61034 59936 59766 60568

$$ 17 162546 164788 160546 160438 162948 165042 170382

$$ 18 108602 121338 119240 119166 120113 122453 128006

$$ 19 55944 55754 55392 55034 54366 55530 56767

$$ 20 22883 22176 21796 21422 21152 21420 21584

$$ 21 282772 291952 289622 290621 288884 291678 292779

$$ 22 41987 39977 39301 39160 37931 38110 38869

$$ 23 16037 19994 20539 21228 21096 21330 21719

$$ 24 78072 88320 88427 88065 87242 88377 91060

$$ 25 10727 16526 16678 17183 17184 17582 18471

以下,この操作によって読み込んだデータをsagamiharaデータと記す.sagamiharaデータはRの内部でデー タフレームと呼ばれる形式で保持されている.データフレームとはRにおける基本的なデータ形式であり,行列 形式のデータに行名と列名がつけられており,数値・因子・文字列など異なる型のデータが混在したまま扱える という特徴がある.データフレームの基本的な操作方法に関しては,V 10.(p. 61)を参照のこと.

1(次ページ)と読み込んだsagamiharaデータの出力を見比べると,1975年から1985年の古淵駅*11など,

表示されている値のいくつかにNAがあることが分かる.これは元のデータに値がない,すなわち欠損値である ことを表す.欠損値をどう取り扱うかについては5.(p. 16)を参照のこと.

∗111988年開業

(14)

–1:sagamiharaデータ 路線名駅名1975198019851989199319982003200820092010201120122013 1横浜線橋本駅319543514444758574668898894680104522118162118098120244120482122254125510 2横浜線相模原駅29144317323978448172524305281253448563705577456158557165656657552 3横浜線矢部駅670695161156216974205322038421220226482234822356226462296023594 4横浜線淵野辺駅27228323783984052544591985879472368771547851879600787008087074276 5横浜線古淵駅14802308403759039480424104240442796426264337044614 6横浜線相原駅(参考)648878121127816058205302217421334203302019420422201982039220842 7横浜線町田駅(参考)5450679366119620171478195652197638211864216428215598218154218084221086221880 8相模線南橋本駅25362006231642449536101769836108861062210622103781042610820 9相模線上溝駅4526456232924210868699109798114561120611060107021120411600 10相模線番田駅1218233419282766455854905484598060766388638466307076 11相模線原当麻駅1874293031264164583466166890828282668328826688349030 12相模線下溝駅83685610821184157216521694200219941968201621282252 13相模線相武台下駅7007948081114153217981856251024042184207022822406 14中央本線相模湖駅6744691469046746658651185144 15中央本線藤野駅5898589257425550538253105352 16中央本線高尾駅(参考)65108633346172461034599365976660568 17中央本線八王子駅(参考)162546164788160546160438162948165042170382 18小田急線相模大野駅83267848798786495594106006109717108602121338119240119166120113122453128006 19小田急線小田急相模原駅48952508815400161564635425742955944557545539255034543665553056767 20小田急線東林間駅19818209212255425316272192434622883221762179621422211522142021584 21小田急線町田駅(参考)154831197393236259281813297703279498282772291952289622290621288884291678292779 22小田急線相武台前駅(参考)32405362353988044960477284422841987399773930139160379313811038869 23小田急線唐木田(参考)294491901284516037199942053921228210962133021719 24京王線橋本駅(京王)33755554926791778072883208842788065872428837791060 25京王線多摩境駅(参考)2947446410727165261667817183171841758218471

(15)

4. Excelファイルの読み込み

Excel(エクセル)ファイルをRで読み込む方法としては,xlsxパッケージのread.xlsx()関数やXLConnect パッケージのreadWorksheetFromFile()関数を用いる方法がある.本節では,後者の方法について概略を紹介 する.読み込むデータは平成22年度全国道路・街路交通情勢調査(道路交通センサス)の調査結果のうち,秋田 県の時間帯別交通量表(ファイル名zkntrf05.xls)である.

元のエクセルファイルの一部を抜粋したものを表– 2(次ページ)に示す.

(16)

–2:平成22年度道路交通センサス一般交通量調査時間帯別交通量表(秋田県の一部を抜粋)

(17)

以下にreadWorksheetFromFile()関数を用いて読み込む例を示す.

# パッケージの読み込み

#install.packages("XLConnect") # パッケージがインストールされていない場合 library(XLConnect)

# データの読み込み

AkitaPT <- readWorksheetFromFile(file="zkntrf05.xls", # 読み込むファイルを指定 sheet = 1, # 読み込むシート番号を指定

header = TRUE, # 最初の行を列名として読み込むか否か startCol = 1, # シートの何列目から読み込むか指定 startRow = 7, # シートの何行目から読み込むか指定 endCol = 33 # シートの何列目まで読み込むか指定 )

# 列名を表示 colnames(AkitaPT)

$$ [1] "Col1" "Col2" "Col3" "Col4" "Col5" "Col6" "Col7"

$$ [8] "Col8" "Col9" "Col10" "Col11" "Col12" "Col13" "Col14"

$$ [15] "Col15" "Col16" "Col17" "Col18" "Col19" "Col20" "Col21"

$$ [22] "Col22" "Col23" "Col24" "Col25" "Col26" "Col27" "Col28"

$$ [29] "Col29" "Col30" "Col31" "X.." "X...1"

列名が自動的に付けられているが,ほとんどが連番で付いているだけなので,元のエクセルデータと同じにな るよう列名を付け直す.

# 列名を付け直す

colnames(AkitaPT) <- c("交通量調査単位区間番号", "道路種別",

"路線番号", "1224時間観測の別", "天候", "上り・下りの別",

"車種区分", "7時台", "8時台", "9時台", "10時台", "11時台",

"12時台", "13時台", "14時台", "15時台", "16時台", "17時台",

"18時台", "19時台", "20時台", "21時台", "22時台", "23時台",

"0時台", "1時台", "2時台", "3時台", "4時台", "5時台", "6時台",

"昼間12時間自動車類交通量", "24時間自動車類交通量")

読み込んだデータがどのような構造になっているかをstr()関数を使って確認する.

# データ構造を表示 str(AkitaPT)

$$ 'data.frame': 2272 obs. of 33 variables:

$$ $ 交通量調査単位区間番号 : num 10 10 10 10 20 20 20 20 30 30 ...

$$ $ 道路種別 : num 1 1 1 1 1 1 1 1 1 1 ...

$$ $ 路線番号 : num 1040 1040 1040 1040 1040 1040 1040 1040 1040 1040 ...

$$ $ 12・24時間観測の別 : num 2 2 2 2 2 2 2 2 2 2 ...

$$ $ 天候 : num 1 1 1 1 2 2 2 2 2 2 ...

$$ $ 上り・下りの別 : num 1 1 2 2 1 1 2 2 1 1 ...

$$ $ 車種区分 : num 1 2 1 2 1 2 1 2 1 2 ...

$$ $ 7時台 : num 89 43 102 118 88 49 79 112 73 39 ...

(18)

$$ $ 8時台 : num 135 60 160 99 119 57 132 106 96 39 ...

$$ $ 9時台 : num 136 63 155 75 134 61 154 79 111 52 ...

$$ $ 10時台 : num 138 70 200 56 121 64 172 50 110 61 ...

$$ $ 11時台 : num 135 76 185 76 138 81 157 59 114 66 ...

$$ $ 12時台 : num 147 83 133 72 108 78 137 59 93 68 ...

$$ $ 13時台 : num 130 81 139 60 125 69 123 70 119 58 ...

$$ $ 14時台 : num 165 68 148 45 162 75 127 43 142 59 ...

$$ $ 15時台 : num 198 67 142 38 167 68 147 40 151 57 ...

$$ $ 16時台 : num 206 75 150 50 208 65 132 40 183 40 ...

$$ $ 17時台 : num 196 55 162 47 168 50 136 45 135 43 ...

$$ $ 18時台 : num 146 54 128 49 134 48 135 41 130 39 ...

$$ $ 19時台 : num 111 64 104 53 94 66 95 38 78 51 ...

$$ $ 20時台 : num 47 81 70 50 41 79 73 50 42 68 ...

$$ $ 21時台 : num 25 52 40 28 29 36 35 30 32 26 ...

$$ $ 22時台 : num 31 56 45 70 30 68 37 54 27 71 ...

$$ $ 23時台 : num 22 71 22 74 14 57 24 81 15 52 ...

$$ $ 0時台 : num 12 35 15 82 12 29 18 73 13 25 ...

$$ $ 1時台 : num 9 34 5 86 7 46 9 79 6 39 ...

$$ $ 2時台 : num 5 32 8 76 8 21 8 74 7 20 ...

$$ $ 3時台 : num 6 28 7 82 5 29 7 85 5 26 ...

$$ $ 4時台 : num 13 22 17 106 8 25 13 88 6 21 ...

$$ $ 5時台 : num 22 36 22 137 22 36 19 134 24 33 ...

$$ $ 6時台 : num 65 45 56 114 57 35 51 120 51 28 ...

$$ $ 昼間12時間自動車類交通量: num 1821 795 1804 785 1672 ...

$$ $ 24時間自動車類交通量 : num 2189 1351 2215 1743 1999 ...

全ての列がnum,すなわち実数(numeric)であることが分かる.しかし,7時台–24時間自動車類交通量ま での列は実数で良いが,交通量調査単位区間番号–車種区分までの列は順序無し因子とすることが適切である.

順序無し因子への変換にはas.factor()関数を,順序あり因子への変換にはas.ordered()関数を用いる.

# 順序無し因子に変換

# 1列目の交通量調査単位区間番号から7列目の車種区分までの7 for (i in 1:7) {

AkitaPT[, i] <- as.factor(AkitaPT[, i]) # 順序無し因子で置き換え }

# データ構造を表示 str(AkitaPT)

$$ 'data.frame': 2272 obs. of 33 variables:

$$ $ 交通量調査単位区間番号 : Factor w/ 568 levels "10","20","30",..: 1 1 1 1 2 2 2 2 3 3 ...

$$ $ 道路種別 : Factor w/ 4 levels "1","3","4","6": 1 1 1 1 1 1 1 1 1 1 ...

$$ $ 路線番号 : Factor w/ 200 levels "2","3","4","7",..: 197 197 197 197 197 197 197 197 197 197 ...

$$ $ 1224時間観測の別 : Factor w/ 2 levels "1","2": 2 2 2 2 2 2 2 2 2 2 ...

$$ $ 天候 : Factor w/ 4 levels "1","2","3","6": 1 1 1 1 2 2 2 2 2 2 ...

$$ $ 上り・下りの別 : Factor w/ 2 levels "1","2": 1 1 2 2 1 1 2 2 1 1 ...

$$ $ 車種区分 : Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ...

$$ $ 7時台 : num 89 43 102 118 88 49 79 112 73 39 ...

$$ $ 8時台 : num 135 60 160 99 119 57 132 106 96 39 ...

(19)

$$ $ 9時台 : num 136 63 155 75 134 61 154 79 111 52 ...

$$ $ 10時台 : num 138 70 200 56 121 64 172 50 110 61 ...

$$ $ 11時台 : num 135 76 185 76 138 81 157 59 114 66 ...

$$ $ 12時台 : num 147 83 133 72 108 78 137 59 93 68 ...

$$ $ 13時台 : num 130 81 139 60 125 69 123 70 119 58 ...

$$ $ 14時台 : num 165 68 148 45 162 75 127 43 142 59 ...

$$ $ 15時台 : num 198 67 142 38 167 68 147 40 151 57 ...

$$ $ 16時台 : num 206 75 150 50 208 65 132 40 183 40 ...

$$ $ 17時台 : num 196 55 162 47 168 50 136 45 135 43 ...

$$ $ 18時台 : num 146 54 128 49 134 48 135 41 130 39 ...

$$ $ 19時台 : num 111 64 104 53 94 66 95 38 78 51 ...

$$ $ 20時台 : num 47 81 70 50 41 79 73 50 42 68 ...

$$ $ 21時台 : num 25 52 40 28 29 36 35 30 32 26 ...

$$ $ 22時台 : num 31 56 45 70 30 68 37 54 27 71 ...

$$ $ 23時台 : num 22 71 22 74 14 57 24 81 15 52 ...

$$ $ 0時台 : num 12 35 15 82 12 29 18 73 13 25 ...

$$ $ 1時台 : num 9 34 5 86 7 46 9 79 6 39 ...

$$ $ 2時台 : num 5 32 8 76 8 21 8 74 7 20 ...

$$ $ 3時台 : num 6 28 7 82 5 29 7 85 5 26 ...

$$ $ 4時台 : num 13 22 17 106 8 25 13 88 6 21 ...

$$ $ 5時台 : num 22 36 22 137 22 36 19 134 24 33 ...

$$ $ 6時台 : num 65 45 56 114 57 35 51 120 51 28 ...

$$ $ 昼間12時間自動車類交通量: num 1821 795 1804 785 1672 ...

$$ $ 24時間自動車類交通量 : num 2189 1351 2215 1743 1999 ...

以後,このデータをAkitaPTデータと記す.AkitaPTデータもsagamiharaデータと同様にデータフレーム形 式である.AkitaPTデータは2000行以上あるので,上から10行目までを抜粋して表示する.

# AkitaPTデータの行数を表示 nrow(AkitaPT)

$$ [1] 2272

# 読み込んだデータを上から10行表示 head(AkitaPT, 10)

$$ 交通量調査単位区間番号 道路種別 路線番号 12・24時間観測の別 天候

$$ 1 10 1 1040 2 1

$$ 2 10 1 1040 2 1

$$ 3 10 1 1040 2 1

$$ 4 10 1 1040 2 1

$$ 5 20 1 1040 2 2

$$ 6 20 1 1040 2 2

$$ 7 20 1 1040 2 2

$$ 8 20 1 1040 2 2

$$ 9 30 1 1040 2 2

$$ 10 30 1 1040 2 2

$$ 上り・下りの別 車種区分 7時台 8時台 9時台 10時台 11時台 12時台 13時台

$$ 1 1 1 89 135 136 138 135 147 130

参照

関連したドキュメント

Arandelovi´c, “On a fixed point theorem of Kirk,” Journal of Mathematical Analysis and Applications, vol.. J ´o´zwik, “On Kirk’s asymptotic contractions,” Journal of

Eskandani, “Stability of a mixed additive and cubic functional equation in quasi- Banach spaces,” Journal of Mathematical Analysis and Applications, vol.. Eshaghi Gordji, “Stability

The excess travel cost dynamics serves as a more general framework than the rational behavior adjustment process for modeling the travelers’ dynamic route choice behavior in

Patel, “T,Si policy inventory model for deteriorating items with time proportional demand,” Journal of the Operational Research Society, vol.. Sachan, “On T, Si policy inventory

In particular, we consider a reverse Lee decomposition for the deformation gra- dient and we choose an appropriate state space in which one of the variables, characterizing the

Hong: Asymptotic behavior for minimizers of a Ginzburg-Landau type functional in higher dimensions associated with n-harmonic maps, Adv. Yuan: Radial minimizers of a

We show that the average energy as well as the deviation around the average velocity for chaotic orbits for both the complete and simplified versions of the model exhibit

The scattering structure is assumed to be buried in the fluid seabed bellow a water waveguide and is a circular elastic shell filled with a fluid that may have different properties