समय-श्रृंखला का पुनः नमूनीकरण
resample('ME').sum() से दैनिक डेटा को मासिक बनाएँ और गुम अंतराल भरने के लिए आगे के मान से upsample करें।
समय-श्रृंखला का पुनः नमूनीकरण, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
पुनः नमूना लेना क्या है
Resampling समय-श्रृंखला की आवृत्ति बदलता है। Downsampling आवृत्ति घटाता है—उदाहरण के लिए, दैनिक डेटा को मासिक योग में बदलना। Upsampling आवृत्ति बढ़ाता है—उदाहरण के लिए, मासिक डेटा को दैनिक डेटा में बदलना और रिक्त स्थानों को इंटरपोलेट किए गए मानों से भरना। दोनों संचालन के लिए DatetimeIndex आवश्यक है और इन्हें resample() विधि से किया जाता है, जो Pandas का समय-जागरूक groupby() संस्करण है।
resample() विधि
df.resample(rule) एक DatetimeIndexResampler ऑब्जेक्ट बनाता है, जिसमें rule एक आवृत्ति ऑफ़सेट उपनाम होता है। groupby() की तरह, जब तक आप कोई समुच्चयन विधि श्रृंखलाबद्ध नहीं करते, तब तक कुछ भी गणना नहीं की जाती। सामान्य नियम हैं: 'D' (दिन), 'W' (सप्ताह), 'ME' (महीने का अंत), 'QE' (तिमाही का अंत) और 'YE' (वर्ष का अंत)। DataFrame में DatetimeIndex होना चाहिए।
import pandas as pd
import numpy as np
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=90, freq='D')
df = pd.DataFrame({'sales': np.random.randint(100, 500, 90)}, index=dates)
print(df.head())
print('Shape:', df.shape) # (90, 1) -- 90 daily rowsDownsampling: दैनिक से मासिक
दैनिक डेटा को मासिक में बदलने के लिए resample('ME') को कॉल करें और उसके साथ कोई समुच्चयन जोड़ें। sum() मासिक योग देता है; mean() मासिक औसत देता है; last() प्रत्येक पीरियड का अंतिम मान देता है। परिणाम में प्रत्येक पीरियड के लिए एक पंक्ति होती है और इंडेक्स लेबल के रूप में पीरियड की अंतिम तारीख होती है।
# Monthly totals
monthly_sum = df.resample('ME').sum()
print(monthly_sum)
# sales
# 2024-01-31 9876
# 2024-02-29 8765
# 2024-03-31 9234
# Monthly averages
monthly_mean = df.resample('ME').mean().round(1)
print(monthly_mean)साप्ताहिक Downsampling
रविवार को समाप्त होने वाले कैलेंडर सप्ताह के अनुसार समुच्चयन करने के लिए 'W' से पुनः नमूना लें। यदि आप सोमवार को समाप्त होने वाले सप्ताह चाहते हैं, तो 'W-MON' का उपयोग करें। Pandas प्रत्येक सप्ताह की सभी तारीखों को एक साथ समूहित करके समुच्चयन लागू करता है। यह साप्ताहिक रिपोर्टिंग के लिए उपयोगी है, जहाँ आप प्रत्येक सप्ताह के लिए एक सारांश पंक्ति चाहते हैं।
# Weekly sum
weekly = df.resample('W').sum()
print(weekly.head())
# sales
# 2024-01-07 2010 <- Jan 1-7
# 2024-01-14 2340 <- Jan 8-14
# ...
# Weekly max and count using agg()
weekly_stats = df.resample('W').agg(['sum', 'mean', 'max'])
print(weekly_stats.head())एकाधिक समुच्चयन लागू करना
groupby() की तरह, आप एक ही चरण में कई आँकड़े निकालने के लिए resampler पर .agg() श्रृंखलाबद्ध कर सकते हैं। फ़ंक्शन नामों की सूची या नामित समुच्चयनों के लिए शब्दकोश दें। विस्तृत समय-श्रृंखला सारणी बनाने का यह सबसे कुशल तरीका है।
monthly_stats = df.resample('ME').agg(
total_sales=('sales', 'sum'),
avg_sales=('sales', 'mean'),
peak_sales=('sales', 'max'),
days_counted=('sales', 'count')
)
print(monthly_stats.round(1))
# total_sales avg_sales peak_sales days_counted
# 2024-01-31 9876 318.6 499 31वित्तीय डेटा के लिए OHLC पुनः नमूना
वित्तीय समय-श्रृंखलाओं के लिए .ohlc() विधि प्रत्येक पीरियड के Open, High, Low, Close (OHLC) मानों के लिए पुनः नमूना लेती है—यह मानक कैंडलस्टिक निरूपण है। इसका अर्थ केवल उस संख्यात्मक डेटा के लिए है जो किसी कीमत या स्तर को दर्शाता हो। इनपुट के प्रत्येक स्तंभ के लिए आउटपुट में चार OHLC स्तंभ मिलते हैं।
# OHLC monthly resampling
ohlc = df['sales'].resample('ME').ohlc()
print(ohlc)
# open high low close
# 2024-01-31 365 499 101 243
# 2024-02-29 ...Upsampling: मासिक से दैनिक
Upsampling आवृत्ति बढ़ाता है, जिससे उन टाइमस्टैम्प के लिए पंक्तियाँ बनती हैं जो मूल डेटा में मौजूद नहीं थे। इन नई पंक्तियों में शुरुआत में NaN होता है। इसके बाद उन्हें अपने डेटा के अनुरूप विधि से भरें: ffill() (आगे की ओर भरना—अंतिम ज्ञात मान को आगे ले जाना), bfill() (पीछे की ओर भरना—अगले ज्ञात मान का उपयोग करना) या सहज इंटरपोलेशन के लिए interpolate()।
# Monthly data
monthly = pd.Series(
[100, 120, 115],
index=pd.date_range('2024-01-31', periods=3, freq='ME')
)
print(monthly)
# Upsample to daily (creates NaN rows)
daily = monthly.resample('D').asfreq()
print(daily.head(10))
# 2024-01-31 100.0
# 2024-02-01 NaN <- new row
# ...Upsampling से बने रिक्त स्थान भरना
Upsampling के बाद नए टाइमस्टैम्प के लिए बने NaN रिक्त स्थानों को भरें। ffill() अगले वास्तविक अवलोकन तक अंतिम ज्ञात मान को आगे फैलाता है—यह उन कीमतों के लिए अच्छा है जहाँ अंतिम कारोबार की कीमत मान्य रहती है। interpolate(method='linear') अवलोकनों के बीच समान अंतर वाले रैखिक मानों से रिक्त स्थान भरता है—यह सहज रूप से बदलने वाले निरंतर चरों के लिए अच्छा है।
# Forward fill: carry monthly value forward to every day
daily_ffill = monthly.resample('D').ffill()
print(daily_ffill.head(35))
# 2024-01-31 100
# 2024-02-01 100 <- forward filled
# ...
# 2024-02-29 120 <- new month value
# Linear interpolation
daily_interp = monthly.resample('D').interpolate(method='linear')
print(daily_interp.head(10))समूहों के भीतर पुनः नमूना लेना
आप प्रत्येक समूह के भीतर अलग-अलग पुनः नमूना लेने के लिए groupby() और resample() को मिला सकते हैं। DatetimeIndex वाले DataFrame पर groupby(column).resample(rule) कॉल करें। इससे MultiIndex वाला परिणाम मिलता है, जिसमें बाहरी स्तर समूह कुंजी और आंतरिक स्तर पुनः नमूना लिया गया समय-पीरियड होता है—यह उत्पाद-स्तर या क्षेत्र-स्तर के समय-श्रृंखला विश्लेषण के लिए बहुत उपयोगी है।
df2 = pd.DataFrame({
'product': ['A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 150, 120, 130, 110, 160]
}, index=pd.date_range('2024-01-01', periods=6, freq='ME'))
# Monthly sum per product
result = df2.groupby('product').resample('QE').sum()
print(result)कस्टम ऑफ़सेट एंकरिंग
डिफ़ॉल्ट रूप से, 'ME' कैलेंडर महीने की अंतिम तारीखों पर एंकर होता है। गैर-मानक वित्तीय पीरियड के लिए 'QS-APR' (अप्रैल से शुरू होने वाली तिमाही) या 'YS-OCT' (अक्टूबर से शुरू होने वाला वर्ष) जैसे ऑफ़सेट का उपयोग करें। Pandas कई एंकर किए गए ऑफ़सेट उपनामों का समर्थन करता है। गैर-कैलेंडर वित्तीय पीरियड पर काम करते समय पूरी सूची के लिए Pandas का दस्तावेज़ देखें।
# Fiscal year starting in April
fiscal_annual = df.resample('YE-MAR').sum()
print(fiscal_annual)
# sales
# 2024-03-31 XXXX <- April 2023 to March 2024
# Quarter starting in April
fiscal_q = df.resample('QE-MAR').mean().round(0)
print(fiscal_q)पुनः नमूना लिए गए परिणाम की अखंडता जाँचना
पुनः नमूना लेने के बाद हमेशा जाँचें कि परिणाम तार्किक है। देखें कि आउटपुट पीरियड की संख्या अपेक्षा के अनुरूप है, कोई पीरियड छूटा नहीं है (आउटपुट में NaN खोजें), और sum() से Downsampling करने पर मासिक योग का कुल योग मूल दैनिक डेटा के कुल योग के बराबर है। ये तर्कसंगतता जाँचें आवृत्ति स्ट्रिंग में एक-इकाई के अंतर वाली त्रुटियों और छूटी हुई तारीख रेंज को पकड़ती हैं।
monthly = df.resample('ME').sum()
# Verify: monthly totals should sum to daily total
assert monthly['sales'].sum() == df['sales'].sum(), 'Sum mismatch!'
# Verify: expected number of months
print('Months:', len(monthly)) # should be 3 for 90 days Jan-Mar
# Check for any NaN
print('NaN count:', monthly.isna().sum().sum())त्वरित जाँच
इस पाठ से समय-श्रृंखला के पुनः नमूना लेने की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: समय-श्रृंखला की आवृत्ति बदलने के लिए resample(), groupby() का समय-जागरूक समकक्ष है; Downsampling डेटा का समुच्चयन करता है (sum/mean के साथ दैनिक से मासिक); Upsampling नए टाइमस्टैम्प बनाता है जिन्हें ffill() या interpolate() से भरना आवश्यक होता है; और समूह-स्तरीय समय समुच्चयन के लिए आप groupby() को resample() के साथ मिला सकते हैं। आगे हम शिफ्टिंग और लैग विशेषताओं का अध्ययन करेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “समय-श्रृंखला का पुनः नमूनीकरण” पाठ निःशुल्क है?
हाँ—“समय-श्रृंखला का पुनः नमूनीकरण” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“समय-श्रृंखला का पुनः नमूनीकरण” में मैं क्या सीखूँगा?
resample('ME').sum() से दैनिक डेटा को मासिक बनाएँ और गुम अंतराल भरने के लिए आगे के मान से upsample करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“समय-श्रृंखला का पुनः नमूनीकरण” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- DatetimeIndex और अवधि-रेंज
- समय-श्रृंखला का पुनः नमूनीकरण
- शिफ्टिंग और लैग फ़ीचर
- समय-संबंधी फ़ीचर निकालना