import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
print("Modules are imported.")Modules are imported.
NGUYEN Duc Hoang Viet
Covid-19_from_John_Hopkins_University/CONVENIENT_us_deaths.csv
Covid-19_from_John_Hopkins_University/CONVENIENT_us_metadata.csv
Covid-19_from_John_Hopkins_University/RAW_global_deaths.csv
Covid-19_from_John_Hopkins_University/CONVENIENT_global_metadata.csv
Covid-19_from_John_Hopkins_University/RAW_global_confirmed_cases.csv
Covid-19_from_John_Hopkins_University/CONVENIENT_us_confirmed_cases.csv
Covid-19_from_John_Hopkins_University/CONVENIENT_global_confirmed_cases.csv
Covid-19_from_John_Hopkins_University/CONVENIENT_global_deaths.csv
Covid-19_from_John_Hopkins_University/RAW_us_deaths.csv
Covid-19_from_John_Hopkins_University/RAW_us_confirmed_cases.csv
| Country/Region | Province/State | Lat | Long | 1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | ... | 2/28/23 | 3/1/23 | 3/2/23 | 3/3/23 | 3/4/23 | 3/5/23 | 3/6/23 | 3/7/23 | 3/8/23 | 3/9/23 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Afghanistan | NaN | 33.93911 | 67.709953 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 209322 | 209340 | 209358 | 209362 | 209369 | 209390 | 209406 | 209436 | 209451 | 209451 |
| 1 | Albania | NaN | 41.15330 | 20.168300 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 334391 | 334408 | 334408 | 334427 | 334427 | 334427 | 334427 | 334427 | 334443 | 334457 |
| 2 | Algeria | NaN | 28.03390 | 1.659600 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 271441 | 271448 | 271463 | 271469 | 271469 | 271477 | 271477 | 271490 | 271494 | 271496 |
| 3 | Andorra | NaN | 42.50630 | 1.521800 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 47866 | 47875 | 47875 | 47875 | 47875 | 47875 | 47875 | 47875 | 47890 | 47890 |
| 4 | Angola | NaN | -11.20270 | 17.873900 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 105255 | 105277 | 105277 | 105277 | 105277 | 105277 | 105277 | 105277 | 105288 | 105288 |
5 rows × 1147 columns
289 lignes (countries/regions) et 1147 colonnes (metadata + dates)
| Province/State | 1/22/20 | 1/23/20 | 1/24/20 | 1/25/20 | 1/26/20 | 1/27/20 | 1/28/20 | 1/29/20 | 1/30/20 | ... | 2/28/23 | 3/1/23 | 3/2/23 | 3/3/23 | 3/4/23 | 3/5/23 | 3/6/23 | 3/7/23 | 3/8/23 | 3/9/23 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Country/Region | |||||||||||||||||||||
| Afghanistan | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 209322 | 209340 | 209358 | 209362 | 209369 | 209390 | 209406 | 209436 | 209451 | 209451 | |
| Albania | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 334391 | 334408 | 334408 | 334427 | 334427 | 334427 | 334427 | 334427 | 334443 | 334457 | |
| Algeria | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 271441 | 271448 | 271463 | 271469 | 271469 | 271477 | 271477 | 271490 | 271494 | 271496 | |
| Andorra | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 47866 | 47875 | 47875 | 47875 | 47875 | 47875 | 47875 | 47875 | 47890 | 47890 | |
| Angola | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 105255 | 105277 | 105277 | 105277 | 105277 | 105277 | 105277 | 105277 | 105288 | 105288 |
5 rows × 1144 columns
La fonction isnull() est utilisée pour vérifier la présence de valeurs manquantes dans le DataFrame corona_dataset_aggregated. La méthode sum() est appliquée deux fois pour obtenir le nombre total de valeurs manquantes dans l’ensemble du DataFrame. Si le résultat est 0, cela signifie qu’il n’y a aucune valeur manquante dans les données agrégées par pays. Et avec la fonction sum() permet de compter le nombre de valeurs manquantes pour chaque colonne en additionnant les valeurs True (1) et False (0) dans chaque colonne. En appliquant sum() à l’ensemble du DataFrame, on obtient le nombre total de valeurs manquantes dans toutes les colonnes combinées.
Et, on obient np.int64(0) qui indique qu’il n’y a aucune valeur manquante dans le DataFrame corona_dataset_aggregated après l’agrégation par pays. Cela signifie que toutes les données sont complètes et qu’il n’y a pas de valeurs manquantes à traiter dans ce DataFrame agrégé. Par conséquent, on peut procéder à l’analyse des données sans se soucier des valeurs manquantes.
la fonction duplicated() qui retoure un table de booléens indiquant si une ligne est un doublon ou non. En appliquant sum() à ce résultat, on obtient le nombre total de lignes dupliquées dans le DataFrame corona_dataset_aggregated. Si le résultat est 0, cela signifie qu’il n’y a aucune ligne dupliquée dans les données agrégées par pays. Cela indique que chaque pays est représenté une seule fois dans le DataFrame, ce qui est important pour garantir l’intégrité des données et éviter les biais dans l’analyse.
covid_clean = corona_dataset_aggregated.copy() # Création d'une copie du DataFrame pour éviter de modifier l'original
covid_clean = covid_clean.drop(columns=["Lat", "Long"], errors="ignore") # Suppression des colonnes "Lat" et "Long" si elles existent, sinon ignorer l'erreur
covid_ts = covid_clean.T # Transposition du DataFrame pour que les dates deviennent les index et les pays deviennent les colonnes
covid_ts.index = pd.to_datetime(covid_ts.index, errors="coerce") # Conversion de l'index en format datetime, en ignorant les erreurs de conversion
covid_ts = covid_ts[~covid_ts.index.isna()] # Suppression des lignes dont l'index n'a pas pu être converti en datetime (si nécessaire)
covid_ts.head()| Country/Region | Afghanistan | Albania | Algeria | Andorra | Angola | Antarctica | Antigua and Barbuda | Argentina | Armenia | Australia | ... | Uruguay | Uzbekistan | Vanuatu | Venezuela | Vietnam | West Bank and Gaza | Winter Olympics 2022 | Yemen | Zambia | Zimbabwe |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2020-01-22 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2020-01-23 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
| 2020-01-24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
| 2020-01-25 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
| 2020-01-26 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | ... | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 |
5 rows × 201 columns
Le jeu de données a ensuite été exporté au format CSV afin de faciliter sa réutilisation dans les étapes ultérieures de l’analyse exploratoire des données (EDA) et de garantir la reproductibilité du projet.
| Country name | Regional indicator | Ladder score | Standard error of ladder score | upperwhisker | lowerwhisker | Logged GDP per capita | Social support | Healthy life expectancy | Freedom to make life choices | Generosity | Perceptions of corruption | Ladder score in Dystopia | Explained by: Log GDP per capita | Explained by: Social support | Explained by: Healthy life expectancy | Explained by: Freedom to make life choices | Explained by: Generosity | Explained by: Perceptions of corruption | Dystopia + residual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Finland | Western Europe | 7.842 | 0.032 | 7.904 | 7.780 | 10.775 | 0.954 | 72.0 | 0.949 | -0.098 | 0.186 | 2.43 | 1.446 | 1.106 | 0.741 | 0.691 | 0.124 | 0.481 | 3.253 |
| 1 | Denmark | Western Europe | 7.620 | 0.035 | 7.687 | 7.552 | 10.933 | 0.954 | 72.7 | 0.946 | 0.030 | 0.179 | 2.43 | 1.502 | 1.108 | 0.763 | 0.686 | 0.208 | 0.485 | 2.868 |
| 2 | Switzerland | Western Europe | 7.571 | 0.036 | 7.643 | 7.500 | 11.117 | 0.942 | 74.4 | 0.919 | 0.025 | 0.292 | 2.43 | 1.566 | 1.079 | 0.816 | 0.653 | 0.204 | 0.413 | 2.839 |
| 3 | Iceland | Western Europe | 7.554 | 0.059 | 7.670 | 7.438 | 10.878 | 0.983 | 73.0 | 0.955 | 0.160 | 0.673 | 2.43 | 1.482 | 1.172 | 0.772 | 0.698 | 0.293 | 0.170 | 2.967 |
| 4 | Netherlands | Western Europe | 7.464 | 0.027 | 7.518 | 7.410 | 10.932 | 0.942 | 72.4 | 0.913 | 0.175 | 0.338 | 2.43 | 1.501 | 1.079 | 0.753 | 0.647 | 0.302 | 0.384 | 2.798 |
| Country name | Regional indicator | Ladder score | Logged GDP per capita | Social support | Healthy life expectancy | Freedom to make life choices | Generosity | Perceptions of corruption | Ladder score in Dystopia | Explained by: Log GDP per capita | Explained by: Social support | Explained by: Healthy life expectancy | Explained by: Freedom to make life choices | Explained by: Generosity | Explained by: Perceptions of corruption | Dystopia + residual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Finland | Western Europe | 7.842 | 10.775 | 0.954 | 72.0 | 0.949 | -0.098 | 0.186 | 2.43 | 1.446 | 1.106 | 0.741 | 0.691 | 0.124 | 0.481 | 3.253 |
| 1 | Denmark | Western Europe | 7.620 | 10.933 | 0.954 | 72.7 | 0.946 | 0.030 | 0.179 | 2.43 | 1.502 | 1.108 | 0.763 | 0.686 | 0.208 | 0.485 | 2.868 |
| 2 | Switzerland | Western Europe | 7.571 | 11.117 | 0.942 | 74.4 | 0.919 | 0.025 | 0.292 | 2.43 | 1.566 | 1.079 | 0.816 | 0.653 | 0.204 | 0.413 | 2.839 |
| 3 | Iceland | Western Europe | 7.554 | 10.878 | 0.983 | 73.0 | 0.955 | 0.160 | 0.673 | 2.43 | 1.482 | 1.172 | 0.772 | 0.698 | 0.293 | 0.170 | 2.967 |
| 4 | Netherlands | Western Europe | 7.464 | 10.932 | 0.942 | 72.4 | 0.913 | 0.175 | 0.338 | 2.43 | 1.501 | 1.079 | 0.753 | 0.647 | 0.302 | 0.384 | 2.798 |
{'Czech Republic',
'Hong Kong S.A.R. of China',
'Ivory Coast',
'Myanmar',
'North Cyprus',
'Palestinian Territories',
'South Korea',
'Swaziland',
'Taiwan Province of China',
'Turkmenistan',
'United States'}
| Country name | Regional indicator | Ladder score | Logged GDP per capita | Social support | Healthy life expectancy | Freedom to make life choices | Generosity | Perceptions of corruption | Ladder score in Dystopia | ... | 2/28/23 | 3/1/23 | 3/2/23 | 3/3/23 | 3/4/23 | 3/5/23 | 3/6/23 | 3/7/23 | 3/8/23 | 3/9/23 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Finland | Western Europe | 7.842 | 10.775 | 0.954 | 72.0 | 0.949 | -0.098 | 0.186 | 2.43 | ... | 1462169 | 1462169 | 1462976 | 1462976 | 1462976 | 1462976 | 1462976 | 1462976 | 1462976 | 1463644 |
| 1 | Denmark | Western Europe | 7.620 | 10.933 | 0.954 | 72.7 | 0.946 | 0.030 | 0.179 | 2.43 | ... | 3449989 | 3450101 | 3450223 | 3450336 | 3450336 | 3450336 | 3450587 | 3450757 | 3450897 | 3451036 |
| 2 | Switzerland | Western Europe | 7.571 | 11.117 | 0.942 | 74.4 | 0.919 | 0.025 | 0.292 | 2.43 | ... | 4412439 | 4412439 | 4412439 | 4412439 | 4412439 | 4412439 | 4412439 | 4413911 | 4413911 | 4413911 |
| 3 | Iceland | Western Europe | 7.554 | 10.878 | 0.983 | 73.0 | 0.955 | 0.160 | 0.673 | 2.43 | ... | 209093 | 209093 | 209093 | 209093 | 209093 | 209093 | 209093 | 209137 | 209137 | 209137 |
| 4 | Netherlands | Western Europe | 7.464 | 10.932 | 0.942 | 72.4 | 0.913 | 0.175 | 0.338 | 2.43 | ... | 8708982 | 8709011 | 8709011 | 8710897 | 8710897 | 8710897 | 8710897 | 8712835 | 8712835 | 8712835 |
5 rows × 1161 columns
happiness_report_clean["Country name"] = happiness_report_clean["Country name"].replace({
"United States": "US",
"South Korea": "Korea, South",
"Czech Republic": "Czechia",
"Myanmar": "Burma",
"Swaziland": "Eswatini",
"Ivory Coast": "Cote d'Ivoire",
"Palestinian Territories": "West Bank and Gaza"
})
happiness_report_clean.to_csv("data/happiness_report_clean.csv", index=False)
last_date = corona_dataset_aggregated.columns[-1]
corona_dataset_aggregated["Total Cases"] = corona_dataset_aggregated[last_date]
merged_data = happiness_report_clean.merge(
corona_dataset_aggregated,
left_on="Country name",
right_index=True,
how="inner"
)
merged_data.to_csv("data/merged_data.csv", index=False)
merged_data.head()| Country name | Regional indicator | Ladder score | Logged GDP per capita | Social support | Healthy life expectancy | Freedom to make life choices | Generosity | Perceptions of corruption | Ladder score in Dystopia | ... | 3/1/23 | 3/2/23 | 3/3/23 | 3/4/23 | 3/5/23 | 3/6/23 | 3/7/23 | 3/8/23 | 3/9/23 | Total Cases | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Finland | Western Europe | 7.842 | 10.775 | 0.954 | 72.0 | 0.949 | -0.098 | 0.186 | 2.43 | ... | 1462169 | 1462976 | 1462976 | 1462976 | 1462976 | 1462976 | 1462976 | 1462976 | 1463644 | 1463644 |
| 1 | Denmark | Western Europe | 7.620 | 10.933 | 0.954 | 72.7 | 0.946 | 0.030 | 0.179 | 2.43 | ... | 3450101 | 3450223 | 3450336 | 3450336 | 3450336 | 3450587 | 3450757 | 3450897 | 3451036 | 3451036 |
| 2 | Switzerland | Western Europe | 7.571 | 11.117 | 0.942 | 74.4 | 0.919 | 0.025 | 0.292 | 2.43 | ... | 4412439 | 4412439 | 4412439 | 4412439 | 4412439 | 4412439 | 4413911 | 4413911 | 4413911 | 4413911 |
| 3 | Iceland | Western Europe | 7.554 | 10.878 | 0.983 | 73.0 | 0.955 | 0.160 | 0.673 | 2.43 | ... | 209093 | 209093 | 209093 | 209093 | 209093 | 209093 | 209137 | 209137 | 209137 | 209137 |
| 4 | Netherlands | Western Europe | 7.464 | 10.932 | 0.942 | 72.4 | 0.913 | 0.175 | 0.338 | 2.43 | ... | 8709011 | 8709011 | 8710897 | 8710897 | 8710897 | 8710897 | 8712835 | 8712835 | 8712835 | 8712835 |
5 rows × 1162 columns
Nombre de pays dans Happiness Report : 149
Nombre de pays après fusion : 145
Nombre de pays non correspondants : 4
{'Taiwan Province of China', 'Hong Kong S.A.R. of China', 'Turkmenistan', 'North Cyprus'}
['Hong Kong S.A.R. of China', 'North Cyprus', 'Taiwan Province of China', 'Turkmenistan']
Une analyse des noms de pays a révélé quelques divergences entre les deux bases de données. Après harmonisation des principales correspondances, 145 pays ont pu être fusionnés. Quatre territoires (Hong Kong S.A.R. of China, Taiwan Province of China, North Cyprus et Turkmenistan) n’ont pas pu être associés directement en raison de différences de nomenclature ou de l’absence de données correspondantes dans la base COVID-19.
PROJET COVID-19 DATA ANALYST