Asosiy qismga o'tish

Ma'lumotni tasvirlash: info, describe, value_counts

10-bob 10 kod bloki 1254 so'z

Bu bobdagi kod shu fayllar bilan ishlaydio'z kompyuteringizda ishga tushiring

Sahna: yangi fayl bilan birinchi besh daqiqa

Fayl keldi. Tahlil, model, hisobot — keyin. Avval so'roq: nechta qator? Qaysi ustunlar bo'sh? Sonlar qaysi oraliqda? Matnli ustunlarda nechta xil qiymat? Bu bob — shu so'roqning standart tartibi. Har bir tajribali tahlilchi yangi faylni aynan shunday ochadi.

python3 qator
import pandas as pd

avto = pd.read_csv(DATA / "avto_savdo.csv", parse_dates=["sana"], date_format="%d.%m.%Y")

info: umumiy ko'rinish

python1 qator
avto.info()
Chiqish
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 612 entries, 0 to 611
Data columns (total 9 columns):
 #   Column     Non-Null Count  Dtype         
---  ------     --------------  -----         
 0   elon_id    612 non-null    int64         
 1   sana       612 non-null    datetime64[ns]
 2   model      612 non-null    object        
 3   rang       612 non-null    object        
 4   yil        612 non-null    int64         
 5   probeg_km  575 non-null    object        
 6   uzatma     612 non-null    object        
 7   viloyat    612 non-null    object        
 8   narx       612 non-null    object        
dtypes: datetime64[ns](1), int64(2), object(6)
memory usage: 43.2+ KB

info bitta jadvalda to'rt narsani aytadi: qatorlar soni (RangeIndex), har ustunning bo'sh bo'lmagan qiymatlar soni (Non-Null Count), turi va xotira. Qatorlar 612, probeg_km da esa kamroq — demak u yerda bo'sh kataklar bor.

describe: sonlar haqida qisqa hisobot

python1 qator
avto.describe()
elon_idsanayil
count612612612
mean1302.0162025-06-01 07:12:56.4705881602018.016
min10012025-01-01 00:00:002012
25%1150.752025-03-22 18:00:002015
50%1302.52025-06-01 00:00:002018
75%1453.252025-08-18 00:00:002021
max16002025-10-27 00:00:002024
std173.936NaN3.611

Son ustunlar uchun: soni (count), o'rtacha, std, eng kichik, chorak chegaralari (25%, 50% — median, 75%) va eng katta. 5-bobdagi hamma aggregatsiya — bitta buyruqda.

E'tibor bering: jadvalda faqat elon_id, sana va yil bor. narx va probeg_km — yo'q, chunki ular hali matn (9-bob). Tahlilning eng muhim ustuni — narx — tasvirlashga ham kirmadi. Bu — "tozalash kerak" degan birinchi signal.

elon_id ning o'rtachasi — ma'nosiz son: u identifikator, miqdor emas. describe buni bilmaydi; o'qiyotganda siz bilishingiz kerak.

Matnli ustunlar uchun alohida:

python1 qator
avto.describe(include="object")
modelrangprobeg_kmuzatmaviloyatnarx
count612612575612612612
unique45556127436
topOnixOq100185AvtomatSamarqand39 500 000 so'm
freq4114123261076

unique — nechta xil qiymat, top — eng ko'p uchragani, freq — necha marta. model ustunida 45 xil qiymat — lekin do'konda 9 ta model bor-ku? Yana bir signal.

value_counts: har qiymat necha marta

python2 qator
cobaltlar = avto["model"].str.strip().str.lower() == "cobalt"
avto.loc[cobaltlar, "model"].value_counts()
modelcount
Cobalt26
COBALT12
Cobalt12
cobalt12
Cobalt 10

Bitta model — besh xil yozilish: oddiy, katta harf, kichik harf, oldida yoki oxirida bo'shliq bilan. pandas uchun ular har xil qiymatlar. Odam uchun bir xil. 12-bobda .str.strip().str.title() bilan birlashtiramiz.

Foizda ko'rish uchun — normalize=True:

python1 qator
(avto["uzatma"].value_counts(normalize=True) * 100).round(1)
uzatmaproportion
Avtomat53.3
Mexanika46.7

Bo'sh kataklar xaritasi

python3 qator
boshlar = avto.isna().sum()
print(boshlar[boshlar > 0])
print(f"jami {avto.isna().sum().sum()} bo'sh katak, {avto.isna().any(axis=1).sum()} qatorda")
Chiqish
probeg_km    37
dtype: int64
jami 37 bo'sh katak, 37 qatorda

isna() — har katak uchun True/False (3-bobdagi mask). .sum() — har ustun bo'yicha nechta True: 5-bobdagi aggregatsiya, axis=0. .any(axis=1) — kamida bitta bo'sh katagi bor qatorlar.

Ko'z bilan ko'rish uchun — mask ning o'zini rasm qilamiz:

python6 qator
fig, ax = plt.subplots(figsize=(8, 3.6))
ax.imshow(avto.isna().to_numpy().T, aspect="auto", cmap="Greys", interpolation="nearest")
ax.set_yticks(range(avto.shape[1]), avto.columns)
ax.set_xlabel("qator raqami")
ax.set_title("Qora chiziq — bo'sh katak")
plt.show()

Bo'sh kataklar faqat probeg_km da va fayl bo'ylab tarqalgan — bir joyga to'planmagan. Bu muhim: agar ular faqat oxirgi oylarda bo'lganida, sabab boshqa (masalan, sayt formasi o'zgargan) bo'lardi va to'ldirish usuli ham boshqa bo'lardi.

Takrorlar

python3 qator
print("to'liq takror qatorlar:", avto.duplicated().sum())
print("takror elon_id:", avto["elon_id"].duplicated().sum())
avto[avto.duplicated(keep=False)].sort_values("elon_id").head(4)
Chiqish
to'liq takror qatorlar: 12
takror elon_id: 12
elon_idsanamodelrangyilprobeg_kmuzatmaviloyatnarx
7710772025-01-21 00:00:00Gentra Qizil2013209730AvtomatQashqadaryo47 500 000 so'm
20810772025-01-21 00:00:00Gentra Qizil2013209730AvtomatQashqadaryo47 500 000 so'm
8010802025-09-08 00:00:00COBALTKumush2017153 451MexanikaBuxoro74 000 000 so'm
49710802025-09-08 00:00:00COBALTKumush2017153 451MexanikaBuxoro74 000 000 so'm

duplicated() — butunlay bir xil qatorni topadi (birinchisini asl deb, keyingilarini belgilaydi). keep=False — hamma nusxani ko'rsatadi, shunda juftlarni yonma-yon ko'rasiz. 12 ta e'lon ikki marta yozilgan: hisob-kitobda ular ikki marta sanaladi.

Taqsimotni ko'rish

Raqamlar jadvali — yaxshi, rasm — tezroq:

python5 qator
fig, (chap, ong) = plt.subplots(1, 2, figsize=(10, 3.2))
avto["yil"].plot(kind="hist", bins=13, ax=chap, color="#1a73e8", title="Ishlab chiqarilgan yil")
avto["sana"].dt.month.value_counts().sort_index().plot(kind="bar", ax=ong, color="#b06000",
                                                        title="E'lon berilgan oy", rot=0)
plt.show()

.dt.month — sana ustunidan oy raqami (16-bobda batafsil). Yillar 2012–2024 oralig'ida tekis taqsimlangan, e'lonlar esa yanvar–oktyabr bo'ylab.

So'roq tartibi: nazorat ro'yxati

Har yangi faylda:

Qadam Buyruq Nimani qidiramiz
1 shape, head() to'g'ri o'qildimi
2 dtypes / info() son ustun matn bo'lib qolmadimi
3 isna().sum() bo'sh kataklar qayerda, nechta
4 duplicated().sum() takror qatorlar
5 describe() sonlar oralig'i, g'alati qiymatlar
6 value_counts() matnli ustunda yozilish xilma-xilligi

Bu faylda oltita qadam to'rtta muammo topdi: matn bo'lib qolgan narx va probeg, bo'sh probeglar, 12 ta takror e'lon, model nomlarining 45 xil yozilishi. Keyingi bobda (11) kerakli qismni tanlashni o'rganamiz, 12-bobda esa shu to'rttasini tuzatamiz.

Xulosa

  • info() — qatorlar, bo'sh bo'lmaganlar soni, turlar, xotira.
  • describe() — son ustunlar xulosasi; include="object" — matnlar uchun.
  • value_counts() (normalize=True — foiz) — har qiymat necha marta; yozilish xilma-xilligini fosh qiladi.
  • isna().sum(), duplicated().sum() — bo'sh va takror.
  • So'roq tartibi: shape → dtypes → isna → duplicated → describe → value_counts.

Mashqlar

  1. dokon_savdo.csv ni oltita qadam bilan so'roq qiling. Qanday muammo topdingiz?
  2. avto da qaysi rang eng ko'p? Foizda qancha?
  3. avto["viloyat"].nunique() va len(avto["viloyat"].unique()) — teng chiqadimi? Qachon farq qiladi?

Javoblar

  1. Bo'sh katak va takror qator yo'q; sana matn (o'qishda date_format kerak); filial_id da 5 ta filial bor — filiallar.csv bilan solishtirsangiz, 5-filial ro'yxatda yo'q (15-bobda topamiz).
  2. avto["rang"].value_counts(normalize=True) — birinchi qator.
  3. Bu ustunda teng; ustunda NaN bo'lsa, unique uni ham sanaydi, nunique — yo'q.

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar