ykogajpのブログ

勉強していることなどメモしていきます

R学習(1):人口データを使って基本的なデータ操作

愛知県の人口データを使ってRでデータ操作します。
データソース:あいちの人口 愛知県人口動向調査結果 CSVファイル - 愛知県平成31年1月1日現在)

tidyverseパッケージを使うので、まずはパッケージを読み込みます。次に、ダウンロードした人口データ(pop_aichi.csvにファイル名を変更しています)を読み込みます。
このとき、「全国地方公共団体コード」のデータ型を文字列型に指定(col_types)、cp932でエンコーディングを指定しています(locale)。

library(tidyverse)

#csvファイルの読み込み。エンコーディングを指定しないと文字化けする。
df <- read_csv('data/pop_aichi.csv',
               col_types = cols(全国地方公共団体コード = col_character()),
               col_names = TRUE,
               locale = locale(encoding = "cp932"))

次に、読み込んだデータをチェックします。head()で5行目までのデータを表示。str()でデータの構造を見ます(structure)。

#データチェック
head(df, n = 5)
str(df)
> head(df, n = 5)
# A tibble: 5 x 47
 全国地方公共団体コード~ 地域コード 都道府県名 市区町村名 調査年月日 地域名 総人口     男     女
  <chr>            <chr>      <chr>      <chr>      <chr>      <chr>   <dbl>  <dbl>  <dbl>
1 23000            -          愛知県     -          H310101    -      7.54e6 3.77e6 3.77e6
2 23100            -          愛知県     名古屋市   H310101    -      2.32e6 1.15e6 1.18e6
3 23101            -          愛知県     名古屋市千種区~ H310101    -      1.66e5 8.11e4 8.48e4
4 23102            -          愛知県     名古屋市東区~ H310101    -      8.09e4 3.88e4 4.21e4
5 23103            -          愛知県     名古屋市北区~ H310101    -      1.64e5 7.95e4 8.40e4
# ... with 38 more variables: `0-4歳の男` <dbl>, `0-4歳の女` <dbl>, `5-9歳の男` <dbl>,
(以下略)
> str(df)
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame':   71 obs. of  47 variables:
 $ 全国地方公共団体コード: chr  "23000" "23100" "23101" "23102" ...
 $ 地域コード            : chr  "-" "-" "-" "-" ...
 $ 都道府県名            : chr  "愛知県" "愛知県" "愛知県" "愛知県" ...
 $ 市区町村名            : chr  "-" "名古屋市" "名古屋市千種区" "名古屋市東区" ...
 $ 調査年月日            : chr  "H310101" "H310101" "H310101" "H310101" ...
 $ 地域名                : chr  "-" "-" "-" "-" ...
 $ 総人口                : num  7543393 2321727 165935 80872 163532 ...
 $: num  3773778 1146687 81100 38752 79543 ...
 $: num  3769615 1175040 84835 42120 83989 ...
(以下略)

データには総人口、男女別人口、年齢別人口などありますが、今回は市町村別の総人口について見ていきます。
それでは、読み込んだデータから必要なデータを抽出していきます。まずは、select()で1列目(全国地方公共団体コード)と4列目(市区町村名)、7列目(総人口)のデータを選択して、次にrename()で各列名をid = 全国地方公共団体コード, city_name = 市区町村名, total_pop = 総人口に変換。そして、filter()で県のデータと区のデータを除くための条件を指定して抽出。最後に、総人口の多い順に並べ替えるためにarrange()で降順(desc)を指定して並べ替えます。これで、愛知県の市町村別の総人口が降順で抽出されます。

#愛知県と区を除いた総人口データの抽出
df1 <-
  df %>%
  select(1, 4, 7) %>%
  rename(id = 全国地方公共団体コード, city_name = 市区町村名, total_pop = 総人口) %>%
  filter(id == 23100 | id >= 23200) %>%
  arrange(desc(total_pop)) 

では、データの集計、可視化をやっていきます。 愛知県の市町村別総人口のデータから最大値、最小値、平均値を集計してみます。

#データの集計(最大値、最小値、平均)
df1 %>%
  summarise(pop_max = max(total_pop),
            pop_min = min(total_pop),
            pop_mean = mean(total_pop))

集計結果

  pop_max pop_min pop_mean
    <dbl>   <dbl>    <dbl>
1 2321727    1053  139692.

次に、人口の多い上位10市町村を抽出して棒グラフで可視化してみます。

#人口の多い上位10市町村を抽出して棒グラフで可視化
df1 %>%
  head(10) %>%
  print() %>%
  ggplot(mapping = aes(x =city_name, y = total_pop)) +
  geom_bar(stat = "identity")

上位10市町村の抽出結果

   id    city_name total_pop
   <chr> <chr>         <dbl>
 1 23100 名古屋市    2321727
 2 23211 豊田市       425475
 3 23202 岡崎市       386962
 4 23203 一宮市       380135
 5 23201 豊橋市       373635
 6 23206 春日井市     307402
 7 23212 安城市       187803
 8 23207 豊川市       183695
 9 23213 西尾市       169841
10 23210 刈谷市       152288

f:id:ykogajp:20190310015153p:plain
上位10市町村
反対に、人口の少ない下位10市町村を抽出して棒グラフで可視化してみます。

#人口の少ない下位10市町村を抽出して棒グラフで可視化
df1 %>%
  tail(10) %>%
  print() %>%
  ggplot(mapping = aes(x =city_name, y = total_pop)) +
  geom_bar(stat = "identity")

下位10市町村の抽出結果

   id    city_name total_pop
   <chr> <chr>         <dbl>
 1 23424 大治町        32165
 2 23441 阿久比町      28334
 3 23361 大口町        24046
 4 23446 美浜町        22886
 5 23445 南知多町      17717
 6 23342 豊山町        15665
 7 23561 設楽町         4617
 8 23427 飛島村         4570
 9 23562 東栄町         3086
10 23563 豊根村         1053

f:id:ykogajp:20190310015223p:plain
下位10市町村

今回は、愛知県の人口データを使って市町村別総人口の多い上位10市町村と少ない下位10市町村を可視化しました。
今後、さらに今回の人口データを使って年齢別人口や地域別分析、そして地図データを使って空間上での可視化などやってみたいと思います。