billionaries-wizualizacja/Prezentacja_wykresy.ipynb
2024-04-16 22:14:06 +02:00

1.2 MiB

Statystyki miliarderów

Zbiór danych zawiera statystyki dotyczące miliarderów na świecie, zawarte są również ich dane osobowe, branże którymi się zajmują oraz firmy.

Źródło

import warnings
import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt
plt.style.use('ggplot')
warnings.filterwarnings("ignore")
df = pd.read_csv('data.csv')

Analiza rozkładu majątków miliarderów w różnych krajach, branżach i regionach

Kraje

Wykres pokazuje kraje z największą liczbą miliarderów. Jak możemy zauważyc na samym szczycie znajdują się USA, Chiny i Indie

ppl_in_countries = df.groupby('countryOfCitizenship')['rank'].count().reset_index().sort_values(by ='rank',ascending=False).head(20)
ax = sns.barplot(ppl_in_countries,x='rank',y='countryOfCitizenship',orient='h',hue = 'countryOfCitizenship', legend = False, palette='rainbow')
ax.set_title('Kraj z największą liczbą miliarderów')
ax.set_ylabel('Kraje')
ax.set_xlabel('Liczba milarderów')
for container in ax.containers:
    ax.bar_label(container, fontsize=8)
plt.show()

Wykres obrazujący liczbę miliarderów biorąc pod uwage liczbe mieszkańców danego kraju

ppl_in_countries = df.groupby(['countryOfCitizenship', 'population_country'])['rank'].count().reset_index().sort_values(by ='rank',ascending=False).head(20)
ppl_in_countries['population_country'] = ppl_in_countries['population_country'] / 1000000
ppl_in_countries['population_country'] = ppl_in_countries['population_country'].astype(int)

plt.figure(figsize=(12, 8))
plt.scatter(ppl_in_countries['rank'], ppl_in_countries['population_country'], s=100, c='red', alpha=0.5)

for i, txt in enumerate(ppl_in_countries['countryOfCitizenship']):
    plt.annotate(txt, (ppl_in_countries['rank'].iloc[i], ppl_in_countries['population_country'].iloc[i]), fontsize=8)

plt.title('Liczba miliarderów w zależności od liczby ludności kraju')
plt.xlabel('Liczba miliarderów')
plt.ylabel('Liczba ludności w mln')
plt.show()

Ten sam wykres bez Chin, Indii oraz USA, dla lepszego zobrazowania innych krajów

ppl_in_countries = ppl_in_countries[3:]
plt.figure(figsize=(12, 8))
plt.scatter(ppl_in_countries['rank'], ppl_in_countries['population_country'], s=100, c='red', alpha=0.5)

for i, txt in enumerate(ppl_in_countries['countryOfCitizenship']):
    plt.annotate(txt, (ppl_in_countries['rank'].iloc[i], ppl_in_countries['population_country'].iloc[i]), fontsize=8)

plt.title('Liczba miliarderów w zależności od liczby ludności kraju')
plt.xlabel('Liczba miliarderów')
plt.ylabel('Liczba ludności w mln')
plt.show()

Branże

Wykres kołowy pokazujący ile procentowo milliarderów uzyskało swoje bogactwo z jakiej branży. Widać na niej że topowe dziedziny to: finanse, manufaktura i technologia

plt.figure(figsize=(8, 6))
df['category'].value_counts().plot(kind='pie', autopct='%1.1f%%')
plt.title('Miliarderzy w branżach')
plt.axis('equal')
plt.show()

Wykres słupkowy pokazujący dokładną liczbę milliarderów na daną branże

categories = df.groupby('category')['rank'].count().sort_values(ascending=False).reset_index().head(20)
ax = sns.barplot(categories,x='rank',y='category',orient='h',hue = 'category', legend = False, palette='rainbow')
ax.set_title('Najpopularniejsze kategorie biznesu')
ax.set_ylabel('Kategoria')
ax.set_xlabel('Liczba osób')
for container in ax.containers:
    ax.bar_label(container, fontsize=8)
plt.show()

Wykres pokazuje wiek oraz branże miliarderów, jest bez dwóch wartośći odstających by lepiej go zobrazować: Bernard Arnault - 211mld, Elon Musk- 180mld.

top_20 = df.sort_values('finalWorth', ascending=False).iloc[2:50]
color_palette = ['#e6194b', '#3cb44b', '#ffe119', '#4363d8', '#f58231', '#911eb4', '#46f0f0', '#f032e6', '#bcf60c', '#fabebe', '#008080', '#8b00ff']
ax = sns.scatterplot(top_20,x='age', y='finalWorth', size='finalWorth', hue='category', palette=color_palette, sizes=(40, 400), legend='full')
ax.set_title('Wiek miliarderów oraz ich branża')
ax.set_ylabel('Majątek')
ax.set_xlabel('Wiek')
hand, labl  = ax.get_legend_handles_labels()
unique_values_set = set(df['category'])
handout=[]
lablout=[]
for h,l in zip(hand,labl):
    if l in unique_values_set:
        lablout.append(l)
        handout.append(h)
ax.legend(handout, lablout,bbox_to_anchor=(1.49, 1), loc='upper right', borderaxespad=0)
plt.show()

Regiony

Przedstawienie z której częsci USA wywodzą się miliarderzy. Milarder zamieszkujący U.S. Territories to Stephen Deckoff, zamieszkuje on Wyspsy Dziewicze

region_counts = df['residenceStateRegion'].value_counts()
top_regions = region_counts.head(10)

colors = sns.color_palette("pastel")

plt.figure(figsize=(14, 6))
sns.barplot(x=top_regions.index, y=top_regions, palette=colors)
plt.title('Top Regions Producing Billionaires', fontsize=16)
plt.xlabel('Region', fontsize=12)
plt.ylabel('Number of Billionaires', fontsize=12)
plt.xticks(rotation=45, fontsize=10)
plt.yticks(fontsize=10)
plt.grid(axis='y', linestyle='--', alpha=0.7)

for i, v in enumerate(top_regions):
    plt.text(i, v + 5, str(v), color='black', ha='center', va='bottom', fontsize=10)

plt.show()

Analiza demograficzna: Przedstawienie wieku, płeci i miejsca urodzenia miliarderów.

Wiek

Wykres pokazujący ile miliarderów jest w danym wieku

plt.figure(figsize=(20, 6))
sns.histplot(data=df[df['age'].notnull()], x='age', bins=30, color='skyblue', kde=True)
plt.title('Wiek miliarderów', fontsize=16)
plt.xlabel('Wiek', fontsize=12)
plt.ylabel('Liczba miliarderów', fontsize=12)

sns.set_style("whitegrid")
sns.despine(left=True)
plt.grid(axis='y', linestyle='--', alpha=0.7)

plt.show()

Pokazanie średniego wieku miliarderów w danym kraju i zestawienie ich ze średnią długościa życia w danym kraju.

d= df[['country','age', 'life_expectancy_country']]
avg_age = d.groupby('country')[['age','life_expectancy_country']].mean().reset_index()
avg_age.columns = ['Country', 'Średni wiek miliarderów', 'Średnia długość życia w kraju']
countries = ['United States', 'India','China', 'France','United Kingdom'
            'Russia', 'Italy','Switzerland','Singapore','Germany']
top_countries_age = avg_age.loc[avg_age['Country'].isin(countries)]
top_countries_age.fillna(85.39)

df_long = pd.melt(top_countries_age, id_vars='Country', var_name='Variable', value_name='Value')

plt.figure(figsize=(10,5))
c_plot = sns.barplot(x='Country', y='Value', hue='Variable', data=df_long, palette='Set2')

plt.title('Porównianie wieku ze średnią życia')
plt.xlabel('Kraj')
plt.ylabel('Wiek')
plt.legend(title='Legenda', loc='lower left')
    
for p in c_plot.patches:
    c_plot.annotate(f'{p.get_height():.0f}', (p.get_x() + p.get_width() / 2., p.get_height()),
                    ha='center', va='center', xytext=(0, 10), textcoords='offset points')

plt.show()

Miejsce urodzenia

Wykres pokazujący w jakim mieście urodziło się najwięcej miliarderów

top_birth_cities = df['city'].value_counts().head(20)

plt.figure(figsize=(20, 6))
sns.barplot(x=top_birth_cities.index, y=top_birth_cities, palette=colors)
plt.title('Rozkład miast urodznia miliarderów', fontsize=16)
plt.xlabel('Miasto urodzenia', fontsize=12)
plt.ylabel('Liczba miliarderów', fontsize=12)
plt.xticks(rotation=45, fontsize=10)
plt.yticks(fontsize=10)
plt.grid(axis='y', linestyle='--', alpha=0.7)

for i, v in enumerate(top_birth_cities):
    plt.text(i, v + 5, str(v), color='black', ha='center', va='bottom', fontsize=10)

plt.show()

Pokazanie miesięcy i dni w których urodzili się miliarderzy.

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))
# Plot the birth month distribution
ax1.set_title('Miesiące urodzenia miliarderów', fontsize=16)
sns.histplot(data=df['birthMonth'], bins=12, color='skyblue', kde=True, ax=ax1)
ax1.set_xlabel('Miesiąc urodzenia', fontsize=12)
ax1.set_ylabel('Liczba miliarderów', fontsize=12)

# Plot the birth day distribution
ax2.set_title('Dni urodzenia miliarderów', fontsize=16)
sns.histplot(data=df['birthDay'], bins=31, color='skyblue', kde=True, ax=ax2)
ax2.set_xlabel('Dzień urodzenia', fontsize=12)
ax2.set_ylabel('Liczba miliarderów', fontsize=12)

# Set the style and remove the left despine
sns.set_style("whitegrid")
sns.despine(left=True)
plt.grid(axis='y', linestyle='--', alpha=0.7)

# Adjust the spacing between subplots
plt.subplots_adjust(wspace=0.4)

plt.show()

Płeć

Wykres kołowy przedstawiający procentowy rozkład płci wsród miliarderów.

d = df['gender']
d =d.map({'M': 'Mężczyźni', 'F': 'Kobiety'})
val = d.value_counts().values 
keys = d.value_counts().index
colors = sns.color_palette('rainbow')
ax = plt.pie(val, labels=keys, autopct='%.0f%%', explode = [0, 0.1], colors = colors,
            wedgeprops = {"edgecolor" : "black", 
                      'linewidth': 1, }) 
plt.show() 

Najbardziej majętne osoby

ax = sns.barplot(df.head(20), x='finalWorth',y='personName', hue = 'personName', legend = False,orient='h', palette='rainbow')
ax.set_title('Najbardziej majętne osoby')
ax.set_xlabel('Osoba')
ax.set_ylabel('Majątek')
for container in ax.containers:
    ax.bar_label(container, fontsize=8)
plt.show()

Najpopularniejsze imiona wśród miliarderów

names = df['firstName'].value_counts().head(20)

# plot this

plt.figure(figsize=(20, 6))
sns.barplot(x=names.index, y=names, palette=colors)
plt.title('Rozkład imion miliarderów', fontsize=16)
plt.xlabel('Imię', fontsize=12)
plt.ylabel('Liczba miliarderów', fontsize=12)
plt.xticks(rotation=45, fontsize=10)
plt.yticks(fontsize=10)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

Wykres pokazuję czy miliarder dorobił się sam czy odziedziczył fortune

self_made_by_age = df[['age','selfMade']]
bins = [15,  25,  35,  45,  55,  65,  75,  85,  95, 105]
self_made_by_age['age'] = pd.cut(self_made_by_age['age'], bins = bins)
ax = sns.countplot(self_made_by_age, x = self_made_by_age['age'], hue = self_made_by_age['selfMade'], palette= 'flare' )
ax.tick_params(axis='x', rotation=45)
ax.set_title('Osoby, które same się dorobiły lub dostały majątek w spadku')
ax.set_ylabel('Liczba osób')
ax.set_xlabel('Wiek')
for i in ax.containers:
    ax.bar_label(i)
plt.show()

Pokazanie ile miliarderów ma jaki majątek

ax = sns.histplot(df,x='finalWorth',bins = 20)
ax.set_title('Dystrybucja bogactwa miliarderów')
ax.set_xlabel('Majątek')
ax.set_ylabel('Liczba osób')
labels = [str(v) if v else '' for v in ax.containers[0].datavalues]
ax.bar_label(ax.containers[0], labels=labels)
plt.show()

Zależnośc pomiędzy PKB a liczbą miliarderów

df2 = df[['gdp_country','rank']].copy()
df2['gdp_country'] = df2['gdp_country'].astype(str).str.replace('[\$,]', '', regex=True)
df2['gdp_country'] = pd.to_numeric(df2['gdp_country'], errors='coerce')
df2['gdp_country'].fillna(df2['gdp_country'].mean(), inplace=True)

billionaires_based_on_gdp = df2.groupby('gdp_country')['rank'].count().reset_index()

ax = sns.scatterplot(billionaires_based_on_gdp, x='gdp_country', y='rank', size='rank',sizes = (10,200), legend=False)
ax.set_title('Zależność pomiędzy PKB a liczbą miliarderów')
ax.set_xlabel('PKB')
ax.set_ylabel('Liczba miliarderów')
plt.show()

Najmłodsi miliarderzy

Mark Mateschitz odziedziczył 49% firmy RedBull

top_youngest=df[df['age']<=30].copy()
top_youngest=top_youngest.sort_values(by=['age']).sort_values(by=['finalWorth'],ascending=False)

plt.figure(figsize=(15, 8))
sns.barplot(x='finalWorth', 
            y=top_youngest['personName'] + ', ' + top_youngest['countryOfCitizenship'] + ' (' + top_youngest['age'].astype(int).astype(str) + ' y.o)', 
            data=top_youngest,color='skyblue',
           )

for i, v in enumerate(top_youngest['finalWorth']):
    if top_youngest.iloc[i]['selfMade']:
        plt.text(v+5, i, f'{v/1000:.1f}' + ' *', color='black', va='center')
    else:
        plt.text(v+5, i, f'{v/1000:.1f}', color='black', va='center')

plt.xlabel('Majątek')
plt.title('Najmłodsi miliarderzy na świecie')
plt.ylabel("Imię, Nazwisko, Wiek")
plt.annotate('* Self-Made', xy=(0.9, 0.05), xycoords='axes fraction', fontsize=10, color='black')
plt.show()