Denne notatboken ble brukt på Zoom-forelsening nr 2, 28.10.2020, se også forelesningsnotater fra timen på https://www.math.ntnu.no/emner/IST100x/ISTx1003/Zoom2InClass20201028.pdf
Spørsmål: hva er sammenhengen mellom leiepris for leiligheter i München og mange ulike egenskaper til leiligheten? Kan vi lage en prediksjonsmodell?
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
import statsmodels.formula.api as smf
import statsmodels.api as sm
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)# fordi en av plottefunksjonene må oppdateres av utvikler og kommer per i dag med lang FutureWarning som vi ikke vil se på
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "last_expr"
Hva ser vi etter i plott av data?
filurl="http://www.uni-goettingen.de/de/document/download/64c29c1b1fccb142cfa8f29a942a9e05.raw/rent99.raw"
df=pd.read_csv(filurl," ") # bruker mellomrom mellom kolonner
df=df.astype({'bath':'category','kitchen':'category','cheating':'category','location':'category'})
print(df.shape)
df.sort_values(by=['area'],inplace=True) # Sorterer datasettet mhp area (for plotting)
#df.head() # Merk at den originale indekseringen av rader bevares
print(df.describe())
df.corr()
# Kryssplott
# På diagonalen er glattede histogrammer (tetthetsplott)
sns.pairplot(df, vars = ['rent','area', 'yearc'],
diag_kind = 'kde',
plot_kws=dict(alpha=0.4))
plt.show()
# Kryssplott alene
sns.relplot(x='area', y='rent',data = df)
plt.show()
# Boksplott av de 4 kategoriske variablene
ax = sns.boxplot(x="location", y="rent", data=df)
plt.show()
ax = sns.boxplot(x="bath", y="rent", data=df)
plt.show()
ax = sns.boxplot(x="kitchen", y="rent", data=df)
plt.show()
ax = sns.boxplot(x="cheating", y="rent", data=df)
plt.show()
sns.pairplot(df, vars = ['rent','area', 'yearc'],
hue = 'bath',
diag_kind = 'kde',
plot_kws=dict(alpha=0.4))
plt.show()
## litt uttesting av artige plott bare under her
#ax = sns.boxplot(x="location", y="rent", hue="bath",
# data=df, palette="Set3")
#plt.show()
#ax = sns.boxplot(x="location", y="rent", hue="kitchen",
# data=df, palette="Set3")
#plt.show()
#ax = sns.boxplot(x="location", y="rent", hue="cheating",
# data=df, palette="Set3")
#plt.show()
#ax = sns.swarmplot(x="bath", y="rent", data=df)
#plt.show()
#ax = sns.swarmplot(x="location", y="rent", data=df)
#plt.show()
Hvordan bruker vi en såkalt modellformel for å spesifisere regresjonsmodellen?
formel='rent~area+bath+kitchen+cheating+location'
modell = smf.ols(formel,data=df)
resultat = modell.fit()
print(resultat.summary())
sns.scatterplot(resultat.fittedvalues, resultat.resid)
plt.ylabel("Residual")
plt.xlabel("Predikert verdi")
plt.show()
# Lage kvantil-kvantil-plott for residualene
sm.qqplot(resultat.resid,line='45',fit=True)
plt.ylabel("Kvantiler i residualene")
plt.xlabel("Kvantiler i normalfordelingen")
plt.show()