Pythonで Excelからデータを抜き出すサンプルを作ってみました。
実行環境は、Mac OS X 10.7.5、Python 2.7.1 です。
python-excel のインストール
Excel操作のライブラリとして、「python-excel」を使います。
python-excel は xlrd, xlwt, xlutilsというパッケージに分かれていて、読み込みだけなら xlrd だけ使えばよさげです。
Mac環境では easy_install で簡単にインストールできました。
$ sudo easy_install xlrd
xlrd 0.9.2 がインストールされました。
ちなみに、http://www.python-excel.org/ にGitHubのリンクがあるので、
$ git clone https://github.com/python-excel/xlrd.git $ cd xlrd $ python setup.py install
などとしてもインストールできると思います(が、試してません・・)。
Excelからデータの読み込み
つまずくとしたら、cell() の引数ですかね。それ以外は特に問題ありません。
test_excel.py
#! /usr/bin/env python # -*- coding: utf-8 -*- import xlrd if __name__ == '__main__': book = xlrd.open_workbook('/Users/akiyoko/Documents/temp/2nd_test.xls') # ブック名 sheet = book.sheet_by_name('Statistics (total score)') # シート名 data = [] # データが「F10」から縦方向に並んでいるものとする # セルを cell(行番号, 列番号) で指定(0から数える) for row in range(9, sheet.nrows): value = sheet.cell(row, 5).value if value != '': data.append(value) print 'data=%s' % data
実行結果
$ python test_excel.py data=[42.0, 42.0, 40.0, 38.0, 38.0, 38.0, 38.0, 35.0, 35.0, 35.0, 35.0, 34.0, 34.0, 34.0, 34.0, 33.0, 33.0, 33.0, 33.0, 32.0, 32.0, 32.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 29.0, 29.0, 29.0, 28.0, 28.0, 28.0, 28.0, 28.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 25.0, 24.0, 24.0, 24.0, 24.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 21.0, 21.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 19.0, 19.0, 19.0, 18.0, 18.0, 17.0, 17.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 15.0, 15.0, 14.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 9.0]
平均・標準偏差などを求める
ついでに、データの平均や標準偏差などを求めてみます。
高度な計算ライブラリには「NumPy」(ナンパイ)を使います。
ちなみに NumPy は、Mac環境 (OS X 10.7.5) に既にインストールされていました。
特にインストールした覚えはないので、過去に入れた
のどちらかのタイミングでインストールされたのだと思います(もしかしたら初めから入ってたのかも)。
test_calculate.py
#! /usr/bin/env python # -*- coding: utf-8 -*- import numpy import xlrd if __name__ == '__main__': book = xlrd.open_workbook('/Users/akiyoko/Documents/temp/2nd_test.xls') sheet = book.sheet_by_name('Statistics (total score)') data = [] for row in range(9, sheet.nrows): value = sheet.cell(row, 5).value if value != '': data.append(value) # なるべくnumpy.arrayを使う(ただし、for文では使わないように注意) data = numpy.array(data) print 'data=%s' % data # データ数 print 'size of data=%d' % len(data) # 平均 print 'mean value=%.1f' % numpy.mean(data) # 中央値 print 'median value=%.1f' % numpy.median(data) # 標準偏差 print 'standard deviation=%.2f' % numpy.std(data)
実行結果
$ python test_calculate.py data=[ 42. 42. 40. 38. 38. 38. 38. 35. 35. 35. 35. 34. 34. 34. 34. 33. 33. 33. 33. 32. 32. 32. 30. 30. 30. 30. 30. 30. 30. 30. 29. 29. 29. 28. 28. 28. 28. 28. 27. 27. 27. 27. 27. 27. 26. 26. 26. 26. 26. 26. 25. 24. 24. 24. 24. 23. 23. 23. 23. 23. 23. 23. 23. 23. 22. 22. 22. 22. 22. 22. 22. 22. 21. 21. 20. 20. 20. 20. 20. 19. 19. 19. 19. 19. 18. 18. 17. 17. 16. 16. 16. 16. 15. 15. 15. 15. 14. 13. 13. 13. 13. 12. 12. 11. 9.] size of data=105 mean value=24.9 median value=24.0 standard deviation=7.44