見出し画像

【就労移行支援事業所での実体験】プログラミング学習6(実務編)

みなさん、こんにちは。

前回はpythonを用いてExcelを自動化するための学習方法を書きました。

今回は前回学習したことを踏まえて、実際に作ったコードを紹介します。
もし、Youtubeで学習した後、どうすれば良いのか困っていた人がいたら、
この記事を見て、こういうのを作れば良いのかと感じていただければ嬉しいです。


どんなものを作ったのか?

簡単に言うと、 Excelの転記、修正プログラムを作成しました。
以下のようなExcelデータを元に新しいcsvファイルを作成するというものです。

参照元 Excelデータ

実際のコード

import openpyxl
import calendar
import pandas as pd
import numpy as np
import glob
import datetime
from datetime import date,timedelta
import locale
import jpholiday

year = input('年を半角数字で入力してください。 例「2020」: ')
month = input('月を半角数字で入力して下さい。 例「1」: ')
names = input('訓練記録の名前を入力してください')
import_file_path = '/'+str(year)+'年'+str(month)+'月'+str(names)+'訓練記録'+'.xlsx'
export_file_path = '/'

df_ref = pd.read_excel(import_file_path,skiprows = 1)                            #元のデータフレームの取得
df_ref=df_ref.rename(columns={'スタッフ記入\n(記入は健康チェック回答から)':'スタッフ記入'}) #スタッフ記入カラム名の変更
df_ref['日付']=df_ref['日付'].dt.strftime('%Y-%m-%d')                            #カラム名「日付」の要素のobject化

#日付の日数を取得する
count_days = calendar.monthrange(int(year), int(month))[1]

df = pd.DataFrame(columns=['日','曜日','通所','開始時刻','終了時刻','チェック','見学'])

ds = pd.Series(range(1,count_days+1))
df['日']=ds

w_list = ['月', '火', '水', '木', '金', '土', '日']

for i in range(1,count_days+1):
    dt = datetime.datetime(int(year), int(month),i)
    week = dt.weekday()
    days_ja = w_list[week]
    df.loc[i-1,'曜日']=[days_ja]
    
#補完したい日付のデータフレームを作る
dates_DF = pd.DataFrame({"日付":[pd.to_datetime(year+"-"+month) + timedelta(days=i) for i in range(count_days)]})
dates_DF['日付']=dates_DF['日付'].dt.strftime('%Y-%m-%d')


df_ref2=pd.merge(df_ref,dates_DF,on='日付',how='right') #元のデータフレームの日付合わせ
df_ref2 = df_ref2.fillna('')

#通所カラムのプログラム
for i,column_name in enumerate(df_ref2['区分']):
    
    if column_name=='通所':
        df.iat[i,2]='○'
        
    else:
        df.iat[i,2]=''

#開始時刻プログラム
for i,column03_name in enumerate(df_ref2['区分']):
    if column03_name=='通所':
        df.iat[i,3]=100
        
    else:
        df.iat[i,3]=''
        
#退所の列を時系列データへ変換
df_ref2['日付'] = pd.to_datetime(df_ref2['日付'])

#終了時刻プログラム

for i,daygo in enumerate(df['通所']):
    
    ref2_time = df_ref2.iloc[i,2]
    year = ref2_time.year
    month = ref2_time.month
    day = ref2_time.day
    
    holiday = jpholiday.is_holiday(datetime.date(year,month,day))

    if holiday and daygo=='○':
        df.iloc[i,4]=120
    elif df.iloc[i,1]=='土' and daygo=='○':
        df.iloc[i,4]=120
    elif daygo=='○':
        df.iloc[i,4]=150
    else:
        df.iloc[i,4]=''
        
#食事加算プログラム
for i,column_name08 in enumerate(df_ref2['診察']):
    if column_name08=='受診':
        df.iat[i,6]=2
        
    else:
        df.iat[i,6]=''
        
#医療連携プログラム
for i,column_name06 in enumerate(df_ref2['チェック']):
    if column_name06=='○' :
        df.iat[i,5]='○'
        
    else:
        df.iat[i,5]=''

#欠損値修正
df.fillna('')

#csvファイルに変換
name=df_ref2.iloc[0,1]
df.to_csv(export_file_path+'/'+str(year)+'年'+str(month)+'月'+name+'形式'+'.csv',encoding = 'shift-jis',index=False)

元のコードの参照したデータとは少し異なりますので、変数名やif文の中身が違うところがありますが、ほとんど一緒です。

当時はまだ型やクラス、関数など完全に分かっていない部分があったので、
まとまっておらず、長いコードだなと感じます笑

完成したcsvファイル

出力データは一部ですが、こんな感じになります。


手作業で入力しなければならないものも、pythonを使えば一瞬でできる用になりますよ。

まとめ

今回は実際にpythonを学習後に取り組んだ実例を紹介しました。
みなさんも身の回りで自動化したい作業があれば、取り組んでみてはいかがでしょうか?
もし、コードが分からなかったら、ChatGPTを使用することをオススメします。ChatGPTを使って実際にコードを書く方法は以下の記事を参考にしてください

ぜひ、様々なコードを書くことに挑戦してみましょう。
本日はここまでです。ありがとうございました。

前回の記事はコチラ(好評です。いいねありがとうございます。)

就労移行支援事業所フェーズワン


この記事が気に入ったらサポートをしてみませんか?