1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Phân tích báo cáo tài chính bằng Python

Connected

Bài tập

Hàm do người dùng định nghĩa để vẽ biểu đồ

Trong bài trước, bạn đã viết đoạn mã này để tạo biểu đồ:

# Subset tech and fmcg companies
subset_dat = dataset.loc[dataset["comp_type"].isin(["tech", "fmcg"])]

# Compute yearly average gross margin ratio of tech and fmcg companies
subset_dat_avg = subset_dat.pivot_table(index=["Year", "comp_type"], values = "gross_margin").reset_index()

# Add column company
subset_dat_avg["company"] = np.where(subset_dat_avg["comp_type"]=="tech", "Avg tech", "Avg fmcg")

# Concat the DataFrames
plot_df = pd.concat([subset_dat, subset_dat_avg], axis=0)

# Make the plot
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()

Hãy để ý rằng bạn thực hiện cùng một chuỗi thao tác cho cả DataFrame của nhóm công ty tech và FMCG trong bài này. Điều này lặp lại và đi ngược nguyên tắc viết mã DRY - Don't repeat yourself (đừng lặp lại). Mã lặp lại không tốt vì làm tăng khối lượng công việc và khiến mã dễ sai hơn. Trong bài này, bạn sẽ định nghĩa một hàm để xử lý dữ liệu và vẽ hình.

Hướng dẫn 1/2

undefined XP
    1
    2

Câu hỏi

Xem hàm này — hàm này có thể tạo cùng loại biểu đồ như bạn làm ở bài trước nhưng đã loại bỏ phần lặp.

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()

Hàm này dùng f-string với f"Avg {industry}". F-string này sẽ trả về Avg và giá trị của industry làm đầu ra. Cũng lưu ý tham số drop=True trong reset_index(). Tham số này sẽ đặt lại chỉ mục của DataFrame nhưng không thêm chỉ mục cũ thành một cột.

Hàm này có thể nhận bao nhiêu comp_types? Hàm đã được nạp sẵn trong bảng điều khiển để bạn thử. DataFrame pandas dataset cũng đã có sẵn với gross margin đã được tính.

Các phương án trả lời