Rを利用して、時系列データを複数の折れ線グラフにプロットしてみたので、手順を記載しておきます。
Rのggplotというライブラリを利用します。
以下のような年別・都道府県別の人口を折れ線グラフにします。
データ元:
http://www.stat.go.jp/data/jinsui/2.ht
Rのコードだけ先に書いておきます。
#ライブラリ library(ggplot2) library(reshape2) #CSV読込 x=read.csv("***.csv") #データ整形(総数だけ抽出) y=seq(5, 143,3) x_sum=x[y,] #id列を付与 x_sum<-cbind(1:nrow(x_sum), x_sum) colnames(x_sum)[1]<-"id" #縦のデータに変換 df<-melt(x_sum, id.var<-"id") #最初の188行は余計なデータなので除く df_c<-df[189:nrow(df),] #value列を数値に変換 df_c$value<-as.integer(df_c$value) #ggplot折れ線 gg<-ggplot(df_c, aes(x=variable, y=value, group=id)) gg <- gg+geom_line() plot(gg)
結果が以下の通り(汚いけど)。縦軸が人口、横軸が年(1884年〜2009年) です。
各コードの意味を説明してきます。
ライブラリの呼び出し
#ライブラリ library(ggplot2) library(reshape2)
ggplotを利用するために、ggplot2を呼び出しています。
reshape2を呼び出しているのは、後述するmelt関数を利用するためです。ggplot自体とは関係が無いですが、呼び出しておきましょう。
CSVファイルの読込と、データ整形
#CSV読込 x=read.csv("/home/shuhei/デスクトップ/調査/人口/population_3.csv") #データ整形(総数だけ抽出) y=seq(5, 143, 3) x_sum=x[y,]
CSVファイルを読み込みます。その後、グラフ化するために男女人口の行を除いたり、余計なヘッダ情報を除いています。データ整形は今回のメインではないので詳細は省きますが、以下のようなイメージです。
id列を付与
#id列を付与 x_sum<-cbind(1:nrow(x_sum), x_sum) colnames(x_sum)[1]<-"id"
後続の処理で必要になるので、"id"列を付与します。以下のようなイメージ
クロス型から縦型のデータに変換
#クロス型から縦型のデータに変換 df<-melt(x_sum, id.var<-"id")
ここで、melt関数を利用して、クロス型のデータを縦型に変換します。最初に呼び出したreshape2 もこのためです。
縦型にするのは、ggplotを利用するのにそのほうが都合がいいからです。
以下のようなイメージ。
データ整形
#データ整形(最初の188行は余計なデータなので除く) df_c<-df[189:nrow(df),]
最初の188行に余計なデータが混ざっていたので、削除。本質的な処理ではありません。
value列を数値に変換
#value列を数値に変換 df_c$value<-as.integer(df_c$value)
なぜか、value列(人口)が文字列型になっていたので、数値型に変換しています。CSVファイルでは数値型になっているのに、なぜ文字列型で読み込まれたのか・・・よくわからない。
折れ線グラフの描画
#ggplot折れ線 gg<-ggplot(df_c, aes(x=variable, y=value, group=id)) gg <- gg+geom_line() plot(gg)
一行目で、プロットするデータを定義しています。x軸にvariable(年)、y軸にvalue(人口)を設定。
さらに、引数「group」で、idの値ごとに系列(北海道、青森、岩手、秋田・・・)を作成するように指定しています。
二行目の「geom_line()」は「折れ線グラフで描画します」という関数です。
三行目でグラフ表示。
まとめ
以上でした。データを扱う際は、やっぱりデータ整形がめんどくさいです。