---
title: 'Dağılım Görselleştirme'
source: 'https://academia.sh/tr/kurslar/gorsellestirme-ve-raporlama/dagilim-gorsellestirme'
course: 'Görselleştirme, Raporlama ve Ölçekli Analiz'
language: tr
updated: '2026-08-17T18:08:48+00:00'
license: 'CC BY-SA 4.0'
---

# Dağılım Görselleştirme

Kuzeyin 921 okuması ile aynı beş sayıyı veren ikiz küme üç gösterimden geçiriliyor ve geri okunan şey bir sayı değil bir biçim özelliği oluyor: aralık sayımı ve yoğunluk ikizin iki tepesini geri okuyor, kutu özeti tepe bilgisi hiç taşımıyor. Uzunluk kanalından geçen sayımlarda üç aralık sıfıra düşüyor ve 7 okuma gösterimden siliniyor, ikizin 45,47 m³'lük uç değeri kayboluyor; aynı uç değer kuzeyde geri okunuyor, çünkü en yüksek çubuk 329 değil 234. Aralık genişliği 12 m³ olduğunda geri okunan tepe sayısı ikide birden bire düşüyor, çekirdek genişliği 0,5 m³ olduğunda kuzeyde olmayan dört tepe görünüyor.

Bir önceki ders her bölgeyi tek bir sayıya indirdi ve kanal o tek sayıyı taşıdı. Rapordaki
soruların bir kısmı tek sayıyla cevaplanmaz: kuzeyin 921 okuması tek bir değer çevresinde mi
toplanıyor yoksa iki ayrı abone grubu mu var, en büyük okumalar gösterimde duruyor mu. Bu sorular
bir **dağılıma** bakar ve dağılım tek bir konuma sığmaz.

Bir önceki kursta bu dağılım sayı olarak kurulmuştu: beş sayı özeti hesaplanmış ve aynı beş sayıyı
veren ikinci bir küme üretilmişti. O hesap tekrarlanmaz, girdi olarak alınır. Bu dersin sorusu bir
adım sonrasıdır: aynı dağılım üç ayrı gösterimle kodlandığında okuyucu **hangi biçim özelliğini**
geri okuyabiliyor.

- **GT8. Dağılım gösterimi de bir kanaldır.** Aralık sayımı sayımları **uzunluk** kanalına, kutu
  özeti ve yoğunluk gösterimi değerleri **konum** kanalına koyar. Önceki dersin çözünürlükleri
  aynen sürer: uzunluk 40, konum 100 basamak.
- **GT9. Geri okunan şey bir biçim özelliğidir.** Üç özellik sayılır: **tepe sayısı**, **çarpıklık
  yönü** ve **uç değerin görünüp görünmediği**.
- **GT10. Tepe kuralı yazılır.** Bir nokta, iki yanındaki kendisinden farklı ilk değerlerin
  ikisinden de büyükse ve en yüksek değerin 0,3 katından aşağı değilse tepedir. Kural üç gösterimde
  de aynıdır ve **geri okunan** değerlere uygulanır.
- **GT11. Aralık genişliği ve çekirdek genişliği birer karardır.** İkisi de kaynağı değil, geri
  okunan biçimi değiştirir.
- **GT12. Uç değerin görünürlüğü uç değere bağlı değildir.** Çubuklar en yüksek sayıma göre
  ölçeklenir; aynı uç değer, komşusu daha yüksek olan bir gösterimde kaybolur.
- **GT13. Kutu özetinin tepe taşımaması kusur değil kapsamdır.** Beş sayı sıralamanın beş noktasını
  bildirir; o noktalar arasındaki diziliş kutuya hiç girmez.

## Kaynaktaki Biçim

```python
# gosterim.py — MODELDIR: K03-K05'in kurgu olcum agi ayni tohumla uretilir.
# Kuzeyin 921 okumasi ile K05'in ikiz kumesi girdidir; ikisi de burada
# yeniden hesaplanmaz, gosterim kanalindan gecirilir.
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
DONEM = ["2026-01", "2026-02", "2026-03"]
BOLGE = [("kuzey", 0.28, 21), ("guney", 0.22, 17), ("dogu", 0.18, 26),
         ("bati", 0.14, 14), ("merkez", 0.18, 23)]


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


_k, _e = [], []
for i in range(HAM):
    r = uretec(TOHUM + i)
    b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])]
    ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05])
    ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17])
    (_e if r() < 0.046 else _k).append(
        {"abone_no": 10001 + i, "bolge": b[0], "taban": b[2]})
GECERLI = {a["abone_no"] for a in _k}

OKUMA = []
for a in _k + _e:
    r = uretec(TOHUM + 7000 + a["abone_no"])
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        t = 0.0 if r() < 0.038 else math.floor(
            a["taban"] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100
        if a["abone_no"] not in GECERLI:
            r()
            continue
        OKUMA.append({"abone_no": a["abone_no"], "bolge": a["bolge"],
                      "donem": DONEM[d], "tuketim_m3": t})
        r()

kuzey = sorted(o["tuketim_m3"] for o in OKUMA if o["bolge"] == "kuzey")


def itele(dilim, uc, p=4):
    a, z = dilim[0], dilim[-1]
    u = [(x - a) / (z - a) for x in dilim]
    return [z - (z - a) * (1 - t) ** p if uc == "ust" else a + (z - a) * t ** p
            for t in u]


C = [0, 230, 460, 690, len(kuzey) - 1]
ikiz = (itele(kuzey[C[0]:C[1] + 1], "ust")[:-1] + itele(kuzey[C[1]:C[2] + 1], "alt")[:-1]
        + itele(kuzey[C[2]:C[3] + 1], "ust")[:-1] + itele(kuzey[C[3]:], "alt"))

# Kanallar: histogram cubugu uzunluk, kutu ve yogunluk ortak eksende konum.
COZ = {"uzunluk": 40, "konum": 100}


def izgara(t, n):
    return round(t * n) / n


def coz_uzunluk(v, ust):
    return izgara(v / ust, COZ["uzunluk"]) * ust if ust > 0 else 0.0


def coz_konum(v, alt, ust):
    return alt + (ust - alt) * izgara((v - alt) / (ust - alt), COZ["konum"])


def yuzdelik(v, p):
    s = sorted(v)
    i = p * (len(s) - 1)
    a = int(i)
    b = min(a + 1, len(s) - 1)
    return s[a] + (s[b] - s[a]) * (i - a)


# Kaynaktaki bicim: tepe sayisi kurgunun kendisinden bilinir (kuzey tek tabandan
# uretildi, ikiz iki uca itildi). Carpiklik yonu ortalama-ortanca isaretidir;
# esik 0,05 m3, cunku rapora iki ondalikla yazilan sayida bundan kucuk fark
# yaziya gecmez. Uc deger: en buyuk gozlemin dustugu bolge.
ESIK_CARP = 0.05
KUME = [("kuzey", kuzey, 1), ("ikiz", ikiz, 2)]


def yon(d):
    return "saga" if d > ESIK_CARP else ("sola" if d < -ESIK_CARP else "simetrik")


KAYNAK = {}
for ad, v, tepe in KUME:
    ort, med = sum(v) / len(v), yuzdelik(v, 0.50)
    KAYNAK[ad] = (tepe, yon(ort - med), max(v))
    print(f"{ad:6s} n={len(v)} ortalama {ort:.3f} ortanca {med:.3f} "
          f"en buyuk {max(v):.2f} m3")
    print(f"       kaynaktaki bicim: {tepe} tepe, {yon(ort - med)} carpik, "
          f"uc deger {max(v):.2f} m3")
```

```
kuzey  n=921 ortalama 20.210 ortanca 19.660 en buyuk 45.47 m3
       kaynaktaki bicim: 1 tepe, saga carpik, uc deger 45.47 m3
ikiz   n=921 ortalama 19.754 ortanca 19.660 en buyuk 45.47 m3
       kaynaktaki bicim: 2 tepe, saga carpik, uc deger 45.47 m3
```

Kaynaktaki tepe sayısı tahmin edilmez, **bilinir**: iki küme de kurgudur ve nasıl kuruldukları
koddadır. Kuzeyin 921 okuması tek bir taban değerden üretildi, ikiz küme kuzeyin sıralı
değerlerinin çeyrek dilimler içinde iki uca itilmesiyle elde edildi — birinde bir, öbüründe iki
toplanma merkezi vardır.

Çarpıklık yönü ortalama ile ortancanın işaretinden okunur; eşik 0,05 m³ yazıldı, çünkü iki
ondalıkla raporlanan bir sayıda bundan küçük fark yazıya geçmez. Kuzeyde fark 0,550 m³, ikizde
0,094 m³'tür ve ikincisi eşiğin hemen üstündedir.

## Aynı Dağılım Üç Gösterimden Geçiyor

```python
# uc_gosterim.py — ayni dagilim uc gosterimle kodlanir ve uc bicim ozelligi
# geri okunmaya calisilir. Tepe kurali her gosterimde ayni: iki yanindaki
# farkli degerlerden buyuk ve en yuksegin 0,3 katindan asagi olmayan nokta.
GEN, EKSEN, N = 4.0, 48.0, 12
H, M = 2.0, 60


def sayim(v, gen, n):
    c = [0] * n
    for x in v:
        c[min(int(x / gen), n - 1)] += 1
    return c


def tepeler(y, oran=0.3):
    m, t = max(y), []
    for i in range(len(y)):
        if i and y[i] == y[i - 1]:
            continue
        s = next((y[j] for j in range(i - 1, -1, -1) if y[j] != y[i]), None)
        z = next((y[j] for j in range(i + 1, len(y)) if y[j] != y[i]), None)
        if s is not None and z is not None and y[i] > s and y[i] > z and y[i] >= oran * m:
            t.append(i)
    return t


def ozet(x, w):
    t = sum(w)
    ort, k = sum(a * b for a, b in zip(x, w)) / t, 0.0
    for a, b in zip(x, w):
        k += b
        if k >= t / 2:
            return ort, a
    return ort, x[-1]


def gost_aralik(v, gen=GEN):
    n = round(EKSEN / gen)
    c = sayim(v, gen, n)
    g = [round(coz_uzunluk(x, max(c))) for x in c]
    ort, med = ozet([(i + 0.5) * gen for i in range(n)], g)
    return len(tepeler(g)), yon(ort - med), g[min(int(max(v) / gen), n - 1)] > 0, g


def gost_kutu(v):
    b = [min(v), yuzdelik(v, 0.25), yuzdelik(v, 0.50), yuzdelik(v, 0.75), max(v)]
    g = [coz_konum(x, 0.0, EKSEN) for x in b]
    ac = g[3] - g[1]
    a_cit, u_cit = g[1] - 1.5 * ac, g[3] + 1.5 * ac
    disi = [x for x in v if x < a_cit or x > u_cit]
    nokta = len({coz_konum(x, 0.0, EKSEN) for x in disi})
    return None, yon((g[3] - g[2]) - (g[2] - g[1])), nokta > 0, (len(disi), nokta)


def gost_yogunluk(v, h=H):
    x = [EKSEN * i / (M - 1) for i in range(M)]
    y = [sum(math.exp(-0.5 * ((a - t) / h) ** 2) for t in v) for a in x]
    g = [coz_konum(t, 0.0, max(y)) for t in y]
    ort, med = ozet(x, g)
    return (len(tepeler(g)), yon(ort - med),
            g[round((M - 1) * max(v) / EKSEN)] > 0, g)


GOSTERIM = [("aralik sayimi", gost_aralik), ("kutu ozeti", gost_kutu),
            ("yogunluk", gost_yogunluk)]
print(f"aralik genisligi {GEN:.0f} m3, cekirdek genisligi {H:.0f} m3, "
      f"eksen 0-{EKSEN:.0f} m3, {M} ornekleme noktasi")
_c = sayim(ikiz, GEN, N)
_g = [round(coz_uzunluk(x, max(_c))) for x in _c]
print("\nikiz kumesi, sayimlar uzunluk kanalindan gecince (kaynak / geri okunan):")
for i in range(N):
    print(f"{i * GEN:5.0f}-{(i + 1) * GEN:<3.0f}{_c[i]:5d}{_g[i]:6d} "
          f"|{'#' * round(40 * _g[i] / max(_g))}")
_kayip = [(i, _c[i]) for i in range(N) if _c[i] > 0 and _g[i] == 0]
print(f"geri okunanda sifira dusen aralik: {len(_kayip)}, "
      f"icindeki okuma: {sum(x for _, x in _kayip)}\n")
print(f"{'kume':7s}{'gosterim':16s}{'tepe':>12s}{'carpiklik':>12s}{'uc deger':>11s}"
      f"{'gecen ozellik':>15s}")
for ad, v, _ in KUME:
    kt, kc, _ku = KAYNAK[ad]
    for g_ad, f in GOSTERIM:
        t, c, u, _ek = f(v)
        gecen = sum([t == kt, c == kc, u])
        print(f"{ad:7s}{g_ad:16s}{str(t) if t is not None else 'okunamaz':>12s}"
              f"{c:>12s}{'evet' if u else 'hayir':>11s}{gecen:>12d}/3")
```

```
aralik genisligi 4 m3, cekirdek genisligi 2 m3, eksen 0-48 m3, 60 ornekleme noktasi

ikiz kumesi, sayimlar uzunluk kanalindan gecince (kaynak / geri okunan):
    0-4     32    33 |####
    4-8      0     0 |
    8-12     0     0 |
   12-16   318   321 |#######################################
   16-20   114   115 |##############
   20-24   110   107 |#############
   24-28   329   329 |########################################
   28-32    11     8 |#
   32-36     4     0 |
   36-40     0     0 |
   40-44     2     0 |
   44-48     1     0 |
geri okunanda sifira dusen aralik: 3, icindeki okuma: 7

kume   gosterim                tepe   carpiklik   uc deger  gecen ozellik
kuzey  aralik sayimi              1        saga       evet           3/3
kuzey  kutu ozeti          okunamaz        saga       evet           2/3
kuzey  yogunluk                   1        saga       evet           3/3
ikiz   aralik sayimi              2        saga      hayir           2/3
ikiz   kutu ozeti          okunamaz        saga       evet           2/3
ikiz   yogunluk                   2        sola      hayir           1/3
```

Çubuk tablosu kanalın ne yaptığını doğrudan gösteriyor. Kırk basamaklık bir çubuk en yüksek sayıma
göre ölçeklenir; ikizde en yüksek sayım 329'dur, yani bir basamak 8,2 okumaya karşılık gelir. Sekiz
okumadan az olan her aralık yarım basamağın altında kalır ve sıfır olarak geri okunur. Üç aralık
böyle silinir ve içlerindeki **7 okuma** gösterimden tamamen çıkar; aralarında 45,47 m³'lük uç
değer de vardır.

Aynı uç değer kuzeyde geri okunuyor ve tek sebebi GT12'dir: kuzeyde en yüksek sayım 234, bir
basamak 5,9 okumadır ve 44–48 m³ aralığındaki üç okuma bir basamağı doldurmaya yeter. Uç değer iki
kümede de aynı yerde ve aynı sayıdadır; görünmesini belirleyen şey **en yüksek çubuğun
yüksekliğidir**.

Özellik tablosunda hiçbir gösterim üçünü birden geçirmiyor ve her biri ötekilerin kaçırdığı bir
şeyi tutuyor. **Kutu özeti** tepe sayısını hiç taşımıyor — sütunda "okunamaz" yazıyor, çünkü beş sayıdan tepe
türetilecek bir yol yoktur. Buna karşılık uç değeri iki kümede de geri okutan tek gösterim odur:
çit dışındaki gözlemler ayrı nokta olarak basılır, ölçeklenmez ve komşularına bakmaz. **Aralık
sayımı ile yoğunluk** ise ikizin iki tepesini geri okuyan tek gösterimlerdir ve ikisi de uç değeri
kaybeder, çünkü ikisi de en yüksek değere göre ölçeklenir.

Yoğunluk gösteriminin ikizde çarpıklığı **ters** okuması bir gösterim kusuru değil, eşiğe yakın
duran bir kaynağın sonucudur: 0,094 m³'lük bir asimetri altmış örnekleme noktasına ve yüz basamaklı
bir konum ızgarasına indirgendiğinde yönünü koruyamaz. Karar eşiğine bu kadar yakın bir biçim
özelliği için sonucu gösterim seçimi belirler ve o özellik raporlanmaz.

## Aralık Genişliği Bir Karardır

```python
# karar.py — aralik genisligi ve cekirdek genisligi birer karardir; ikisi de
# geri okunan tepe sayisini oynatir. Kaynaktaki tepe sayisi degismez.
print(f"{'genislik':>9s}{'aralik':>8s}" + "".join(f"{ad:>9s}" for ad, _, _ in KUME))
for gen in (2.0, 3.0, 4.0, 6.0, 8.0, 12.0):
    print(f"{gen:8.0f} m3{round(EKSEN / gen):8d}"
          + "".join(f"{gost_aralik(v, gen)[0]:9d}" for _, v, _ in KUME))
print(f"{'cekirdek':>9s}{'ornek':>8s}" + "".join(f"{ad:>9s}" for ad, _, _ in KUME))
for h in (0.5, 1.0, 2.0, 3.0, 5.0, 8.0):
    print(f"{h:8.1f} m3{M:8d}"
          + "".join(f"{gost_yogunluk(v, h)[0]:9d}" for _, v, _ in KUME))
print("kaynaktaki tepe sayisi: " + ", ".join(f"{ad} {t}" for ad, _, t in KUME))
```

```
 genislik  aralik    kuzey     ikiz
       2 m3      24        1        2
       3 m3      16        1        2
       4 m3      12        1        2
       6 m3       8        1        2
       8 m3       6        1        2
      12 m3       4        1        1
 cekirdek   ornek    kuzey     ikiz
     0.5 m3      60        4        2
     1.0 m3      60        1        2
     2.0 m3      60        1        2
     3.0 m3      60        1        2
     5.0 m3      60        1        1
     8.0 m3      60        1        1
kaynaktaki tepe sayisi: kuzey 1, ikiz 2
```

Kaynaktaki tepe sayısı iki satırda da değişmiyor: kuzey bir, ikiz iki. Değişen tek şey geri okunan
sayı ve onu değiştiren tek şey bir karar.

Aralık genişliği 2 ile 8 m³ arasındayken ikizin iki tepesi geri okunuyor. 12 m³'te sayı bire
düşüyor, çünkü iki toplanma merkezi arasındaki mesafe yaklaşık 12 m³'tür ve tek bir aralık ikisini
birden yutar. Bir önceki kurs bu tuzağı bir cümleyle işaret etmişti; burada eşiğin yeri sayılıyor.

Çekirdek genişliği ters yönde de yanılıyor. 0,5 m³'te kuzeyde **dört** tepe geri okunuyor, oysa
kaynakta bir tane var. Bu genişlikte çekirdek örnekleme noktaları arasındaki 0,81 m³'lük aralıktan
dardır; eğri veriyi düzleştirmek yerine tek tek okumaları izler ve okuma yoğunluğundaki rastgele
oynamalar tepe olarak geri okunur. 5 m³ ve üstünde ise ikizin iki tepesi birleşir. İki karar
arasında bir tercih değil, iki ayrı hata vardır: dar seçim olmayan tepeyi üretir, geniş seçim var
olanı siler. Kural GT11'in somut halidir — iki genişlik de çıktının altında yazılır, yoksa geri
okunan tepe sayısı bir bulgu gibi görünür.

## Özet

- Aralık sayımı sayımları uzunluk, kutu özeti ve yoğunluk ise değerleri konum kanalına koyar; geri
  okunan şey bir m³ değeri değil tepe sayısı, çarpıklık yönü ve uç değerdir.
- Hiçbir gösterim üç özelliği birden geçirmiyor: kutu özeti tepeyi hiç taşımıyor ama uç değeri iki
  kümede de geri okutan tek gösterim; aralık sayımı ile yoğunluk iki tepeyi geri okuyor ama uç
  değeri kaybediyor.
- Uzunluk kanalından geçen sayımlarda üç aralık sıfıra düşüyor ve 7 okuma siliniyor; aynı 45,47
  m³'lük uç değer kuzeyde görünüyor çünkü orada en yüksek çubuk 329 değil 234.
- Aralık genişliği 12 m³'te ikizin geri okunan tepe sayısını ikiden bire düşürüyor, çekirdek
  genişliği 0,5 m³'te kuzeyde olmayan dört tepe gösteriyor; kaynaktaki tepe sayısı değişmiyor.
- İkizin 0,094 m³'lük çarpıklığı eşiğin hemen üstündedir ve yönü gösterime göre değişir; bu kadar
  eşiğe yakın bir biçim özelliği raporlanmaz.

## Sonraki Adım

Bu derste eksenin bir yanında sürekli bir değer vardı ve gösterim onu aralıklara ya da bir eğriye
çevirdi. Rapordaki soruların çoğu ise **kategoriktir**: beş bölgenin dört tarife basamağındaki
abone sayısı ve bu sayıların bölge içindeki payı. Kategorik gösterimin kendine özgü bir kararı
vardır — dilimler üst üste mi yığılacak yoksa yan yana mı dizilecek — ve bu bir kanal sorunudur:
yığılmış gösterimde yalnız alttaki dilimin taban çizgisi olur. Sonraki ders üstteki dilimlerin
geri okuma hatasını dilim sırasına göre sayar ve gruplu gösterimle karşılaştırır.
