Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Oddiy shart filtri
- 2.2. Ko'p shart (&, |, ~)
- 2.3. isin (ro'yxatda bormi)
- 2.4. between (oraliq)
- 2.5. Matn filtri (.str)
- 2.6. Filtr amaliyoti
- 2.7. Filtr tuzoqlari
- 2.8. Filtrlash — ma'lumotni ajratish
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Oddiy va ko'p shart
- Misol 2 — isin
- Misol 3 — between
- Misol 4 — Matn filtri (.str)
- 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.5-dars: Filtrlash
3-QISM — PANDAS · 5-dars
1. Kirish va motivatsiya
Data Science ishining katta qismi — filtrlash: butun ma'lumotdan kerakli qismini ajratish. "Faqat Toshkentdagi mijozlar", "18 yoshdan katta va 65 yoshdan kichik", "narxi 100 dan yuqori mahsulotlar", "shu 5 ta shahar". NumPy'da boolean indekslashni 2.9-bob, o'tgan darsda .loc bilan shartni ko'rdik; endi Pandas'ning barcha filtrlash usullarini to'liq o'rganamiz: oddiy shart (df[df["yosh"] > 18]), ko'p shart (&, |), isin (ro'yxatda bormi), between (oraliq), matn filtri (.str.contains). Nega muhim? (1) Ma'lumotni ajratish — deyarli har tahlil filtrdan boshlanadi; (2) Tozalash — noto'g'ri/kerakmas qatorlarni olib tashlash (6-qism); (3) Tahlil — guruhlarni solishtirish (Toshkent vs Samarqand). Filtrlash — Data Science'ning eng ko'p bajariladigan amali. Bu dars filtrlashni to'liq o'rgatadi — ma'lumotni ajratish.
Filtrlash — shart bo'yicha qator ajratish: oddiy shart (df[df["yosh"] > 18] — boolean), ko'p shart (& VA, | YOKI, ~ EMAS — qavs bilan), isin (ro'yxatda bor-mi — df[df["shahar"].isin([...])]), between (oraliq — df[df["yosh"].between(18, 65)]), matn filtr (.str.contains — matn ichida), .loc (shart + ustun — 3.4). Foydalanish: ma'lumot ajratish, tozalash, tahlil. Bu 2.9 (NumPy shart), 3.4 (loc) bilan bog'liq. Filtr — shart bo'yicha. isin/between. Ajratish.
Real vaziyat. Data Scientist 10000 mijoz DataFrame'i bilan ishlar edi. Turli filtrlar kerak edi: Toshkent mijozlari — df[df["shahar"] == "Toshkent"]; ishlovchi yosh (18-65) — df[df["yosh"].between(18, 65)]; uch shahar — df[df["shahar"].isin(["Toshkent", "Samarqand", "Buxoro"])]; VIP (yosh > 30 VA xarid > 1000) — df[(df["yosh"] > 30) & (df["xarid"] > 1000)]; ismi "A" bilan — df[df["ism"].str.startswith("A")]. Har filtr ma'lumotni kerakli qismiga kesdi (guruh, tahlil, tozalash). Filtrlash — Data Science eng ko'p amali (deyarli har tahlil filtrdan boshlanadi).
Bu darsda filtrlashni o'rganamiz.
Bu darsda:
- Oddiy shart filtri
- Ko'p shart (&, |, ~)
- isin (ro'yxatda bormi)
- between (oraliq)
- Matn filtri (.str)
- Filtr amaliyoti
- Filtr tuzoqlari
- Amaliy: filtr modeli
ℹ Misollar real pandas bilan (deterministik) ishlaydi.
2. Nazariya — chuqur tushuntirish
2.1. Oddiy shart filtri
Boolean bilan qator ajratish:
import pandas as pd
df = pd.DataFrame({
"ism": ["Ali", "Vali", "Guli"],
"yosh": [25, 35, 28],
})
df["yosh"] > 30 # bool Series [F T F]
df[df["yosh"] > 30] # 30 dan katta QATORLAR (filtr)
df[df["ism"] == "Ali"] # ismi Ali Oddiy shart filtri — boolean bilan qator ajratish: df["yosh"] > 30 (bool Series — 2.5/3.1), df[df["yosh"] > 30] (shart bajargan qatorlar — boolean indeks). Sabab: ma'lumotni shart bo'yicha ajratish (30 dan katta, Toshkentdagi — kerakli qism); bool Series filtr (True qatorlar olinadi). df[shart] — DataFrame (shart bajargan qatorlar). NumPy boolean 2.9-bob bilan bir xil g'oya (bool massiv — filtr). Natija — kichikroq DataFrame (shart bajarganlar). Oddiy shart — df[df["ustun"] > qiymat] (filtr). Boolean. Qator ajratish.
2.2. Ko'p shart (&, |, ~)
Bir nechta shart:
df = pd.DataFrame({"yosh": [25, 35, 28, 42], "xarid": [500, 1500, 800, 2000]})
# & (VA), | (YOKI), ~ (EMAS) — QAVS bilan!
df[(df["yosh"] > 30) & (df["xarid"] > 1000)] # VA
df[(df["yosh"] < 25) | (df["xarid"] > 1800)] # YOKI
df[~(df["yosh"] > 30)] # EMAS
# and/or ISHLAMAYDI (NumPy kabi — 2.9) Ko'p shart (&, |, ~) — bir nechta shart: & (VA — ikki shart ham), | (YOKI — biri), ~ (EMAS); QAVS bilan ((shart1) & (shart2)). Sabab: ko'pincha ko'p shart (VIP — yosh > 30 VA xarid > 1000; oraliq — katta VA kichik); shartlar &/|/~ bilan. MUHIM (NumPy 2.9 kabi): Python and/or ishlamaydi (Series — "truth value ambiguous"); &/|/~ (element-wise); qavs shart (& ustuvorlik — (shart1) & (shart2)). Ko'p shart — &/|/~ (qavs bilan). and/or emas. Qavs.
2.3. isin (ro'yxatda bormi)
Ro'yxatda bor-mi:
df = pd.DataFrame({"shahar": ["Toshkent", "Samarqand", "Xiva", "Buxoro"]})
# isin — qiymat ro'yxatda bormi
shaharlar = ["Toshkent", "Samarqand", "Buxoro"]
df[df["shahar"].isin(shaharlar)] # shu uch shahar
# ~isin — EMAS (ro'yxatda YO'Q)
df[~df["shahar"].isin(shaharlar)] # Xiva isin (ro'yxatda bor-mi) — qiymat ro'yxatda bor-mi tekshiradi: df[df["shahar"].isin(["Toshkent", "Samarqand"])] (shu shaharlar), ~df["shahar"].isin([...]) (ro'yxatda YO'Q). Sabab: ko'pincha ko'p qiymat tekshirish (uch shahar — == "T" | == "S" | == "B" uzun; isin([...]) qisqa); isin ro'yxat bilan (bir amalda — bir nechta qiymat). == (bitta), isin (ro'yxat — ko'p). ~isin (inkor — ro'yxatda yo'q). isin — ro'yxatda bor-mi (.isin([...])). Ko'p qiymat. Qisqa.
2.4. between (oraliq)
Oraliq (min-max):
df = pd.DataFrame({"yosh": [15, 25, 45, 70, 30]})
# between — oraliq (ikkalasi ham kiradi)
df[df["yosh"].between(18, 65)] # 18-65 (ikkalasi kiradi)
# teng: (df["yosh"] >= 18) & (df["yosh"] <= 65) between (oraliq) — min-max oraliq: df[df["yosh"].between(18, 65)] (18-65 orasi — ikkalasi kiradi, inclusive). Sabab: ko'pincha oraliq kerak (ishlovchi yosh 18-65; narx 100-500); between(a, b) qisqa ((x >= a) & (x <= b) o'rniga — o'qilishli). Standart ikki chegara ham kiradi (between(18, 65) — 18 va 65 ham; inclusive= bilan o'zgartirish mumkin). between — >= VA <= (qisqa). between — oraliq (.between(a, b), ikkalasi kiradi). Qisqa. Oraliq.
2.5. Matn filtri (.str)
Matn ustuni bo'yicha:
df = pd.DataFrame({"ism": ["Ali", "Anvar", "Vali", "Guli"]})
df[df["ism"].str.startswith("A")] # "A" bilan boshlanadi
df[df["ism"].str.contains("li")] # "li" bor
df[df["ism"].str.len() > 3] # 3 harfdan uzun
df[df["ism"].str.lower() == "ali"] # kichik harf bilan Matn filtri (.str) — matn ustuni bo'yicha: df["ism"].str.startswith("A") ("A" bilan boshlanadi), .str.contains("li") ("li" bor), .str.len() > 3 (uzunlik), .str.lower() (kichik harf). Sabab: matn ma'lumotni matn bo'yicha filtrlash (ismi "A" bilan; email "@gmail" bor; kod "UZ" bilan); .str matn metodlari (vektorlashtirilgan — har qatorga). .str.contains (ichida bor), .str.startswith/endswith (boshi/oxiri), .str.lower/upper (registr). Matn tozalash (6-qism) uchun ham. Matn filtri — .str.contains/startswith (matn bo'yicha). Vektorlashtirilgan. Matn.
2.6. Filtr amaliyoti
Filtr amaliyoti: oddiy shart (df[df["ustun"] > qiymat]); ko'p shart (&/|/~ — qavs); isin (ro'yxat — ko'p qiymat); between (oraliq — min-max); .str (matn — contains/startswith); .loc[shart, ustun] (shart + ustun — 3.4); ~ (inkor — EMAS); natija (kichikroq DataFrame — shart bajarganlar). Tuzoqlar: and/or (Series — &/|), qavs unutish (ustuvorlik), indeks tarqoq (filtrdan keyin — reset_index), SettingWithCopy (.loc bilan o'zgartir), NaN (shart NaN'ni o'tkazib yuboradi). Amaliyot — shart, ko'p shart, isin, between, str. Ajratish. Boolean.
2.7. Filtr tuzoqlari
Filtr asosiy tuzoqlari: and/or (Series bilan and/or — "truth value ambiguous" xato; &/|/~ — 2.9); qavs unutish (df[df.a > 1 & df.b > 2] — & ustuvorlik, xato; (df.a > 1) & (df.b > 2)); indeks tarqoq (filtrdan keyin indeks saqlanadi (0, 2, 5 — asl); .iloc[0] (birinchi — pozitsiya), .loc[0] (nom — bor-yo'q); reset_index(drop=True) kerak bo'lsa — 3.4); SettingWithCopy (filtr natijasini o'zgartirish — df2 = df[shart].copy() yoki .loc; 2.13/3.4); NaN filtr (df[df.a > 0] — NaN qatorlar o'tkazib yuboriladi (nan > 0 False — 2.9); NaN kerak bo'lsa isna); isin tur (isin([1, 2]) — tur mos bo'lishi kerak; "1" (matn) vs 1 (son) — mos emas); matn NaN (.str.contains — NaN'da xato; na=False bilan). Sabab: filtr shart/indeks/NaN nozik (and/or, qavs, indeks, NaN — jim xato yoki noto'g'ri). Yechim: &/|, qavs, reset_index, .copy(). Tuzoqlar — and/or, qavs, indeks, NaN.
2.8. Filtrlash — ma'lumotni ajratish
Filtrlash asosiy g'oyasi — ma'lumotni ajratish: butun ma'lumotdan kerakli qismini olish (Toshkent mijozlari, 18-65 yosh, VIP — shart bo'yicha); Data Science'ning eng ko'p amali (deyarli har tahlil filtrdan boshlanadi). Usullar: oddiy shart (df[df["ustun"] > qiymat] — boolean), ko'p shart (&/|/~ — qavs; and/or emas), isin (ro'yxat — ko'p qiymat), between (oraliq — min-max), .str (matn — contains/startswith). Bu 2.9 (NumPy boolean) davomi (bir xil g'oya — bool Series filtr) va 3.4 (.loc shart + ustun) bilan. Data Science'da filtrlash doim (tahlil — guruh ajratish, solishtirish; tozalash — noto'g'ri qatorlar olib tashlash 6-qism; ML — namuna tanlash). Filtrlash — ma'lumotni ajratish (shart bo'yicha). Eng ko'p amal. Kerakli qism.
3. Tez ma'lumotnoma
import pandas as pd
# ODDIY SHART:
df[df["yosh"] > 30] # 30 dan katta
df[df["ism"] == "Ali"] # teng
# KO'P SHART (&, |, ~ — QAVS!):
df[(df["yosh"] > 30) & (df["xarid"] > 1000)] # VA
df[(df["yosh"] < 25) | (df["xarid"] > 1800)] # YOKI
df[~(df["yosh"] > 30)] # EMAS
# and/or ISHLAMAYDI (2.9)
# isin (ro'yxatda bormi):
df[df["shahar"].isin(["Toshkent", "Buxoro"])]
df[~df["shahar"].isin([...])] # EMAS
# between (oraliq — ikkalasi kiradi):
df[df["yosh"].between(18, 65)]
# MATN (.str):
df[df["ism"].str.contains("li")]
df[df["ism"].str.startswith("A")]
QOIDA: &/|/~ (and/or emas) · qavs · isin ro'yxat · between oraliqFiltr xulosasi
Filtrlash — ma'lumotni ajratish (shart bo'yicha, eng ko'p amal)
Oddiy — df[df["ustun"] > qiymat] (boolean)
Ko'p shart — &, |, ~ (qavs bilan, and/or emas)
isin — ro'yxatda bormi · between — oraliq (ikkalasi kiradi)
.str — matn filtri (contains, startswith)4. Batafsil misollar
Misollar real pandas bilan (deterministik) ishlaydi.
Misol 1 — Oddiy va ko'p shart
"""Oddiy va ko'p shart filtri (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"ism": ["Ali", "Vali", "Guli", "Hasan"],
"yosh": [25, 35, 28, 42],
"xarid": [500, 1500, 800, 2000],
})
print("=== 1. Oddiy shart ===")
print(f" 30 dan katta: {list(df[df['yosh'] > 30]['ism'])}")
print("\n=== 2. VA (&) ===")
vip = df[(df["yosh"] > 30) & (df["xarid"] > 1000)]
print(f" VIP (yosh>30 & xarid>1000): {list(vip['ism'])}")
print("\n=== 3. YOKI (|) ===")
maxsus = df[(df["yosh"] < 27) | (df["xarid"] > 1800)]
print(f" yosh<27 | xarid>1800: {list(maxsus['ism'])}")
print("\n=== 4. EMAS (~) ===")
print(f" 30 dan katta EMAS: {list(df[~(df['yosh'] > 30)]['ism'])}")
print(" ⭐ Filtr — shart bo'yicha ajratish (&, |, ~ qavs bilan)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Oddiy shart ===
30 dan katta: ['Vali', 'Hasan']
=== 2. VA (&) ===
VIP (yosh>30 & xarid>1000): ['Vali', 'Hasan']
=== 3. YOKI (|) ===
yosh<27 | xarid>1800: ['Ali', 'Hasan']
=== 4. EMAS (~) ===
30 dan katta EMAS: ['Ali', 'Guli']
⭐ Filtr — shart bo'yicha ajratish (&, |, ~ qavs bilan)Nima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — isin
"""isin: ro'yxatda bormi (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"ism": ["Ali", "Vali", "Guli", "Hasan"],
"shahar": ["Toshkent", "Samarqand", "Xiva", "Buxoro"],
})
print("=== 1. isin (uch shahar) ===")
shaharlar = ["Toshkent", "Samarqand", "Buxoro"]
tanlangan = df[df["shahar"].isin(shaharlar)]
print(f" ismlar: {list(tanlangan['ism'])}")
print("\n=== 2. ~isin (EMAS) ===")
print(f" ro'yxatda YO'Q: {list(df[~df['shahar'].isin(shaharlar)]['ism'])}")
print("\n=== 3. isin vs == ===")
print(f" isin soni: {df['shahar'].isin(shaharlar).sum()}")
print("\n=== 4. Tushuntirish ===")
print(" isin — ko'p qiymat (ro'yxat), == bitta")
print(" ⭐ isin — ro'yxatda bormi (qisqa)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. isin (uch shahar) ===
ismlar: ['Ali', 'Vali', 'Hasan']
=== 2. ~isin (EMAS) ===
ro'yxatda YO'Q: ['Guli']
=== 3. isin vs == ===
isin soni: 3
=== 4. Tushuntirish ===
isin — ko'p qiymat (ro'yxat), == bitta
⭐ isin — ro'yxatda bormi (qisqa)Nima ko'rsatdi: 2.3-bo'lim.
Misol 3 — between
"""between: oraliq (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"ism": ["Ali", "Vali", "Guli", "Hasan", "Nodir"],
"yosh": [15, 25, 45, 70, 30],
})
print("=== 1. between (18-65) ===")
ishlovchi = df[df["yosh"].between(18, 65)]
print(f" ishlovchi yosh: {list(ishlovchi['ism'])}")
print("\n=== 2. Chegaralar kiradi ===")
aniq = df[df["yosh"].between(25, 45)]
print(f" 25-45 (ikkalasi kiradi): {list(aniq['yosh'])}")
print("\n=== 3. Teng (& bilan) ===")
teng = df[(df["yosh"] >= 18) & (df["yosh"] <= 65)]
print(f" & bilan bir xil: {len(teng) == len(ishlovchi)}")
print("\n=== 4. Tushuntirish ===")
print(" between — >= VA <= (qisqa, ikkalasi kiradi)")
print(" ⭐ between — oraliq (min-max)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. between (18-65) ===
ishlovchi yosh: ['Vali', 'Guli', 'Nodir']
=== 2. Chegaralar kiradi ===
25-45 (ikkalasi kiradi): [25, 45, 30]
=== 3. Teng (& bilan) ===
& bilan bir xil: True
=== 4. Tushuntirish ===
between — >= VA <= (qisqa, ikkalasi kiradi)
⭐ between — oraliq (min-max)Nima ko'rsatdi: 2.4-bo'lim.
Misol 4 — Matn filtri (.str)
"""Matn filtri: .str (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"ism": ["Ali", "Anvar", "Vali", "Guli"],
"email": ["ali@mail.uz", "anvar@gmail.com", "vali@mail.uz", "guli@gmail.com"],
})
print("=== 1. startswith ===")
print(f" 'A' bilan: {list(df[df['ism'].str.startswith('A')]['ism'])}")
print("\n=== 2. contains ===")
gmail = df[df["email"].str.contains("gmail")]
print(f" gmail: {list(gmail['ism'])}")
print("\n=== 3. len ===")
print(f" 3 harfdan uzun: {list(df[df['ism'].str.len() > 3]['ism'])}")
print("\n=== 4. lower ===")
print(f" 'ali' (kichik): {list(df[df['ism'].str.lower() == 'ali']['ism'])}")
print(" ⭐ Matn filtri — .str (contains, startswith)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. startswith ===
'A' bilan: ['Ali', 'Anvar']
=== 2. contains ===
gmail: ['Anvar', 'Guli']
=== 3. len ===
3 harfdan uzun: ['Anvar', 'Vali', 'Guli']
=== 4. lower ===
'ali' (kichik): ['Ali']
⭐ Matn filtri — .str (contains, startswith)Nima ko'rsatdi: 2.5-bo'lim.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "and/or ishlaydi" | &, |
| "qavs keraksiz" | Qavs shart (ustuvorlik) |
| "== ro'yxat uchun" | isin (ko'p qiymat) |
| "between oxiri kirmaydi" | Ikkalasi kiradi |
| "matn filtri qiyin" | .str (contains, startswith) |
| "filtr indeksni tiklaydi" | Indeks saqlanadi (reset kerak) |
| "NaN filtrga kiradi" | O'tkazib yuboriladi (nan>0 False) |
| "filtr asl o'zgartiradi" | Yangi DataFrame |
6. Keng tarqalgan xatolar va yechimlari
1. and/or
df[(df.a > 1) and (df.b > 2)] # xato (ambiguous) # ⚠️
df[(df.a > 1) & (df.b > 2)] # & # ✅2. Qavs unutish
df[df.a > 1 & df.b > 2] # xato (& ustuvorlik) # ⚠️
df[(df.a > 1) & (df.b > 2)] # qavs # ✅3. == o'rniga isin
df[(df.shahar=="T") | (df.shahar=="S") | (df.shahar=="B")] # uzun # ⚠️
df[df.shahar.isin(["T", "S", "B"])] # qisqa # ✅4. Indeks tarqoq
df2 = df[df.yosh > 25]; df2.loc[0] # indeks 0 yo'q bo'lishi mumkin # ⚠️
df2 = df[df.yosh > 25].reset_index(drop=True) # tiklash # ✅5. Matn NaN
df[df.ism.str.contains("A")] # NaN bo'lsa xato # ⚠️
df[df.ism.str.contains("A", na=False)] # NaN → False # ✅6. isin tur
df[df.kod.isin(["1", "2"])] # kod son bo'lsa mos emas # ⚠️
df[df.kod.isin([1, 2])] # tur mos # ✅7. Filtr natijasini o'zgartirish
df[df.yosh > 25]["kat"] = "X" # SettingWithCopy # ⚠️
df.loc[df.yosh > 25, "kat"] = "X" # .loc # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 2.9-dars (o'tilgan): NumPy boolean indeks
- 3.4-dars (o'tilgan): .loc (shart + ustun)
- 3.8-dars: Guruhlash (filtr + guruh)
- 6-qism: Tozalash (noto'g'ri qatorlarni filtrlash)
- 4-qism: Statistika (guruhlarni solishtirish)
8. Eng yaxshi amaliyotlar
df[shart]— oddiy filtr (boolean).&/|/~— qavs bilan (and/or emas).isin— ko'p qiymat (ro'yxat).between— oraliq (qisqa)..str— matn filtri (contains).reset_index— filtrdan keyin (kerak bo'lsa)..locbilan o'zgartir (SettingWithCopy).Filtrlash — ma'lumotni ajratish.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # oddiy filtr qanday?
2. # df[shart] nima qaytaradi?
3. # ko'p shart operatorlari?
4. # and/or ishlaydimi?
5. # qavs kerakmi?
6. # isin nima?
7. # between nima?
8. # between oxiri kiradimi?
9. # matn filtri?
10. # filtr indeksni tiklaydimi?
11. # NaN filtrga kiradimi?
12. # nega filtr muhim?Javoblar
- df[df["ustun"] > qiymat]
- Shart bajargan qatorlar (DataFrame)
- &, |, ~
- Yo'q (&, |, ~)
- Ha (ustuvorlik)
- Ro'yxatda bormi
- Oraliq (min-max)
- Ha (ikkalasi kiradi)
- .str (contains, startswith)
- Yo'q (saqlanadi, reset kerak)
- Yo'q (o'tkazib yuboriladi)
- Ma'lumotni ajratish (eng ko'p amal)
Vazifa 2: Xatolarni tuzating
1. df[(df.a>1) and (df.b>2)] # and
2. df[df.a>1 & df.b>2] # qavs
3. df[(df.s=="T")|(df.s=="S")] # ko'p qiymat
4. df2 = df[df.yosh>25]; df2.loc[0] # indeks
5. df[df.yosh>25]["kat"] = "X" # o'zgartirishJavoblar
1. df[(df.a>1) & (df.b>2)]
2. df[(df.a>1) & (df.b>2)]
3. df[df.s.isin(["T", "S"])]
4. df.reset_index(drop=True)
5. df.loc[df.yosh>25, "kat"] = "X"Vazifa 3: Oddiy filtr
Modellang:
- Shart
- Boolean
- Qatorlar
- Ajratish
Vazifa 4: Ko'p shart
Modellang:
&|~- Qavs
Vazifa 5: isin/between
Modellang:
- isin
- Ro'yxat
- between
- Oraliq
Vazifa 6: Matn
Modellang:
- contains
- startswith
- len
- lower
Vazifa 7: O'ylash
Filtrlash Data Science'ning eng ko'p bajariladigan amallaridan biri, va Pandas uning uchun ko'p usul beradi (oddiy shart, isin, between, .str). Nima uchun bir xil natijaga ko'p yo'l bo'lishi (masalan between(18, 65) va (x>=18) & (x<=65)) foydali, va qanday qilib "o'qilishli kod" (isin, between) shunchaki "ishlaydigan kod" (uzun | zanjiri) dan muhimroq bo'lishi mumkin?
Javob
Qisqa javob: Filtrlash uchun ko'p usul (between va (x>=18)&(x<=65) bir natija) foydali, va o'qilishli kod (isin/between) ishlaydigan koddan (uzun |) muhimroq, chunki: (1) o'qilishlik — between(18, 65) aniq (o'qigan odam darrov tushunadi — oraliq); (x>=18) & (x<=65) ko'proq o'qish (chegaralar, operatorlar — sekinroq tushuniladi); isin([...]) maqsad (ro'yxatda — aniq); uzun | niyyat yashirin (nima tekshiriladi — o'qish kerak); (2) kod ko'proq o'qiladi — kod bir marta yoziladi, ko'p marta o'qiladi (o'zi keyin, jamoa, kelajakda); o'qilishli kod vaqt tejaydi (tez tushunish — debug, o'zgartirish); (3) xato kam — qisqa/aniq kod kam xato (uzun | — bir shart unutish, qavs xato; isin — bir amal, xato kam); (4) niyat — between/isin niyatni ko'rsatadi (oraliq, ro'yxat — nima qilinyapti); uzun | mexanikani (qanday — niyat noaniq). "Nega o'qilishlik > ishlaydigan": (a) qo'llab-quvvatlash — kod o'zgaradi (yangi shart, tuzatish — 6 oy keyin); o'qilishli oson (tushunib o'zgartirish), uzun/chalkash qiyin (qayta o'qish, xato); (b) jamoa — boshqalar o'qiydi (kod umumiy — jamoa tushunishi kerak; o'qilishli — hamkorlik); (c) o'z-o'zini hujjatlash — between/isin o'zi tushuntiradi (izoh kerak emas — nom aniq); uzun kod — izoh kerak (yoki chalkash); (d) kam xato — sodda kod (kam qism — kam xato joyi). "Nega ko'p yo'l foydali": turli kontekst (ba'zan between aniq — oraliq; ba'zan & moslashuvchan — murakkab shart; isin — ro'yxat); dasturchi eng aniqini tanlaydi (kontekstga — o'qilishli); ko'p yo'l moslashuvchanlik (har holatga mos). Saboqlar: o'qilishlik (aniq — tez tushunish); kod ko'p o'qiladi (bir marta yoz — o'qilishli tejaydi); niyat (between/isin — nima; uzun | — qanday); xato kam (sodda — kam xato). To'g'ri: o'qilishli usul (between/isin — aniq); ishlaydigan yetarli emas (o'qilishli ham). Muvozanat: ishlash (natija) + o'qilishlik (aniq) — ikkalasi, lekin o'qilishlik muhim (kod ko'p o'qiladi). Bu dasturlash donoligi ("kod odam uchun yoziladi, mashina uchun emas" — o'qilishlik; Python falsafa — "readability counts"). O'qilishli kod — professional (ishlaydigan — boshlanish; o'qilishli — usta).
1. Nega o'qilishlik foydali
- Aniq (
between— oraliq, tez tushunish) - Kod ko'p o'qiladi (bir marta yoz — o'qilishli tejaydi)
- Xato kam (sodda — kam xato joyi)
- Niyat (nima qilinyapti — aniq)
2. Nega o'qilishlik > ishlaydigan
- Qo'llab-quvvatlash (o'zgartirish oson)
- Jamoa (boshqalar o'qiydi)
- O'z-o'zini hujjatlash (izoh kerak emas)
- Kam xato (sodda)
3. Nega ko'p yo'l foydali
- Turli kontekst (
betweenoraliq,&murakkab,isinro'yxat) - Eng aniqini tanlash (o'qilishli)
- Moslashuvchanlik (har holatga)
4. O'qilishli vs uzun
| O'qilishli | Uzun/chalkash |
|---|---|
between(18, 65) |
(x>=18)&(x<=65) |
isin([...]) |
Uzun ` |
| Niyat aniq | Mexanika |
5. Saboqlar
- O'qilishlik (aniq — tez tushunish)
- Kod ko'p o'qiladi (bir marta yoz)
- Niyat (
between/isin— nima) - Xato kam (sodda)
6. Xulosa
- O'qilishlik foydali (aniq, kam xato)
- Kod ko'p o'qiladi (o'qilishli tejaydi)
- Ko'p yo'l — kontekst (eng aniqini tanla)
- O'qilishli kod — professional (Python falsafa)
Nimani mustahkamlaydi: 2.6, 2.7-bo'limlar.
Xulosa
Bu darsda filtrlashni o'rgandik.
Eng muhim uch fikr:
Oddiy va ko'p shart. Oddiy shart —
df[df["yosh"] > 30](boolean — shart bajargan qatorlar; NumPy 2.9 bilan bir xil g'oya). Ko'p shart —&(VA),|(YOKI),~(EMAS); qavs bilan ((shart1) & (shart2)); Pythonand/orishlamaydi (Series — "truth value ambiguous";&/|/~);&ustuvorlik (qavs shart).isin, between, matn.
isin— qiymat ro'yxatda bor-mi (df[df["shahar"].isin([...])]— ko'p qiymat,==dan qisqa;~isininkor).between— oraliq (df[df["yosh"].between(18, 65)]— min-max, ikkalasi kiradi;>=VA<=qisqa). Matn filtri (.str) —startswith/contains/len/lower(matn bo'yicha — vektorlashtirilgan).Ma'lumotni ajratish. Filtrlash — ma'lumotni ajratish (butun ma'lumotdan kerakli qism — shart bo'yicha); Data Science'ning eng ko'p amali (deyarli har tahlil filtrdan). O'qilishli usul (
isin/between) ishlaydigan koddan muhimroq (kod ko'p o'qiladi — Python "readability counts"). Data Science'da doim (tahlil — guruh; tozalash — noto'g'ri qatorlar 6-qism; ML — namuna). Tuzoqlar: and/or (&/|), qavs unutish, indeks tarqoq (reset_index), NaN (o'tkazib yuboriladi), SettingWithCopy (.loc).
Keyingi darsda ustunlar bilan ishlashni o'rganamiz: ustun qo'shish, o'chirish, nom o'zgartirish, tur o'zgartirish, apply — ustunlarni boshqarish.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!