TALIS 2018

TALIS - The OECD Teaching and Learning International Survey のデータを R で読んで解析する手順は,りん先生の RでTALIS2018 に書かれている通りである。ここでは Python で同じことをやってみる。

pandas の IO Tools のページにいろいろなファイルの読み方が書いてあるが,SPSS のファイルについては書かれていない。書いてないだけで,read_spss() という関数があるが,それは pyreadstat パッケージを使っているだけである。ここでは pyreadstat を直接使うことにする。これは R の haven パッケージと同程度に高速である。試しに中学校のデータを読んでみる:

import pyreadstat

df, meta = pyreadstat.read_sav("BTGINTT3.sav")

これで df に 153682 行 397 列のデータが,meta にメタデータが入る。メタデータには次のものがある:

meta.column_labels 	meta.column_names 	meta.file_encoding
meta.file_format 	meta.file_label 	meta.missing_ranges
meta.missing_user_values 	meta.notes 	meta.number_columns
meta.number_rows 	meta.original_variable_types 	meta.table_name
meta.value_labels 	meta.variable_alignment 	meta.variable_display_width
meta.variable_measure 	meta.variable_storage_width 	meta.variable_to_label
meta.variable_value_labels

国別の行数は次のようにして求められる:

df['CNTRY'].value_counts()

日本(JPN)は 3555 件ある。

例えばアンケート 34. In your teaching, to what extent can you do the following? の中の m) Support student learning through the use of digital technology (e.g. computers, tablets, smart boards) の回答(1 = Not at all, 2 = To some extent, 3 = Quite a bit, 4 = A lot)については df['TT3G34M'] にある。この度数分布は df['TT3G34M'].value_counts() で求められる。日本に限定した度数分布は

df['TT3G34M'][df['CNTRY'] == 'JPN'].value_counts()

で求められる。

データを国で分類し,上記アンケート結果の平均を求め,昇順に並べ,NaN でないものだけを残す:

s = df.groupby('CNTRY')['TT3G34M'].mean()
s.sort_values(inplace=True)
s = s[s.notna()]

とりあえず簡単な棒グラフで表す:

import matplotlib.pyplot as plt

plt.figure(figsize=[6.4, 9])
plt.barh(s.index, s)
plt.xlim(1, 4)

ドットプロットにしてみる:

plt.plot(s, s.index, "o")
plt.grid()
plt.xlim(1, 4)

国名を日本語にするには,次のようにすればよい:

co = pd.read_csv("https://oku.edu.mie-u.ac.jp/~okumura/stat/data/countries.csv")
dic = { r['三字']: r['国名'] for i,r in co.iterrows() }
cj = [ dic[x] for x in s.index ]

plt.plot(s, cj, "o")
plt.subplots_adjust(left=0.25, right=0.95)
plt.grid()
plt.xlim(1, 4)
plt.savefig('190707a.png', bbox_inches="tight")

要するに日本は「デジタル技術を使って生徒の学びをサポートする」(Support student learning through the use of digital technology)で最低点であるということだ。


Last modified: