Mundarija (22)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. to_datetime (sana tanish)
- 2.2. Sana qismlari (.dt)
- 2.3. Sana indeks va tanlash
- 2.4. resample (vaqt guruh)
- 2.5. shift va pct_change (o'sish)
- 2.6. Vaqt amaliyoti
- 2.7. Vaqt tuzoqlari
- 2.8. Vaqt qatorlari — vaqtga bog'liq tahlil
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — to_datetime va .dt
- Misol 2 — Sana indeks va tanlash
- Misol 3 — resample
- Misol 4 — O'sish (pct_change)
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
3.12-dars: Vaqt qatorlari (datetime)
3-QISM — PANDAS · 12-dars
1. Kirish va motivatsiya
Ko'p ma'lumot vaqtga bog'liq: kunlik savdo, oylik daromad, soatlik harorat, yillik o'sish. Bu — vaqt qatorlari (time series). Pandas vaqt bilan ishlashda juda kuchli: sanani tanish (to_datetime), sana qismlarini olish (yil, oy, kun, hafta kuni), vaqt bo'yicha guruhlash (resample — kunlikni oylikka), va vaqt bo'yicha siljitish (o'tgan oyga nisbatan o'sish). Vaqt qatori tahlilida savdo trendi, mavsumiylik, o'sish sur'ati ko'rinadi. Nega muhim? (1) Vaqtga bog'liq ma'lumot — savdo, moliya, sensor (juda keng); (2) Trend va mavsumiylik — vaqt bo'yicha naqsh; (3) Bashorat — vaqt qatori bashorati (kelajak). Bu dars vaqt qatorlarini o'rgatadi — vaqtga bog'liq ma'lumot tahlili.
Vaqt qatorlari (datetime) — vaqtga bog'liq ma'lumot: to_datetime (matn → sana), sana qismlari (.dt.year/.dt.month/.dt.day/.dt.dayofweek — yil/oy/kun/hafta), indeks (sana indeks — vaqt qatori), resample (vaqt bo'yicha guruh — kunlik→oylik), siljitish (shift — o'tgan davr, o'sish), oraliq (date_range — sanalar). Foydalanish: savdo trendi, mavsumiylik, vaqt tahlil. Bu 3.8 (groupby), 3.3 (o'qish — sana ustuni) bilan bog'liq. datetime — sana. resample — vaqt guruh. Trend.
Real vaziyat. Data Scientist kunlik savdo ma'lumoti bilan ishlar edi (sana, savdo — bir yil, 365 qator). Avval sanani tanidi: df["sana"] = pd.to_datetime(df["sana"]) (matn → sana; CSV — matn). Qismlar — df["oy"] = df["sana"].dt.month (oy), df["hafta_kuni"] = df["sana"].dt.dayofweek (hafta kuni — dam olish tahlili). resample (oylik jami) — df.set_index("sana")["savdo"].resample("ME").sum() (kunlik → oylik — 12 qiymat, trend). Siljitish (o'sish) — oylik.pct_change() (o'tgan oyga nisbatan o'sish %). Vaqt qatori trendni ochdi (yozda savdo yuqori — mavsumiylik; oylik o'sish). datetime/resample — vaqtga bog'liq tahlil (trend, mavsumiylik).
Bu darsda vaqt qatorlarini o'rganamiz.
Bu darsda:
- to_datetime (sana tanish)
- Sana qismlari (.dt)
- Sana indeks va tanlash
- resample (vaqt guruh)
- shift va pct_change (o'sish)
- Vaqt amaliyoti
- Vaqt tuzoqlari
- Amaliy: vaqt modeli
ℹ Misollar real pandas bilan (deterministik) ishlaydi.
2. Nazariya — chuqur tushuntirish
2.1. to_datetime (sana tanish)
Matn → sana:
import pandas as pd
# to_datetime — matn/son → sana
pd.to_datetime("2024-01-15") # bitta sana
pd.to_datetime(["2024-01-01", "2024-02-01"]) # Series
df = pd.DataFrame({"sana": ["2024-01-01", "2024-01-02"]})
df["sana"] = pd.to_datetime(df["sana"]) # ustun → sana
# format berish (noaniq bo'lsa)
pd.to_datetime("15/01/2024", format="%d/%m/%Y") to_datetime (sana tanish) — matn → sana: pd.to_datetime("2024-01-15") (bitta), pd.to_datetime(df["sana"]) (ustun → sana). Sabab: sana CSV'dan matn ("2024-01-01" — string, object; sana amallari yo'q); to_datetime sana turiga (datetime64 — sana amallari: qismlar, farq, guruh). format= (noaniq bo'lsa — "%d/%m/%Y" kun/oy/yil; Amerika %m/%d). Sana turi muhim (matn — tahlil yo'q; sana — .dt, resample). to_datetime — matn → sana (datetime64). Sana turi. Tanish.
2.2. Sana qismlari (.dt)
Yil, oy, kun:
df["sana"] = pd.to_datetime(df["sana"])
# .dt — sana qismlari (Series uchun)
df["sana"].dt.year # yil (2024)
df["sana"].dt.month # oy (1-12)
df["sana"].dt.day # kun (1-31)
df["sana"].dt.dayofweek # hafta kuni (0=Dush, 6=Yak)
df["sana"].dt.day_name() # kun nomi ("Monday")
df["sana"].dt.quarter # chorak (1-4) Sana qismlari (.dt) — yil/oy/kun: df["sana"].dt.year (yil), .dt.month (oy 1-12), .dt.day (kun), .dt.dayofweek (hafta kuni — 0 Dushanba, 6 Yakshanba), .dt.day_name() (nom), .dt.quarter (chorak). Sabab: sanadan qismlar kerak (oy bo'yicha guruh — .dt.month; dam olish tahlili — .dt.dayofweek; chorak hisobot); .dt sana metodlari (Series — vektorlashtirilgan, har sana). .dt faqat sana turida (matn — xato; to_datetime avval). dayofweek (0-6 — dam olish 5,6). Sana qismlari — .dt.year/month/day (qismlar). Vektorlashtirilgan. Guruh uchun.
2.3. Sana indeks va tanlash
Sana indeks (vaqt qatori):
df["sana"] = pd.to_datetime(df["sana"])
df = df.set_index("sana") # sana — indeks
# sana bo'yicha tanlash
df.loc["2024"] # 2024 yil
df.loc["2024-01"] # 2024 yanvar
df.loc["2024-01-01":"2024-01-31"] # oraliq
df.sort_index() # sana bo'yicha tartib Sana indeks va tanlash — sana indeks: df.set_index("sana") (sana — indeks; vaqt qatori), keyin sana bo'yicha tanlash (df.loc["2024"] — yil; df.loc["2024-01"] — oy; df.loc["2024-01-01":"2024-01-31"] — oraliq). Sabab: vaqt qatorida sana indeks (tabiiy — vaqt bo'yicha tartib, tanlash); sana indeksda qulay tanlash (loc["2024"] — butun yil; qism-sana — avtomatik). set_index("sana") (sana indeks), sort_index (tartib — vaqt). Sana indeks resample uchun kerak 2.4-bob. Sana indeks — set_index (vaqt qatori), loc["2024"] tanlash. Indeks. Qulay.
2.4. resample (vaqt guruh)
Vaqt bo'yicha guruhlash:
# resample — vaqt bo'yicha guruh (sana indeks kerak)
df.set_index("sana")["savdo"].resample("ME").sum() # oylik jami
df.set_index("sana")["savdo"].resample("W").mean() # haftalik o'rtacha
df.set_index("sana")["savdo"].resample("YE").sum() # yillik
# chastota: D (kun), W (hafta), ME (oy oxiri), QE (chorak), YE (yil) resample (vaqt guruh) — vaqt bo'yicha guruhlash: df.resample("ME").sum() (oylik jami — kunlik → oylik), resample("W").mean() (haftalik o'rtacha), resample("YE").sum() (yillik). Sabab: vaqt qatori ko'pincha boshqa darajada kerak (kunlik savdo → oylik trend — 365 → 12; ko'rish oson); resample vaqt groupby (guruhlash — lekin vaqt bo'yicha; 3.8 kabi). Chastota: D (kun), W (hafta), ME (oy oxiri), QE (chorak), YE (yil). Sana indeks kerak (set_index). resample = groupby (vaqt bo'yicha). resample — vaqt guruh (kunlik→oylik). Chastota. Sana indeks.
2.5. shift va pct_change (o'sish)
Siljitish va o'sish:
oylik = df.resample("ME")["savdo"].sum()
# shift — qiymatni siljitish (o'tgan davr)
oylik.shift(1) # bir oy oldingi qiymat
# farq (o'tgan oyga nisbatan)
oylik - oylik.shift(1) # o'zgarish (miqdor)
# pct_change — foizli o'sish
oylik.pct_change() # o'tgan oyga nisbatan o'sish (%) shift va pct_change (o'sish) — siljitish va o'sish: shift(1) (qiymatni siljitish — bir davr oldingi; oylik.shift(1) — o'tgan oy qiymati), pct_change (foizli o'sish — o'tgan davrga nisbatan; oylik.pct_change() — oylik o'sish %). Sabab: vaqt qatorida o'zgarish/o'sish muhim (bu oy o'tganga nisbatan qancha o'sdi — trend); shift (oldingi qiymat — solishtirish), pct_change (foizli o'sish — (hozir - oldin)/oldin). O'sish sur'ati (moliya, savdo — trend). shift (siljitish), pct_change (foizli o'sish). shift/pct_change — o'sish (o'tgan davrga nisbatan). Trend. Sur'at.
2.6. Vaqt amaliyoti
Vaqt amaliyoti: to_datetime (matn → sana — birinchi qadam); .dt (qismlar — year/month/dayofweek); set_index (sana indeks — vaqt qatori); resample (vaqt guruh — kunlik→oylik); shift/pct_change (o'sish — trend); sort_index (vaqt tartibi); date_range (sanalar — pd.date_range("2024-01-01", periods=12, freq="ME")). Tuzoqlar: matn (.dt xato — to_datetime), format (noaniq — format=), sana indeks (resample kerak), chastota (D/W/ME — noto'g'ri), tartib (resample — sort_index). Amaliyot — to_datetime, .dt, resample, shift. Sana turi. Trend.
2.7. Vaqt tuzoqlari
Vaqt asosiy tuzoqlari: matn (sana emas) (CSV sana — matn (object); .dt/resample xato; pd.to_datetime avval; df.dtypes tekshir); format noaniq ("01/02/2024" — 1-fevral yoki 2-yanvar? mamlakat farqli; format= yoki dayfirst=); sana indeks yo'q (resample — sana indeks kerak; set_index("sana") avval; aks holda xato); chastota kodi ("M" eski — "ME" (oy oxiri) yangi; D/W/ME/YE; noto'g'ri kod xato); tartiblanmagan (vaqt qatori — sana tartibida bo'lishi kerak; sort_index; resample tartib talab); timezone (vaqt zonasi — murakkab; tz_localize/tz_convert; oddiy holda e'tiborsiz); NaT (Not a Time — sana NaN; to_datetime(errors="coerce") — xato → NaT); dayofweek (0 Dushanba, 6 Yakshanba — 0-6; 1 dan emas). Sabab: vaqt tur/indeks/format nozik (matn, chastota, indeks — jim xato). Yechim: to_datetime avval, sana indeks, chastota to'g'ri, sort_index. Tuzoqlar — matn, format, indeks, chastota.
2.8. Vaqt qatorlari — vaqtga bog'liq tahlil
Vaqt qatorlari asosiy g'oyasi — vaqtga bog'liq tahlil: ko'p ma'lumot vaqtga bog'liq (kunlik savdo, oylik daromad, soatlik harorat — time series); Pandas vaqt bilan kuchli (sana tanish, qismlar, resample, o'sish). to_datetime (matn → sana — datetime64, sana amallari), .dt (qismlar — yil/oy/hafta), sana indeks (set_index — vaqt qatori, loc tanlash), resample (vaqt guruh — kunlik→oylik, trend), shift/pct_change (o'sish — o'tgan davrga nisbatan). Vaqt qatori tahlili: trend (o'sish/pasayish), mavsumiylik (yoz savdo yuqori), o'sish sur'ati. Data Science'da keng (savdo, moliya, sensor, veb — vaqtga bog'liq; bashorat — 21-qism). Bu 3.8 (groupby — resample) davomi va vaqt qatori bashorati uchun asos. Vaqt qatorlari — vaqtga bog'liq tahlil (datetime, resample, trend). Time series. Trend/mavsumiylik.
3. Tez ma'lumotnoma
import pandas as pd
# to_datetime (matn → sana):
df["sana"] = pd.to_datetime(df["sana"])
pd.to_datetime("15/01/2024", format="%d/%m/%Y") # format
# SANA QISMLARI (.dt):
df["sana"].dt.year # yil
df["sana"].dt.month # oy (1-12)
df["sana"].dt.dayofweek # hafta kuni (0=Dush, 6=Yak)
df["sana"].dt.day_name() # kun nomi
# SANA INDEKS va TANLASH:
df = df.set_index("sana")
df.loc["2024-01"] # yanvar · df.loc["2024"] — yil
# resample (vaqt guruh — sana indeks kerak):
df["savdo"].resample("ME").sum() # oylik jami
df["savdo"].resample("W").mean() # haftalik o'rtacha
# D (kun) W (hafta) ME (oy) QE (chorak) YE (yil)
# shift / pct_change (o'sish):
oylik.shift(1) # o'tgan davr
oylik.pct_change() # foizli o'sish
QOIDA: to_datetime avval · .dt qismlar · sana indeks (resample) · sort_indexVaqt qatorlari xulosasi
Vaqt qatorlari — vaqtga bog'liq tahlil (trend, mavsumiylik)
to_datetime — matn → sana (datetime64, sana amallari)
.dt — sana qismlari (year/month/dayofweek)
resample — vaqt guruh (kunlik→oylik, sana indeks kerak)
shift/pct_change — o'sish (o'tgan davrga nisbatan)4. Batafsil misollar
Misollar real pandas bilan (deterministik) ishlaydi.
Misol 1 — to_datetime va .dt
"""to_datetime va .dt (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"sana": ["2024-01-15", "2024-06-20", "2024-12-25"],
"savdo": [100, 200, 150],
})
print("=== 1. Boshlang'ich tur (matn) ===")
print(f" tur: {df['sana'].dtype}")
print("\n=== 2. to_datetime ===")
df["sana"] = pd.to_datetime(df["sana"])
print(f" yangi tur: {df['sana'].dtype}")
print("\n=== 3. Qismlar (.dt) ===")
print(f" yillar: {list(df['sana'].dt.year)}")
print(f" oylar: {list(df['sana'].dt.month)}")
print("\n=== 4. Hafta kuni ===")
print(f" hafta kunlari (0=Dush): {list(df['sana'].dt.dayofweek)}")
print(" ⭐ to_datetime (sana) + .dt (qismlar)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Boshlang'ich tur (matn) ===
tur: str
=== 2. to_datetime ===
yangi tur: datetime64[us]
=== 3. Qismlar (.dt) ===
yillar: [2024, 2024, 2024]
oylar: [1, 6, 12]
=== 4. Hafta kuni ===
hafta kunlari (0=Dush): [0, 3, 2]
⭐ to_datetime (sana) + .dt (qismlar)Nima ko'rsatdi: 2.1, 2.2-bo'limlar.
Misol 2 — Sana indeks va tanlash
"""Sana indeks va tanlash (real pandas)."""
import pandas as pd
def main() -> None:
df = pd.DataFrame({
"sana": pd.to_datetime(["2024-01-05", "2024-01-20", "2024-02-10"]),
"savdo": [100, 150, 200],
})
df = df.set_index("sana")
print("=== 1. Sana indeks ===")
print(f" indeks turi: datetime")
print("\n=== 2. Yanvar tanlash ===")
yanvar = df.loc["2024-01"]
print(f" yanvar qatorlari: {len(yanvar)}")
print("\n=== 3. Yanvar jami ===")
print(f" yanvar savdo: {yanvar['savdo'].sum()}")
print("\n=== 4. Oraliq ===")
oraliq = df.loc["2024-01-01":"2024-01-31"]
print(f" oraliq: {len(oraliq)} qator")
print(" ⭐ Sana indeks — qulay tanlash (loc['2024-01'])")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Sana indeks ===
indeks turi: datetime
=== 2. Yanvar tanlash ===
yanvar qatorlari: 2
=== 3. Yanvar jami ===
yanvar savdo: 250
=== 4. Oraliq ===
oraliq: 2 qator
⭐ Sana indeks — qulay tanlash (loc['2024-01'])Nima ko'rsatdi: 2.3-bo'lim.
Misol 3 — resample
"""resample: vaqt guruh (real pandas)."""
import pandas as pd
def main() -> None:
sanalar = pd.date_range("2024-01-01", periods=90, freq="D")
df = pd.DataFrame({"savdo": range(100, 190)}, index=sanalar)
print("=== 1. Kunlik → oylik (sum) ===")
oylik = df["savdo"].resample("ME").sum()
print(f" oylar soni: {len(oylik)} (3 oy)")
print("\n=== 2. Oylik jami ===")
print(f" birinchi oy: {oylik.iloc[0]}")
print("\n=== 3. Haftalik o'rtacha ===")
haftalik = df["savdo"].resample("W").mean()
print(f" haftalar soni: {len(haftalik)}")
print("\n=== 4. Tushuntirish ===")
print(" resample — vaqt groupby (D→ME oylik)")
print(" ⭐ resample — vaqt bo'yicha guruh")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. Kunlik → oylik (sum) ===
oylar soni: 3 (3 oy)
=== 2. Oylik jami ===
birinchi oy: 3565
=== 3. Haftalik o'rtacha ===
haftalar soni: 13
=== 4. Tushuntirish ===
resample — vaqt groupby (D→ME oylik)
⭐ resample — vaqt bo'yicha guruhNima ko'rsatdi: 2.4-bo'lim.
Misol 4 — O'sish (pct_change)
"""O'sish: shift va pct_change (real pandas)."""
import pandas as pd
def main() -> None:
oylik = pd.Series(
[1000, 1200, 1100, 1500],
index=pd.to_datetime(["2024-01-31", "2024-02-29", "2024-03-31", "2024-04-30"]),
)
print("=== 1. shift (o'tgan oy) ===")
print(f" o'tgan oy: {list(oylik.shift(1).fillna(0).astype(int))}")
print("\n=== 2. Farq (miqdor) ===")
farq = (oylik - oylik.shift(1)).fillna(0).astype(int)
print(f" o'zgarish: {list(farq)}")
print("\n=== 3. pct_change (foiz) ===")
osish = (oylik.pct_change() * 100).round(1)
print(f" o'sish %: {list(osish.fillna(0))}")
print("\n=== 4. Eng ko'p o'sgan oy ===")
print(f" eng ko'p o'sish: {osish.max()}%")
print(" ⭐ pct_change — foizli o'sish (trend)")
if __name__ == "__main__":
main()Natijaning muhim qismi:
=== 1. shift (o'tgan oy) ===
o'tgan oy: [0, 1000, 1200, 1100]
=== 2. Farq (miqdor) ===
o'zgarish: [0, 200, -100, 400]
=== 3. pct_change (foiz) ===
o'sish %: [0.0, 20.0, -8.3, 36.4]
=== 4. Eng ko'p o'sgan oy ===
eng ko'p o'sish: 36.4%
⭐ pct_change — foizli o'sish (trend)Nima ko'rsatdi: 2.5-bo'lim.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "sana matn OK" | to_datetime (sana turi) |
| ".dt matnda ishlaydi" | Sana turi kerak |
| "resample indekssiz" | Sana indeks kerak |
| "dayofweek 1 dan" | 0 dan (0=Dush) |
| "format har doim aniq" | Noaniq (dd/mm vs mm/dd) |
| "M oy chastotasi" | ME (yangi kod) |
| "resample = groupby emas" | Vaqt groupby |
| "shift keraksiz" | O'sish (o'tgan davr) |
6. Keng tarqalgan xatolar va yechimlari
1. Matn sana
df["sana"].dt.year # matn bo'lsa xato # ⚠️
df["sana"] = pd.to_datetime(df["sana"]) # avval sana # ✅2. Format noaniq
pd.to_datetime("01/02/2024") # 1-fev yoki 2-yan? # ⚠️
pd.to_datetime("01/02/2024", format="%d/%m/%Y") # aniq # ✅3. resample indeks
df["savdo"].resample("ME") # sana indeks yo'q (xato) # ⚠️
df.set_index("sana")["savdo"].resample("ME") # indeks # ✅4. Chastota kodi
df.resample("M") # eski kod (ogohlantirish) # ⚠️
df.resample("ME") # yangi (oy oxiri) # ✅5. Tartiblanmagan
df.resample("ME") # sana tartibsiz # ⚠️
df.sort_index().resample("ME") # avval tartib # ✅6. NaT (sana NaN)
pd.to_datetime(df["sana"]) # xato sana → xato # ⚠️
pd.to_datetime(df["sana"], errors="coerce") # xato → NaT # ✅7. dayofweek
df["sana"].dt.dayofweek == 1 # Dushanba deb (aslida 0) # ⚠️
df["sana"].dt.dayofweek == 0 # Dushanba (0 dan) # ✅7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 3.8-dars (o'tilgan): groupby (resample — vaqt guruh)
- 3.3-dars (o'tilgan): O'qish (sana ustuni)
- 5-qism: Vizualizatsiya (vaqt qatori grafigi)
- 21-qism: Vaqt qatori bashorati
- 4-qism: Statistika (trend, mavsumiylik)
8. Eng yaxshi amaliyotlar
to_datetime— avval (matn → sana)..dt— qismlar (sana turida).Sana indeks —
set_index(resample kerak).resample— vaqt guruh (D/W/ME/YE).sort_index— vaqt tartibi.shift/pct_change— o'sish (trend).format=/errors— noaniq/xato sana.Vaqt qatorlari — vaqtga bog'liq tahlil.
9. Amaliy topshiriq
Vazifa 1: Bashorat qiling
1. # to_datetime nima?
2. # nega sana turi?
3. # .dt nima?
4. # dayofweek nechadan?
5. # sana indeks nima uchun?
6. # resample nima?
7. # resample = ?
8. # chastota kodlari?
9. # shift nima?
10. # pct_change nima?
11. # matn sana .dt?
12. # nega vaqt qatori muhim?Javoblar
- Matn → sana
- Sana amallari (.dt, resample)
- Sana qismlari (year/month)
- 0 dan (0=Dush)
- Vaqt qatori (resample, tanlash)
- Vaqt bo'yicha guruh
- groupby (vaqt)
- D/W/ME/QE/YE
- Siljitish (o'tgan davr)
- Foizli o'sish
- Xato (to_datetime kerak)
- Vaqtga bog'liq (trend, mavsumiylik)
Vazifa 2: Xatolarni tuzating
1. df["sana"].dt.year # matn
2. pd.to_datetime("01/02/2024") # noaniq
3. df["savdo"].resample("ME") # indeks yo'q
4. df.resample("M") # eski kod
5. df["sana"].dt.dayofweek == 1 # DushanbaJavoblar
1. pd.to_datetime(df["sana"]) avval
2. format="%d/%m/%Y"
3. df.set_index("sana")
4. df.resample("ME")
5. == 0 # 0=DushanbaVazifa 3: to_datetime
Modellang:
- Matn→sana
- Format
- Tur
- errors
Vazifa 4: .dt
Modellang:
- year
- month
- dayofweek
- Vektorlashtirilgan
Vazifa 5: resample
Modellang:
- Vaqt guruh
- Chastota
- Sana indeks
- Trend
Vazifa 6: O'sish
Modellang:
- shift
- pct_change
- O'tgan davr
- Foiz
Vazifa 7: O'ylash
resample aslida "vaqt bo'yicha groupby" — kunlik ma'lumotni oylikka guruhlaydi. Nima uchun vaqt uchun alohida resample bor (oddiy groupby o'rniga), va nega vaqt ma'lumoti (sana) boshqa ma'lumotdan (matn, son) "maxsus" — nega uni datetime turiga aylantirish shart?
Javob
Qisqa javob: resample — vaqt groupby, lekin alohida; sana maxsus tur, chunki: (1) vaqt uzluksiz/tartibli — sana tabiiy tartib (kun ketma-ket; matn/son — ixtiyoriy); vaqt oraliqlar (oy, hafta — teng bo'linmagan: 28-31 kun; groupby oddiy guruh — teng emas); resample vaqt mantiqi (oy oxiri, hafta boshi — kalendar biladi); (2) oraliq to'ldirish — vaqt qatorida bo'sh davrlar (savdo yo'q kun — resample 0 yoki NaN qo'yadi; groupby o'tkazib yuboradi); vaqt uzluksiz (har kun bo'lishi kerak — resample to'ldiradi); (3) vaqt amallari — shift (o'tgan davr), pct_change (o'sish), rolling (harakatlanuvchi o'rtacha) — vaqtga xos; oddiy guruhda yo'q. "Nega sana maxsus (datetime tur)": (a) tartib mantiqi — sana taqqoslanadi ("2024-01-01" < "2024-02-01" — sana; matnda ham lekin format bog'liq — "01/02" vs "02/01"); datetime aniq (tartib, farq); (b) qismlar — datetime'dan yil/oy/kun (.dt — matnda parse qilish kerak; datetime avtomatik); (c) farq/arifmetika — ikki sana farqi (kunlar — sana2 - sana1; matnda yo'q; datetime — timedelta); (d) kalendar — datetime kalendarni biladi (oyda nechta kun, kabisa yil, hafta kuni; matn bilmaydi); (e) resample/vaqt amallari — datetime kerak (matn — ishlamaydi). "Nega aylantirish shart": matn ("2024-01-01") — oddiy string (sana ma'nosi yo'q — taqqoslash format, qism yo'q, farq yo'q); to_datetime — sana ma'nosi (datetime64 — tartib, qism, farq, kalendar); vaqt tahlili datetime talab (.dt, resample, shift). Saboqlar: resample vaqt groupby (kalendar mantiqi — teng bo'linmagan oy; to'ldirish; vaqt amallari); sana maxsus (tartib, qism, farq, kalendar — datetime); aylantirish shart (matn — ma'no yo'q; datetime — sana amallari); vaqt uzluksiz (bo'sh to'ldirish). To'g'ri: to_datetime avval (matn → sana); resample (vaqt guruh — sana indeks). Muvozanat: umumiy (groupby — istalgan) + maxsus (resample — vaqt kalendar) — vaqt uchun resample (kalendar mantiqi). Bu vaqt qatori tabiati (uzluksiz, tartibli, kalendar — maxsus ishlov); datetime tur — vaqt "tili" (sana amallari). resample/datetime — vaqt uchun maxsus vosita (oddiy guruh yetmaydi).
1. Nega resample alohida
- Vaqt tartibli/uzluksiz (kalendar — teng bo'linmagan oy)
- Oraliq to'ldirish (bo'sh davr — 0/NaN)
- Vaqt amallari (shift, pct_change, rolling)
2. Nega sana maxsus
- Tartib mantiqi (taqqoslash — aniq)
- Qismlar (
.dt— yil/oy/kun) - Farq (kunlar — sana2-sana1)
- Kalendar (oy kuni, kabisa, hafta)
3. Nega aylantirish shart
- Matn — oddiy string (sana ma'nosi yo'q)
- datetime — sana ma'nosi (tartib, qism, farq)
- Vaqt tahlil datetime talab (.dt, resample)
4. Matn vs datetime
| Matn | datetime |
|---|---|
| String (ma'no yo'q) | Sana (tartib, qism) |
| Taqqoslash format | Aniq tartib |
| Qism yo'q | .dt (yil/oy) |
5. Saboqlar
- resample vaqt groupby (kalendar mantiqi)
- Sana maxsus (tartib, qism, farq, kalendar)
- Aylantirish shart (matn → datetime)
- Vaqt uzluksiz (to'ldirish)
6. Xulosa
- resample alohida (vaqt kalendar mantiqi)
- Sana maxsus (datetime — sana amallari)
to_datetimeshart (matn — ma'no yo'q)- Vaqt uchun maxsus vosita (oddiy guruh yetmaydi)
Nimani mustahkamlaydi: 2.1, 2.4-bo'limlar.
Xulosa
Bu darsda vaqt qatorlarini o'rgandik.
Eng muhim uch fikr:
to_datetime va .dt.
to_datetime— matn → sana (pd.to_datetime(df["sana"])— datetime64 turi; sana amallari ochiladi;format=noaniq bo'lsa); sana CSV'dan matn keladi (sana turiga aylantirish shart). Sana qismlari (.dt) —.dt.year(yil),.dt.month(oy 1-12),.dt.dayofweek(hafta kuni — 0 Dushanba, 6 Yakshanba),.dt.day_name(),.dt.quarter; vektorlashtirilgan (har sana).Sana indeks va resample. Sana indeks —
df.set_index("sana")(vaqt qatori), sana bo'yicha tanlash (df.loc["2024-01"]— oy;df.loc["2024"]— yil; oraliq).resample— vaqt bo'yicha guruhlash (vaqt groupby):resample("ME").sum()(oylik jami — kunlik→oylik),resample("W").mean()(haftalik); chastotaD/W/ME/QE/YE; sana indeks kerak.O'sish va trend. shift/pct_change —
shift(1)(o'tgan davr qiymati),pct_change(foizli o'sish — o'tgan davrga nisbatan; trend). Vaqt qatorlari — vaqtga bog'liq tahlil (kunlik savdo, oylik daromad — trend, mavsumiylik, o'sish sur'ati); Data Science'da keng (savdo, moliya, sensor; bashorat — 21-qism). Sana maxsus tur (tartib, qism, farq, kalendar — datetime);resamplevaqt uchun alohida (kalendar mantiqi — teng bo'linmagan oy, to'ldirish). Tuzoqlar: matn sana (to_datetime), format noaniq (format=), sana indeks (resample), chastota (ME), tartib (sort_index).
Keyingi darsda pivot va reshapeni o'rganamiz: ma'lumotni qayta shakllantirish (pivot_table, melt) — jadval ko'rinishini o'zgartirish (uzun ↔ keng).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!