[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題19] 国勢調査データの集計 ]

[課題19] 国勢調査データの集計

課題

以下の説明にしたがって,表形式のデータファイルから, そのデータを集計したファイルを生成するプログラムを作成して提出して下さい.

この課題では,2020年の国勢調査の人口速報集計を一部抜粋したファイルから, 各市区町村のデータをすべて読みだして, それらのデータを都道府県別および全国で集計した結果を格納したファイルを生成することにします.

プログラムではデータファイル(入力ファイル)を読み込んで, 集計結果のファイル(出力ファイル)を生成するわけです.

  入力ファイル: 国勢調査データファイル(市区町村別)    # PandAで提供
  出力ファイル: 都道府県別・全国の集計データファイル  # 課題のプログラムで生成

「国勢調査データファイル」「都道府県別・全国の集計データファイル」の構成については,以下で説明します.

目次

  1. 国勢調査データファイル
  2. 都道府県別・全国の集計データファイル
  3. CSVファイル
  4. データファイルおよび生成するファイルの構成
  5. プログラムテンプレート
  6. 技術要素

国勢調査データファイル

集計に用いる「国勢調査データファイル」はPandAからダウンロードしてください(2020_population_census_mini.csv).

リソース > 02_データファイル > 2020_population_census_mini.csv

このファイルには国勢調査(2020年)の「人口速報集計」のデータの一部を抽出して格納しています. ファイルに格納している各市区町村のデータ項目は次のリスト1のとおりです.

リスト1: 国勢調査データファイルのデータ項目
  1. 市区町村コード(各自治体を識別する番号)
  2. 市区町村名
  3. 男性人口
  4. 女性人口
  5. 5年間の人口増減数(2015年の国勢調査との人口の差;男女の区別なし)
  6. 面積【km2】

ファイルはCSV形式で記述されています(詳細は以下で説明します). 次のようにして仮想型端末上で開いてみることができます.

 $ /usr/bin/localc 2020_population_census_mini.csv &

最初にファイルのプレビューウインドウが表示されます. そのまま[OK]ボタンを押せば,ファイルが開かれるはずです.

CSVファイルを開く別の方法として,ファイルブラウザ([Activities]→[Files])から,CSVファイルをダブルクリックで選択してもOKです.

市区町村コード

「国勢調査データファイル」の「市区町村コード」は次のように構成されています.

欠損値

国勢調査データファイルには欠損値が一部に含まれています. 欠損値とは「データが存在しないこと」を示すデータです(Rubyで言えばnilに相当します). 今回の課題では欠損値を気にする必要はありません.

課題では,CSVファイルのC列以降のデータは数値に変換して利用します. 国勢調査データファイルでは欠損値は「-」で表現されています. Rubyでは「-」を数値に変換すると「0」か「0.0」になります. 今回は欠損値をこのように変換して「0」として扱うことにして,気にしないことにします.


  s = '-'    # 欠損値を表す記号(文字列リテラル) 
  x = s.to_i # x == 0 
  y = s.to_f # y == 0.0 

【参考】国勢調査データの入手について

オリジナルの「国勢調査の人口速報集計」は,次から入手できます.

都道府県別・全国の集計データファイル

この課題では,上で説明した「国勢調査データファイル」の市区町村のデータに基づいて, 都道府県別,またさらに全国でデータを集計したファイルを生成します. 集計結果のファイルには,元の「国勢調査データファイル」に項目を追加して, 各都道府県および全国について,次のデータを格納することにします.

リスト2: 都道府県別・全国の集計データファイルのデータ項目
  1. 都道府県番号 (追加項目:全国=0,北海道=1,青森県=2,...,鹿児島県=46,沖縄県=47)
  2. 都道府県名 (追加項目: 全国,北海道,青森県,...,鹿児島県,沖縄県)
  3. 総人口 (追加項目: 男女の人口の合計)
  4. 男性人口
  5. 女性人口
  6. 5年間の人口増減数(2015年の国勢調査との人口の差;男女の区別なし)
  7. 面積【km2】
  8. 人口密度【人/km2】 (追加項目)
※ 「市区町村コード」「市区町村名」は集計対象とはしない

各都道府県の人口と面積は,その都道府県の市区町村のデータを合計して算出します. 全国の人口と面積はすべての市区町村のデータの合計から算出します. 上に示したように人口密度も算出します. なお面積と人口密度のデータは小数点以下第1位までを記録することにして, 小数点以下第2位を四捨五入することにします.

CSVファイル

今回利用する国勢調査データファイル(2020_population_census_mini.csv)には,CSV形式でデータが保存されています.

CSV(Comma-Separated Values)は,表データのためのファイル形式の一つです. 「表」は縦横に並んだ「セル」で構成されています. 「表」において,セルの横一列を「行」,セルの縦一列を「列」といいます.

CSVファイルでは,1行ごとに, 各列のデータが「区切り文字」で区切られて並べられています. (フォーマットの名前が示すとおり)標準的な区切り文字はカンマ(,)です. 「スペース」「タブ」などが区切り文字として使われることもあります.

CSVファイルは,一般にはExcelなど表計算ソフトで開きます. しかしデータは通常のテキスト(文字)ですので,Emacsなどのエディタで開くこともできます. エディタで開けば,ファイルのデータそのものを見ることができます. なおCSV内部のデータはすべて「文字」であることに注意してください. 数字が並んでいたとしても,それは数字の列であって,数値ではありません.

データファイルおよび生成するファイルの構成

国勢調査データファイル(2020_population_census_mini.csv)は,次のように構成されています.

項目の区切り文字は標準の「,」(comma)です.

国勢調査データファイルから生成する「都道府県別および全国」の集計データファイルも,同様の形式でCSVで生成してください.

項目の区切り文字は標準の「,」(comma)とします.

プログラムテンプレート

次に示すプログラムのテンプレート(雛型)を適宜名前を変えて使って下さい.

このテンプレートでは,集計処理で利用するデータを定義しています. 詳細はテンプレートで確認してください.

実行方法

今回のプログラムは次のように実行することを想定しています(プログラムのファイル名をcensus_aggregate.rbとします).

$ ruby census_aggregate.rb towns.csv prefs.csv

この場合「towns.csv」を読み込んでデータを集計して「prefs.csv」を生成するようにします. 「towns.csv」が市区町村データで構成される国勢調査データファイル, 「prefs.csv」が都道府県+全国の集計データファイルを表しています.

技術要素

プログラム作成に用いる可能性のある技術要素を示します.

[ プログラミング演習(Ruby) >  プログラミング演習(Ruby) 課題(2024) >  [課題19] 国勢調査データの集計 ]