オープンデータ
目次
オープンデータへの外部リンク
画像分類データセット
- CIFAR-10(6万枚、10種類の物体画像)https://www.cs.toronto.edu/~kriz/cifar.html
Python 版のダウンロード:https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
顔データセット
- MORPH(年齢推定の研究用。有償)https://uncw.edu/myuncw/research/innovation-commercialization/technology-portfolio/morph
- CACD (Cross-Age Celebrity Dataset) https://bcsiriuschen.github.io/CARC/
- UTKFace(年齢、性別などの注釈付きの顔画像)https://susanqq.github.io/UTKFace/
- CelebA(有名人の顔画像、属性の注釈付き)https://mmlab.ie.cuhk.edu.hk/projects/CelebA.html
- iBUG(顔特徴点の注釈データ)https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/
物体検出、セグメンテーションのデータセット
- COCO データセットについては、別ページ coco.html、 cocoapi.html で説明している。
奥行き(デプス)、シーンフローのデータセット
- Scene Flow Datasets(Computer Vision Group, Freiburg)https://lmb.informatik.uni-freiburg.de/resources/datasets/SceneFlowDatasets.en.html
- NYU Depth Dataset V2 https://cs.nyu.edu/~fergus/datasets/nyu_depth_v2.html
体験:郵便番号データ(日本郵便のオープンデータ)を SQLite 3 で扱う
日本郵便は、「郵便番号データダウンロード」のページで、郵便番号データを公開している。ここでは、次の2つのデータをダウンロードし、SQLite 3 のデータベースに取り込み、SQL による検索を体験する。
- 住所の郵便番号(1レコード1行、UTF-8形式)(ファイル名:utf_ken_all.zip、展開すると utf_ken_all.csv)
郵便番号と住所(都道府県名、市区町村名、町域名とそれぞれの読み仮名)を対応させたデータである。2023年6月から提供が開始された形式であり、1つの郵便番号のデータが1行に収まり、文字コードは UTF-8 である。従来の KEN_ALL.CSV(文字コードは Shift_JIS。1つの郵便番号のデータが複数行に分割されることがある)よりも扱いやすい。
- 事業所の個別郵便番号(ファイル名:jigyosyo.zip、展開すると JIGYOSYO.CSV)
大口事業所に個別に設定された郵便番号と、事業所名、住所を対応させたデータである。文字コードは Shift_JIS である。
前準備
- SQLite 3 のインストールが済んでいること。
- Ubuntu でインストールを行うときは、端末で、次のコマンドを実行する。
sudo apt update sudo apt -y install sqlite3 unzip curl nkf
手順
- 郵便番号データのダウンロード
日本郵便の「郵便番号データダウンロード」のページ https://www.post.japanpost.jp/zipcode/download.html を開く。
- 「住所の郵便番号(1レコード1行、UTF-8形式)」のページで、「最新データのダウンロード」をクリックして、utf_ken_all.zip をダウンロードする。
- 「事業所の個別郵便番号」のページで、「最新データのダウンロード」をクリックして、jigyosyo.zip をダウンロードする。
端末でダウンロードを行うときは、次のコマンドを実行する。
cd /tmp curl -L -O https://www.post.japanpost.jp/zipcode/dl/utf/zip/utf_ken_all.zip curl -L -O https://www.post.japanpost.jp/zipcode/dl/jigyosyo/zip/jigyosyo.zip
- ダウンロードしたファイルの展開(解凍)
ダウンロードした2つのファイルは zip 形式である。展開(解凍)を行う。
cd /tmp unzip -o utf_ken_all.zip unzip -o jigyosyo.zip
展開の結果、utf_ken_all.csv と JIGYOSYO.CSV ができることを確認する。
ls -l utf_ken_all.csv JIGYOSYO.CSV
- 文字コードの変換
JIGYOSYO.CSV の文字コードは Shift_JIS である。SQLite 3 では UTF-8 を使用するので、UTF-8 に変換する。utf_ken_all.csv は、はじめから UTF-8 なので、変換は不要である。
cd /tmp nkf -w -Lu JIGYOSYO.CSV > jigyosyo_utf8.csv
- SQLite 3 のデータベースへの取り込み
次のシェルスクリプトを実行する。テーブル KENALL(住所の郵便番号)とテーブル JIGYOSYO(事業所の個別郵便番号)を定義し、CSV ファイルを取り込む。データベースファイルは /tmp/mydb01 である(すでに同じ名前のテーブルがあるときのために、最初に drop table を行っている)。
#!/bin/bash cat >/tmp/a.$$.sql <<-SQL drop table if exists KENALL; drop table if exists JIGYOSYO; SQL cat /tmp/a.$$.sql | sqlite3 /tmp/mydb01 # cat >/tmp/a.$$.sql <<-SQL create table KENALL ( lgcode text not null, zipcode5 text not null, zipcode text not null, yomi_pref text not null, yomi_city text not null, yomi_town text not null, pref text not null, city text not null, town text not null, flag1 integer, flag2 integer, flag3 integer, flag4 integer, flag5 integer, flag6 integer ); create table JIGYOSYO ( lgcode text not null, yomi_name text not null, name text not null, pref text not null, city text not null, town text not null, banchi text not null, zipcode text not null, zipcode_old text not null, postoffice text not null, kind integer, multiflag integer, fixcode integer ); .mode csv .import /tmp/utf_ken_all.csv KENALL .import /tmp/jigyosyo_utf8.csv JIGYOSYO SQL cat /tmp/a.$$.sql | sqlite3 /tmp/mydb01 rm -f /tmp/a.$$.sql - 取り込み結果の確認
それぞれのテーブルの行数を表示してみる。
sqlite3 /tmp/mydb01 "select count(*) from KENALL;" sqlite3 /tmp/mydb01 "select count(*) from JIGYOSYO;"
住所の郵便番号は約12万件、事業所の個別郵便番号は約2万件であることを確認する(件数は毎月の更新で変わる)。
- SQL による検索の体験
郵便番号から住所を検索してみる(郵便番号は7けたの文字列で格納されている)。
sqlite3 /tmp/mydb01 "select pref, city, town from KENALL where zipcode = '1000001';"
住所(町域名)の一部から郵便番号を検索してみる。
sqlite3 /tmp/mydb01 "select zipcode, pref, city, town from KENALL where town like '%銀座%';"
事業所名の一部から、事業所の個別郵便番号を検索してみる。
sqlite3 /tmp/mydb01 "select zipcode, name, pref, city, town from JIGYOSYO where name like '%放送%';"
集計も行ってみる。都道府県ごとの郵便番号の件数を、多い順に表示する。
sqlite3 /tmp/mydb01 "select pref, count(*) from KENALL group by pref order by count(*) desc;"
ヒント
- 郵便番号や全国地方公共団体コード(lgcode)は、先頭に「0」が付くことがあるので、整数(integer)ではなく文字列(text)として扱う。表計算ソフトで開くと先頭の「0」が消えて表示されることがあるので注意する。
- 従来の KEN_ALL.CSV は、町域名が長い場合に1つの郵便番号のデータが複数行に分割されることがあり、扱いが難しい。「1レコード1行、UTF-8形式」の utf_ken_all.csv を使うことを推奨する。
- Windows で作業する場合、zip ファイルの展開(解凍)には「7-Zip」の使用を推奨する。文字コードの変換には nkf のほか、Python などを使うこともできる。
考察ポイント
- 郵便番号データはオープンデータである。誰でも自由にダウンロードでき、毎月更新される。このようなオープンデータが、住所入力の支援(郵便番号からの住所の自動入力)など、社会の中でどのように活用されているかを考えてみよう。
- 「住所の郵便番号」と「事業所の個別郵便番号」のように、関連する複数のデータを組み合わせることで、何ができるようになるかを考えてみよう(例:2つのテーブルを都道府県名で結合しての集計)。
- CSV ファイルのままで扱う場合と、SQLite 3 などのデータベースに取り込んで扱う場合とで、検索や集計のしやすさがどのように違うかを考えてみよう。
- データの文字コード(UTF-8、Shift_JIS)や、1レコードが複数行に分割される形式など、データの形式の違いが、データ処理の手間にどのような影響を与えるかを考えてみよう。