<jupyter_start><jupyter_text>Analyse et visualisation de données avec Python Démarrer avec des donnéesQuestions* Comment importer des données dans Python?* Qu'est-ce que Pandas?* Pourquoi utiliser Pandas pour traiter des données tabulaires?Objectifs* Charger une bibliothèque d'analyse de données Python (Pandas).* Utiliser `read_csv` pour lire des données tabulaires dans Python.* Décrire ce qu'est un DataFrame dans Python.* Accéder et résumer les données d'un DataFrames.* Effectuer des opérations mathématiques et statistiques avec un DataFrame.* Effectuer une première visualisation des données.  Utiliser les DataFrames Pandas dans Python Nos donnéesPour le présent cours, nous utiliserons des données de marchés boursiers. Une première table contient des valeurs de marché à différentes dates. Une seconde table présentée dans un autre chapitre contient de l'information sur les compagnies étudiées.Dans la présente section, nous allons utiliser le fichier **`../data/valeurs.csv`**. Il s'agit d'un fichier CSV (de valeurs séparées par des virgules) contenant les colonnes suivantes : Colonne                 | Description-----------------------: | :-------------------------------------`record_id`              | Identifiant unique de l'enregistrement`year`                   | Année de l'enregistrement`month`                  | Mois de l'enregistrement`day`                    | Jour de l'enregistrement`company_ID`             | Identifiant de la compagnie`Market_Cap_USD`         | Capitalisation boursière (en dollars US)`Total_Return_USD`       | Rendement total (en dollars US)`BETA_60M_ACWI`          | Indice ACWI (sur 5 ans)`volatility_60_days`     | Volatilité (sur 2 mois)`Assets_to_Equity`       | Actifs par équité`Net_debt_to_EBITDA`     | Dette nette par bénéfices avant intérêts et amortissement`Fixed_Assets_to_Assets` | Actifs fixes par tous les actifs`Cash_to_assets`         | Argent par actifs`ROA_2y`                 | Rentabilité des actifs (sur deux ans)`ROE_2y`                 | Retour sur l'équité (sur deux ans)`2y_avg_12M_earnings`    | Bénéfices moyens`FX_RATE_TO_USD`         | Taux fixe`leverage_category`      | Catégorie d'efficacité ou d'influenceLes premiers enregistrements dans le fichiers ressemblent à :```record_id,year,month,day,company_ID,Market_Cap_USD,Total_Return_USD,...0,2015,4,30,1078,70046.75876000001,0.007122814590977855,...1,2015,5,31,1078,72353.5902,0.04696251615682878,...2,2015,6,30,1078,73068.19356,0.009876543209876408,...3,2015,7,31,1078,75465.09233,0.03769356153219229,...4,2015,8,31,1078,67502.07289,-0.10652988755178516,...5,2015,9,30,1078,59945.53702,-0.11194524177522636,0.6485284008925059,...6,2015,10,31,1078,66771.7568,0.11984087518647435,0.7120141025614667,...```  Pandas dans PythonL'une des meilleures options pour traiter des données tabulaires dans Python est d'utiliser la bibliothèque d'analyse de données Python, c'est-à-dire *Pandas*. La bibliothèque Pandas fournit des structures de données, produit des graphiques de haute qualité avec *Matplotlib* et s'intègre bien avec d'autres bibliothèques utilisant des tableaux *NumPy* (qui est une autre bibliothèque Python).<jupyter_code>import pandas as pd<jupyter_output><empty_output><jupyter_text>Charger un fichier CSV avec Pandas Qu'est-ce qu'un DataFrame?<jupyter_code># On utilise ici l'alias "pd" pour accéder aux ressources de Pandas
pd.read_csv("../data/valeurs.csv")
valeurs = pd.read_csv("../data/valeurs.csv")
valeurs
valeurs.head() # Affiche les quelques premiers enregistrements<jupyter_output><empty_output><jupyter_text>Démo - L'objet DataFrameEssayez les codes ci-dessous pour voir ce qu'ils retournent.<jupyter_code>valeurs.columns
valeurs.dtypes
valeurs.shape
# Dans quel format est retourné la taille du DataFrame?<jupyter_output><empty_output><jupyter_text>Calculer des statistiques<jupyter_code>pd.unique(valeurs['year'])
pd.unique(valeurs['leverage_category'])<jupyter_output><empty_output><jupyter_text>Exercice - Calculer des statistiques`1`. Créer une liste des différents identifiants de compagnie (`company_ID`) que l'on peut trouver dans `valeurs`. Sauvegarder le résultat dans `id_cie`. Combien y a-t-il de compagnies différentes?<jupyter_code>id_cie = pd.unique(valeurs['company_ID'])
id_cie.shape[0]<jupyter_output><empty_output><jupyter_text>`2`. Quelle est la différence entre `len(id_cie)` et `valeurs['company_ID'].nunique()`?<jupyter_code>print(len(id_cie))
print(valeurs['company_ID'].nunique())<jupyter_output><empty_output><jupyter_text>Grouper des données<jupyter_code>valeurs['Market_Cap_USD'].describe()
print("Count:    ", valeurs['Market_Cap_USD'].count())
print("Mean:     ", valeurs['Market_Cap_USD'].mean())
print("Std Dev.: ", valeurs['Market_Cap_USD'].std())
print("Min:      ", valeurs['Market_Cap_USD'].min())
print("Max:      ", valeurs['Market_Cap_USD'].max())
# Grouper les données par compagnie
par_cie = valeurs.groupby('company_ID')
# Obtenir des statistiques pour toutes les variables numériques
par_cie.describe()
# Obtenir uniquement la moyenne de chaque colonne
par_cie.mean()<jupyter_output><empty_output><jupyter_text>Exercice - Grouper des données`1`. Combien de valeurs boursières sont `low_leverage` et combien sont `high_leverage`?<jupyter_code>par_leverage = valeurs.groupby('leverage_category')
par_leverage.count()<jupyter_output><empty_output><jupyter_text>`2`. Qu'arrive-t-il si on groupe par deux colonnes et si on recalcule les moyennes?<jupyter_code>par_cie_lev = valeurs.groupby(['company_ID','leverage_category'])
par_cie_lev.mean()<jupyter_output><empty_output><jupyter_text>`3`. Faites calculer un résumé statistique de `Assets_to_Equity` pour chaque compagnie. Indice : c'est possible de sélectionner une seule colonne après avoir groupé les données.<jupyter_code>par_cie['Assets_to_Equity'].describe()<jupyter_output><empty_output><jupyter_text>Obtenir la moyenne d'une seule compagnie<jupyter_code>par_cie['Assets_to_Equity'].mean()[270885]<jupyter_output><empty_output><jupyter_text>Opérations mathématiques de base sur les colonnes<jupyter_code># Calculer tous les Market_Cap_USD en CAD
valeurs['Market_Cap_USD'] * 1.33<jupyter_output><empty_output><jupyter_text>Créer des graphiques à partir de Pandas<jupyter_code># Créer un graphe de courbes
valeurs.groupby(['year', 'month'])['Market_Cap_USD'].mean().plot(kind='line')<jupyter_output><empty_output><jupyter_text>Exercice - Créer un graphiqueCréer un graphique de type `'bar'` montrant la médiane de `Cash_to_assets` pour chaque compagnie. Note: pour améliorer la visibilité des données, il faut ajouter l'argument `figsize=(16, 4)` à la méthode générant le graphique.<jupyter_code>par_cie['Cash_to_assets'].median().plot(kind='bar', figsize=(16, 4))<jupyter_output><empty_output><jupyter_text>Exemple résumé<jupyter_code>par_cie_lev = valeurs.groupby(['company_ID','leverage_category'])
cie_lev_totalc = par_cie_lev['Cash_to_assets'].sum()
cie_lev_totalc
cie_lev_totalc.unstack()
clt = cie_lev_totalc.unstack()
s_plot = clt.plot(kind='bar', stacked=True, figsize=(16, 4),
                  title="Total de Cash_to_assets par compagnie et leverage")
s_plot.set_xlabel("Numéro de compagnie")
s_plot.set_ylabel("Cash to assets")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11432525951557093, 'fraction_numerical': 0.04927335640138408, 'mean_word_length': 6.008729388942774, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 61, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '15', 'dir': 'jupyter-structured-clean-dedup', 'id': '470202', 'license': 'MIT', 'n_tokens_mistral': 2799, 'n_tokens_neox': 2581, 'n_words': 565, 'path': 'notebooks_fr/soln-02-donnees.ipynb', 'repo_name': 'BoulaKANOUTE/dat201-python-cdpq', 'size': '7225'}