<jupyter_start><jupyter_text>Analyse et visualisation de données avec Python Combiner des DataFrames avec PandasQuestions* Peut-on travaillers avec plusieurs sources de données?* Comment combiner les données de deux DataFrames?Objectifs* Combiner les données de plusieurs fichiers en utilisant `concat` et `merge`.* Combiner deux DataFrames utilisant un identifiant commun.  Charger nos données<jupyter_code># Charger le module pandas
import pandas as pd

# Charger les données
valeurs = pd.read_csv("../data/valeurs.csv")<jupyter_output><empty_output><jupyter_text>Concaténer des DataFrames<jupyter_code># Sélectionner les 10 premiers enregistrements
premiers10 = valeurs.head(10)
premiers10
# Sélectionner les 10 derniers enregistrements
derniers10 = valeurs.tail(10)
derniers10
# Concaténer les dataframes verticalement
liste_df = [premiers10, derniers10]
vertical = pd.concat(liste_df, axis=0)
vertical
# Réinitaliser l'index du dataframe
# L'option drop=True évite l'ajout d'une colonne avec l'ancien index
vertical = vertical.reset_index(drop=True)
vertical<jupyter_output><empty_output><jupyter_text>Écrire le résultat dans un fichier CSV<jupyter_code>fichier_csv = 'vertical.csv'

# Omettre l'index
vertical.to_csv(fichier_csv, index=False)
# Charger le nouveau fichier CSV
vertical2 = pd.read_csv(fichier_csv)
vertical2<jupyter_output><empty_output><jupyter_text>Exercice - Concaténer des DataFrames* Dans `valeurs`, sélectionnez individuellement les enregistrements des années 2016 et 2017.* Concaténez les deux DataFrames verticalement.* Créez un "`line`-plot" montrant la moyenne des `Market_Cap_USD` par mois pour chaque année (soit une ligne par année).* Sauvegardez le tableau des moyennes dans un fichier CSV et le recharger.<jupyter_code># Obtenir les données pour chaque année
valeurs2016 = valeurs[valeurs['year'] == 2016]
valeurs2017 = valeurs[valeurs['year'] == 2017]

# Concatener verticalement
liste_df = [valeurs2016, valeurs2017]
valeurs16_17 = pd.concat(liste_df, axis=0)
# Calculer la moyenne par année pour chaque mois
moyennes16_17 = valeurs16_17.groupby(['month', 'year'])['Market_Cap_USD'].mean()
moyennes16_17 = moyennes16_17.unstack()
moyennes16_17
# Créer le graphique
moyennes16_17.plot(kind="line")
# Écrire dans un fichier - garder l'index "month" cette fois-ci
moyennes16_17.to_csv("moyennes16_17.csv")

# Relire les données, fournir le nom de l'index
pd.read_csv("moyennes16_17.csv", index_col='month')<jupyter_output><empty_output><jupyter_text>Joindre deux DataFramesNous allons utiliser les enregistrements de décembre 2015 pour lesquels le Market_Cap_USD est d'au moins 250 000$.<jupyter_code>valeurs_250k = valeurs[(valeurs['year'] == 2015) &
                       (valeurs['month'] == 12) &
                       (valeurs['Market_Cap_USD'] >= 250000)]

# Garder seulement quelques colonnes
valeurs_250k = valeurs_250k[['company_ID',
                             'Market_Cap_USD',
                             'Total_Return_USD',
                             'Assets_to_Equity', 
                             'leverage_category']]
valeurs_250k
# Importons les informations des compagnies
compagnies = pd.read_csv('../data/compagnies.csv')
compagnies<jupyter_output><empty_output><jupyter_text>Identifier les clés de jonction<jupyter_code># Afficher les colonnes
valeurs_250k.columns
# Afficher les autres colonnes
compagnies.columns<jupyter_output><empty_output><jupyter_text>Une intersection ou "inner join" ![Inner join of tables A and B](https://datacarpentry.org/python-ecology-lesson/fig/inner-join.png)<jupyter_code># Effectuer l'intersection des compagnies et des valeurs sélectionnées
cle = 'company_ID'
intersection = pd.merge(left=compagnies, right=valeurs_250k,
                        left_on=cle, right_on=cle)
# Quelle est la taille de la jonction?
intersection.shape
intersection<jupyter_output><empty_output><jupyter_text>Jonction de gauche ![Left join of tables A and B](https://datacarpentry.org/python-ecology-lesson/fig/left-join.png)<jupyter_code>jonc_gauche = pd.merge(left=compagnies, right=valeurs_250k,
                       how='left', on=cle)
# Quelle est la taille de la jonction?
jonc_gauche.shape
jonc_gauche<jupyter_output><empty_output><jupyter_text>Les autres types de jonction* `how='right'` : toutes les rangées du second DataFrame sont gardées* `how='outer'` : équivalent d'une union, toutes les rangées sont gardées  Exercice - Joindre toutes les données`1`. Créez un nouveau DataFrame tel que tous les enregistrements de `valeurs.csv` aient leurs informations de compagnie au début de la jonction.<jupyter_code>valeurs_cie = pd.merge(left=compagnies, right=valeurs, how='right', on=cle)
valeurs_cie<jupyter_output><empty_output><jupyter_text>`2`. Calculez et créez un graphique (*bar-plot*) montrant la moyenne de `Market_Cap_USD` pour chaque `sector_GICS_name`.<jupyter_code>par_sector = valeurs_cie.groupby('sector_GICS_name')
moyenne_cap = par_sector['Market_Cap_USD'].mean()
moyenne_cap.plot(kind='bar')<jupyter_output><empty_output><jupyter_text>`3`. Calculez le nombre d'enregistrements selon le pays et selon la catégorie de "leverage". Créez un bar-plot montrant le nombre d'enregistrements par pays, avec une couleur différente par catégorie.<jupyter_code>colonnes = ['country', 'leverage_category']
par_pays_lev = valeurs_cie.groupby(colonnes)
decompte = par_pays_lev["record_id"].count().unstack()
decompte
decompte.plot(kind='bar', stacked=True, logy=True)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0953857377348167, 'fraction_numerical': 0.025898230895495165, 'mean_word_length': 5.770370370370371, 'pattern_counts': {'":': 0, '<': 45, '<?xml version=': 0, '>': 46, 'https://': 2, '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': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '43639', 'license': 'MIT', 'n_tokens_mistral': 2039, 'n_tokens_neox': 1931, 'n_words': 453, 'path': 'solutions/03-combiner.ipynb', 'repo_name': 'calculquebec/dat201-python-cdpq', 'size': '5483'}