Verilerin grafik olarak gösterilmesinde ki amacımız elimizde ki verinin Normal Dağılıma sahip olup olmadığına bir göz atmak olabilir. Bunun için kullanacağımız Grafiksel yöntemler dağılımın normal olup olmadığına yönelik hızlı bir fikir edinmeye yardımcı olacaktır. Bir verinin dağılımını tespit etmek için yaygın olarak 4 farklı grafik tipi kullanılmaktadır: Histogram, Kutu grafiği (Boxplot), Q-Q grafiği (Quantile-Quantile plot) ve Kernel yoğunluk grafiği (KDEPlot). Grafiksel yöntemler haricinde ikinci seçenek olarak istatistiksel olarak verinin normal dağılım gösterip göstermediğine bakmak için normallik testlerine de ihtiyaç duyarız. Örnek: Shapiro-Wilk testi ve Kolmogorov-Smirnov testi. Ancak konumuz İstatistiksel Normallik testleri değil!

Grafiksel yöntemlerin verinin dağılımına hızlıca göz atmak haricinde veri görselleştirme, aykırı değerleri ve veri yayılımını görme gibi başka amaçları da var elbette, bu dersimizde bu grafiklerin ne amaçla kullanıldıklarını ayrıca  R ve Python kodları yardımıyla nasıl çizileceklerine bakacağız.

1- Histogram

Histogram, veri görselleştirmede en yaygın kullanılan popüler bir grafik türüdür. Bir verinin dağılımını görselleştirmek için sıklıkla tercih edilir. Histogram sürekli değişkenler için çizilen bir grafik türüdür.

Bir değişken normal dağılıma sahip ise histogram zil (bell curve) şeklinde bir görünüme sahip olmalıdır. Normal bir dağılımda ortalama, medyan ve mod aynıdır.

Normal Dağılım Histogram

Resim 1: "kusursuz" Normal Olasılık Dağılımı(Histogram ile gösterimi)

Python'da Histogram Grafiği Çizimi

Python’da histogram grafiği Pandas, Matplotlib veya Seaborn kütüphanelerinden herhangi biri kullanılarak çizilebilir.

A) Matplotlib İle Histogram Çizimi

import matplotlib.pyplot as plt
import numpy as np

x = [40, 52, 65, 15, 30, 100, 90, 55, 45, 74, 80, 36, 25, 65, 60, 40, 45, 78, 50, 70]

plt.hist(x)
plt.title('Sınav Notları | matplotlib')
plt.show()
Histogram Grafiği - Python Matplotlib

Resim 2: Histogram Grafiği - Python Matplotlib

B) Pandas İle Histogram Çizimi

Pandas'da verinin dataFrame olması gerekir.

import pandas as pd
import matplotlib.pyplot as plt

# creating dataframe
dataFrame = pd.DataFrame({
   "ad_soyad": [
    'Ahsen', 'Cenk', 'Deniz', 'Selçuk', 'Mustafa', 'Ali', 'Mustafa', 'Kadir', 'Hasan', 'Mahmut', 'Mesut', 'Halime', 'Leyla', 'Hüseyin', 'Hakan', 'Zeynep', 'Fatma', 'Ekrem', 'Osman', 'Mehmet'
    ],
    "sinav_notlari": [40, 52, 65, 15, 30, 100, 90, 55, 45, 74, 80, 36, 25, 65, 60, 40, 45, 78, 50, 70]
})

# plot a histogram for Registration Price column
plt.hist(dataFrame["sinav_notlari"])
plt.title('Sınav Notları | pandas')
plt.show()
Histogram Grafiği - Python Pandas

Resim 3: Histogram Grafiği - Python Pandas

C) Seaborn İle Histogram Çizimi

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

# creating dataframe
dataFrame = pd.DataFrame({
   "ad_soyad": [
    'Ahsen', 'Cenk', 'Deniz', 'Selçuk', 'Mustafa', 'Ali', 'Mustafa', 'Kadir', 'Hasan', 'Mahmut', 'Mesut', 'Halime', 'Leyla', 'Hüseyin', 'Hakan', 'Zeynep', 'Fatma', 'Ekrem', 'Osman', 'Mehmet'
    ],
    "sinav_notlari": [40, 52, 65, 15, 30, 100, 90, 55, 45, 74, 80, 36, 25, 65, 60, 40, 45, 78, 50, 70]
})

sns.histplot(dataFrame["sinav_notlari"])
plt.title('Sınav Notları | seaborn')
plt.show()
Histogram Grafiği - Python Seaborn

Resim 4: Histogram Grafiği - Python Seaborn

R'da Histogram Grafiği Çizimi

R ile histogram çizimi hist fonksiyonu aracılığı ile gerçekleştirilir. Fonksiyon ile ilgili parametrelerden bazıları şunlardır:

  • x: Çizilmek istenen histogram için değer vektör
  • breaks: Histogramın x ekseninde yer alan, ilgilenilen değişkenin gruplarının ayrılma noktalarını içeren vektör/hesaplayan bir fonksiyon/grup sayısını belirten tek bir değer
  • freq: (mantıksal) Histogram True değeri için frekansları, False için olasılık yoğunluğu temsil eder.
  • right: (mantıksal) True değeri için, sınıflar sağdan kapalı değer aralığı (a, b] olarak ele alınır.
  • col: Sütun rengi belirlenir.
  • labels: Sütunlar için ekstra etiket girdisi (Ör: Sütunların üstünde frekansların yazdırılması)

Örnek bir vektör içindeki verilerin Histogram grafiğini çizdirelim:

sinav_notlari<-c(40, 52, 65, 15, 30, 100, 90, 55, 45, 74, 80, 36, 25, 65, 60, 40, 45, 78, 50, 70)
hist(sinav_notlari, breaks = "Sturges", freq = NULL, right = TRUE, col = c('#5799c6'), main="Sınav Notları | R")

R Histogram Grafiği Çizimi

Resim 5: R Histogram Grafiği Çizimi

2- Line Graph

Zamana veya aynı mantıkla diğer değişkence düzenli bir şekilde değişimini gözlemlemek istediğimiz verileri görselleştirmekte line plot kullanıyoruz. line plot aslında en çok aşina olduğumuz görselleştirme çeşidi. Doların günden güne veya saatlik değişimi, korona virüs vakalarının günlük değişimi gibi zamana bağlı verilerin sunumunda ilk başvurulan yöntem olarak karşımıza çıkıyor.

Bu şekilde odaklandığımız konunun trendini, tepe ve dip noktalarını ve kritik noktaların oluştuğu tarihleri gözlememesi/okuması çok çok kolaylaşıyor.

Python'da Line Graph Çizimi

import matplotlib.pyplot as plt
   
Year = [1920,1930,1940,1950,1960,1970,1980,1990,2000,2010]
Unemployment_Rate = [9.8,12,8,7.2,6.9,7,6.5,6.2,5.5,6.3]
  
plt.plot(Year, Unemployment_Rate)
plt.title('Unemployment Rate Vs Year')
plt.xlabel('Year')
plt.ylabel('Unemployment Rate')
plt.show()
Python'da Line Graph Çizimi

Resim 6: Python'da Line Graph Çizimi

R'da Line Graph Çizimi

# Create the data for the chart.
v <- c(17, 25, 38, 13, 41)

# Plot the bar chart.
plot(v, type = "o", col = "green",
     xlab = "Month", ylab = "Article Written",
     main = "Article Written chart")
R'da Line Graph Çizimi

Resim 7: R'da Line Graph Çizimi

3- Bar Graph(Sütun Grafiği)

Çubuk grafik, kategorik verileri, temsil ettikleri değerlerle orantılı yükseklik veya uzunluklara sahip dikdörtgen çubuklarla sunan resimsel bir veri temsilidir. Başka bir deyişle, veri kümesinin resimsel temsilidir. Bu veri setleri, uzunluğu veya yüksekliği temsil eden değişkenlerin sayısal değerlerini içerir.

Python'da Bar Graph(Sütun Grafiği) Çizimi

import numpy as np
import matplotlib.pyplot as plt

# creating the dataset
data = {'C': 20, 'C++': 15, 'Java': 30,
        'Python': 35}
courses = list(data.keys())
values = list(data.values())

fig = plt.figure(figsize=(10, 5))

# creating the bar plot
plt.bar(courses, values, color='maroon',
        width=0.4)

plt.xlabel("Courses offered")
plt.ylabel("No. of students enrolled")
plt.title("Students enrolled in different courses")
plt.show()
Python'da Bar Graph(Sütun Grafiği) Çizimi

Resim 8: Python'da Bar Graph(Sütun Grafiği) Çizimi

R'da Bar Graph(Sütun Grafiği) Çizimi

# Create the data for the chart
A <- c(17, 2, 8, 13, 1, 22)
B <- c("Jan", "feb", "Mar", "Apr", "May", "Jun")

# Plot the bar chart 
barplot(A, names.arg = B, xlab ="Month", 
        ylab ="Articles", col ="green", 
        main ="GeeksforGeeks-Article chart")
R'da Bar Graph(Sütun Grafiği) Çizimi

Resim 9: R'da Bar Graph(Sütun Grafiği) Çizimi

4- Pie Chart

Eğer kategorik değişkenlerimizin total grup içerisindeki yüzdesel dağılımını görmek istiyorsak pie chart en iyi seçim olacaktır.

Python'da Pie Chart Grafiği Çizimi

import matplotlib.pyplot as plt

labels='Tasks Pending','Tasks Ongoing','Tasks Completed'
sizes=[300,500,700]

explode = (0.1,0,0)

fig1,ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)

plt.show()
Python'da Pie Chart Grafiği Çizimi

Resim 10: Python'da Pie Chart Grafiği Çizimi

Python'da Pie Chart Grafiği Çizimi-2

import matplotlib.pyplot as plt

import pandas as pd

data = {'Tasks': [300,500,700]}
df = pd.DataFrame(data,columns=['Tasks'],index = ['Tasks Pending','Tasks Ongoing','Tasks Completed'])

df.plot.pie(y='Tasks',figsize=(7, 5),autopct='%1.1f%%', startangle=90)
plt.show()
Python'da Pie Chart Grafiği Çizimi-2

Resim 11: Python'da Pie Chart Grafiği Çizimi-2

R'da Pie Chart Grafiği Çizimi

# Load ggplot2
library(ggplot2)

# Create Data
data <- data.frame(
  group=c('Drosophila melanogaster','Haemophilus influenzae','Saccharomyces cerevisiae','Caenorhabditis elegans','Mus musculus','Rattus norvegicus','Escherichia coli'),
  value=c(10.8,31.3,15.2,15.7,12.0,13.0,2.0)
)

# Basic piechart
ggplot(data, aes(x="", y=value, fill=group)) +
  geom_bar(stat="identity", width=1) +
  coord_polar("y", start=0)
R'da Pie Chart Grafiği Çizimi

Resim 12: R'da Pie Chart Grafiği Çizimi

5- Donut Chart

Donut grafikleri, Pasta Grafiklerinin merkez alanı kesilerek değiştirilmiş versiyonudur. Dilimler arasındaki orantı alanını karşılaştırmaya daha fazla odaklanan Pasta grafik yerine, bilgiyi en etkili şekilde temsil etmek için yayların alanının kullanımıyla daha fazla ilgilenir. Donut grafikler alan açısından daha verimlidir çünkü donut grafiklerin içindeki boş alan donut grafik hakkında bazı ek bilgileri görüntülemek için kullanılabilir.

Bir Donut grafiği olabilmesi için mutlaka bir Pasta grafiği olması gerekir. Pasta grafiğine bakarsak, grafiğin merkezine odaklanırız. Öte yandan Donut grafikleri, dilimin boyutunu veya alanını karşılaştırma ihtiyacını ortadan kaldırır ve odağı yayın uzunluğuna kaydırır, bu da ölçülmesi kolaydır.

Python Donut Chart Çizimi

import matplotlib.pyplot as plt
  
# Setting labels for items in Chart
Employee = ['Roshni', 'Shyam', 'Priyanshi',
            'Harshit', 'Anmol']
  
# Setting size in Chart based on 
# given values
Salary = [40000, 50000, 70000, 54000, 44000]
  
# colors
colors = ['#FF0000', '#0000FF', '#FFFF00', 
          '#ADFF2F', '#FFA500']
# explosion
explode = (0.05, 0.05, 0.05, 0.05, 0.05)
  
# Pie Chart
plt.pie(Salary, colors=colors, labels=Employee,
        autopct='%1.1f%%', pctdistance=0.85,
        explode=explode)
  
# draw circle
centre_circle = plt.Circle((0, 0), 0.70, fc='white')
fig = plt.gcf()
  
# Adding Circle in Pie chart
fig.gca().add_artist(centre_circle)
  
# Adding Title of chart
plt.title('Employee Salary Details')
  
# Displaying Chart
plt.show()
Python Donut Chart Çizimi

Resim 13: Python Donut Chart Çizimi

R'da Donut Chart Çizimi

R'da Pie-Donut chart grafiği çizmek için verinin dataFrame olması gerekir.

# Load ggplot2
library(ggplot2)

type <- c("O+", "A+", "B+", "AB+", "O-", "A-", "B-", "AB-")
# variable 2
proportion <- c(33.2,   41.6,   6.8,    3.4,    5.8,    7.4,    1.2,    0.6)
# dataframe
df <- data.frame(type, proportion)
ggplot(df, aes(x=2, y=proportion, fill=type))+
  geom_col(width=1) +
  xlim(0.5, 2.5) +
  scale_fill_viridis_d() +
  coord_polar("y") 
R'da Donut Chart Çizimi

Resim 14: R'da Donut Chart Çizimi

6- Kutu grafiği (Boxplot)

Kutu grafiği (Boxplot), farklı grupları aynı grafik üzerinde karşılaştırma imkanı sunar. Adını şeklinden alan kutu grafiği veri setindeki çeyrekleri kullanarak verinin dağılımını görselleştirir. Görselleştirme için çeyreklik değerlerini kullandığı için veri setindeki aykırı değerlerden etkilenmez.

Veri kümeleri arasındaki benzerlik ya da farklılıkları görmek için kullanılır. Kutu-grafiği kullanılarak veri kümesinin:

  1. Konumu
  2. Yayılımı
  3. Çarpıklığı
  4. Kuyruk uzunluğu
  5. Aykırı değerleri

tespit edilebilmektedir. Veri setinin yayılımı ve konum değerlerinin yardımıyla verilerin dağılımı hakkında ipucu da vermektedir. Ayrıca, birden fazla veri seti olduğunda kutu grafikleri veri kümeleri arasındaki benzerlik ve farklılıkları görmek için kullanılır.

Kutu grafiği (Boxplot)

Resim 15: Kutu grafiği (Boxplot)

Python’da kutu grafiği (Boxplot)

Python’da kutu grafiği Matplotlib ve Seaborn kütüphanelerinden boxplot() fonksiyonu yardımı ile çizdirilebilir.

A) Matplotlibİle (Boxplot) Çizimi

Aşağıdaki örnekte bir sınıftaki kız ve erkek öğrencilerin not ortalamalarını karşılaştırmak için grafik çizelim:

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

# creating dataframe
dataFrame = pd.DataFrame({
   "cinsiyet": [
    "E", "K", "K", "K", "E", "E", "K", "E", "K", "E", "K", "K", "E", "K"
    ],
    "sinav_notlari": [25, 45, 45, 50, 60, 63, 69, 78, 78, 80, 84, 87, 100, 100]
})

dataFrame.boxplot( column =["sinav_notlari"], by="cinsiyet")
plt.title('Sınav Notları | Boxplot Matplotlib')
plt.show()
Python’da kutu grafiği (Boxplot)

Resim 16: Python’da kutu grafiği (Boxplot) Çizimi | Matplotlib

B) Seaborn İle (Boxplot) Çizimi

Aşağıdaki örnekte bir sınıftaki kız ve erkek öğrencilerin not ortalamalarını karşılaştırmak için grafik çizelim:

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns

# creating dataframe
dataFrame = pd.DataFrame({
   "cinsiyet": [
    "E", "K", "K", "K", "E", "E", "K", "E", "K", "E", "K", "K", "E", "K"
    ],
    "sinav_notlari": [25, 45, 45, 50, 60, 63, 69, 78, 78, 80, 84, 87, 100, 100]
})

# Seaborn
sns.boxplot(data=dataFrame, x="cinsiyet", y="sinav_notlari")
plt.title('Sınav Notları | Boxplot Seaborn')
plt.show()
Python’da kutu grafiği (Boxplot) Yatay

Resim 17: Python’da kutu grafiği (Boxplot) Çizimi | Seaborn

R’da kutu grafiği (Boxplot)

R’da kutu grafiği boxplot() fonksiyonuyla oluşturulur. boxplot() fonksiyonu ilk argüman olarak numerik bir vektör yahut veri setimizde yer alan sürekli bir değişken, ikinci argüman olarak genellikle factor tipinde kategorik bir değişkene ihtiyaç duymaktadır. İki değişken arasında İngilizce ’de tilde olarak adlandırılan “~” işareti bulunmaktadır.

Aşağıdaki örnekte bir sınıftaki kız ve erkek öğrencilerin not ortalamalarını karşılaştırmak için grafik çizelim:


cinsiyet <- c("E", "K", "K", "K", "E", "E", "K", "E", "K", "E", "K", "K", "E", "K")

sinav_notlari<- c(25, 45, 45, 50, 60, 63, 69, 78, 78, 80, 84, 87, 100, 100)
# dataframe
df <- data.frame("Cinsiyet"=cinsiyet,"Sınav Notları"= sinav_notlari)

boxplot(sinav_notlari ~ cinsiyet, names = c("Erkek","Kız"),  col=c("blue","pink"), vertical = TRUE, main = "Box Plot | R", data = df) 
R’da kutu grafiği (Boxplot)

Resim 18: R’da kutu grafiği (Boxplot) Çizimi

7- Scatter Plot(Serpme Diyagramı)

Scatter Plot bize değişkenlerin korelasyonu hakkında bilgi sunar. Scatter Plot iki değişkenin arasındaki ilişkiyi ve birlikte değişimlerini gözlemlemede kullanılan bir veri görselleştirme tekniğidir. Eldeki gözlemlerde herhangi bir değişkenin aldığı değerin diğer değişkende karşılık geldiği değeri ya da aralarındaki örüntüyü/ilişkiyi gözlemleme amaçlı kullanılır.

Scatter plot değişkenler arasındaki korelasyon hakkında da bir öngörüde bulunmamızı sağlar. Bununla birlikte, eğer değişkenler arasında bilinen bir korelasyon var ise korelasyonu bozan (sapan değer şüphelisi) gözlemlere de odaklanmamızı, bu değerlerin dikkat çekmesini sağlar.

Python’da Scatter Plot Grafiği Çizimi

Python'da Scatter Plot çizmek için scatter() metodunu kullanırız.

import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

plt.scatter(x, y)
plt.show()
Python’da Scatter Plot Grafiği

Resim 19: Python’da Scatter Plot Grafiği Çizimi

R’da Scatter Plot Grafiği Çizimi

R'da Scatter Plot çizmek için plot() metodunu kullanırız.

x <- c(5,7,8,7,2,17,2,9,4,11,12,9,6)

y <- c(99,86,87,88,111,86,103,87,94,78,77,85,86)
# Plot with main and axis titles
# Change point shape (pch = 19) and remove frame.
plot(x, y, main = "Main title",
     xlab = "X axis title", ylab = "Y axis title",
     pch = 19, frame = FALSE)
R’da Scatter Plot Grafiği

Resim 20: R’da Scatter Plot Grafiği Çizimi

Grafiğe Regression çizgisi eklemek için :

x <- c(5,7,8,7,2,17,2,9,4,11,12,9,6)

y <- c(99,86,87,88,111,86,103,87,94,78,77,85,86)
# Plot with main and axis titles
# Change point shape (pch = 19) and remove frame.

# Add regression line
plot(x, y, main = "Main title",
     xlab = "X axis title", ylab = "Y axis title",
     pch = 19, frame = FALSE)
abline(lm(y ~ x, data = mtcars), col = "blue")
R’da Scatter Plot Grafiği Regression Çizgisi

Resim 21: R’da Scatter Plot Grafiği Regression Çizgisi

9- Frequency Polygon

Python'da Frequency Polygon Çizdirme

import matplotlib.pyplot as plt

x=[78 ,72, 69 ,81 ,63 ,67 ,65 ,75 ,79 ,74 ,71, 83 ,71 ,79 ,80 ,69 ]
a,bins,c=plt.hist(x,bins=7,histtype='step')
l=list(bins)
l.insert(0,0)
l.insert(len(bins)+1,bins[len(bins)-1])
mid=[]
for i in range(len(l)-1):
      ele=(l[i]+l[i+1])/2
      mid.append(ele)
x=list(a)
x.insert(0,0)
x.insert(len(a)+1,0)
plt.plot(mid,x,'go--')
plt.xlabel("Age")
plt.show()
Python'da Frequency Polygon Çizdirme

Resim 22:Python'da Frequency Polygon Çizdirme

R'da Frequency Polygon Çizdirme

# Load ggplot2
library(ggplot2)

type <- c(19 , 20, 30, 35, 40, 45, 50, 60)
# variable 2
proportion <- c(2, 5, 7, 9, 11, 13, 15, 17)
# dataframe
df <- data.frame(type, proportion)
print(df)

ggplot(data = df) + 
  geom_histogram(mapping = aes(x = proportion, y = ..density..), 
                 colour = "black", fill = "white", binwidth = 2.5) + 
  stat_function(fun = dnorm, 
                args = list(mean = mean(df$proportion, na.rm = TRUE), 
                            sd = sd(df$proportion, na.rm = TRUE)), 
                colour = "red", size = 1) + 
  labs(x = "Şehirler arası yakıt\nperformansı", y = "Density")
R'da Frequency Polygon Çizdirme

Resim 23:R'da Frequency Polygon Çizdirme

10- Q-Q grafiği (Quantile-Quantile plot)

Verinin dağılımını anlamaya yönelik bir diğer grafiksel yöntem Q-Q grafiğidir. Q-Q grafiği ile iki olasılık dağılımı (verinin dağılımı ile istenilen olasılık dağılımı) birbiri ile karşılaştırılır. Eğer iki dağılım birbirine eşit ise gözlemler Q-Q grafiğinde bulunan 45 derecelik açıyla çizilmiş düz bir çizgi üzerinde seyreder.

Q-Q grafiği (Quantile-Quantile plot)

Resim 24:Q-Q grafiği (Quantile-Quantile plot)

Gözlem sayısı fazla olan veri setlerinde daha etkilidir. Gözlem sayısının az olduğu veri setlerinde yanıltıcı olabilir.

Python’da Q-Q grafiği (Q-Q plot)

Python’da Q-Q grafiği çizebilmek için stats modülünden probplot() fonksiyonu kullanılabilir.

stats.probplot(my_data, dist = "norm", plot = plt)
 
plt.title("Q-Q Grafiği")
 
plt.show()
Q-Q grafiği (Quantile-Quantile plot)

Resim 25:Q-Q grafiği (Quantile-Quantile plot)

Q-Q grafiği ile değişkenimizin normal dağılıma göre kıyaslanması için "dist" parametresine "norm" yanıtını girdik.

Grafikte de histogramda gördüğümüze benzer bir sonuç var. "white_rating" değişkeni grafiğin üstünde ve altında bazı sapmaları olmasına rağmen normal dağılıma çok yakındır.

R’da Q-Q grafiği (Q-Q plot)

R’da Q-Q grafiği çizebilmek için qqnorm() fonksiyonu kullanılabilir.

paketler<-c(40,43,45,46,46,47,48,48,48,48,48,48,50,50,50,51,51,51,51,52,52,52,53,54,54,54,54,55,56,59)
qqnorm(paketler)
R’da Q-Q grafiği (Q-Q plot)

Resim 26:R’da Q-Q grafiği (Q-Q plot)

Eğer istenilirse referans çizgisi eklenebilir:

paketler<-c(40,43,45,46,46,47,48,48,48,48,48,48,50,50,50,51,51,51,51,52,52,52,53,54,54,54,54,55,56,59)
qqline(paketler, col = "steelblue", lwd = 2)
R’da Q-Q grafiği (Q-Q plot) Referans Çizgisi

Resim 27:R’da Q-Q grafiği (Q-Q plot) Referans Çizgisi

11- Kernel yoğunluk grafiği (KDEPlot)

Bir verinin dağılımını görselleştirebileceğimiz bir diğer grafik türü ise kernel yoğunluk grafiğidir (kernel density plot – kdeplot). Büyük veri setlerinde daha etkilidir. Dağılımın şeklini daha iyi bir şekilde belli eder.

Kernel yoğunluk grafiği (KDEPlot)

Resim 28:Kernel yoğunluk grafiği (KDEPlot)

Python’da Kernel yoğunluk grafiği (kdeplot)

Python’da Kernel yoğunluk grafiği (kdeplot), Seaborn kütüphanesinden kdeplot() fonksiyonu kullanılarak çizilebilir.

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
my_data = [25, 45, 45, 50, 60, 63, 69, 78, 78, 80, 84, 87, 100, 100]

sns.kdeplot(data = my_data)

plt.title('Sınav Notları | seaborn kdeplot')
plt.show()
Kernel yoğunluk grafiği (KDEPlot)

Resim 29:Python Kernel yoğunluk grafiği (KDEPlot)

R’da Kernel yoğunluk grafiği (kdeplot)

sinav_notlari<- c(25, 45, 45, 50, 60, 63, 69, 78, 78, 80, 84, 87, 100, 100)
plot(density(sinav_notlari))
R' da Kernel yoğunluk grafiği (KDEPlot)

Resim 30:R 'da Kernel yoğunluk grafiği (KDEPlot)

12- Violin Plot

Violin (keman) grafiği verilerin dağılımını ve olasılık yoğunluğunu görselleştirmek için en efektif yöntemlerden birisidir.

Violin grafiği box plot ve KDE’nin kombinasyonundan doğmuştur. Box plot, görsel basitliği ve verilerdeki değerlerin nasıl dağıldığına ilişkin önemli ayrıntıları gizleme eğiliminde olduğundan, değişken değerlerinin dağılımının gösterilmesinde sınırları bulunmaktadır.

Violin Plot

Resim 31:Violin Plot

Python Violin Plot Çizdirme

import matplotlib.pyplot as plt

import pandas as pd

data = {
  "Matematik": [420, 380, 390],
  "İngilizce": [50, 40, 45],
  "Tarih": [390, 380, 42],
}

#load data into a DataFrame object:
df = pd.DataFrame(data)
# 3 violin grafiği tek alanda çizdiriyoruz
fig, (ax, ax2, ax3) = plt.subplots(ncols=3,figsize=(15, 5))

ax.violinplot(df.Matematik)
ax.set_title("Matematik")

ax2.violinplot(df.İngilizce)
ax2.set_title("İngilizce")

ax3.violinplot(df.Tarih)
ax3.set_title("Tarih")

plt.show()
Python'da Violin Plot Çizdirme

Resim 32:Python'da Violin Plot Çizdirme

R Violin Plot Çizdirme

# install.packages("vioplot")
library("vioplot")
sinav_notlari <- c(40, 52, 65, 15, 30, 100, 90, 55, 45, 74, 80, 36, 25, 65, 60, 40, 45, 78, 50, 70)
vioplot(sinav_notlari,
        col = 2,               # Color of the area
        rectCol = "red",       # Color of the rectangle
        lineCol = "white",     # Color of the line
        colMed = "green",      # Pch symbol color
        border = "black",      # Color of the border of the violin
        pchMed = 16,           # Pch symbol for the median
        plotCentre = "points") # If "line", plots a median line
R'da Violin Plot Çizdirme

Resim 33:R'da Violin Plot Çizdirme