はじめに
UCI 機械学習リポジトリのReal estate valuationデータについて基礎分析を行ったので、そのまとめをつらつらと書いていく。データの加工は行わずに基礎統計量の算出と可視化を行っていく。
データの読み込みと概要の確認
xlsxのデータを読み込み、その概要をstr
関数でチェックする。ついでに必要なパッケージを読み込んでおく。
コード
library(openxlsx)
library(dplyr)
library(ggplot2)
library(GGally)
df <- read.xlsx("./Real_estate_valuation_data_set.xlsx")
str(df)
出力
'data.frame': 414 obs. of 8 variables:
$ No : num 1 2 3 4 5 6 7 8 9 10 ...
$ X1.transaction.date : num 2013 2013 2014 2014 2013 ...
$ X2.house.age : num 32 19.5 13.3 13.3 5 7.1 34.5 20.3 31.7 17.9 ...
$ X3.distance.to.the.nearest.MRT.station: num 84.9 306.6 562 562 390.6 ...
$ X4.number.of.convenience.stores : num 10 9 5 5 5 3 7 6 1 3 ...
$ X5.latitude : num 25 25 25 25 25 ...
$ X6.longitude : num 122 122 122 122 122 ...
$ Y.house.price.of.unit.area : num 37.9 42.2 47.3 54.8 43.1 32.1 40.3 46.7 18.8 22.1 ...
統計量の算出
summary
関数でも出力できるが標準偏差などが無いので、その項目を作っていく。
コード
classes <- df %>% summarise_all(class) %>% t()
classes
出力
[,1]
No "numeric"
X1.transaction.date "numeric"
X2.house.age "numeric"
X3.distance.to.the.nearest.MRT.station "numeric"
X4.number.of.convenience.stores "numeric"
X5.latitude "numeric"
X6.longitude "numeric"
Y.house.price.of.unit.area "numeric"
No まで numeric 判定になっていることが気になるが、まぁ大きく支障はないと考え次に進める。全変数がnumericなので、特にフィルタもかけることなく統計量を計算していく。
コード
means <- df %>% summarise_all(mean) %>% t()
vars <- df %>% summarise_all(var) %>% t()
sds <- df %>% summarise_all(sd) %>% t()
qs <- df %>% summarise_all(quantile) %>% t()
colnames(qs) <- c("min", "q14", "median", "q34", "max")
is.nas <- df %>% is.na %>% as.data.frame %>% summarise_all(sum) %>% t()
is.not.nas <- nrow(df)-is.nas
Statistics <- data.frame(
classes=classes,
is.nas=is.nas,
is.not.nas=is.not.nas,
means=means,
vars=vars,
sds=sds,
qs
)
write.csv(x=Statistics, file="summary.csv")
これで統計量をsummary.csv に出力した。エクセルで表を少し直すとこんな感じになる。
pairplot の作成
各項目の相関、散布図、ヒストグラムを確認するためpairplotを作成する。これも関数で1行で実装できる。非常に便利。
ggpairs(df)