pandasで作る勤怠チェック(基本編)
pandasで作る勤怠チェック(基本編)
背景
目的
- (基礎)ローカルにある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
改善効果
- ファイルを開かなくなった分、集計作業が高速化。
- 大量のファイル、データを捌くと効果大。応用編で試す。
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------------------------------
sample.csv
totalTime,70.75
proj,time
システム開発,32.25
定例会,4.0
既存システム保守,29.5
朝会,2.5
Author And Source
この問題について(pandasで作る勤怠チェック(基本編)), 我々は、より多くの情報をここで見つけました https://qiita.com/siraasagi/items/be375eaa709c17499772著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .