IlmHamroh
Python kursi/Malumot tahlili6/18-dars14 daqiqa
Mundarija (22)

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:

python
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:

python
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:

python
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:

python
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:

python
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):

python
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:

python
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

python
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 → yoz

4. 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

python
"""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:

text
=== 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 yozish

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

Misol 2 — Sozlamalar (sep, parse_dates, na_values)

python
"""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:

text
=== 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 moslash

Nima ko'rsatdi: 2.3, 2.4, 2.5-bo'limlar.

Misol 3 — JSON va bo'sh qiymatlar

python
"""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:

text
=== 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.

python
"""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:

text
=== 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

python
df.to_csv("f.csv")               # ⚠️ indeks ustuni qo'shiladi
df.to_csv("f.csv", index=False)  # ✅

2. Noto'g'ri ajratgich

python
pd.read_csv("f.csv")   # ; bilan — bir ustun bo'ladi  # ⚠️
pd.read_csv("f.csv", sep=";")                          # ✅

3. Sana matn bo'lib qolish

python
pd.read_csv("f.csv")   # sana — matn                   # ⚠️
pd.read_csv("f.csv", parse_dates=["sana"])             # ✅

4. Bo'sh qiymatlarni tekshirmaslik

python
df["narx"].mean()  # NaN bo'lsa noto'g'ri              # ⚠️
df["narx"].isna().sum()  # avval tekshir                # ✅

5. Encoding xatosi (o'zbekcha)

python
pd.read_csv("f.csv")   # ba'zan UnicodeError            # ⚠️
pd.read_csv("f.csv", encoding="utf-8")                  # ✅

6. Excel kutubxonasi yo'q

python
pd.read_excel("f.xlsx")   # ImportError                 # ⚠️
# pip install openpyxl                                   # ✅

7. Katta faylni to'liq o'qish

python
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

  1. to_csvda index=False (odatda).

  2. O'qigach tekshir (head, dtypes, isna).

  3. Sana — parse_dates.

  4. Ajratgich — sep (real formatga).

  5. O'zbekcha — encoding="utf-8".

  6. Bo'sh qiymatlarni sana (isna().sum()).

  7. Katta fayl — nrows/chunksize.

  8. ETL: o'qi → tozala → yoz.


9. Amaliy topshiriq

Vazifa 1: Bashorat qiling

python
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
  1. CSV'ni DataFrame'ga o'qish
  2. DataFrame'ni CSV'ga yozish
  3. Indeks ustunini yozmaslik
  4. Ajratgich (,, ;, \t)
  5. Matn sanani sana turiga
  6. Bo'sh belgilarini ko'rsatish
  7. Qayerda bo'sh (bool)
  8. Bo'shni qiymat bilan to'ldirish
  9. Bo'sh qatorlarni o'chirish
  10. JSON shakli (records — obyektlar)
  11. openpyxl kutubxonasi
  12. Extract-Transform-Load (o'qi-tozala-yoz)

Vazifa 2: Xatolarni tuzating

python
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")         # nrows
Javoblar
python
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:

  1. read_csv
  2. to_csv (index=False)
  3. Turlar
  4. Statistika

Vazifa 4: Sozlamalar

O'qish:

  1. sep
  2. parse_dates
  3. na_values
  4. usecols

Vazifa 5: JSON

Format:

  1. to_json (records)
  2. read_json
  3. to_dict
  4. Shakl

Vazifa 6: ETL

Quvur:

  1. Ikki CSV o'qi
  2. Birlashtir (concat)
  3. Tozala (fillna)
  4. 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

  1. Real ma'lumot iflos (ishonma)
  2. Garbage in, garbage out
  3. Tayyorlash — tahlilning katta qismi
  4. O'qigach tekshir (validate)

6. Xulosa

  1. Ma'lumot iflos (bo'sh, xato, format)
  2. Iflos kirish → iflos natija
  3. 80% tayyorlash (o'qi, tekshir, tozala)
  4. 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:

  1. 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=False muhim (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.

  2. Sana, bo'sh qiymatlar, JSON/Excel. parse_dates=["ustun"] — matn sanani ("2024-01-15") haqiqiy sana turiga (datetime) — .dt.year/.dt.month mumkin 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 (openpyxl kerak), sheet_name, ExcelWriter (ko'p varaq).

  3. 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.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!