作業履歴が入ったデータベーステーブルから、 案件情報を行に、作業内容(「設計」とか「PG」とか)を列に、 案件別作業内容別合計時間を値として持つピボットテーブルを作成して Excelで確認する必要があったので、以前から興味のあったPandasを 使ってスクリプトを書いてみた。
作業履歴テーブル(work_histories)は下記のような構成とする:
案件名 | customer_name |
作業名 | type_name |
作業時間数 | total_work_time |
genka_checker.py
import psycopg2 import pandas as pd import pandas.io.sql as psql OUTPUT_CSV_PATH = '<CSVファイル出力パス>' conn = psycopg2.connect( host='<DBホスト名>', port='<DBポート番号>', database='<DB名>', user='<DBユーザー名>', password='<DBパスワード>' ) sql = 'select customer_name, type_name, sum(total_work_time) as sum_time from work_histories group by customer_name, type_name order by customer_name' df = psql.read_sql(sql, conn) df.groupby('type_name').agg(np.sum) pd.pivot_table(df, values='sum_time', index=['customer_name'], columns=['type_name']).fillna(0).to_csv(OUTPUT_CSV_PATH, encoding='cp932') conn.close()
初めてPandasを使ったけど、色々便利な機能があって勉強する価値がありそう。
次は合計作業時間ではなく、案件ごとの作業の割合を出したい。 正しく見積もるためのヒントが見えてきそう。
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (12件) を見る