# --------------
import pandas as pd
import numpy as np
from sklearn.cross_validation import train_test_split
# code starts here
df = pd.read_csv(path)
#X = df.drop('list_price', axis=1)
X = df[['ages','num_reviews','piece_count','play_star_rating','review_difficulty','star_rating','theme_name','val_star_rating','country']]
print (X.head(5))
y = df['list_price']
print (y.head(5))
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.3, random_state=6)
print (X_train.head(5))
print (X_test.head(5))
print (y_train.head(5))
print (y_test.head(5))
# code ends here



# --------------
import matplotlib.pyplot as plt

# code starts here        
cols = X_train.columns

fig, axes = plt.subplots(nrows=3, ncols=3, figsize=(30,30))

for i in range(0,3):
    for j in range(0,3): 
            col = cols[i*3 + j]
            axes[i,j].set_title(col)
            axes[i,j].scatter(X_train[col],y_train)
            axes[i,j].set_xlabel(col)
            axes[i,j].set_ylabel('list_price')
        

# code ends here
plt.show()



# --------------
# Code starts here
corr = X_train.corr()
print (corr)
X_train = X_train.drop(['play_star_rating','val_star_rating'], axis=1)
X_test = X_test.drop(['play_star_rating','val_star_rating'], axis=1)
# Code ends here


# --------------
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# Code starts here
regressor = LinearRegression()
regressor.fit(X_train,y_train)
y_pred = regressor.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print ("mean_squared_error =",mse)
r2 = r2_score(y_test, y_pred)
print ("r squared score =",r2)
# Code ends here


# --------------
# Code starts here
residual = y_test - y_pred
plt.figure(figsize=(20,20))
plt.hist(residual)
plt.axvline(residual.mean(), color='k', linestyle='dashed', linewidth=1)
plt.axvline(residual.median(), color='r', linestyle='dashed', linewidth=1)
plt.xlabel('residual')
plt.ylabel('frequency')
plt.show()
# Code ends here


