"""
## Keşifçi Veri Analizi | Becerileri Pekiştirme
"""
"""
Aşağıda ihtiyacımız doğrultusunda kullanacağımız kütüphaneleri yükleyelim.
"""
import numpy as np
import seaborn as sns # kendine özgü kısaltmaları ile kütüphaneleri ekledik
import pandas as pd 
"""
Veri çerçevemizi bulunduğumuz dizinden yükleyelim ve bir veri çerçevesi haline getirerek df değişkenine atayalım. (pd.read_csv(...csv))
"""
df = pd.read_csv("../input/iris.csv") #veri dosyamızı dataframe kısaltması olan df isimli değişkene taşıdık
"""
Veri çerçevesinin ilk 5 gözlemini görüntüleyelim.
"""
df.head() #parantezin içine n = 10 gibi sayılar ekleyerek satır sayısını arttırabiliriz
"""
Veri çerçevesinin kaç öznitelik ve kaç gözlemden oluştuğunu görüntüleyelim.
"""
df.shape #satır sütun sayısı yerine öznitelik ve gözlem sayısı olarak türkçeleştiriyoruz
         #shape komutunda parantez kullanmamaya dikkat ediyoruz
"""
Veri çerçevesindeki değişkenlerin hangi tipte olduğunu ve bellek kullanımını görüntüleyelim.
"""
df.info() #boş olmayan veri kolon sayısı dahil temel bilgileri verir
"""
Veri çerçevesindeki sayısal değişkenler için temel istatistik değerlerini görüntüleyelim.

Standart sapma ve ortalama değerlerden çıkarımda bulunarak hangi değişkenlerin ne kadar varyansa sahip olduğu hakkında fikir yürütelim.
"""
df.describe() #varyans standart sapmanın karekök alınmamış halidir
              #.T ekleyerek satır ile sütunun yer değiştirmesini sağayabiliriz
"""
Veri çerçevesinde hangi öznitelikte kaç adet eksik değer olduğunu gözlemleyelim.
"""
df.isna().sum()#isna is null olarak açılabilir
               #tekrar sum() ekleyerek toplam eksik değer sayısını bulabiliriz
"""
Sayısal değişkenler arasında korelasyon olup olmadığını göstermek için korelasyon matrisi çizdirelim. Korelasyon katsayıları hakkında fikir yürütelim.

En güçlü pozitif ilişki hangi iki değişken arasındadır?
"""
df.corr() #en güçlü ilişki petal.lenght ile petal.with arasında
"""
Korelasyon katsayılarını daha iyi okuyabilmek için ısı haritası çizdirelim.
"""
corr = df.corr()
sns.heatmap(corr,
            xticklabels=corr.columns.values,
            yticklabels=corr.columns.values);
#renk koyulaştıkça negatif yönde,beyazlaştıkça pozitif yönde korelasyon artar
"""
Veri çerçevemizin hedef değişkeninin "variety" benzersiz değerlerini görüntüleyelim.
"""
df["variety"].unique()#dizi şeklinde döndürür
"""
Veri çerçevemizin hedef değişkeninin "variety" benzersiz kaç adet değer içerdiğini görüntüleyelim.
"""
df["variety"].nunique()#number'in 'n'si başa gelir ve bize adet bilgisini verir
"""
Veri çerçevesindeki sepal.width ve sepal.length değişkenlerinin sürekli olduğunu görüyoruz. Bu iki sürekli veriyi görselleştirmek için önce scatterplot kullanalım.
"""
sns.scatterplot(x="sepal.width", y="sepal.length", data=df)
#kategorileştirme yapmadan noktalı olarak görselleştirdik
"""
Aynı iki veriyi daha farklı bir açıdan frekanslarıyla incelemek için jointplot kullanarak görselleştirelim. 
"""
sns.jointplot(x=df["sepal.width"],y=df["sepal.length"],kind="kde",color="blue");
"""
Aynı iki veriyi scatterplot ile tekrardan görselleştirelim fakat bu sefer "variety" parametresi ile hedef değişkenine göre kırdıralım. 

3 farklı renk arasında sepal değişkenleriyle bir kümeleme yapılabilir mi? Ne kadar ayırt edilebilir bunun üzerine düşünelim.
"""
sns.scatterplot(x="sepal.width", y="sepal.length",hue="variety" , data=df)
#virginica türü sepal.lenght özelliği ile ön plana çıkarken setosa türü sepal.with özelliği ile ön planda
"""
value_counts() fonksiyonu ile veri çerçevemizin ne kadar dengeli dağıldığını sorgulayalım. 
"""
df["variety"].value_counts()

"""
Keman grafiği çizdirerek sepal.width değişkeninin dağılımını inceleyin. 

Söz konusu dağılım bizim için ne ifade ediyor, normal bir dağılım olduğunu söyleyebilir miyiz?
"""
sns.violinplot(y="sepal.width",data=df);
#en yaygın 3.0 değerinde gözlemleniyor
"""
Daha iyi anlayabilmek için sepal.width üzerine bir distplot çizdirelim.
"""
sns.distplot(df["sepal.width"],bins=16,color='purple')
#merkezi limit teoremi
"""
Üç çiçek türü için üç farklı keman grafiğini sepal.length değişkeninin dağılımı üzerine tek bir satır ile görselleştirelim.
"""
sns.violinplot(x="variety",y="sepal.width",data=df);
"""
Hangi çiçek türünden kaçar adet gözlem barındırıyor veri çerçevemiz?

50 x 3 olduğunu ve dengeli olduğunu value_counts ile zaten görmüştük, ancak bunu görsel olarak ifade etmek için sns.countplot() fonksiyonuna variety parametresini vereilm.
"""
ax = sns.countplot(x="variety", data=df)
"""
sepal.length ve sepal.width değişkenlerini sns.jointplot ile görselleştirelim, dağılımı ve dağılımın frekansı yüksek olduğu bölgelerini inceleyelim.
"""
g = sns.jointplot(x="sepal.length", y="sepal.width", data=df)
"""
Bir önceki hücrede yapmış olduğumuz görselleştirmeye kind = "kde" parametresini ekleyelim. Böylelikle dağılımın noktalı gösterimden çıkıp yoğunluk odaklı bir görselleştirmeye dönüştüğünü görmüş olacağız.
"""
g = sns.jointplot(x="sepal.length", y="sepal.width",kind = "kde", data=df)
"""
scatterplot ile petal.length ve petal.width değişkenlerinin dağılımlarını çizdirelim.
"""
sns.scatterplot(x="petal.length",y="petal.width",data=df)
"""
Aynı görselleştirmeye hue = "variety" parametresini ekleyerek 3. bir boyut verelim.
"""
sns.scatterplot(x="petal.length",y="petal.width",hue = "variety",data=df)
"""
sns.lmplot() görselleştirmesini petal.length ve petal.width değişkenleriyle implemente edelim. Petal length ile petal width arasında ne tür bir ilişki var ve bu ilişki güçlü müdür? sorusunu yanıtlayalım.
"""
sns.lmplot(x="petal.length",y="petal.width",data=df)
"""
Bu sorunun yanıtını pekiştirmek için iki değişken arasında korelasyon katsayısını yazdıralım. 
"""
df.corr()["petal.width"]["petal.length"]
"""
Petal Length ile Sepal Length değerlerini toplayarak yeni bir total length özniteliği oluşturalım.
"""
df["total.length"]=df["sepal.length"]+df["petal.length"]

"""
total.length'in ortalama değerini yazdıralım. 
"""
df["total.length"].mean()
"""
total.length'in standart sapma değerini yazdıralım.
"""
df["total.length"].std()
"""
sepal.length'in maksimum değerini yazdıralım.
"""
df.max()["petal.length"]
"""
sepal.length'i 5.5'den büyük ve türü setosa olan gözlemleri yazdıralım.
"""
#df[ (df["variety"] == "setosa") & ( df["sepal.length" > 5.5] ) ]

df.sort_values('sepal.length', axis = 0, ascending = False).head(1)
"""
petal.length'i 5'den küçük ve türü virginica olan gözlemlerin sadece sepal.length ve sepal.width değişkenlerini ve değerlerini yazdıralım.
"""
#df_filtered = df.query("petal.length<5 & variety==virginica")[["sepal.length","sepal.width"]]

#&(df["sepal.length > 5.5"]
df[(df["variety"] == "setosa") & (df["sepal.length"] > 5.5)]

"""
Hedef değişkenimiz variety'e göre bir gruplama işlemi yapalım değişken değerlerimizin ortalamasını görüntüleyelim.
"""
df.groupby(["variety"]).mean()
"""
Hedef değişkenimiz variety'e göre gruplama işlemi yaparak sadece petal.length değişkenimizin standart sapma değerlerini yazdıralım. 
"""
df.groupby(["variety"]).std()["petal.length"]
"""
Emeğiniz, ayırdığınız vakit ve ilginiz için teşekkürler.
"""