Avec la popularité croissante des achats en ligne, la création d’une plate-forme d’analyse pour le commerce électronique est importante pour toute organisation, car elle fournit des informations sur l’activité, les tendances et le comportement des clients. Mais plus important encore, il peut révéler des informations cachées susceptibles de déclencher des décisions et des actions commerciales génératrices de revenus.
Dans ce blog, nous allons apprendre à construire une plateforme d’analyse complète en mode batch et en temps réel. Le pipeline d’analyse en temps réel montre également comment détecter le déni de service distribué (DDoS) et les attaques de robots, ce qui est une exigence courante pour de tels cas d’utilisation.
Introduction
L’analyse du commerce électronique est le processus de collecte de données provenant de toutes les sources qui affectent une certaine activité en ligne. Les analystes de données ou les analystes commerciaux peuvent ensuite utiliser ces informations pour déduire les changements dans le comportement des clients et les habitudes d’achat en ligne. L’analyse du commerce électronique couvre l’ensemble du parcours client, de la découverte à l’acquisition, à la conversion, puis à la fidélisation et à l’assistance.
Dans cette série de blogs en deux parties, nous allons construire une plate-forme analytique de commerce électronique qui peut aider à analyser les données en temps réel ainsi que par lots. Nous utiliserons un ensemble de données de commerce électronique de Kaggle pour simuler les journaux d’achats des utilisateurs, les vues de produits, l’historique des paniers et le parcours de l’utilisateur sur la plate-forme en ligne afin de créer deux pipelines analytiques :
- Le traitement par lots
- Traitement en ligne/en temps réel
Vous pouvez vous référer à cette session présentée à AWS re:Invent 2022 pour une présentation vidéo.
Le traitement par lots
Le le traitement par lots impliquera l’ingestion de données, l’architecture Lakehouse, le traitement et la visualisation à l’aide d’Amazon Kinesis, AWS Glue, Amazon S3 et Amazon QuickSight pour tirer des informations sur les éléments suivants :
- Visiteurs uniques par jour
- Pendant un certain temps, les utilisateurs ajoutent des produits à leur panier mais ne les achètent pas
- Principales catégories par heure ou par jour de semaine (c’est-à-dire pour promouvoir des remises en fonction des tendances)
- Pour savoir quelles marques ont besoin de plus de marketing
Traitement en ligne/en temps réel
Le traitement en temps réel impliquerait de détecter les attaques DDoS et de robots à l’aide d’AWS Lambda, d’Amazon DynamoDB, d’Amazon CloudWatch et d’AWS SNS.
Ceci est la première partie de la série de blogs, où nous nous concentrerons uniquement sur le traitement en ligne/en temps réel pipeline de données. Dans la deuxième partie de la série de blogs, nous plongerons dans le traitement par lots.
Base de données
Pour ce blog, nous allons utiliser les données de comportement e-commerce d’une boutique multi-catégories.
Ce fichier contient les données de comportement pendant 7 mois (d’octobre 2019 à avril 2020) d’une grande boutique en ligne multi-catégories, où chaque ligne du fichier représente un événement. Tous les événements sont liés aux produits et aux utilisateurs. Chaque événement est comme une relation plusieurs à plusieurs entre les produits et les utilisateurs.
Architecture
Traitement en temps réel
Nous allons construire un pipeline d’ingénierie de données de bout en bout où nous commencerons avec ces données de comportement de commerce électronique à partir d’un ensemble de données de magasin multi-catégories comme entrée, que nous utiliserons pour simuler une charge de travail de commerce électronique en temps réel .
Cette entrée raw
flux de données ira dans un Flux de données Amazon Kinesis (stream1
), qui diffusera les données vers Analyse de données Amazon Kinesis pour l’analyse, où nous utiliserons une application Apache Flink pour détecter toute attaque DDoS, et le filtered
les données seront envoyées à un autre Amazon Kinesis Data Stream (stream2
).
Nous allons utiliser SQL pour construire le Apache Flink
application utilisant Analyse de données Amazon Kinesis et, par conséquent, nous aurions besoin d’un magasin de métadonnées, pour lequel nous allons utiliser Colle AWS Catalogue de données.
Et puis ce stream2
déclenchera une AWS Lambda fonction qui enverra un Amazon SNS notification aux parties prenantes et stocke les détails de la transaction frauduleuse dans un DynamoDB tableau. L’architecture ressemblerait à ceci :
Le traitement par lots
Si nous examinons le schéma d’architecture ci-dessus, nous verrons que nous ne stockons pas le raw
données entrantes n’importe où. Au fur et à mesure que les données entrent par Flux de données Kinesis (stream1
) nous le transmettons à Analyse des données Kinesis analyser. Et plus tard, nous pourrions découvrir un bogue dans notre Apache Flink
application, et à ce moment-là, nous corrigerons le bogue et reprendrons le traitement des données, mais nous ne pouvons pas traiter les anciennes données (qui ont été traitées par notre buggy Apache Flink
application). C’est parce que nous n’avons pas stocké le raw
données n’importe où, ce qui peut nous permettre de les retraiter ultérieurement.
C’est pourquoi il est recommandé d’avoir toujours une copie du raw
les données stockées dans un stockage (par exemple, sur Amazon S3) afin que nous puissions revoir les données si nécessaire pour le retraitement et/ou le traitement par lots.
C’est exactement ce que nous allons faire. Nous utiliserons le même flux de données entrant d’Amazon Kinesis Data Stream (stream1
) et transmettez-le à Tuyau d’incendie Kinesis qui peut écrire les données sur S3. Ensuite, nous utiliserons Colle pour cataloguer ces données et effectuer un travail ETL à l’aide de Glue ETL pour traiter/nettoyer ces données afin que nous puissions utiliser davantage les données pour exécuter certaines requêtes analytiques à l’aide Athéna.
Enfin, nous tirerions parti QuickSight pour construire un tableau de bord pour la visualisation.
Procédure pas à pas
Construisons cette application étape par étape. Je vais utiliser une instance AWS Cloud9 pour ce projet, mais ce n’est pas obligatoire. Si vous souhaitez lancer une instance AWS Cloud9, vous pouvez suivre les étapes mentionnées ici et continuer.
Téléchargez le jeu de données et clonez le référentiel GitHub
Clonez le projet et placez-le dans le bon répertoire :
# Clone the project repository
git clone https://github.com/debnsuma/build-a-managed-analytics-platform-for-e-commerce-business.git
cd build-a-managed-analytics-platform-for-e-commerce-business/
# Create a folder to store the dataset
mkdir dataset
Téléchargez le jeu de données à partir d’ici et déplacez le fichier téléchargé (2019-Nov.csv.zip
) sous le dataset
dossier:
Maintenant, décompressez le fichier et créons un exemple de version de l’ensemble de données en prenant simplement le premier 1000
enregistrements du dossier.
cd dataset
unzip 2019-Nov.csv.zip
cat 2019-Nov.csv | head -n 1000 > 202019-Nov-sample.csv
Créer un compartiment Amazon S3
Nous pouvons maintenant créer un bucket S3 et importer cet ensemble de données :
- Nom du godet :
e-commerce-raw-us-east-1-dev
(remplacer<BUCKET_NAME>
avec votre propre nom de compartiment)
# Copy all the files in the S3 bucket
aws s3 cp 2019-Nov.csv.zip s3://<BUCKET_NAME>/ecomm_user_activity/p_year=2019/p_month=11/
aws s3 cp 202019-Nov-sample.csv s3://<BUCKET_NAME>/ecomm_user_activity_sample/202019-Nov-sample.csv
aws s3 cp 2019-Nov.csv s3://<BUCKET_NAME>/ecomm_user_activity_unconcompressed/p_year=2019/p_month=11/
Créer le flux de données Kinesis
Maintenant, créons le premier flux de données Kinesis (stream1
dans notre diagramme d’architecture) que nous utiliserons comme flux entrant. Ouvrez le ConsoleAWS et puis:
- Aller à Amazon Kinesis.
- Cliquer sur Créer un flux de données.
Créons un autre flux de données Kinesis que nous utiliserons plus tard (stream2
dans le schéma d’architecture). Cette fois, utilisez le nom du flux de données comme e-commerce-raw-user-activity-stream-2
.
Démarrez le trafic de commerce électronique
Nous pouvons maintenant démarrer le trafic e-commerce, car notre flux de données Kinesis est prêt. Ce simulateur que nous allons utiliser est un simple python script
qui lira les données d’un fichier CSV (202019-Nov-sample.csv
le jeu de données que nous avons téléchargé précédemment) ligne par ligne et l’envoyer au flux de données Kinesis (stream1
).
Mais avant d’exécuter le simulateur, modifiez simplement le stream-data-app-simulation.py
script avec votre
# S3 buckect details (UPDATE THIS)
BUCKET_NAME = "e-commerce-raw-us-east-1-dev"
Une fois mis à jour, nous pouvons exécuter le simulateur.
# Go back to the project root directory
cd ..
# Run simulator
pip install boto3
python code/ecomm-simulation-app/stream-data-app-simulation.py
HttpStatusCode: 200 , electronics.smartphone
HttpStatusCode: 200 , appliances.sewing_machine
HttpStatusCode: 200 ,
HttpStatusCode: 200 , appliances.kitchen.washer
HttpStatusCode: 200 , electronics.smartphone
HttpStatusCode: 200 , computers.notebook
HttpStatusCode: 200 , computers.notebook
HttpStatusCode: 200 ,
HttpStatusCode: 200 ,
HttpStatusCode: 200 , electronics.smartphone
Intégration avec Kinesis Data Analytics et Apache Flink
Maintenant, nous allons créer un Analyse de données Amazon Kinesis Application de streaming qui analysera ce flux entrant pour toute attaque DDoS ou bot. Ouvrez la console AWS, puis :
- Aller à Amazon Kinesis.
- Sélectionner Applications d’analyse.
- Cliquer sur Cahiers d’atelier.
- Cliquer sur Créer un bloc-notes Studio.
- Utiliser
ecomm-streaming-app-v1
comme le Nom du bloc-notes Studio. - Sous le Autorisations section, cliquez sur Créer pour créer une base de données AWS Glue, nommez la base de données comme
my-db-ecomm
. - Utiliser la même base de données,
my-db-ecomm
du menu déroulant. - Cliquer sur Créer un bloc-notes Studio.
Maintenant, sélectionnez le ecomm-streaming-app-v1
Carnet de notes Studio et cliquez sur Ouvrir dans Apache Zeppelin :
Une fois la Tableau de bord Zeppelin apparaît, cliquez sur Remarque d’importation et importez ce notebook :
Ouvrez le sql-flink-ecomm-notebook-1
carnet de notes. Les interpréteurs Flink pris en charge par le bloc-notes Apache Zeppelin sont Python, IPython, stream SQL ou batch SQL, et nous allons utiliser SQL
pour écrire notre code. Il existe de nombreuses façons de créer un Application Flash mais l’un des moyens les plus simples consiste à utiliser le bloc-notes Zeppelin. Regardons ce cahier et discutons brièvement de ce que nous faisons ici :
- Premièrement, nous créons un
table
pour la source de données entrante (qui est lee-commerce-raw-user-activity-stream-1
flux entrant). - Ensuite, nous créons un autre
table
pour les données filtrées (qui sont poure-commerce-raw-user-activity-stream-2
flux sortant). - Et enfin, nous mettons la logique pour simuler le DDoS attaque. Nous examinons essentiellement les 10 dernières secondes des données et les regroupons par
user_id
. Si nous remarquons plus de 5 enregistrements dans ces 10 secondes, Flink prendra celauser_id
et le non. d’enregistrements dans ces 10 secondes et poussera ces données vers lee-commerce-raw-user-activity-stream-2
sortant…