Python >> Tutoriel Python >  >> Python Tag >> Pandas

Apprendre les pandas en explorant les données COVID-19

Le Centre européen de prévention et de contrôle des maladies fournit des données COVID-19 mondiales mises à jour quotidiennement et faciles à télécharger aux formats JSON, CSV ou XML. Dans ce didacticiel, nous utiliserons l'outil d'analyse de données pandas sur les données CSV (valeurs séparées par des virgules) pour apprendre certaines des commandes pandas de base et explorer le contenu de l'ensemble de données.

Configuration de notre environnement de développement

Assurez-vous que Python 3 est installé. À l'heure actuelle, Python 3.8.2 est le dernier.

Au cours de ce tutoriel, nous allons également utiliser des pandas.

Installez-le maintenant dans un nouvel environnement virtuel avec les commandes suivantes :

python -m venv covidpandas
source covidpandas/bin/activate

pip install pandas

Nous sommes maintenant prêts à obtenir les données COVID-19 et à commencer à les analyser avec des pandas.

Obtenir les données COVID-19

Accédez à la page Télécharger les données d'aujourd'hui sur la répartition géographique des cas de COVID-19 dans le monde dans votre navigateur Web. Cela devrait ressembler à la capture d'écran suivante.

Il devrait y avoir un lien pour télécharger les données au format CSV, mais l'organisation a changé la mise en page à plusieurs reprises au cours des dernières semaines, ce qui rend difficile la recherche de formats autres qu'Excel (XLSX). Si vous rencontrez des difficultés pour obtenir la version CSV, il vous suffit de télécharger celle-ci depuis GitHub, qui est rattachée à une copie téléchargée le 28 mars 2020.

Importer le CSV dans pandas

Nous avons les données dans un CSV maintenant nous devons les importer dans un pandasDataFrame.

Commencez par exécuter le REPL Python :

python

>>>

Le REPL est prêt à fonctionner, nous devons maintenant importer des pandas afin que nous puissions lire les données que nous avons téléchargées.

from pandas import read_csv

df = read_csv("covid-19-cases-march-28-2020.csv")

Ne vous inquiétez pas si vous obtenez une erreur comme UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7... .Exécutez plutôt cette commande qui définit explicitement l'encodage du fichier afin que les pandas puissent lire correctement le CSV.

# make sure the file name of the csv matches your file's name!
df = read_csv("covid-19-cases-march-28-2020.csv", encoding="ISO-8859-1")

Nous avons maintenant nos données chargées dans apandas DataFrame et pouvons commencer à exécuter du code pour poke et prod et ce qu'il y a à l'intérieur de l'ensemble de données.

Exécuter des commandes pandas

Voyons d'abord à quoi ressemble un échantillon de données. J'exécute généralement le head et tail fonctionne lorsque j'ouvre quelque chose pour savoir ce qui est contenu dans les cinq premières et les cinq dernières lignes.

df.head()

Vous devriez voir six lignes de sortie :une comme en-tête de colonne et les cinq premières lignes de données du CSV :

      dateRep  day  month  year  cases  deaths countriesAndTerritories geoId countryterritoryCode  popData2018
0  28/03/2020   28      3  2020     16       1             Afghanistan    AF                  AFG   37172386.0
1  27/03/2020   27      3  2020      0       0             Afghanistan    AF                  AFG   37172386.0
2  26/03/2020   26      3  2020     33       0             Afghanistan    AF                  AFG   37172386.0
3  25/03/2020   25      3  2020      2       0             Afghanistan    AF                  AFG   37172386.0
4  24/03/2020   24      3  2020      6       1             Afghanistan    AF                  AFG   37172386.0

Le tail la fonction examine les cinq dernières lignes d'un DataFrame.

df.tail()

tail la sortie ressemblera à ceci :

         dateRep  day  month  year  cases  deaths countriesAndTerritories geoId countryterritoryCode  popData2018
7315  25/03/2020   25      3  2020      0       0                Zimbabwe    ZW                  ZWE   14439018.0
7316  24/03/2020   24      3  2020      0       1                Zimbabwe    ZW                  ZWE   14439018.0
7317  23/03/2020   23      3  2020      0       0                Zimbabwe    ZW                  ZWE   14439018.0
7318  22/03/2020   22      3  2020      1       0                Zimbabwe    ZW                  ZWE   14439018.0
7319  21/03/2020   21      3  2020      1       0                Zimbabwe    ZW                  ZWE   14439018.0

Notez que vous pouvez également passer un entier dans head ou tail commedf.head(10) pour obtenir le premier ou le dernier n nombre de lignes.

Il semble basé sur le tail fonction, nous avons environ 7320 lignes de données (puisque la première ligne est indexée à 0). Nous pouvons confirmer la quantité de données dans chaque colonne avec le count fonction.

df.count()

count La sortie ressemblera à :

dateRep                    7320
day                        7320
month                      7320
year                       7320
cases                      7320
deaths                     7320
countriesAndTerritories    7320
geoId                      7306
countryterritoryCode       7254
popData2018                7311
dtype: int64

Que se passe-t-il si nous voulons examiner l'une de ces colonnes et trouver, par exemple, la valeur la plus élevée de cas ?

df.cases.max()

Dans cet ensemble de données, nous obtenons 18695 en sortie. Et si vous examiniez des mesures statistiques standard dans toutes les colonnes ? C'est là que le describe la fonction est pratique.

df.describe()

describe présente des mesures statistiques standard telles que min, max, médiane et moyenne pour tout dans votre ensemble de données. Dans ce cas, nous recevons en sortie :

               day        month         year         cases       deaths   popData2018
count  7320.000000  7320.000000  7320.000000   7320.000000  7320.000000  7.311000e+03
mean     16.828142     2.249454  2019.990847     80.870355     3.687158  7.130483e+07
std       8.322981     1.256463     0.095239    608.270244    35.327689  2.140624e+08
min       1.000000     1.000000  2019.000000     -9.000000     0.000000  1.000000e+03
25%      10.000000     1.000000  2020.000000      0.000000     0.000000  4.137309e+06
50%      18.000000     2.000000  2020.000000      0.000000     0.000000  1.072767e+07
75%      24.000000     3.000000  2020.000000      5.000000     0.000000  5.139301e+07
max      31.000000    12.000000  2020.000000  18695.000000   971.000000  1.392730e+09

Que diriez-vous d'une vue rapide pour savoir si les données des colonnes sont corrélées ou non les unes avec les autres ? Le corr la fonction est ce dont nous avons besoin.

df.corr()

Pour notre ensemble de données, corr sorties :

                  day     month      year     cases    deaths  popData2018
day          1.000000  0.203006 -0.163665  0.063629  0.060075    -0.040677
month        0.203006  1.000000 -0.745912  0.062494  0.052707    -0.039131
year        -0.163665 -0.745912  1.000000  0.012715  0.010032    -0.006294
cases        0.063629  0.062494  0.012715  1.000000  0.716968     0.136580
deaths       0.060075  0.052707  0.010032  0.716968  1.000000     0.082229
popData2018 -0.040677 -0.039131 -0.006294  0.136580  0.082229     1.000000

Sans surprise, nous voyons une corrélation de 1,000000 entre une colonne et elle-même. Nous devrions nous inquiéter si nous ne voyions pas ce résultat ! Pour les autres colonnes, il n'est peut-être pas logique de regarder leur corrélation. C'est là que vous devez penser aux données. Il existe souvent une corrélation entre des colonnes totalement indépendantes simplement parce que les données sont structurées d'une certaine manière.

Si vous êtes un développeur comme moi sans expérience rigoureuse en statistiques (Stats 200 à l'université a été long il y a longtemps), vous devrez peut-être revoir vos connaissances en statistiques avant de pouvoir dire si quelque chose dans les données est important ou non.

Continuons à explorer les données. Nous pouvons sélectionner des colonnes et déterminer le nombre d'éléments uniques qu'elles contiennent. Par exemple, combien de pays et de territoires uniques sont répertoriés ?

df.countriesAndTerritories.nunique()

Dans ce cas, le résultat devrait être 196.

Poser des questions sur les données

Ces fonctions conviennent parfaitement aux requêtes de base pour savoir ce qu'il y a dans l'ensemble de données, mais comment poser de vraies questions en enchaînant certaines commandes ?

Nous savons maintenant qu'il y a 7320 lignes dans cet ensemble puisque nous avons utilisé le count fonction ci-dessus. Chaque ligne représente un seul jour dans un pays. Maintenant, posez une question. Pendant combien de jours dans ces pays 10 cas ou plus ont-ils été signalés ?

Créons une nouvelle base de données nommée df2 avec les lignes qui n'ont que 10 cas ou plus signalés ce jour-là, puis comptons le nombre de lignes qu'elle contient.

df2 = df[df['cases']>=10]
df2.count()

Cela devrait nous donner la valeur 1531. Il y a eu 1531 cas de 10 cas de COVID-19 ou plus signalés en une seule journée, dans les 196 pays ou territoires répertoriés. Mais le 1531 est difficile à expliquer aux gens. Nous devrions choisir un seul pays et montrer combien de fois 10 cas ou plus ont été signalés en une journée. Que diriez-vous d'un pays plus petit comme le Vietnam qui ne fait pas l'objet d'autant de reportages que la Chine, les États-Unis ou l'Italie ?

df2[df2['countriesAndTerritories']=='Vietnam']

Cela nous donnera la sortie complète des données par colonne :

         dateRep  day  month  year  cases  deaths countriesAndTerritories geoId countryterritoryCode  popData2018
7217  28/03/2020   28      3  2020     16       0                 Vietnam    VN                  VNM   95540395.0
7219  26/03/2020   26      3  2020     14       0                 Vietnam    VN                  VNM   95540395.0
7220  25/03/2020   25      3  2020     11       0                 Vietnam    VN                  VNM   95540395.0
7222  23/03/2020   23      3  2020     24       0                 Vietnam    VN                  VNM   95540395.0
7226  19/03/2020   19      3  2020     15       0                 Vietnam    VN                  VNM   95540395.0

On peut aussi utiliser le count fonction ici pour confirmer qu'il y a eu cinq jours au cours desquels 10 nouveaux cas ou plus ont été signalés au Vietnam jusqu'à présent :

df2[df2['countriesAndTerritories']=='Vietnam'].count()

Nous obtenons la sortie de 5 pour les colonnes. Malheureusement, lorsque vous regardez les données complètes, il apparaît que ces lignes sont toutes très récentes et que le virus commence tout juste à s'y propager plus largement. Espérons qu'avec tous les autres pays, ils pourront inverser la tendance, aplanir la courbe et empêcher davantage de personnes de tomber malades à mesure que nous poursuivons.

C'est un bon point de départ, mais nous avons couvert beaucoup de pandas dans ce didacticiel !

Quelle est la prochaine ?

Nous venons d'importer et d'examiner le contenu de l'ensemble de données COVID-19 du Centre européen de prévention et de contrôle des maladies à l'aide de pandas. C'était un tour rapide de quelques commandes pandas de base et je vous recommande fortement de parcourir la liste de documentation DataFrame pour en savoir plus sur toutes les autres fonctions pratiques que cet outil fournit aux développeurs.

Vous pouvez également avoir une idée de ce qu'il faut coder ensuite dans votre projet Python en lisant la page de table des matières Full Stack Python.

Des questions? Contactez-moi via Twitter@fullstackpythonor @mattmakai. Je suis également sur GitHub avec le nom d'utilisateur mattmakai.

Quelque chose ne va pas avec ce message ? La source de cette page sur GitHuband soumet une pull request.