Бугунги рақамли дунёда ҳар бир бизнес улкан ҳажмдаги маълумотларни ишлаб чиқаради: сотув буюртмалари, мижозлар рўйхати, веб-сайт ташрифлари ва молиявий ҳисоботлар. Бу маълумотларни Excel жадвалида қўлда кўриб чиқиш минглаб қаторларга етганда деярли имконсиз бўлиб қолади. Айнан шу ерда Python дастурлаш тили ва унинг Pandas кутубхонаси ёрдамга келади, чунки улар катта ҳажмдаги маълумотни бир неча сонияда ўқиб, таҳлил қилиб ва хулосага айлантириб беради.
Pandas — бу очиқ кодли, бепул кутубхона бўлиб, у Python'да жадвал кўринишидаги маълумотлар билан ишлашни соддалаштириш учун махсус яратилган. У дата-аналист, дастурчи ва илмий тадқиқотчилар орасида энг машҳур воситалардан бирига айланган. Ушбу мақолада биз Pandas'нинг асосий тушунчаларидан бошлаб, маълумот юклаш, тозалаш, филтрлаш ва гуруҳлашгача бўлган бутун жараённи реал бизнес мисоли орқали босқичма-босқич кўриб чиқамиз.
DataFrame ва Series — Pandas юраги
Pandas иккита асосий маълумот тузилмасига таянади. Биринчиси — Series, яъни бир ўлчовли устун бўлиб, у индекс билан бирга келадиган қийматлар рўйхатини ифодалайди. Иккинчиси ва энг муҳими — DataFrame бўлиб, у Excel жадвалига ўхшаш, қатор ва устунлардан иборат икки ўлчовли тузилмадир. Аслида DataFrame'ни бир нечта Series'нинг бирлашмаси сифатида тасаввур қилиш мумкин, чунки унинг ҳар бир устуни алоҳида Series ҳисобланади.
import pandas as pd
# Series yaratish
prices = pd.Series([1000, 2500, 1800], index=['book', 'pen', 'notebook'])
print(prices)
# DataFrame yaratish
data = {
'product': ['book', 'pen', 'notebook'],
'price': [1000, 2500, 1800],
'quantity': [50, 120, 80]
}
df = pd.DataFrame(data)
print(df)
Маълумот юклаш: CSV ва Excel
Амалиётда маълумотлар кўпинча ташқи файлларда сақланади, энг кенг тарқалганлари эса CSV ва Excel форматларидир. Pandas бундай файлларни атиги битта қатор код билан ўқий олади ва уларни дарҳол DataFrame'га айлантиради. Бу жараён шу қадар соддаки, ҳатто минглаб қаторли катта файллар ҳам бир лаҳзада хотирага юкланади ва таҳлилга тайёр бўлади.
# CSV faylni o'qish
df = pd.read_csv('sales.csv')
# Excel faylni o'qish
df = pd.read_excel('report.xlsx', sheet_name='January')
# Birinchi 5 qatorni ko'rish
print(df.head())
# Umumiy ma'lumot
print(df.info())
print(df.describe())
Маълумотни тозалаш: бўш қиймат ва дубликатлар
Реал ҳаётда йиғилган маълумотлар деярли ҳеч қачон мукаммал бўлмайди, уларда бўш катаклар, такрорланган қаторлар ва хато қийматлар учрайди. Таҳлил натижаси ишончли бўлиши учун аввал ушбу нуқсонларни тозалаш зарур, акс ҳолда нотўғри хулосаларга келиб қолиш эҳтимоли юқори. Pandas бўш қийматларни топиш, ўчириш ёки ўрнига ўртача қиймат қўйиш ҳамда дубликатларни йўқотиш учун қулай воситаларни тақдим этади.
# Bo'sh qiymatlarni tekshirish
print(df.isnull().sum())
# Bo'sh qiymatli qatorlarni o'chirish
df = df.dropna()
# Bo'sh qiymatni o'rtacha bilan to'ldirish
df['price'] = df['price'].fillna(df['price'].mean())
# Dublikatlarni o'chirish
df = df.drop_duplicates()
Филтрлаш, саралаш ва гуруҳлаш
Маълумот тозалангач, ундан керакли қисмни ажратиб олиш вақти келади. Филтрлаш орқали биз фақат маълум шартга жавоб берадиган қаторларни, масалан нархи маълум суммадан юқори маҳсулотларни танлаб оламиз. Саралаш эса маълумотни ўсиш ёки камайиш тартибида жойлаштиради, гуруҳлаш (groupby) эса ўхшаш қаторларни бирлаштириб, ҳар бир гуруҳ бўйича умумий кўрсаткичларни ҳисоблашга имкон беради.
# Filtrlash: narxi 1500 dan yuqori mahsulotlar
expensive = df[df['price'] > 1500]
# Saralash: narx bo'yicha kamayish tartibida
df_sorted = df.sort_values('price', ascending=False)
# Guruhlash: har bir kategoriya bo'yicha jami sotuv
total = df.groupby('category')['amount'].sum()
print(total)
Жадвалларни бирлаштириш: merge
Кўпинча керакли маълумот бир нечта алоҳида жадвалга тарқалган бўлади, масалан буюртмалар бир файлда, мижозлар ҳақидаги тафсилотлар эса бошқасида сақланади. Pandas'нинг merge функцияси худди SQL маълумотлар базасидаги JOIN амалиёти каби ушбу жадвалларни умумий устун орқали бир-бирига улайди. Бу сизга тўлиқ манзарани кўриш ва маълумотлар ўртасидаги боғлиқликни аниқлаш имконини беради.
# Ikki jadvalni mijoz ID bo'yicha birlashtirish
result = pd.merge(orders, customers, on='customer_id', how='left')
print(result.head())
Реал бизнес мисоли: дўкон сотувлари таҳлили
Энди ўрганганларимизни бир бутун реал мисолда жамлаймиз. Тасаввур қилинг, сизда онлайн дўконнинг бир ойлик сотув маълумотлари бор ва сиз қайси маҳсулот тоифаси энг кўп даромад келтирганини, ҳамда энг фаол мижозларни аниқламоқчисиз. Қуйидаги код маълумотни юклайди, тозалайди ва категория бўйича умумий даромадни ҳисоблаб, энг яхши натижани кўрсатади.
df = pd.read_csv('sales.csv')
df = df.dropna().drop_duplicates()
# Har bir buyurtmaning umumiy summasini hisoblash
df['amount'] = df['price'] * df['quantity']
# Kategoriya bo'yicha jami daromad
revenue = df.groupby('category')['amount'].sum().sort_values(ascending=False)
print("Eng daromadli toifa:", revenue.index[0])
print(revenue)
# Eng faol 5 mijoz
top_clients = df.groupby('client')['amount'].sum().nlargest(5)
print(top_clients)
Визуализация ҳақида қисқача
Рақамлар жадвалда муҳим бўлса-да, уларни график кўринишида кўрсатиш хулосаларни анча тушунарли қилади. Pandas Matplotlib кутубхонаси билан чамбарчас ишлайди ва деярли ҳар қандай DataFrame'ни бир қатор код билан диаграммага айлантира олади. Масалан, сотувлар динамикасини чизиқли графикда ёки категориялар улушини устунли диаграммада кўрсатиш мумкин.
import matplotlib.pyplot as plt
# Kategoriya bo'yicha daromad diagrammasi
revenue.plot(kind='bar', title='Toifalar bo\'yicha daromad')
plt.ylabel('Summa')
plt.tight_layout()
plt.savefig('revenue.png')
Pandas — бу замонавий маълумот таҳлилининг пойдевори бўлиб, уни ўрганиш бошловчи дастурчи ёки дата-аналист учун энг фойдали сармоялардан биридир. Бугун кўриб чиққан асосий тушунчалар — DataFrame, тозалаш, гуруҳлаш ва бирлаштириш — амалий ишларнинг катта қисмини қамраб олади. Кичик файллар билан машқ қилишни бошланг, аста-секин мураккаброқ вазифаларга ўтинг ва тез орада маълумотлардан ҳақиқий бизнес қарорлари чиқариш кўникмасига эга бўласиз.