Rでデータ書き出し1(データ値の書き出し)


データ読み込み2」では、単純なデータセットをRに読み込んでプロットしてみました。今回は、ちょっとデータを増やしてみます。この辺からエクセルよりもパワフルだということが実感できるかもしれません。

前回の流れから、GDPデータを拾ってきます。今度は複数の国のデータを拾うことにします。ですので、データの出所は日本の統計局ではなく、国連のHPとなります。 

Source : National Accounts Main Aggregates Database

http://unstats.un.org/unsd/snaama/Introduction.asp

f:id:demacassette:20150119233405p:plain

 こんな画面なので、少々ひるみます。しかし、日本政府の統計局にも使用マニュアルがあり、活用を推奨しているような印象を受けますので安心しています、私は。

 

さて、ここにある各国のデータを用いて、自分の思い通りにデータを表現したいと思います。今回は、個人的に気になる6カ国を抽出し、まとめてプロットして表現します。もっと多くのデータを扱えるのがRの醍醐味ですが、ごちゃごちゃするのでこの辺にとどめておきます。例によって、いきなりコード紹介。

#各国のGDPデータを読み込み
GDP2 <- read.table("in_data/GDP_6.csv",sep=",",header=T)
GDP3 <- GDP2

#桁が大きいので10億で割る
GDP3[ ,2:7] <- GDP2[ ,2:7]/1000000000

 ここで、3行目のGDP3はなんなのかというと、全く同じデータ型で同じデータの変数を作っておくという作業をしています。その次の行で計算するためです。エクセルでいうところの同じシートをコピーするような作業に似ています。ちょっとした計算でもデータや計算が多くなってきたときに混乱を避けることなどにつながります。たぶん、ほかにもいい方法がありそうですが私はこの方法です。

そして、何と言ってもRの良さは、このように流れの中でいきなり変数を追加できるということです。CとかFortranとかだと、先頭行に戻って宣言しないと行けませんよね。 

はい、ここでもういっちょ確認作業。

> GDP3[1:5, ]
Year France Spain UK Japan China USA
1 1970 148.943 39.76460 129.730 209.071 91.03875 1075.9
2 1971 166.573 45.22170 146.737 236.155 98.05852 1167.8
3 1972 204.274 57.36473 168.604 312.738 111.58900 1282.4
4 1973 265.373 76.29541 190.279 424.891 136.07100 1428.5
5 1974 286.518 94.36021 205.552 471.643 141.52900 1548.8

これで、ちゃんと中身が計算されているか、データの方が崩れていないかなど確認していきます。

通常、確認したい変数を打ってエンターでいいのですが、データ量が多いとはみ出たりして全く確認できなくなります。そういったときに、GDP2[1:5, ]といった形で、「1行目から5行目までの前列を表示してくださいな」という指示をすることで、ざっとデータ型が間違っていないか確認できると思います。 

 

さらに、すでに紹介済みのmatplot, legend, titleでグラフ描きます。

#いきなりプロット
matplot(GDP2[ ,1],GDP3[ ,2:7],type="l",col=1:6,lty=1:6,xlab="year",ylab="GDP (*1E+9 US$)")
#凡例を表示
legend(1970,max(GDP3[ ,2:7]),colnames(GDP2)[2:7],col=1:6,lty=1:6)
#タイトルを表示
title(main="6 country GDP",sub="by d-cassette2")

すると、こんな図が出ますね。

f:id:demacassette:20150119232125j:plain

少々見にくいですが、何となく全体の傾向はわかります。アメリカの一人勝ち状態に中国が食いついてきた構図がよくわかります。その他の国は近年低迷中ですね。なんだか日本の成長率が低い低いとか言っているけど、世界的には普通なのでは?と思っちゃいます。

さて、ここで計算されたデータをファイルとして書き出します。計算されたと言っても、単に10の9乗で割っただけなのですが。。。ま、一応計算済みです。

データを書き出すコマンドは以下の通り

#データの書き出し
write.table(GDP3,"out_data/GDP_billion.txt",quote=F,col.names=colnames(GDP3),sep=",")

# quote=F : 値として書き出し
# append=F :上書きを許可
# sep="¥t":区切り文字指定(タブ区切り)

col.names= : 列名を指定 ex) c("year", "France", "Spain", ,,,)

 これで、指定のフォルダに指定のファイル名のデータが生成されます。エラーの多くは、フォルダがないよ!とかディレクトリがおかしいよ!だと思いますので、その辺りは要チェックです。区切り文字もいろいろ選べます。スタンダードなのは、カンマ(",")区切りやタブ("¥t")区切りですので、それだけで十分だと思います。

生成されたテキストファイルを開くと、

f:id:demacassette:20150119233135p:plain

こんな感じなので、まぁまぁイメージ通りです。基本的なデータ値の書き出し方法はこんなところです。

 

次回は、プロット図を画像として保存することをやってみます。

 

では、Good night ♪♪