LEVEL 8 ・ 自動化 / Lesson 22
毎月の作業を、1つの手順書にまとめる
読み込み・点検・集計・保存を関数に分けて、1つのスクリプトにします。ここから「仕事で使う」です。
このレッスンが終わったら
「毎月の作業を、関数に分けた1つの手順書(スクリプト)にできる。ファイルを替えるだけで、同じ作業が回る」と言える。
できることを見る
ここまでに学んだことを組み合わせると、毎月の作業を、1つの手順書にまとめられます。この手順書を、Pythonでは「スクリプト」と呼びます。
今回は、次の流れを、自動化します。
- ① 読み込む売上のCSV
- ② 点検するおかしい行を探す
- ③ 集計する部署別に合計
- ④ 保存するExcelと確認用CSV
動かしてみる
まず、全体を動かしてみましょう。(少し長いですが、1行ずつ読むので、安心してください)
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
4つの行数や集計が、順番に表示されました。この中で、summary.xlsx(集計結果)と、errors.csv(エラー行の一覧)という、2つのファイルも作られています。
1行ずつ読む
全体を、大きな塊で読みます。細かい行を追うのではなく、**関数の「名前」と「材料」と「return」**を見ましょう。
def load_data(path):ファイルの場所(path)を受け取って、CSVを読み込んで返すdef find_errors(df):表(df)を受け取って、おかしい行だけを返すdef summarize(df):表(df)を受け取って、部署別の合計の表を返すdef main(path):上の3つを順番に使って、全体の作業を行う。結果をファイルに保存して、件数を表示するmain("sales_dirty.csv")最後に、実際の作業を開始する(ここで初めて、全部が動く)日本語にすると
main は、「全体の流れを書く場所」です。main だけ読めば、何をする手順書かが分かります。細かい処理は、それぞれの関数に任せています。
1か所だけ変える
① 別のファイルで実行する。 最後の行の "sales_dirty.csv" を、"orders.csv"(入力ミスのないデータ)に変えます。同じ手順書が、別のデータにも使えます。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
今度は「エラー行: 0 行」と表示され、12行すべてが集計されました。ファイルを替えるだけで、毎月の作業が回ります。
② 点検のルールを変える。 find_errors の中に、「金額が10万円を超える行も、確認対象にする」という条件を足してみましょう。| (df["金額"] > 100000) を1行足すだけです。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ルールを変えたいときに、直す場所が1か所だけで済む。これが、関数に分ける一番の利点です。
自分で書く
お題 find_errors の結果の行数を数える関数 count_errors(df) を作ってください。そして、sales_dirty.csv と orders.csv について、それぞれ表示します。(4 と 0)
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
def count_errors(df): の次の行に、スペース4つで、return len(find_errors(df)) と書きます。
答えの例を見る
import pandas as pd
def find_errors(df):
return df[
df["金額"].isna()
| (df["金額"] < 0)
| df["担当"].isna()
| df["部署"].isna()
]
def count_errors(df):
return len(find_errors(df))
print(count_errors(pd.read_csv("sales_dirty.csv")))
print(count_errors(pd.read_csv("orders.csv")))