Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. groupby (bo'l-hisobla-birlashtir)
- 2.2. Agregatsiya (mean, sum, count)
- 2.3. Ko'p ustun bo'yicha
- 2.4. agg (bir nechta funksiya)
- 2.5. Guruhlangan natija bilan ishlash
- 2.6. groupby amaliyoti
- 2.7. groupby tuzoqlari
- 2.8. groupby — guruh darajasidagi tahlil
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — groupby asoslari
- Misol 2 — Ko'p ustun bo'yicha
- Misol 3 — agg (ko'p funksiya)
- Misol 4 — Natija bilan ishlash (reyting)
- 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
3.8-dars: Guruhlash (groupby)
3-QISM — PANDAS · 8-dars
1. Kirish va motivatsiya
Data Science tahlilining eng kuchli vositasi — guruhlash (groupby). "Har shahar bo'yicha o'rtacha maosh", "har kategoriya bo'yicha jami savdo", "har oy bo'yicha mijozlar soni". Bu — ma'lumotni guruhlarga bo'lib, har guruh uchun statistika hisoblash. Excel'dagi pivot jadval, SQL'dagi GROUP BY — Pandas'da bu groupby. G'oya oddiy va kuchli: bo'l — hisobla — birlashtir (split-apply-combine): ma'lumotni ustun bo'yicha guruhlarga bo'l, har guruhga funksiya (mean, sum, count) qo'lla, natijalarni bir jadvalga birlashtir. Nega muhim? (1) Taqqoslash — guruhlarni solishtirish (Toshkent vs Samarqand); (2) Xulosa — katta ma'lumotdan guruh darajasidagi ma'no; (3) Naqsh topish — kategoriyalar bo'yicha farqlar. groupby — Data Science tahlilning yuragi. Bu dars guruhlashni o'rgatadi — guruh darajasidagi tahlil.
Guruhlash (groupby) — guruhlarga bo'lib hisob: groupby (ustun bo'yicha guruh — df.groupby("shahar")), agregatsiya (guruhga funksiya — mean/sum/count/max), split-apply-combine (bo'l-hisobla-birlashtir), ko'p ustun (groupby(["shahar", "jins"])), agg (bir nechta funksiya), guruh soni (count/size), filtrlangan guruh. Foydalanish: guruh tahlil, taqqoslash, xulosa. Bu 2.8 (NumPy agregatsiya), 3.5 (filtr) bilan bog'liq. groupby — bo'l-hisobla-birlashtir. Guruh. Tahlil.
Real vaziyat. Data Scientist do'kon savdo ma'lumoti bilan ishlar edi (shahar, kategoriya, summa — 10000 qator). Savollarga javob kerak edi: har shahar bo'yicha jami savdo — df.groupby("shahar")["summa"].sum(); har kategoriya o'rtacha narx — df.groupby("kategoriya")["narx"].mean(); har shahar × kategoriya — df.groupby(["shahar", "kategoriya"])["summa"].sum(); guruh soni — df.groupby("shahar").size(). groupby bo'l-hisobla-birlashtir qildi (10000 qator → shahar darajasidagi xulosa — 5 shahar, jami savdo). Guruhlash naqshni ochdi (Toshkent eng ko'p, elektronika eng qimmat). groupby — Data Science tahlil yuragi (guruh darajasidagi ma'no).
Bu darsda groupby'ni o'rganamiz.
Bu darsda:
- groupby (bo'l-hisobla-birlashtir)
- Agregatsiya (mean, sum, count)
- Ko'p ustun bo'yicha
- agg (bir nechta funksiya)
- Guruhlangan natija bilan ishlash
- groupby amaliyoti
- groupby tuzoqlari
- Amaliy: guruh modeli
ℹ Misollar real pandas bilan (deterministik) ishlaydi.
2. Nazariya — chuqur tushuntirish
2.1. groupby (bo'l-hisobla-birlashtir)
Guruhlarga bo'lib hisob:
import pandas as pd
df = pd.DataFrame({
"shahar": ["T", "S", "T", "S", "T"],
"summa": [100, 200, 150, 250, 120],
})
# groupby — ustun bo'yicha guruh + funksiya
df.groupby("shahar")["summa"].sum()
# shahar
# S 450 (200 + 250)
# T 370 (100 + 150 + 120)
# G'OYA: bo'l (shahar) — hisobla (sum) — birlashtir (jadval) groupby (bo'l-hisobla-birlashtir) — guruhlarga bo'lib hisob: df.groupby("shahar")["summa"].sum() (shahar bo'yicha guruh, summani yig'). G'oya — split-apply-combine: (1) bo'l (split — shahar bo'yicha guruhlar: T, S), (2) hisobla (apply — har guruhga funksiya: sum), (3) birlashtir (combine — natijalar bir jadvalda). Sabab: guruh darajasidagi xulosa (har shahar jami — 10000 qator → 5 shahar; naqsh); groupby buni avtomatik (bo'l-hisobla-birlashtir). Natija — Series (indeks — guruhlar). groupby — bo'l-hisobla-birlashtir (groupby("ustun")["ustun"].funksiya). Guruh. Xulosa.
2.2. Agregatsiya (mean, sum, count)
Guruhga funksiya:
df = pd.DataFrame({
"shahar": ["T", "S", "T", "S"],
"summa": [100, 200, 150, 250],
})
df.groupby("shahar")["summa"].sum() # jami
df.groupby("shahar")["summa"].mean() # o'rtacha
df.groupby("shahar")["summa"].count() # soni (NaN emas)
df.groupby("shahar")["summa"].max() # eng katta
df.groupby("shahar").size() # guruh o'lchami Agregatsiya (mean, sum, count) — guruhga funksiya: groupby("shahar")["summa"].sum() (jami), .mean() (o'rtacha), .count() (soni — NaN emas), .max()/.min() (chegara), .size() (guruh o'lchami — barcha qator, NaN ham). Sabab: har guruh uchun statistika (jami savdo, o'rtacha narx, mijoz soni — 2.8 agregatsiya, lekin guruh bo'yicha); funksiya har guruhga alohida. sum/mean/count/max (2.8 kabi). count (NaN emas), size (barcha — NaN ham). Agregatsiya — guruhga funksiya (sum/mean/count). Statistika. Guruh.
2.3. Ko'p ustun bo'yicha
Bir nechta ustunda guruh:
df = pd.DataFrame({
"shahar": ["T", "T", "S", "S"],
"jins": ["M", "F", "M", "F"],
"summa": [100, 150, 200, 250],
})
# ko'p ustun (ro'yxat)
df.groupby(["shahar", "jins"])["summa"].sum()
# shahar jins
# S F 250
# M 200
# T F 150
# M 100 Ko'p ustun bo'yicha — bir nechta ustunda guruh: df.groupby(["shahar", "jins"])["summa"].sum() (shahar × jins — har kombinatsiya: T-M, T-F, S-M, S-F). Sabab: ba'zan ko'p o'lchamli guruh (har shahar VA har jins — batafsil tahlil; Toshkent erkaklar, Toshkent ayollar); groupby([...]) ro'yxat bilan (ko'p ustun). Natija — ko'p darajali indeks (MultiIndex — shahar, jins). Batafsil (kombinatsiyalar). Ko'p ustun — groupby([...]) (kombinatsiya). Ko'p o'lcham. MultiIndex.
2.4. agg (bir nechta funksiya)
Bir vaqtda ko'p funksiya:
df = pd.DataFrame({"shahar": ["T", "S", "T"], "summa": [100, 200, 150]})
# agg — bir nechta funksiya
df.groupby("shahar")["summa"].agg(["sum", "mean", "count"])
# sum mean count
# shahar
# S 200 200.0 1
# T 250 125.0 2
# har ustunga boshqa funksiya
df.groupby("shahar").agg({"summa": "sum", "narx": "mean"}) agg (bir nechta funksiya) — bir vaqtda ko'p statistika: df.groupby("shahar")["summa"].agg(["sum", "mean", "count"]) (jami, o'rtacha, soni — bir jadvalda), df.groupby("shahar").agg({"summa": "sum", "narx": "mean"}) (har ustunga boshqa funksiya — dict). Sabab: ko'pincha bir nechta statistika kerak (jami VA o'rtacha VA soni — bir marta); agg ro'yxat (bir ustun, ko'p funksiya) yoki dict (har ustun, o'z funksiya). Bir amalda to'liq xulosa (batafsil hisobot). agg — ko'p funksiya (ro'yxat/dict). Bir amalda. To'liq.
2.5. Guruhlangan natija bilan ishlash
Guruhlangan natija bilan ishlash — natija Series/DataFrame: groupby natijasi (indeks — guruhlar) — saralash (.sort_values() — eng ko'p/kam), filtr ([natija > 100] — shart), reset_index (indeks → ustun — oddiy DataFrame), vizualizatsiya (grafik — 5-qism). Sabab: guruh natijasi tayyor emas (xom xulosa — tartiblash, filtr, ko'rsatish kerak); natija oddiy Series/DataFrame (barcha amallar ishlaydi — sort, filter). reset_index (guruh indeks → ustun — CSV/grafik uchun); sort_values (reyting — eng ko'p savdo shahar). Guruh natija — Series/DataFrame (sort/filter/reset_index). Xulosa. Tayyorlash.
2.6. groupby amaliyoti
groupby amaliyoti: groupby("ustun") (guruh — bo'l); agregatsiya (sum/mean/count/size — hisobla); ko'p ustun (groupby([...]) — kombinatsiya); agg (ko'p funksiya — ro'yxat/dict); natija (sort/filter/reset_index — tayyorlash); size vs count (size — barcha, count — NaN emas); saralash (sort_values — reyting). Tuzoqlar: size vs count (NaN), MultiIndex (ko'p ustun — reset_index), NaN guruh (o'tkaziladi), natija Series (reset_index), sekin (katta ma'lumot — samaradorlik). Amaliyot — groupby, agregatsiya, ko'p ustun, agg. Bo'l-hisobla-birlashtir. Guruh.
2.7. groupby tuzoqlari
groupby asosiy tuzoqlari: size vs count (size — guruh barcha qator (NaN ham); count — NaN emas qiymatlar; farqli — NaN bo'lsa); MultiIndex (ko'p ustun groupby([...]) — natija ko'p darajali indeks; kirish/CSV qiyin; reset_index() — oddiy ustun); NaN guruh (guruhlash ustunida NaN — o'tkazib yuboriladi (guruh emas); dropna=False bilan saqlash); natija Series (groupby(...).sum() — Series (indeks guruh); DataFrame kerak bo'lsa reset_index()); guruh ustunini tanlash (groupby("a")["b"].sum() — b hisoblanadi; groupby("a").sum() — barcha son ustun); saralanmagan (natija guruh nom bo'yicha; reyting uchun sort_values); agg nom (agg(["sum", "mean"]) — ustun nomi funksiya; noaniq bo'lsa agg(jami=("summa", "sum"))). Sabab: groupby natija/NaN/indeks nozik (size/count, MultiIndex, NaN — jim xato yoki chalkash). Yechim: size/count farqi, reset_index, dropna=False, sort_values. Tuzoqlar — size/count, MultiIndex, NaN, natija.
2.8. groupby — guruh darajasidagi tahlil
groupby asosiy g'oyasi — guruh darajasidagi tahlil: katta ma'lumotni guruhlarga bo'lib (shahar, kategoriya, oy) har guruh uchun statistika (o'rtacha, jami, soni); Data Science tahlilining eng kuchli vositasi (Excel pivot, SQL GROUP BY). G'oya — split-apply-combine (bo'l — guruhlar; hisobla — funksiya; birlashtir — jadval). groupby (guruh), agregatsiya (sum/mean/count — 2.8, lekin guruh bo'yicha), ko'p ustun (kombinatsiya — MultiIndex), agg (ko'p funksiya). Natija — guruh darajasidagi xulosa (10000 qator → 5 shahar; taqqoslash, naqsh). Data Science'da doim (guruhlarni solishtirish — Toshkent vs Samarqand; kategoriya farqi; oy bo'yicha trend). Bu 2.8 (agregatsiya) davomi (guruh bo'yicha) va 3.13 (pivot), butun tahlil uchun. groupby — guruh darajasidagi tahlil (bo'l-hisobla-birlashtir). Eng kuchli. Xulosa.
3. Tez ma'lumotnoma
import pandas as pd
# groupby (bo'l-hisobla-birlashtir):
df.groupby("shahar")["summa"].sum() # har shahar jami
df.groupby("shahar")["summa"].mean() # o'rtacha
df.groupby("shahar")["summa"].count() # soni (NaN emas)
df.groupby("shahar").size() # guruh o'lchami (barcha)
# KO'P USTUN (kombinatsiya, MultiIndex):
df.groupby(["shahar", "jins"])["summa"].sum()
# agg (bir nechta funksiya):
df.groupby("shahar")["summa"].agg(["sum", "mean", "count"])
df.groupby("shahar").agg({"summa": "sum", "narx": "mean"})
# NATIJA BILAN ISHLASH:
natija = df.groupby("shahar")["summa"].sum()
natija.sort_values(ascending=False) # reyting
natija.reset_index() # ustunga (DataFrame)
QOIDA: bo'l-hisobla-birlashtir · size (barcha) count (NaN emas) · reset_indexgroupby xulosasi
groupby — guruh darajasidagi tahlil (bo'l-hisobla-birlashtir)
Split-apply-combine — bo'l (guruh) → hisobla (funksiya) → birlashtir
Agregatsiya — sum/mean/count/size (guruh bo'yicha)
Ko'p ustun — groupby([...]) (kombinatsiya, MultiIndex)
agg — ko'p funksiya (ro'yxat/dict) · reset_index (DataFrame)4. Batafsil misollar
Misollar real pandas bilan (deterministik) ishlaydi.
Misol 1 — groupby asoslari
"""groupby: bo'l-hisobla-birlashtir (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"shahar": ["T", "S", "T", "S", "T"],
"summa": [100, 200, 150, 250, 120],
})
print("=== 1. Jami (sum) ===")
print(f" {df.groupby('shahar')['summa'].sum().to_dict()}")
print("\n=== 2. O'rtacha (mean) ===")
print(f" {df.groupby('shahar')['summa'].mean().to_dict()}")
print("\n=== 3. Soni (count) ===")
print(f" {df.groupby('shahar')['summa'].count().to_dict()}")
print("\n=== 4. Guruh o'lchami (size) ===")
print(f" {df.groupby('shahar').size().to_dict()}")
print(" ⭐ groupby — bo'l-hisobla-birlashtir")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Jami (sum) ===
{'S': 450, 'T': 370}
=== 2. O'rtacha (mean) ===
{'S': 225.0, 'T': 123.33333333333333}
=== 3. Soni (count) ===
{'S': 2, 'T': 3}
=== 4. Guruh o'lchami (size) ===
{'S': 2, 'T': 3}
⭐ groupby — bo'l-hisobla-birlashtirNima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Ko'p ustun bo'yicha
"""Ko'p ustun bo'yicha guruhlash (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"shahar": ["T", "T", "S", "S"],
"jins": ["M", "F", "M", "F"],
"summa": [100, 150, 200, 250],
})
print("=== 1. Shahar × jins ===")
natija = df.groupby(["shahar", "jins"])["summa"].sum()
print(f" T-M: {natija[('T', 'M')]}, S-F: {natija[('S', 'F')]}")
print("\n=== 2. Guruhlar soni ===")
print(f" guruhlar: {len(natija)}")
print("\n=== 3. reset_index (DataFrame) ===")
tekis = natija.reset_index()
print(f" ustunlar: {list(tekis.columns)}")
print("\n=== 4. Faqat shahar ===")
print(f" shahar jami: {df.groupby('shahar')['summa'].sum().to_dict()}")
print(" ⭐ Ko'p ustun — kombinatsiya (MultiIndex)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Shahar × jins ===
T-M: 100, S-F: 250
=== 2. Guruhlar soni ===
guruhlar: 4
=== 3. reset_index (DataFrame) ===
ustunlar: ['shahar', 'jins', 'summa']
=== 4. Faqat shahar ===
shahar jami: {'S': 450, 'T': 250}
⭐ Ko'p ustun — kombinatsiya (MultiIndex)Nima ko'rsatdi: 2.3-bo'lim.
Misol 3 — agg (ko'p funksiya)
"""agg: ko'p funksiya (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"shahar": ["T", "S", "T", "S", "T"],
"summa": [100, 200, 150, 250, 120],
})
print("=== 1. Ro'yxat (bir ustun) ===")
natija = df.groupby("shahar")["summa"].agg(["sum", "mean", "count"])
print(f" T jami: {natija.loc['T', 'sum']}, T o'rtacha: {natija.loc['T', 'mean']}")
print("\n=== 2. Min va max ===")
n2 = df.groupby("shahar")["summa"].agg(["min", "max"])
print(f" T min: {n2.loc['T', 'min']}, T max: {n2.loc['T', 'max']}")
print("\n=== 3. Nomlangan agg ===")
n3 = df.groupby("shahar")["summa"].agg(jami="sum", ortacha="mean")
print(f" ustunlar: {list(n3.columns)}")
print("\n=== 4. Ustunlar ===")
print(f" agg ustunlari: {list(natija.columns)}")
print(" ⭐ agg — bir nechta funksiya (ro'yxat/dict)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Ro'yxat (bir ustun) ===
T jami: 370, T o'rtacha: 123.33333333333333
=== 2. Min va max ===
T min: 100, T max: 150
=== 3. Nomlangan agg ===
ustunlar: ['jami', 'ortacha']
=== 4. Ustunlar ===
agg ustunlari: ['sum', 'mean', 'count']
⭐ agg — bir nechta funksiya (ro'yxat/dict)Nima ko'rsatdi: 2.4-bo'lim.
Misol 4 — Natija bilan ishlash (reyting)
"""Guruh natijasi: reyting (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"shahar": ["T", "S", "B", "T", "S", "B", "T"],
"summa": [100, 200, 50, 150, 250, 80, 120],
})
print("=== 1. Har shahar jami ===")
jami = df.groupby("shahar")["summa"].sum()
print(f" {jami.to_dict()}")
print("\n=== 2. Reyting (sort) ===")
reyting = jami.sort_values(ascending=False)
print(f" eng ko'p: {reyting.index[0]} ({reyting.iloc[0]})")
print("\n=== 3. Filtr (> 200) ===")
print(f" 200 dan katta: {list(jami[jami > 200].index)}")
print("\n=== 4. reset_index ===")
tekis = jami.reset_index()
print(f" DataFrame ustunlari: {list(tekis.columns)}")
print(" ⭐ Natija — sort/filter/reset_index (tayyorlash)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Har shahar jami ===
{'B': 130, 'S': 450, 'T': 370}
=== 2. Reyting (sort) ===
eng ko'p: S (450)
=== 3. Filtr (> 200) ===
200 dan katta: ['S', 'T']
=== 4. reset_index ===
DataFrame ustunlari: ['shahar', 'summa']
⭐ Natija — sort/filter/reset_index (tayyorlash)Nima ko'rsatdi: 2.5-bo'lim.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "groupby — filtr" | Guruhlab hisoblash |
| "size va count bir xil" | size barcha, count NaN emas |
| "groupby natija tayyor" | Sort/reset_index kerak |
| "ko'p ustun oddiy indeks" | MultiIndex |
| "NaN guruh bo'ladi" | O'tkaziladi (dropna=False saqlaydi) |
| "agg bitta funksiya" | Ko'p funksiya (ro'yxat/dict) |
| "natija DataFrame" | Series (reset_index → DataFrame) |
| "groupby saralaydi" | Nom bo'yicha (sort_values kerak) |
6. Keng tarqalgan xatolar va yechimlari
1. size vs count
df.groupby("a")["b"].count() # NaN emas qiymatlar # ⚠️
df.groupby("a").size() # barcha qator (NaN ham) # ✅2. MultiIndex
df.groupby(["a", "b"]).sum() # MultiIndex (kirish qiyin) # ⚠️
df.groupby(["a", "b"]).sum().reset_index() # oddiy ustun # ✅3. NaN guruh
df.groupby("shahar").sum() # NaN shahar o'tkaziladi # ⚠️
df.groupby("shahar", dropna=False).sum() # NaN saqlanadi # ✅4. Natija Series
natija = df.groupby("a")["b"].sum() # Series # ⚠️
natija.reset_index() # DataFrame (CSV/grafik) # ✅5. Saralanmagan
df.groupby("a")["b"].sum() # nom bo'yicha (reyting emas) # ⚠️
df.groupby("a")["b"].sum().sort_values(ascending=False) # ✅6. Ustun tanlash
df.groupby("a").sum() # barcha son ustun # ⚠️
df.groupby("a")["b"].sum() # faqat b # ✅7. agg nom noaniq
df.groupby("a")["b"].agg(["sum", "sum"]) # takror nom # ⚠️
df.groupby("a")["b"].agg(jami="sum", o="mean") # nomlangan # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 2.8-dars (o'tilgan): NumPy agregatsiya (mean, sum)
- 3.5-dars (o'tilgan): Filtrlash
- 3.13-dars: Pivot (guruhlash — jadval)
- 4-qism: Statistika (guruhlarni solishtirish)
- 5-qism: Vizualizatsiya (guruh natijasi — grafik)
8. Eng yaxshi amaliyotlar
groupby("ustun")["ustun"].funksiya(guruh + hisob).sum/mean/count— guruh statistikasi.size(barcha) vscount(NaN emas).Ko'p ustun —
groupby([...])(kombinatsiya).agg— ko'p funksiya (ro'yxat/dict).reset_index— DataFrame (natija bilan ishlash).sort_values— reyting.groupby — guruh darajasidagi tahlil.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # groupby nima?
2. # split-apply-combine?
3. # agregatsiya nima?
4. # size vs count?
5. # ko'p ustun?
6. # MultiIndex nima?
7. # agg nima?
8. # natija Series yoki DataFrame?
9. # reset_index nima uchun?
10. # NaN guruh?
11. # saralash?
12. # nega groupby kuchli?Javoblar
- Guruhlab hisoblash
- Bo'l-hisobla-birlashtir
- Guruhga funksiya (sum/mean)
- size barcha, count NaN emas
- groupby([...]) (kombinatsiya)
- Ko'p darajali indeks
- Ko'p funksiya (ro'yxat/dict)
- Series (reset_index → DataFrame)
- Guruh indeks → ustun
- O'tkaziladi (dropna=False saqlaydi)
- sort_values (reyting)
- Guruh darajasidagi tahlil (taqqoslash)
Vazifa 2: Xatolarni tuzating
1. df.groupby("a")["b"].count() # barcha kerak
2. df.groupby(["a","b"]).sum() # oddiy ustun
3. df.groupby("s").sum() # NaN shahar
4. natija = df.groupby("a")["b"].sum() # DataFrame kerak
5. df.groupby("a")["b"].sum() # reytingJavoblar
1. df.groupby("a").size()
2. ....reset_index()
3. dropna=False
4. ....reset_index()
5. ....sort_values(ascending=False)Vazifa 3: groupby
Modellang:
- Bo'l
- Hisobla
- Birlashtir
- Guruh
Vazifa 4: Agregatsiya
Modellang:
- sum
- mean
- count
- size
Vazifa 5: Ko'p ustun
Modellang:
- Ro'yxat
- Kombinatsiya
- MultiIndex
- reset_index
Vazifa 6: agg
Modellang:
- Ro'yxat
- Dict
- Ko'p funksiya
- Nomlangan
Vazifa 7: O'ylash
groupby "split-apply-combine" (bo'l-hisobla-birlashtir) naqshiga asoslanadi. Nima uchun bu uch bosqichli fikrlash Data Science'da shunchalik kuchli va universal (SQL GROUP BY, Excel pivot, MapReduce — hammasi shu naqsh), va nega u "har guruh uchun alohida hisoblash"ni sikl yozmasdan qiladi?
Javob
Qisqa javob: "Split-apply-combine" (bo'l-hisobla-birlashtir) kuchli va universal, chunki: (1) tabiiy fikrlash — inson guruh bo'yicha o'ylaydi ("har shahar qancha sotdi" — tabiiy savol); split-apply-combine bu savolni to'g'ridan ifodalaydi (bo'l — shaharlar; hisobla — savdo; birlashtir — jadval); (2) umumiy naqsh — ko'p vazifa shu shakl (har guruh statistikasi — savdo, foydalanuvchi, vaqt); bir naqsh ko'p holatga (universal); (3) ajratilgan bosqichlar — bo'l (guruhlash mantiqi), hisobla (funksiya), birlashtir (yig'ish) — mustaqil (har birini alohida o'ylash — sodda; funksiya o'zgaradi — sum/mean/count); (4) ekotizim — SQL (GROUP BY), Excel (pivot), Pandas (groupby), MapReduce (katta ma'lumot) — hammasi shu naqsh (bir fikrlash — ko'p vosita); o'rgangan bir marta — hamma joyda. "Nega sikl yozmasdan": (a) deklarativ — split-apply-combine nima kerak (guruh, funksiya — natija), qanday emas (sikl, indeks — mexanika); foydalanuvchi niyat (Pandas mexanikani bajaradi); (b) abstraksiya — "har guruh uchun" yashirin (Pandas guruhlarni topadi, sikl ichida bajaradi — foydalanuvchi ko'rmaydi); sikl qo'lda (guruhlarni top, har biriga funksiya, natija yig' — ko'p kod, xato); (c) vektorlashtirilgan — Pandas ichda tez (C — 2.12; qo'l sikl sekin); (d) o'qilishli — groupby("shahar")["summa"].sum() bir qator (niyat aniq); sikl 10 qator (chalkash). "Nega uch bosqich":
- bo'l (split) — ma'lumotni guruhlarga (mantiqiy bo'linish — shahar, kategoriya);
- hisobla (apply) — har guruhga mustaqil funksiya (sum, mean — o'zgaruvchan);
- birlashtir (combine) — natijalar bir jadvalda (xulosa).
Ajratish moslashuvchan (funksiya o'zgaradi — sum yoki mean; bir naqsh). Saboqlar: split-apply-combine tabiiy (guruh bo'yicha fikrlash); universal (SQL/Excel/Pandas — bir naqsh); deklarativ (nima — sikl emas); ajratilgan bosqich (mustaqil — moslashuvchan). To'g'ri: guruh bo'yicha o'yla (split-apply-combine);
groupby(Pandas — sikl emas). Muvozanat: soddalik (deklarativ — niyat) + kuch (ko'p funksiya, katta ma'lumot) — ikkalasi. Bu Data Science asosiy naqsh (guruh tahlil — hamma joyda; bir marta o'rgan — universal). "Bo'l-hisobla-birlashtir" — fikrlash usuli (nafaqat Pandas — SQL, Excel, katta ma'lumot).
1. Nega naqsh kuchli
- Tabiiy fikrlash (guruh bo'yicha savol)
- Umumiy naqsh (ko'p vazifa — bir shakl)
- Ajratilgan bosqich (mustaqil — moslashuvchan)
- Ekotizim (SQL/Excel/Pandas — bir naqsh)
2. Nega sikl yozmasdan
- Deklarativ (nima — qanday emas)
- Abstraksiya ("har guruh" yashirin)
- Vektorlashtirilgan (tez — C)
- O'qilishli (bir qator — niyat)
3. Uch bosqich
| Bosqich | Ish |
|---|---|
| Bo'l (split) | Guruhlarga (shahar) |
| Hisobla (apply) | Funksiya (sum) |
| Birlashtir (combine) | Jadval (xulosa) |
4. Universal (bir naqsh)
| Vosita | Shakl |
|---|---|
| SQL | GROUP BY |
| Excel | Pivot |
| Pandas | groupby |
| Katta ma'lumot | MapReduce |
5. Saboqlar
- Split-apply-combine tabiiy (guruh fikrlash)
- Universal (SQL/Excel/Pandas)
- Deklarativ (nima — sikl emas)
- Ajratilgan bosqich (moslashuvchan)
6. Xulosa
- Naqsh kuchli (tabiiy, universal)
- Sikl yozmasdan (deklarativ — niyat)
- Uch bosqich (bo'l-hisobla-birlashtir)
- Fikrlash usuli (hamma joyda)
Nimani mustahkamlaydi: 2.1, 2.8-bo'limlar.
Xulosa
Bu darsda groupby'ni o'rgandik.
Eng muhim uch fikr:
groupby va agregatsiya.
groupby— guruhlarga bo'lib hisob:df.groupby("shahar")["summa"].sum()(shahar bo'yicha guruh, summani yig'). G'oya — split-apply-combine (bo'l — guruhlar; hisobla — funksiya; birlashtir — jadval). Agregatsiya —sum/mean/count/max(2.8, lekin guruh bo'yicha),size(barcha — NaN ham),count(NaN emas). Guruh darajasidagi statistika.Ko'p ustun va agg. Ko'p ustun —
df.groupby(["shahar", "jins"])(kombinatsiya — T-M, T-F, ...; MultiIndex — ko'p darajali;reset_indexoddiy).agg— bir nechta funksiya:agg(["sum", "mean", "count"])(ro'yxat — bir ustun),agg({"summa": "sum", "narx": "mean"})(dict — har ustun boshqa); bir amalda to'liq xulosa.Guruh darajasidagi tahlil. Natija bilan ishlash —
groupbynatijasi Series (indeks guruh);sort_values(reyting — eng ko'p),[natija > 100](filtr),reset_index(DataFrame — CSV/grafik). groupby — guruh darajasidagi tahlil (bo'l-hisobla-birlashtir — eng kuchli vosita; Excel pivot, SQL GROUP BY); guruhlarni solishtirish (Toshkent vs Samarqand), naqsh topish. Split-apply-combine universal (SQL/Excel/Pandas — bir naqsh; deklarativ — sikl emas). Tuzoqlar: size/count (NaN), MultiIndex (reset_index), NaN guruh (dropna=False), natija Series, saralanmagan (sort_values).
Keyingi darsda birlashtirish (merge, concat)ni o'rganamiz: ikki DataFrame'ni birlashtirish (SQL JOIN kabi) — turli manbalardagi ma'lumotni bir jadvalga yig'ish.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!