[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: