"""
## 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
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/irisdata/iris.csv")
"""
Veri çerçevesinin ilk 5 gözlemini görüntüleyelim.
"""
df.head()
"""
Veri çerçevesinin kaç öznitelik ve kaç gözlemden oluştuğunu görüntüleyelim.
"""
df.shape
"""
Veri çerçevesindeki değişkenlerin hangi tipte olduğunu ve bellek kullanımını görüntüleyelim.
"""
df.info()
"""
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["sepal.length"].describe().T 
"""
Veri çerçevesinde hangi öznitelikte kaç adet eksik değer olduğunu gözlemleyelim.
"""
df.isna().sum() 
"""
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ü pozitif ilişki total.length ile petal.length arasında olduğu görülüyor.
"""
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);
"""
Veri çerçevemizin hedef değişkeninin "variety" benzersiz değerlerini görüntüleyelim.
"""
df["variety"].unique()
"""
Veri çerçevemizin hedef değişkeninin "variety" benzersiz kaç adet değer içerdiğini görüntüleyelim.
"""
df["variety"].unique()
"""
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);
"""
Aynı iki veriyi daha farklı bir açıdan frekanslarıyla incelemek için jointplot kullanarak görselleştirelim. 
"""
sns.jointplot(x = "sepal.width", y = "sepal.length", data = df, color="red");

"""
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);
"""
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);
"""
Daha iyi anlayabilmek için sepal.width üzerine bir distplot çizdirelim.
"""
sns.distplot(df["sepal.width"], bins=16, color="red");

"""
Üç ç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(y = 'sepal.length', x = "variety", 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.
"""
sns.countplot(df['variety'])

"""
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.
"""
sns.jointplot(x = "sepal.width", y = "sepal.length", data = df, color="red");
"""
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.
"""
sns.jointplot(x = "sepal.width", y = "sepal.length", kind="kde",data = df, color="red");
"""

scatterplot ile petal.length ve petal.width değişkenlerinin dağılımlarını çizdirelim.
"""
sns.scatterplot(x = "petal.width", y = "petal.length", data = df);

"""
Aynı görselleştirmeye hue = "variety" parametresini ekleyerek 3. bir boyut verelim.
"""
sns.scatterplot(x = "sepal.width", y = "sepal.length", 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']
df

"""
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["sepal.length"].max() 
"""
sepal.length'i 5.5'den büyük ve türü setosa olan gözlemleri yazdıralım.
"""
df[(df["sepal.length"] > 5.5 ) & (df["variety"] == "Setosa")]
"""
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[(df["sepal.length"] < 5.0 ) & (df["variety"] == "Virginica")][["sepal.length","sepal.width"]]
"""
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().head()["petal.length"]
"""
Emeğiniz, ayırdığınız vakit ve ilginiz için teşekkürler.
"""