Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. groupby nima
- 2.2. Guruh + agregat
- 2.3. Bo'l-qo'lla-birlashtir (split-apply-combine)
- 2.4. Bir necha funksiya (agg)
- 2.5. Bir necha kalit
- 2.6. Nomlangan agregat
- 2.7. transform (guruh qiymati)
- 2.8. Guruhlash — SQL GROUP BY
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Guruh va agregat
- Misol 2 — agg (bir necha funksiya)
- Misol 3 — Bir necha kalit va transform
- Misol 4 — Amaliy: sotuv hisoboti
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
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:
-
groupbynima - 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:
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:
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:
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:
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:
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:
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
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 BY4. Batafsil misollar
Misollarda pandas (
import pandas as pd) bilan sinaladi.
Misol 1 — Guruh va agregat
"""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:
=== 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)
"""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:
=== 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 statistikaNima ko'rsatdi: 2.4, 2.6-bo'limlar.
Misol 3 — Bir necha kalit va transform
"""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:
=== 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.
"""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:
=== 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 hisobotiNima 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
df.groupby("kat").sum() # barcha ustun (matn ham) # ba'zan xato
df.groupby("kat")["narx"].sum() # aniq ustun # ✅2. size va count chalkashtirish
df.groupby("kat").size() # barcha qator
df.groupby("kat")["a"].count() # bo'sh emas # ✅ farqni bil3. transform o'rniga groupby (qator soni)
df["ort"] = df.groupby("kat")["narx"].mean() # ⚠️ shakl mos emas
df["ort"] = df.groupby("kat")["narx"].transform("mean") # ✅4. Natijani saralamaslik
df.groupby("kat")["narx"].sum() # alifbo tartibi
.sort_values(ascending=False) # ✅ katta → kichik5. aggda noto'g'ri funksiya nomi
.agg(["summ"]) # ⚠️ xato nom
.agg(["sum"]) # ✅6. Bo'sh qiymatlar guruhda
df.groupby("kat") # NaN kalit tushib qoladi (default)
df.groupby("kat", dropna=False) # NaN ham # ✅ kerak bo'lsa7. Ko'p kalitda indeks
df.groupby(["a", "b"]).sum() # MultiIndex
.reset_index() # ✅ oddiy ustunga7. 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
groupbydan keyin ustun tanla (["narx"]).Ko'p statistika —
agg.Aniq hisobot — nomlangan agregat.
Guruh qiymati har qatorga —
transform.Natijani
sort_valuesbilan sarala.size(barcha) vscount(bo'sh emas).Ko'p kalit —
[a, b],reset_index.SQL GROUP BY bilimini ishlat.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
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
- Toifa bo'yicha bo'lib jamlash
- Bo'l-qo'lla-birlashtir
- Har guruh yig'indisi
- size — barcha qator, count — bo'sh emas
- Bir necha funksiya
- Natija ustunlarini nomlash
groupby([a, b])- Guruh qiymati har qatorga (qator saqlanadi)
- transform qator saqlaydi, groupby kamaytiradi
- SQL GROUP BY ga mos
- Yo'q (
sort_valueskerak) - Yo'q (groupby vektorlangan, tez)
Vazifa 2: Xatolarni tuzating
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_indexJavoblar
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:
groupby+summean,sizemax,min- Natija
Vazifa 4: agg
Ko'p funksiya:
- Bir ustun ko'p statistika
- Har ustun boshqa
- Nomlangan
- Hisobot
Vazifa 5: Ko'p kalit va transform
Chuqur:
groupby([a, b])transform- Ulush
- Qator soni
Vazifa 6: Hisobot
To'liq:
- Hisob ustuni
- Guruh + agg
- Sarala
- 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
- Mustaqil amal — parallellashtiriladi
- Bo'l-qo'lla-birlashtir — universal naqsh
- pandas → Spark (bir g'oya, katta miqyos)
- Mustaqillik — parallellik kaliti
6. Xulosa
- groupby — bo'l-qo'lla-birlashtir
- Har guruh mustaqil (parallellashtiriladi)
- MapReduce/Spark — bir g'oya
- Bilim ko'chiriladi (kichik → katta)
Nimani mustahkamlaydi: 2.1–2.8-bo'limlar.
Xulosa
Bu darsda pandas guruhlashni o'rgandik.
Eng muhim uch fikr:
groupbyva 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). SQLGROUP BY23.1-bob ga to'g'ridan mos.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.transformva 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.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!