学校データベース

これ,マジで便利です。学校名を入れると学校コードが出てきます。

学校コード検索https://t.co/9ymCvhZnS4

— ほりたん (@horilab) September 4, 2022

というわけで、学校コード検索のようなサイトを作ってみましょう。

まず、文部科学省 学校コードからデータを取得します。ここではとりあえず「大学、短期大学、高等専門学校」のCSVをいただいてきて、学校コード、学校名、学校所在地、郵便番号だけを切り出します。Excelでもできますが、Pythonでは次のようにします:

import pandas as pd

df = pd.read_csv("221222-mxt-mxt_chousa01-1000011635_6.csv",
                 header=None, encoding="cp932", dtype=str, skiprows=2)
df[[0,5,6,7]].to_csv("schools.tsv", index=False, header=False, sep="\t")

Rでは次のようにします:

df = read.csv("221222-mxt-mxt_chousa01-1000011635_6.csv", colClasses="character", header=FALSE, fileEncoding="CP932", skip=6)
write.table(df[c(1,6,7,8)], "schools.tsv", quote=FALSE, sep="\t", row.names=FALSE, col.names=FALSE, fileEncoding="UTF-8")

これをSQLiteデータベースに読み込ませます:

sqlite3 schools.db
create table schools(id text, name text, address text, zip text);
.separator "\t"
.import schools.tsv schools

うまくいったか検索で確認しましょう。完全一致:

select * from schools where name='三重大学';

部分一致:

select * from schools where name like '%三重%';

「短期」という文字列を含む件数:

select count(*) from schools where name like '%短期%';

「短期」という文字列を含む最初の20件:

select * from schools where name like '%短期%' limit 20;

「短期」という文字列を含む最初の40件を除外した20件(つまり41件目〜60件目):

select * from schools where name like '%短期%' limit 40, 20;

PHPによる検索ページの例