Think Stats kitabının üçüncü baskısını Bookshop.org ve Amazon üzerinden edinebilirsiniz (bunlar satış ortaklığı bağlantılarıdır). Ücretsiz çevrimiçi sürümü beğeniyorsanız bana bir kahve ısmarlamayı düşünebilirsiniz.

1. Keşifsel veri analizi#

Bu kitabın temel savı şu: Soruları yanıtlamak, tartışmaları çözüme kavuşturmak ve daha iyi kararlar vermek için verilerden yararlanabiliriz.

Bu bölümde bunu yapmak için kullanacağımız adımları tanıtacağım: veriyi yükleyip doğrulamak, keşfetmek ve ilgilendiğimiz özellikleri ölçmek için uygun istatistikleri seçmek. Örnek olarak, eşimle ilk çocuğumuzu beklerken duyduğum bir soruyu yanıtlamak için National Survey of Family Growth (NSFG) verilerini kullanacağız: İlk bebekler geç doğmaya daha mı yatkındır?

Bu notebook’u Colab’da çalıştırmak için buraya tıklayın.

Kod hücresi içeriğini gizle

from os.path import basename, exists


def download(url):
    filename = basename(url)
    if not exists(filename):
        from urllib.request import urlretrieve

        local, _ = urlretrieve(url, filename)
        print("İndirildi: " + local)


download("https://github.com/TerekliTahaBerk/thinkstatstr/raw/v3/nb/thinkstats.py")

Kod hücresi içeriğini gizle

try:
    import empiricaldist
except ImportError:
    %pip install empiricaldist

Kod hücresi içeriğini gizle

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from IPython.display import HTML
from thinkstats import decorate

1.1. Kanıt#

İlk bebeklerin geç doğma olasılığının daha yüksek olduğunu duymuş olabilirsiniz. Bu soruyu internette ararsanız pek çok tartışmayla karşılaşırsınız. Bazıları bunun doğru olduğunu, bazılarıysa bir söylenceden ibaret olduğunu öne sürer. Kimileri de tam tersinin geçerli olduğunu, yani ilk bebeklerin erken doğduğunu söyler.

Bu tartışmaların çoğunda insanlar iddialarını desteklemek için veriler sunar. Buna benzer pek çok örnek buldum:

“Yakın zamanda ilk bebeklerini doğuran iki arkadaşımın da doğumu, kendiliğinden başlamadan veya suni sancı verilmeden önce neredeyse iki hafta gecikti.”

“İlk bebeğim iki hafta geç doğdu; şimdi de ikincisinin iki hafta erken geleceğini düşünüyorum!!”

“Bunun doğru olabileceğini sanmıyorum; çünkü kız kardeşim annemin ilk çocuğuydu ve kuzenlerimin birçoğu gibi o da erken doğmuştu.”

Bu tür anlatımlara anekdotlara dayalı kanıt denir; çünkü yayımlanmamış ve genellikle kişisel verilere dayanırlar. Gündelik sohbetlerde anekdot kullanmanın yanlış bir yanı yok; dolayısıyla alıntı yaptığım kişileri eleştirmek istemiyorum.

Ancak daha ikna edici kanıtlar ve daha güvenilir bir yanıt isteyebiliriz. Bu ölçütlere göre anekdotlara dayalı kanıtlar genellikle yetersiz kalır. Bunun nedenleri şunlardır:

  • Gözlem sayısının azlığı: İlk bebeklerde gebelik süresi daha uzunsa bile bu fark, doğal değişkenliğe kıyasla muhtemelen küçüktür. Böyle bir durumda fark olup olmadığını anlayabilmek için çok sayıda gebeliği karşılaştırmamız gerekebilir.

  • Seçilim yanlılığı: Bu konudaki bir tartışmaya katılan kişiler, ilk bebekleri geç doğduğu için konuyla ilgileniyor olabilir. Böyle bir durumda veri seçme süreci sonuçları yanlı hâle getirir.

  • Doğrulama yanlılığı: İddiaya inanan kişiler, onu doğrulayan örnekler vermeye daha yatkın olabilir. İddiadan kuşku duyanlarsa karşı örnekleri aktarmaya daha yatkındır.

  • Hatalı aktarım: Anekdotlar çoğunlukla kişisel hikâyelerdir; yanlış hatırlanabilir, çarpıtılabilir veya hatalı biçimde tekrarlanabilir.

Anekdotların sınırlamalarını aşmak için istatistiğin şu araçlarından yararlanacağız:

  • Veri toplama: ABD nüfusu hakkında istatistiksel olarak geçerli çıkarımlar yapmak amacıyla özel olarak tasarlanmış, ülke çapında büyük bir araştırmanın verilerini kullanacağız.

  • Betimsel istatistik: Veriyi özlü biçimde özetleyen istatistikler hesaplayacak ve görselleştirmenin farklı yollarını değerlendireceğiz.

  • Keşifsel veri analizi: İlgilendiğimiz sorulara yanıt verebilecek örüntüleri, farklılıkları ve diğer özellikleri arayacağız. Aynı zamanda tutarsızlıkları kontrol edip sınırlamaları belirleyeceğiz.

  • Tahmin: Evrenin özelliklerini tahmin etmek için bir örneklemden elde edilen veriyi kullanacağız.

  • Hipotez testi: İki grup arasındaki fark gibi gözlenen bir etkiyle karşılaştığımızda, bu etkinin şans eseri ortaya çıkmış olup olamayacağını değerlendireceğiz.

Bu adımları olası tuzaklardan kaçınarak dikkatle uygularsak daha sağlam gerekçelere dayanan ve doğru olma olasılığı daha yüksek sonuçlara ulaşabiliriz.

1.2. National Survey of Family Growth#

ABD Hastalık Kontrol ve Önleme Merkezleri (Centers for Disease Control and Prevention, CDC), 1973’ten bu yana National Survey of Family Growth (NSFG) araştırmasını yürütüyor. Bu araştırma “aile yaşamı, evlilik ve boşanma, gebelik, kısırlık, doğum kontrolü kullanımı ile kadın ve erkek sağlığı hakkında bilgi” toplamayı amaçlar. Araştırmanın sonuçları “sağlık hizmetlerini ve sağlık eğitimi programlarını planlamak; aileler, doğurganlık ve sağlık üzerine istatistiksel çalışmalar yapmak için” kullanılır.

NSFG hakkında daha fazla bilgiyi http://cdc.gov/nchs/nsfg.htm adresinde bulabilirsiniz.

İlk bebeklerin geç doğmaya yatkın olup olmadığını ve başka soruları araştırmak için bu çalışmada toplanan verileri kullanacağız. Bu verileri etkili biçimde kullanabilmek için çalışmanın tasarımını anlamamız gerekir.

Genel olarak istatistiksel bir çalışmanın amacı, bir evren hakkında sonuçlara varmaktır. NSFG’nin hedef evreni, ABD’de yaşayan 15-44 yaş arası kişilerdir.

İdeal olarak araştırmalar evrendeki her bireyden veri toplar; ancak bu nadiren mümkündür. Bunun yerine, evrenin örneklem adı verilen bir alt kümesinden veri toplarız. Bir araştırmaya katılan kişilere katılımcı denir.

NSFG kesitsel bir çalışmadır; başka bir deyişle evrenin belirli bir andaki görünümünü yakalar. NSFG bugüne kadar birkaç kez uygulanmıştır ve her uygulamaya bir veri toplama döngüsü denir. Ocak 2002 ile Mart 2003 arasında gerçekleştirilen 6. veri toplama döngüsünün verilerini kullanacağız.

Kesitsel çalışmaların genel olarak temsili olması amaçlanır; yani örneklemin, çalışmanın amacı bakımından önemli olan bütün yönleriyle hedef evrene benzemesi beklenir. Bu ideale uygulamada ulaşmak zordur; yine de araştırmayı yürütenler olabildiğince yaklaşmaya çalışır.

NSFG temsili değildir; bunun yerine tabakalıdır, yani bazı gruplara kasıtlı olarak aşırı örnekleme uygular. Çalışmayı tasarlayanlar, her gruptaki katılımcı sayısının geçerli sonuçlar çıkarmaya yetecek büyüklükte olmasını sağlamak için Hispanikleri, Afrika kökenli Amerikalıları ve ergenleri ABD nüfusundaki paylarından daha yüksek oranlarda çalışmaya dâhil etmiştir. Aşırı örneklemenin sakıncası, örneklem istatistiklerinden hareketle evren hakkında sonuçlara varmayı zorlaştırmasıdır. Bu konuya daha sonra döneceğiz.

Bu tür verilerle çalışırken araştırmanın tasarımını, soruları ve yanıtların nasıl kodlandığını belgeleyen kod kitabını tanımak önemlidir.

NSFG verilerinin kod kitabına ve kullanıcı kılavuzuna http://www.cdc.gov/nchs/nsfg/nsfg_cycle6.htm adresinden ulaşabilirsiniz.

1.3. Verilerin okunması#

NSFG verilerini indirmeden önce kullanım koşullarını kabul etmeniz gerekir:

Bir kişinin veya kuruluşun kasıtlı olarak teşhis edilmesi ya da kimliğinin açıklanması, bilgileri sağlayanlara verilen gizlilik güvencelerini ihlal eder. Bu nedenle kullanıcılar:

  • Bu veri kümesindeki verileri yalnızca istatistiksel raporlama ve analiz amacıyla kullanacaktır.

  • Bu verilerde yer alan herhangi bir kişi veya kuruluşun kimliğini öğrenmeye çalışmayacaktır.

  • Bu veri kümesini, NCHS veya NCHS dışındaki başka veri kümelerinde bulunan ve kişilerin kimliğini belirlemeye yarayan verilerle ilişkilendirmeyecektir.

  • Kişileri ve kuruluşları korumak için kullanılan ifşa önleme yöntemlerini değerlendirmeye veya kişi ve kuruluşların yeniden teşhis edilmesine yönelik yöntemleri araştırmaya çalışmayacaktır.

Bu koşullara uymayı kabul ediyorsanız verileri indirme talimatlarını bu bölümün notebook’unda bulabilirsiniz.

Veri dosyalarına doğrudan NSFG’nin https://www.cdc.gov/nchs/data_access/ftp_dua.htm?url_redirect=ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/Datasets/NSFG adresindeki web sitesinden ulaşılabilir. Biz ise veri dosyasının sıkıştırılmış bir sürümünü sağlayan bu kitabın repository’sinden indireceğiz.

Aşağıdaki hücreler veri dosyalarını indirir ve verileri okumak için ihtiyaç duyduğumuz statadict paketini kurar.

download("https://github.com/TerekliTahaBerk/thinkstatstr/raw/v3/data/2002FemPreg.dct")
download("https://github.com/TerekliTahaBerk/thinkstatstr/raw/v3/data/2002FemPreg.dat.gz")
try:
    import statadict
except ImportError:
    %pip install statadict

Veriler iki dosyada saklanır: veri biçimini açıklayan bir “sözlük” ve asıl veri dosyası.

dct_file = "2002FemPreg.dct"
dat_file = "2002FemPreg.dat.gz"

Bu bölümün notebook’unda bu dosyaları okuyan bir fonksiyon tanımlanmıştır. Veri biçimi Stata adlı istatistik yazılımıyla uyumlu olduğu için fonksiyonun adı read_statadır.

Aşağıdaki fonksiyon dosya adlarını argüman olarak alır, sözlüğü okur ve elde ettiği bilgileri veri dosyasını okumak için kullanır.

from statadict import parse_stata_dict


def read_stata(dct_file, dat_file):
    stata_dict = parse_stata_dict(dct_file)
    resp = pd.read_fwf(
        dat_file,
        names=stata_dict.names,
        colspecs=stata_dict.colspecs,
        compression="gzip",
    )
    return resp

Fonksiyonu şu şekilde kullanırız.

preg = read_stata(dct_file, dat_file)

Sonuç, satır ve sütunlardan oluşan tablo biçimindeki verileri temsil eden bir Pandas veri yapısı, yani DataFramedir. Bu DataFrame, katılımcının bildirdiği her gebelik için bir satır ve her değişken için bir sütun içerir. Bir değişken, araştırmadaki bir soruya verilen yanıtları veya bir ya da daha fazla sorunun yanıtlarından hesaplanan değerleri içerebilir.

DataFrame, verilerin yanı sıra değişken adlarını ve türlerini de içerir; ayrıca verilere erişmek ve verileri değiştirmek için yöntemler sunar. DataFramein shape adlı niteliği satır ve sütun sayılarını içerir.

preg.shape
(13593, 243)

Bu veri kümesinde 13.593 gebelik hakkında bilgi veren 243 değişken bulunuyor. DataFrame, ilk birkaç satırı gösteren head adlı bir yöntem sunar.

preg.head()
caseid pregordr howpreg_n howpreg_p moscurrp nowprgdk pregend1 pregend2 nbrnaliv multbrth ... poverty_i laborfor_i religion_i metro_i basewgt adj_mod_basewgt finalwgt secu_p sest cmintvw
0 1 1 NaN NaN NaN NaN 6.0 NaN 1.0 NaN ... 0 0 0 0 3410.389399 3869.349602 6448.271112 2 9 1231
1 1 2 NaN NaN NaN NaN 6.0 NaN 1.0 NaN ... 0 0 0 0 3410.389399 3869.349602 6448.271112 2 9 1231
2 2 1 NaN NaN NaN NaN 5.0 NaN 3.0 5.0 ... 0 0 0 0 7226.301740 8567.549110 12999.542264 2 12 1231
3 2 2 NaN NaN NaN NaN 6.0 NaN 1.0 NaN ... 0 0 0 0 7226.301740 8567.549110 12999.542264 2 12 1231
4 2 3 NaN NaN NaN NaN 6.0 NaN 1.0 NaN ... 0 0 0 0 7226.301740 8567.549110 12999.542264 2 12 1231

5 rows × 243 columns

Soldaki sütun, her satır için bir etiket içeren DataFrame indeksidir. Bu örnekte etiketler 0’dan başlayan tam sayılardır; ancak string veya başka türlerde de olabilirler.

DataFramein columns adlı niteliği değişkenlerin adlarını içerir.

preg.columns
Index(['caseid', 'pregordr', 'howpreg_n', 'howpreg_p', 'moscurrp', 'nowprgdk',
       'pregend1', 'pregend2', 'nbrnaliv', 'multbrth',
       ...
       'poverty_i', 'laborfor_i', 'religion_i', 'metro_i', 'basewgt',
       'adj_mod_basewgt', 'finalwgt', 'secu_p', 'sest', 'cmintvw'],
      dtype='object', length=243)

Sütun adları, başka bir Pandas veri yapısı olan Index nesnesinde tutulur. Bir DataFrame sütununa erişmek için sütun adını anahtar olarak kullanabilirsiniz.

pregordr = preg["pregordr"]
type(pregordr)
pandas.core.series.Series

Sonuç, bir değer dizisini temsil eden Pandas Series nesnesidir. Series de ilk birkaç değeri ve bunların etiketlerini gösteren head yöntemini sunar.

pregordr.head()
0    1
1    2
2    1
3    2
4    3
Name: pregordr, dtype: int64

Son satırda Seriesin adı ve değerlerin türünü belirten dtype yer alır. Bu örnekte int64, değerlerin 64 bitlik tam sayılar olduğunu gösterir.

NSFG veri kümesi toplam 243 değişken içerir. Kitaptaki incelemelerde kullanacağımız değişkenlerden bazıları şunlardır:

  • caseid, katılımcının tam sayı kimliğidir.

  • pregordr, gebeliğin sıra numarasıdır: Katılımcının ilk gebeliğinin kodu 1, ikinci gebeliğinin kodu 2 ve bu şekilde devam eder.

  • prglngth, gebelik süresini hafta cinsinden veren tam sayıdır.

  • outcome, gebeliğin sonucunu gösteren tam sayı kodudur. 1 kodu canlı doğumu belirtir.

  • birthord, canlı doğumların sıra numarasıdır: Katılımcının ilk çocuğunun kodu 1’dir ve bu şekilde devam eder. Canlı doğum dışındaki sonuçlarda bu alan boştur.

  • birthwgt_lb ve birthwgt_oz, bebeğin doğum ağırlığının libre ve ons bölümlerini içerir.

  • agepreg, gebeliğin sonlandığı tarihte annenin yaşıdır.

  • finalwgt, katılımcıyla ilişkili istatistiksel ağırlıktır. Bu kayan noktalı değer, katılımcının ABD nüfusundan kaç kişiyi temsil ettiğini gösterir.

Kod kitabını dikkatle okursanız değişkenlerin çoğunun yeniden kodlanmış değişken olduğunu görürsünüz. Başka bir deyişle bunlar, araştırmada toplanan ham verilerin parçası değildir; ham veriler kullanılarak hesaplanmıştır.

Örneğin canlı doğumlarda prglngth, mevcutsa ham wksgest (gebelik haftası) değişkenine eşittir; mevcut değilse mosgest * 4.33 (gebelik ayı çarpı bir aydaki ortalama hafta sayısı) kullanılarak tahmin edilir.

Yeniden kodlanmış değişkenler çoğu zaman verilerin tutarlılığını ve doğruluğunu kontrol eden bir mantığa dayanır. Ham verileri kendiniz işlemek için güçlü bir gerekçeniz yoksa mevcut olduklarında yeniden kodlanmış değişkenleri kullanmak genellikle iyi bir fikirdir.

1.4. Doğrulama#

Veriler bir yazılım ortamından dışa aktarılıp başka bir ortama alındığında hatalar oluşabilir. Ayrıca yeni bir veri kümesini tanımaya çalışırken verileri yanlış çözümleyebilir veya anlamını yanlış yorumlayabilirsiniz. Verileri doğrulamaya zaman ayırmak, daha sonra zaman kazanmanızı ve hatalardan kaçınmanızı sağlar.

Verileri doğrulamanın bir yolu, temel istatistikleri hesaplayıp yayımlanmış sonuçlarla karşılaştırmaktır. Örneğin NSFG kod kitabında her değişkeni özetleyen tablolar bulunur. Aşağıda her gebeliğin sonucunu kodlayan outcome değişkeninin tablosu yer alıyor.

Değer Etiket Toplam
1 CANLI DOĞUM 9148
2 İSTEYEREK DÜŞÜK 1862
3 ÖLÜ DOĞUM 120
4 DÜŞÜK 1921
5 DIŞ GEBELİK 190
6 DEVAM EDEN GEBELİK 352
Toplam 13593

“Toplam” sütunu, her sonuç türündeki gebelik sayısını gösterir. Bu toplamları kontrol etmek için her değerin kaç kez görüldüğünü sayan value_counts yöntemini ve sonuçları Indexteki (soldaki sütun) değerlere göre sıralayan sort_index yöntemini kullanacağız.

preg["outcome"].value_counts().sort_index()
outcome
1    9148
2    1862
3     120
4    1921
5     190
6     352
Name: count, dtype: int64

Sonuçları yayımlanmış tabloyla karşılaştırarak outcome değerlerinin doğru olduğunu doğrulayabiliriz. Benzer şekilde, aşağıda birthwgt_lb değişkeninin yayımlanmış tablosu yer alıyor.

Değer Etiket Toplam
. uygulanamaz 4449
0-5 6 LİBREDEN AZ 1125
6 6 LİBRE 2223
7 7 LİBRE 3049
8 8 LİBRE 1889
9-95 9 LİBRE VEYA DAHA FAZLA 799
97 Belirlenemedi 1
98 YANIT REDDEDİLDİ 1
99 BİLİNMİYOR 57
Toplam 13593

Doğum ağırlığı yalnızca canlı doğumla sonuçlanan gebelikler için kaydedilmiştir. Tablo, bu değişkenin uygulanamadığı 4.449 vaka bulunduğunu gösteriyor. Buna ek olarak sorunun sorulmadığı bir vaka, katılımcının yanıt vermediği bir vaka ve yanıtın bilinmediği 57 vaka var.

Veri kümesindeki sayımları kod kitabındaki sayımlarla karşılaştırmak için yine value_counts yöntemini kullanabiliriz.

counts = preg["birthwgt_lb"].value_counts(dropna=False).sort_index()
counts
birthwgt_lb
0.0        8
1.0       40
2.0       53
3.0       98
4.0      229
5.0      697
6.0     2223
7.0     3049
8.0     1889
9.0      623
10.0     132
11.0      26
12.0      10
13.0       3
14.0       3
15.0       1
51.0       1
97.0       1
98.0       1
99.0      57
NaN     4449
Name: count, dtype: int64

dropna=False argümanı, value_counts yönteminin “NA” veya “uygulanamaz” değerlerini yok saymamasını sağlar. Bu değerler sonuçlarda “Not a number” (sayı değil) ifadesinin kısaltması olan NaN biçiminde görünür ve sayıları kod kitabındaki uygulanamaz vaka sayısıyla tutarlıdır.

6, 7 ve 8 librelik ağırlıkların sayıları kod kitabıyla tutarlıdır. 0 ile 5 libre arasındaki ağırlıkların sayısını kontrol etmek için “location” sözcüğünün kısaltması olan loc niteliğini ve sayımların bir alt kümesini seçmek üzere dilim indeksini kullanabiliriz.

counts.loc[0:5]
birthwgt_lb
0.0      8
1.0     40
2.0     53
3.0     98
4.0    229
5.0    697
Name: count, dtype: int64

Bunları toplamak için sum yöntemini kullanabiliriz.

counts.loc[0:5].sum()
np.int64(1125)

Toplam, kod kitabıyla tutarlıdır.

97, 98 ve 99 değerleri doğum ağırlığının bilinmediği vakaları temsil eder. Eksik verileri ele almanın birkaç yolu vardır. Basit seçeneklerden biri bu değerleri NaN ile değiştirmektir. Aynı zamanda açıkça hatalı olan 51 librelik değeri de değiştireceğiz.

replace yöntemini şu şekilde kullanabiliriz:

preg["birthwgt_lb"] = preg["birthwgt_lb"].replace([51, 97, 98, 99], np.nan)

İlk argüman değiştirilecek değerlerin listesidir. İkinci argüman olan np.nan, NaN değerini NumPy’dan alır.

Bu tür verileri okurken çoğu zaman hataları kontrol etmeniz ve özel değerleri ele almanız gerekir. Bu gibi işlemlere veri temizleme denir.

1.5. Dönüştürme#

Veri temizlemenin başka bir türünde verileri farklı biçimlere dönüştürmemiz ve başka hesaplamalar yapmamız gerekebilir.

Örneğin agepreg, gebeliğin sonlandığı tarihte annenin yaşını içerir. Kod kitabına göre bu değer, yılın yüzde biri cinsinden bir tam sayıdır. mean yöntemiyle ortalamayı hesapladığımızda bunu görebiliriz.

preg["agepreg"].mean()
np.float64(2468.8151197039497)

Değeri yıla çevirmek için 100’e bölebiliriz.

preg["agepreg"] /= 100.0
preg["agepreg"].mean()
np.float64(24.6881511970395)

Artık ortalama daha inandırıcı görünüyor.

Başka bir örnek olarak birthwgt_lb ve birthwgt_oz, doğum ağırlığının libre ve ons bölümlerini ayrı sütunlarda içerir. Bunları, ağırlıkları libre ve libre kesirleri cinsinden veren tek bir sütunda birleştirmek daha kullanışlı olacaktır.

Önce birthwgt_oz değişkenini birthwgt_lb için yaptığımız gibi temizleyeceğiz.

preg["birthwgt_oz"].value_counts(dropna=False).sort_index()
birthwgt_oz
0.0     1037
1.0      408
2.0      603
3.0      533
4.0      525
5.0      535
6.0      709
7.0      501
8.0      756
9.0      505
10.0     475
11.0     557
12.0     555
13.0     487
14.0     475
15.0     378
97.0       1
98.0       1
99.0      46
NaN     4506
Name: count, dtype: int64
preg["birthwgt_oz"] = preg["birthwgt_oz"].replace([97, 98, 99], np.nan)

Şimdi temizlenmiş değerleri kullanarak libre ve onsu tek bir nicelikte birleştiren yeni bir sütun oluşturabiliriz.

preg["totalwgt_lb"] = preg["birthwgt_lb"] + preg["birthwgt_oz"] / 16.0
preg["totalwgt_lb"].mean()
np.float64(7.265628457623368)

Sonucun ortalaması makul görünüyor.

1.6. Özet istatistikler#

İstatistik, bir veri kümesinden türetilen ve genellikle verilerin belirli bir yönünü nicelleştirmeyi amaçlayan sayıdır. Sayım, ortalama, varyans ve standart sapma buna örnektir.

Series nesnesinin count yöntemi, nan olmayan değerlerin sayısını döndürür.

weights = preg["totalwgt_lb"]
n = weights.count()
n
np.int64(9038)

Ayrıca değerlerin toplamını döndüren bir sum yöntemi vardır; ortalamayı şu şekilde hesaplamak için bunu kullanabiliriz.

mean = weights.sum() / n
mean
np.float64(7.265628457623368)

Ancak daha önce gördüğümüz gibi aynı işlemi yapan bir mean yöntemi de vardır.

weights.mean()
np.float64(7.265628457623368)

Bu veri kümesinde ortalama doğum ağırlığı yaklaşık 7,3 libredir.

Varyans, bir değer kümesinin yayılımını nicelleştiren istatistiktir. Her noktanın ortalamaya olan uzaklığını gösteren sapmaların karelerinin ortalamasıdır.

squared_deviations = (weights - mean) ** 2

Sapmaların karelerinin ortalamasını şu şekilde hesaplayabiliriz.

var = squared_deviations.sum() / n
var
np.float64(1.983070989750022)

Tahmin edebileceğiniz gibi Series, neredeyse aynı işlemi yapan bir var yöntemi sunar.

weights.var()
np.float64(1.9832904288326545)

Sonuç biraz farklıdır; çünkü var yöntemi sapmaların karelerinin ortalamasını hesaplarken n yerine n-1e böler. Bunun nedeni, amacınıza bağlı olarak bir örneklemin varyansını hesaplamanın iki yolu olmasıdır. Aradaki farkı 8. Bölümde açıklayacağım; ancak uygulamada bu fark genellikle önemli değildir. Paydada n bulunan sürümü tercih ederseniz var yöntemine anahtar kelime argümanı olarak ddof=0 geçirebilirsiniz.

weights.var(ddof=0)
np.float64(1.983070989750022)

Bu veri kümesinde doğum ağırlıklarının varyansı yaklaşık 1,98’dir; ancak bu değeri yorumlamak zordur. Her şeyden önce birimi libre karedir. Varyans bazı hesaplamalarda yararlıdır, fakat bir veri kümesini betimlemenin iyi bir yolu değildir. Daha iyi bir seçenek, varyansın karekökü olan standart sapmadır. Standart sapmayı şu şekilde hesaplayabiliriz.

std = np.sqrt(var)
std
np.float64(1.40821553384062)

Ya da std yöntemini kullanabiliriz.

weights.std(ddof=0)
np.float64(1.40821553384062)

Bu veri kümesinde doğum ağırlıklarının standart sapması yaklaşık 1,4 libredir. Kabaca söylemek gerekirse ortalamadan bir veya iki standart sapma uzaktaki değerler yaygındır; daha uzaktaki değerlerse nadirdir.

1.7. Yorumlama#

Verilerle etkili biçimde çalışmak için aynı anda iki düzeyde düşünmeniz gerekir: istatistikler ve bağlam. Örnek olarak gebelik dosyasında caseid değeri 10229 olan satırları seçelim. query yöntemi, başka öğelerin yanı sıra sütun adları, karşılaştırma işleçleri ve sayılar içerebilen bir string alır.

subset = preg.query("caseid == 10229")
subset.shape
(7, 244)

Sonuç, yalnızca sorgunun True olduğu satırları içeren bir DataFramedir. Bu katılımcı yedi gebelik bildirmiştir. Aşağıda kronolojik sırayla kaydedilmiş gebelik sonuçları yer alıyor.

subset["outcome"].values
array([4, 4, 4, 4, 4, 4, 1])

1 sonuç kodu canlı doğumu gösterir. 4 koduysa düşük, yani genellikle tıbbi nedeni bilinmeyen gebelik kaybı anlamına gelir.

İstatistiksel açıdan bu katılımcı sıra dışı değildir. Gebelik kaybı yaygındır ve aynı sayıda kayıp bildiren başka katılımcılar da vardır. Ancak bağlamı göz önünde bulundurduğumuzda bu veriler, altı kez gebe kalan ve her gebeliği düşükle sonuçlanan bir kadının hikâyesini anlatır. Kadının yedinci ve son gebeliği canlı doğumla sonuçlanmıştır. Bu verilere empatiyle yaklaşırsak anlattıkları hikâyeden etkilenmemiz doğaldır.

NSFG veri kümesindeki her satır, birçok kişisel ve zor soruya dürüst yanıtlar vermiş bir kişiyi temsil eder. Bu verileri aile yaşamı, üreme ve sağlıkla ilgili istatistiksel soruları yanıtlamak için kullanabiliriz. Aynı zamanda verilerin temsil ettiği insanları göz önünde bulundurmak, onlara saygı ve minnet duymakla yükümlüyüz.

1.8. Terimler#

Her bölümün sonunda, o bölümde tanımlanan sözcüklerden oluşan bir terimler listesi bulunur.

  • anekdotlara dayalı kanıt: Genellikle sistematik örnekleme yapılmadan, az sayıda bireysel vakadan gayriresmî biçimde toplanan veriler.

  • kesitsel çalışma: Evrenin temsili bir örnekleminden belirli bir anda veya zaman aralığında veri toplayan çalışma.

  • veri toplama döngüsü: Birden çok zaman aralığında veri toplayan bir çalışmadaki veri toplama dönemlerinden her biri.

  • evren: Bir çalışmanın konusu olan bireylerin veya öğelerin tamamı.

  • örneklem: Evrenin çoğu zaman rastgele seçilen bir alt kümesi.

  • katılımcılar: Bir araştırmaya katılıp soruları yanıtlayan kişiler.

  • temsili: Bir örneklem, çalışmanın amacı açısından önemli yönleriyle evrene benziyorsa temsilidir.

  • tabakalı: Bir örneklem, geçerli sonuçları destekleyecek sayıda üyenin çalışmaya alınmasını sağlamak amacıyla bazı gruplara kasıtlı olarak aşırı örnekleme uyguluyorsa tabakalıdır.

  • aşırı örneklenmiş: Bir grubun üyelerinin örneklemde yer alma olasılığı daha yüksekse o grup aşırı örneklenmiştir.

  • değişken: Araştırma verilerinde bir değişken, sorulara verilen yanıtların veya bu yanıtlardan hesaplanan değerlerin oluşturduğu koleksiyondur.

  • kod kitabı: Bir veri kümesindeki değişkenleri açıklayan ve veriler hakkında başka bilgiler sunan belge.

  • yeniden kodlanmış değişken: Veri kümesindeki başka değişkenlere dayanarak hesaplanan değişken.

  • ham veri: Toplandıktan sonra işlenmemiş veri.

  • veri temizleme: Veri kümesindeki hataları belirleyip düzeltme, eksik değerleri ele alma ve yeniden kodlanmış değişkenleri hesaplama süreci.

  • istatistik: Bir örneklemin özelliğini betimleyen veya özetleyen değer.

  • standart sapma: Verilerin ortalama çevresindeki yayılımını nicelleştiren istatistik.

1.9. Alıştırmalar#

Bu bölümün alıştırmaları NSFG gebelik dosyasını temel alır.

1.9.1. Alıştırma 1.1#

preg içinden birthord sütununu seçin, değer sayılarını yazdırın ve sonuçları https://ftp.cdc.gov/pub/Health_Statistics/NCHS/Dataset_Documentation/NSFG/Cycle6Codebook-Pregnancy.pdf adresindeki kod kitabında yayımlanan sonuçlarla karşılaştırın.

1.9.2. Alıştırma 1.2#

Doğum ağırlığını kilogram cinsinden içeren totalwgt_kg adlı yeni bir sütun oluşturun (bir kilogram yaklaşık 2,2 libredir). Yeni sütunun ortalamasını ve standart sapmasını hesaplayın.

1.9.3. Alıştırma 1.3#

caseid değeri 2298 olan katılımcının gebelik süreleri nedir?

caseid değeri 5013 olan katılımcının ilk bebeğinin doğum ağırlığı neydi? İpucu: Bir sorguda birden fazla koşulu kontrol etmek için and kullanabilirsiniz.

Orijinal eser: Think Stats: Exploratory Data Analysis in Python, 3rd Edition

Telif hakkı 2024 Allen B. Downey

Türkçe çeviri: ThinkStatsTr

Kod lisansı: MIT License

Metin lisansı: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International