47  Problem #2

Pliki są dostępne tutaj https://github.com/pjastr/aiwd-book/tree/main/dataset

Cel: wykres liniowy

Cel dodatkowy: użycie funkcji pivot

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import io



# Wczytaj dane do DataFrame
df = pd.read_csv('dataset/economic_data.csv')

# Wyświetl pierwsze kilka wierszy oryginalnego DataFrame
print("Oryginalny DataFrame:")
print(df.head())

# Użyj pivot do przekształcenia danych
# Dla każdego wskaźnika tworzymy osobny pivot, aby otrzymać dane w formie odpowiedniej do wykresów

# Przekształcenie danych za pomocą pivot dla każdego wskaźnika
gdp_growth_pivot = df[df['Indicator'] == 'GDP Growth'].pivot(index='Year', columns='Country', values='Value')
inflation_pivot = df[df['Indicator'] == 'Inflation'].pivot(index='Year', columns='Country', values='Value')
unemployment_pivot = df[df['Indicator'] == 'Unemployment'].pivot(index='Year', columns='Country', values='Value')

# Wyświetl przekształcone DataFrames
print("\nDataFrame GDP Growth po transformacji pivot:")
print(gdp_growth_pivot)

print("\nDataFrame Inflation po transformacji pivot:")
print(inflation_pivot)

print("\nDataFrame Unemployment po transformacji pivot:")
print(unemployment_pivot)

# Ustawienie stylu dla lepszej estetyki
sns.set_style("whitegrid")
plt.figure(figsize=(18, 12))

# Lista kolorów dla lepszego rozróżnienia krajów
colors = ['#1f77b4', '#ff7f0e', '#2ca02c']

# Wykres wzrostu PKB
plt.subplot(3, 1, 1)
for i, country in enumerate(gdp_growth_pivot.columns):
    plt.plot(gdp_growth_pivot.index, gdp_growth_pivot[country], marker='o', 
             linewidth=2.5, label=country, color=colors[i])
    

plt.title('Wzrost PKB (%) według krajów (2018-2023)', fontsize=16, fontweight='bold')
plt.ylabel('Wzrost PKB (%)', fontsize=14)
plt.grid(True, alpha=0.3)
plt.legend(loc='upper left', fontsize=12)
plt.axhline(y=0, color='black', linestyle='-', alpha=0.2)  # Linia na poziomie 0%

# Wykres inflacji
plt.subplot(3, 1, 2)
for i, country in enumerate(inflation_pivot.columns):
    plt.plot(inflation_pivot.index, inflation_pivot[country], marker='s', 
             linewidth=2.5, label=country, color=colors[i])
    

plt.title('Stopa inflacji (%) według krajów (2018-2023)', fontsize=16, fontweight='bold')
plt.ylabel('Stopa inflacji (%)', fontsize=14)
plt.grid(True, alpha=0.3)
plt.legend(loc='upper left', fontsize=12)

# Wykres bezrobocia
plt.subplot(3, 1, 3)
for i, country in enumerate(unemployment_pivot.columns):
    plt.plot(unemployment_pivot.index, unemployment_pivot[country], marker='^', 
             linewidth=2.5, label=country, color=colors[i])
  

plt.title('Stopa bezrobocia (%) według krajów (2018-2023)', fontsize=16, fontweight='bold')
plt.xlabel('Rok', fontsize=14)
plt.ylabel('Stopa bezrobocia (%)', fontsize=14)
plt.grid(True, alpha=0.3)
plt.legend(loc='upper left', fontsize=12)

plt.tight_layout(pad=3.0)
plt.savefig('wskazniki_ekonomiczne.png', dpi=300, bbox_inches='tight')
plt.show()
Oryginalny DataFrame:
   Year  Country     Indicator  Value
0  2018      USA    GDP Growth    2.9
1  2018      USA     Inflation    2.4
2  2018      USA  Unemployment    3.9
3  2018  Germany    GDP Growth    1.1
4  2018  Germany     Inflation    1.9

DataFrame GDP Growth po transformacji pivot:
Country  Germany  Japan  USA
Year                        
2018         1.1    0.6  2.9
2019         0.6    0.3  2.3
2020        -4.6   -4.5 -3.4
2021         2.9    1.6  5.7
2022         1.8    1.0  2.1
2023         0.3    1.9  2.5

DataFrame Inflation po transformacji pivot:
Country  Germany  Japan  USA
Year                        
2018         1.9    1.0  2.4
2019         1.4    0.5  1.8
2020         0.5    0.0  1.2
2021         3.1    0.3  4.7
2022         6.9    2.5  8.0
2023         5.9    3.1  4.1

DataFrame Unemployment po transformacji pivot:
Country  Germany  Japan  USA
Year                        
2018         3.4    2.4  3.9
2019         3.2    2.4  3.7
2020         4.2    2.8  8.1
2021         3.6    2.8  5.4
2022         3.0    2.6  3.6
2023         3.1    2.5  3.7