2017年8月6日日曜日

R言語:starwarsキャラの身長や年齢をdplyrで加工してggplot2する。

「dplyr」パッケージのヘルプを調べていたら「starwars」キャラクターの属性データセットなるものが組み込まれていたのでggplot2によるグラフ化までやってみました。

最終的には、こんなグラフを作ります。


実施環境については、以下の通りです。
・MacBook Air(CPU:1.6GHz,Memory 8GB)
・macOS Sierra ver10.12.3
・RStudio ver 1.0.136
・分析データ:こちらから各自調達してください


「starwars」データセットを「dplyr」でいじってみよう。


■そもそも「dplyr」ってなに?
「R界の神様」「羽鳥」こと、「Hadley Wickham」さんが作ったR環境におけるデータ加工(manipulation)パッケージです。

■実際の手順
「starwars」データセットの読み込み準備が出来た前提で記載します。

# イストール済みの下記パッケージをロードします。
library(dplyr)
library(ggplot2)

# 一応、データセットの中身を確認します。
View(starwars)

スターウォーズシリーズに登場した各キャラクターの属性情報が表示されます。
本当にどこまで合っているかは不明ですが(笑)、身長(height)や種族(species)などのカラムが遊べそうですね。


# 「filter」で「Human」に該当するレコードを抜き出して、dplyrのパイプで渡して「name」と「height」列だけ抜き出して、「arrange」で「height」を降順でソートします。
# 最後の「filter(complete.cases(.))」は「欠損値」レコードの除去です。ローグ1のキャラデータの身長データは欠損してたので。
human_height <- starwars %>%
filter(species == "Human") %>%
select(name,height) %>%
arrange(desc(height)) %>%
filter(complete.cases(.))

# 一旦、データ内容を確認します。
View(human_height)

欠損値を含むレコードを除いた各キャラクターの身長データが降順で表示されます。


最後に、ggplot2でグラフ化します。

# 「reorder」関数は降順ソートをかける役割なので、上記でソート済みなら不要です。
# coord_flip()はX軸とY軸を入れ替えます。これ便利っす。
p <- ggplot(human_height, aes(x=reorder(name,height), y=height)) +
geom_bar(stat = "identity", fill="grey") +
theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +
coord_flip()

p + geom_text(aes(label = height), size = 3, hjust = 0.5, vjust = 3, position = "stack")

これだけの処理で「スターウォーズに登場する人間キャラクターの身長順位」がフォースと共にあなたの手にっ!
「ダースベーダー」って2メートル以上あるんですね。


ちなみに、先ほどのコードの「Human」を「Droid」に差し替えると、一瞬で「ドロイドの身長グラフ」が出力可能です。
こういう部分がRの便利なところですねぇ。


 「birth_year」データも面白そうだったので、先ほどのコードを流用してみました。

birth_year.list <- starwars %>%
select(name,birth_year) %>%
arrange(desc(birth_year)) %>%
filter(complete.cases(.))

p <- ggplot(birth_year.list, aes(x=reorder(name,birth_year), y=birth_year)) +
geom_bar(stat = "identity", fill="grey") +
theme_bw(base_size = 10, base_family = "HiraKakuProN-W3") +
coord_flip()

p + geom_text(aes(label = birth_year), size = 3, hjust = 0.5, vjust = 3, position = "stack")

ヨーダ、896歳(笑)


以上です。

R関連エントリー


RESASの不動産取引データでheatmapを作ってみた。
http://sapporomkt.blogspot.jp/2017/05/resasheatmap.html 

RESASデータを「IBM Data Scientist Workbench」でゴニョゴニョしてみた。
http://sapporomkt.blogspot.jp/2017/05/resasibm-data-scientist-workbench.html

ggplot2でクロス集計的に複数グラフをプロットする方法
http://sapporomkt.blogspot.jp/2016/11/ggplot2.html

R開発環境が無料で簡単導入!「Data Scientist Workbench」を使ってみた。

http://sapporomkt.blogspot.jp/2016/10/rdata-scientist-workbench.html

(Bluemix)知ってた?dashDBってTwitter分析にもツカエルのさ(+ちょっとだけコンサドーレ調べ)
http://sapporomkt.blogspot.jp/2016/07/bluemixdashdbtwitter.html

RMeCabで形容詞の形態素解析をやってみた。
http://sapporomkt.blogspot.jp/2016/07/rmecab.html

【R言語】今年は、leafletでマップをグリグリしたい。
http://sapporomkt.blogspot.jp/2016/01/rleaflet.html

(R言語)当ブログアクセス者の興味関心事をコレポン(コレスポンデンス)した。
http://sapporomkt.blogspot.jp/2015/12/r.htm

0 件のコメント:

コメントを投稿