0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【R】データの可視化(ヒストグラム)

Last updated at Posted at 2021-01-17

ヒストグラムの描き方

knitr::opts_chunk$set(warning = F,
                      message = F,
                      comment = "",
                      fig.align = "center",
                      fig.width = 8,
                      fig.height = 5)

使用するパッケージ

準備していないパッケージはinstall.packages("packge_name")でインストールする。

# 使用するパッケージ
library(tidyverse) # データの整形から可視化まで
library(magrittr) # パイプ処理を使いこなすせ!

# ggplot2 の theme をあらかじめ設定しておく
theme_set(theme_minimal(base_size = 15))

データの読み込み

今回使用するのは衆院選に出馬した各候補者のデータだ。

1996年から2017年までのデータが詰まっている。

data <- read_csv("./data/House_of_Councilors_1996_2017.csv") # 1996年~2017年までの衆院選データ

データ内の変数名を確認する

どんな変数があるか見てみよう。

names(data)

各変数が意味するものは以下のようになっている。

変数名 内容   備考
year 実施年  
ku 都道府県
kun 区域  
status 現職か否か 0 = 新人・元, 1 = 現職
name 名前
party 所属政党 ローマ字での略語
party_code 所属政党 数字で通し番号
previous 当選回数
wl 当落結果  0 = 落選, 1 = 当選, 2 = 復活当選
voteshare 得票率 単位: %
age 年齢
nocand 候補者数
rank 順位   
vote 得票数  
eligible 有権者数
turnout 投票率 単位: %
exp 選挙費用 単位: 円
expm 選挙費用  単位: 百万円
vs 得票割合 小数で表記
exppv 選挙費用 単位: 円(有権者一人当たりの選挙費用)
smd 当落 0 = 落選, 1 = 当選
party_jpn 所属政党  日本語

データの整形

今回は選挙費用(exppv)を使ってヒストグラムを描いていく。

ヒストグラムはデータの分布を確認するために使用する。

今回は選挙データを使用するので、各政党の選挙費用(exppv)の分布を可視化してみる。

data %<>% 
  select(year, party_jpn, exppv) %>% # 使用する変数を抽出
  filter(party_jpn %in% c("自民党", "民主党", "公明党")) %>% # 簡単のため、政党を絞る
  as.data.frame() %>% # 一応
  drop_na() # naを落とす

また、2005年の衆院選データを可視化することとする。

data_2005 <- data %>% 
  filter(year == 2005)

スタージェスの公式

階級の幅を決めるときに、スタージェスの公式というものを使うらしい...

# スタージェスの公式: k (階級の数) = 1 + log₂n (n = データ数)
bw <- round(1 + log2(count(data_2005)), 0) %>% as.integer()
bw
[1] 10

ヒストグラム

普通のヒストグラム

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_histogram(aes(y = ..density..), # ..density..で密度を出力する
                 binwidth = bw) + # 階級の数を設定する
  labs(x = "有権者1人あたりに使う選挙費用", # X軸のラベル名を変える
       y = "密度", # Y軸のラベル名を変える
       title = "選挙費用のヒストグラム") # グラフにタイトルを付ける

image.png

binの色を変える

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_histogram(aes(y = ..density..), 
                 binwidth = bw,
                 fill = "orange", # binの中の色を変える
                 color = "black") + # binの枠の色を変える
  labs(x = "有権者1人あたりに使う選挙費用", 
       y = "密度", 
       title = "選挙費用のヒストグラム") 

image.png

政党別に色を付ける

重なって見えずらいので、お勧めしない。

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_histogram(aes(y = ..density..,
                     fill = party_jpn), # party_jpnの値によって色を変える
                 binwidth = bw,
                 color = "black",
                 show.legend = F) + # show.legend = Fでlegendを非表示に
  labs(x = "有権者1人あたりに使う選挙費用", 
       y = "密度", 
       title = "選挙費用のヒストグラム") 

image.png

政党別に可視化

政党別に分布を見たいならば、こちらのほうが良い。

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_histogram(aes(y = ..density..,
                     fill = party_jpn), 
                 binwidth = bw,
                 show.legend = F) + 
  labs(x = "有権者1人あたりに使う選挙費用", 
       y = "密度", 
       title = "選挙費用のヒストグラム") +
  facet_wrap(~party_jpn) # party_jpnの値毎にヒストグラムを描く

image.png

密度曲線

普通の密度曲線

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_density(fill = "gray") + 
  labs(x = "有権者1人あたりに使う選挙費用", # X軸のラベル名を変える
       y = "密度", # Y軸のラベル名を変える
       title = "選挙費用の密度曲線") # グラフにタイトルを付ける

image.png

曲線の色を変える

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_density(fill = "orange", # 曲線の中の色を変える
               color = "black") + # 線の色を変える
  labs(x = "有権者1人あたりに使う選挙費用", 
       y = "密度", 
       title = "選挙費用の密度曲線") 

image.png

政党別に色を付ける

ヒストグラムと違い、alpha =を設定すれば見やすい。

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_density(aes(fill = party_jpn), # party_jpnの値によって色を変える
               alpha = .3,
               show.legend = F) + # show.legend = Fでlegendを非表示に
  labs(x = "有権者1人あたりに使う選挙費用", 
       y = "密度", 
       title = "選挙費用の密度曲線") 

image.png

政党別に可視化

こちらも見やすい。

scales = freefree_xfree_yを接待することでメモリを政党別に自動調整できる。

ただ、正確に比較する際には使わないことが多い。

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_density(aes(fill = party_jpn),
               show.legend = F) + 
  labs(x = "有権者1人あたりに使う選挙費用", 
       y = "密度", 
       title = "選挙費用の密度曲線",
       fill = "政党名") +
  facet_wrap(~party_jpn) # party_jpnの値毎に密度曲線を描く

image.png

ヒストグラムと密度曲線を一緒に表示

ヒストグラムで全体の分布を表示し、密度曲線で政党別を表示した。

data_2005 %>% 
  ggplot(aes(x = exppv)) +
  geom_histogram(aes(y = ..density..), 
                 binwidth = bw) +
  geom_density(aes(fill = party_jpn),
               alpha = .3) +
  labs(x = "有権者1人あたりに使う選挙費用",
       title = "選挙費用のヒストグラムと密度曲線",
       fill = "政党名") # fill = によって生成されたlegendの名前を変更

image.png


この記事のコードをまとめたものはGithubにあります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?