Mudanças Climáticas Global & Análise de Dados com Python.
- Rafael Mariani
- 8 de set. de 2021
- 6 min de leitura
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 pltConcentraçã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? :)



Comentários