İçeriğe geç
academia.sh

Ders 22 / 22

Ortam Seçimi

Üç ortam üç ölçütte sayıyla karşılaştırılır ve her ölçüt başka bir ortamı öne çıkarır: dokuz kişilik ekipte yazabilen sayısı 7 / 2 / 4, dokuz adımın hazır parçayla karşılananı 7 / 9 / 5, dokuz üretim kaleminin ortamca karşılananı 3 / 1 / 9 çıkar. Eşit ağırlıkta ham toplam 17 / 12 / 18 olur ve seçim bir puanla belirlenir. Ağırlık taraması seçimin üç ölçütün üçünde de değiştiğini gösterir: ekip ağırlığı 2, ekosistem ağırlığı 2, üretim ağırlığı 0 olduğunda seçim başka ortama geçer; üçüncü ortam ancak ekosistem ağırlığı 4 olunca 39 puanla seçilir. Aynı dokuz sayı aralığa yayılarak normalleştirildiğinde puan 175 / 100 / 140 olur ve hiçbir ham sayı değişmeden seçim döner.

İçindekiler

Üç ders üç yaklaşımı ölçtü: aynı analizin kaç deyimde ifade edildiği, dönüştürmenin kaç fiille yazıldığı, grafiğin kaç katmanla kurulduğu. Üçünde de ölçülen şey ifadenin biçimiydi ve hiçbirinde bir ortamın öbüründen iyi olduğu söylenmedi. Geriye seçimin kendisi kalıyor.

Bu dersin sayısı ölçüt başına sayıdır. Üç ortam üç ölçütte sayılır ve seçimin hangi ölçütte değiştiği aranır. Yanında kursun ikinci sayısı durur: üç ölçütü tek puana indiren işlem de bir soyutlamadır ve kendi varsayılanlarını taşır.

  • AO13. Küme K03’ten devralınır ve kurgudur: 3.199 satır, 1.329 abone, 10/25/40 m³ tarife basamakları. Tohum koda yazılıdır.
  • AO14. Üç ortam yaklaşımlarıyla anılır ve Python’da modellenir: genel amaçlı bir dilin dizi ve veri çerçevesi arayüzü, analiz odaklı bir dilin bütün-nesne ortamı, hesabın veri deposunda yapıldığı bildirimsel sorgu ortamı. Hiçbir kütüphane ya da ürün adı geçmez.
  • AO15. Ölçütler ve birimleri şunlardır. Ekip: dokuz kişilik ekipte o ortamda analizi yazabilen kişi sayısı. Ekosistem: analizin dokuz adımından hazır parçayla karşılananların sayısı. Üretime taşıma: dokuz üretim kaleminden ortamın karşıladıklarının sayısı.
  • AO16. Envanter kurgudur ve bu ekibin kendi dokuz adımı içindir; ortamlar hakkında genel bir sıralama değildir. Karşılaştırmalı üstünlük iddiası yazılmaz.

Üç Ortam, Üç Ölçüt

Sorulan analiz üç ortamda da aynıdır ve dersin çıpasıdır: bölge başına ortalama tüketim, azalan sırada ilk üç bölge. Değişen şey cevap değil, cevaba giden yolun envanteridir.

# ortam_secimi.py — MODELDIR. Once K03'un 3.199 satirlik kurgu kumesi ayni tohumla
# uretilir, sonra uc ortamin envanteri standart kitaplikla modellenir.
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
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


# Hane ve memnuniyet cekilir ama bu derste kullanilmaz; uretec sirasi korunur.
_kalan, _elenen = [], []
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])
    (_elenen if r() < 0.046 else _kalan).append(
        {"abone_no": 10001 + i, "bolge": b[0], "taban": b[2]})
_gecerli = {k["abone_no"] for k in _kalan}
OKUMA = []
for k in _kalan + _elenen:
    r = uretec(TOHUM + 7000 + k["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(
            k["taban"] * math.exp((r() + r() + r() - 1.5) * 0.62) * (1 - d * 0.05) * 100
            + 0.5) / 100
        if k["abone_no"] not in _gecerli:
            r()
            continue
        OKUMA.append({"bolge": k["bolge"], "tuketim_m3": t})
        r()

ORTAM = ["genel amacli", "analiz odakli", "bildirimsel"]
G, A, B = ORTAM
ADIM = ["okuma", "tip", "suzme", "birlestirme", "gruplama", "ornekleme", "metin",
        "grafik", "yayim"]
KALEM = ["surum", "kilit", "zamanlama", "izleme", "hata", "erisim", "gunluk",
         "geri-alma", "olcek"]

# Envanter KURGUDUR ve bu ekibin kendi dokuz adimi icindir; ortamlar hakkinda
# genel bir siralama degildir. Ikinci sutun yazabilen, ucuncu okuyabilen ortamlar.
EKIP = [("cozumleyici-1", {G, A, B}, {G, A, B}), ("cozumleyici-2", {G, A}, {G, A, B}),
        ("cozumleyici-3", {G, B}, {G, A, B}), ("cozumleyici-4", {G, B}, {G, B}),
        ("cozumleyici-5", {G}, {G, B}), ("cozumleyici-6", {G}, {G, B}),
        ("cozumleyici-7", {G}, {G}), ("cozumleyici-8", {B}, {G, B}),
        ("cozumleyici-9", set(), {G})]
HAZIR = {G: set(ADIM) - {"grafik", "yayim"}, A: set(ADIM), B: set(ADIM[:5])}
KARSILANAN = {G: {"surum", "kilit", "gunluk"}, A: {"surum"}, B: set(KALEM)}

OLCUT = {"ekip": {o: sum(1 for _, y, _ in EKIP if o in y) for o in ORTAM},
         "ekosistem": {o: len(HAZIR[o]) for o in ORTAM},
         "uretim": {o: len(KARSILANAN[o]) for o in ORTAM}}


def hiza(w):
    return lambda h: "".join(str(v).ljust(w[0]) if j == 0 else str(v).rjust(w[j])
                             for j, v in enumerate(h))


def ilk_uc(satirlar):
    t, n = {}, {}
    for s in satirlar:
        t[s["bolge"]] = t.get(s["bolge"], 0.0) + s["tuketim_m3"]
        n[s["bolge"]] = n.get(s["bolge"], 0) + 1
    return sorted(((b, t[b] / n[b]) for b in t), key=lambda p: -p[1])[:3]


print(f"kurgu kume (tohum {TOHUM}): {len(OKUMA)} satir, {len(_gecerli)} abone")
print("sorulan analiz uc ortamda da ayni: "
      + ", ".join(f"{b} {v:.3f}" for b, v in ilk_uc(OKUMA)))
y = hiza([27, 15, 16, 14])
print("\n" + y(["olcut (9 uzerinden)"] + ORTAM))
for k, d in OLCUT.items():
    print(y([k] + [d[o] for o in ORTAM]))
print(y(["ham toplam (27 uzerinden)"]
        + [sum(OLCUT[k][o] for k in OLCUT) for o in ORTAM]))
kurgu kume (tohum 20260218): 3199 satir, 1329 abone
sorulan analiz uc ortamda da ayni: dogu 24.674, merkez 22.396, kuzey 20.210

olcut (9 uzerinden)           genel amacli   analiz odakli   bildirimsel
ekip                                     7               2             4
ekosistem                                7               9             5
uretim                                   3               1             9
ham toplam (27 uzerinden)               17              12            18

Tablo tek bir gözlemle başlar: üç ölçütün üçü de başka bir ortamı öne çıkarıyor. Ekipte genel amaçlı ortam 7 kişiyle, ekosistemde analiz odaklı ortam 9 adımla, üretime taşımada bildirimsel ortam 9 kalemle önde durur. Bildirimsel ortamda elle kurulacak dört adım vardır: yeniden örnekleme, metin ayrıştırma, katmanlı grafik ve yayım.

Böyle bir tabloda “hangisi iyi” sorusunun cevabı yoktur, çünkü ölçütler farklı şeyleri sayıyor. Cevabı olan tek soru şudur: bu üç sayı nasıl birleştirilecek. Ham toplam 17, 12 ve 18 verir ve seçim tek bir puanla belirlenir.

Seçim Hangi Ölçütte Değişiyor

Ham toplam üç ölçüte eşit ağırlık verir; bu eşitlik ölçülmüş değil, varsayılmıştır. Ağırlığı ölçüt ölçüt değiştirip seçimin nerede döndüğüne bakmak, varsayımı sınamanın sayılabilir yoludur.

def puan(agirlik):
    return {o: sum(agirlik[k] * OLCUT[k][o] for k in OLCUT) for o in ORTAM}


def secim(p):
    return max(ORTAM, key=lambda o: p[o])


def yaz(p):
    return " / ".join(str(p[o]) for o in ORTAM)


BIR = {k: 1 for k in OLCUT}
TEMEL = puan(BIR)
y2 = hiza([18, 15, 15, 15, 15, 15])
print("\n" + y2(["olcut agirligi"] + list(range(5))))
for k in OLCUT:
    print(y2([k] + [secim(puan({**BIR, k: w})) for w in range(5)]))
print(f"\nesit agirlikta secim: {secim(TEMEL)} ({yaz(TEMEL)})")
for k in OLCUT:
    aday = [(abs(w - 1), w) for w in range(13)
            if w != 1 and secim(puan({**BIR, k: w})) != secim(TEMEL)]
    w = min(aday)[1]
    p = puan({**BIR, k: w})
    print(f"  {k} agirligi 1 -> {w}: secim {secim(p)} ({yaz(p)})")
kacinci = [w for w in range(13) if secim(puan({**BIR, "ekosistem": w})) == A]
p = puan({**BIR, "ekosistem": kacinci[0]})
print(f"  analiz odakli ortam yalniz ekosistem agirligi {kacinci[0]} olunca "
      f"seciliyor ({yaz(p)})")
olcut agirligi                  0              1              2              3              4
ekip                  bildirimsel    bildirimsel   genel amacli   genel amacli   genel amacli
ekosistem             bildirimsel    bildirimsel   genel amacli   genel amacli  analiz odakli
uretim               genel amacli    bildirimsel    bildirimsel    bildirimsel    bildirimsel

esit agirlikta secim: bildirimsel (17 / 12 / 18)
  ekip agirligi 1 -> 2: secim genel amacli (24 / 14 / 22)
  ekosistem agirligi 1 -> 2: secim genel amacli (24 / 21 / 23)
  uretim agirligi 1 -> 0: secim genel amacli (14 / 11 / 9)
  analiz odakli ortam yalniz ekosistem agirligi 4 olunca seciliyor (38 / 39 / 33)

Cevap tabloda duruyor: seçim üç ölçütün üçünde de değişiyor, ama eşikler ayrıdır. Ekip ağırlığı 1’den 2’ye çıktığında seçim genel amaçlı ortama geçer ve puanlar 24 ile 22 olur; ekosistem ağırlığı 2 olduğunda aynı yere geçer; üretime taşıma hiç sayılmazsa yine oraya. Üçünün de seçimi çevirebilmesinin nedeni bir puanlık başlangıç farkıdır.

Üçüncü ortamın davranışı ayrıca yazılmalıdır. Analiz odaklı ortam eşit ağırlıkta 12 puanla en düşük toplamı alır, ekosistem ağırlığı 4 olduğunda 39 puanla seçilen ortam olur. Hiçbir sayı değişmemiştir; değişen tek şey dokuz adımın hazır karşılanmasının kaç kat sayıldığıdır. Ağırlık bir ölçüm değil bir karardır.

Ölçütün Kendi Varsayılanı

Ağırlık tek varsayılan değildir. Sayılar toplanmadan önce karşılaştırılabilir kılınır ve bu da bir kuraldır. Üç kural yan yana konuyor: ham sayıları toplamak, her ölçütte en yükseği 100 sayıp ötekileri oranlamak, en yükseği 100 en düşüğü 0 sayıp aradakini yaymak.

def normal(kural, olcut):
    toplam = {o: 0.0 for o in ORTAM}
    for d in olcut.values():
        v = [d[o] for o in ORTAM]
        for o in ORTAM:
            if kural == "ham sayi":
                toplam[o] += d[o]
            elif kural == "en iyiye oranlama":
                toplam[o] += 100.0 * d[o] / max(v)
            else:
                toplam[o] += 100.0 * (d[o] - min(v)) / (max(v) - min(v))
    return toplam


y3 = hiza([22, 15, 16, 14, 16])
print("\n" + y3(["normallestirme"] + ORTAM + ["secim"]))
for kural in ("ham sayi", "en iyiye oranlama", "araliga yayma"):
    t = normal(kural, OLCUT)
    print(y3([kural] + [f"{t[o]:.1f}" for o in ORTAM] + [secim(t)]))

OKUR = dict(OLCUT, ekip={o: sum(1 for _, _, k in EKIP if o in k) for o in ORTAM})
print("\n" + y3(["ekip olcutu"] + ORTAM + ["acik fark"]))
for ad, olcut in (("yazabilen", OLCUT), ("okuyabilen", OKUR)):
    t = normal("ham sayi", olcut)
    s = sorted((t[o] for o in ORTAM), reverse=True)
    print(y3([ad] + [f"{t[o]:.0f}" for o in ORTAM] + [f"{s[0] - s[1]:.0f}"]))
normallestirme           genel amacli   analiz odakli   bildirimsel           secim
ham sayi                         17.0            12.0          18.0     bildirimsel
en iyiye oranlama               211.1           139.7         212.7     bildirimsel
araliga yayma                   175.0           100.0         140.0    genel amacli

ekip olcutu              genel amacli   analiz odakli   bildirimsel       acik fark
yazabilen                          17              12            18               1
okuyabilen                         19              13            21               2

Üç kural aynı dokuz sayıdan üç ayrı puan üretiyor ve üçüncüsü seçimi çeviriyor. Ham toplamdaki bir puanlık fark, oranlamada 211,1 ile 212,7 arasındaki 1,6 puana karşılık gelir ve seçim aynı kalır. Aralığa yayma kuralı her ölçütte en düşük değeri sıfırlar ve ortadaki değeri aralığın genişliğine göre bastırır: üretim ölçütünde aralık 8 birimdir, bu yüzden 3 puanlık ortanca değer 25 puana iner ve toplamlar 175 ile 140 olur. Hiçbir ham sayı değişmeden sıralama değişmiştir.

İkinci tablo bir kademe içeridekini gösteriyor. Ekip ölçütü yazabilen kişi sayısı diye tanımlandı; okuyabilen kişi sayısı da savunulabilir bir tanımdır. Tanım değişince bu kümede seçim değişmez, ama toplamlar 19 / 13 / 21 olur ve açık fark 1 puandan 2 puana çıkar; aynı seçim iki katı güvenle verilmiş görünür.

Üç ölçütü tek puana indiren işlev bir soyutlamadır; ağırlık, normalleştirme kuralı ve ölçüt tanımı onun varsayılanlarıdır. Varsayılanı yazılmayan bir puan bir ölçüm değil, bir seçimdir.

Özet

  • Üç ortam üç ölçütte sayılınca her ölçüt başka bir ortamı öne çıkarır: ekip 7 / 2 / 4, ekosistem 7 / 9 / 5, üretime taşıma 3 / 1 / 9.
  • Eşit ağırlıkta ham toplam 17 / 12 / 18 olur ve seçim bir puanlık farkla belirlenir.
  • Seçim üç ölçütün üçünde de değişir, eşikleri ayrıdır: ekip 2, ekosistem 2, üretim 0. Üçüncü ortam ancak ekosistem ağırlığı 4 olunca 39 puanla seçilir.
  • Üç normalleştirme kuralı 17 / 12 / 18, 211,1 / 139,7 / 212,7 ve 175 / 100 / 140 puan verir; üçüncüsü hiçbir ham sayı değişmeden seçimi çevirir.
  • Ekip ölçütü okuyabilen diye tanımlanınca seçim aynı kalır, açık fark 1 puandan 2 puana çıkar.

Kurs Kapanışı

Yirmi iki dersin hesabı tek bir tabloda duruyor ve her sayı kendi dersinden okundu.

Ders Elle yapınca Soyutlamayla Gizlenen karar
Sayısal 01 çalışma ortamı 2/17 adım aynı 11/17 kilit dosyasıyla 5 karar, 1.116 → 1.264
Sayısal 02 diziler 22 satır, 188.864 bayt 2 satır, 30.320 bayt 2 karar, 31,896 ↔ 26,839
Sayısal 03 vektörleştirme 10 satır, 1 geçiş 2 satır, 3 geçiş 3 karar, 102.034 → 1.240
Sayısal 04 yayılım 30.320 bayt ek 0 bayt ek 2 karar, 1.260 → 1.587.600
Sayısal 05 doğrusal cebir 823.059.744 işlem 704 işlem 2 karar, yüzde 50,09 sapma
Çerçeve 01 seri ve çerçeve 781.710 karşılaştırma 2.361 geçiş 2 karar, 3.316,42 m³ fark
Çerçeve 02 okuma ve yazma 7 dönüşüm kuralı 1 okuma çağrısı 3 karar, 1.123 hücre eksiğe
Çerçeve 03 indeksleme 2.658 karşılaştırma 21 geçiş 3 karar, 95 / 94 / 617 satır
Çerçeve 04 filtreleme 5.034 geçiş, 16.184 bayt 6.398 geçiş, 3.399 bayt 2 karar, 1.835 / 2.026 / 1.915
Çerçeve 05 gruplama 15.995 anahtar araması 3.199 geçiş 2 karar, 160 satır düşer
Çerçeve 06 birleştirme 2.616.782 karşılaştırma 4.017 geçiş 2 karar, 12.250,65 m³ fazla
Çerçeve 07 zaman serisi 41.587 geçiş 3.212 geçiş 3 karar, 4.850,82 ↔ 7.882,58
Çerçeve 08 metin işlemleri 9 satır, 0 satır çıktı 3 çağrı, 3.199 satır 3 karar, 256 satır sessizce
Başarım 01 bellek kullanımı 173.837 bayt 3.628 bayt, 47,9 kat 3 karar, 108 satır basamak değişir
Başarım 02 parça parça işleme 1.152.229 bayt tepe 36.132 bayt, 32 kat 3 karar, 1.035 → 0 abone
Başarım 03 sütunlu motorlar 19.194 değer 2.835 değer, 6,8 kat 3 karar, 2.835 → 4.883 değer
Başarım 04 paralel ve dağıtık 3.199 birim 8.921 birim, eşik 10.833 3 karar, 10.833 → 20.119 eşik
Başarım 05 sorguyu veriye götürmek 3.199 satır taşınır 5 satır, 1.919 kat 2 karar, 1.919 → 11 kat
Alternatif 01 ifade biçimleri 6 deyim, 6 ara değişken 1 deyim, 0 ara değişken 5 karar, 1,473 m³ açıklık
Alternatif 02 fiil zinciri 7 deyim, 6 ara değişken 1 deyim, 0 ara değişken 2 karar, 7,301 → 0,593 m³
Alternatif 03 grafik katmanları 9 bağımsız değişken 5 katman, 5 yeniden kullanılan 2 karar, 921 ↔ 24,674
Alternatif 04 ortam seçimi 3 ölçüt, 3 önde gelen 1 puan, 1 seçim 3 karar, 1 puanlık fark

İkinci ve üçüncü sütunun yönü sabit değildir: bazen soyutlama işi kısaltır (2.616.782 karşılaştırma 4.017 geçişe iner), bazen kısaltmaz (11.340 çarpma iki yazımda da aynıdır), bazen bedeli artırır (30.320 bayt 90.960 bayta çıkar). Kazancın yönü soyutlamadan değil, ölçülen işten gelir.

Dördüncü sütun kursun kuralıdır: bir soyutlama işi kısalttığı kadar kararı da gizler; varsayılanını bilmediğin bir işlev, senin adına karar veren bir işlevdir. Varsayılanı yazılmayan çağrı ölçülmemiş sayılır. Yirmi iki dersin adıyla yazdığı gizlenen karar sayısı 60’tır. Bu sayı bir kusur değil, kursun çıktısıdır: sayılmayan varsayılan sıfır görünür ve sıfır görünen varsayılan her çağrıda sessizce uygulanır.

Yirmi iki derste araç takımı kuruldu ve her varsayılanı yazıldı. Ama araç hâlâ yalnız ne olduğunu söylüyor: doğu bölgesinin ortalaması 24,674 m³, kuzeyin 20,210 m³. Bu sayıların bir örneklemden mi kütleden mi geldiği sorulmadı; aradaki 4,464 m³’lük farkın gerçek mi gürültü mü olduğu da sorulmadı. Sonraki kurs, İstatistiksel Analiz ve Keşifsel Veri Analizi, bu iki soruyu ele alır.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat