【就労移行支援事業所での実体験】プログラミング学習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を使って実際にコードを書く方法は以下の記事を参考にしてください
ぜひ、様々なコードを書くことに挑戦してみましょう。
本日はここまでです。ありがとうございました。
前回の記事はコチラ(好評です。いいねありがとうございます。)
就労移行支援事業所フェーズワン
この記事が気に入ったらサポートをしてみませんか?