top of page
Buscar

Mudanças Climáticas Global & Análise de Dados com Python.

Foto do escritor: Rafael MarianiRafael Mariani

Atualizado: 14 de out. de 2021

O clima global está mudando? O que os dados nos dizem?






Contexto

O início da segunda revolução industrial em 1850 foi um marco para a emissão exacerbada do gases estufas na atmosfera global. Esses gases - ex. CO2 - tem a capacidade de reter calor no planeta e proporcionar uma cascata de causas e efeitos, tais como aumento da temperatura global, diminuição das calotas polares e aumento do nível do mar e muitos outros impactos.



Objetivo

Norteado a dados, iremos avalia se a ação humana está impactando no clima global.


Dataset


1. Concentração de CO2 na atmosfera global

Fonte: NOAA

File: https://ourworldindata.org/grapher/co2-concentration-long-term

Shape:

Cobertura Temporal: -800.000 - 2019

Período de dados: anual



2. Emissão global de CO2 na atmosfera

Fonte: Global Carbon Budget - Global Carbon Project (2020)

File: https://www.kaggle.com/srikantsahu/co2-and-ghg-emission-data

Cobertura Temporal: 1750-2020

Período de dados: anual


3. Temperatura global

Fonte: NOAA

File: https://www.ncdc.noaa.gov/cag/global/time-series/globe/land_ocean/ytd/12/1880-2020

Cobertura Temporal: 1880-2020

Período de dados: anual



4. Nível do mar global

Fonte: NOAA

File: https://www.climate.gov/news-features/understanding-climate/climate-change-global-sea-level

Cobertura Temporal: 1880-2020

Período de dados: anual



5. Extensão da cobertura de gelo/neve no Ártico

Fonte: NOAA

File: https://www.ncdc.noaa.gov/snow-and-ice/extent/sea-ice/N/9

Cobertura Temporal: 1979-2020

Período de dados: anual








Vamos lá!


Importando bibliotecas necessárias

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

Concentração anual de CO2 na atmosfera desde 800 mil anos atrás


Vamos importar e analisar o dataset

path= r'C:/Users/Rafael Mariani/Análise Exploratória de Dados/AED - Climate Change/'
filename ='co2-concentration-long-term.csv'
data_path = path + filename #diretório dataset
df = pd.read_csv(data_path)

df.info()
df.head()
df.shape
df.columns
df.index

#identificando se existe dados ausentes
df.isnull().sum()

Plotando

fig,ax= plt.subplots(figsize=(14,5))
plt.plot(df['Year'],df['CO2 concentrations (NOAA, 2018)'])

ax.set_title('Global Atmospheric CO2 concentrations for the past 800,000 years', size="x-large",fontweight='bold')
ax.set_ylabel('parts per million (ppm)', size="large",fontweight='bold')
ax.set_xlabel('Year',size="large",fontweight='bold')
plt.tight_layout() #otimizar o ajuste dos gráficos na página

#adicionando marcadores em anos de interesse

plt.plot(2019,409.8,marker='.',color='red',markersize=10)
plt.text(2040,409.8, ' 2019',color='red')

j = df['Year']==1880 
df[j]

plt.plot(1880,287.7,marker='.',color='blue',markersize=10)
plt.text(2040,287.7, ' 1880',color='blue')

j = df['Year']==1950
df[j]

plt.plot(1950,312.83,marker='.',color='blue',markersize=10)
plt.text(2040,312.83, ' 1950',color='blue')
        
         
#salvando
plt.savefig(path_fig + '\Fig7.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)



Insights

  • Em 2019, a concentração atmosférica de 409,8 ppm de CO2 foi a maior desde o ano -800.000.

  • Desde o ano -800.000 até meados da segunda revolução industrial (1880), nunca a concentração de CO2 na atmosfera foi acima de 300 ppm.

  • A concentração de CO2 atmosférica de CO2, em 2019, foi cerca de 2x maior do que ao valor médio desde o ano -800.000.

  • Desde 1880 a concentração de CO2 na atmosfera aumenta exacerbadamente, como não ocorrido desde o ano de -800.000.

  • Entre os anos -800.000 a 1880, é observado ciclos naturais com oscilações milenares.


Emissões globais anuais de CO2 desde 1750

Vamos importar e analisar o dataset

path= r'C:/Users/Rafael Mariani/Análise Exploratória de Dados/AED - Climate Change/'
filename = 'emission data.csv'
path_fig = path
data_path = path + filename #diretório dataset
df = pd.read_csv(data_path)

df.info()
df.columns
df.index
df.shape
df.head()
df.duplicated()

#somando e criando coluna do total de co2 emitido por país
df['Total']= df.sum(axis=1)


 
#filtrando colunas de interesse
ctotal = df.filter(items = ['Country','Total'])
 #ordenando de forma decrescente de emissão de co2
ctotalrank= ctotal.sort_values(by ='Total', ascending = False)
ctotalrank.reset_index(drop=True,inplace = True)
 # calculando o % de cada país do total global
ctotalrank['% Global'] = (ctotalrank['Total'] / ctotalrank['Total'][0])*100 #0= World 
 
 ctotalrank.head(20)
 


#capturando a série temporal dos paises de interesse top 5 + brasil 
c6 = df[(df['Country'] == 'United States') | (df['Country'] == 'United Kingdom') | (df['Country'] == 'Germany') | (df['Country'] == 'China') | (df['Country'] == 'Russia')| (df['Country'] == 'França') | (df['Country'] == 'Brazil') | (df['Country'] == 'World')]

c6 = c6.T # transpondo a matriz
j = c6.loc['Country'] #riando um array com os nomes dos paises c6
c6.columns = j #alterando os indices colunas pelos nomes dos paises
c6= c6.drop('Country') #exluindo a linha country
#c6 = c6.drop('Total') #excluindo a linha total
#criando e calculando a linha % do total globar
c6.loc['% Global'] = (c6.loc['Total']/c6['World']['Total'])*100
c6.info()
c6 = c6.astype(float)

  
#criando coluna tempo 
import numpy as np                
c6['Year'] = np.arange(1751,2020)
c6.tail()
#aplicando nan para 2018 e 2019 em year e total
c6['Year']['Total':] = np.nan

Vamos plotar


j= c6['Year'].notnull()

fig, ax = plt.subplots(figsize=(14,5))
plt.plot(c6['Year'],c6['World'],linewidth=2,color = 'black')

ax.fill_between(c6['Year'][j],c6['World'][j], where = (c6['World'][j] > 0), alpha=0.5, color = 'black')

ax.set_title('Global CO2 Emission', size="x-large",fontweight='bold')
ax.set_xlabel('Year', size="large",fontweight='bold')
ax.set_ylabel('Billions Tons', size="large",fontweight='bold')
ax.set_xlim(xmin=1749,xmax=2019)
ax.set_ylim(ymin=0,ymax=1600000000000)
fig.tight_layout()


# salvando
plt.savefig(path_fig + '\Fig5.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)


Insights

  • A emissão de CO2 global para a atmosfera cresceu exponencialmente com o início da segunda revolução industrial em meados de 1850, atingindo a marca de mais de 1,5 trilhões de toneladas de CO2 em 2019.


Vamos analisar os 5 países que mais emitiram CO2 na atmosfera (e o Brasil)

#plotando
fig, ax = plt.subplots(figsize=(10,5))
plt.plot(c6['Year'],c6['World'],linewidth=2,color='black',label='World')
plt.plot(c6['Year'],c6['United States'],linewidth=1.5,color='red',label='United States')
plt.plot(c6['Year'],c6['United Kingdom'],linewidth=1.5,color='blue',label='United Kingdom')
plt.plot(c6['Year'],c6['Germany'],linewidth=1.5,color='yellow',label='Germany')
plt.plot(c6['Year'],c6['China'],linewidth=1.5,color='orange',label='China')
plt.plot(c6['Year'],c6['Russia'],linewidth=1.5,color='gray',label='Russia')
plt.plot(c6['Year'],c6['Brazil'],linewidth=1.5,color='green',label='Brazil')


ax.set_title('Global CO2 Emission & TOP 5 Countries + Brazil', size="x-large",fontweight='bold')
ax.set_ylabel('Billions Tons', size="large",fontweight='bold')
ax.set_xlabel('Year',size="large",fontweight='bold')
ax.legend(fontsize=10, loc = 'upper left')
ax.set_xlim(xmin=1749,xmax=2019)
ax.set_ylim(ymin=0,ymax=1600000000000)
plt.tight_layout() #otimizar o ajuste dos gráficos na página

# salvando
plt.savefig(path_fig + '\Fig6.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)



Insights

  • EUA, país n° 1 em emissão de CO2 na atmosfera, é responsável por mais de 30% da emissão global.


Analisando a temperatura média global entre 1880 e 2020


Lendo os dados da Temperatura Global

path= r'C:/Users/Rafael Mariani/Análise Exploratória de Dados/AED - Climate Change/'
filename = 'Global_Temperature_1880_2020.csv'
data_path = path + filename #diretório dataset
path_fig = path
df_temp = pd.read_csv(data_path)

Analisando os dados

df_temp.info()
df_temp.head()
df_temp.shape
df_temp.columns
df_temp.index

#identificando se existe dados ausentes
df_temp.isnull().sum()
df_temp.dropna(inplace =True) #eliminando linhas com nan
df_temp.drop(3,inplace = True)

df_temp.columns = ['Year','Temperature'] #renomeando colunas df_temp[['Year','Temperature']] = df_temp[['Year','Temperature']].astype(float) #convertendo str to float df_temp.reset_index(drop=True, inplace = True) #resetando os índices  df_temp.info()


Plotando gráfico da Tempertura Global

fig, ax = plt.subplots(figsize=(14,5))
plt.plot(df_temp['Year'],df_temp['Temperature'], linewidth=2, color = 'black')
         
ax.fill_between(df_temp['Year'],df_temp['Temperature'], alpha = 0.4, where = (df_temp['Temperature'] > 0),  color = 'red')
ax.fill_between(df_temp['Year'],df_temp['Temperature'], alpha = 0.4, where = (df_temp['Temperature'] < 0),  color = 'blue')


ax.set_title("Global Temperature Anomaly", size="x-large",fontweight='bold')
ax.set_xlabel('Year', size="large",fontweight='bold')
ax.set_ylabel('(°C)', size="large",fontweight='bold')
ax.set_xlim(xmin=1879,xmax=2021)
fig.tight_layout()

#Salvando
plt.savefig(path_fig + '\Fig1.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)


Insights

  • Existe uma clara tendência de aumento da temperatura global entre 1880 e 2020, sendo os últimos 10 anos os mais quentes.

  • A temperatura global aumentou numa taxa de 0,08°C por década desde 1880.



Identificando e plotando os 10 anos mais quentes desde 1880

# TOP 10 anos mais quentes

df_temp_ranking['Year'] = df_temp_ranking['Year'].astype(int)
df_temp_ranking['Year'] = df_temp_ranking['Year'].astype(str)

fig, ax= plt.subplots(figsize=(14,7))
sns.barplot(data = df_temp_ranking.head(10).sort_values(by='Temperature',ascending=True), x='Year', y='Temperature' , palette="dark:salmon_r")  
#ttps://seaborn.pydata.org/tutorial/color_palettes.html

ax.set_title('Top 10 Global Warmest Years', size="x-large",fontweight='bold')
ax.set_xlabel('Year', size="large",fontweight='bold')
ax.set_ylabel('Anomaly Temperature (°C)', size="large",fontweight='bold')
fig.tight_layout()

# Plotando
plt.savefig(path_fig + '\Fig2.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)


Insights

  • Os anos mais quentes desde 1880 ocorreram entre 2015 e 2020.

  • 2016 e 2020 foram os anos mais quentes desde 1880.




Processamento e Análise de dados do Nível do Mar Global



#Carregando dados
path= r'C:/Users/Rafael Mariani/Análise Exploratória de Dados/AED - Climate Change/'
filename = 'sea-level_fig-1.csv'
data_path = path + filename #diretório dataset
path_fig = path
df_nivel=pd.read_csv(data_path)

df_nivel.info()
df_nivel.head(10)
df_nivel.shape
df_nivel.columns
df_nivel.index

#identificando se existe nans
df_nivel.isnull().sum()
#df_temp.dropna(inplace =True) #eliminando linhas com nan

df_nivel.drop([0,1,2,3,4],inplace = True)
colunas=list(df_nivel.loc[5,:])
df_nivel.columns= colunas
df_nivel.drop([5],inplace = True)
df_nivel.reset_index(drop=True, inplace = True)
df_nivel.info()
df_nivel[colunas] = df_nivel[colunas].astype(float) #convertendo objeto para float
df_nivel.info()
#identificando se existe nans
df_nivel.isnull().sum() #não iremos eliminar 

#convertendo escala de polegadas para cm
#1 inche = 2,94 cm
df_nivel.head(1)
df_nivel[colunas[1:5]] = df_nivel[colunas[1:5]]*2.94
colunas = ['Year',
 'CSIRO - Adjusted sea level (cm)',
 'CSIRO - Lower error bound (cm)',
 'CSIRO - Upper error bound (cm)',
 'NOAA - Adjusted sea level (cm)']
df_nivel.columns= colunas


#plotando
fig,ax = plt.subplots(figsize=(14,5))
ax.fill_between(df_nivel[colunas[0]],df_nivel[colunas[2]],df_nivel[colunas[3]],alpha=0.2,color='blue')
plt.plot(df_nivel[colunas[0]],df_nivel[colunas[1]],linewidth=2,color='blue',label = colunas[1])
plt.plot(df_nivel[colunas[0]],df_nivel[colunas[4]],linewidth=2,color='gray',label = colunas[4])
plt.plot(df_nivel[colunas[0]],df_nivel[colunas[2]],linewidth=1,color='blue',alpha=0.4,label = colunas[2])
plt.plot(df_nivel[colunas[0]],df_nivel[colunas[3]],linewidth=1,color='blue',alpha=0.4,label = colunas[3])
 

#ax.fill_between(df_nivel[colunas[0]],df_nivel[colunas[3]], alpha = 0.2, where = (df_nivel[colunas[2]] < df_nivel[colunas[3]]),  color = 'blue')
#ax.fill_between(df_temp['Year'],df_temp['Temperature'], alpha = 0.4, where = (df_temp['Temperature'] < 0),  color = 'blue')


ax.set_title("Global Sea Level", size="x-large",fontweight='bold')
ax.set_xlabel('Year', size="large",fontweight='bold')
ax.set_ylabel('(cm)', size="large",fontweight='bold')
ax.set_xlim(xmin=1879,xmax=2021)
fig.tight_layout()
ax.legend(fontsize=10, loc='upper left')

# salvando
plt.savefig(path_fig + '\Fig3.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)



Insights

  • Existe uma clara tendência de aumento contínuo do nível do mar global entre 1880 e 2020.

  • O nível do mar global subiu cerca de 25 cm desde 1880.



Cobertura de gelo e neve no Hemisfério Norte


#Importando dataset

path= r'C:/Users/Rafael Mariani/Análise Exploratória de Dados/AED - Climate Change/'
filename = r'September Northern Hemisphere Sea Ice Extent (1979-2020)2.csv'
data_path = path + filename #diretório dataset
path_fig = path
df_ice= pd.read_csv(data_path,sep=';')

df_ice.info()
df_ice.head()
df_ice.shape
df_ice.columns
df_ice.index

#identificando se existe nans
df_ice.isnull().sum()


df_ice.drop([0,1],inplace = True)
colunas = list(['Year','Area','Anomaly'])
df_ice.columns = colunas
df_ice.drop([2],inplace = True)
df_ice.reset_index(drop=True,inplace=True)
df_ice.info()
df_ice=df_ice.astype(float)
df_ice.info()

#Plotando
fig,ax = plt.subplots(figsize=(14,5))
#plt.bar(df_ice['Year'],df_ice['Area'],color='blue')
plt.plot(df_ice['Year'],df_ice['Area'],color='blue',linewidth=2)
ax.fill_between(df_ice['Year'],df_ice['Area'],where=(df_ice['Area'] > 0), color = 'blue', alpha = 0.2)


ax.set_title('September Northern Hemisphere Sea Ice Extent (1979-2020)', size="x-large",fontweight='bold')
ax.set_xlabel('Year', size="large",fontweight='bold')
ax.set_ylabel('Million Km²', size="large",fontweight='bold')
ax.set_ylim(ymin=2,ymax=9)
ax.set_xlim(xmin=1978,xmax=2021)
fig.tight_layout()
#ax.legend(fontsize=10, loc='upper left')

# salvando
plt.savefig(path_fig + '\Fig4.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)


Insights

  • Existe uma clara tendência de diminuição contínua da extensão da cobertura de gelo/neve no Ártico desde 1979, com maiores reduções após 2005.

  • A taxa de redução da extensão da cobertura de gelo/neve no Ártico foi de 0,82 milhões de km² por década desde 1979.









Fim. Curtiu? :)




91 visualizações0 comentário

Posts recentes

Ver tudo

Comments


logo rm.png

© 2021 por Rafael Mariani. Criado orgulhosamente com Wix.com

bottom of page