IlmHamroh
Python kursi/Malumot tahlili9/18-dars15 daqiqa
Mundarija (22)

24.9-dars: pandas — guruhlash

24-QISM — MA'LUMOT TAHLILI · 9-dars


1. Kirish va motivatsiya

24.7–24.8 da ma'lumotni tanladik va tozaladik. Endi tahlilning eng kuchli amali: guruhlash (grouping). "Har kategoriya bo'yicha o'rtacha narx", "har oy jami sotuv", "har mijoz bo'yicha buyurtmalar soni" — bularning hammasi bir toifa bo'yicha ma'lumotni jamlash. Bu 23-qism (SQL GROUP BY) ning pandas versiyasi.

groupby — pandas'ning eng kuchli vositasi: ma'lumotni toifa (kategoriya) bo'yicha bo'lib, har guruhga funksiya (sum, mean, count) qo'llaydi. "Bo'l-qo'lla-birlashtir" (split-apply-combine): ma'lumotni guruhlarga bo'l, har guruhga amal qo'lla, natijani birlashtir. Bir necha kalit bilan (kat + til), bir necha funksiya (agg), nomlangan natija — real hisobotning asosi. Guruhlash — ma'lumotdan xulosa (insight) chiqarishning asosiy usuli.

Real vaziyat. Bir savol berildi: "qaysi kategoriya eng ko'p daromad keltiradi?". Minglab sotuv yozuvi bor. Sikl va dict bilan: uzun kod. pandas bilan: df.groupby("kategoriya")["daromad"].sum().sort_values(ascending=False) — bir qatorda javob. Har kategoriya jami, tartiblangan. Guruhlash — biznes savollariga tez javob berishning vositasi. Tahlilchining eng ko'p ishlatadigan quroli.

Bu darsda pandas guruhlashni o'rganamiz.

Bu darsda:

  • groupby nima
  • Guruh + agregat (sum, mean)
  • Bo'l-qo'lla-birlashtir
  • Bir necha funksiya (agg)
  • Bir necha kalit
  • Nomlangan agregat
  • transform (guruh qiymati)
  • Amaliy: hisobot

ℹ Misollarda pandas (import pandas as pd) bilan sinaladi.


2. Nazariya — chuqur tushuntirish

2.1. groupby nima

groupby — toifa bo'yicha bo'lib jamlash:

python
df.groupby("kategoriya")["narx"].sum()
# har kategoriya uchun narx yig'indisi
# kurs   → 310
# kitob  → 110

groupby(ustun) — ma'lumotni shu ustun (toifa) bo'yicha guruhlarga bo'ladi, keyin har guruhga funksiya (sum, mean) qo'llaydi. df.groupby("kat")["narx"].sum() — har kategoriya bo'yicha narx yig'indisi. Bu SQL GROUP BY 23.1-bob ga to'g'ridan-to'g'ri mos. Natija — indeks guruh, qiymat agregat. Tahlilning eng kuchli amali.

2.2. Guruh + agregat

Guruhga qo'llanadigan funksiyalar:

python
df.groupby("kat")["narx"].sum()      # yig'indi
df.groupby("kat")["narx"].mean()     # o'rtacha
df.groupby("kat")["narx"].max()      # eng katta
df.groupby("kat").size()             # har guruh soni
df.groupby("kat")["narx"].count()    # bo'sh emas soni

Guruh agregatlari: .sum() (yig'indi), .mean() (o'rtacha), .max()/.min(), .size() (har guruhda qator soni), .count() (bo'sh emas soni), .std() (tarqoqlik). Har biri har guruh uchun natija beradi. .size() (barcha qator) vs .count() (bo'sh emas) — farqni bil. Bu ma'lumotni toifa bo'yicha xulosalash.

2.3. Bo'l-qo'lla-birlashtir (split-apply-combine)

groupbyning ichki mantiqi:

1. Bo'l (split): ma'lumot toifa bo'yicha guruhlarga
   kurs: [100, 120, 90]  kitob: [50, 60]
2. Qo'lla (apply): har guruhga funksiya (mean)
   kurs: 103.3  kitob: 55.0
3. Birlashtir (combine): natijani bir jadvalga
   kat    narx
   kurs   103.3
   kitob  55.0

Bo'l-qo'lla-birlashtir (split-apply-combine) — groupbyning falsafasi: bo'l (ma'lumot toifa bo'yicha guruhlarga), qo'lla (har guruhga funksiya), birlashtir (natijani bir jadvalga). Bu kuchli naqsh — har guruhga mustaqil amal, keyin birlashtirish. pandas buni avtomatik qiladi (siz faqat guruh va funksiyani aytasiz).

2.4. Bir necha funksiya (agg)

Bir guruhga bir necha statistika:

python
df.groupby("kat")["narx"].agg(["sum", "mean", "max"])
# har kategoriya: sum, mean, max
df.groupby("kat").agg({
    "narx": "mean",       # narx o'rtacha
    "soni": "sum",        # soni yig'indi
})

agg — bir necha funksiya yoki ustunga har xil: .agg(["sum", "mean", "max"]) (bir ustunga ko'p statistika), .agg({"narx": "mean", "soni": "sum"}) (har ustunga boshqa funksiya). Bu bir marta guruhlab ko'p natija (hisobot uchun). describe() — o'xshash (barcha statistika). Real hisobotda ko'p ustun, ko'p funksiya.

2.5. Bir necha kalit

Bir necha ustun bo'yicha guruhlash:

python
df.groupby(["kat", "til"])["narx"].sum()
# har (kategoriya, til) juftligi uchun
# (kurs, uz)   → 190
# (kurs, en)   → 120
# (kitob, uz)  → 50

Bir necha kalit — groupby([ustun1, ustun2]) — ma'lumotni ikki (yoki ko'p) toifa bo'yicha guruhlaydi: har (kategoriya, til) juftligi uchun natija. Natija — ierarxik indeks (MultiIndex). Bu chuqurroq tahlil (masalan, har mahsulot + har oy). .unstack() — bir kalitni ustunga chiqarish (jadval shakli — pivot, 24.10 ga o'xshash).

2.6. Nomlangan agregat

Natija ustunlarini nomlash:

python
df.groupby("kat").agg(
    ortacha_narx=("narx", "mean"),
    jami_soni=("soni", "sum"),
    max_narx=("narx", "max"),
)
# ustunlar: ortacha_narx, jami_soni, max_narx

Nomlangan agregat — agg(yangi_nom=("ustun", "funksiya")) — natija ustunlariga aniq nom beradi (o'qiluvchan hisobot): ortacha_narx=("narx", "mean"). Bu 2.4 dagi agg ning aniqroq shakli — har natija ustuni tushunarli nom bilan. Real hisobotda muhim (ustunlar aniq nomlangan bo'lsin). Zamonaviy pandas uslubi.

2.7. transform (guruh qiymati)

Guruh statistikasini har qatorga:

python
df["guruh_ortacha"] = df.groupby("kat")["narx"].transform("mean")
# har qatorga o'z guruhi o'rtachasi (qator soni saqlanadi)
df["ulush"] = df["narx"] / df.groupby("kat")["narx"].transform("sum")

transform — guruh statistikasini har qatorga qaytaradi (qator soni o'zgarmaydi — groupby().sum() esa guruh soniga kamaytiradi): df.groupby("kat")["narx"].transform("mean") — har qatorda o'z guruhi o'rtachasi. Bu guruhga nisbatan hisoblashda (ulush, chetlanish) foydali. groupby (jamlaydi) vs transform (qator saqlaydi) — farqni bil.

2.8. Guruhlash — SQL GROUP BY

pandas groupby — SQL GROUP BY 23.1-bob ga to'g'ridan-to'g'ri mos: SELECT kat, AVG(narx) FROM t GROUP BY kat = df.groupby("kat")["narx"].mean(). Har ikkisi "bo'l-qo'lla-birlashtir". Farq: pandas Python'da (moslashuvchan — istalgan funksiya), SQL bazada (katta ma'lumot). Bilim ko'chiriladi: SQL bilgan pandas'ni tez o'rganadi (va aksincha). Guruhlash — ma'lumot tahlilining universal amali.


3. Tez ma'lumotnoma

python
import pandas as pd

# oddiy guruh + agregat:
df.groupby("kat")["narx"].sum()
df.groupby("kat")["narx"].mean()
df.groupby("kat").size()             # har guruh soni

# bir necha funksiya (agg):
df.groupby("kat")["narx"].agg(["sum", "mean", "max"])
df.groupby("kat").agg({"narx": "mean", "soni": "sum"})

# nomlangan agregat:
df.groupby("kat").agg(
    ortacha=("narx", "mean"),
    jami=("soni", "sum"),
)

# bir necha kalit:
df.groupby(["kat", "til"])["narx"].sum()

# transform (qator saqlanadi):
df["guruh_ort"] = df.groupby("kat")["narx"].transform("mean")

# saralab:
df.groupby("kat")["narx"].sum().sort_values(ascending=False)

Guruhlash xulosasi

groupby(ustun): toifa bo'yicha bo'l · agregat: sum/mean/size (har guruh)
Bo'l-qo'lla-birlashtir · agg: ko'p funksiya · [kat,til]: ko'p kalit
transform: qator saqlanadi · = SQL GROUP BY

4. Batafsil misollar

Misollarda pandas (import pandas as pd) bilan sinaladi.

Misol 1 — Guruh va agregat

python
"""groupby: toifa bo'yicha sum/mean/size; har guruh uchun natija (bo'l-qo'lla-birlashtir)."""

import warnings
warnings.filterwarnings("ignore")

import pandas as pd


def main() -> None:
    df = pd.DataFrame({
        "kategoriya": ["kurs", "kitob", "kurs", "kitob", "kurs"],
        "narx": [100, 50, 120, 60, 90],
    })

    print("=== 1. groupby + sum ===")
    print(f"  {df.groupby('kategoriya')['narx'].sum().to_dict()}")

    print("\n=== 2. groupby + mean ===")
    print(f"  {df.groupby('kategoriya')['narx'].mean().round(1).to_dict()}")

    print("\n=== 3. size (har guruh soni) ===")
    print(f"  {df.groupby('kategoriya').size().to_dict()}")

    print("\n=== 4. max va min ===")
    print(f"  max: {df.groupby('kategoriya')['narx'].max().to_dict()}")
    print(f"  min: {df.groupby('kategoriya')['narx'].min().to_dict()}")
    print("  ⭐ groupby — toifa bo'yicha jamlash (har guruh natija)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. groupby + sum ===
  {'kitob': 110, 'kurs': 310}

=== 2. groupby + mean ===
  {'kitob': 55.0, 'kurs': 103.3}

=== 3. size (har guruh soni) ===
  {'kitob': 2, 'kurs': 3}

=== 4. max va min ===
  max: {'kitob': 60, 'kurs': 120}
  min: {'kitob': 50, 'kurs': 90}
  ⭐ groupby — toifa bo'yicha jamlash (har guruh natija)

Nima ko'rsatdi: 2.1, 2.2, 2.3-bo'limlar.

Misol 2 — agg (bir necha funksiya)

python
"""agg: bir ustunga ko'p statistika (sum, mean, max); har ustunga boshqa funksiya."""

import warnings
warnings.filterwarnings("ignore")

import pandas as pd


def main() -> None:
    df = pd.DataFrame({
        "kat": ["kurs", "kitob", "kurs", "kitob", "kurs"],
        "narx": [100, 50, 120, 60, 90],
        "soni": [10, 20, 5, 15, 8],
    })

    print("=== 1. agg (bir ustunga ko'p funksiya) ===")
    r = df.groupby("kat")["narx"].agg(["sum", "mean", "max"]).round(1)
    print(r.to_string())

    print("\n=== 2. agg (har ustunga boshqa funksiya) ===")
    r2 = df.groupby("kat").agg({"narx": "mean", "soni": "sum"}).round(1)
    print(r2.to_string())

    print("\n=== 3. Nomlangan agregat ===")
    r3 = df.groupby("kat").agg(
        ortacha_narx=("narx", "mean"),
        jami_soni=("soni", "sum"),
    ).round(1)
    print(r3.to_string())

    print("\n=== 4. count vs size ===")
    print(f"  size: {df.groupby('kat').size().to_dict()}")
    print(f"  count(narx): {df.groupby('kat')['narx'].count().to_dict()}")
    print("  ⭐ agg — bir marta guruhlab ko'p statistika")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. agg (bir ustunga ko'p funksiya) ===
       sum   mean  max
kat
kitob  110   55.0   60
kurs   310  103.3  120

=== 2. agg (har ustunga boshqa funksiya) ===
        narx  soni
kat
kitob   55.0    35
kurs   103.3    23

=== 3. Nomlangan agregat ===
       ortacha_narx  jami_soni
kat
kitob          55.0         35
kurs          103.3         23

=== 4. count vs size ===
  size: {'kitob': 2, 'kurs': 3}
  count(narx): {'kitob': 2, 'kurs': 3}
  ⭐ agg — bir marta guruhlab ko'p statistika

Nima ko'rsatdi: 2.4, 2.6-bo'limlar.

Misol 3 — Bir necha kalit va transform

python
"""bir necha kalit (groupby([a,b])); transform (guruh qiymati har qatorga — qator saqlanadi)."""

import warnings
warnings.filterwarnings("ignore")

import pandas as pd


def main() -> None:
    df = pd.DataFrame({
        "kat": ["kurs", "kitob", "kurs", "kitob", "kurs"],
        "til": ["uz", "uz", "en", "en", "uz"],
        "narx": [100, 50, 120, 60, 90],
    })

    print("=== 1. Bir necha kalit (kat, til) ===")
    r = df.groupby(["kat", "til"])["narx"].sum()
    print(f"  {r.to_dict()}")

    print("\n=== 2. transform (guruh o'rtachasi har qatorga) ===")
    df["guruh_ort"] = df.groupby("kat")["narx"].transform("mean").round(1)
    print(f"  qatorlar: {df['guruh_ort'].tolist()}")

    print("\n=== 3. Ulush (qator / guruh jami) ===")
    df["ulush"] = (df["narx"] / df.groupby("kat")["narx"].transform("sum")).round(2)
    print(f"  ulushlar: {df['ulush'].tolist()}")

    print("\n=== 4. transform vs groupby (qator soni) ===")
    print(f"  transform qator soni: {len(df['guruh_ort'])} (saqlanadi)")
    print(f"  groupby qator soni: {len(df.groupby('kat')['narx'].sum())} (kamayadi)")
    print("  ⭐ ko'p kalit (ierarxik), transform (qator saqlanadi)")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Bir necha kalit (kat, til) ===
  {('kitob', 'en'): 60, ('kitob', 'uz'): 50, ('kurs', 'en'): 120, ('kurs', 'uz'): 190}

=== 2. transform (guruh o'rtachasi har qatorga) ===
  qatorlar: [103.3, 55.0, 103.3, 55.0, 103.3]

=== 3. Ulush (qator / guruh jami) ===
  ulushlar: [0.32, 0.45, 0.39, 0.55, 0.29]

=== 4. transform vs groupby (qator soni) ===
  transform qator soni: 5 (saqlanadi)
  groupby qator soni: 2 (kamayadi)
  ⭐ ko'p kalit (ierarxik), transform (qator saqlanadi)

Nima ko'rsatdi: 2.5, 2.7-bo'limlar.

Misol 4 — Amaliy: sotuv hisoboti

Real misol: sotuv ma'lumoti — kategoriya bo'yicha daromad, eng yaxshi, ko'p funksiya. To'liq hisobot. Bu — guruhlash bilan tahlilning namunasi.

python
"""to'liq hisobot: daromad ustuni, kategoriya bo'yicha guruh, nomlangan agg, saralash."""

import warnings
warnings.filterwarnings("ignore")

import pandas as pd


def main() -> None:
    df = pd.DataFrame({
        "kategoriya": ["kurs", "kitob", "kurs", "kitob", "kurs", "video"],
        "mahsulot": ["Python", "SQL", "Go", "Git", "Rust", "ML"],
        "narx": [100, 50, 120, 60, 90, 200],
        "sotildi": [50, 30, 20, 40, 25, 10],
    })

    print("=== 1. Daromad ustuni ===")
    df["daromad"] = df["narx"] * df["sotildi"]
    print(f"  daromadlar: {df['daromad'].tolist()}")

    print("\n=== 2. Kategoriya bo'yicha jami daromad ===")
    daromad = df.groupby("kategoriya")["daromad"].sum().sort_values(ascending=False)
    print(f"  {daromad.to_dict()}")

    print("\n=== 3. Nomlangan agregat (to'liq hisobot) ===")
    hisobot = df.groupby("kategoriya").agg(
        mahsulot_soni=("mahsulot", "count"),
        jami_daromad=("daromad", "sum"),
        ortacha_narx=("narx", "mean"),
    ).round(1)
    print(hisobot.to_string())

    print("\n=== 4. Eng yaxshi kategoriya ===")
    eng_yaxshi = daromad.index[0]
    print(f"  eng ko'p daromad: {eng_yaxshi} ({daromad.iloc[0]})")
    print(f"  jami daromad: {df['daromad'].sum()}")
    print("  ⭐ groupby + agg + sort — biznes hisoboti")


if __name__ == "__main__":
    main()

Natijaning muhim qismi:

text
=== 1. Daromad ustuni ===
  daromadlar: [5000, 1500, 2400, 2400, 2250, 2000]

=== 2. Kategoriya bo'yicha jami daromad ===
  {'kurs': 9650, 'kitob': 3900, 'video': 2000}

=== 3. Nomlangan agregat (to'liq hisobot) ===
            mahsulot_soni  jami_daromad  ortacha_narx
kategoriya
kitob                   2          3900          55.0
kurs                    3          9650         103.3
video                   1          2000         200.0

=== 4. Eng yaxshi kategoriya ===
  eng ko'p daromad: kurs (9650)
  jami daromad: 15550
  ⭐ groupby + agg + sort — biznes hisoboti

Nima ko'rsatdi: 2.1–2.8-bo'limlar.


5. To'g'ri va noto'g'ri tushunishlar

Noto'g'ri fikr To'g'risi
"groupby — sikl" Vektorlangan (split-apply-combine)
"size = count" size — barcha, count — bo'sh emas
"Bir funksiya faqat" agg — ko'p funksiya
"groupby qator saqlaydi" Guruhga kamaytiradi (transform — saqlaydi)
"Bir kalit faqat" Ko'p kalit ([a, b])
"SQL GROUP BY boshqacha" Bir xil g'oya
"transform = groupby" transform qator saqlaydi
"Natija tartiblangan" sort_values kerak

6. Keng tarqalgan xatolar va yechimlari

1. groupbydan keyin ustun tanlamaslik

python
df.groupby("kat").sum()   # barcha ustun (matn ham)   # ba'zan xato
df.groupby("kat")["narx"].sum()  # aniq ustun          # ✅

2. size va count chalkashtirish

python
df.groupby("kat").size()      # barcha qator
df.groupby("kat")["a"].count()  # bo'sh emas          # ✅ farqni bil

3. transform o'rniga groupby (qator soni)

python
df["ort"] = df.groupby("kat")["narx"].mean()   # ⚠️ shakl mos emas
df["ort"] = df.groupby("kat")["narx"].transform("mean")  # ✅

4. Natijani saralamaslik

python
df.groupby("kat")["narx"].sum()   # alifbo tartibi
.sort_values(ascending=False)     # ✅ katta → kichik

5. aggda noto'g'ri funksiya nomi

python
.agg(["summ"])   # ⚠️ xato nom
.agg(["sum"])    # ✅

6. Bo'sh qiymatlar guruhda

python
df.groupby("kat")   # NaN kalit tushib qoladi (default)
df.groupby("kat", dropna=False)  # NaN ham              # ✅ kerak bo'lsa

7. Ko'p kalitda indeks

python
df.groupby(["a", "b"]).sum()   # MultiIndex
.reset_index()                 # ✅ oddiy ustunga

7. Integratsiya — bu bilim qayerda kerak bo'ladi

  • 24.8-dars (o'tilgan): Tozalash — guruhga toza ma'lumot
  • 24.10-dars: Birlashtirish — guruh + merge
  • 24.11-dars: Vaqt qatorlari — vaqt bo'yicha guruh
  • 23.1-dars (o'tilgan): SQL GROUP BY — o'xshash
  • 24.16-dars: Statistika — guruh statistikasi

8. Eng yaxshi amaliyotlar

  1. groupbydan keyin ustun tanla (["narx"]).

  2. Ko'p statistika — agg.

  3. Aniq hisobot — nomlangan agregat.

  4. Guruh qiymati har qatorga — transform.

  5. Natijani sort_values bilan sarala.

  6. size (barcha) vs count (bo'sh emas).

  7. Ko'p kalit — [a, b], reset_index.

  8. SQL GROUP BY bilimini ishlat.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
1.  # groupby nima?
2.  # split-apply-combine nima?
3.  # groupby().sum() nima?
4.  # size vs count?
5.  # agg nima?
6.  # nomlangan agregat nima?
7.  # ko'p kalit qanday?
8.  # transform nima?
9.  # transform vs groupby?
10. # SQL bilan bog'liq?
11. # natija tartiblanganmi?
12. # groupby sikl bilan tezmi?
Javoblar
  1. Toifa bo'yicha bo'lib jamlash
  2. Bo'l-qo'lla-birlashtir
  3. Har guruh yig'indisi
  4. size — barcha qator, count — bo'sh emas
  5. Bir necha funksiya
  6. Natija ustunlarini nomlash
  7. groupby([a, b])
  8. Guruh qiymati har qatorga (qator saqlanadi)
  9. transform qator saqlaydi, groupby kamaytiradi
  10. SQL GROUP BY ga mos
  11. Yo'q (sort_values kerak)
  12. Yo'q (groupby vektorlangan, tez)

Vazifa 2: Xatolarni tuzating

python
1.  df.groupby("kat").sum()  # matn ham   # ustun tanla

2.  df["ort"] = df.groupby("kat").mean()  # transform

3.  .agg(["summ"])                         # sum

4.  df.groupby("kat").sum()  # tartibsiz   # sort_values

5.  df.groupby(["a","b"]).sum()  # MultiIndex  # reset_index
Javoblar
python
1.  df.groupby("kat")["narx"].sum()

2.  df["ort"] = df.groupby("kat")["narx"].transform("mean")

3.  .agg(["sum"])

4.  .sum().sort_values(ascending=False)

5.  df.groupby(["a","b"]).sum().reset_index()

Vazifa 3: Guruh

Asosiy:

  1. groupby + sum
  2. mean, size
  3. max, min
  4. Natija

Vazifa 4: agg

Ko'p funksiya:

  1. Bir ustun ko'p statistika
  2. Har ustun boshqa
  3. Nomlangan
  4. Hisobot

Vazifa 5: Ko'p kalit va transform

Chuqur:

  1. groupby([a, b])
  2. transform
  3. Ulush
  4. Qator soni

Vazifa 6: Hisobot

To'liq:

  1. Hisob ustuni
  2. Guruh + agg
  3. Sarala
  4. Eng yaxshi

Vazifa 7: O'ylash

groupby "bo'l-qo'lla-birlashtir" (split-apply-combine) naqshiga asoslanadi: ma'lumotni guruhlarga bo'l, har guruhga mustaqil amal qo'lla, natijani birlashtir. Bu SQL GROUP BY va MapReduce (katta ma'lumot) bilan bir g'oya. Nima uchun "bo'l-qo'lla-birlashtir" naqshi kuchli va parallellashtiriladigan, va bu 14-qism (parallellik) va katta ma'lumot (Spark) bilan qanday bog'liq?

Javob

Qisqa javob: "Bo'l-qo'lla-birlashtir" kuchli, chunki har guruhga amal mustaqil (bir guruh boshqasiga bog'liq emas) — shuning uchun parallellashtiriladi (har guruh alohida protsessor/mashinada, 14-qism). Bu MapReduce (Google) va Spark (katta ma'lumot) ning asosi: Map (bo'l — har bo'lakka amal), Reduce (birlashtir — natijalarni jamla). Nima uchun mustaqillik muhim: parallellikda qismlar bir-biriga bog'liq bo'lsa, ular kutishi kerak (sekin, murakkab); mustaqil bo'lsa, bir vaqtda (tez). pandas groupby bir mashinada (ketma-ket yoki oz parallel), lekin bir xil g'oya katta ma'lumotda (Spark) yuz mashinada parallel. Bilim ko'chiriladi: groupby tushungan — Spark'ni tez o'rganadi.

1. Bo'l-qo'lla-birlashtir

  • Bo'l: ma'lumot guruhlarga (mustaqil bo'laklar)
  • Qo'lla: har guruhga funksiya (alohida)
  • Birlashtir: natijalar bir jadvalga

2. Nega parallellashtiriladi

Har guruh mustaqil (bir-biriga bog'liq emas) — har birini alohida (protsessor/mashina) hisoblash mumkin. Bog'liq bo'lsa — kutish (sekin). Mustaqillik — parallellik kaliti (14-qism).

3. MapReduce va Spark

Naqsh Amal
Map Bo'l — har bo'lakka amal
Reduce Birlashtir — jamla
pandas groupby Bir mashina
Spark groupby Yuz mashina (parallel)

Bir g'oya, turli miqyos.

4. 14-qism (parallellik) bilan

Mustaqil vazifalar — parallellashtiriladi (14-qism: process/thread). groupby — har guruh mustaqil (potensial parallel). Katta ma'lumotda (Spark) — real parallel (ko'p mashina).

5. Muhandislik saboqlari

  1. Mustaqil amal — parallellashtiriladi
  2. Bo'l-qo'lla-birlashtir — universal naqsh
  3. pandas → Spark (bir g'oya, katta miqyos)
  4. Mustaqillik — parallellik kaliti

6. Xulosa

  1. groupby — bo'l-qo'lla-birlashtir
  2. Har guruh mustaqil (parallellashtiriladi)
  3. MapReduce/Spark — bir g'oya
  4. Bilim ko'chiriladi (kichik → katta)

Nimani mustahkamlaydi: 2.1–2.8-bo'limlar.


Xulosa

Bu darsda pandas guruhlashni o'rgandik.

Eng muhim uch fikr:

  1. groupby va agregat. groupby(ustun) — ma'lumotni toifa (kategoriya) bo'yicha guruhlarga bo'ladi, keyin har guruhga funksiya qo'llaydi: df.groupby("kat")["narx"].sum() (har kategoriya yig'indisi). Agregatlar: .sum(), .mean(), .max()/.min(), .size() (har guruh qator soni), .count() (bo'sh emas — sizedan farq), .std(). Har biri har guruh uchun natija. Bu "bo'l-qo'lla-birlashtir" (split-apply-combine): bo'l (guruhlarga) → qo'lla (funksiya) → birlashtir (jadvalga). SQL GROUP BY 23.1-bob ga to'g'ridan mos.

  2. agg, ko'p kalit, nomlangan agregat. agg — bir necha funksiya: .agg(["sum", "mean", "max"]) (bir ustunga ko'p), .agg({"narx": "mean", "soni": "sum"}) (har ustunga boshqa). Nomlangan agregat: .agg(ortacha_narx=("narx", "mean")) — natija ustunlariga aniq nom (o'qiluvchan hisobot — zamonaviy uslub). Bir necha kalit: groupby([ustun1, ustun2]) — har juftlik uchun (MultiIndex — .reset_index() bilan oddiy ustunga). Real hisobotda ko'p ustun, ko'p funksiya.

  3. transform va parallellik. transform — guruh statistikasini har qatorga qaytaradi (qator soni saqlanadi — groupby().sum() esa guruh soniga kamaytiradi): df.groupby("kat")["narx"].transform("mean") — har qatorda o'z guruhi o'rtachasi (ulush, chetlanish hisoblashda). Guruhlash — "bo'l-qo'lla-birlashtir" naqshi, har guruhga amal mustaqil — shuning uchun parallellashtiriladi (14-qism; MapReduce, Spark — katta ma'lumot, bir g'oya). SQL GROUP BY bilgan pandas'ni tez o'rganadi. Guruhlash — ma'lumotdan xulosa (insight) chiqarishning eng kuchli amali.

Keyingi darsda pandas: birlashtirish ni o'rganamiz: merge, concat, join bilan bir necha jadvalni birlashtirish (SQL JOIN kabi) — turli manbalardagi ma'lumotni bir joyga.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
24.9-dars: pandas — guruhlash — IlmHamroh