टाइम सीरीज़ वह डाटा अवलोकनों का संग्रह है जो समय के क्रम में इंडेक्स किया जाता है। ये अवलोकन सामान्यतः (परंतु अनिवार्य रूप से नहीं) नियमित समयांतराल पर रिकॉर्ड किए जाते हैं। टाइम सीरीज़ का उपयोग बैंकिंग, ट्रेडिंग, मार्केटिंग, विज्ञान और अन्य उद्योगों में व्यापक रूप से होता है। टाइम सीरीज़ डाटा का सबसे प्रचलित दृश्य प्रतिनिधित्व लाइन प्लॉट होता है, जिसमें समय x-अक्ष पर और मापा गया मान y-अक्ष पर दिखाया जाता है।
इस ट्यूटोरियल में, हम matplotlib—जो एक प्रमुख Python प्लॉटिंग लाइब्रेरी है—में टाइम सीरीज़ लाइन प्लॉट बनाना और उन्हें कस्टमाइज़ करना सीखेंगे।
matplotlib टाइम सीरीज़ प्लॉटिंग के साथ शुरुआत
लाइब्रेरी इम्पोर्ट करना और डाटा लोड करना
सबसे पहले, हम आवश्यक Python लाइब्रेरी इम्पोर्ट करेंगे और डाटा लोड करेंगे—Kaggle का डेटासेट Daily Exchange Rates per Euro 1999-2023। हम कुछ बुनियादी डाटा क्लीनिंग भी करेंगे:
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:,[0,4,28,-2]]
df.columns =['Date','CAD','NZD','USD']for col in['CAD','NZD','USD']:
df = df[df[col]!='-']
df[col]= pd.to_numeric(df[col])
df = df[df['Date']>='2022-12-01'].reset_index(drop=True)print(df.head(3))print(f'\nThe date range: {df.Date.min()}/{ df.Date.max()}')संचालित द्वारा
आउटपुट:
Date CAD NZD USD
02023-01-271.44791.67591.086512023-01-261.45681.67991.089522023-01-251.45441.67921.0878
The date range:2022-12-01/2023-01-27संचालित द्वारा
दिनांक/समय स्ट्रिंग्स को datetime ऑब्जेक्ट्स में बदलना
टाइम सीरीज़ के साथ कुशलतापूर्वक काम करने के लिए, हमें दिनांक या समय की स्ट्रिंग्स को pandas.to_datetime फ़ंक्शन से datetime ऑब्जेक्ट्स में बदलना होगा:
df['Date']= pd.to_datetime(df['Date'])print(df['Date'].dtypes)संचालित द्वारा
एक मल्टीपल-लाइन matplotlib टाइम सीरीज़ प्लॉट बनाना
मल्टीपल-लाइन टाइम सीरीज़ प्लॉट बनाने के लिए, हमें matplotlib.pyplot.plot(x, y) मेथड को आवश्यक बार चलाना होता है:
plt.plot(df.index, df['CAD'])
plt.plot(df.index, df['NZD'])
plt.plot(df.index, df['USD'])संचालित द्वारा
ऊपर दिए गए कोड को for लूप से बेहतर बनाया जा सकता है:
for col in['CAD','NZD','USD']:
plt.plot(df.index, df[col])संचालित द्वारा
आउटपुट:
matplotlib टाइम सीरीज़ प्लॉट्स को कस्टमाइज़ करना
अपने टाइम सीरीज़ लाइन प्लॉट को अधिक पठनीय और प्रभावी बनाने के लिए हमें इसे कस्टमाइज़ करना होगा। हम फ़िगर साइज बदलना, प्लॉट शीर्षक और अक्ष लेबल जोड़ना व कस्टमाइज़ करना, लाइन प्रॉपर्टीज़ में बदलाव करना, मार्कर्स जोड़ना व कस्टमाइज़ करना आदि जैसे सामान्य matplotlib समायोजन लागू कर सकते हैं। कुछ समायोजन टाइम सीरीज़ लाइन प्लॉट्स के लिए विशिष्ट होते हैं, जैसे समय-अक्ष के टिक्स और उनके लेबल्स को कस्टमाइज़ करना या कुछ समय अवधियों को हाइलाइट करना।
फ़िगर और एक्सिस को कस्टमाइज़ करना
मानक matplotlib मेथड्स का उपयोग करके, हम नीचे दिए गए कोड कमेंट्स में वर्णित कई तरीकों से टाइम सीरीज़ लाइन प्लॉट के फ़िगर और एक्सिस को कस्टमाइज़ कर सकते हैं:
# Adjusting the figure size
fig = plt.subplots(figsize=(16,5))# Creating a plot
plt.plot(df.index, df['CAD'])# Adding a plot title and customizing its font size
plt.title('EUR-CAD rate', fontsize=20)# Adding axis labels and customizing their font size
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)# Rotaing axis ticks and customizing their font size
plt.xticks(rotation=30, fontsize=15)# Changing the plot resolution - zooming in the period from 15.12.2022 till 15.01.2023
plt.xlim(pd.Timestamp('2022-12-15'), pd.Timestamp('2023-01-15'))संचालित द्वारा
आउटपुट:
लाइन प्रॉपर्टीज़ को कस्टमाइज़ करना
सामान्य लाइन प्लॉट्स की तरह, टाइम सीरीज़ लाइन प्लॉट की लाइन प्रॉपर्टीज़—जैसे रंग, स्टाइल या चौड़ाई—बदली जा सकती हैं:
plt.plot(df.index, df['CAD'], color='green', linestyle='dashed', linewidth=3)संचालित द्वारा
आउटपुट:
मार्कर्स जोड़ना और कस्टमाइज़ करना
किसी भी लाइन प्लॉट की तरह, हम टाइम सीरीज़ लाइन प्लॉट पर मार्कर्स लगा सकते हैं और उनके चिन्ह, रंग, किनारे का रंग, तथा आकार को कस्टमाइज़ कर सकते हैं:
plt.plot(df.index, df['CAD'], marker='o', markerfacecolor='yellow', markeredgecolor='red', markersize=8)संचालित द्वारा
टाइम अक्ष के टिक्स को कस्टमाइज़ करना
पहले कुछ आवश्यक कस्टमाइज़ेशन के साथ एक बेसिक matplotlib टाइम सीरीज़ लाइन प्लॉट बनाते हैं:
हम देखते हैं कि डिफ़ॉल्ट रूप से matplotlib कुछ मनमाने टिक्स और उनके लेबल दिखाता है। परंतु, हम समय-अक्ष पर प्रदर्शित होने वाले टिक्स पर नियंत्रण रखना चाह सकते हैं। इस स्थिति में, हमें वांछित तिथियों (या समय) की सूची स्ट्रिंग्स या pandas टाइमस्टैम्प्स के रूप में matplotlib.pyplot.xticks मेथड को देनी होगी:
fig = plt.subplots(figsize=(16,5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())# Defining and displaying time axis ticks
ticks =['2022-12-05','2023-01-02','2023-01-20']
plt.xticks(ticks)संचालित द्वारा
आउटपुट:
ऊपर, matplotlib ने चुने गए टिक्स दिखाए और स्वचालित रूप से उन्हें लेबल कर दिया।
यदि हम सभी टिक्स दिखाना चाहें, तो हमें टाइम सीरीज़ इंडेसेज़ की सूची matplotlib.pyplot.xticks मेथड को देनी चाहिए:
fig = plt.subplots(figsize=(16,5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())# Defining and displaying all time axis ticks
ticks =list(df.index)
plt.xticks(ticks, rotation=45)संचालित द्वारा
आउटपुट:
टाइम अक्ष के टिक लेबल्स को कस्टमाइज़ करना
ऊपर दिए गए लाइन प्लॉट पर समय-अक्ष के टिक लेबल्स भारी लग सकते हैं। हम उन्हें अधिक पठनीय बनाने के लिए फॉर्मैट करना चाहेंगे। इसके लिए, हम matplotlib.dates.DateFormatter क्लास का उपयोग कर सकते हैं और उसे एक strftime फॉर्मैट स्ट्रिंग पास कर सकते हैं, जैसा कि हम दिनांक/समय देखना चाहते हैं। फिर, इस फॉर्मैटर को matplotlib.axis.XAxis.set_major_formatter मेथड को देते हैं:
यह डॉक्यूमेंटेशन पेज सभी संभावित strftime फॉर्मैट कोड्स की विस्तृत सूची देता है।
कुछ समय अवधियों को हाइलाइट करना
कभी-कभी, हम टाइम सीरीज़ लाइन प्लॉट पर कुछ विशेष समय अवधियों को शेड करना चाहेंगे। इसके लिए, हम matplotlib.pyplot.axvspan मेथड का उपयोग कर सकते हैं। यह दो आवश्यक आर्ग्यूमेंट्स लेता है: रुचि वाली अवधि के आरंभ और अंत के समय बिंदु, datetime फॉर्मैट में। यह मेथड हाइलाइटेड क्षेत्र की उपस्थिति को कस्टमाइज़ करने हेतु कुछ वैकल्पिक पैरामीटर्स भी ले सकता है, जैसे रंग, किनारे का रंग, पारदर्शिता, लाइन चौड़ाई, या फिलिंग पैटर्न।
आइए, पिछले सेक्शन के प्लॉट पर इस तकनीक को लागू करें:
fig, ax = plt.subplots(figsize=(16,5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks =list(df.index)
plt.xticks(ticks, rotation=45)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))# Highlighting the time period from 15.12.2022 to 1.01.2023 and customizing the shaded area
plt.axvspan(datetime(2022,12,15), datetime(2023,1,1), facecolor='yellow', alpha=0.5, hatch='/', edgecolor='red', linewidth=5)संचालित द्वारा
आउटपुट:
matplotlib टाइम सीरीज़ लाइन प्लॉट को फाइल में सेव करना
हम केवल प्लॉट को प्रदर्शित करने के बजाय उसे इमेज फाइल में सेव करने का विकल्प भी चुन सकते हैं। इसके लिए, हम matplotlib.pyplot.savefig मेथड का उपयोग करते हैं और फाइल का नाम पास करते हैं। उदाहरण के तौर पर, अपने पहले बेसिक प्लॉट पर लौटते हैं:
plt.plot(df.index, df['CAD'])# Saving the resulting plot to a file
plt.savefig('time series line plot.png')संचालित द्वारा
ऊपर, हमने प्लॉट को time series line plot.png नामक फाइल में सेव किया है, जो हमारे वर्तमान प्रोग्राम के समान स्थान पर मौजूद है।
निष्कर्ष
सार रूप में, इस ट्यूटोरियल में हमने matplotlib में टाइम सीरीज़ लाइन प्लॉट बनाना और उन्हें कस्टमाइज़ करना सीखा—चाहे सामान्य matplotlib मेथड्स हों या केवल टाइम सीरीज़ विजुअलाइज़ेशन्स के लिए विशिष्ट उन्नत तकनीकें।
इन बुनियादी तकनीकों को सीखने के बाद, आप Python में टाइम सीरीज़ डाटा के साथ और गहराई से काम करना और उन्हें विजुअलाइज़ करना चाहेंगे। ऐसे में, निम्नलिखित व्यापक, शुरुआती-अनुकूल और एंड-टू-एंड संसाधनों का अन्वेषण करें:
टाइम सीरीज़ वह डाटा अवलोकनों का संग्रह है जो समय के क्रम में इंडेक्स किया जाता है। ये अवलोकन सामान्यतः (परंतु अनिवार्य रूप से नहीं) नियमित समयांतराल पर रिकॉर्ड किए जाते हैं। टाइम सीरीज़ का उपयोग बैंकिंग, ट्रेडिंग, मार्केटिंग, विज्ञान और अन्य उद्योगों में व्यापक रूप से होता है। टाइम सीरीज़ डाटा का सबसे प्रचलित दृश्य प्रतिनिधित्व लाइन प्लॉट होता है, जिसमें समय x-अक्ष पर और मापा गया मान y-अक्ष पर दिखाया जाता है।
इस ट्यूटोरियल में, हम matplotlib—जो एक प्रमुख Python प्लॉटिंग लाइब्रेरी है—में टाइम सीरीज़ लाइन प्लॉट बनाना और उन्हें कस्टमाइज़ करना सीखेंगे।
matplotlib टाइम सीरीज़ प्लॉटिंग के साथ शुरुआत
लाइब्रेरी इम्पोर्ट करना और डाटा लोड करना
सबसे पहले, हम आवश्यक Python लाइब्रेरी इम्पोर्ट करेंगे और डाटा लोड करेंगे—Kaggle का डेटासेट Daily Exchange Rates per Euro 1999-2023। हम कुछ बुनियादी डाटा क्लीनिंग भी करेंगे:
आउटपुट:
दिनांक/समय स्ट्रिंग्स को datetime ऑब्जेक्ट्स में बदलना
टाइम सीरीज़ के साथ कुशलतापूर्वक काम करने के लिए, हमें दिनांक या समय की स्ट्रिंग्स को
pandas.to_datetimeफ़ंक्शन से datetime ऑब्जेक्ट्स में बदलना होगा:आउटपुट:
यदि आपको Python में टाइम सीरीज़ पर काम करने का रिफ्रेशर चाहिए, तो Manipulating Time Series Data in Python कोर्स उपयोगी लग सकता है।
datetime कॉलम को डेटाफ़्रेम इंडेक्स के रूप में सेट करना
अब, चलिए
Dateकॉलम को set_index मेथड की मदद से डेटाफ़्रेम इंडेक्स बनाते हैं:आउटपुट:
एक बेसिक सिंगल-लाइन matplotlib टाइम सीरीज़ प्लॉट बनाना
बेसिक टाइम सीरीज़ लाइन प्लॉट बनाने के लिए, हम मानक
matplotlib.pyplot.plot(x, y)मेथड का उपयोग करते हैं:आउटपुट:
एक मल्टीपल-लाइन matplotlib टाइम सीरीज़ प्लॉट बनाना
मल्टीपल-लाइन टाइम सीरीज़ प्लॉट बनाने के लिए, हमें
matplotlib.pyplot.plot(x, y)मेथड को आवश्यक बार चलाना होता है:ऊपर दिए गए कोड को for लूप से बेहतर बनाया जा सकता है:
आउटपुट:
matplotlib टाइम सीरीज़ प्लॉट्स को कस्टमाइज़ करना
अपने टाइम सीरीज़ लाइन प्लॉट को अधिक पठनीय और प्रभावी बनाने के लिए हमें इसे कस्टमाइज़ करना होगा। हम फ़िगर साइज बदलना, प्लॉट शीर्षक और अक्ष लेबल जोड़ना व कस्टमाइज़ करना, लाइन प्रॉपर्टीज़ में बदलाव करना, मार्कर्स जोड़ना व कस्टमाइज़ करना आदि जैसे सामान्य matplotlib समायोजन लागू कर सकते हैं। कुछ समायोजन टाइम सीरीज़ लाइन प्लॉट्स के लिए विशिष्ट होते हैं, जैसे समय-अक्ष के टिक्स और उनके लेबल्स को कस्टमाइज़ करना या कुछ समय अवधियों को हाइलाइट करना।
फ़िगर और एक्सिस को कस्टमाइज़ करना
मानक matplotlib मेथड्स का उपयोग करके, हम नीचे दिए गए कोड कमेंट्स में वर्णित कई तरीकों से टाइम सीरीज़ लाइन प्लॉट के फ़िगर और एक्सिस को कस्टमाइज़ कर सकते हैं:
आउटपुट:
लाइन प्रॉपर्टीज़ को कस्टमाइज़ करना
सामान्य लाइन प्लॉट्स की तरह, टाइम सीरीज़ लाइन प्लॉट की लाइन प्रॉपर्टीज़—जैसे रंग, स्टाइल या चौड़ाई—बदली जा सकती हैं:
आउटपुट:
मार्कर्स जोड़ना और कस्टमाइज़ करना
किसी भी लाइन प्लॉट की तरह, हम टाइम सीरीज़ लाइन प्लॉट पर मार्कर्स लगा सकते हैं और उनके चिन्ह, रंग, किनारे का रंग, तथा आकार को कस्टमाइज़ कर सकते हैं:
टाइम अक्ष के टिक्स को कस्टमाइज़ करना
पहले कुछ आवश्यक कस्टमाइज़ेशन के साथ एक बेसिक matplotlib टाइम सीरीज़ लाइन प्लॉट बनाते हैं:
आउटपुट:
हम देखते हैं कि डिफ़ॉल्ट रूप से matplotlib कुछ मनमाने टिक्स और उनके लेबल दिखाता है। परंतु, हम समय-अक्ष पर प्रदर्शित होने वाले टिक्स पर नियंत्रण रखना चाह सकते हैं। इस स्थिति में, हमें वांछित तिथियों (या समय) की सूची स्ट्रिंग्स या pandas टाइमस्टैम्प्स के रूप में
matplotlib.pyplot.xticksमेथड को देनी होगी:आउटपुट:
ऊपर, matplotlib ने चुने गए टिक्स दिखाए और स्वचालित रूप से उन्हें लेबल कर दिया।
यदि हम सभी टिक्स दिखाना चाहें, तो हमें टाइम सीरीज़ इंडेसेज़ की सूची
matplotlib.pyplot.xticksमेथड को देनी चाहिए:आउटपुट:
टाइम अक्ष के टिक लेबल्स को कस्टमाइज़ करना
ऊपर दिए गए लाइन प्लॉट पर समय-अक्ष के टिक लेबल्स भारी लग सकते हैं। हम उन्हें अधिक पठनीय बनाने के लिए फॉर्मैट करना चाहेंगे। इसके लिए, हम
matplotlib.dates.DateFormatterक्लास का उपयोग कर सकते हैं और उसे एक strftime फॉर्मैट स्ट्रिंग पास कर सकते हैं, जैसा कि हम दिनांक/समय देखना चाहते हैं। फिर, इस फॉर्मैटर कोmatplotlib.axis.XAxis.set_major_formatterमेथड को देते हैं:आउटपुट:
यह डॉक्यूमेंटेशन पेज सभी संभावित strftime फॉर्मैट कोड्स की विस्तृत सूची देता है।
कुछ समय अवधियों को हाइलाइट करना
कभी-कभी, हम टाइम सीरीज़ लाइन प्लॉट पर कुछ विशेष समय अवधियों को शेड करना चाहेंगे। इसके लिए, हम
matplotlib.pyplot.axvspanमेथड का उपयोग कर सकते हैं। यह दो आवश्यक आर्ग्यूमेंट्स लेता है: रुचि वाली अवधि के आरंभ और अंत के समय बिंदु, datetime फॉर्मैट में। यह मेथड हाइलाइटेड क्षेत्र की उपस्थिति को कस्टमाइज़ करने हेतु कुछ वैकल्पिक पैरामीटर्स भी ले सकता है, जैसे रंग, किनारे का रंग, पारदर्शिता, लाइन चौड़ाई, या फिलिंग पैटर्न।आइए, पिछले सेक्शन के प्लॉट पर इस तकनीक को लागू करें:
आउटपुट:
matplotlib टाइम सीरीज़ लाइन प्लॉट को फाइल में सेव करना
हम केवल प्लॉट को प्रदर्शित करने के बजाय उसे इमेज फाइल में सेव करने का विकल्प भी चुन सकते हैं। इसके लिए, हम matplotlib.pyplot.savefig मेथड का उपयोग करते हैं और फाइल का नाम पास करते हैं। उदाहरण के तौर पर, अपने पहले बेसिक प्लॉट पर लौटते हैं:
ऊपर, हमने प्लॉट को time series line plot.png नामक फाइल में सेव किया है, जो हमारे वर्तमान प्रोग्राम के समान स्थान पर मौजूद है।
निष्कर्ष
सार रूप में, इस ट्यूटोरियल में हमने matplotlib में टाइम सीरीज़ लाइन प्लॉट बनाना और उन्हें कस्टमाइज़ करना सीखा—चाहे सामान्य matplotlib मेथड्स हों या केवल टाइम सीरीज़ विजुअलाइज़ेशन्स के लिए विशिष्ट उन्नत तकनीकें।
इन बुनियादी तकनीकों को सीखने के बाद, आप Python में टाइम सीरीज़ डाटा के साथ और गहराई से काम करना और उन्हें विजुअलाइज़ करना चाहेंगे। ऐसे में, निम्नलिखित व्यापक, शुरुआती-अनुकूल और एंड-टू-एंड संसाधनों का अन्वेषण करें: