O objetivo deste trabalho é apresentar uma forma de extração de dados de uma tabela em uma página html, e para isso vamos buscar esses dados no site https://www.worldometers.info/.
O Worldometers oferece atualizações constantes sobre dados populacionais, econômicos, consumo de energia, água, e muitos outros dados que podem servir para estudos e análises diversas.
Para o procedimento de extração da tabela, vamos utilizar a biblioteca requests da linguagem python.
1. Carregando os dados
Os dados foram carregados de uma PÁGINA do Worldometers que apresenta algumas informações atualizadas sobre dados populacionais de países asiáticos. Para isso foi utilizado um código em python para a extração da tabela da página.
#Carregando a página html
import pandas as pd
import requests
url = 'https://www.worldometers.info/population/countries-in-asia-by-population/'
r = requests.get(url)
#Extraindo a tabela
result = pd.read_html(r.text)
É bom observar que nossa tabela não é do tipo dataframe pandas, mas sim uma lista com um dataframe. Portanto, vamos retirar este dataframe da lista obtida.
#tipo da variável result
print(type(result))
<class 'list'>
A varável result é uma lista de tabelas do tipo dataframe.
#Retirando o dataframe (nossa tabela) da lista
tabela = result[0]
print(tabela)
#verificando a quantidade de linhas e colunas
print(tabela.shape)
(51, 12)
Neste caso, temos 51 linhas e 12 colunas
2. Identificando as variáveis (colunas)
Temos um total de 12 variáveis. As variáveis são as colunas presentes na tabela. Temos
print(tabela.columns)
['#',
'Country (or dependency)',
'Population (2020)',
'Yearly Change',
'Net Change',
'Density (P/Km²)',
'Land Area (Km²)',
'Migrants (net)',
'Fert. Rate',
'Med. Age',
'Urban Pop %',
'World Share']
Podemos afirmar que há basicamente 11 variáveis relevantes para análises dos dados, pois a coluna # é somente um contagem/enumeração das linhas.
3. Respondendo algumas perguntas
Q1. Qual a população e a densidade demográfica da China e Japão?
Inicialmente vamos criar dois filtros. O resultado do filtro é uma sequência de False e True que irá verificar quais linhas da coluna COUNTRY temo China ou Japão.
filtro_china = tabela['Country (or dependency)'] == 'China'
filtro_japao = tabela['Country (or dependency)'] == 'Japan'
tabela_chi_jap = tabela[(filtro_china) | (filtro_japao)]
tabela_chi_jap
Sem necessidade de mais códigos, podemos verificar pela tabela tabela_chi_jap os valores da população e desensidade demográfica. Porém, caso fosse necessário uma busca espécifica utilizando um código, uma solução seria:
#filtrando as linhas que contém Country=China
filtro = tabela_chi_jap['Country (or dependency)']=='China'
China = tabela_chi_jap[filtro]
densidade = China['Density (P/Km²)']
densidade
153
Q2. Quais os países são descritos na tabela, e qual é a população do país de maior densidade demográfica?
Encontramos 51 países (ou dependências), sendo Macao a região de maior densidade demográfica com 21.645 pessoas por m².
#países
paises = list(tabela['Country (or dependency)'])
print(paises)
['China', 'India', 'Indonesia', 'Pakistan', 'Bangladesh', 'Japan', 'Philippines', 'Vietnam', 'Turkey', 'Iran', 'Thailand', 'Myanmar', 'South Korea', 'Iraq', 'Afghanistan', 'Saudi Arabia', 'Uzbekistan', 'Malaysia', 'Yemen', 'Nepal', 'North Korea', 'Taiwan', 'Sri Lanka', 'Kazakhstan', 'Syria', 'Cambodia', 'Jordan', 'Azerbaijan', 'United Arab Emirates', 'Tajikistan', 'Israel', 'Hong Kong', 'Laos', 'Lebanon', 'Kyrgyzstan', 'Turkmenistan', 'Singapore', 'State of Palestine', 'Oman', 'Kuwait', 'Georgia', 'Mongolia', 'Armenia', 'Qatar', 'Bahrain', 'Timor-Leste', 'Cyprus', 'Bhutan', 'Macao', 'Maldives', 'Brunei']
#filtro
filtro = tabela['Density (P/Km²)']==tabela['Density (P/Km²)'].max()
tabela[filtro].filter(['Country (or dependency)','Population (2020)','Density (P/Km²)'])
4. Salvando a tabela extraida
#Salvando a tabela em um arquivo csv
tabela.to_csv('paises_asiaticos.csv',index=False)
#Salvando a tabela em um arquivo excel
tabela.to_excel('paises_asiaticos.xlsx',index=False)