पायथन के साथ जलवायु डेटा पर क्षेत्रीय सांख्यिकी का प्रदर्शन करें

May 08 2022
अन्य देशों की तुलना में आपके देश की जलवायु कैसे बदल रही है? जलवायु परिवर्तन धीरे-धीरे हम सभी के भविष्य को आकार देने लगा है। आने वाले दशकों में, हम गर्म तापमान, लंबे समय तक चलने वाले सूखे, मजबूत तूफान और बहुत कुछ की उम्मीद कर सकते हैं।

अन्य देशों की तुलना में आपके देश की जलवायु कैसे बदल रही है?

यूरोप के अधिकांश देशों में जून का तापमान बढ़ रहा है (लेखक द्वारा छवि)

जलवायु परिवर्तन धीरे-धीरे हम सभी के भविष्य को आकार देने लगा है। आने वाले दशकों में, हम गर्म तापमान, लंबे समय तक चलने वाले सूखे, मजबूत तूफान और बहुत कुछ की उम्मीद कर सकते हैं।

हम इस लेख में जलवायु परिवर्तन पर चर्चा नहीं करेंगे क्योंकि आप इंटरनेट पर इस विषय के बारे में बहुत सारी चर्चाएँ पा सकते हैं। हालांकि, हम यूरोपीय आयोग और कॉपरनिकस से मुफ्त डेटा का पता लगाएंगे जो हमें यह समझने में मदद कर सकता है कि पिछले कुछ वर्षों में तापमान कैसे बदल रहा है।

इस लेख में, हम कई डेटासेट पर आंचलिक आँकड़े प्रदर्शित करेंगे। हम मासिक औसत तापमान विसंगति की कल्पना करेंगे और कई देशों में समय श्रृंखला तैयार करेंगे। अंत में, हम हीटमैप चार्ट का उपयोग करके अपने निष्कर्षों की कल्पना करेंगे।

TLDR: यदि आप परवाह नहीं करते हैं कि डेटा और सेट-अप वातावरण कैसे प्राप्त करें, तो क्षेत्रीय सांख्यिकी अनुभाग निष्पादित करें और लेख के कोडिंग भाग का आनंद लें।

पर्यावरण सेट करें

पायथन पर्यावरण सेट करें

हम एनाकोंडा का उपयोग करके नए अजगर वातावरण के निर्माण के साथ शुरुआत करेंगे। हम कई भू-स्थानिक पुस्तकालयों जैसे xarray, Regionmask या geopandas का उपयोग करेंगे। हम क्लाइमेट डेटा स्टोर से कनेक्ट करने और डेटा प्राप्त करने के लिए cdsapi का भी उपयोग करेंगे।

conda create -n climate_change python=3.8 pandas scipy cdsapi xarray geopandas cfgrib regionmask

conda activate climate_change

अगली बात सीडीएस पायथन एपीआई को सही ढंग से स्थापित करना होगा, जिसका उपयोग हम क्लाइमेट डेटा स्टोर से डेटा डाउनलोड करने के लिए करेंगे। कृपया मेरे अंतिम (और पहले) लेख के अनुसार आगे बढ़ें ।

कृपया, नया फ़ोल्डर बनाएं जहां आप अपना सारा डेटा और ipython नोटबुक रखें, जिसमें हम नीचे दिए गए सभी चरणों का पालन करेंगे। मैंने क्लाइमेट_चेंज.ipynb नोटबुक बनाया है जिसे मैं इस लेख के अंत में साझा करूंगा।

वह डेटा प्राप्त करें जिसका हम उपयोग करते हैं

हम अपने पिछले लेख ई से ज्ञान का पुन: उपयोग करेंगे और हम एक बार फिर से जलवायु डेटा स्टोर का पता लगाएंगे।

जलवायु डेटा प्राप्त करें

आज हम कॉपरनिकस से जलवायु परिवर्तनशीलता के आकलन के लिए आवश्यक जलवायु चरों के साथ काम करेंगे। डेटासेट में कई जलवायु चर होते हैं जैसे सतही वायु तापमान, सतही वायु सापेक्ष आर्द्रता या वर्षा। तब हमारे पास विसंगति (जलवायु विज्ञान घटा मासिक माध्य), जलवायु विज्ञान या मासिक माध्य उत्पाद प्रकार का विकल्प होता है

बड़ी मात्रा में डेटा के कारण, हम 1979 से 2022 तक के 44 वर्षों के दौरान जनवरी और जून के तापमान की तुलना करेंगे (ध्यान दें कि हमारे पास जून के लिए केवल 43 डेटासेट होंगे, क्योंकि यह लेख मई 2022 में लिखा जा रहा है)। हमारे पास अंत में 87 फाइलें होनी चाहिए।

हमारा पायथन एपीआई अनुरोध इस तरह दिखेगा:

import cdsapi
c = cdsapi.Client()
c.retrieve(
    'ecv-for-climate-change',
    {
        'format': 'zip',
        'variable': 'surface_air_temperature',
        'climate_reference_period': '1991_2020',
        'product_type': [
            'anomaly', 'monthly_mean',
        ],
        'time_aggregation': '1_month_mean',
        'year': [
            '1979', '1980', '1981',
            '1982', '1983', '1984',
            '1985', '1986', '1987',
            '1988', '1989', '1990',
            '1991', '1992', '1993',
            '1994', '1995', '1996',
            '1997', '1998', '1999',
            '2000', '2001', '2002',
            '2003', '2004', '2005',
            '2006', '2007', '2008',
            '2009', '2010', '2011',
            '2012', '2013', '2014',
            '2015', '2016', '2017',
            '2018', '2019', '2020',
            '2021', '2022',
        ],
        'month': ['01','06'],
        'origin': 'era5',
    },
    'download.zip')

एक बार डेटा डाउनलोड हो जाने के बाद, आपको इसे अपनी पसंद के फ़ोल्डर में अनज़िप करना चाहिए। नतीजतन, आपके पास अपने इच्छित फ़ोल्डर में 87 ग्रिब फाइलें होनी चाहिए।

शेपफाइल्स बनाएं/प्राप्त करें

क्षेत्रीय आंकड़ों की गणना करने के लिए, हम विशिष्ट क्षेत्र के आंकड़ों की गणना करना चाहते हैं। हमारे मामले में, विशिष्ट क्षेत्र यूरोपीय देश हैं। हम NUTS शेपफाइल का उपयोग करेंगे - एक फाइल जिसमें यूरोपीय संघ के देशों के बारे में भू-स्थानिक जानकारी होती है।

हम शेपफाइल का उपयोग करेंगे, जो पहले से ही यूरोपीय आयोग द्वारा बनाई गई थी। हालांकि, यदि आप जीआईएस सिस्टम से परिचित हैं, तो आप अपना खुद का एक सिस्टम बना सकते हैं।

विवरण के साथ हमारा शेपफाइल डेटासेट यहां डाउनलोड के लिए उपलब्ध है । हम इस कॉन्फ़िगरेशन का उपयोग करेंगे और इसे डाउनलोड करेंगे।

इस आलेख में प्रयुक्त शेपफाइल डाउनलोड करने के लिए विन्यास

इसे पसंदीदा स्थान पर सहेजें, मैं दृढ़ता से सुझाव देता हूं कि यह वही निर्देशिका हो जहां हम पाइथन नोटबुक स्टोर करते हैं।

NUTS एक पदानुक्रमित प्रणाली है जिसे 3 स्तरों में विभाजित किया गया है। NUTS 1: प्रमुख सामाजिक-आर्थिक क्षेत्र, NUTS 2: क्षेत्रीय नीतियों के अनुप्रयोग के लिए बुनियादी क्षेत्र, NUTS 3: विशिष्ट निदान के लिए छोटे क्षेत्र।

हम NUTS1 का उपयोग करेंगे और बोनस उदाहरण में, हम NUTS2 के साथ काम करेंगे।

इस तरह से हमारा NUTS शेपफाइल QGIS में दिखता है, देशों के बीच अंतर करने के लिए कुछ बुनियादी सहजीवन को जोड़ता है:

क्यूजीआईएस (लेखक द्वारा छवि) में देखे गए एनयूटीएस डेटासेट

आंचलिक सांख्यिकी प्रदर्शन करें

चूंकि हमने वह सभी डेटा एकत्र कर लिया है जिसकी हमें आवश्यकता है, हम अपने दूसरे से अंतिम चरण - परफॉर्मिंग जोनल स्टैटिस्टिक्स के साथ जारी रख सकते हैं। हम जो हासिल करना चाहते हैं, वह जनवरी के लिए 44 वर्षों के दौरान और जून के लिए 43 वर्षों के दौरान क्रमशः हमारे आकार-प्रकार में प्रत्येक तत्व (देश) के लिए औसत तापमान की गणना करना है। हम केवल उत्पाद प्रकार की विसंगति के लिए गणना करेंगे (आप इस लेख को पढ़ने के बाद स्वयं मासिक माध्य कर सकते हैं)। हम इस जानकारी को पंडों के डेटाफ़्रेम में निकालेंगे, जिसका उपयोग हम अंत में अपने परिणामों की कल्पना करने के लिए करेंगे।

एक बोनस के रूप में, हम एक देश का चयन करेंगे और देश के भीतर विभिन्न क्षेत्रों पर आंचलिक आँकड़े प्रदर्शित करेंगे।

आइए इस लेख के कोडिंग भाग में गोता लगाएँ।

जलवायु डेटासेट का अन्वेषण करें

import xarray as xr 
import glob
import pandas as pd
# Get list of files with anomaly data using glob
grib_files = glob.glob("data/ecv/temperature/*anomaly*.grib")
# Explore dataset
with xr.open_dataset(grib_files[0], engine="cfgrib") as data:
    ds = data
ds

      
                

हालांकि, यह xarray open_mfdataset() फ़ंक्शन के साथ आसानी से किया जा सकता है, जहां हम खोलने के लिए फ़ाइलों की सूची निर्दिष्ट कर सकते हैं और नेस्टिंग और कॉनकैट आयाम भी निर्दिष्ट कर सकते हैं। हमारे मामले में, हम डेटा को वैलिडेट_टाइम पर जोड़ना चाहते हैं, जिसे हम ऊपर दिए गए डेटासेट में निर्देशांक के तहत देख सकते हैं । open_mfdataset() के लिए सही तर्क सेट करने से हमें उन सभी फाइलों को खोलने में मदद मिलेगी जिनकी हमें जरूरत है, सीधे 3-आयामी डेटासेट पर। इसके अलावा, सभी उद्घाटन समानांतर में, कई प्रोसेसर पर किए जा सकते हैं।

# Open multifile dataset with xarray, concat them on "time" 
# dimension
with xr.open_mfdataset(grib_files, combine="nested",concat_dim = "valid_time", parallel=True) as data:
    multi_ds = data
multi_ds

      
                

import geopandas as gpd
eu_countries_shp = "data/shapefiles/NUTS_RG_01M_2021_4326.shp"
eu_countries_gdf = gpd.read_file(eu_countries_shp)
eu_countries_gdf.head()

      
                

eu_countries_gdf = eu_countries_gdf[eu_countries_gdf["LEVL_CODE"] == 0]

क्षेत्रों पर जोनल माध्य की गणना करने के लिए, हमें सबसे पहले डेटासेट को अपने क्षेत्रों के साथ, लाइब्रेरी रीजनमास्क का उपयोग करके मास्क करना चाहिए। हम अपने 3-आयामी xarray डेटासेट से अपना eu_countries_gdf डेटाफ़्रेम (NUTS शेपफाइल), देशांतर और अक्षांश पास करेंगे और हम अपने विशिष्ट क्षेत्रों को eu_countries_gdf डेटाफ़्रेम में इंडेक्स कॉलम के अनुसार अद्वितीय संख्या के साथ चिह्नित करेंगे , जिसमें प्रत्येक देश के लिए अद्वितीय पूर्णांक मान होंगे।

फिर, हम नकाबपोश क्षेत्रों का चयन करेंगे और केवल विशिष्ट माह (इस मामले में-जून) का चयन करेंगे।

import regionmask
# Create mask of multiple regions from shapefile
eu_mask = regionmask.mask_3D_geopandas(
        eu_countries_gdf,
        multi_ds.longitude,
        multi_ds.latitude,
        drop=True,
        numbers="index"
    )
# Apply mask on our dataset
multi_ds = multi_ds.where(eu_mask)
# Get indexes of months since we have January and June
# Select January (1 : January, 6 : June etc...)
month_idxs = multi_ds.groupby('valid_time.month').groups
ds_1month = multi_ds.isel(valid_time=month_idxs.get(6))
ds_1month

      
                

grouped_ds = multi_ds.groupby("valid_time.year").mean(["latitude","longitude"])
grouped_ds

अब, अपने परिणामों को पांडा डेटाफ़्रेम में बदलें, कुछ परिवर्तन करें और हमारे निष्कर्षों की कल्पना करें:

  1. eu_countries_gdf के साथ df से जुड़ें ताकि हम पूर्वव्यापी रूप से NUTS_ID के बारे में जानकारी प्राप्त कर सकें, जो देशों की स्ट्रिंग आईडी हैं
  2. कॉलम समय छोड़ें , क्योंकि इस डेटासेट में यह वैद्य_टाइम के समान है
  3. वैलिड_टाइम को इंडेक्स के रूप में सेट करें और डेटा को ir . के अनुसार सॉर्ट करें
  4. स्तंभ NUTS_ID पर डेटाफ़्रेम पिवट करें
  5. t2m पैरामीटर का चयन करें , अक्ष 1 का नाम बदलकर "देश" करें
  6. डेटाटाइम इंडेक्स को वर्षों के पूर्णांक में बदलें
  7. अनुक्रमणिका का नाम बदलकर "वर्ष" कर दें
  8. df = grouped_ds.to_dataframe()
    df = df.reset_index("valid_time").join(eu_countries_gdf.set_index("index")[["NUTS_ID"]])
    df = df.drop(columns=["time"])
    df = df.set_index("valid_time").sort_index()
    df = df.pivot(columns=["NUTS_ID"])
    df = df["t2m"] # Select temperature (this is useful if we have more parameters in grid, eg. wind, humidity)
    df = df.rename_axis("Country", axis=1)
    df.index = [value.year for value in df.index]
    df.index.name = 'Year'
    df.head()
    
           
                    

    import geopandas as gpd
    import xarray as xr
    import regionmask
    import glob
    import pandas as pd
    def prepare_data(multi_ds, month : int = 1) -> pd.DataFrame:
        
        month_idxs = multi_ds.groupby('valid_time.month').groups
        multi_ds = multi_ds.isel(valid_time=month_idxs.get(month))
        multi_ds = multi_ds.groupby("valid_time.year").mean(["latitude","longitude"])
        df = multi_ds.to_dataframe()
        df = df.reset_index("valid_time").join(eu_countries_gdf.set_index("index")[["NUTS_ID"]])
        df["valid_time"] = df["valid_time"].apply(lambda x: x.year)
        df = df.drop(columns=["time"])
        df = df.set_index("valid_time").sort_index()
        df = df.pivot(columns=["NUTS_ID"])
        df = df["t2m"]
        df = df.rename_axis("Country", axis=1)
        df.index.name = 'Year'
        return df
    # Get list of files with anomaly data using glob
    grib_files = glob.glob("data/ecv/temperature/*anomaly*.grib")
    # Open multifile dataset with xarray, concat them on "time" dimension
    with xr.open_mfdataset(grib_files, combine="nested",concat_dim = "valid_time", parallel=True) as data:
        multi_ds = data
        
    # Open shapefile with geopandas
    eu_countries_shp = "data/shapefiles/NUTS_RG_01M_2021_4326.shp"
    eu_countries_gdf = gpd.read_file(eu_countries_shp)
    eu_countries_gdf = eu_countries_gdf[eu_countries_gdf["LEVL_CODE"] == 0]
    eu_countries_gdf = eu_countries_gdf.reset_index()
    # Create mask of multiple regions from shapefile
    eu_mask = regionmask.mask_3D_geopandas(
            eu_countries_gdf,
            multi_ds.longitude,
            multi_ds.latitude,
            drop=True,
            numbers="index"
        )
    # Apply mask on our dataset
    multi_ds = multi_ds.where(eu_mask)
    january_df = prepare_data(multi_ds, month=1)
    june_df = prepare_data(multi_ds, month=6)
    january_df.head()
    
           
                    

import matplotlib.pyplot as plt
import seaborn as sns
grid_kws = {"width_ratios": (.95, .03), "hspace": .1}
f, (ax, cbar_ax) = plt.subplots(1,2,figsize=(16,12), gridspec_kw=grid_kws)
ax = sns.heatmap(june_df.T, ax=ax,
                 cbar_ax=cbar_ax,
                 square=True, cmap='RdBu_r', vmin=-5, vmax=5, center=0, annot=True, fmt=".0f",
                 cbar_kws={"orientation": "vertical"})
ax.set_title("Monthly Mean Temperature Anomaly in June in Selected European Countries (°C)", size="18", pad=20)

हम अधिकांश यूरोपीय देशों में बढ़ते तापमान की प्रवृत्ति को स्पष्ट रूप से देख सकते हैं (लेखक द्वारा छवि)

आइए परिणामों के बारे में सोचें। हमारी क्षैतिज धुरी आरोही दिशा में वर्षों का प्रतिनिधित्व करती है। हमारा लंबवत अक्ष NUTS_ID द्वारा लेबल किए गए देशों का प्रतिनिधित्व करता है। हमारा रंग पैमाना तापमान विसंगति का प्रतिनिधित्व करता है जिसमें नकारात्मक मान नीले रंग में होते हैं, जबकि सकारात्मक मान लाल रंग में प्रदर्शित होते हैं।

ऊपर की छवि से, हम निश्चित रूप से कह सकते हैं कि अधिकांश यूरोपीय देशों में, जून दशक से दशक तक गर्म होते जा रहे हैं। जबकि 1980 और 1995 के बीच के वर्षों में अधिकांश देशों में तापमान सामान्य से नीचे था, पिछले कुछ वर्षों में विपरीत दिशा में थे, जलवायु औसत से बहुत अधिक गर्म (हमारे मामले में, जलवायु औसत एक ग्रिड में प्रत्येक बिंदु के लिए औसत तापमान की गणना की जाती है वर्ष 1991–2020)।

आइए देखते हैं जनवरी के नतीजे यह निर्धारित करने के लिए कि इस सर्दी के महीने में तापमान कैसे बदल रहा है।

बहुत ठंड जनवरी की आवृत्ति गिर रही है (लेखक द्वारा छवि)

जैसा कि हम ऊपर की तस्वीर में देख सकते हैं, रुझान उतना स्पष्ट नहीं है जितना कि जून में तापमान के लिए है। हालाँकि, हम इस निष्कर्ष पर पहुँच सकते हैं कि 80 के दशक के अंत में जनवरी के महीने में बहुत ठंडे तापमान की आवृत्ति 2000 की तुलना में अधिक थी।

डेटासेट के साथ स्वयं खेलने का प्रयास करें और मुझे अपने निष्कर्ष बताएं। एक बोनस के रूप में, मैंने फ्रांस के क्षेत्रों में जून के दौरान बदलते तापमान का भी विश्लेषण किया। ध्यान रखें कि डेटा का रिज़ॉल्यूशन 0.25x0.25° है, जिसका अर्थ है कि यह बहुत छोटे क्षेत्रों का विश्लेषण करने के लिए उपयुक्त नहीं है।

क्षेत्रीय पैमाने पर भी, हम फ्रांस में बढ़ते तापमान की प्रवृत्ति देख सकते हैं। 2003 में औसत से बहुत ऊपर तापमान पर ध्यान दें (लेखक द्वारा छवि)

अगर आपको यह लेख पसंद आया हो, तो मेरे खाते का अनुसरण करने में संकोच न करें। किसी भी टिप्पणी का स्वागत है और मुझे आपके किसी भी प्रश्न का उत्तर देने में खुशी होगी। आपके ध्यान के लिए धन्यवाद और मैं आपके साथ और अधिक डेटा एक्सप्लोर करने के लिए उत्सुक हूं।

जुड़े रहें

  • ऐसी ही और खबरों के लिए मीडियम पर मुझे फॉलो करें
  • लिंक्डइन पर जुड़ें
  • CDS पर जलवायु परिवर्तन के बारे में अधिक डेटासेट प्राप्त करें

© Copyright 2021 - 2023 | hingogo.com | All Rights Reserved