मुख्य सामग्री पर जाएँ

Matplotlib टाइम सीरीज़ लाइन प्लॉट

यह ट्यूटोरियल matplotlib में टाइम सीरीज़ लाइन प्लॉट बनाने और उन्हें कस्टमाइज़ करने की प्रक्रिया समझाता है।
· 8 मि॰ पढ़ें

AI के साथ खोजें

टाइम सीरीज़ वह डाटा अवलोकनों का संग्रह है जो समय के क्रम में इंडेक्स किया जाता है। ये अवलोकन सामान्यतः (परंतु अनिवार्य रूप से नहीं) नियमित समयांतराल पर रिकॉर्ड किए जाते हैं। टाइम सीरीज़ का उपयोग बैंकिंग, ट्रेडिंग, मार्केटिंग, विज्ञान और अन्य उद्योगों में व्यापक रूप से होता है। टाइम सीरीज़ डाटा का सबसे प्रचलित दृश्य प्रतिनिधित्व लाइन प्लॉट होता है, जिसमें समय 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
0  2023-01-27  1.4479  1.6759  1.0865
1  2023-01-26  1.4568  1.6799  1.0895
2  2023-01-25  1.4544  1.6792  1.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)

आउटपुट:

datetime64[ns]

यदि आपको Python में टाइम सीरीज़ पर काम करने का रिफ्रेशर चाहिए, तो Manipulating Time Series Data in Python कोर्स उपयोगी लग सकता है।

datetime कॉलम को डेटाफ़्रेम इंडेक्स के रूप में सेट करना

अब, चलिए Date कॉलम को set_index मेथड की मदद से डेटाफ़्रेम इंडेक्स बनाते हैं:

df = df.set_index('Date')
print(df.head(3))

आउटपुट:

              CAD     NZD     USD
Date                             
2023-01-27  1.4479  1.6759  1.0865
2023-01-26  1.4568  1.6799  1.0895
2023-01-25  1.4544  1.6792  1.0878

एक बेसिक सिंगल-लाइन matplotlib टाइम सीरीज़ प्लॉट बनाना

बेसिक टाइम सीरीज़ लाइन प्लॉट बनाने के लिए, हम मानक matplotlib.pyplot.plot(x, y) मेथड का उपयोग करते हैं:

plt.plot(df.index, df['CAD'])

आउटपुट:

image1.png

एक मल्टीपल-लाइन matplotlib टाइम सीरीज़ प्लॉट बनाना

मल्टीपल-लाइन टाइम सीरीज़ प्लॉट बनाने के लिए, हमें matplotlib.pyplot.plot(x, y) मेथड को आवश्यक बार चलाना होता है: 

plt.plot(df.index, df['CAD'])
plt.plot(df.index, df['NZD'])
plt.plot(df.index, df['USD'])

image4.png

ऊपर दिए गए कोड को for लूप से बेहतर बनाया जा सकता है:

for col in ['CAD', 'NZD', 'USD']:
    plt.plot(df.index, df[col])

आउटपुट: 

image4.png

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'))

आउटपुट: 

image8.png

लाइन प्रॉपर्टीज़ को कस्टमाइज़ करना

सामान्य लाइन प्लॉट्स की तरह, टाइम सीरीज़ लाइन प्लॉट की लाइन प्रॉपर्टीज़—जैसे रंग, स्टाइल या चौड़ाई—बदली जा सकती हैं:

plt.plot(df.index, df['CAD'], color='green', linestyle='dashed', linewidth=3)

आउटपुट:

image5.png

मार्कर्स जोड़ना और कस्टमाइज़ करना

किसी भी लाइन प्लॉट की तरह, हम टाइम सीरीज़ लाइन प्लॉट पर मार्कर्स लगा सकते हैं और उनके चिन्ह, रंग, किनारे का रंग, तथा आकार को कस्टमाइज़ कर सकते हैं:

plt.plot(df.index, df['CAD'], marker='o', markerfacecolor='yellow', markeredgecolor='red', markersize=8)

image9.png

टाइम अक्ष के टिक्स को कस्टमाइज़ करना

पहले कुछ आवश्यक कस्टमाइज़ेशन के साथ एक बेसिक matplotlib टाइम सीरीज़ लाइन प्लॉट बनाते हैं:

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())

आउटपुट: 

image7.png

हम देखते हैं कि डिफ़ॉल्ट रूप से 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)

आउटपुट: 

image6.png

ऊपर, 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)

आउटपुट: 

image2.png

टाइम अक्ष के टिक लेबल्स को कस्टमाइज़ करना

ऊपर दिए गए लाइन प्लॉट पर समय-अक्ष के टिक लेबल्स भारी लग सकते हैं। हम उन्हें अधिक पठनीय बनाने के लिए फॉर्मैट करना चाहेंगे। इसके लिए, हम matplotlib.dates.DateFormatter क्लास का उपयोग कर सकते हैं और उसे एक strftime फॉर्मैट स्ट्रिंग पास कर सकते हैं, जैसा कि हम दिनांक/समय देखना चाहते हैं। फिर, इस फॉर्मैटर को matplotlib.axis.XAxis.set_major_formatter मेथड को देते हैं:

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)

# Formatting time axis tick labels
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))

आउटपुट: 

image10.png

यह डॉक्यूमेंटेशन पेज सभी संभावित 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)

आउटपुट: 

image11.png

matplotlib टाइम सीरीज़ लाइन प्लॉट को फाइल में सेव करना

हम केवल प्लॉट को प्रदर्शित करने के बजाय उसे इमेज फाइल में सेव करने का विकल्प भी चुन सकते हैं। इसके लिए, हम matplotlib.pyplot.savefig मेथड का उपयोग करते हैं और फाइल का नाम पास करते हैं। उदाहरण के तौर पर, अपने पहले बेसिक प्लॉट पर लौटते हैं:

plt.plot(df.index, df['CAD'])

# Saving the resulting plot to a file
plt.savefig('time series line plot.png')

image1.png

ऊपर, हमने प्लॉट को time series line plot.png नामक फाइल में सेव किया है, जो हमारे वर्तमान प्रोग्राम के समान स्थान पर मौजूद है।

निष्कर्ष

सार रूप में, इस ट्यूटोरियल में हमने matplotlib में टाइम सीरीज़ लाइन प्लॉट बनाना और उन्हें कस्टमाइज़ करना सीखा—चाहे सामान्य matplotlib मेथड्स हों या केवल टाइम सीरीज़ विजुअलाइज़ेशन्स के लिए विशिष्ट उन्नत तकनीकें।

इन बुनियादी तकनीकों को सीखने के बाद, आप Python में टाइम सीरीज़ डाटा के साथ और गहराई से काम करना और उन्हें विजुअलाइज़ करना चाहेंगे। ऐसे में, निम्नलिखित व्यापक, शुरुआती-अनुकूल और एंड-टू-एंड संसाधनों का अन्वेषण करें:

विषय