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