Skip to content

Contexte

Une période excitante !

Je gère depuis quelques années ma boutique en ligne de gadgets, "DataGadgets", qui fonctionne très bien, et je viens de m’étendre vers de nouveaux marchés. Pendant les cinq premières années, je me suis concentré sur le marché américain, mais maintenant j’expédie aussi mes gadgets au Royaume-Uni et en Europe. Sauf que mon reporting interne ne marche plus : les transactions ne sont plus uniquement en USD (dollars), je reçois aussi des transactions en EUR (euros) et en GBP (livres sterling).

Pour mieux comprendre le volume de ventes, je dois convertir toutes les transactions qui ne sont pas en USD vers USD, puis calculer la somme totale. Pour faire ça correctement, j’ai besoin d’utiliser les bons taux de change.

Rappel : Un taux de change, c’est la règle qui dit combien vaut une monnaie par rapport à une autre.

  • Exemple : Si 1 dollar = 0,90 euro, alors le taux de change dit comment transformer des dollars en euros (ou l’inverse).

Dans ce projet, je pars d’un fichier CSV qui contient toutes les transactions e-commerce du 21 janvier, dans leur devise d’origine. Mon objectif est de calculer le montant total en USD de toutes les transactions, afin de savoir combien j’ai vendu en USD le 21 janvier. Pour y arriver, je dois convertir chaque transaction non-USD en USD en utilisant le taux de change du 21 janvier 2024.

Pour récupérer les taux de change du 21 janvier 2024, j’utilise l’API publique et gratuite VAT Comply rates. J’utilise aussi pandas pour charger le fichier CSV dans un DataFrame, et requests pour faciliter l’appel à l’API.

Rappel : Une API est un service qui permet à un programme de demander des informations à un autre programme.

  • De manière simplifiée : vous posez une question, l’API vous répond avec des données.

Je dois mettre à jour le DataFrame orders pour que la version finale contienne deux nouvelles colonnes : exchange_rate (taux de change) et amount_usd (transaction en dollars). :

amountcurrencyexchange_rateamount_usd
43.75EUR......
385.5GBP......
495.5GBP......
117.99GBP......
624USD......

Phase 1 : Collecte et préparation des données

1. Extraction du fichier des transactions

# Import des packages/bibliothèques nécessaires
import pandas as pd
import requests

# Lire le fichier CSV dans un DataFrame
orders = pd.read_csv('data/orders-2024-01-21.csv')
orders.head() # Affiche seulement les 5 premières lignes

Voilà à quoi ressemble la table des transactions : orders !

# Vérifions tout de même s’il n’y a pas de valeurs nulles et le type des variables afin d’éviter les mauvaises surprises
orders.info()

2. Récupération dans l’API de la table des taux en USD

Rappel : une URL, c’est comme l’adresse d’une maison, mais pour une page web ou des données (en version simplifiée).

# l'url dans laquelle se trouve toutes les données sur les taux
url = 'https://api.vatcomply.com/rates'

# Le type de réponse que l’on souhaite recevoir
headers = {"accept": "application/json"}

# Cela permet de filtrer sur la date cible et le taux de change cible
params = {"base": "USD", "date": "2024-01-21"} 

# Cette requête permet de récupérer le contenu de l’URL (les données renvoyées par l’API)
rates = requests.get(url, headers=headers, params=params)

# Affichage de la réponse brute de l’API
print(rates.text)

Il faut maintenant transformer cette réponse de l’API dans un format exploitable par Python. En l’état, Python considère cette réponse comme un simple bloc de texte. Il est donc nécessaire de la convertir en un objet JSON, un format que Python comprend et qui permet d’exploiter les données.

# Décodage de la réponse de l’API en format JSON exploitable par Python
# Sélection de la table "rates"
rates = rates.json()["rates"]
print(rates)

Hourra ! La table des taux (rates) en USD récupérée depuis l’API est désormais exploitable sous Python. Je peux maintenant procéder à la conversion des transactions.

Phase 2 : Conversion des transactions

Insertion d’une colonne de taux de change dans la table orders

L’idée est d’avoir une colonne contenant le taux de change, afin de pouvoir multiplier chaque ligne par le montant (amount) qui lui correspond.