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
- NumPy nima ekanligini tushunish va ko'p o'lchamli massivlar bilan samarali ishlashni o'rganish.
- Pandas DataFrame yaratish, ularning tuzilishini anglash va ustunlar ustida amallar bajarish.
- Tashqi CSV va Excel fayllarini o'qish hamda ma'lumotlarni asosiy filtrlash usullarini o'zlashtirish.
- 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 |
|---|---|
| Array | Massiv — bir xil turdagi elementlar to'plami. Xotirada yonma-yon joylashadi. |
| DataFrame | Jadval — ustun va qatorlardan iborat ikki o'lchamli (2D) ma'lumot tuzilmasi. |
| Series | Bir o'lchamli indekslangan ma'lumot tuzilmasi (DataFrame'ning bitta ustuni). |
| Dataset | Ma'lumotlar to'plami — tahlil va model o'qitish uchun yig'ilgan axborotlar jamlanmasi. |
| CSV | Comma Separated Values — ma'lumotlar vergul bilan ajratilgan keng tarqalgan fayl formati. |
| Index | Qator yoki ustunning unikal (noyob) raqami yoki nomi. |
| Shape | Massiv yoki DataFrame'ning o'lchami (qatorlar va ustunlar soni). |
| NaN | Not a Number — yo'q qiymat, ya'ni jadvaldagi bo'sh katakcha. |
| dtype | Data type — DataFrame ustunidagi yoki array ichidagi elementlarning tur ko'rsatkichi. |
| Slice | Kesim — 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:
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:
- Har bir elementning o'z indeksi bor va u doimo
0dan boshlanadi. - Massiv o'lchami va xotirasi odatda oldindan belgilanadi.
- Xotirada blok bo'lib ketma-ket joylashgani sababli elementlarga murojaat qilish juda tezkor.
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:
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:
# 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):
# 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:
.shape— Massiv o'lchami, ya'ni nechta qator va nechta ustundan iboratligi..ndim— Massivning o'lchamlar soni (fazoviy darajasi: 1D, 2D, 3D va h.k.)..size— Massiv ichidagi jami elementlarning umumiy soni..dtype— Massiv ichidagi elementlarning ma'lumot turi (masalan, int32, float64).
Indexing va Slicing
Arraylardan kerakli qismlarni kesib olish yoki aniq bitta elementga murojaat qilish mexanizmi:
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:
- 5 ta noldan iborat array.
- 3×3 o'lchamli birlardan iborat array.
- 2 dan 20 gacha bo'lgan toq sonlar ro'yxati (qadam 2 bilan).
- Har bir yaratilgan massivning shape va dtype ko'rsatkichlarini ekranga chiqaring.
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:
- Birinchi qatorni to'liq ajratib oling.
- Ikkinchi ustunni ajratib oling.
- Matritsaning aniq markazidagi
9elementini indeks orqali chaqiring. - Yuqori o'ng burchakdagi 2×2 o'lchamli qismni qirqib oling.
Vazifa 4 — Random
np.random.seed(42) buyrug'idan foydalangan holda (natijalar bir xil chiqishi uchun):
- 1 dan 100 gacha bo'lgan oraliqdan 10 ta tasodifiy butun son yarating.
- 0 dan 1 gacha tasodifiy float sonlardan iborat 3×3 matritsa hosil qiling.
- Har ikkala massivning o'rtacha qiymati (mean) va maksimal qiymatini (max) hisoblang.
Vazifa 5 — 3D array
np.ones yordamida 2×3×4 o'lchamli uch o'lchamli array yarating:
- Uning
ndim,shapevasizeqiymatlarini chiqarib izohlang. - Eng birinchi 'qatlam' (layer) ichidagi birinchi qatorni qirqib oling.
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:
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:
df.head(n)— Jadvalning boshidagi dastlabkinta qatorni ko'rish (agar son berilmasa, standart holatda 5 ta qatorni chiqaradi).df.tail(n)— Jadvalning eng oxiridaginta qatorni tekshirish uchun ishlatiladi.df.info()— Ustunlar ro'yxati, ulardagi ma'lumot turlari va bo'sh bo'lmagan (non-null) qiymatlar soni haqida texnik xulosa.df.describe()— Raqamli ustunlar uchun asosiy statistik ko'rsatkichlarni (mean, std, min, max, kvartillar) avtomat hisoblab beradi.df.shape— Jadvalda jami nechta qator va nechta ustun borligini tuple ko'rinishida beradi.df.columns— Jadvaldagi barcha ustunlarning nomlarini qaytaradi.df.isnull()— Katakchalarning bo'sh yoki yo'qligini tekshirib, True/False jadvalini beradi.df.dropna()— Ichida bo'sh qiymati (NaN) bor bo'lgan qatorlarni jadvaldan butunlay o'chirib tashlaydi.
DataFrame — Ustunlar va filtrlash
Ustunlarni tanlash, yangi ustun qo'shish, o'chirish va shartlar asosida kerakli ma'lumotlarni saralab olish amallari:
# --- 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:
# 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:
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 Karimov | 22 | Toshkent | Matematika | 88 | 3 |
| Zulfiya Rahimova | 21 | Samarqand | Fizika | 92 | 2 |
| Bekzod Yusupov | 23 | Buxoro | Informatika | 75 | 4 |
| Malika Tosheva | 20 | Namangan | Kimyo | 95 | 1 |
| Jasur Holiqov | 24 | Farg'ona | Matematika | 68 | 4 |
| ... va boshqa 95 ta qator ... | |||||
Amaliy tahlil kodi:
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() 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:
- NumPy: Massivlar (array) yaratish, uning xotiradagi samaradorligi va tezligi, elementlar ustida matematik va statistik amallar bajarish.
- DataFrame: Pandas kutubxonasining ikki o'lchamli jadval strukturasi, indekslar, ustun va qatorlar arxitekturasi.
- Filtrlash: Berilgan murakkab mantiqiy shartlar yordamida ma'lumotlarni saralash va filtrlangan yangi jadvallar hosil qilish.
- CSV ishlash: Tashqi ma'lumotlar bazasi fayllarini
read_csv()vato_csv()orqali integratsiya qilish. - Guruhlash: Katta jadvallarni
groupby(),sort_values(), vavalue_counts()yordamida guruhlab statistik hisobotlar tayyorlash.
Uyga vazifa (Interaktiv reja)
Mavzularni to'liq mustahkamlash uchun quyidagi topshiriqlarni bajaring va belgilab boring:
Qo'shimcha foydali manbalar:
- numpy.org/doc — Rasmiy NumPy hujjatlari va qo'llanmalari.
- pandas.pydata.org — Rasmiy Pandas kutubxonasi hujjatlari.
- kaggle.com/learn — Bepul amaliy Data Science va Machine Learning darslari.
- realpython.com — Python va ma'lumotlar tahliliga oid juda chuqur yoritilgan maqolalar.
— Albert Einstein