---
title: 'Ortam Seçimi'
source: 'https://academia.sh/tr/kurslar/python-ile-analiz/ortam-secimi'
course: 'Python ile Veri Analizi'
language: tr
updated: '2026-08-17T18:08:43+00:00'
license: 'CC BY-SA 4.0'
---

# 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.

Üç 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.

```python
# 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.

```python
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.

```python
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.
