シュンカの日記

基本的に書きたいことを書いていくスタイル。

ggplotを利用した複数折れ線グラフの作成[R]

【スポンサーリンク】

Rを利用して、時系列データを複数の折れ線グラフにプロットしてみたので、手順を記載しておきます。

Rのggplotというライブラリを利用します。


以下のような年別・都道府県別の人口を折れ線グラフにします。
f:id:nukano0522:20161103130128p:plain


データ元:
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年) です。
f:id:nukano0522:20161103130340p:plain

各コードの意味を説明してきます。

ライブラリの呼び出し

#ライブラリ
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ファイルを読み込みます。その後、グラフ化するために男女人口の行を除いたり、余計なヘッダ情報を除いています。データ整形は今回のメインではないので詳細は省きますが、以下のようなイメージです。
f:id:nukano0522:20161103130617p:plain

id列を付与

#id列を付与
x_sum<-cbind(1:nrow(x_sum), x_sum)
colnames(x_sum)[1]<-"id"

後続の処理で必要になるので、"id"列を付与します。以下のようなイメージ
f:id:nukano0522:20161103130645p:plain

クロス型から縦型のデータに変換

#クロス型から縦型のデータに変換
df<-melt(x_sum, id.var<-"id")

ここで、melt関数を利用して、クロス型のデータを縦型に変換します。最初に呼び出したreshape2 もこのためです。
縦型にするのは、ggplotを利用するのにそのほうが都合がいいからです。
以下のようなイメージ。
f:id:nukano0522:20161103130735p:plain

データ整形

#データ整形(最初の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()」は「折れ線グラフで描画します」という関数です。

三行目でグラフ表示。

まとめ

以上でした。

データを扱う際は、やっぱりデータ整形がめんどくさいです。