Exploratory Data Analysis 2

#zadatak
"""
    * Kreirajte AvgTemperature_C = (AvgTemperature - 32) * 5/9 pa ga nadalje koristite za analize...
    * Kako se odnose raspodela temperatura 1995. i 2005. godine? Prikazati pomoću histograma. (Iskoristiti 
      opciju za transparentnost histograma alpha kako bi se oba histograma mogla prikazati na istom grafiku.)
    * Prikažite Top-5 zemalja sa najvišim prosečnim termperaturama.
    * Napravite boxplot po kontinentu (izaberite 2 kontinenta) — uporedite raspodele prosečnih temperatura.
"""

#importujemo
import pandas as pd
import numpy as np
import matplotlib as plt
import seaborn as sb
from pathlib import Path

#podesavanje parametara za grafike
plt.rcParams['figure.figsize'] = (10,5)

#ucitavanje fajla
DATA_PATH = Path("city_temperature.csv")
df = pd.read_csv(DATA_PATH)

#ciscenje i dopuna podataka
#menjanje prosecnih temperatura sa -99, nultih dana... na nan
df.loc[df["AvgTemperature"] == -99, "AvgTemperature"] = np.nan
df.loc[df["Day"] == 0, "Day"] = np.nan

#menjanje 200. i 201. godine isto u nan
df["Year"] = df["Year"].replace({200: np.nan, 201: np.nan})

#izbacivanje nepotrebne kolone
if "State" in df.columns:
    df = df.drop("State", axis=1)

#forward fill za avgtemp
df["AvgTemperature"] = df["AvgTemperature"].ffill()

#izbacuju se SVI nanovi!!!!!!!
df = df.dropna(axis=0)
print("Oblik po ciscenju:", df.shape)
print(df.head()) #display na jupyteru

#1. postavljanje kolone na celzijus
df["AvgTemperature_C"] = (df["AvgTemperature"] - 32) * (5/9)
print(df.head())
print(df["AvgTemperature_C"].describe())

#2. histogram: 1995-2005
sub_95 = df.loc[df["Year"]==1995, "AvgTemperature_C"]
sub_05 = df.loc[df["Year"]==2005, "AvgTemperature_C"]

#prikaz histograma za obe godine
plt.hist(sub_95, density=False, bins=30, alpha=0.5, label="1995")
plt.hist(sub_05, density=False, bins=30, alpha=0.5, label="2005")

#labelovanje....
plt.xlabel("AvgTemperature (°C)")
plt.ylabel("Broj pojavljivanja")
plt.legend(loc="best")
plt.tight_layout()
plt.show()

#3. top pet zemalja po prosecnoj temperaturi u °C
country_mean = (df.groupby("Country", as_index=True)["AvgTemperature_C"]\
                .mean()\
                .sort_values(ascending=False)\
                .head(5))

#prikaz i to zaokruzen na dveju decimala
print(country_mean.to_frame("AvgTemperature_C_mean").round(2)) #display na jupyteru

#vizuelizacija
plt.figure(figsize=(10,5))
sb.barplot(x=country_mean.index.astype(str), y=country_mean.values)
plt.title("Top 5 zemalja po prosecnoj temperaturi")
plt.xlabel("Country")
plt.ylabel("Prosecna temperatura u C")
plt.xticks(rotation=30, ha="right")
plt.tight_layout()
plt.show()

#4. boxplot po kontinentu
#izdvajanja
sub_eu = df.loc[df["Region"] == "Europe", "AvgTemperature_C"]
sub_au = df.loc[df["Region"] == "Australia/South Pacific", "AvgTemperature_C"]

#pripremanje plota
plt.figure(figsize=(10,5))
plt.boxplot([sub_eu, sub_au])
plt.title("Boxplot Avg °C")
plt.xlabel("Region")
plt.ylabel("AvgTemprature")
plt.tight_layout()
plt.show()