「文武両道」は現実的か? (2)

By Kousuke Takeuchi on 23 October 2013 | Comments (0)

昨日に続き、文部科学省のホームページから体力テストに関するデータを取得したので、前回の学力テストのデータと合わせて解析していきます。

といっても、体力テストの調査データはExcelで配布されておらず、PDFに記載されているデータをテキスト形式に自分で変換してから使用することにしました。 今回の解析の準備段階で、日本の統計データの集計に関するフォーマットがあまりにもまとまってないことを知ることが出来ました。 プログラミングや英語を授業で必修化して、世界の傾向に歩調を合わせようとするのなら、今ビジネス界でホットトピックである統計解析をもっとやりやすいように集計データのフォーマットについても考えてほしいものですね(せめてExceldで配布しろよw)

とりあえず、文科省のページリンクとテキスト形式にフォーマットしたファイルを紹介しときます。 平成24年度全国体力・運動能力、運動習慣等調査結果:文部科学省(中学生実技調査のデータを参考にしました) physical_survey (テキストデータにフォーマットしたもの)

さて、このphysical_servey.txtと前回の学力データを元に、簡単な散布図を表示してみます。

import xlrd
import numpy as np
import matplotlib.pyplot as plt

## read lerning assessment excel file and plot histgram
book = xlrd.open_workbook("learning_assessment.xls")
sh = book.sheet_by_index(0)

results = np.zeros((4,47))
row = 0
for i in (14, 18, 22, 26):
col = 0
for j in xrange(14, 61):
results[row][col] = sh.cell_value(rowx=j, colx=i)
col += 1
row += 1

average_each_prefecture = results.mean(0)


## read physical survey text file and plot histgram
f = open('physical_survey.txt')
lines = f.readlines()
f.close

physical_results = np.zeros((4,47))

i = 0
col = 0
for line in lines:
if i > 1:
line2 = line.split()
fixed_line = line2[2:4] + line2[5:7]
for row in range(0, 4):
physical_results[row][col] = fixed_line[row]
col += 1
i += 1

average_each_prefecture2 = (physical_results[0] + physical_results[2]) / 2

plt.scatter(average_each_prefecture, average_each_prefecture2)
plt.show()

21行目からが、今回追加したプログラムです。 前回同様、データをNumpyの行列形式に変換し、それぞれの県に関して平均値をとるという簡単なプログラムです。 そして、最後にMatplotlibのPyplotでScatter(散布図)を表示させるって感じの流れになります。

実際にプロットした散布図がこちら

なんとなく右肩上がりなグラフになっている気がします。 もし、右肩上がりの相関があるのなら、勉強ができる子供は運動もできるという仮説が確実になってきます。 ただし、あくまでも「右肩上がりに見える」だけなので、きちんと数学的に検定をしなければ仮説が証明されたことにはなりません。(きれいな一直線上に点が並んでるとも言い難いので)

次回は、検定などの統計解析ツールである「R」を導入して、このグラフの相関性を確認するプログラムを作成していきたいと思います。


Generated by Jekyll and served out of Github Pages