Rによるデータ分析 | Excelによるデータ全体の可視化 | Pythonによるデータ全体の可視化

Rによるデータ全体の可視化

変数が複数ある時に、とりあえず全部を見てみるための方法です。 データの並び方が、時系列になっていれば、時系列解析になります。

質的変数はダミー変換して、この方法が使えるようにしています。 1列に3つのカテゴリが入っていれば、3列のデータが作られます。

下記の例では、X1〜X9という変数が量的変数で、X10という変数が質的変数です。

変数別の折れ線グラフ

変数別の折れ線グラフは、大きく分けると、1枚のグラフに重ね合わせる方法と、変数別にグラフを作る方法があります、 変数別にグラフを作る方については、下記の方法の場合、変数の数が多いと、グラフを描く時間が相当かかります。 PCによっては、フリーズするかもしれません。 Rでこのグラフをもっと手軽に使う方法を、筆者は見つけていません。
このグラフを使いたいのなら、Pythonにして、 PandasのPlot(matplotlib) を使ったり、 Excelのスパークライン を使った方が手軽です。

1枚のグラフに重ね合わせ

library(dummies) # ライブラリを読み込み
library(ggplot2)
# ライブラリを読み込み
library(tidyr)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
Data2$No <-as.numeric(row.names(Data2)) # 行番号を取得
Data_long <- tidyr::gather(Data2, key="Yno", value = Ys, -No)
# 縦型に変換(Noの列以外を積み上げる)
ggplot(Data_long, aes(x=No,y=Ys, colour=Yno)) + geom_line()
# 層別の折れ線グラフを描く
層別の折れ線グラフ

変数毎にグラフを分けるが、Y軸の範囲は合わせる

「nrow=1000」というのは、「縦に1000個の枠を作る」という指示で、カテゴリの数よりも多ければ1000でなくても良いです。
library(dummies) # ライブラリを読み込み
library(ggplot2)
# ライブラリを読み込み
library(tidyr)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
Data2$No <-as.numeric(row.names(Data2)) # 行番号を取得
Data_long <- tidyr::gather(Data2, key="Yno", value = Ys, -No)
# 縦型に変換(Noの列以外を積み上げる)
ggplot(Data_long, aes(x=No,y=Ys)) + geom_line() + facet_wrap(~Yno,nrow=1000)
# 枠を分けて折れ線グラフを描く

層別の折れ線グラフ

Y軸の範囲は、グラフ毎に変える

library(dummies) # ライブラリを読み込み
library(ggplot2)
# ライブラリを読み込み
library(tidyr)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
Data2$No <-as.numeric(row.names(Data2)) # 行番号を取得
Data_long <- tidyr::gather(Data2, key="Yno", value = Ys, -No)
# 縦型に変換(Noの列以外を積み上げる)
ggplot(Data_long, aes(x=No,y=Ys)) + geom_line() + facet_wrap(~Yno,scales="free",nrow=1000)
# Yの範囲の異なる折れ線グラフを描く

層別の折れ線グラフ

Y軸の範囲は、グラフ毎に変える。また、グラフの並べ方をソフトに任せる場合

library(dummies) # ライブラリを読み込み
library(ggplot2)
# ライブラリを読み込み
library(tidyr)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
Data2$No <-as.numeric(row.names(Data2)) # 行番号を取得
Data_long <- tidyr::gather(Data2, key="Yno", value = Ys, -No)
# 縦型に変換(Noの列以外を積み上げる)
ggplot(Data_long, aes(x=No,y=Ys)) + geom_line() + facet_wrap(~Yno,scales="free")
# Yの範囲の異なる折れ線グラフを大量に描く

層別の折れ線グラフ

ヒートマップ

データをそのままヒートマップ

library(dummies) # ライブラリを読み込み
library(heatmaply)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
heatmaply(Data2, Colv = NA, Rowv = NA)
# ヒートマップを作成
ヒートマップ

データを標準化してヒートマップ

各変数で、平均0、標準偏差1に 標準化 してから、グラフにします。 値が大きく異なる変数が入っている時に、それぞれの変数の様子がよく見えるようになります。

library(dummies) # ライブラリを読み込み
library(heatmaply)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
heatmaply(scale(Data2), Colv = NA, Rowv = NA)
# ヒートマップを作成
ヒートマップ

データを正規化してヒートマップ

各変数で、最小値0、最大値1に正規化してから、グラフにします。 効果は標準化と似ています。 質的変数が混ざっている場合は、こちらの方が0と1の出方が見やすいです。

library(dummies) # ライブラリを読み込み
library(heatmaply)
# ライブラリを読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data2 <- dummy.data.frame(Data)
# 質的変数はダミー変換
heatmaply(normalize(Data2), Colv = NA, Rowv = NA)
# ヒートマップを作成
ヒートマップ

拡大できる折れ線グラフ

Plotly を使うと、一部を拡大して見ることができます。 波形がたくさんあるような時系列データは、データが多いと波形がつぶれてわからなくなりますが、 任意の場所を拡大して見れるので便利です。 また、Plotlyは、動作が非常に軽いのも魅力です。

library(plotly) # パッケージの読み込み
setwd("C:/Rtest")
# 作業用ディレクトリを変更
Data <- read.csv("Data.csv", header=T)
# データを読み込み
Data$Index <-as.numeric(row.names(Data))
# 行番号を読み込み
plot_ly(Data, x=~Index, y=~Y, type = 'scatter', mode = 'lines')
# 折れ線グラフを描く(X軸は行番号)
データサイエンス教室