DARS 3

NUMPY VA PANDAS

Dataset bilan ishlash asoslari va ma'lumotlar tahlili muqaddimasi.

O'tgan dars takrori

Yangi mavzuga kirishdan oldin, avvalgi darsda o'tilgan asosiy tushunchalarni esga olamiz:

Ma'lumot turlari

Python'ning asosiy ma'lumot turlarini farqlash va ulardan to'g'ri foydalanish: int (butun son), float (haqiqiy son), str (matn), va bool (mantiqiy qiymat).

List (Ro'yxat)

List yaratish, elementlar qo'shish va turli ro'yxat metodlari (append, extend, insert, remove) bilan ishlash asoslari.

Dictionary (Lug'at)

Kalit-qiymat (key-value) juftligidan iborat bo'lgan Dictionary strukturasini tushunish va amaliyotda qo'llash.

Funksiyalar

Kodni qayta ishlatish (reusability) uchun def kalit so'zi, funksiya parametrlari va return qiymati bilan ishlash.

Bugungi dars maqsadlari

  1. NumPy nima ekanligini tushunish va ko'p o'lchamli massivlar bilan samarali ishlashni o'rganish.
  2. Pandas DataFrame yaratish, ularning tuzilishini anglash va ustunlar ustida amallar bajarish.
  3. Tashqi CSV va Excel fayllarini o'qish hamda ma'lumotlarni asosiy filtrlash usullarini o'zlashtirish.
  4. Haqiqiy dataset ustida amaliyot bajarish orqali tahlil ko'nikmalarini shakllantirish.

Terminologiyalar va ularning ma'nolari

Ma'lumotlar muhandisligi va tahlilida eng ko'p ishlatiladigan asosiy atamalar:

Termin Tavsif / Ma'nosi
ArrayMassiv — bir xil turdagi elementlar to'plami. Xotirada yonma-yon joylashadi.
DataFrameJadval — ustun va qatorlardan iborat ikki o'lchamli (2D) ma'lumot tuzilmasi.
SeriesBir o'lchamli indekslangan ma'lumot tuzilmasi (DataFrame'ning bitta ustuni).
DatasetMa'lumotlar to'plami — tahlil va model o'qitish uchun yig'ilgan axborotlar jamlanmasi.
CSVComma Separated Values — ma'lumotlar vergul bilan ajratilgan keng tarqalgan fayl formati.
IndexQator yoki ustunning unikal (noyob) raqami yoki nomi.
ShapeMassiv yoki DataFrame'ning o'lchami (qatorlar va ustunlar soni).
NaNNot a Number — yo'q qiymat, ya'ni jadvaldagi bo'sh katakcha.
dtypeData type — DataFrame ustunidagi yoki array ichidagi elementlarning tur ko'rsatkichi.
SliceKesim — massiv yoki ro'yxatdan ma'lum bir qismni ajratib olish amali.

Nima uchun NumPy?

NumPy (Numerical Python) kutubxonasi matematik va ilmiy hisob-kitoblarni tezkor bajarish uchun standart hisoblanadi:

Xotira samaradorligi

Standart Python ro'yxati xotirada har bir elementni alohida obyekt (pointer) sifatida saqlaydi. NumPy esa elementlarni yonma-yon (contiguous memory) joylashtiradi. Shu sababli u juda tez ishlaydi.

C tilida yozilgan

Biz kodni Python ustida yozamiz, lekin uning ostida (under the hood) C tili ishlaydi. Bu esa sof Python'ga qaraganda bir necha yuz barobar yuqori tezlik beradi.

Ekotizim asosi

Data Science va Sun'iy intellektda yetakchi bo'lgan Pandas, Scikit-learn, PyTorch va TensorFlow kutubxonalari ichida NumPy massivlaridan foydalaniladi.

List vs NumPy — Tezlik taqqoslash

Quyidagi kod orqali 1 millionta elementni 2 ga ko'paytirishda Python List va NumPy Array tezligini amalda solishtirishingiz mumkin:

speed_test.py
import numpy as np
import time

# 1 million elementli ro'yxat yaratamiz
lst = list(range(1_000_000))
arr = np.array(lst)

# Standart Python List tezligi
start = time.time()
lst2 = [x * 2 for x in lst]
print("List:", time.time() - start)

# NumPy Array tezligi
start = time.time()
arr2 = arr * 2
print("NumPy:", time.time() - start)

Array (Massiv) nima?

Array — bu bir xil turdagi ma'lumotlarni ketma-ket joylashtirib saqlaydigan ma'lumotlar strukturasi.

Asosiy xususiyatlari:

Python List va Array o'rtasidagi farq:

Xususiyati NumPy Array Python List
Ma'lumot turi Faqat bir xil turdagi elementlar (homogeneous) Har xil turdagi elementlar bo'lishi mumkin (heterogeneous)
Xotira tuzilishi Ketma-ket joylashgan zich blok Aslida xotira manzillarini saqlovchi ko'rsatkichlar (pointer) ro'yxati
Hajmi O'lchami ko'pincha statik (oldindan belgilangan) Dinamik — istalgancha kengayadi va qisqaradi

Array yaratish amallari

NumPy'da massivlarni har xil usullar bilan e'lon qilish mumkin:

array_creation.py
import numpy as np

# 1. Oddiy listdan o'tkazish
arr = np.array([1, 2, 3, 4, 5])

# 2. Ikki o'lchamli (2D) array yaratish
arr2d = np.array([[1, 2, 3], [4, 5, 6]])

Tayyor funksiyalar yordamida to'ldirilgan arraylar:

Nollar, birlar yoki ixtiyoriy sonlar bilan to'ldirilgan matritsalar yasash:

filled_arrays.py
# Hammasi 0 lardan iborat 2x3 matritsa
np.zeros((2, 3))
# Chiqish: [[0. 0. 0.]
#          [0. 0. 0.]]

# Hammasi 1 lardan iborat 2x3 matritsa
np.ones((2, 3))
# Chiqish: [[1. 1. 1.]
#          [1. 1. 1.]]

# Ko'rsatilgan son (masalan 7) bilan to'ldirilgan 2x3 matritsa
np.full((2, 3), 7)
# Chiqish: [[7. 7. 7.]
#          [7. 7. 7.]]

Ketma-ketlik va Tasodifiy sonlar (Random):

sequences_and_random.py
# np.arange(start, stop, step) -> Qadam bilan ketma-ketlik
np.arange(0, 10, 2) # [0, 2, 4, 6, 8]

# np.linspace(start, stop, num) -> Berilgan sonda teng oraliqli sonlar
np.linspace(0, 10, 5) # [ 0.   2.5  5.   7.5 10. ]

# Machine Learningda eng ko'p ishlatiladigan random funksiyalari
np.random.rand(3, 3) # 0 dan 1 gacha float qiymatli 3x3 matritsa

np.random.randint(0, 10, (3, 3)) # 0 dan 10 gacha butun sonli 3x3 matritsa

Array xususiyatlari (Attributes)

Yaratilgan massiv strukturasi haqida to'liq ma'lumot olish uchun quyidagi atributlar ishlatiladi:

Indexing va Slicing

Arraylardan kerakli qismlarni kesib olish yoki aniq bitta elementga murojaat qilish mexanizmi:

indexing.py
arr = np.array([10, 20, 30, 40, 50])

print(arr[0])    # 10 -> Birinchi element
print(arr[-1])   # 50 -> Eng oxirgi element
print(arr[1:4])  # [20, 30, 40] -> 1-indeksdan 4-gacha (4 kirmaydi)
print(arr[::2])  # [10, 30, 50] -> Boshidan oxirigacha 2 qadam bilan

Statistik funksiyalar

Ma'lumotlar tahlilida array elementlarining umumiy tendensiyalarini aniqlashda qo'llaniladi. Misol tariqasida ushbu array olingan: arr = np.array([3, 7, 1, 9, 4])

Funksiya Vazifasi Misol Natijasi
np.sum(arr)Elementlarning umumiy yig'indisini hisoblaydi.24
np.mean(arr)Arifmetik o'rtacha qiymatni topadi.4.8
np.std(arr)Standart og'ishni (standard deviation) aniqlaydi.~2.7
np.min(arr)Massiv ichidagi eng kichik qiymatni qaytaradi.1
np.max(arr)Massiv ichidagi eng katta qiymatni qaytaradi.9
np.argmax(arr)Maksimal qiymat turgan katakchaning indeksini beradi.3 (ya'ni 9 raqami 3-indeksda)

Dars ichidagi amaliy vazifalar

O'tilgan mavzularni mustahkamlash uchun darslikdagi topshiriqlar:

Vazifa 1 — Array yaratish

np.zeros, np.ones, np.arange ishlatib quyidagilarni yarating:

Vazifa 2 — Array xususiyatlari

Quyidagi arrayni yarating va uning parametrlarini tahlil qiling:

arr = np.array([[4, 7, 2], [1, 9, 5], [8, 3, 6]])

Uning shape, ndim, size, va dtype qiymatlarini chiqarib, har biri nima ma'no anglatishini tushuntiring.

Vazifa 3 — Indexing va Slicing

Yuqoridagi (Vazifa 2 dagi) arr massividan foydalanib:

Vazifa 4 — Random

np.random.seed(42) buyrug'idan foydalangan holda (natijalar bir xil chiqishi uchun):

Vazifa 5 — 3D array

np.ones yordamida 2×3×4 o'lchamli uch o'lchamli array yarating:

Pandas nima?

Pandas — jadvalli ma'lumotlar (tabular data) bilan ishlash, ma'lumotlarni tozalash, tahlil qilish va qayta ishlash uchun eng asosiy Python kutubxonasidir.

DataFrame

Excel yoki SQL jadvallariga o'xshash, ustun va qatorlardan iborat ikki o'lchamli struktura.

Series

DataFrame'ning har bir alohida ustuni. Bitta ustun va uning indekslaridan iborat bir o'lchamli struktura.

Fayllar bilan integratsiya

CSV, Excel, JSON, SQL kabi ko'plab tashqi formatlarni to'g'ridan-to'g'ri o'qish va yozish imkoniyati.

Oddiy lug'at (Dictionary) dan DataFrame yaratish misoli:

pandas_intro.py
import pandas as pd

# Ma'lumotlarni tayyorlaymiz
data = {
    'ism'  : ['Ali', 'Zulfiya', 'Bekzod'],
    'yosh' : [22, 24, 21],
    'baho' : [85, 92, 78]
}

# DataFrame tuzamiz
df = pd.DataFrame(data)
print(df)

# Natija:
#        ism  yosh  baho
# 0      Ali    22    85
# 1  Zulfiya    24    92
# 2   Bekzod    21    78

print(df.shape)  # (3, 3)
print(df.dtypes) # ism: object, yosh: int64, baho: int64

DataFrame — Asosiy metodlar

Katta hajmdagi ma'lumotlar to'plami bilan dastlabki tanishuvda quyidagi tayyor metodlar qo'l keladi:

DataFrame — Ustunlar va filtrlash

Ustunlarni tanlash, yangi ustun qo'shish, o'chirish va shartlar asosida kerakli ma'lumotlarni saralab olish amallari:

columns_and_filtering.py
# --- Ustunlar bilan ishlash ---

# Bitta ustunni ajratib olish (Series beradi)
df['ism']

# Bir nechta ustunlarni ro'yxat ko'rinishida ajratish
df[['ism', 'baho']]

# Yangi ustun yaratish (masalan bahoni 10 ga bo'lib yangi reyting chiqarish)
df['daraja'] = df['baho'] / 10

# Ustunni vaqtincha yoki butunlay o'chirish (axis=1 ustun degani)
df.drop('daraja', axis=1)


# --- Filtrlash (Shartli tanlash) ---

# Bahosi 80 dan yuqori bo'lgan barcha talabalarni filtrlash
df[df['baho'] > 80]

# Bir vaqtda bir nechta shart qo'yish (Yosh 23 dan kichik VA Baho 75 dan baland)
df[(df['yosh'] < 23) & (df['baho'] > 75)]

# Aniq bir qiymatga tenglik sharti
df[df['ism'] == 'Ali']

# .loc yordamida qator indeksi va ustun nomi bo'yicha aniq qiymatni olish
df.loc[0, 'baho'] # 85
Eslatma: Filtrlash natijasida hosil bo'lgan jadval ham yangi DataFrame hisoblanadi. Uni keyinchalik ishlatish uchun yangi o'zgaruvchiga saqlab qo'yish mumkin: natija = df[df['baho'] > 80]

CSV va Excel fayllari bilan ishlash

Haqiqiy loyihalarda ma'lumotlar ko'pincha tashqi fayllarda saqlanadi. Ularni o'qish va yozish jarayoni quyidagicha:

file_io.py
# CSV faylini o'qib DataFrame-ga yuklash
df = pd.read_csv('talabalar.csv')

# Excel (.xlsx) formatidagi fayllarni o'qish
df_excel = pd.read_excel('data.xlsx')

# Qayta ishlangan jadvalni yangi CSV faylga saqlash (indekslarsiz)
df.to_csv('natija.csv', index=False)

Ma'lumotlarni yuklagandan keyingi standart tekshirish bosqichlari:

pipeline.py
df = pd.read_csv('data.csv')
print(df.shape)          # Hajmini ko'ramiz
print(df.head(3))        # Dastlabki 3 qator bilan tanishamiz
print(df.dtypes)         # Ustun turlarini tekshiramiz
print(df.isnull().sum()) # Har bir ustunda nechta bo'sh joy borligini sanaymiz

Haqiqiy dataset — Talabalar ma'lumotlari

Ushbu dars amaliyotida jami 100 ta qatordan iborat bo'lgan talabalar.csv fayli ustida ishlaymiz. Jadvalning tuzilishi va dastlabki bir nechta qatorlari namunasi:

ism yosh shahar fan baho kurs
Ali Karimov22ToshkentMatematika883
Zulfiya Rahimova21SamarqandFizika922
Bekzod Yusupov23BuxoroInformatika754
Malika Tosheva20NamanganKimyo951
Jasur Holiqov24Farg'onaMatematika684
... va boshqa 95 ta qator ...

Amaliy tahlil kodi:

dataset_analysis.py
import pandas as pd
import numpy as np

# Datasetni o'qiymiz
df = pd.read_csv('talabalar.csv')

# 1. Umumiy ko'rinish va o'lchamlar
print(df.head())
print(df.shape)
# 2. Statistik xulosa
print(df.describe())

# 3. Faqat Matematika fanini filtrlash va uning o'rtacha bahosini topish
matematika = df[df['fan'] == 'Matematika']
print(matematika['baho'].mean())

# 4. Shaharlarga ko'ra guruhlab, har bir shaharning o'rtacha bahosini chiqarish
print(df.groupby('shahar')['baho'].mean())

# 5. Eng yuqori 3 ta baho olgan talabalarni aniqlash
top3 = df.sort_values('baho', ascending=False).head(3)
print(top3[['ism', 'baho']])

Guruhlash va statistika

Ma'lumotlarni kategoriyalar bo'yicha bo'laklash va guruh ichida hisob-kitob qilish metodlari:

groupby_advanced.py
# --- groupby() orqali guruhlash ---

# Har bir fanga tegishli talabalarning o'rtacha bahosi
df.groupby('fan')['baho'].mean()

# Shaharlar bo'yicha eng yuqori (max) baholar
df.groupby('shahar')['baho'].max()

# Bir vaqtning o'zida bir nechta murakkab statistikani hisoblash (.agg)
df.groupby('kurs').agg({
    'baho': ['mean', 'min', 'max'],
    'ism' : 'count'  # Kursda nechta talaba borligini sanaydi
})


# --- Saralash va Qiymatlarni sanash ---

# Baholarga ko'ra kamayish tartibida saralash (eng baland baho tepada bo'ladi)
df.sort_values('baho', ascending=False)

# value_counts() -> Ustundagi qiymatlarning takrorlanish soni
df['fan'].value_counts()
# Matematika    25
# Fizika        22
# Informatika   20

# unique() -> Ustundagi mavjud takrorlanmas noyob qiymatlar ro'yxati
df['shahar'].unique()
Foydali maslahat: df.groupby() natijasini alohida yangi o'zgaruvchiga saqlab, uning ustida turlicha tahliliy amallarni davom ettirishingiz mumkin.

Dars yakuni — Nima o'tdik?

Bugungi dars davomida quyidagi fundamental mavzularni muvaffaqiyatli o'zlashtirdik:

Uyga vazifa (Interaktiv reja)

Mavzularni to'liq mustahkamlash uchun quyidagi topshiriqlarni bajaring va belgilab boring:

Qo'shimcha foydali manbalar:

“Education is not the learning of facts, but the training of the mind to think.”
— Albert Einstein