R packageslibrary(DT)
library(gapminder)
library(gghighlight)
library(ggrepel)
library(stargazer)
library(tidyverse)| 間違い箇所 | ||
|---|---|---|
| 正しいコード | install.packages("tidyverse") | 
|
| 誤ったコード | install.package("tidyverse") | 
package → packages | 
| 誤ったコード | install.packages(tidyverse) | 
tidyverse → "tidyverse" | 
| 誤ったコード | install.packages ("tidyverse") | 
( 前の半角スペース | 
| 誤ったコード | install.packages("tidiverse") | 
tidiverse → tidyverse | 
Console に入力していないためConsole ではなく Rmd
ファイルのチャンクの中に入力してしまうことがよくあるinstall.packages("パッケージ名") はConsole
に入力するCRAN に置かれていないため」jpndistrict
というパッケージをコンソールでインストールする際に出てくるのがこのエラーメッセージConsole に打ち込んで Github
からダウンロードするinstall.packages("remotes")
remotes::install_github("uribo/jpndistrict")rnaturalearth
というパッケージをインストールする際には、rnaturalearth
を作動させるために必要な他のパッケージも同時にインストールしてみる正確に入力する
インストールするコマンドに dependencies = TRUE
を加える
install.packages("rnaturalearth", dependencies = TRUE)csvファイルが読み取れないcsv ファイル自体が「壊れている」場合csv
ファイルがきちんと開けるかどうか確認してみるcsv ファイルの破損を修理するcsv ファイルのエンコードが UTF-8
でないcsv ファイルのエンコードを UTF-8
に指定して保存し直すcsv
ファイルが「Rプロジェクト」内に保存されていないcsv ファイルを「Rプロジェクト」内に保存する・Step 1:
install.packages("パッケージ名")
・Step 2: library(パッケージ名) もしくは
library("パッケージ名")
DT というパッケージを使うためには、次の 2
ステップが必要| 入力コード | 入力するところ | 入力後の処置 | |
| Step 1 | install.package("DT") | 
Console | 
リターンキーを押す | 
| Step 2 | library(DT) | 
Rmd ファイルのチャンクの中 | 
knit する | 
df1 という名前のデータフレームを使って
DT というパッケージの datatable()
という関数を使う場合★ 次の 2 行をチャンクに打ち込む
library(DT)
datatable(df1)★ 次の 1 行をチャンクに打ち込む
DT::datatable(df1)パッケージ間のコンフリクトの解説
・例えば、tidyverse
というパッケージをインストールしロードすると次のように表示される
library(tidyverse)メッセージの意味:
・tidyverse パッケージをロードすると、同時に 8
つのパッケージがロードされる   ・tidyverse
パッケージは filter() と lag() という 2
つの関数とコンフリクト(=エラー)を起こす
→
filter()関数を使う際、エラーを避けるため次のようにコマンドを入力する必要がある
filter() → dplyr::filter()
RStudio
を使ってデータ分析する上で重要なのは「R
プロジェクトをつくること」
「R プロジェクトをつくること」= 「R プロジェクトフォルダを作ること」
「フォルダ」とは「ディレクトリ」のこと
正しい「作業ディレクトリ
(working directory)」の中で作業しないとエラーになる
この「作業ディレクトリ」= 「フォルダ」の中には分析に必要な複数の「ファイル」が入っている
RStudio
は分析に必要な「ファイル」を、指定された「Rプロジェクトフォルダ」(=
作業中のディレクトリ)から引き出す
→ R プロジェクトをつくらないと「エラーを起こす確率が高くなる」
自分がどの「フォルダ」の中で作業しているか(= どの「ディレクトリ」の中で作業しているか)を確かめる方法
次のコマンドで確かめることができる
getwd()  # get working directry の略  [1] "/Users/asanomasahiko/Dropbox/statistics/class_materials"
working directory
にはデータ分析に必要なファイル(データや scriptなど)
を保存するので、常に確認しておくこと
エラーが出た特に getwd()
で自分が「どこで作業しているのか」をチェックする
もし、自分が作成した R プロジェクトフォルダの中にいない場合は、R
プロジェクトフォルダの中にある「.Rproj」で終わるアイコンをダブルクリックする
RStudio
では、分析テーマごとに新たなプロジェクトを作成するのがよい
→ いちいち getwd()
でチェックしなくても、確実にデータを読み込んでくれる
→ エラーが少なくなる
File から New Project
を選び、指示に従って作成すると、RProject は
project folder を自動的に working directory
だと認識する
RStudio 右画面下部画面にある File
をクリックすると、作成した RProject
フォルダー内にあるファイルが表示される
hr96-21.csv)RProject フォルダ内に data
という名称のフォルダを作成するcsv
ファイルがパソコンにダウンロードされ、data
内に自動的に保存されるdownload.file(url = "[hr96-21.csv](https://asanoucla.github.io/hr96-21.csv)",
              destfile = "data/hr96-21.csv")  注意:一度ダウンロードを完了すれば、このコマンドを実行する必要はありません
hr96-21.csv をクリックしてデータをパソコンにダウンロード
RProject フォルダ内に data
という名称のフォルダを作成する
ダウンロードした hr96-21.csv
を手動でRProject フォルダ内にある data
フォルダに入れる
hr96-21.csv を読み取るna = "."というコマンドは「欠損値をドットで置き換える」という意味空欄」は「.」で置き換わるnumeric)」型のデータが「」文字型
(character)」として認識されるなど、エラーの原因になるため、読み取る時点で事前に対処するhr <- read_csv("data/hr96-21.csv",
               na = ".")  locale()関数を使って日本語エンコーディング
(cp932) を指定するhr <- read_csv("data/hr96-21.csv",
               na = ".",
               locale = locale(encoding = "cp932"))readrパッケージを使わないで読み取るhr <- read.csv("data/hr96-21.csv",
               na = ".")  hr96_17.csv
は1996年に衆院選挙に小選挙区が導入されて以来実施された 9
回の衆議院選挙(1996, 2000, 2003, 2005, 2009, 2012, 2014, 2017,
2021)の結果のデータhr に含まれる変数名を表示させるnames(hr) [1] "year"          "pref"          "ku"            "kun"          
 [5] "wl"            "rank"          "nocand"        "seito"        
 [9] "j_name"        "gender"        "name"          "previous"     
[13] "age"           "exp"           "status"        "vote"         
[17] "voteshare"     "eligible"      "turnout"       "seshu_dummy"  
[21] "jiban_seshu"   "nojiban_seshu"
df1 には 22 個の変数が入っている| 変数名 | 詳細 | 
|---|---|
| year | 選挙年 (1996-2017) | 
| pref | 都道府県名 | 
| ku | 小選挙区名 | 
| kun | 小選挙区 | 
| rank | 当選順位 | 
| wl | 選挙の当落: 1 = 小選挙区当選、2 = 復活当選、0 = 落選 | 
| nocand | 立候補者数 | 
| seito | 候補者の所属政党 | 
| j_name | 候補者の氏名(日本語) | 
| name | 候補者の氏名(ローマ字) | 
| previous | これまでの当選回数(当該総選挙結果は含まない) | 
| gender | 立候補者の性別: “male”, “female” | 
| age | 立候補者の年齢 | 
| exp | 立候補者が使った選挙費用(総務省届け出) | 
| status | 候補者のステータス: 0 = 非現職、1 現職、2 = 元職 | 
| vote | 得票数 | 
| voteshare | 得票率 (%) | 
| eligible | 小選挙区の有権者数 | 
| turnout | 小選挙区の投票率 (%) | 
| seshu_dummy | 世襲候補者ダミー: 1 = 世襲、0 = 非世襲(地盤世襲 or 非世襲) | 
| jiban_seshu | 地盤の受け継ぎ元の政治家の氏名と関係 | 
| nojiban_seshu | 世襲元の政治家の氏名と関係 | 
str(hr)spec_tbl_df [9,660 × 22] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ year         : num [1:9660] 1996 1996 1996 1996 1996 ...
 $ pref         : chr [1:9660] "愛知" "愛知" "愛知" "愛知" ...
 $ ku           : chr [1:9660] "aichi" "aichi" "aichi" "aichi" ...
 $ kun          : num [1:9660] 1 1 1 1 1 1 1 2 2 2 ...
 $ wl           : num [1:9660] 1 0 0 0 0 0 0 1 0 2 ...
 $ rank         : num [1:9660] 1 2 3 4 5 6 7 1 2 3 ...
 $ nocand       : num [1:9660] 7 7 7 7 7 7 7 8 8 8 ...
 $ seito        : chr [1:9660] "新進" "自民" "民主" "共産" ...
 $ j_name       : chr [1:9660] "河村たかし" "今枝敬雄" "佐藤泰介" "岩中美保子" ...
 $ gender       : chr [1:9660] "male" "male" "male" "female" ...
 $ name         : chr [1:9660] "KAWAMURA, TAKASHI" "IMAEDA, NORIO" "SATO, TAISUKE" "IWANAKA, MIHOKO" ...
 $ previous     : num [1:9660] 2 2 2 0 0 0 0 2 0 0 ...
 $ age          : num [1:9660] 47 72 53 43 51 51 45 51 71 30 ...
 $ exp          : num [1:9660] 9828097 9311555 9231284 2177203 NA ...
 $ status       : num [1:9660] 1 2 1 0 0 0 0 1 2 0 ...
 $ vote         : num [1:9660] 66876 42969 33503 22209 616 ...
 $ voteshare    : num [1:9660] 40 25.7 20.1 13.3 0.4 0.3 0.2 32.9 26.4 25.7 ...
 $ eligible     : num [1:9660] 346774 346774 346774 346774 346774 ...
 $ turnout      : num [1:9660] 49.2 49.2 49.2 49.2 49.2 49.2 49.2 51.8 51.8 51.8 ...
 $ seshu_dummy  : num [1:9660] 0 0 0 0 0 0 0 0 1 0 ...
 $ jiban_seshu  : chr [1:9660] NA NA NA NA ...
 $ nojiban_seshu: chr [1:9660] NA NA NA NA ...
 - attr(*, "spec")=
  .. cols(
  ..   year = col_double(),
  ..   pref = col_character(),
  ..   ku = col_character(),
  ..   kun = col_double(),
  ..   wl = col_double(),
  ..   rank = col_double(),
  ..   nocand = col_double(),
  ..   seito = col_character(),
  ..   j_name = col_character(),
  ..   gender = col_character(),
  ..   name = col_character(),
  ..   previous = col_double(),
  ..   age = col_double(),
  ..   exp = col_double(),
  ..   status = col_double(),
  ..   vote = col_double(),
  ..   voteshare = col_double(),
  ..   eligible = col_double(),
  ..   turnout = col_double(),
  ..   seshu_dummy = col_double(),
  ..   jiban_seshu = col_character(),
  ..   nojiban_seshu = col_character()
  .. )
 - attr(*, "problems")=<externalptr> 
numeric 文字は character
として認識されていることがわかるwl = 1 は小選挙区当選者、wl = 2
は復活当選者、wl = 0 は落選者table(hr$wl)
   0    1    2 
6001 2674  985 
wlsmd = 1 が小選挙区当選者, wlsmd = 0
が小選挙区の落選者と変更し、データフレーム名を df1
に変更if_else() 関数を使うdf1 <- hr %>% 
  mutate(wlsmd = ifelse(wl == 1, 1, 0))table(df1$wlsmd)
   0    1 
6986 2674 
exp と eligible
を使って、有権者一人あたりに使う選挙費用 (exppv)
を作るdf1 <- mutate(df1, exppv = exp / eligible) # eligible は小選挙区ごとの有権者数summary(df1$exppv)    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
  0.0013   8.1762  18.7646  23.0907  33.3863 120.8519     2831 
df1 <- mutate(df1, exppv = exp / eligible)
を実行する前に次の処理をする  df1 <- mutate(df1, exppv = exp / eligible)
は削除し、下の一連の作業が終わった後で打ち直すことdf1 <- mutate(df1, exppv = exp / eligible)
を残したまま下の一連の作業を実行すると、そのチャンクのところでエラーになってしまうから| Steps | 実行するコマンド | 作業の内容 | 
|---|---|---|
| 1 | str(df1$exp) | 
変数 exp のデータの型をチェック | 
| 2 | num(文字型)なら Step 4
へ、それ以外の型なら Step 3 へ | 
|
| 3 | df1$exp <- as.numeric(df1$exp) | 
変数 exp の型を数値型に変換 | 
| 4 | str(df1$eligible) | 
変数 eligible のデータの型をチェック | 
| 5 | num(文字型)なら Step 7
へ、それ以外の型なら Step 6 へ | 
|
| 6 | df1$eligible <- as.numeric(df1$eligible) | 
変数 eligible の型を数値型に変換 | 
| 7 | str(df1$eligible) | 
変数 eligible のデータの型をチェック | 
| 8 | num (数値型)なら OK | 
|
| 9 | str(df1$eligible) | 
変数 eligible のデータの型をチェック | 
| 10 | num (数値型)なら OK | 
|
exp や eligible
のデータの「型」が「数値型
(numeric)」ではなく「文字型」(charactor)
として読み取られることがあるnumeric)」ではなく「文字型」(charactor)
として読み取られる場合as.numeric()関数を使って、データの型を「数値型
(numeric)」に変換する必要があるstatus = 0 は新人、status = 1 は現職、
status = 2 は元職table(df1$status)
   0    1    2 
5517 3510  633 
status = 0 がその他、status = 1
が現職df1 <- hr %>% 
  mutate(inc = if_else(status == 1, 1, 0))table(df1$inc)
   0    1 
6150 3510 
df1) を表示names(df1) [1] "year"          "pref"          "ku"            "kun"          
 [5] "wl"            "rank"          "nocand"        "seito"        
 [9] "j_name"        "gender"        "name"          "previous"     
[13] "age"           "exp"           "status"        "vote"         
[17] "voteshare"     "eligible"      "turnout"       "seshu_dummy"  
[21] "jiban_seshu"   "nojiban_seshu" "inc"          
table(df1$seito)
                                         N党           アイヌ民族党 
                     1                     27                      1 
さわやか神戸・市民の会     ニューディールの会                 みんな 
                     2                      1                     79 
                  れい       世界経済共同体党                   保守 
                    12                      2                     16 
                保守新                   公明                   共産 
                    11                     79                   2228 
                  国民                 国民党               国民新党 
                    21                     11                     21 
              安楽死党       市民新党にいがた                   希望 
                     1                      1                    199 
                  幸福               当たり前                   改革 
                   312                      1                      1 
            改革クラブ         政事公団太平会           政治団体代表 
                     4                      1                      2 
        文化フォーラム           新党さきがけ               新党大地 
                    10                     13                      8 
              新党尊命               新党日本                 新社会 
                     1                      9                     38 
                  新進               日本新進               日本未来 
                   235                      1                    111 
          日本維新の会                   次世                   民主 
                   198                     39                   1654 
          民主改革連合         沖縄社会大衆党                   無所 
                     2                      1                    641 
            無所属の会                   生活                   社民 
                     9                     13                    316 
                  立憲                   維新                 緑の党 
                   277                    171                      1 
                  緒派                   自民                   自由 
                    44                   2542                     61 
              自由連合                   諸派               青年自由 
                   212                     18                      1 
seito を使って自民党ダミー (ldp)
を作るldp = 1 は自民党候補者、ldp = 0
は非自民党候補者df1 <- hr %>% 
  mutate(ldp = if_else(seito == "自民", 1, 0))table(df1$ldp)
   0    1 
7118 2542 
df1) を表示names(df1) [1] "year"          "pref"          "ku"            "kun"          
 [5] "wl"            "rank"          "nocand"        "seito"        
 [9] "j_name"        "gender"        "name"          "previous"     
[13] "age"           "exp"           "status"        "vote"         
[17] "voteshare"     "eligible"      "turnout"       "seshu_dummy"  
[21] "jiban_seshu"   "nojiban_seshu" "ldp"          
df1 には 23 個の変数が入っている| 変数名 | 詳細 | 
|---|---|
| year | 選挙年 (1996-2021) | 
| pref | 都道府県名 | 
| ku | 小選挙区名 | 
| kun | 小選挙区 | 
| wl | 選挙の当落: 1 = 小選挙区当選、2 = 復活当選、0 = 落選 | 
| rank | 当選順位 | 
| nocand | 立候補者数 | 
| seito | 候補者の所属政党 | 
| j_name | 候補者の氏名(日本語) | 
| gender | 立候補者の性別: “male”, “female” | 
| name | 候補者の氏名(ローマ字) | 
| previous | これまでの当選回数(当該総選挙結果は含まない) | 
| age | 立候補者の年齢 | 
| exp | 立候補者が使った選挙費用(総務省届け出) | 
| status | 候補者のステータス: 0 = 非現職、1 現職、2 = 元職 | 
| vote | 得票数 | 
| voteshare | 得票率 (%) | 
| eligible | 小選挙区の有権者数 | 
| turnout | 小選挙区の投票率 (%) | 
| seshu_dummy | 世襲候補者ダミー: 1 = 世襲、0 = 非世襲(地盤世襲 or 非世襲) | 
| jiban_seshu | 地盤の受け継ぎ元の政治家の氏名と関係 | 
| nojiban_seshu | 世襲元の政治家の氏名と関係 | 
| wlsmd | 選挙の当落: 1 = 当選(小選挙区)、0 = 落選(小選挙区) | 
| exppv | 有権者一人あたりに費やす選挙費用(円) | 
| inc | 現職ダミー: 1 現職、0 = 非現職 | 
| ldp | 自民党ダミー: 1 自民党候補者、0 = それ以外 | 
df1) の変数の記述統計を表示させるlibrary(stargazer){r, results = "asis"}
と指定するstargazer(as.data.frame(df1), 
          type ="html",
          digits = 2)| Statistic | N | Mean | St. Dev. | Min | Max | 
| year | 9,660 | 2,007.88 | 7.68 | 1,996 | 2,021 | 
| kun | 9,660 | 5.75 | 5.07 | 1 | 25 | 
| wl | 9,660 | 0.48 | 0.67 | 0 | 2 | 
| rank | 9,660 | 2.65 | 20.39 | 1 | 2,003 | 
| nocand | 9,660 | 3.89 | 1.09 | 2 | 9 | 
| previous | 9,660 | 1.48 | 2.46 | 0 | 19 | 
| age | 9,656 | 51.22 | 11.13 | 25 | 94 | 
| exp | 6,829 | 7,551,393.00 | 5,482,684.00 | 535 | 27,462,362 | 
| status | 9,660 | 0.49 | 0.62 | 0 | 2 | 
| vote | 9,660 | 55,987.87 | 40,626.34 | 177 | 210,515 | 
| voteshare | 9,660 | 27.67 | 19.34 | 0.10 | 95.30 | 
| eligible | 8,785 | 330,268.30 | 80,058.87 | 115,013 | 495,212 | 
| turnout | 7,849 | 62.09 | 6.53 | 44.71 | 83.80 | 
| seshu_dummy | 8,875 | 0.12 | 0.33 | 0 | 1 | 
| ldp | 9,660 | 0.26 | 0.44 | 0 | 1 | 
df1 には 23 個の変数が入っているその理由:
記述統計で表示されるのは変数の「型」 class
が「数値型」( numeric, integer,
double )の場合だけだから
文字型データ (chr) や ファクター
(factor) の場合は記述統計が表示されない
R で可視化する際、変数の class の違いはとても重要
「データの型」に関する詳細は 「私たちの R: 9.1 データ型」 を参考
str()関数で、df1 に含まれる変数の
class を確認してみる
str(df1)tibble [9,660 × 23] (S3: tbl_df/tbl/data.frame)
 $ year         : num [1:9660] 1996 1996 1996 1996 1996 ...
 $ pref         : chr [1:9660] "愛知" "愛知" "愛知" "愛知" ...
 $ ku           : chr [1:9660] "aichi" "aichi" "aichi" "aichi" ...
 $ kun          : num [1:9660] 1 1 1 1 1 1 1 2 2 2 ...
 $ wl           : num [1:9660] 1 0 0 0 0 0 0 1 0 2 ...
 $ rank         : num [1:9660] 1 2 3 4 5 6 7 1 2 3 ...
 $ nocand       : num [1:9660] 7 7 7 7 7 7 7 8 8 8 ...
 $ seito        : chr [1:9660] "新進" "自民" "民主" "共産" ...
 $ j_name       : chr [1:9660] "河村たかし" "今枝敬雄" "佐藤泰介" "岩中美保子" ...
 $ gender       : chr [1:9660] "male" "male" "male" "female" ...
 $ name         : chr [1:9660] "KAWAMURA, TAKASHI" "IMAEDA, NORIO" "SATO, TAISUKE" "IWANAKA, MIHOKO" ...
 $ previous     : num [1:9660] 2 2 2 0 0 0 0 2 0 0 ...
 $ age          : num [1:9660] 47 72 53 43 51 51 45 51 71 30 ...
 $ exp          : num [1:9660] 9828097 9311555 9231284 2177203 NA ...
 $ status       : num [1:9660] 1 2 1 0 0 0 0 1 2 0 ...
 $ vote         : num [1:9660] 66876 42969 33503 22209 616 ...
 $ voteshare    : num [1:9660] 40 25.7 20.1 13.3 0.4 0.3 0.2 32.9 26.4 25.7 ...
 $ eligible     : num [1:9660] 346774 346774 346774 346774 346774 ...
 $ turnout      : num [1:9660] 49.2 49.2 49.2 49.2 49.2 49.2 49.2 51.8 51.8 51.8 ...
 $ seshu_dummy  : num [1:9660] 0 0 0 0 0 0 0 0 1 0 ...
 $ jiban_seshu  : chr [1:9660] NA NA NA NA ...
 $ nojiban_seshu: chr [1:9660] NA NA NA NA ...
 $ ldp          : num [1:9660] 0 1 0 0 0 0 0 0 1 0 ...
numeric)、文字は文字型
(character) になっているcharacter)
の値は「""」で囲まれいていることに注意NA で表示されている