pandasで作る勤怠チェック(基本編)


pandasで作る勤怠チェック(基本編)

背景

  • 一日どの作業に何時間使ったか、というExcelファイル「作業管理表」がある。

  • 作業別に作業時間の集計作業のニーズ有り。

  • Excelでvlookupがあるが「ファイルを開かないとわからない」

目的

  • (基礎)ローカルにある1つのファイルを開き、作業別に集計する。
  • (応用)ネットワーク上のファイル共有サーバにアクセス、フォルダ内にある複数のファイルを順次開き、担当者別作業別に集計する。

 コーディングのポイント

  • INPUT:「どのファイル?、そのシート?、どの番地から読み込む?」の指定。
  • Transaction:「どの列情報を抜き出したい?」「サマリキーは?」の指定。
  • Output:特になし。自由。

基礎編

test.py
import pandas as pd

# Input_01:作業管理表を読み込む
file = pd.ExcelFile('import/作業管理表(名前).xlsx', encoding='utf8')

# Input_02:作業内訳シートを読み込む
sheet_df = file.parse('Sheet2', header=None)

# Transaction_01:ヘッダ行、空行を読み飛ばす。
sheet_df_no_header = sheet_df[3:]# データ行のみ

# Transaction_02:プロジェクト名、時間の列にデータを絞る。
sheet_df_select_loc = sheet_df_no_header.iloc[:,[2,4]]# 作業単位
sheet_df_select_loc_sum = sheet_df_no_header.iloc[:,[4]]# 合計

# Transaction_03:headerの指定と、集計キーの指定
sheet_df_select_loc.columns = ['proj', 'time']
grouped = sheet_df_select_loc.groupby('proj')# 作業名で集計

sheet_df_select_loc_sum.columns = ['totalTime']

# Output_01:コンソール表示
print("--1.稼働明細------------------------------")
print(sheet_df_select_loc)
print("--2.稼働集計------------------------------")
print(sheet_df_select_loc_sum.sum())# 合計
print(grouped.sum())# 作業別
print("--End------------------------------")

# Output_02:CSVファイル出力
sheet_df_select_loc_sum.sum().to_csv('to_csv_out_a.csv', mode='a')# 合計
grouped.sum().to_csv('to_csv_out_a.csv', mode='a')# 作業別

結果(コンソール)

console.log
--1.稼働明細------------------------------
        proj  time
3   既存システム保守     7
4         朝会   0.5
5     システム開発     9
6        定例会     2
7   既存システム保守  7.25
8     システム開発     4
9     システム開発     4
10    システム開発   1.5
11        朝会   0.5
12    システム開発     4
13  既存システム保守   3.5
14        朝会   0.5
15    システム開発  4.25
16       NaN   2.5
17  既存システム保守   1.5
18  既存システム保守     2
19    システム開発   3.5
20       定例会     2
21    システム開発     2
22  既存システム保守  8.25
23        朝会     1
--2.稼働集計------------------------------
totalTime    70.75
dtype: float64

proj           time
システム開発    32.25
定例会        4.00
既存システム保守  29.50
朝会         2.50
--End------------------------------

結果(csv)

sample.csv
totalTime,70.75
proj,time
システム開発,32.25
定例会,4.0
既存システム保守,29.5
朝会,2.5

改善効果

  • ファイルを開かなくなった分、集計作業が高速化。
  • 大量のファイル、データを捌くと効果大。応用編で試す。