Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. read_csv (CSV o'qish)
- 2.2. to_csv (CSV yozish)
- 2.3. O'qish sozlamalari (sep, header)
- 2.4. Sana o'qish (parse_dates)
- 2.5. Bo'sh qiymatlar (NaN)
- 2.6. JSON o'qish/yozish
- 2.7. Excel (conceptual)
- 2.8. Ma'lumot oqimi (ETL)
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — CSV o'qish va yozish
- Misol 2 — Sozlamalar (sep, parse_dates, na_values)
- Misol 3 — JSON va bo'sh qiymatlar
- Misol 4 — Amaliy: ma'lumot quvuri (o'qi → tozala → yoz)
- 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.6-dars: pandas — o'qish va yozish
24-QISM — MA'LUMOT TAHLILI · 6-dars
1. Kirish va motivatsiya
24.5 da DataFrame'ni qo'lda (dict bilan) yaratdik. Lekin real ma'lumot boshqa joyda: CSV fayllar (eksport, hisobot), Excel varaqlar (biznes), JSON (API, 19-qism), baza (23-qism). Tahlilning birinchi qadami — bu manbalardan ma'lumotni o'qish (DataFrame'ga yuklash), oxirgi qadam — natijani yozish (saqlash, ulashish).
pandas har xil formatdan bir qatorda o'qiydi va yozadi: pd.read_csv("fayl.csv"), df.to_excel("hisobot.xlsx"). CSV — eng keng tarqalgan (oddiy matn, vergul bilan); Excel — biznes; JSON — API/veb; SQL — baza (23-qism). O'qishda sozlamalar (ajratgich, sarlavha, sana, bo'sh qiymat) muhim — real ma'lumot ko'pincha "iflos" (noto'g'ri format, bo'sh qiymatlar). Ma'lumot o'qish/yozish — tahlilning kirish va chiqish nuqtasi.
Real vaziyat. Bir tahlil har oy 10 ta CSV faylni (turli bo'lim) birlashtirib hisobot qilardi — qo'lda Excel'da ochib ko'chirish, soatlar. pandas bilan: pd.concat([pd.read_csv(f) for f in fayllar]) — barcha fayl bir DataFrame'ga, keyin df.to_excel("hisobot.xlsx"). Bir necha qatorda avtomatlashtirildi. Ma'lumot o'qish/yozish — avtomatlashtirishning asosi.
Bu darsda pandas o'qish/yozish — CSV, JSON, Excel'ni o'rganamiz.
Bu darsda:
-
read_csv(CSV o'qish) -
to_csv(CSV yozish) - O'qish sozlamalari (sep, header, dtype)
- Sana o'qish (
parse_dates) - Bo'sh qiymatlar (NaN)
- JSON o'qish/yozish
- Excel (conceptual)
- Amaliy: ma'lumot quvuri
ℹ Misollarda pandas va
StringIO(fayl o'rniga matn — deterministik) bilan sinaladi.
2. Nazariya — chuqur tushuntirish
2.1. read_csv (CSV o'qish)
CSV — eng keng tarqalgan format:
import pandas as pd
df = pd.read_csv("mahsulot.csv")
# CSV:
# nom,narx,til
# Python,100,uz
# Go,120,en read_csv(fayl) — CSV faylni DataFrame'ga o'qiydi. CSV (Comma-Separated Values) — oddiy matn: birinchi qator — sarlavha (ustun nomlari), keyingilar — qatorlar (vergul bilan ajratilgan). Eng keng tarqalgan ma'lumot formati (Excel, baza eksporti). pandas turlarni avtomatik aniqlaydi (son, matn). Tahlilning eng ko'p ishlatiladigan kirish nuqtasi.
2.2. to_csv (CSV yozish)
DataFrame'ni CSV'ga saqlash:
df.to_csv("natija.csv", index=False)
# index=False — indeks ustunini yozmaydi
df.to_csv("natija.csv", index=False, encoding="utf-8") to_csv(fayl) — DataFrame'ni CSV faylga yozadi. index=False — muhim: indeks ustunini (0, 1, 2) yozmaydi (odatda kerak emas). encoding="utf-8" — o'zbekcha/maxsus belgilar uchun. Natijani saqlash, boshqa dasturga (Excel) berish, ulashish uchun. to_csv() (fayl nomisiz) — matn qaytaradi (sinash, API).
2.3. O'qish sozlamalari (sep, header)
Real CSV har xil bo'ladi:
pd.read_csv("f.csv", sep=";") # nuqta-vergul ajratgich
pd.read_csv("f.tsv", sep="\t") # tab (TSV)
pd.read_csv("f.csv", header=None) # sarlavha yo'q
pd.read_csv("f.csv", names=["a", "b"]) # ustun nomlari
pd.read_csv("f.csv", usecols=["nom"]) # faqat ba'zi ustun
pd.read_csv("f.csv", nrows=100) # faqat 100 qator O'qish sozlamalari: sep (ajratgich — , default, ; yoki \t), header=None (sarlavha yo'q), names (ustun nomlarini berish), usecols (faqat ba'zi ustunlar), nrows (faqat N qator — katta fayl sinash). Real CSV har xil format — sozlamalar bilan moslash. Xato o'qish — noto'g'ri tahlil.
2.4. Sana o'qish (parse_dates)
Sana matnni sana turiga:
pd.read_csv("f.csv", parse_dates=["sana"])
# "2024-01-15" (matn) → sana obyekti (datetime)
df["sana"].dt.year # sanadan yil
df["sana"].dt.month # oy parse_dates=["ustun"] — matn sanani ("2024-01-15") haqiqiy sana turiga (datetime) o'giradi. Bu muhim: sana turi bilan .dt.year (yil), .dt.month (oy), sana bo'yicha filtr/saralash mumkin (24.11 vaqt qatorlari). Aks holda sana — oddiy matn (hisoblab bo'lmaydi). Sana ma'lumoti uchun parse_dates doim kerak.
2.5. Bo'sh qiymatlar (NaN)
Real ma'lumotda bo'sh joylar:
df.isna() # qayerda bo'sh (bool)
df.isna().sum() # har ustunda bo'sh soni
df.dropna() # bo'sh qatorlarni o'chir
df.fillna(0) # bo'shni 0 bilan to'ldir
pd.read_csv("f.csv", na_values=["N/A", "-"]) # bo'sh belgilari Bo'sh qiymatlar (NaN — Not a Number): real ma'lumot ko'pincha to'liq emas. .isna() (qayerda bo'sh), .isna().sum() (har ustun bo'sh soni — birinchi tekshir), .dropna() (bo'sh qatorlarni o'chir), .fillna(qiymat) (to'ldir). na_values — o'qishda bo'sh belgilarini ko'rsatish ("N/A", "-"). Bo'sh qiymatlar — 24.8 (tozalash) da chuqurroq.
2.6. JSON o'qish/yozish
JSON — API va veb formati (19-qism):
df = pd.read_json("data.json")
df.to_json("out.json", orient="records")
# orient="records": [{"nom": "Python", ...}, {...}]
df.to_dict(orient="records") # Python ro'yxatiga JSON (19-qism) — API/veb ma'lumot formati: pd.read_json (o'qi), df.to_json (yoz). orient="records" — eng keng tarqalgan: obyektlar ro'yxati ([{...}, {...}] — har qator obyekt). df.to_dict(orient="records") — Python ro'yxatiga (dict'lar). JSON — API bilan ma'lumot almashishda (20-qism FastAPI) muhim.
2.7. Excel (conceptual)
Excel — biznes formati:
df = pd.read_excel("hisobot.xlsx") # o'qi (openpyxl kerak)
df = pd.read_excel("f.xlsx", sheet_name="Sotuv") # varaq
df.to_excel("natija.xlsx", index=False) # yoz
# bir necha varaq:
with pd.ExcelWriter("out.xlsx") as w:
df1.to_excel(w, sheet_name="Q1")
df2.to_excel(w, sheet_name="Q2") Excel: pd.read_excel(fayl) (o'qi — openpyxl kutubxonasi kerak), sheet_name (varaq tanlash), to_excel (yoz), ExcelWriter (bir necha varaq). Excel — biznesda keng tarqalgan (hisobot, moliya). pandas Excel'ni to'g'ridan o'qiydi/yozadi (qo'lda ochmasdan). Formatlash (rang, formula) cheklangan — hisobot uchun yetarli.
2.8. Ma'lumot oqimi (ETL)
Ma'lumot o'qish/yozish — ETL (Extract-Transform-Load) asosi: Extract (o'qi — CSV/Excel/API/baza), Transform (tozala, o'zgartir — 24.7–24.10), Load (yoz — CSV/baza/hisobot). pandas har uchtasini qo'llaydi. Real ish: manbalar har xil (CSV, Excel, API), format iflos (bo'sh, noto'g'ri) — pandas ularni bir DataFrame'ga birlashtirib tozalaydi. "O'qi → tozala → yoz" — ma'lumot muhandisligining asosiy oqimi (26-qism avtomatlashtirish).
3. Tez ma'lumotnoma
import pandas as pd
# CSV:
df = pd.read_csv("f.csv")
df = pd.read_csv("f.csv", sep=";", parse_dates=["sana"], na_values=["N/A"])
df.to_csv("out.csv", index=False)
# JSON:
df = pd.read_json("f.json")
df.to_json("out.json", orient="records")
df.to_dict(orient="records")
# Excel (openpyxl):
df = pd.read_excel("f.xlsx", sheet_name="Sotuv")
df.to_excel("out.xlsx", index=False)
# bo'sh qiymatlar:
df.isna().sum() # har ustunda bo'sh soni
df.dropna(); df.fillna(0)
# StringIO (sinash uchun):
from io import StringIO
pd.read_csv(StringIO("a,b\n1,2\n"))O'qish/yozish xulosasi
read_csv/to_csv (index=False) · read_json/to_json (orient=records)
read_excel/to_excel (openpyxl) · parse_dates: sana · na_values: bo'sh
ETL: o'qi → tozala → yoz4. Batafsil misollar
Misollarda pandas va
StringIO(fayl o'rniga matn — deterministik sinash) bilan sinaladi. Real ilovada fayl yo'li ("f.csv") beriladi.
Misol 1 — CSV o'qish va yozish
"""read_csv (StringIO'dan); to_csv (index=False — indekssiz); ustun turlar avtomatik."""
import warnings
warnings.filterwarnings("ignore")
from io import StringIO
import pandas as pd
def main() -> None:
csv_matn = "nom,narx,til\nPython,100,uz\nGo,120,en\nRust,150,en\n"
print("=== 1. read_csv (o'qish) ===")
df = pd.read_csv(StringIO(csv_matn))
print(df.to_string(index=False))
print("\n=== 2. Turlar avtomatik aniqlandi ===")
print(f" dtypes: {df.dtypes.astype(str).to_dict()}")
print("\n=== 3. to_csv (yozish, index=False) ===")
natija = df.to_csv(index=False)
print(natija.strip())
print("\n=== 4. Statistika (o'qilgan ma'lumot) ===")
print(f" o'rtacha narx: {round(df['narx'].mean(), 1)}")
print(f" qatorlar: {len(df)}")
print(" ⭐ read_csv/to_csv — CSV o'qish va yozish")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. read_csv (o'qish) ===
nom narx til
Python 100 uz
Go 120 en
Rust 150 en
=== 2. Turlar avtomatik aniqlandi ===
dtypes: {'nom': 'str', 'narx': 'int64', 'til': 'str'}
=== 3. to_csv (yozish, index=False) ===
nom,narx,til
Python,100,uz
Go,120,en
Rust,150,en
=== 4. Statistika (o'qilgan ma'lumot) ===
o'rtacha narx: 123.3
qatorlar: 3
⭐ read_csv/to_csv — CSV o'qish va yozishNima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Sozlamalar (sep, parse_dates, na_values)
"""o'qish sozlamalari: sep (ajratgich), parse_dates (sana turi), na_values (bo'sh belgi)."""
import warnings
warnings.filterwarnings("ignore")
from io import StringIO
import pandas as pd
def main() -> None:
print("=== 1. sep=';' (nuqta-vergul) ===")
matn = "nom;narx\nPython;100\nGo;120\n"
df = pd.read_csv(StringIO(matn), sep=";")
print(f" ustunlar: {list(df.columns)}, narxlar: {df['narx'].tolist()}")
print("\n=== 2. parse_dates (sana turi) ===")
matn2 = "sana,summa\n2024-01-01,100\n2024-02-01,200\n2024-03-01,150\n"
df2 = pd.read_csv(StringIO(matn2), parse_dates=["sana"])
print(f" sana turi: {df2['sana'].dtype}")
print(f" yillar: {df2['sana'].dt.year.tolist()}, oylar: {df2['sana'].dt.month.tolist()}")
print("\n=== 3. na_values (bo'sh belgi) ===")
matn3 = "nom,narx\nPython,100\nGo,N/A\nRust,150\n"
df3 = pd.read_csv(StringIO(matn3), na_values=["N/A"])
print(f" bo'sh soni: {df3['narx'].isna().sum()}")
print("\n=== 4. usecols (faqat ba'zi ustun) ===")
matn4 = "a,b,c\n1,2,3\n4,5,6\n"
df4 = pd.read_csv(StringIO(matn4), usecols=["a", "c"])
print(f" tanlangan ustunlar: {list(df4.columns)}")
print(" ⭐ sozlamalar — real CSV formatiga moslash")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. sep=';' (nuqta-vergul) ===
ustunlar: ['nom', 'narx'], narxlar: [100, 120]
=== 2. parse_dates (sana turi) ===
sana turi: datetime64[us]
yillar: [2024, 2024, 2024], oylar: [1, 2, 3]
=== 3. na_values (bo'sh belgi) ===
bo'sh soni: 1
=== 4. usecols (faqat ba'zi ustun) ===
tanlangan ustunlar: ['a', 'c']
⭐ sozlamalar — real CSV formatiga moslashNima ko'rsatdi: 2.3, 2.4, 2.5-bo'limlar.
Misol 3 — JSON va bo'sh qiymatlar
"""JSON o'qish/yozish (orient=records); isna/fillna/dropna (bo'sh qiymatlar)."""
import warnings
warnings.filterwarnings("ignore")
from io import StringIO
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"nom": ["Python", "Go", "Rust"],
"narx": [100, 120, 150],
})
print("=== 1. to_json (orient=records) ===")
j = df.to_json(orient="records")
print(f" {j}")
print("\n=== 2. read_json (qayta o'qish) ===")
df2 = pd.read_json(StringIO(j))
print(f" shape: {df2.shape}, nomlar: {df2['nom'].tolist()}")
print("\n=== 3. Bo'sh qiymatlar (isna) ===")
matn = "x,y\n1,\n,4\n5,6\n"
d = pd.read_csv(StringIO(matn))
print(f" har ustunda bo'sh: {d.isna().sum().to_dict()}")
print("\n=== 4. fillna va dropna ===")
print(f" fillna(0): {d.fillna(0)['x'].tolist()}")
print(f" dropna qatorlar: {len(d.dropna())}")
print(" ⭐ JSON (API), bo'sh qiymatlar (real ma'lumot)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. to_json (orient=records) ===
[{"nom":"Python","narx":100},{"nom":"Go","narx":120},{"nom":"Rust","narx":150}]
=== 2. read_json (qayta o'qish) ===
shape: (3, 2), nomlar: ['Python', 'Go', 'Rust']
=== 3. Bo'sh qiymatlar (isna) ===
har ustunda bo'sh: {'x': 1, 'y': 1}
=== 4. fillna va dropna ===
fillna(0): [1.0, 0.0, 5.0]
dropna qatorlar: 1
⭐ JSON (API), bo'sh qiymatlar (real ma'lumot)Nima ko'rsatdi: 2.5, 2.6-bo'limlar.
Misol 4 — Amaliy: ma'lumot quvuri (o'qi → tozala → yoz)
Real ETL: bir necha manbani o'qish, birlashtirish, tozalash, yozish. Bu — ma'lumot quvurining namunasi.
"""to'liq ETL: ikki CSV o'qi (concat), bo'sh tozala, hisob-kitob, natijani CSV'ga yoz."""
import warnings
warnings.filterwarnings("ignore")
from io import StringIO
import pandas as pd
def main() -> None:
# ikki bo'lim CSV'si
yanvar = "mahsulot,sotildi\nPython,50\nGo,30\nRust,20\n"
fevral = "mahsulot,sotildi\nPython,60\nGo,\nJava,40\n" # Go bo'sh
print("=== 1. Ikki CSV o'qi va birlashtir ===")
df1 = pd.read_csv(StringIO(yanvar))
df1["oy"] = "yanvar"
df2 = pd.read_csv(StringIO(fevral))
df2["oy"] = "fevral"
df = pd.concat([df1, df2], ignore_index=True)
print(f" jami qatorlar: {len(df)}")
print("\n=== 2. Bo'sh qiymatlarni tekshir va tozala ===")
print(f" bo'sh sotildi: {df['sotildi'].isna().sum()}")
df["sotildi"] = df["sotildi"].fillna(0).astype(int)
print(f" tozalangandan keyin: {df['sotildi'].tolist()}")
print("\n=== 3. Hisob-kitob (mahsulot bo'yicha jami) ===")
jami = df.groupby("mahsulot")["sotildi"].sum().sort_index()
print(f" {jami.to_dict()}")
print("\n=== 4. Natijani yoz (CSV) ===")
natija = jami.reset_index().to_csv(index=False)
print(natija.strip())
print(" ⭐ ETL — o'qi (concat) → tozala (fillna) → yoz (to_csv)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Ikki CSV o'qi va birlashtir ===
jami qatorlar: 6
=== 2. Bo'sh qiymatlarni tekshir va tozala ===
bo'sh sotildi: 1
tozalangandan keyin: [50, 30, 20, 60, 0, 40]
=== 3. Hisob-kitob (mahsulot bo'yicha jami) ===
{'Go': 30, 'Java': 40, 'Python': 110, 'Rust': 20}
=== 4. Natijani yoz (CSV) ===
mahsulot,sotildi
Go,30
Java,40
Python,110
Rust,20
⭐ ETL — o'qi (concat) → tozala (fillna) → yoz (to_csv)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 |
|---|---|
"to_csv indeksni kerak" |
index=False (odatda) |
| "CSV har doim vergul" | sep (;, \t ham) |
| "Sana avtomatik" | parse_dates kerak |
| "Bo'sh qiymat yo'q" | Real ma'lumot iflos (NaN) |
| "Excel to'g'ridan" | openpyxl kerak |
| "read_csv turlarni bilmaydi" | Avtomatik aniqlaydi |
| "JSON = CSV" | orient bilan (turli shakl) |
| "O'qidim — tayyor" | Tekshir (isna, dtypes) |
6. Keng tarqalgan xatolar va yechimlari
1. to_csv da indeks ustuni
df.to_csv("f.csv") # ⚠️ indeks ustuni qo'shiladi
df.to_csv("f.csv", index=False) # ✅2. Noto'g'ri ajratgich
pd.read_csv("f.csv") # ; bilan — bir ustun bo'ladi # ⚠️
pd.read_csv("f.csv", sep=";") # ✅3. Sana matn bo'lib qolish
pd.read_csv("f.csv") # sana — matn # ⚠️
pd.read_csv("f.csv", parse_dates=["sana"]) # ✅4. Bo'sh qiymatlarni tekshirmaslik
df["narx"].mean() # NaN bo'lsa noto'g'ri # ⚠️
df["narx"].isna().sum() # avval tekshir # ✅5. Encoding xatosi (o'zbekcha)
pd.read_csv("f.csv") # ba'zan UnicodeError # ⚠️
pd.read_csv("f.csv", encoding="utf-8") # ✅6. Excel kutubxonasi yo'q
pd.read_excel("f.xlsx") # ImportError # ⚠️
# pip install openpyxl # ✅7. Katta faylni to'liq o'qish
pd.read_csv("katta.csv") # xotira to'ladi # ⚠️
pd.read_csv("katta.csv", nrows=1000) # yoki chunksize # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 24.5-dars (o'tilgan): DataFrame — o'qilgan ma'lumot
- 24.8-dars: Tozalash — bo'sh qiymatlar
- 24.11-dars: Vaqt qatorlari — parse_dates
- 19-qism (o'tilgan): JSON/CSV formatlari
- 26-qism: Avtomatlashtirish — fayl quvuri
8. Eng yaxshi amaliyotlar
to_csvdaindex=False(odatda).O'qigach tekshir (
head,dtypes,isna).Sana —
parse_dates.Ajratgich —
sep(real formatga).O'zbekcha —
encoding="utf-8".Bo'sh qiymatlarni sana (
isna().sum()).Katta fayl —
nrows/chunksize.ETL: o'qi → tozala → yoz.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # read_csv nima?
2. # to_csv nima?
3. # index=False nima?
4. # sep nima?
5. # parse_dates nima?
6. # na_values nima?
7. # isna nima?
8. # fillna nima?
9. # dropna nima?
10. # to_json orient nima?
11. # read_excel nima kerak?
12. # ETL nima?Javoblar
- CSV'ni DataFrame'ga o'qish
- DataFrame'ni CSV'ga yozish
- Indeks ustunini yozmaslik
- Ajratgich (
,,;,\t) - Matn sanani sana turiga
- Bo'sh belgilarini ko'rsatish
- Qayerda bo'sh (bool)
- Bo'shni qiymat bilan to'ldirish
- Bo'sh qatorlarni o'chirish
- JSON shakli (records — obyektlar)
- openpyxl kutubxonasi
- Extract-Transform-Load (o'qi-tozala-yoz)
Vazifa 2: Xatolarni tuzating
1. df.to_csv("f.csv") # index=False
2. pd.read_csv("f.csv") # ; bilan # sep
3. pd.read_csv("f.csv") # sana # parse_dates
4. df["narx"].mean() # NaN bor # isna tekshir
5. pd.read_csv("katta.csv") # nrowsJavoblar
1. df.to_csv("f.csv", index=False)
2. pd.read_csv("f.csv", sep=";")
3. pd.read_csv("f.csv", parse_dates=["sana"])
4. df["narx"].isna().sum()
5. pd.read_csv("katta.csv", nrows=1000)Vazifa 3: CSV
O'qi/yoz:
read_csvto_csv(index=False)- Turlar
- Statistika
Vazifa 4: Sozlamalar
O'qish:
sepparse_datesna_valuesusecols
Vazifa 5: JSON
Format:
to_json(records)read_jsonto_dict- Shakl
Vazifa 6: ETL
Quvur:
- Ikki CSV o'qi
- Birlashtir (concat)
- Tozala (fillna)
- Yoz (to_csv)
Vazifa 7: O'ylash
Real ma'lumot ko'pincha "iflos" — bo'sh qiymatlar, noto'g'ri format, har xil ajratgich. pandas o'qishda sozlamalar (sep, parse_dates, na_values) va tekshirish (isna, dtypes) beradi. Nima uchun "ma'lumotga ishonmaslik" (validate, don't trust) muhim tamoyil, va nega tahlilning katta qismi (ba'zan 80%) ma'lumotni tayyorlashga ketadi — "iflos ma'lumot, iflos natija" (garbage in, garbage out) nima uchun to'g'ri?
Javob
Qisqa javob: Real ma'lumot iflos — bo'sh qiymatlar, noto'g'ri format, xato, har xil ajratgich. "Ma'lumotga ishonma, tekshir" (validate) muhim, chunki: noto'g'ri o'qilgan ma'lumot (sana matn bo'lib qoldi, bo'sh NaN) noto'g'ri natija beradi ("garbage in, garbage out" — iflos kirish, iflos chiqish). Tahlilning 80% ma'lumot tayyorlashga ketadi (o'qi, tekshir, tozala), chunki ma'lumot manbai (odam kiritgan, turli tizim) nomukammal. Yaxshi tahlilchi: o'qigach tekshiradi (head, dtypes, isna), sozlamalarni to'g'ri beradi (parse_dates, sep), tozalaydi 24.8-bob. "Ma'lumot sifati — natija sifati" — eng murakkab tahlil ham iflos ma'lumotda noto'g'ri.
1. Nega ma'lumot iflos
| Sabab | Misol |
|---|---|
| Odam kiritgan | Xato, bo'sh, har xil format |
| Turli tizim | Har xil ajratgich, kodlash |
| Yo'qolgan | Bo'sh qiymatlar (NaN) |
| Noto'g'ri tur | Sana matn bo'lib |
2. Garbage in, garbage out
Noto'g'ri kirish → noto'g'ri chiqish. Sana matn bo'lsa — vaqt tahlili ishlamaydi. Bo'sh NaN — o'rtacha noto'g'ri. Eng yaxshi model ham iflos ma'lumotda xato.
3. Nega 80% tayyorlash
Ma'lumot manbai nomukammal — o'qish (to'g'ri format), tekshirish (isna, dtypes), tozalash 24.8-bob, o'zgartirish (24.9-24.10). Tahlil (statistika, model) — kichik qism; tayyorlash — katta.
4. "Ishonma, tekshir"
O'qigach doim: head() (ko'r), dtypes (turlar to'g'rimi?), isna().sum() (bo'sh soni), describe() (mantiqiymi?). Ishonib ketsang — yashirin xato.
5. Muhandislik saboqlari
- Real ma'lumot iflos (ishonma)
- Garbage in, garbage out
- Tayyorlash — tahlilning katta qismi
- O'qigach tekshir (validate)
6. Xulosa
- Ma'lumot iflos (bo'sh, xato, format)
- Iflos kirish → iflos natija
- 80% tayyorlash (o'qi, tekshir, tozala)
- Ishonma, tekshir (validate)
Nimani mustahkamlaydi: 2.1–2.8-bo'limlar.
Xulosa
Bu darsda pandas o'qish va yozishni o'rgandik.
Eng muhim uch fikr:
CSV o'qish va yozish.
read_csv(fayl)— CSV (Comma-Separated Values — oddiy matn, birinchi qator sarlavha, vergul bilan) faylni DataFrame'ga o'qiydi (turlarni avtomatik aniqlaydi).to_csv(fayl)— DataFrame'ni CSV'ga yozadi;index=Falsemuhim (indeks ustunini yozmaydi),encoding="utf-8"(o'zbekcha). O'qish sozlamalari:sep(ajratgich —,/;/\t),header=None,names,usecols,nrows. Real CSV har xil format — sozlamalar bilan moslash.Sana, bo'sh qiymatlar, JSON/Excel.
parse_dates=["ustun"]— matn sanani ("2024-01-15") haqiqiy sana turiga (datetime) —.dt.year/.dt.monthmumkin 24.11-bob. Bo'sh qiymatlar (NaN):.isna().sum()(har ustun bo'sh soni — birinchi tekshir),.dropna()(o'chir),.fillna(qiymat)(to'ldir),na_values(bo'sh belgilari). JSON (19-qism):read_json/to_json,orient="records"(obyektlar ro'yxati). Excel:read_excel/to_excel(openpyxlkerak),sheet_name,ExcelWriter(ko'p varaq).ETL va ma'lumot sifati. Ma'lumot o'qish/yozish — ETL (Extract-Transform-Load): o'qi (CSV/Excel/API/baza) → tozala/o'zgartir (24.7–24.10) → yoz (CSV/baza/hisobot). Real ma'lumot iflos (bo'sh, xato, har xil format) — "ishonma, tekshir" (o'qigach
head,dtypes,isna). "Garbage in, garbage out" — iflos kirish iflos natija beradi; tahlilning 80% ma'lumot tayyorlashga ketadi. Ma'lumot sifati — natija sifati. "O'qi → tozala → yoz" — ma'lumot muhandisligining asosiy oqimi (26-qism avtomatlashtirish).
Keyingi darsda pandas: tanlash va filtrlash ni o'rganamiz: loc/iloc, bool indeks, shartli tanlash — DataFrame'dan kerakli ma'lumotni ajratib olish.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!