In [129]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model

In [130]:
#Bisiklte kiralama veirlerini yükledik
bisikletKiralama=pd.read_csv("http://bit.ly/2m1hi2j")

In [131]:
#Şimdi elimizdeki özellikleri görmek için ilk 3 satırı yazdıralım....
bisikletKiralama.head(3)


Out[131]:
instant dteday season yr mnth holiday weekday workingday weathersit temp atemp hum windspeed casual registered cnt
0 1 2011-01-01 1 0 1 0 6 0 2 0.344167 0.363625 0.805833 0.160446 331 654 985
1 2 2011-01-02 1 0 1 0 0 0 2 0.363478 0.353739 0.696087 0.248539 131 670 801
2 3 2011-01-03 1 0 1 0 1 1 1 0.196364 0.189405 0.437273 0.248309 120 1229 1349
x ekseninde rüzgar hızı windspeed y ekseninde kiralama (cnt) sayısı olacak biçimde verinin "scatter plot" halini çizdirelim. Matplot Kullanmalısınız

In [132]:
plt.style.use('seaborn-talk')
plt.scatter(bisikletKiralama['windspeed'], bisikletKiralama['cnt'])
plt.xlabel('Rüzgar Hızı')
plt.ylabel('Kiralama Sayısı')
plt.show()



In [133]:
# Bisiklet kiralamayı etkileyen faktörler nelerdir ?
# cevap :
Rüzgar hızını (windspeed) kullanarak, kiralamayı tahmin edebileceğiniz tek parametreli bir regresyon modeli kurunuz

In [134]:
model1=linear_model.LinearRegression()
count = len(bisikletKiralama.index)
model1.fit(bisikletKiralama['windspeed'].values.reshape(731, 1), bisikletKiralama['cnt'].values.reshape(731, 1))
model1.predict(0.1)


Out[134]:
array([[ 5034.861602]])

In [135]:
#Modelinizi ve verinin endisini yazdırınız.
plt.style.use('seaborn-talk')
plt.scatter(bisikletKiralama['windspeed'], bisikletKiralama['cnt'])
plt.plot(bisikletKiralama['windspeed'], model1.predict(bisikletKiralama['windspeed'].values.reshape(count,1)), color='red')
plt.xlabel('Rüzgar Hızı')
plt.ylabel('Kiralama Sayısı')
plt.show()


Bazı verileri (outlier) temizleyerek yeniden model oluşturacağız
  • Sadece 500 den büyük kiralamaları ve rüzgar hızı 0.4 den küçük olan verileri yeni bir dataframe de birleştiriniz. (bisikletKiraYeni)
  • Matplot kullanarak. bu verileri scatter plot ile çiziniz.

In [136]:
filter1 = bisikletKiralama['cnt'] > 500
filter2 = bisikletKiralama['windspeed'] < 0.4
bisikletKiralama = bisikletKiralama[(filter1) & (filter2)]
count = bisikletKiralama.count()

In [137]:
plt.style.use('seaborn-talk')
plt.scatter(bisikletKiralama['windspeed'], bisikletKiralama['cnt'])
plt.xlabel('Rüzgar Hızı')
plt.ylabel('Kiralama Sayısı')
plt.show()



In [138]:
# Temizlenmiş verileri kullanarak model2 adında yeni bir model oluşturunuz.
model2=linear_model.LinearRegression()
count = len(bisikletKiralama.index)
model2.fit(bisikletKiralama['windspeed'].values.reshape(count, 1), bisikletKiralama['cnt'].values.reshape(count, 1))


Out[138]:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

In [139]:
plt.style.use('seaborn-talk')
plt.scatter(bisikletKiralama['windspeed'], bisikletKiralama['cnt'])
plt.plot(bisikletKiralama['windspeed'], model2.predict(bisikletKiralama['windspeed'].values.reshape(count,1)), color='red')
plt.xlabel('Rüzgar Hızı')
plt.ylabel('Kiralama Sayısı')
plt.show()


Her iki modelin katsayılarını yazdırınız. Aralarında bir fark var mı ? Bu fark rüzgar hızına göre kiralamayı sizce nasıl etkiliyor ?


In [140]:
# İki modelin tahmin ettiği değerler neredeyse aynı. Rüzgar hızı yaklaşık %10 ile kiralama sayısını etkiliyor.
print(model1.coef_, model2.coef_)


[[-5862.91276042]] [[-5624.26769234]]
RSS i hesaplayınız

Aşağıda tek bir nokta için yardımcı olması amacı ile bir hesap verilmiştir. siz tüm veri noktaları için bu hesabı yapınız ve toplam hatayı bulunuz.


In [141]:
# Sadece anlamaya çalışınız bu satırlar toplam hatayı hesaplamanıza yardımcı olacak
#bisKiralamaClear[:1]
#lets show them how to predict single data
print(bisikletKiralama[:1]['windspeed'].values.reshape(-1,1),bisikletKiralama[:1]['cnt'])
#model2.predict(bisikletKiralama[:1]['windspeed'].values.reshape(-1,1))


[[ 0.160446]] 0    985
Name: cnt, dtype: int64

In [142]:
rssSingle=(bisikletKiralama[:1]['cnt'].values.reshape(-1,1) - model2.predict(bisikletKiralama[:1]['windspeed'].values.reshape(-1,1))) ** 2

In [143]:
#RSS for single point
rssSingle


Out[143]:
array([[ 13735246.47181638]])

In [144]:
#Şimdi sizin sıranız. Toplam hatayı hesaplayınız.

In [145]:
RSS = ((bisikletKiralama[:]['cnt'].values.reshape(-1,1) - model2.predict(bisikletKiralama[:]['windspeed'].values.reshape(-1,1))) ** 2).sum()
RSS


Out[145]:
2528245723.029017