---
title: 'Grafik Türü Seçimi'
source: 'https://academia.sh/tr/kurslar/gorsellestirme-ve-raporlama/grafik-turu-secimi'
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'
---

# Grafik Türü Seçimi

Aynı beş bölge ortalaması beş kodlama kanalından geçirilip geri okunuyor ve ortalama geri okuma hatası şöyle çıkıyor: konum 0,070 m³, uzunluk 0,183 m³, açı 0,543 m³, renk basamağı 0,931 m³, alan 2,468 m³. Doğu ile kuzey arasındaki 4,463 m³'lük fark alan kanalından 2,500 m³, açı kanalından 5,426 m³ olarak geri okunuyor ve tek bir okuma değişmiyor. Renk basamağı beş bölgeden dördünü ayırıyor, doğu ile merkez aynı basamağa düşüyor. Dört soru türünün her biri başka bir şeyin geri okunmasını istiyor ve kanal eşleştirmesi bu istekten çıkıyor.

Bir önceki kurs on üç derste her sayının yanına oynama payını yazdı ve şu soruyla kapandı: bütün
bu sayılar analistin ekranında, çıktı bloğu olarak duruyor. Kararı verecek kişi ne payı gördü ne
de sayıyı. Sayı ekrandan çıkıp bir karar vericiye giderken bir **gösterime** biniyor ve o
gösterimde ne olduğu hiç sorulmadı.

Bu kurs o soruyla açılır ve ölçüyü değiştirir. Önceki beş kursta sayı analistin elinde oynuyordu;
burada sayı **okuyucuya giderken** oynuyor. Bir gösterim bir **kodlama kanalıdır**: sayı bir
uzunluğa, konuma, açıya, alana ya da renk basamağına çevrilir, okuyucu da onu geri çevirir. Bu
derste hiçbir resim üretilmez; her kanal iki işlevle kurulur ve ikisi de koşar. Dersin sayısı,
aynı beş bölge ortalamasının beş kanaldan geçtikten sonra geri okunan halidir.

- **GT1. Bir gösterim bir kodlama kanalıdır.** Kanal iki işlevle tanımlanır: **kodlayıcı** sayıyı
  kanala çevirir, **çözücü** kanaldan sayıyı geri okur. İkisi de kodda durur ve koşar.
- **GT2. Okuma çözünürlüğü bir sayıdır.** Okuyucu bir kanalı sonsuz duyarlıkla okumaz; her kanalda
  ayırt edebildiği bir **basamak sayısı** vardır. Bu sayılar modelin varsayımıdır ve çıktının
  altında yazılıdır; ölçülen şey basamak sayısı değil, ondan çıkan farktır.
- **GT3. Ölçü farktır.** `çözücü(kodlayıcı(x))` ile `x` arasındaki fark **geri okuma hatası**dır.
  Kaynaktaki sayı hiç değişmez; oynayan şey okuyucuya ulaşan sayıdır.
- **GT4. Alan kanalının çözücüsü alanı okumaz.** Okuyucu şekli taşıyan doğrusal ölçüyü okur ve
  değeri ona oranla bildirir. Bu, çözünürlükten bağımsız, kanalın kendi ürettiği bir sapmadır.
- **GT5. Renk sürekli görünür, basamaklıdır.** Değer bir gösterge çizelgesinin sınırlı sayıdaki
  basamağından birine düşer ve o basamağın orta değeri olarak geri okunur. Renk burada bir ad
  değil, bir **basamak numarasıdır**.
- **GT6. Kanalın başarısı soruya bağlıdır.** Aynı kanal mutlak değeri kötü, payı iyi geri
  okutabilir. Hangi sorunun sorulduğu yazılmadan kanal seçilemez.
- **GT7. Karar eşiği yazılır.** Bir geri okuma hatası ancak bir eşikle karşılaştırıldığında büyük
  ya da küçüktür ve eşik raporun vereceği karardan gelir.

## Kanal, Kodlayıcı ve Çözücü

```python
# kanal.py — MODELDIR: K03-K05'in kurgu olcum agi ayni tohumla yeniden uretilir
# (3.199 satirlik uzun bicimli okuma tablosu, 1.329 abone, uc donem, bes bolge).
# Grafik cizilmez: her gosterim bir kodlayici ile bir cozucuden ibarettir.
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()

AD = [b[0] for b in BOLGE]
ORT, GOZLEM = {}, {}
for ad in AD:
    v = [o["tuketim_m3"] for o in OKUMA if o["bolge"] == ad]
    ORT[ad], GOZLEM[ad] = sum(v) / len(v), len(v)
TOPLAM = sum(ORT.values())
ALT, UST = 0.0, 25.0

# Okuma cozunurlugu: okuyucunun o kanalda ayirt edebildigi basamak sayisi.
# Sayilar modelin varsayimidir; olculen sey bu varsayimdan cikan farktir.
COZ = {"konum": 100, "uzunluk": 40, "aci": 36, "alan": 20, "renk": 7}


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


def kodla_konum(v):
    return (v - ALT) / (UST - ALT)


def coz_konum(p):
    return ALT + (UST - ALT) * izgara(p, COZ["konum"])


def kodla_uzunluk(v):
    return (v - ALT) / (UST - ALT)


def coz_uzunluk(u):
    return ALT + (UST - ALT) * izgara(u, COZ["uzunluk"])


def kodla_aci(v):
    return 360.0 * v / TOPLAM


def coz_aci(a):
    return TOPLAM * izgara(a / 360.0, COZ["aci"])


def kodla_alan(v):
    return (v - ALT) / (UST - ALT)


def coz_alan(al):
    # Okuyucu alani degil, sekli tasiyan dogrusal olcuyu okur: yaricap.
    return ALT + (UST - ALT) * izgara(math.sqrt(al), COZ["alan"])


def kodla_renk(v):
    return (v - ALT) / (UST - ALT)


def coz_renk(t):
    n = COZ["renk"]
    b = min(n - 1, int(t * n))
    return ALT + (UST - ALT) * (b + 0.5) / n


KANAL = [("konum", kodla_konum, coz_konum), ("uzunluk", kodla_uzunluk, coz_uzunluk),
         ("aci", kodla_aci, coz_aci), ("alan", kodla_alan, coz_alan),
         ("renk", kodla_renk, coz_renk)]

print(f"kurgu kume: {len(OKUMA)} okuma, {len(GECERLI)} abone, {len(AD)} bolge")
print("bolge ortalamalari: " + ", ".join(f"{ad} {ORT[ad]:.3f}" for ad in AD) + " m3")
print(f"toplam {TOPLAM:.3f} m3, deger ekseni {ALT:.0f}-{UST:.0f} m3")
print("okuma cozunurlugu (basamak): " + ", ".join(f"{k} {v}" for k, v in COZ.items()))
```

```
kurgu kume: 3199 okuma, 1329 abone, 5 bolge
bolge ortalamalari: kuzey 20.210, guney 16.602, dogu 24.674, bati 13.778, merkez 22.396 m3
toplam 97.659 m3, deger ekseni 0-25 m3
okuma cozunurlugu (basamak): konum 100, uzunluk 40, aci 36, alan 20, renk 7
```

Küme kurgudur ve önceki üç kursun kullandığı ölçüm ağının aynısıdır: aynı tohum, aynı 3.199 satır,
aynı 1.329 abone. Bölge ortalamaları da aynı sayılardır; doğunun 24,674 m³'ü ile kuzeyin 20,210
m³'ü bir önceki kursta hesaplanmıştı ve burada girdi olarak alınır.

Beş kanalın çözünürlüğü şu gerekçelerle yazıldı. **Konum** ortak bir eksende okunur ve okuyucunun
yanında bir ölçek durur; eksen üzerinde 100 basamak ayırt edilebilir kabul edildi. **Uzunluk**
kendi tabanından ölçülür ve karşılaştırma ölçeğe değil komşu çubuğa yapılır; 40 basamak yazıldı.
**Açı** bir dik açıya ve onun bölümlerine göre okunur, dokuzda biri kadar bir duyarlık varsayıldı
ve daire 36 basamağa bölündü. **Alan** için basamak sayısı 20'dir ama asıl sorun orada değildir:
çözücü alanı değil, alanı taşıyan doğrusal ölçüyü okur. **Renk** bir gösterge çizelgesinden
okunur ve çizelgede birbirinden ayırt edilebilen basamak sayısı 7 kabul edildi.

Bu beş sayı tartışılabilir ve okuyucudan okuyucuya değişir. Dersin iddiası sayıların kendisi
değil, **sıralamanın** onlardan çıkmasıdır: aynı değer bu beş kanaldan geçtiğinde geri okunan
sayılar birbirinden ayrılır ve ayrılmanın yönü çözünürlük seçiminden bağımsız olarak aynı kalır.

## Aynı Sayı Beş Kanaldan Geçiyor

```python
# olcum.py — ayni bes sayi bes kanaldan gecer ve geri okunur. Olcu,
# cozucu(kodlayici(x)) ile x arasindaki farktir.
G = 40


def cubuk(v):
    return "#" * round(G * (v - ALT) / (UST - ALT))


print("uzunluk kanali, taban cizgisinden 40 basamak (okuyucunun gordugu):")
for ad in AD:
    print(f"{ad:8s}{ORT[ad]:7.3f} |{cubuk(ORT[ad]):<40s}| "
          f"geri okunan {coz_uzunluk(kodla_uzunluk(ORT[ad])):6.3f}")

print(f"\n{'bolge':8s}{'gozlem':>7s}{'kaynak':>9s}"
      + "".join(f"{k[0]:>10s}" for k in KANAL))
hata = {k[0]: [] for k in KANAL}
for ad in AD:
    x = ORT[ad]
    satir = f"{ad:8s}{GOZLEM[ad]:7d}{x:9.3f}"
    for k, kod, coz in KANAL:
        g = coz(kod(x))
        hata[k].append(abs(g - x))
        satir += f"{g:10.3f}"
    print(satir)
print(f"{'|hata|':8s}{sum(GOZLEM.values()):7d}{'':9s}"
      + "".join(f"{sum(hata[k[0]]) / len(AD):10.3f}" for k in KANAL))
```

```
uzunluk kanali, taban cizgisinden 40 basamak (okuyucunun gordugu):
kuzey    20.210 |################################        | geri okunan 20.000
guney    16.602 |###########################             | geri okunan 16.875
dogu     24.674 |####################################### | geri okunan 24.375
bati     13.778 |######################                  | geri okunan 13.750
merkez   22.396 |####################################    | geri okunan 22.500

bolge    gozlem   kaynak     konum   uzunluk       aci      alan      renk
kuzey       921   20.210    20.250    20.000    18.989    22.500    19.643
guney       645   16.602    16.500    16.875    16.277    20.000    16.071
dogu        557   24.674    24.750    24.375    24.415    25.000    23.214
bati        476   13.778    13.750    13.750    13.564    18.750    12.500
merkez      600   22.396    22.500    22.500    21.702    23.750    23.214
|hata|     3199              0.070     0.183     0.543     2.468     0.931
```

Çubuklar dersin bütün gösterim aygıtıdır: okuyucu kırk basamaklık bir çizgide bir uç görür ve o
uçtan bir sayı çıkarır. Kuzeyin 20,210 m³'ü kırk basamağın otuz ikisini doldurur ve otuz iki
basamak 20,000 m³ olarak geri okunur; aradaki 0,210 m³ kaybolmuştur çünkü otuz ikinci ile otuz
üçüncü basamak arasında bir yer yoktur.

Beş kanalın ortalama geri okuma hatası 0,070 ile 2,468 m³ arasında değişir; en iyi kanal ile en
kötüsü arasında otuz beş kat vardır. Sıra şudur: konum, uzunluk, açı, renk basamağı, alan. İlk
ikisi arasındaki fark yalnız çözünürlüktendir. Açıdan sonrası ise başka bir şey söyler.

**Alan kanalı** tek başına ele alınmayı hak eder, çünkü hatası çözünürlüğü artırarak
küçültülemez. Batının 13,778 m³'ü 18,750 olarak geri okunur, yani beş m³'ten fazla yukarı çıkar;
doğunun 24,674 m³'ü ise neredeyse yerinde kalır. Sapma her değerde aynı yöndedir ve küçük değerler
olduklarından büyük görünür. Sebebi GT4'tedir: alan değerle orantılı büyür, okuyucu ise alanı
değil onu taşıyan doğrusal ölçüyü okur. Bu, kanalın kullanım hatası değil kendisidir.

**Renk basamağı** başka bir biçimde takılır. Doğu 23,214, merkez de 23,214 okunur — iki bölge aynı
basamağa düşmüştür ve okuyucu için artık iki ayrı sayı değil tek bir sayıdır. Yedi basamaklı bir
çizelgede 25 m³'lük eksen 3,571 m³'lük dilimlere bölünür ve bu dilimden dar olan her fark yok olur.

Bir önceki kursun başlık sayısı burada sınanır. Doğu ile kuzey arasındaki fark 4,463 m³'tü ve
oynama payıyla birlikte raporlanmıştı. Aynı fark alan kanalından **2,500 m³** olarak, açı
kanalından **5,426 m³** olarak geri okunur. Kaynaktaki tek bir okuma değişmemiştir; değişen tek şey
sayının hangi kanala bindiğidir. M26/K02'nin `tablo-ozet/04` dersi aynı türden bir oynamayı eksen
kırpmasıyla ölçmüştü ve orada ölçülen şey **gösterimin meşruluğuydu**: bu grafik bu ölçekte olur
mu. Buradaki ölçü başkadır ve gösterim tamamen meşruyken de çalışır — pasta da, kabarcık da,
ısı haritası da kurallara uygundur, yine de sayıyı oynatırlar.

## Soru Türü Kanalı Seçer

```python
# soru.py — dort soru turu, dort ayri geri okuma. Bir kanalin o soruya
# uygunlugu, sorunun istedigi seyin karar esigi icinde geri okunmasidir.
ESIK_FARK, ESIK_PAY = 0.5, 1.0
fark = ORT["dogu"] - ORT["kuzey"]
pay = {ad: ORT[ad] / TOPLAM for ad in AD}
print(f"kaynaktaki fark dogu-kuzey {fark:.3f} m3; karar esigi {ESIK_FARK} m3, "
      f"pay esigi {ESIK_PAY} puan")
print(f"{'kanal':9s}{'geri okunan fark':>18s}{'sapma':>8s}{'ayirt':>8s}"
      f"{'en buyuk pay hatasi':>21s}")
sonuc = {}
for k, kod, coz in KANAL:
    g = {ad: coz(kod(ORT[ad])) for ad in AD}
    gf = g["dogu"] - g["kuzey"]
    t = sum(g.values())
    gp = max(abs(100 * g[ad] / t - 100 * pay[ad]) for ad in AD)
    ayri = len({round(g[ad], 6) for ad in AD})
    sonuc[k] = (abs(gf - fark) <= ESIK_FARK, ayri == len(AD), gp <= ESIK_PAY)
    print(f"{k:9s}{gf:18.3f}{abs(gf - fark):8.3f}{ayri:6d}/5{gp:21.2f}")

SORU = [("karsilastirma", "iki degerin farki"), ("dagilim", "bes degerin sirasi"),
        ("bilesim", "her degerin payi")]
print(f"\n{'soru':16s}{'geri okunmasi gereken':24s}"
      + "".join(f"{k[0]:>9s}" for k in KANAL))
for j, (ad, ne) in enumerate(SORU):
    print(f"{ad:16s}{ne:24s}"
          + "".join(f"{'evet' if sonuc[k[0]][j] else 'hayir':>9s}" for k in KANAL))
print(f"{'iliski':16s}{'iki deger ayni anda':24s}"
      + "".join(f"{'evet' if k[0] == 'konum' else 'hayir':>9s}" for k in KANAL))
```

```
kaynaktaki fark dogu-kuzey 4.463 m3; karar esigi 0.5 m3, pay esigi 1.0 puan
kanal      geri okunan fark   sapma   ayirt  en buyuk pay hatasi
konum                 4.500   0.037     5/5                 0.12
uzunluk               4.375   0.088     5/5                 0.31
aci                   5.426   0.962     5/5                 0.69
alan                  2.500   1.963     5/5                 2.94
renk                  3.571   0.892     4/5                 1.60

soru            geri okunmasi gereken       konum  uzunluk      aci     alan     renk
karsilastirma   iki degerin farki            evet     evet    hayir    hayir    hayir
dagilim         bes degerin sirasi           evet     evet     evet     evet    hayir
bilesim         her degerin payi             evet     evet     evet    hayir    hayir
iliski          iki deger ayni anda          evet    hayir    hayir    hayir    hayir
```

İki eşik yazıldı ve ikisi de rapordan gelir. **0,5 m³**, bölge farkının rapora iki ondalıkla
yazılmasından ve saha ekibinin hangi bölgeye gideceğine bir m³'lük farkla karar verilmesinden
çıkar. **1,0 puan**, payın raporda tam sayı yüzde olarak yazılmasından çıkar: bir puanlık hata
yazılan rakamı değiştirir. Eşik yazılmadan hiçbir geri okuma hatası büyük ya da küçük değildir.

Tablonun ilk satırı beklenendir: karşılaştırma sorusunu yalnız konum ve uzunluk taşır. İkinci
satır kanalların çoğunu geçirir, çünkü sıralamayı korumak bir kanaldan istenebilecek en hafif
iştir; yalnız renk basamağı takılır ve tam olarak yukarıda görülen sebeple, iki bölge aynı
basamağa düştüğü için.

Üçüncü satır beklenmediktir. **Açı kanalı payı geçirir ama farkı geçirmez.** Sebebi kodlayıcıdadır:
açı zaten payı kodlar, mutlak değeri değil. Açının çözünürlüğü paydan yana harcanır ve pay hatası
0,69 puanda kalırken aynı kanalın mutlak fark hatası 0,962 m³'e çıkar. Bunun tersi de doğrudur:
alan kanalı hiçbir soruyu geçirmez, çünkü GT4'teki sapma hem farkı hem payı bozar ve payı 2,94
puanla en çok bozan kanaldır.

Dördüncü satır ölçülmez, sayılır. İlişki sorusu iki değerin **aynı anda** geri okunmasını ister
ve bunun için kanalın ikinci bir bağımsız kopyası gerekir. Yalnız konumun iki kopyası vardır,
yatay ve düşey eksen; uzunluğun, açının, alanın ve rengin ikinci kopyası yoktur. Bu yüzden ilişki
sorusu bir kanal tercihi değil, bir kanal zorunluluğudur.

Buradan çıkan kural GT6'nın somut halidir: kanal veriden değil sorudan seçilir. Aynı beş sayı,
"hangisi daha büyük" sorusuna dört kanaldan, "ne kadar büyük" sorusuna iki kanaldan, "toplamın ne
kadarı" sorusuna üç kanaldan cevap verir.

## Özet

- Bir gösterim iki işlevle modellenir: kodlayıcı sayıyı kanala çevirir, çözücü kanaldan sayıyı
  geri okur; ölçü ikisinin bileşimi ile kaynaktaki sayı arasındaki geri okuma hatasıdır.
- Okuma çözünürlüğü bir sayı olarak yazılır — konum 100, uzunluk 40, açı 36, alan 20, renk 7
  basamak — ve bu sayılar modelin varsayımıdır, ölçülen şey onlardan çıkan farktır.
- Aynı beş bölge ortalamasının ortalama geri okuma hatası konumda 0,070, uzunlukta 0,183, açıda
  0,543, renk basamağında 0,931, alanda 2,468 m³ çıkar.
- Alanın hatası çözünürlükle küçültülemez, çünkü çözücü alanı değil doğrusal ölçüyü okur; renk
  basamağı ise beş bölgeden yalnız dördünü ayırır, doğu ile merkez aynı basamağa düşer.
- Doğu ile kuzey arasındaki 4,463 m³'lük fark alandan 2,500 m³, açıdan 5,426 m³ olarak geri okunur
  ve kaynaktaki tek bir okuma değişmez.
- Kanal veriden değil sorudan seçilir: açı payı geçirir ama farkı geçirmez, ilişki sorusu ise
  kanalın ikinci bağımsız kopyasını ister ve bu kopya yalnız konumda vardır.

## Sonraki Adım

Bu derste her bölge tek bir sayıya indirilmişti ve kanal o tek sayıyı taşıdı. Rapordaki soruların
bir kısmı ise tek sayıyla cevaplanmaz: kuzeyin 921 okuması nasıl dizilmiş, iki tepe mi var yoksa
bir mi, uç değerler nerede duruyor. Sonraki ders aynı ölçüyü bir **dağılıma** uygular ve üç
gösterimi karşılaştırır — aralık sayımı, kutu özeti ve yoğunluk. Geri okunacak şey artık bir sayı
değil bir **biçim özelliğidir** ve ölçü, üç gösterimden hangisinin ikinci tepeyi geri okuttuğudur.
Aralık genişliğinin bir karar olduğu ve bu kararın geri okunan tepe sayısını oynattığı sayıyla
gösterilir.
