情報科全教科書用語

[2024-04-12] 下記のものに「カテゴリ」「説明」を加えた情報科全教科書用語リストが情報処理学会 情報入試委員会によりCC 4.0 BY-SAで公開された。

情報科全教科書用語というExcelファイルが、電通大の先生方によって公開されている。これは、高校「情報」の教科書の索引に載っている全用語と、その用語が載っている教科書を、表にしたものである。同義語は一つにまとめている。たいへんな努力をして紙の教科書からデータ化されたとお聞きしている。

このデータをPythonで読んで、いろいろ調べてみよう。

import numpy as np
import pandas as pd
import seaborn as sns

df = pd.read_excel("情報科全教科書用語.xlsx")
df1 = df[['用語', '情報Ⅰ']].dropna()  # 1855x2
joho1 = df1['情報Ⅰ'].values
word = df1['用語'].values

books = ['東11', '東12', '実11', '実12', '実13', '実14',
         '開11', '数11', '数12', '日11', '日12', '第11']

data = np.zeros((len(books), len(joho1)))
for i, b in enumerate(books):
    for j, x in enumerate(joho1):
        data[i, j] = b in x

sns.histplot(np.sum(data, 0), discrete=True, shrink=0.8)
教科書の用語の度数分布

上の図は1〜12通りの教科書に載っている用語の数を表す。大部分の用語は1〜2冊の教科書にしか載っていないことがわかる。全部の教科書に載っている用語は41通りしかない。

occurrences = np.sum(data, 0)
for i, w in enumerate(word):
    if occurrences[i] == 12:
        print(w)

同様に、11冊の教科書に載っている用語は次の26通りである。

具体的な用語(例えばSSL、TLS)がどの教科書に載っているかを調べる例:

[(w, joho1[i]) for i, w in enumerate(word) if "SSL" in w or "TLS" in w]
[('SSL/TLS', '実11実12実14開11日11第11'),
 ('SSL|SSL(Secure Socket Layer)', '東12実13数11数12'),
 ('TLS', '実11実12日12'),
 ('IMAP over SSL/TLS|IMAPS', '日11'),
 ('POP over SSL/TLS|POPS', '日11'),
 ('SMTP over SSL/TLS|SMTPS', '日11')]

SSL/TLSが6冊、SSLだけが4冊、TLSだけが1冊ある。

教科書どうしの類似度を表すJaccard係数(|A∩B|/|A∪B|)の行列を求めよう(ちなみにJaccardはフランス人なので「ジャカール」と読むのがよさそう)。

def jaccard(i, j):
    return np.sum(np.all(data[(i,j),:], 0)) / np.sum(np.any(data[(i,j),:], 0))

for i, b in enumerate(books):
    print(b, end="")
    for j, _ in enumerate(books):
        print(f" {jaccard(i,j):.3f}", end="")
    print()
東11 1.000 0.479 0.201 0.197 0.230 0.273 0.275 0.238 0.292 0.283 0.348 0.328
東12 0.479 1.000 0.207 0.205 0.248 0.230 0.204 0.226 0.259 0.259 0.261 0.285
実11 0.201 0.207 1.000 0.957 0.317 0.239 0.158 0.167 0.195 0.239 0.212 0.225
実12 0.197 0.205 0.957 1.000 0.315 0.236 0.157 0.170 0.196 0.236 0.207 0.220
実13 0.230 0.248 0.317 0.315 1.000 0.284 0.164 0.196 0.225 0.242 0.213 0.265
実14 0.273 0.230 0.239 0.236 0.284 1.000 0.224 0.222 0.263 0.261 0.242 0.247
開11 0.275 0.204 0.158 0.157 0.164 0.224 1.000 0.201 0.235 0.205 0.282 0.210
数11 0.238 0.226 0.167 0.170 0.196 0.222 0.201 1.000 0.516 0.217 0.261 0.231
数12 0.292 0.259 0.195 0.196 0.225 0.263 0.235 0.516 1.000 0.246 0.271 0.266
日11 0.283 0.259 0.239 0.236 0.242 0.261 0.205 0.217 0.246 1.000 0.285 0.278
日12 0.348 0.261 0.212 0.207 0.213 0.242 0.282 0.261 0.271 0.285 1.000 0.308
第11 0.328 0.285 0.225 0.220 0.265 0.247 0.210 0.231 0.266 0.278 0.308 1.000

大部分の係数が0.3以下で、共通の用語は少ないことがわかる。一つだけ0.957という大きな値があるが、これは実教出版のPython版教科書とJavaScript版教科書で、内容はほぼ共通である。

主成分分析(PCA)をしてみよう。

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

x = PCA(n_components=2).fit_transform(data)
sns.scatterplot(x=x[:,0], y=x[:,1], alpha=0)
for i, b in enumerate(books):
    plt.text(x[i,0], x[i,1], b, ha='center', va='center')
plt.axis("scaled")
教科書の主成分分析

Last modified: