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

graph.png

grap2.png