Problem 1: Odenen Hesaba Gore Verilen Bahsisler Nasil Degisir?
Problem 2: 26.5 Dolar hesap odeyen bir kadin ne kadar bahsis birakir?
Bu problemlere yanıtlar arayacağız.
Program:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt print '1- Veri Gereksinimi:\nProblem 1: Odenen Hesaba Gore Verilen Bahsisler Nasil Degisir?' \ '\nProblem 2: 26.5 Dolar hesap odeyen bir kadin ne kadar bahsis birakir?\n\n', '\n', '-' * 100 print '2- Veri Toplama: tips veri seti yukleniyor...', '\n', '-' * 100 # Probleme Uygun Veri Setini Yukleme veri_seti = sns.load_dataset("tips") print '3- Veri Isleme', '\n', '-' * 100 # veri setini seaborn uzerinden yukledigimiz icin # veriler DataFrame olarak saklaniyor. # bu nedenle veri isleme basamagini gerceklestirmis olduk. # Verileri Analiz Edebilmek icin Tablolar Olusturma # ilk olarak verinin icerigini anlamak icin verilere goz atalim. print 'Ham Veri Seti\n\n', veri_seti.head(), '\n', '-' * 100 # toplam hesap, bahsis, cinsiyet, sigara icip icmedigi gibi cesitli # kategorik ve numerik verilere sahibiz. print '4- Veri Temizleme', '\n', '-' * 100 # oncelikle kullanmayacagimiz bilgileri tablomuzdan silelim. del veri_seti['size'] del veri_seti['time'] del veri_seti['day'] print 'Temizlenmis Veri Seti\n\n', veri_seti.head(), '\n', '-' * 100 # eksik verimiz var mi, kontrol edelim. # print veri_seti.isnull() pd.isnull(veri_seti['total_bill']) miss = veri_seti.isnull() eksik = False for i in range(0, len(miss['total_bill'])): if miss['total_bill'][i]: print "Toplam Hesap Bilgisinde Eksik Veri Var." eksik = True if miss['tip'][i]: print "Bahsis Bilgisinde Eksik Veri Var." eksik = True if miss['sex'][i]: print "Cinsiyet Bilgisinde Eksik Veri Var." eksik = True if miss['smoker'][i]: print "Sigara icip icmedigi Bilgisinde Eksik Veri Var." eksik = True if not eksik: print "Eksik Veri Bulunmamaktadir.", '\n', '-' * 100 # Herhangi bir eksik verimiz bulunmadigi icin baska bir islem yapmiyoruz. print '5- Kesifsel Veri Analizi', '\n', '-' * 100 # simdi de bu 4 bilgi arasinda ikiserli iliskilere bir goz atalim. sns.pairplot(veri_seti, hue='sex', palette='magma') sns.pairplot(veri_seti, hue='smoker', palette='husl') plt.show() # bu cizimlere bakarak acikca soyleyebiliriz ki # kadinlar erkeklerden daha cok bahsis odemisler. # sigara icmeyenler de icenlere gore daha cok bahsis odemis. # ve odenen hesap arttikca artan birakilan bahsisin de artigini gorebiliyoruz. # ortalama ne kadar bahsis birakiliyor bunu hesaplayalim. ortalama_bahsis_miktari = sum(veri_seti['tip']) / len(veri_seti['tip']) print "Ortalama Bahsis Miktari: ", ortalama_bahsis_miktari, '\n', '-' * 100 # ortalama bahsis miktarina bakarak 2. problemimize bir yanit bulmus olduk. # ortalama bahsis miktarini sadece kadin musteriler icin tekrar hesaplayalim. yeni_veri_seti = veri_seti[veri_seti['sex'] == 'Female'] print 'Yeni Veri Seti\n\n', yeni_veri_seti.head(), '\n', '-' * 100 # goruldugu gibi yeni veri setimizde sadece Female ler var. # kadinlarin odedigi ortalama bahsis miktari ortalama_bahsis_miktari_kadinlar = sum(yeni_veri_seti['tip']) / len(yeni_veri_seti['tip']) print "Kadinlarin Odedigi Ortalama Bahsis Miktari: ", ortalama_bahsis_miktari_kadinlar, '\n', '-' * 100 # bu sonuca gore gozukuyor ki kadinlar, # butun ortalama bahsis miktarindan daha az bahsis oduyor. # ikinci problemin cevabina simdi 2.83 dolar diye yanit verebiliriz. # sadece ortalama bahsis miktarina gore cevap verseydik 2.99~ dolar yanitini verecektik. print '6- Modelleme ve Algoritma', '\n', '-' * 100 # 2. probleme daha dogru bir yanit bulabilmek icin # lineer regresyon egrisini veri setimize uygulayalim. Veri = yeni_veri_seti.as_matrix() X = (Veri[:, 0]) y = (Veri[:, 1]) total_y = sum(y) total_x = sum(X) total_y_2 = sum(y * y) total_x_2 = sum(X * X) total_x_y = sum(y * X) A = ((total_y * total_x_2) - (total_x * total_x_y)) / ((50 * total_x_2) - (total_x * total_x)) B = ((50 * total_x_y) - (total_x * total_y)) / ((50 * total_x_2) - (total_x * total_x)) # y = A + B * x xx = X yy = A + B * X plt.plot(xx, yy, c='blue') plt.scatter(X, y, marker='o', c='magenta') plt.xlabel('Odenen Hesap') plt.ylabel('Verilen Bahsis') plt.title('Hesap - Bahsis') print '7- Veri Urunu', '\n', '-' * 100 # 26.5 dolar'a karsilik gelen bahsis miktarini denklem ile hesaplayalim. odedigi_hesap = 26.5 tahmini_bahsis = A + B * odedigi_hesap plt.plot(odedigi_hesap, tahmini_bahsis, color="purple", marker="o", markersize=10) print '26.5 dolar a karsilik gelen bahsis miktari: ', tahmini_bahsis, '\n', '-' * 100 print '8- Iletisim', '\n', '-' * 100 # burada da kullaniciya ilgili grafikleri gosteriyoruz. plt.show()