7.14. HTML GDP¶
https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_PKB_nominalnego
https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_liczby_ludno%C5%9Bci
7.14.1. Code¶
"""
>>> result.loc['Polska']
PKB 6.741270e+11
Ludność 3.842069e+07
PerCapita 1.754594e+04
Name: Polska, dtype: float64
"""
import pandas as pd
import matplotlib.pyplot as plt
pd.set_option('display.width', 200)
pd.set_option('display.max_columns', 15)
pd.set_option('display.max_rows', 100)
pd.set_option('display.min_rows', 100)
pd.set_option('display.max_seq_items', 100)
USD = 1
# PKB = 'https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_PKB_nominalnego'
PKB = 'https://python3.info/_static/percapita-pkb.html'
# LUDNOSC = 'https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_liczby_ludno%C5%9Bci'
LUDNOSC = 'https://python3.info/_static/percapita-ludnosc.html'
LUDNOSC_PANSTWA = {
'Chińska Republika Ludowa': 'Chiny',
'Korea Północna': pd.NA,
'Republika Chińska': 'Tajwan',
'Kuba': pd.NA,
'Zachodni Brzeg': pd.NA,
'Strefa Gazy': pd.NA}
LUDNOSC_COLUMNS = {
'Państwo, obszar lub terytorium zależne': 'Państwo',
'2018': 'Ludność'}
def clean(column):
return (column
.str.replace('\xa0', '')
.str.replace(' ', ''))
pkb = (pd
.read_html(PKB)[1]
.rename(columns={'2021 r.': 'PKB'})
.loc[:, ['Państwo', 'PKB']]
.replace('b.d.', pd.NA)
.dropna(how='any', axis='rows')
.apply(clean)
.astype({'PKB': 'int64'})
.set_index('Państwo')
.mul(1_000_000*USD))
ludnosc = (pd
.read_html(LUDNOSC)[0]
.droplevel(level=0, axis='columns')
.rename(columns=LUDNOSC_COLUMNS)
.loc[:, ['Państwo', 'Ludność']]
.replace(LUDNOSC_PANSTWA)
.set_index('Państwo')
.query('index in @pkb.index')
.apply(clean)
.astype({'Ludność': 'int64'}))
result = (pkb
.merge(ludnosc, left_index=True, right_index=True)
.sort_index(ascending=True)
.eval('PerCapita = PKB / Ludność'))
plot = (result
.loc[:, ['PerCapita']]
.round({'PerCapita': 1})
.sort_values('PerCapita', ascending=False)
.head(n=30)
.plot(kind='bar', legend=True, grid=True, figsize=(16,10)))
# plt.show()
import pandas as pd
from matplotlib import pyplot as plt
PKB = 'https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_PKB_(parytet_si%C5%82y_nabywczej)'
LUDNOSC = 'https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_liczby_ludno%C5%9Bci'
USD = 1
COUNTRIES = {
'Chińska Republika Ludowa': 'Chiny',
'Republika Chińska': 'Tajwan',
# 'Strefa Gazy':'Zachodni Brzeg i Strefa Gazy',
# 'Zachodni Brzeg': 'Zachodni Brzeg i Strefa Gazy',
# 'Korea Północna': ''
# 'Syria': ''
# 'Kuba': ''
# 'Zachodni Brzeg': ''
# 'Strefa Gazy': ''
# 'Polinezja Francuska': ''
# 'Nowa Kaledonia': ''
# 'Guam': ''
# 'Curaçao': ''
# 'Wyspy Dziewicze': ''
# 'Jersey': ''
# 'Wyspa Man': ''
# 'Andora': ''
# 'Bermudy': ''
# 'Guernsey': ''
# 'Kajmany': ''
# 'Turks i Caicos': ''
# 'Grenlandia': ''
# 'Wyspy Owcze': ''
# 'Mariany Północne': ''
# 'Samoa Amerykańskie': ''
# 'Sint Maarten': ''
# 'Liechtenstein': ''
# 'Brytyjskie Wyspy Dziewicze': ''
# 'Saint-Martin[a]': ''
# 'Monako': ''
# 'Gibraltar': ''
# 'Anguilla': ''
# 'Wallis i Futuna': ''
# 'Wyspy Cooka': ''
# 'Wyspa Świętej Heleny, Wyspa Wniebowstąpienia i ...': ''
# 'Saint-Barthélemy[a]': ''
# 'Montserrat': ''
# 'Saint-Pierre i Miquelon': ''
# 'Falklandy': ''
# 'Svalbard': ''
# 'Niue': ''
# 'Tokelau': ''
# 'Watykan': ''
# 'Pitcairn': ''
}
pkb = (pd
.read_html(PKB)[0]
.rename(columns={'Kraj':'kraj', '2019':'pkb'})
.loc[:, ['kraj', 'pkb']]
.replace(regex=True, to_replace={
'pkb': {'b.d': pd.NA, '\s':''},
'kraj': {'\[2\]': ''}})
.dropna()
.set_index('kraj', drop=True)
.astype('int')
.convert_dtypes()
.mul(1_000_000*USD))
ludnosc = (pd
.read_html(LUDNOSC)[0]
.droplevel(level=0, axis='columns')
.rename(columns={'Państwo, obszar lub terytorium zależne':'kraj', '2022':'ludnosc'})
.loc[:, ['kraj','ludnosc']]
.replace(regex=True, to_replace={
'kraj':COUNTRIES,
'ludnosc':{'–': pd.NA, '\[3\]': '', '\s':''}})
.set_index('kraj', drop=True)
.dropna()
.astype('int')
.convert_dtypes())
per_capita = (pd
.merge(left=pkb, right=ludnosc, left_index=True, right_index=True)
.assign(per_capita=lambda df: df.pkb / df.ludnosc)
.round(1)
.convert_dtypes()
.sort_values(by='per_capita', ascending=False))
plot_percapita = (
per_capita
.loc[:, 'per_capita']
.sort_values(ascending=False)
.head(n=10)
.plot(
kind='bar',
title='PKB Per Capita',
xlabel='Państwo',
ylabel='PKB Per Capita',
grid=False,
legend=False,
figsize=(16,10)))
plt.tight_layout()
plt.show()
7.14.2. Plots¶

Figure 7.18. Top 10 countries with highest Global Domestic Product Per Capita¶