1. Nauka
  2. /
  3. Kursy
  4. /
  5. Analiza sprawozdań finansowych w Pythonie

Connected

ćwiczenie

Funkcja zdefiniowana przez użytkownika do tworzenia wykresów

W poprzednim ćwiczeniu musiałeś napisać następujący kod, aby stworzyć wykres:

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

Zwróć uwagę, że w tym ćwiczeniu wykonujemy te same operacje na ramkach danych dla firm technologicznych i FMCG. To podejście jest powtarzalne i stoi w sprzeczności z zasadą programowania DRY – Don't Repeat Yourself (nie powtarzaj się). Powtarzalny kod jest niekorzystny, bo zwiększa nakład pracy i sprawia, że kod jest bardziej podatny na błędy. W tym ćwiczeniu zdefiniujesz własną funkcję do przetwarzania danych i tworzenia wykresów.

Instrukcje 1/2

undefined XP
    1
    2

Pytanie

Przyjrzyj się tej funkcji – pozwala ona stworzyć taki sam wykres jak w poprzednim ćwiczeniu, ale bez powtarzającego się kodu.

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

Funkcja używa f-stringa w postaci f"Avg {industry}". Ten f-string zwróci słowo Avg oraz wartość zmiennej industry jako wynik. Zwróć też uwagę na drop=True w reset_index() – to ustawienie resetuje indeks ramki danych, ale nie dodaje starego indeksu jako kolumny.

Ile wartości comp_types może przyjąć ta funkcja? Funkcja jest już wczytana w konsoli – możesz ją przetestować. Dostępna jest również ramka danych pandas o nazwie dataset z obliczoną marżą brutto.

Możliwe odpowiedzi