1. Учиться
  2. /
  3. Courses
  4. /
  5. Pythonで学ぶ財務諸表分析

Connected

Exercise

プロット作成のユーザー定義関数

前の演習では、次のコードを書いてプロットを作成しました。

# tech と fmcg の企業を抽出
subset_dat = dataset.loc[dataset["comp_type"].isin(["tech", "fmcg"])]

# tech と fmcg の企業の年間平均粗利益率を計算
subset_dat_avg = subset_dat.pivot_table(index=["Year", "comp_type"], values = "gross_margin").reset_index()

# company 列を追加
subset_dat_avg["company"] = np.where(subset_dat_avg["comp_type"]=="tech", "Avg tech", "Avg fmcg")

# DataFrame を結合
plot_df = pd.concat([subset_dat, subset_dat_avg], axis=0)

# プロットを作成
sns.relplot(data=plot_df.reset_index(drop=True), x="Year", y="gross_margin", hue="company", col="comp_type", kind="line")
plt.show()
plt.close()

この演習では、tech と FMCG の DataFrame に対して同じ処理を繰り返していることに気づきます。これは重複が多く、DRY(Don't repeat yourself:繰り返しを避ける)というコーディング原則に反します。重複したコードは、作業量が増えるだけでなく、ミスも起こりやすくなります。この演習では、データ処理とプロット作成を行う関数を自分で定義します。

Инструкции 1 / 2

undefined XP
    1
    2

Вопрос

次の関数を見てください。これは前の演習で行ったプロットを、重複を取り除いて作成できる関数です。

def make_plot(dataset, ratio, comp_type):
  whole_dat = []
  for industry in comp_type:
    dat = dataset.loc[dataset["comp_type"]==industry]
    dat_avg = dat.pivot_table(index="Year", values=ratio).reset_index()
    dat_avg["company"], dat_avg["comp_type"] = f"Avg {type}", industry"
    whole_dat.append(pd.concat([dat, dat_avg]))

  plot_df = pd.concat(whole_dat).reset_index(drop=True)
  sns.relplot(data=plot_df, x="Year", y="gross_margin", hue="company", col="comp_type", kind="line")
  plt.show()
  plt.close()

この関数では f-string(f"Avg {industry}")を使っています。これは Avg に続けて、変数 industry の値を連結した文字列を返します。また、reset_index() にある drop=True にも注目してください。これは DataFrame のインデックスをリセットしますが、元のインデックスを列としては追加しません。

この関数は何個の comp_types を受け取れますか? 関数はコンソールに読み込まれているので試せます。pandas の DataFrame dataset も、粗利益率の計算済みで利用できます。

Возможные ответы