grasys blog
grasysブログ

いますぐPythonでデータ分析するために必要なこととは?前編

データ分析をするための様々なサービスが世の中にありますが、導入までの期間やコストは気になりますよね。

手軽に卓上である程度分析することもできます。どうすればよいかこの記事で整理していきます。

必要なもの

  • Windows/macOSどちらでもよいのでPython3.6以上がインストールされているPC
  • Python教材!
  • 分析したいデータ

必要なこと

  • データを手に入れる
  • データを汎用的なファイルフォーマットに変換する
  • データを分析する
  • 分析結果を出力する

データを手に入れる

Pythonでデータ分析をするということは取り扱うデータの大きさが大きくなるかもしれず今後のシステム化も視野に入れてCSVファイルフォーマットで手に入れたいですよね

今回はとりあえずこちらのExcelファイルフォーマットを受け取ったという話で進めていきます

データを汎用的なファイルフォーマットに変換する

Windows、macOSどちらでも良いですがPythonがインストールされているPCでExcelファイルをPythonで読み込むツールをインストールします

pip install openpyxl

こちらのツールのドキュメント(英語)はこちらです

openpyxlの特徴

  • xlsx/xlsm/xltx/xltmファイル形式をPythonで読み書きするツール
  • 日本語記事もたくさん見つかる有名なツール

プログラムを書き始めますが、変換処理を記述するまえにいったん動作確認しましょう

main.pyファイルを下記のように作成します

以下それぞれ書き換えてください

  • file_name=にはExcelの保存場所
  • sheet_name=にはExcelシートの名前
from openpyxl.cell.cell import Cell
from openpyxl import load_workbook


def load_excel(file_name, sheet_name):
    wb = load_workbook(filename=file_name, read_only=True)
    ws = wb[sheet_name]

    for row in ws.rows:
        a: Cell
        b: Cell
        c: Cell
        a, b, c = row
        print(f"a: {a.value}, b: {b.value}, c: {c.value}")

    wb.close()


if __name__ == '__main__':
    load_excel(file_name="/Users/nishino/Downloads/Book1.xlsx", sheet_name="Sheet1")

記述が終わったらプログラムを実行します

python main.py

動作しましたか?PythonがExcelシートの中身を認識して読み込めている様子が見えます

先頭の2行は表の見出し、3行目以降に分析すべきデータが表示されていますね

ファイルフォーマットと合わせて、分析に必要ない行は削除していきます

続いてファイルフォーマットを変換するためにツールを追加インストールする必要があります

pip install pyarrow

こちらのツールのドキュメント(英語)はこちらです

pyarrowの特徴

  • Apache ArrowというソフトウェアのPython版
  • 高性能な分析ツール

さきほどmain.pyに記述していただいた内容を下記のように書き換えます

ファイルフォーマットを変換するプログラムです

以下それぞれ書き換えてください

  • output_file_name=には変換後のファイル保存場所
from openpyxl import load_workbook
import pyarrow as pa
import pyarrow.csv as csv


def load_excel(file_name, sheet_name):
    wb = load_workbook(filename=file_name, read_only=True)
    ws = wb[sheet_name]

    a_values = []
    b_values = []
    c_values = []
    for row in ws.rows:
        _a, _b, _c = row

        a_values.append(_a.value)
        b_values.append(_b.value)
        c_values.append(_c.value)

    wb.close()
    return a_values, b_values, c_values


def cleanse_data(rows1, rows2, rows3):
    # テーブルの見出しなど先頭2行を除く
    return rows1[2:], rows2[2:], rows3[2:]


def export_csv(rows1, rows2, rows3, output_file_name):
    options = csv.WriteOptions(include_header=False)

    table = pa.table([rows1, rows2, rows3], names=["A", "B", "C"])
    csv.write_csv(table, output_file=output_file_name, write_options=options)


if __name__ == '__main__':
    a, b, c = load_excel(file_name="/Users/nishino/Downloads/Book1.xlsx", sheet_name="Sheet1")
    cleansed_a, cleansed_b, cleansed_c = cleanse_data(a, b, c)

    a_rows = pa.array(cleansed_a, type=pa.string())
    b_rows = pa.array(cleansed_b, type=pa.float64())
    c_rows = pa.array(cleansed_c, type=pa.timestamp("s"))
    export_csv(a_rows, b_rows, c_rows, output_file_name="sheet1.csv")

動作しましたか?新しいファイルが増えてるのでファイルを開いてみてください。

これでデータ分析の準備ができました。

前半はここまでです。

後編では実際にデータ分析をしていきます。