Ders 01 / 18
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.
İçindekiler
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))ilexarası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ü
# 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
# 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
# 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.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.