2015年4月7日火曜日

つまずかないR言語入門(時系列について、その2)

前回までで、東京の1876年からの気温の変化を時系列オブジェクトtsを
使用して、平均気温の変化をプロットすることまで出来た。

ところで、Rをインストールした時に、UKgasといって、1960年から1986年
までのイギリスのガス消費量を四半期ごとに記録したデータが付随してくる。

> UKgas
と入力すると

 
Qtr1Qtr2Qtr3Qtr4
1960160.1129.784.8120.1
1961160.1124.984.8116.9
1962169.7140.989.7123.3

以下省略

と表示され、

> class(UKgas)
[1] "ts"
として、属性が時系列であることが判る。

> ts.plot(UKgas)
とすると、

ここで、疑問が起きる。

R付随のUKgasは、四半期単位(frequency=4)という条件で、グラフ化しても、
上記のように、Qtr単位で表示されている。

ところが、東京の平均気温を各月単位(frequency=12)で、時系列データとして
グラフ化しても、エラーが出て、出力できない。
平均気温単体なら、各年度ごとにグラフ化できるのはわかったが、UKgasのデータ
と同じように、月単位での出力ができないのはなぜか。

全然勉強たりないと痛感。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年4月3日金曜日

つまずかないR原語入門(時系列データの処理について)

前回までで、、国土交通省気象庁の過去の気象データを使用して、年間平均気温と、
各月の平均気温をapplyというコマンドで求めることが実証できた。

今回は、同じ気象データをつかって時系列の処理にトライしてみる。

Rでは時系列データの操作・分析用には何種類かのアプローチがある
ようだが、今回は時系列データをts(time seriesの略)オブジェクトという
形式で扱うことにした。
tsオブジェクトを生成するには、tsコマンドを使う。
明治からの東京の平均気温を再度求めてみる。

>b<-read.table("kion_b.txt",header=TRUE)
変数bに、1876年からの各月単位の気温を代入。
>year.means<-apply(b,1,mean)
applyコマンドで、各年の平均気温をもとめ、year.meansという変数に代入。
次に、これをtsオブジェクトとして生成する。
frequencyとは周期が1年単位であることによる。

>year.means.ts<-ts(year.means,frequency=1)
スタート年を明示するため、start=c(1876)として、グラフを描かせる。
>plot(year.means.ts<-ts(year.means,start=c(1876),frequency=1),ylab="temperature")

こうしてみると、ヒートアイランド現象と、地球温暖化の影響で
1960年以降、急激に東京の平均気温が上がっていることが、可視化できる。

本当は、各年の1月~12月と翌年の1月~12月以下同様と、連続して
描画したかったのだが、勉強不足で、そこまでたどり着きませんでした。

Rは奥が深い。でも深いから面白いし、勉強しがいがあるというものだ。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年4月2日木曜日

つまずかないR言語入門(applyの続き)

前回は、国土交通省気象庁の過去の気象データを使用して、
明治9年からの各月の平均気温から年間平均気温を算出するのに、applyを 使った。
表計算でいう、行単位の計算になる。

では、列単位の計算方法は。
列の場合は、applyの2番目の引数を2に帰るだけで実行できる。

> b<-read.table("kion_b.txt",header=TRUE)
> year2.means<-apply(b,2,mean)
> year2.means

janfebmaraprmayjun
4.1244604.764027.85251813.39136717.68705021.185612
julaugsepoctnovdec
25.02014426.41007222.77697816.96402911.6165476.599281

次回以降、時系列の見方について試行しようと思います。
----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年4月1日水曜日

つまずかないR言語入門(関数applyをつかったプログラム。applyは使い勝手が良い)

前回、R言語でのプログラミングの試行をしてみた。
今回は、「apply」をつかったプログラミングを試してみた。
データを持ってくるのに、著作権の問題などありそうなので、
国土交通省気象庁の過去の気象データが公開されていたので、
そこから、東京の日平均気温の月平均値(℃)の数値を使わせてもらうこととした。
データはなんと1876年(明治9年)から、途切れなく記録 されている。
気象庁の歴史によれば、 1875年明治8年6月1日から、東京府第2大区(のち赤坂区)
溜池葵町内務省地理寮構内で 気象業務を開始(気象庁の前身東京気象台)、
地震観測と1日3回の気象観測を開始。 とあるので、丁度その翌年明治9年からデータがあるのも納得できる。
日本人て、几帳面で、江戸時代からわずか8年で、このような記録をのこしていたとは
驚きと、賞賛の気持ちになる。
閑話休題。
気温データをコピーして、メモ帳に貼り付けます。
この際、以前も言い訳しましたが、ヘッダー行の漢字が面倒なので、
1月→jan、2月→feb以下同様としています。
また、applyの効果を確かめやすくするので、元データから年の値(平均値) を、
手作業で削除しています。 こうして手を加えたデータを、"kion_b.txt"として、
作業フォルダーに 格納します。
Rを立ち上げて、
> b<-read.table("kion_b.txt",header=TRUE)

として、138年間×12ヶ月分の各月の平均気温を
変数bとして格納します。

次に、
> year.means<-apply(b,1,mean)

これで、year.means というベクトルに 138年間の年間平均気温が計算され格納されます。
apply に渡す最初の引数はデータフレーム(この場合b)です。
2番目の引数 1 は、一行ごとにまとめて関数に渡すことを意味します。
3番目の引数は関数名で、この場合は 平均値を求めるための"mean" です。
実際に、どうなっているかというと。

> head(year.means)

187618771878187918801891
13.5750013.9666713.6250014.4333313.8916713.59167
と表示されてます。

apply関数は使いこなすとかなり便利だと思います。

次回は、縦方向の列の計算を試行してみます。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月30日月曜日

つまずかないR言語入門(ファイルの読み、書き、簡単なプログラム)

オープンデータの読込について、何回か繰り返し実施した。

readはなんとなく慣れてきた。
先頭行に列名があり、区切り文字がスペースの場合は
read.table("filename.txt",header=TRUE)
execelなどから変換した際によく使うcsv形式は
read.csv("filename.csv",header=TRUE)はread.table("filename",header=TRUE,sep=",")と同じ。
TAB区切りの場合は、
read.delim("filename.txt")はread.table("filename",header=TRUE,sep="\t")と同じ意味になる。

ではRで処理した結果を、ファイルに書き出す方法は
どうするのか?
例えば、

> g<-c(1,2,2,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6)
> g
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6
> write(g,"testfile,txt",ncolumns=1)
>
とすると、Rの作業フォルダーにtestfile.txt名で
ファイルが保存されているはずです。

さて、すこし進んで、簡単なプログラム構文の例を考えたい。
while文である。
while分は与えられた条件が成立している間、与えられた手続きを
繰り返す構文となっている。

例として、
初期値を1として、xが10になるまで1行に書くとすると、
> x<-1
> while(x<=10)
+ {print(x);x<-x+1}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
>
こんなふうになる。

同様に、1から11までの奇数を一行に記述するには

> f<-1
> while(f<=11){print(f);f<-f+2}
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9
[1] 11

という感じで直感的に理解出来る内容だ。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月28日土曜日

つまずかないR言語入門(板橋区商業施設で駐車場の有無について考察)

前回、板波区の商業施設で、駐車場の有無は、売上をt検定を用いて検定したが、
(p>0.05)となり有意差は認められなかったとした。

では、同様に駐車場の有無は、従業員一人あたり売上に差を生むのか。
Rを使って、t検定までやってみます。

> x<-read.table("attach_20.csv",sep=",",header=TRUE,row.names=1)
> n<-c(x$sales_n/x$employee_n)
> p<-c(x$sales_p/x$employee_p)
箱ひげ図を見てみると

> boxplot(p,n,names=c("parking","noparking"))

となりました。

となりました。
t検定を進めます。
> t.test(p,n,var.equal=T)

Two Sample t-test

data: p and n
t = 0.299, df = 52, p-value = 0.7661
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-4.262274 5.754990
sample estimates:
mean of x mean of y
15.61962 14.87326

となり、検定結果としてはt検定を用いて検定したが、
(p>0.05)となり、有意差は認められなかったとした。

売上高同様に、従業員一人あたりの売上も、駐車場の有無による有意差は
認めらなかったということでした。

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------

2015年3月26日木曜日

つまずかないR言語入門(t検定)

自分自身のスキルアップを大きな目的にしているので、行きつ戻りつして
まだるっこしいところがあるのはご容赦ください。

さて、前回、例えば駐車場がある店舗数とそうでない店舗数を比較しました。
箱ヒゲ図では、

となりました。
では、駐車場のある店舗とない店舗数の平均値の差の検定(t検定)を行ってみたいと
思います。

> t.test(x$shop_n,x$shop_p,var.equal=T)

Two Sample t-test

data: x$shop_n and x$shop_p
t = 3.7, df = 54, p-value = 0.0005067
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
42.14835 141.85165
sample estimates:
mean of x mean of y
107.35714 15.35714
t値=3.7 自由度54、p値=0.0005057

帰無仮説として、平均値における真の差は0である。
p値が有意水準1%以下を下回っているので、帰無仮説を棄却
することが妥当という結論になる。

砕けていうと、板橋区の商業施設の駐車場のある店と、ない店の平均数は有意差が
あるということになる。
板橋区の商業施設は、平均的には駐車場を必要としない、商店街が並んでいるような
イメージなのかもしれない。
では、駐車場のある、無しで平均売上に有意な差があるかを検討してみる。

> t.test(x$sales_n,x$sales_p,var.equal=T)

Two Sample t-test

data: x$sales_n and x$sales_p
t = 1.0512, df = 54, p-value = 0.2978
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3586.677 11493.534
sample estimates:
mean of x mean of y
9314.786 5361.357

t値=1.0512 自由度54、p値=0.297
帰無仮説として、平均値における真の差は0である。
p値が有意水準約29%という結論になり、帰無仮説を棄却できない、つまり
板橋区の商業施設の駐車場のある店と、ない店の平均売上高は有意差が
ないということになる。

箱ヒゲ図で見てみると、

なんだか、腑に落ちない結論(ほんまかいな?)ではあるが、微力な筆者がRを使った結果ではある。
勉強たりないな!

----------------------
スマートテクノロジーネットワークのホームページはこちら
----------------------