Python ile Özet İstatistikleri

Enes Eren
4 min readMar 20, 2023

Bu yazıda temel istatistik bildiğiniz varsayılmaktadır. Eğer bu konuda bir tekrar yapmak isterseniz bu yazımı takip edebilirsiniz. (İstatistiğe Giriş: Özet İstatistikleri)

Bu yazıda ayrıca temel python bildiğiniz varsayılmaktadır. Eğer bu konuda bir tekrar yapmak isterseniz bu yazımı takip edebilirsiniz. (Python’da Fonksiyonlar, Metodlar ve Paketler)

Python paketlerini kullanarak veri setimiz ile ilgili istatistiksel hesaplamalar yapabiliriz. Elimizde 2018 Karbon Ayak İzi Endeksi ile ilgili bir veri seti bulunmaktadır. Bu veri seti food_consumption, consumption ve co2_emission adındaki tablolaradan oluşmaktadır. Bu tabloları numpy ve pandas paketlerini kullanarak analiz edeceğiz.

import pandas as pd
import numpy as np

co2_emissions = pd.read_csv('co2_emissions.csv')
consumption = pd.read_csv('consumption.csv')
food_consumption = pd.read_csv('food_consumption.csv')

Paketleri ve veriyi içeri aktardığımıza göre artık analize başlayabiliriz.

food_consumption tablosunda ülkeler ve bu ülkelerin yemeklerinin tüketimi ve karbondioksit emisyonları ile ilgili bilgiler bulunmaktadır.

Merkezi Eğilim Ölçüleri

Burada ortalama ve medyan hesaplayacağız.

be_consumption = food_consumption[food_consumption.country == 'Belgium']

usa_consumption = food_consumption[food_consumption.country == 'USA']

print('BE Ortalama: ', np.mean(be_consumption.consumption))
print('BE Medyan: ', np.median(be_consumption.consumption))

print('ABD Ortalama: ', np.mean(usa_consumption.consumption))
print('ABD Medyan: ', np.median(usa_consumption.consumption))

Burada food_consumption tablosundan Belçika ve ABD ülkerini seçtik ve bu ülkelerin ortalama ve medyan tüketimlerini aldık.

BE Ortalama:   42.13272727272727
BE Medyan: 12.59
ABD Ortalama: 44.650000000000006
ABD Medyan: 14.58

Bu ifadeyi groupby ve aggregate fonksiyonları ile bir tablo olarak da alabiliriz.

be_and_usa = food_consumption[
(food_consumption.country == 'Belgium') | (food_consumption.country == 'USA')]

print(be_and_usa.groupby('country')['consumption'].agg([np.mean, np.median]))

Burada food_consumption tablosundan Belgium ve USA ülkelerini tek satırda seçtik. Daha sonra bu filtrelenmiş tabloyu country ve consumption tabloları ile gruplandırarak bunları ortalama ve medyan değerlerini aldık.

           mean  median
country
Belgium 42.133 12.59
USA 44.650 14.58

Matplotlib paketini kullanarak pirincin karbondioksit emisyon dağılımını görelim.

from matplotlib import pyplot as plt

rice_consumption = food_consumption[food_consumption.food_category == 'rice']

plt.hist(rice_consumption.co2_emission)
plt.show()

Veri sağa çarpık olarak dağılmıştır.

Pirincin ortalama ve medyan değerlerine bakalım;

rice_consumption = food_consumption[
food_consumption['food_category'] == 'rice']

print(rice_consumption.agg([np.mean,np.median]))
            Unnamed: 0  consumption  co2_emission
mean 718.5 29.375 37.592
median 718.5 11.875 15.200

Veri çarpıklık içerdiğinden ortalamada değer bu veriyi düzgün yansıtmayacaktır. Çünkü ortalama, ekstrem değerlerden çok etkilenen bir ölçüdür bu yüzden merkezi eğilim ölçüsü olarak en iyi şekilde bu pirincin yıllık karbondioksit emisyonunu açıklayan ölçüt medyan değeridir.

Merkezi Dağılım Ölçüleri

Dağılım, değerlerin birbirinden ne kadar uzak ya da birbirine ne kadar yakın olduğunu gösterir.

  • Varyans: Her bir veri noktasının ortalamadan uzaklığı ile ilgili bilgi verir.
  • Standart Sapma: Değerlerin birbirine olan yakınlığını ve uyumunu ölçer. Varyansın kareköküdür.
  • Kantil (Quantile): Veriyi eşit parçalara böler. Örneğin 0.5 kantil, medyanı verir. Çünkü veri setini eşit olarak böldüğünüzde 0.5 yani ortanca değer medyandır.
  • Kartil (Quartile): Veriyi 4 eşit parçaya bölen değerlere kartiller denir. Örneğin %25. dilim, 50. 75 gibi. Özellikle kutu grafiklerinin yorumlanmasında kullanılır.
  • Çeyrekler Açıklığı (IQR): %25. ve %75. yüzdeliklerin farkıdır. Bu değerlerin arasında kalan %50lik kısım.
  • Aykırı Değer (Outlier): Diğer gözlemlerden ekstrem olarak farklılık gösteren değerlere denir. Genellikle çeyrekler açıklığının dışında kalan değerlerdir.

food_consumption tablosundaki karbondioksit emisyonlarının kartillerini bulalım.

print(np.quantile(food_consumption.co2_emission, [0, 0.25, 0.50, 0.75, 1]))
[   0.        5.21     16.53     62.5975 1712.    ]

Aynı sütundaki 6 kantil değerini hesaplayalım.

print(np.quantile(food_consumption.co2_emission, [0, 0.20, 0.40, 0.60, 0.80, 1]))
[   0.       3.54    11.026   25.59    99.978 1712.   ]

Aynı sütundaki 11 kantil değerini (ondalıklar) hesaplayalım.

print(np.quantile(food_consumption.co2_emission,
[0, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1]))
0.00000e+00 6.68000e-01 3.54000e+00 7.04000e+00 1.10260e+01 1.65300e+01
2.55900e+01 4.42710e+01 9.99780e+01 2.03629e+02 1.71200e+03]

food_consumption tablosundan her bir yemek kategorisinin karbondioksit emisyonlarının varyans ve standart sapma değerlerini hesaplayalım.

print(food_consumption.groupby('food_category')['co2_emission'].agg(
[np.var, np.std]))
                         var      std
food_category
beef 88748.408 297.907
dairy 17671.892 132.936
eggs 21.372 4.623
fish 921.637 30.358
lamb_goat 16475.518 128.357
nuts 35.640 5.970
pork 3094.964 55.632
poultry 245.027 15.653
rice 2281.376 47.764
soybeans 0.880 0.938
wheat 71.024 8.428

food_consumption tablosundaki her bir ülkenin toplam emisyonlarını bulalım ve bu emisyonların çeyrekler açıklığını hesaplayalım.

emissions_by_country = food_consumption.groupby('country')['co2_emission'].sum()

print(emissions_by_country)
    country
Albania 1777.85
Algeria 707.88
Angola 412.99
Argentina 2172.40
Armenia 1109.93
...
Uruguay 1634.91
Venezuela 1104.10
Vietnam 641.51
Zambia 225.30
Zimbabwe 350.33
Name: co2_emission, Length: 130, dtype: float64
q1 = np.quantile(emissions_by_country, 0.25)
q3 = np.quantile(emissions_by_country, 0.75)
iqr = q3 - q1

print(iqr)
664.4925000000001

Aykırı değerlerin cutoff değerini bulmak için ise;

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr

Bunlar üst ve alt için kesme değerleridir. Bunların dışında kalan ise aykırı değer olarak ifade edilebilir.

outliers = emissions_by_country[(emissions_by_country < lower) |
(emissions_by_country > upper)]
print(outliers)
    country
Argentina 2172.4
Name: co2_emission, dtype: float64

Görünüşe göre diğer ülkelere göre aykırı değerler içeren tek ülke Arjantindir. Yani kişi başıan düşen emisyonda diğer ülkelerin üzerinde kalmıştır.

Son

Beni Linkedin ve Github üzerinden takip edebilirsiniz.

--

--