diff --git a/.github/workflows/test_tutorials.yml b/.github/workflows/test_tutorials.yml index b7abd4ed..e1fcbf71 100644 --- a/.github/workflows/test_tutorials.yml +++ b/.github/workflows/test_tutorials.yml @@ -26,7 +26,7 @@ jobs: - name: Execute Python workflows from bash script env: HOPSWORKS_API_KEY: ${{ secrets.HOPSWORKS_API_KEY_38 }} - WEATHER_API_KEY: ${{ secrets.WEATHER_API_KEY38 }} + WEATHER_API_KEY: ${{ secrets.WEATHER_API_KEY }} run: ./scripts/test-notebooks.sh test_tutorials39: @@ -49,7 +49,7 @@ jobs: - name: Execute Python workflows from bash script env: HOPSWORKS_API_KEY: ${{ secrets.HOPSWORKS_API_KEY_39 }} - WEATHER_API_KEY: ${{ secrets.WEATHER_API_KEY39 }} + WEATHER_API_KEY: ${{ secrets.WEATHER_API_KEY }} run: ./scripts/test-notebooks.sh test_tutorials310: @@ -72,5 +72,5 @@ jobs: - name: execute python workflows from bash script env: HOPSWORKS_API_KEY: ${{ secrets.HOPSWORKS_API_KEY_310 }} - WEATHER_API_KEY: ${{ secrets.WEATHER_API_KEY310 }} + WEATHER_API_KEY: ${{ secrets.WEATHER_API_KEY }} run: ./scripts/test-notebooks.sh \ No newline at end of file diff --git a/.gitignore b/.gitignore index d54a7ced..ed47a7b8 100644 --- a/.gitignore +++ b/.gitignore @@ -179,13 +179,3 @@ advanced_tutorials/citibike/data/__MACOSX/._202304-citibike-tripdata.csv advanced_tutorials/citibike/data/__MACOSX/._202305-citibike-tripdata.csv loan_approval/lending_model/roc_curve.png advanced_tutorials/timeseries/price_model/model_prediction.png -advanced_tutorials/recommender-system/query_model/variables/variables.index -advanced_tutorials/recommender-system/query_model/variables/variables.data-00000-of-00001 -advanced_tutorials/recommender-system/query_model/saved_model.pb -advanced_tutorials/recommender-system/query_model/fingerprint.pb -advanced_tutorials/recommender-system/candidate_model/variables/variables.index -advanced_tutorials/recommender-system/candidate_model/variables/variables.data-00000-of-00001 -advanced_tutorials/recommender-system/candidate_model/fingerprint.pb -advanced_tutorials/recommender-system/candidate_model/saved_model.pb -integrations/neo4j/aml_model/* -integrations/neo4j/aml_model_transformer.py diff --git a/README.md b/README.md index be42aee0..f9d73ac6 100644 --- a/README.md +++ b/README.md @@ -42,17 +42,15 @@ In order to understand the tutorials you need to be familiar with general concep - [Iris](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/iris): Classify iris flower species. - [Loan Approval](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/loan_approval): Predict loan approvals. - Advanced Tutorials: - - [Air Quality](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/air_quality): Creating an air quality AI assistant that displays and explains air quality indicators for specific dates or periods, using Function Calling for LLMs and a RAG approach without a vector database. + - [Air Quality](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/air_quality): Predict the Air Quality value (PM2.5) in Europe and USA using weather features and air quality features of the previous days. - [Bitcoin](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/bitcoin): Predict Bitcoin price using timeseries features and tweets sentiment analysis. - [Citibike](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/citibike): Predict the number of citibike users on each citibike station in the New York City. - [Credit Scores](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/credit_scores): Predict clients' repayment abilities. - [Electricity](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/electricity): Predict the electricity prices in several Swedish cities based on weather conditions, previous prices, and Swedish holidays. - [NYC Taxi Fares](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/nyc_taxi_fares): Predict the fare amount for a taxi ride in New York City given the pickup and dropoff locations. - - [Hospital Wait Time](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/hospital_wait_time): Predict the waiting time for a deceased donor kidney using Prophet model. + - [Anti-Money Laundering](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/aml): Identify parties with potential suspicious activities. - [Recommender System](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/recommender-system): Build a recommender system for fashion items. - [TimeSeries](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/timeseries): Timeseries price prediction. - - [LLM PDF](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/llm_pdfs): An AI assistant that utilizes a Retrieval-Augmented Generation (RAG) system to provide accurate answers to user questions by retrieving relevant context from PDF documents. - - [Fraud Cheque Detection](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/fraud_cheque_detection): Building an AI assistant that detects fraudulent scanned cheque images and generates explanations for the fraud classification, using a fine-tuned open-source LLM. - [Keras model and Sklearn Transformation Functions with Hopsworks Model Registry](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/transformation_functions/keras): How to register Sklearn Transformation Functions and Keras model in the Hopsworks Model Registry, how to retrieve them and then use in training and inference pipelines. - [PyTorch model and Sklearn Transformation Functions with Hopsworks Model Registry](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/transformation_functions/pytorch): How to register Sklearn Transformation Functions and PyTorch model in the Hopsworks Model Registry, how to retrieve them and then use in training and inference pipelines. - [Sklearn Transformation Functions With Hopsworks Model Registy](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/advanced_tutorials/transformation_functions/sklearn): How to register sklearn.pipeline with transformation functions and classifier in Hopsworks Model Registry and use it in training and inference pipelines. @@ -65,14 +63,10 @@ In order to understand the tutorials you need to be familiar with general concep - [DBT Tutorial with BigQuery](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/dbt_bq): Perform feature engineering in DBT on BigQuery. - [WandB](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/wandb): Build a machine learning model with Weights & Biases. - [Great Expectations](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/great_expectations): Introduction to Great Expectations concepts and classes which are relevant for integration with the Hopsworks MLOps platform. - - [Neo4j](integrations/neo4j): Perform Anti-money laundering (AML) predictions using Neo4j Graph representation of transactions. - - [Polars](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/polars/quickstart.ipynb) : Introductory tutorial on using Polars. - - [PySpark Streaming](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/pyspark_streaming) : Real time feature computation from streaming data using PySpark and HopsWorks Feature Store. - [Monitoring](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/monitoring): How to implement feature monitoring in your production pipeline. - [Bytewax](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/bytewax): Real time feature computation using Bytewax. - [Apache Beam](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/java/beam): Real time feature computation using Apache Beam, Google Cloud Dataflow and Hopsworks Feature Store. - [Apache Flink](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/java/flink): Real time feature computation using Apache Flink and Hopsworks Feature Store. - - [MageAI](https://github.com/logicalclocks/hopsworks-tutorials/tree/master/integrations/mage_ai): Build and operate a ML system with Mage and Hopsworks. ## ๐Ÿ“ Feedbacks & Comments: diff --git a/advanced_tutorials/air_quality/1_air_quality_feature_backfill.ipynb b/advanced_tutorials/air_quality/1_air_quality_feature_backfill.ipynb index 75f1b875..0c45f7d2 100644 --- a/advanced_tutorials/air_quality/1_air_quality_feature_backfill.ipynb +++ b/advanced_tutorials/air_quality/1_air_quality_feature_backfill.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "32cd155d", + "id": "73ee3ec9", "metadata": {}, "source": [ "# **Hopsworks Feature Store** \n", @@ -12,42 +12,27 @@ "**Note**: This tutorial does not support Google Colab.\n", "\n", "## ๐Ÿ—’๏ธ This notebook is divided into the following sections:\n", - "\n", - "1. Fetch historical data.\n", - "2. Connect to the Hopsworks feature store.\n", - "3. Create feature groups and insert them to the feature store.\n", + "1. Fetch historical data\n", + "2. Connect to the Hopsworks feature store\n", + "3. Create feature groups and insert them to the feature store\n", "\n", "![tutorial-flow](../../images/01_featuregroups.png)" ] }, { "cell_type": "markdown", - "id": "ce71c0b2", + "id": "f04d5c5e", "metadata": {}, "source": [ - "## ๐Ÿ“ Imports" + "### ๐Ÿ“ Imports" ] }, { "cell_type": "code", - "execution_count": 1, - "id": "f92001bd", + "execution_count": null, + "id": "a03d0127", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", - "\u001b[0m\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", - "tensorflow 2.11.0 requires protobuf<3.20,>=3.9.2, but you have protobuf 4.25.3 which is incompatible.\n", - "tensorboard 2.11.2 requires protobuf<4,>=3.9.2, but you have protobuf 4.25.3 which is incompatible.\n", - "ray 2.0.0 requires protobuf<4.0.0,>=3.15.3, but you have protobuf 4.25.3 which is incompatible.\u001b[0m\u001b[31m\n", - "\u001b[0m\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", - "\u001b[0m" - ] - } - ], + "outputs": [], "source": [ "!pip install -U hopsworks --quiet\n", "!pip install geopy folium streamlit-folium --q" @@ -55,18 +40,21 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "e974d9d5", + "execution_count": null, + "id": "cd165941", "metadata": {}, "outputs": [], "source": [ + "import datetime\n", + "import time\n", + "import requests\n", "import json\n", "\n", "import pandas as pd\n", "import folium\n", "\n", "from features import air_quality\n", - "from functions.common_functions import convert_date_to_unix\n", + "from functions import *\n", "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" @@ -74,7 +62,15 @@ }, { "cell_type": "markdown", - "id": "88d519dd", + "id": "ba9903fc", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "b7a1965a-0da7-4263-a68a-8b2e8cb753f1", "metadata": {}, "source": [ "## ๐ŸŒ Representing the Target cities " @@ -82,8 +78,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "e0f7a26b", + "execution_count": null, + "id": "bd578db1-69e7-4230-b3f2-807b8056283a", "metadata": { "tags": [] }, @@ -99,8 +95,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "f8063796", + "execution_count": null, + "id": "ea972c52-bfad-465d-b1e1-50eeff99b482", "metadata": {}, "outputs": [], "source": [ @@ -113,13 +109,13 @@ " location=coords,\n", " popup=city_name,\n", " ).add_to(my_map)\n", - "#my_map" + "my_map" ] }, { "cell_type": "code", "execution_count": null, - "id": "fcde29f7", + "id": "fb5ecf81-647b-490a-92b1-f7e963413710", "metadata": {}, "outputs": [], "source": [ @@ -129,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "2a2d3674", + "id": "2246ca9d", "metadata": {}, "source": [ "## ๐ŸŒซ Processing Air Quality data" @@ -137,7 +133,7 @@ }, { "cell_type": "markdown", - "id": "b081d3f2", + "id": "b4a1c5d1", "metadata": {}, "source": [ "### [๐Ÿ‡ช๐Ÿ‡บ EEA](https://discomap.eea.europa.eu/map/fme/AirQualityExport.htm)\n", @@ -146,39 +142,12 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "986686f5", + "execution_count": null, + "id": "96b8be01-6286-4886-8043-56e0e49b314e", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Amsterdam': [52.37, 4.89],\n", - " 'Athina': [37.98, 23.73],\n", - " 'Berlin': [52.52, 13.39],\n", - " 'Gdansk': [54.37, 18.61],\n", - " 'Krakรณw': [50.06, 19.94],\n", - " 'London': [51.51, -0.13],\n", - " 'Madrid': [40.42, -3.7],\n", - " 'Marseille': [43.3, 5.37],\n", - " 'Milano': [45.46, 9.19],\n", - " 'Mรผnchen': [48.14, 11.58],\n", - " 'Napoli': [40.84, 14.25],\n", - " 'Paris': [48.85, 2.35],\n", - " 'Sevilla': [37.39, -6.0],\n", - " 'Stockholm': [59.33, 18.07],\n", - " 'Tallinn': [59.44, 24.75],\n", - " 'Varna': [43.21, 27.92],\n", - " 'Wien': [48.21, 16.37]}" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# EU Cities \n", "target_cities[\"EU\"]" @@ -186,96 +155,47 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "be358330", + "execution_count": null, + "id": "5bb2a868-5f3a-4065-b651-318c24826b97", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ Size of this dataframe: (63548, 3)\n", - "โ›ณ๏ธ Missing Values: 0\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatepm2_5
11887Gdansk2014-09-2123.0
17498Krakรณw2019-10-2356.0
42593Paris2016-08-047.0
\n", - "
" - ], - "text/plain": [ - " city_name date pm2_5\n", - "11887 Gdansk 2014-09-21 23.0\n", - "17498 Krakรณw 2019-10-23 56.0\n", - "42593 Paris 2016-08-04 7.0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Read the CSV file from the specified URL into a pandas DataFrame\n", - "df_eu = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_pm2_5_eu.csv\")\n", - "\n", + "df_eu = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_pm2_5_eu.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5620df22-f744-4550-a81a-7e5d71aae542", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Check for missing values in the 'df_eu' DataFrame\n", + "df_eu.isna().sum().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b0e23728-a01d-45bc-bf25-4a9c77f21d66", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ "# Print the size of the 'df_eu' DataFrame (number of rows and columns)\n", "print(\"โ›ณ๏ธ Size of this dataframe:\", df_eu.shape)\n", "\n", - "# Check for missing values in the 'df_eu' DataFrame\n", - "print(f'โ›ณ๏ธ Missing Values: {df_eu.isna().sum().sum()}')\n", - "\n", "# Display a random sample of three rows from the 'df_eu' DataFrame\n", "df_eu.sample(3)" ] }, { "cell_type": "markdown", - "id": "f02141bd", + "id": "c2e45567-dd6b-4e5e-a153-82a2f4f32fbc", "metadata": {}, "source": [ "### [๐Ÿ‡บ๐Ÿ‡ธ USEPA](https://aqs.epa.gov/aqsweb/documents/data_api.html#daily)\n", @@ -286,35 +206,12 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "87c439b7", + "execution_count": null, + "id": "c4952759-0fb9-4229-8b78-2e37cffb144d", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Albuquerque': [35.08, -106.65],\n", - " 'Atlanta': [33.75, -84.39],\n", - " 'Chicago': [41.88, -87.62],\n", - " 'Columbus': [39.96, -83.0],\n", - " 'Dallas': [32.78, -96.8],\n", - " 'Denver': [39.74, -104.98],\n", - " 'Houston': [29.76, -95.37],\n", - " 'Los Angeles': [34.05, -118.24],\n", - " 'New York': [40.71, -74.01],\n", - " 'Phoenix-Mesa': [33.66, -112.04],\n", - " 'Salt Lake City': [40.76, -111.89],\n", - " 'San Francisco': [37.78, -122.42],\n", - " 'Tampa': [27.95, -82.46]}" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# US Cities \n", "target_cities[\"US\"]" @@ -322,98 +219,49 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "3429aebd", + "execution_count": null, + "id": "c6aceaee-9431-48fd-818a-41fbdd07575c", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ Size of this dataframe: (46037, 3)\n", - "โ›ณ๏ธ Missing Values: 0\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
datecity_namepm2_5
214762015-01-14Houston11.3
263212018-11-28Los Angeles7.8
430022014-09-01Tampa11.8
\n", - "
" - ], - "text/plain": [ - " date city_name pm2_5\n", - "21476 2015-01-14 Houston 11.3\n", - "26321 2018-11-28 Los Angeles 7.8\n", - "43002 2014-09-01 Tampa 11.8" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Read the CSV file from the specified URL into a pandas DataFrame\n", - "df_us = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_pm2_5_us.csv\")\n", - "\n", + "df_us = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_pm2_5_us.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e7ff20e-8a1a-4fa3-b801-71beead7b5f2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Check for missing values in the 'df_us' DataFrame\n", + "df_us.isna().sum().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3818e3e1-8674-4634-9023-92be8410fba5", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ "# Print the size of the 'df_us' DataFrame (number of rows and columns)\n", "print(\"โ›ณ๏ธ Size of this dataframe:\", df_us.shape)\n", "\n", - "# Check for missing values in the 'df_us' DataFrame\n", - "print(f'โ›ณ๏ธ Missing Values: {df_us.isna().sum().sum()}')\n", - "\n", "# Display a random sample of three rows from the 'df_us' DataFrame\n", "df_us.sample(3)" ] }, { "cell_type": "markdown", - "id": "5ee7b660", + "id": "25557752-31c8-4da9-a52c-4415c4d20ae3", "metadata": {}, "source": [ "### ๐Ÿข Processing special city - `Seattle`\n", @@ -423,135 +271,72 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "f401130e", + "execution_count": null, + "id": "2f54d2cb-991c-47cb-a686-76c9f7a87170", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Bellevue-SE 12th St': [47.60086, -122.1484],\n", - " 'DARRINGTON - FIR ST (Darrington High School)': [48.2469, -121.6031],\n", - " 'KENT - JAMES & CENTRAL': [47.38611, -122.23028],\n", - " 'LAKE FOREST PARK TOWNE CENTER': [47.755, -122.2806],\n", - " 'MARYSVILLE - 7TH AVE (Marysville Junior High)': [48.05432, -122.17153],\n", - " 'NORTH BEND - NORTH BEND WAY': [47.49022, -121.77278],\n", - " 'SEATTLE - BEACON HILL': [47.56824, -122.30863],\n", - " 'SEATTLE - DUWAMISH': [47.55975, -122.33827],\n", - " 'SEATTLE - SOUTH PARK #2': [47.53091, -122.3208],\n", - " 'Seattle-10th & Weller': [47.59722, -122.31972],\n", - " 'TACOMA - ALEXANDER AVE': [47.2656, -122.3858],\n", - " 'TACOMA - L STREET': [47.1864, -122.4517],\n", - " 'Tacoma-S 36th St': [47.22634, -122.46256],\n", - " 'Tukwila Allentown': [47.49854, -122.27839],\n", - " 'Tulalip-Totem Beach Rd': [48.06534, -122.28519]}" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "target_cities[\"Seattle\"]" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "5ac26217", + "execution_count": null, + "id": "31c8505d-68bc-40b6-be0f-42d8532dbd48", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ Size of this dataframe: (46479, 3)\n", - "โ›ณ๏ธ Missing Values: 0\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatepm2_5
8709SEATTLE - BEACON HILL2015-11-059.5
6634DARRINGTON - FIR ST (Darrington High School)2014-06-241.7
45134NORTH BEND - NORTH BEND WAY2023-01-120.3
\n", - "
" - ], - "text/plain": [ - " city_name date pm2_5\n", - "8709 SEATTLE - BEACON HILL 2015-11-05 9.5\n", - "6634 DARRINGTON - FIR ST (Darrington High School) 2014-06-24 1.7\n", - "45134 NORTH BEND - NORTH BEND WAY 2023-01-12 0.3" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Read the CSV file from the specified URL into a pandas DataFrame\n", - "df_seattle = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_pm2_5_seattle.csv\")\n", - "\n", + "df_seattle = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_pm2_5_seattle.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f6583c9-3b2a-41c6-a020-aeede88c4867", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Check for missing values in the 'df_seattle' DataFrame\n", + "df_seattle.isna().sum().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "065a5b03-28f7-475c-9c6a-4340388157d8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ "# Print the size of the 'df_seattle' DataFrame (number of rows and columns)\n", "print(\"โ›ณ๏ธ Size of this dataframe:\", df_seattle.shape)\n", - "\n", - "# Check for missing values in the 'df_seattle' DataFrame\n", - "print(f'โ›ณ๏ธ Missing Values: {df_seattle.isna().sum().sum()}')\n", - "\n", - "# Display a random sample of three rows\n", "df_seattle.sample(3)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3b17ca4-0e9d-4207-ad62-90ea9c157def", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Value Counts\n", + "df_seattle['city_name'].value_counts()" + ] + }, { "cell_type": "markdown", - "id": "e23a6e68", + "id": "c278a55d-f083-4f95-b292-92e545b9c408", "metadata": {}, "source": [ "### ๐ŸŒŸ All together" @@ -559,94 +344,12 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "d913087f", + "execution_count": null, + "id": "0d55ae92-4bf9-43ae-8841-6767f5f68bec", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ DF shape: (156064, 3)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatepm2_5
106487Tampa2014-06-309.3
12453Gdansk2016-04-099.0
101342Salt Lake City2020-04-295.8
46538Sevilla2017-02-128.0
117821Seattle-10th & Weller2015-12-125.7
\n", - "
" - ], - "text/plain": [ - " city_name date pm2_5\n", - "106487 Tampa 2014-06-30 9.3\n", - "12453 Gdansk 2016-04-09 9.0\n", - "101342 Salt Lake City 2020-04-29 5.8\n", - "46538 Sevilla 2017-02-12 8.0\n", - "117821 Seattle-10th & Weller 2015-12-12 5.7" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Concatenate the DataFrames df_eu, df_us, and df_seattle along the rows and reset the index\n", "df_air_quality = pd.concat(\n", @@ -662,18 +365,18 @@ }, { "cell_type": "markdown", - "id": "268791c4", + "id": "22896049-441d-4baf-b717-415123cb39d7", "metadata": { "tags": [] }, "source": [ - "## ๐Ÿ›  Feature Engineering" + "### ๐Ÿ›  Feature Engineering" ] }, { "cell_type": "code", - "execution_count": 20, - "id": "aff7a97b", + "execution_count": null, + "id": "140b468a-e0c2-44a1-8e44-4cf393407eca", "metadata": { "tags": [] }, @@ -685,23 +388,12 @@ }, { "cell_type": "code", - "execution_count": 21, - "id": "1d45e480", + "execution_count": null, + "id": "87dc89c0-72a7-4be6-b4e4-03d5d32be546", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Apply feature engineering to the df_air_quality DataFrame using the air_quality.feature_engineer_aq() function\n", "df_air_quality = air_quality.feature_engineer_aq(df_air_quality)\n", @@ -715,23 +407,12 @@ }, { "cell_type": "code", - "execution_count": 22, - "id": "02c8e1e5", + "execution_count": null, + "id": "94f67c89-6b39-4748-b4be-6ed3c9d57f96", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "(154533, 31)" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Print the shape (number of rows and columns) of the df_air_quality DataFrame\n", "df_air_quality.shape" @@ -739,32 +420,12 @@ }, { "cell_type": "code", - "execution_count": 23, - "id": "4c627429", + "execution_count": null, + "id": "ed9bc7f1-d62e-4b1f-97af-6ecd30fe4b67", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['city_name', 'date', 'pm2_5', 'pm_2_5_previous_1_day',\n", - " 'pm_2_5_previous_2_day', 'pm_2_5_previous_3_day',\n", - " 'pm_2_5_previous_4_day', 'pm_2_5_previous_5_day',\n", - " 'pm_2_5_previous_6_day', 'pm_2_5_previous_7_day', 'mean_7_days',\n", - " 'mean_14_days', 'mean_28_days', 'std_7_days', 'exp_mean_7_days',\n", - " 'exp_std_7_days', 'std_14_days', 'exp_mean_14_days', 'exp_std_14_days',\n", - " 'std_28_days', 'exp_mean_28_days', 'exp_std_28_days', 'year',\n", - " 'day_of_month', 'month', 'day_of_week', 'is_weekend', 'sin_day_of_year',\n", - " 'cos_day_of_year', 'sin_day_of_week', 'cos_day_of_week'],\n", - " dtype='object')" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Retrieve and display the column names of the df_air_quality DataFrame\n", "df_air_quality.columns" @@ -772,7 +433,15 @@ }, { "cell_type": "markdown", - "id": "4296b629", + "id": "88a9e0ef-e9d2-4e3c-91af-c4e619b8c906", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "4687e802", "metadata": { "tags": [] }, @@ -782,124 +451,42 @@ }, { "cell_type": "code", - "execution_count": 27, - "id": "52e4eb11", + "execution_count": null, + "id": "c46283b4", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatetemperature_maxtemperature_minprecipitation_sumrain_sumsnowfall_sumprecipitation_hourswind_speed_maxwind_gusts_maxwind_direction_dominant
0Amsterdam2013-01-019.25.510.210.20.014.032.062.6255
1Amsterdam2013-01-027.85.60.50.50.02.022.939.6251
2Amsterdam2013-01-0310.38.22.02.00.06.022.239.2255
\n", - "
" - ], - "text/plain": [ - " city_name date temperature_max temperature_min precipitation_sum \\\n", - "0 Amsterdam 2013-01-01 9.2 5.5 10.2 \n", - "1 Amsterdam 2013-01-02 7.8 5.6 0.5 \n", - "2 Amsterdam 2013-01-03 10.3 8.2 2.0 \n", - "\n", - " rain_sum snowfall_sum precipitation_hours wind_speed_max \\\n", - "0 10.2 0.0 14.0 32.0 \n", - "1 0.5 0.0 2.0 22.9 \n", - "2 2.0 0.0 6.0 22.2 \n", - "\n", - " wind_gusts_max wind_direction_dominant \n", - "0 62.6 255 \n", - "1 39.6 251 \n", - "2 39.2 255 " - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Read the CSV file from the specified URL into a pandas DataFrame for weather data\n", - "df_weather = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_weather.csv\")\n", - "\n", + "df_weather = pd.read_csv(\"https://repo.hops.works/dev/davit/air_quality/backfill_weather.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1921b61c-d002-417e-88a6-9fe1cad0a7d4", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Count the occurrences of each unique value in the 'city_name' column of the df_weather DataFrame\n", + "df_weather.city_name.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d5dcd0a", + "metadata": {}, + "outputs": [], + "source": [ "# Display the first three rows of the df_weather DataFrame\n", "df_weather.head(3)" ] }, { "cell_type": "markdown", - "id": "cd0d4d7b", + "id": "cc9b7ad6", "metadata": {}, "source": [ "---" @@ -907,8 +494,8 @@ }, { "cell_type": "code", - "execution_count": 28, - "id": "ec1e91c1", + "execution_count": null, + "id": "a8f886c3-a5ac-4370-a6a2-22838ab7409e", "metadata": { "tags": [] }, @@ -929,29 +516,26 @@ }, { "cell_type": "markdown", - "id": "472f7eb5", + "id": "f2ebd846-0420-4e4c-8a5b-0827fa91c693", "metadata": {}, "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " + "---" + ] + }, + { + "cell_type": "markdown", + "id": "cb6f83ba", + "metadata": {}, + "source": [ + "### ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " ] }, { "cell_type": "code", - "execution_count": 29, - "id": "410f0b7b", + "execution_count": null, + "id": "dd068240", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/5242\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], "source": [ "import hopsworks\n", "\n", @@ -962,7 +546,7 @@ }, { "cell_type": "markdown", - "id": "6176991c", + "id": "63d8c3b9", "metadata": {}, "source": [ "## ๐Ÿช„ Creating Feature Groups" @@ -970,7 +554,7 @@ }, { "cell_type": "markdown", - "id": "370bbf0b", + "id": "4a2515c4", "metadata": {}, "source": [ "### ๐ŸŒซ Air Quality Data" @@ -978,62 +562,13 @@ }, { "cell_type": "code", - "execution_count": 30, - "id": "b5a58bfc", + "execution_count": null, + "id": "9d7088a8", "metadata": { "scrolled": true, "tags": [] }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DeprecationWarning: Providing event_time as a single-element list is deprecated and will be dropped in future versions. Provide the feature_name string instead.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://snurran.hops.works/p/5242/fs/5190/fg/5194\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6677d288bc0746a48faf802be7032e40", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/154533 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: air_quality_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://snurran.hops.works/p/5242/jobs/named/air_quality_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Get or create feature group\n", "air_quality_fg = fs.get_or_create_feature_group(\n", @@ -1041,15 +576,25 @@ " description='Air Quality characteristics of each day',\n", " version=1,\n", " primary_key=['unix_time','city_name'],\n", + " online_enabled=False,\n", " event_time=[\"unix_time\"],\n", - ") \n", + ") " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e04a975-bb58-42e2-9abd-90e68ae37864", + "metadata": {}, + "outputs": [], + "source": [ "# Insert data\n", "air_quality_fg.insert(df_air_quality)" ] }, { "cell_type": "markdown", - "id": "09cbe8aa", + "id": "a73a9029", "metadata": {}, "source": [ "### ๐ŸŒฆ Weather Data" @@ -1057,52 +602,10 @@ }, { "cell_type": "code", - "execution_count": 31, - "id": "089f45b7", + "execution_count": null, + "id": "acc2b799", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://snurran.hops.works/p/5242/fs/5190/fg/5195\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7328db1bd3b84e769e7b4ac88c1416a6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/168975 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: weather_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://snurran.hops.works/p/5242/jobs/named/weather_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Get or create feature group\n", "weather_fg = fs.get_or_create_feature_group(\n", @@ -1110,18 +613,32 @@ " description='Weather characteristics of each day',\n", " version=1,\n", " primary_key=['unix_time','city_name'],\n", + " online_enabled=False,\n", " event_time=[\"unix_time\"],\n", - ") \n", + ") " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9583b4d1-e2e3-4f56-9e5d-23caa0c49457", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ "# Insert data\n", - "weather_fg.insert(df_weather)" + "weather_fg.insert(\n", + " df_weather, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "34f5ffec", + "id": "87c668dd", "metadata": {}, "source": [ - "---\n", "## โญ๏ธ **Next:** Part 02: Feature Pipeline \n", " \n", "\n", @@ -1131,7 +648,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1145,7 +662,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/air_quality/2_air_quality_feature_pipeline.ipynb b/advanced_tutorials/air_quality/2_air_quality_feature_pipeline.ipynb index 0d67018a..580e8fc7 100644 --- a/advanced_tutorials/air_quality/2_air_quality_feature_pipeline.ipynb +++ b/advanced_tutorials/air_quality/2_air_quality_feature_pipeline.ipynb @@ -2,21 +2,19 @@ "cells": [ { "cell_type": "markdown", - "id": "932614f4", + "id": "dd094af7", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 02: Feature Pipeline\n", "\n", "## ๐Ÿ—’๏ธ This notebook is divided into the following sections:\n", - "\n", - "1. Fetch Feature Groups. \n", - "2. Parse Data.\n", - "3. Feature Group Insertion." + "1. Parse Data\n", + "2. Feature Group Insertion" ] }, { "cell_type": "markdown", - "id": "fada62d6", + "id": "a7dcc328", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -24,20 +22,19 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "223d0565", + "execution_count": null, + "id": "364e961e", "metadata": {}, "outputs": [], "source": [ "import datetime\n", "import time\n", + "import requests\n", "import pandas as pd\n", "import json\n", "\n", "from features import air_quality\n", - "from functions.parse_air_quality import get_aqi_data_from_open_meteo\n", - "from functions.parse_weather import get_weather_data_from_open_meteo\n", - "from functions.common_functions import *\n", + "from functions import *\n", "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" @@ -45,8 +42,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "680489a3", + "execution_count": null, + "id": "50d04cc5-6788-4a4c-9f87-c2e00b5fce49", "metadata": { "tags": [] }, @@ -60,23 +57,12 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "f4e6d85a", + "execution_count": null, + "id": "b0d2261f-8907-44f4-9f1a-bd9ec5e1556f", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "(datetime.date(2024, 5, 14), '2024-05-14')" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Getting the current date\n", "today = datetime.date.today()\n", @@ -87,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "66767202", + "id": "d406b01d", "metadata": {}, "source": [ "### ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " @@ -95,35 +81,16 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "7187a854", + "execution_count": null, + "id": "8ba3cb02", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/5242\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], "source": [ "import hopsworks\n", "\n", "project = hopsworks.login()\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "b1f968a6", - "metadata": {}, - "outputs": [], - "source": [ + "fs = project.get_feature_store() \n", + "\n", "# Retrieve feature groups\n", "air_quality_fg = fs.get_feature_group(\n", " name='air_quality',\n", @@ -137,7 +104,15 @@ }, { "cell_type": "markdown", - "id": "7dfdbf9d", + "id": "c7f61053-a8c0-48a7-afa4-0e8733d2a54a", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "459ee37e-7e74-4051-97f6-2e03f9cac9d8", "metadata": {}, "source": [ "## ๐ŸŒซ Filling gaps in Air Quality data (PM2.5)" @@ -145,21 +120,12 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "98a4a37f", + "execution_count": null, + "id": "76ae9dd9-ab28-41d1-8478-5af27b7f767e", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (2.27s) \n", - "Finished: Reading data from Hopsworks, using ArrowFlight (1.55s) \n" - ] - } - ], + "outputs": [], "source": [ "# Read data from feature groups\n", "df_air_quality = air_quality_fg.read()\n", @@ -168,8 +134,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "104c5525", + "execution_count": null, + "id": "03063bc6-b58f-47f4-bfc6-8020ec196478", "metadata": { "tags": [] }, @@ -188,21 +154,12 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "72cbe44b", + "execution_count": null, + "id": "5e868bdf-e91a-410a-b654-a315c605f3dc", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ Last update for Paris: 2024-05-13\n", - "โ›ณ๏ธ Last update for Columbus: 2024-05-13\n" - ] - } - ], + "outputs": [], "source": [ "# Accessing the last updated date for the city of Paris\n", "paris_last_date = last_dates_aq.get(\"Paris\", \"Not available\")\n", @@ -215,22 +172,9 @@ "print(\"โ›ณ๏ธ Last update for Columbus:\", columbus_last_date)" ] }, - { - "cell_type": "code", - "execution_count": 9, - "id": "2d45a468", - "metadata": {}, - "outputs": [], - "source": [ - "for city, date in last_dates_aq.items():\n", - " city_last_date = datetime.datetime.strptime(date, \"%Y-%m-%d\").date()\n", - " if (today - city_last_date) <= datetime.timedelta(days=28):\n", - " last_dates_aq[city] = (city_last_date - datetime.timedelta(days=28)).strftime(\"%Y-%m-%d\")" - ] - }, { "cell_type": "markdown", - "id": "b6e5c1c9", + "id": "77c4ee8d-7f7e-4bd0-a97b-c3ac0d7db50f", "metadata": {}, "source": [ "### ๐Ÿง™๐Ÿผโ€โ™‚๏ธ Parsing PM2.5 data" @@ -238,159 +182,13 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "6835e4e4", + "execution_count": null, + "id": "112a7974-37cb-4195-bc71-328af428c491", "metadata": { "scrolled": true, "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processed PM2_5 for Amsterdam since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Athina since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Berlin since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Gdansk since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Krakรณw since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for London since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Madrid since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Marseille since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Milano since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Mรผnchen since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Napoli since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Paris since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Sevilla since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Stockholm since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Tallinn since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Varna since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Wien since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Albuquerque since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Atlanta since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Chicago since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Columbus since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Dallas since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Denver since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Houston since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Los Angeles since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for New York since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Phoenix-Mesa since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Salt Lake City since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for San Francisco since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Tampa since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Bellevue-SE 12th St since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for DARRINGTON - FIR ST (Darrington High School) since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for KENT - JAMES & CENTRAL since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for LAKE FOREST PARK TOWNE CENTER since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for MARYSVILLE - 7TH AVE (Marysville Junior High) since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for NORTH BEND - NORTH BEND WAY since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for SEATTLE - BEACON HILL since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for SEATTLE - DUWAMISH since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for SEATTLE - SOUTH PARK #2 since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "Processed PM2_5 for Seattle-10th & Weller since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for TACOMA - ALEXANDER AVE since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for TACOMA - L STREET since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Tacoma-S 36th St since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Tukwila Allentown since 2024-04-15 till 2024-05-14.\n", - "Took 0.1 sec.\n", - "\n", - "Processed PM2_5 for Tulalip-Totem Beach Rd since 2024-04-15 till 2024-05-14.\n", - "Took 0.11 sec.\n", - "\n", - "----------------------------------------------------------------\n", - "Parsed new PM2.5 data for ALL locations up to 2024-05-14.\n", - "Took 4.74 sec.\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Storing the current time as the start time of the cell execution\n", "start_of_cell = time.time()\n", @@ -425,78 +223,17 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "1e8c2e7c", + "execution_count": null, + "id": "1afdc6a5", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatepm2_5
1347Tulalip-Totem Beach Rd2024-05-126.8
1348Tulalip-Totem Beach Rd2024-05-134.1
1349Tulalip-Totem Beach Rd2024-05-146.6
\n", - "
" - ], - "text/plain": [ - " city_name date pm2_5\n", - "1347 Tulalip-Totem Beach Rd 2024-05-12 6.8\n", - "1348 Tulalip-Totem Beach Rd 2024-05-13 4.1\n", - "1349 Tulalip-Totem Beach Rd 2024-05-14 6.6" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df_aq_raw.tail(3)" ] }, { "cell_type": "markdown", - "id": "8b1fec0b", + "id": "250d9daf-83fa-49f1-bcd8-4efaeb90b99c", "metadata": { "tags": [] }, @@ -506,8 +243,8 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "5d65f2ad", + "execution_count": null, + "id": "140b468a-e0c2-44a1-8e44-4cf393407eca", "metadata": { "tags": [] }, @@ -519,200 +256,27 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "57ecbd4f", + "execution_count": null, + "id": "acc181a9-6183-45ec-aed2-8ee684e13b39", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatepm2_5pm_2_5_previous_1_daypm_2_5_previous_2_daypm_2_5_previous_3_daypm_2_5_previous_4_daypm_2_5_previous_5_daypm_2_5_previous_6_daypm_2_5_previous_7_day...exp_std_28_daysyearday_of_monthmonthday_of_weekis_weekendsin_day_of_yearcos_day_of_yearsin_day_of_weekcos_day_of_week
1347Napoli2024-05-1418.016.411.99.38.86.810.312.0...3.9371562024145100.729558-0.6839190.7818310.62349
1348Los Angeles2024-05-1419.315.916.816.116.115.719.920.6...5.1377842024145100.729558-0.6839190.7818310.62349
1349Houston2024-05-1421.513.712.97.210.114.79.88.9...2.5772002024145100.729558-0.6839190.7818310.62349
\n", - "

3 rows ร— 31 columns

\n", - "
" - ], - "text/plain": [ - " city_name date pm2_5 pm_2_5_previous_1_day \\\n", - "1347 Napoli 2024-05-14 18.0 16.4 \n", - "1348 Los Angeles 2024-05-14 19.3 15.9 \n", - "1349 Houston 2024-05-14 21.5 13.7 \n", - "\n", - " pm_2_5_previous_2_day pm_2_5_previous_3_day pm_2_5_previous_4_day \\\n", - "1347 11.9 9.3 8.8 \n", - "1348 16.8 16.1 16.1 \n", - "1349 12.9 7.2 10.1 \n", - "\n", - " pm_2_5_previous_5_day pm_2_5_previous_6_day pm_2_5_previous_7_day \\\n", - "1347 6.8 10.3 12.0 \n", - "1348 15.7 19.9 20.6 \n", - "1349 14.7 9.8 8.9 \n", - "\n", - " ... exp_std_28_days year day_of_month month day_of_week \\\n", - "1347 ... 3.937156 2024 14 5 1 \n", - "1348 ... 5.137784 2024 14 5 1 \n", - "1349 ... 2.577200 2024 14 5 1 \n", - "\n", - " is_weekend sin_day_of_year cos_day_of_year sin_day_of_week \\\n", - "1347 0 0.729558 -0.683919 0.781831 \n", - "1348 0 0.729558 -0.683919 0.781831 \n", - "1349 0 0.729558 -0.683919 0.781831 \n", - "\n", - " cos_day_of_week \n", - "1347 0.62349 \n", - "1348 0.62349 \n", - "1349 0.62349 \n", - "\n", - "[3 rows x 31 columns]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Applying a feature engineering function 'feature_engineer_aq' to the 'df_aq_update' DataFrame\n", "df_aq_update = air_quality.feature_engineer_aq(df_aq_raw)\n", "\n", "# Dropping rows with missing values in the 'df_aq_update' DataFrame\n", "df_aq_update = df_aq_update.dropna()\n", - "\n", "df_aq_update.tail(3)" ] }, { "cell_type": "code", - "execution_count": 14, - "id": "b3c89be0", + "execution_count": null, + "id": "0364873c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Checking the total number of missing values in the 'df_aq_update' DataFrame\n", "df_aq_update.isna().sum().sum()" @@ -720,23 +284,12 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "215fc4d5", + "execution_count": null, + "id": "94f67c89-6b39-4748-b4be-6ed3c9d57f96", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": [ - "(90, 31)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Retrieving the dimensions (number of rows and columns) of the 'df_aq_update' DataFrame\n", "df_aq_update.shape" @@ -744,7 +297,15 @@ }, { "cell_type": "markdown", - "id": "998e1128", + "id": "d74f5622-6f57-47b9-ac0b-dfb6617847b2", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "95a34c64-5b94-4c4f-b03d-14e12a106f25", "metadata": {}, "source": [ "## ๐ŸŒฆ Filling gaps in Weather data" @@ -752,8 +313,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "8b9d1259", + "execution_count": null, + "id": "46009853-160c-467e-abb0-3145d27c57dc", "metadata": { "tags": [] }, @@ -772,7 +333,7 @@ }, { "cell_type": "markdown", - "id": "737827d6", + "id": "1fd15812-a3a9-488c-879e-181c7b815357", "metadata": { "tags": [] }, @@ -782,159 +343,13 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "a6e9d808", + "execution_count": null, + "id": "ef027d28-3443-4c7c-9e85-783625301a14", "metadata": { "scrolled": true, "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parsed weather for Amsterdam since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Athina since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Berlin since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Gdansk since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Krakรณw since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for London since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Madrid since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Marseille since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Milano since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Mรผnchen since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Napoli since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Paris since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Sevilla since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Stockholm since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Tallinn since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Varna since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Wien since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Albuquerque since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Atlanta since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Chicago since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Columbus since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Dallas since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Denver since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for Houston since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Los Angeles since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for New York since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Phoenix-Mesa since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Salt Lake City since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for San Francisco since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Tampa since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Bellevue-SE 12th St since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for DARRINGTON - FIR ST (Darrington High School) since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for KENT - JAMES & CENTRAL since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for LAKE FOREST PARK TOWNE CENTER since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for MARYSVILLE - 7TH AVE (Marysville Junior High) since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for NORTH BEND - NORTH BEND WAY since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for SEATTLE - BEACON HILL since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for SEATTLE - DUWAMISH since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for SEATTLE - SOUTH PARK #2 since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Seattle-10th & Weller since 2024-05-13 till 2024-05-14.\n", - "Took 2.11 sec.\n", - "\n", - "Parsed weather for TACOMA - ALEXANDER AVE since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for TACOMA - L STREET since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Tacoma-S 36th St since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Tukwila Allentown since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "Parsed weather for Tulalip-Totem Beach Rd since 2024-05-13 till 2024-05-14.\n", - "Took 2.1 sec.\n", - "\n", - "----------------------------------------------------------------\n", - "Parsed new weather data for ALL cities up to 2024-05-14.\n", - "Took 94.69 sec.\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Storing the current time as the start time of the cell execution\n", "start_of_cell = time.time()\n", @@ -973,8 +388,8 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "281ebd0c", + "execution_count": null, + "id": "a7bff400-a2fb-48a3-a07b-5bd2a0469cd7", "metadata": { "tags": [] }, @@ -995,119 +410,12 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "b7b0d0ef", + "execution_count": null, + "id": "11752b30-2f40-4668-9813-2a90199c62b8", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
city_namedatetemperature_maxtemperature_minprecipitation_sumrain_sumsnowfall_sumprecipitation_hourswind_speed_maxwind_gusts_maxwind_direction_dominantunix_time
87Tukwila Allentown2024-05-1420.79.80.00.00.00.016.925.681715644800000
88Tulalip-Totem Beach Rd2024-05-1319.410.00.00.00.00.021.652.23301715558400000
89Tulalip-Totem Beach Rd2024-05-1417.97.60.00.00.00.017.641.03371715644800000
\n", - "
" - ], - "text/plain": [ - " city_name date temperature_max temperature_min \\\n", - "87 Tukwila Allentown 2024-05-14 20.7 9.8 \n", - "88 Tulalip-Totem Beach Rd 2024-05-13 19.4 10.0 \n", - "89 Tulalip-Totem Beach Rd 2024-05-14 17.9 7.6 \n", - "\n", - " precipitation_sum rain_sum snowfall_sum precipitation_hours \\\n", - "87 0.0 0.0 0.0 0.0 \n", - "88 0.0 0.0 0.0 0.0 \n", - "89 0.0 0.0 0.0 0.0 \n", - "\n", - " wind_speed_max wind_gusts_max wind_direction_dominant unix_time \n", - "87 16.9 25.6 8 1715644800000 \n", - "88 21.6 52.2 330 1715558400000 \n", - "89 17.6 41.0 337 1715644800000 " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Converting the 'date' column in the 'df_aq_update' DataFrame to string format\n", "df_aq_update.date = df_aq_update.date.astype(str)\n", @@ -1122,7 +430,15 @@ }, { "cell_type": "markdown", - "id": "68a51e7e", + "id": "792dd383", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "5aef353d", "metadata": { "tags": [] }, @@ -1132,44 +448,10 @@ }, { "cell_type": "code", - "execution_count": 20, - "id": "2053131e", + "execution_count": null, + "id": "f81bb922", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a08101f8499844b9aaa317091df879ab", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/90 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: air_quality_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://snurran.hops.works/p/5242/jobs/named/air_quality_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Insert new data\n", "air_quality_fg.insert(df_aq_update)" @@ -1177,44 +459,10 @@ }, { "cell_type": "code", - "execution_count": 21, - "id": "ff55bcf8", + "execution_count": null, + "id": "be0c498e", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1bc259a83b4b48b588a8651241ebe5fc", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/90 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: weather_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://snurran.hops.works/p/5242/jobs/named/weather_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Insert new data\n", "weather_fg.insert(df_weather_update)" @@ -1222,20 +470,19 @@ }, { "cell_type": "markdown", - "id": "1c2a96b0", + "id": "b50c64a1", "metadata": {}, "source": [ - "---\n", "## โญ๏ธ **Next:** Part 03: Training Pipeline\n", " \n", "\n", - "In the following notebook you will create a feature view, create a training dataset, train a model and save it in the Hopsworks Model Registry." + "In the following notebook you will read from a feature group and create training dataset within the feature store\n" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1249,7 +496,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" }, "vscode": { "interpreter": { diff --git a/advanced_tutorials/air_quality/3_air_quality_training_pipeline.ipynb b/advanced_tutorials/air_quality/3_air_quality_training_pipeline.ipynb index 2dc9af7b..542778ae 100644 --- a/advanced_tutorials/air_quality/3_air_quality_training_pipeline.ipynb +++ b/advanced_tutorials/air_quality/3_air_quality_training_pipeline.ipynb @@ -2,29 +2,28 @@ "cells": [ { "cell_type": "markdown", - "id": "3d8d5c4a", + "id": "7eb83ff8", "metadata": { "tags": [] }, "source": [ "# **Hopsworks Feature Store** - Part 03: Training Pipeline\n", "\n", - "This notebook explains how to create a feature view, create a training dataset, train a model and save it in the Hopsworks Model Registry.\n", + "This notebook explains how to read from a feature group and create training dataset within the feature store\n", "\n", "## ๐Ÿ—’๏ธ This notebook is divided into the following sections:\n", "\n", - "1. Fetch Feature Groups.\n", - "2. Create a Feature View.\n", - "3. Create a Training Dataset.\n", - "4. Train a model.\n", - "5. Save trained model in the Model Registry.\n", + "1. Fetch Feature Groups\n", + "2. Define Transformation functions\n", + "4. Create Feature Views\n", + "5. Create Training Dataset with training, validation and test splits\n", "\n", "![part2](../../images/02_training-dataset.png) " ] }, { "cell_type": "markdown", - "id": "e89e0ed8", + "id": "f3b5f602-a575-49a8-bce9-a997cca936e0", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -32,25 +31,32 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "7e858f8a", + "execution_count": null, + "id": "ad609eec-0b46-445f-a0f5-5657e5f69866", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install xgboost --q" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3f2ac81-423a-4380-8fd6-b70aa55eb864", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-03-12 15:53:54,685 INFO: generated new fontManager\n" - ] - } - ], + "outputs": [], "source": [ "import os\n", + "import datetime\n", + "import time\n", + "import json\n", + "import pickle\n", "import joblib\n", "\n", "import pandas as pd\n", + "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", @@ -67,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "e4d834bc", + "id": "a0b3bcd1", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -75,21 +81,10 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "817cdef7", + "execution_count": null, + "id": "89ad779f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/5242\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], "source": [ "import hopsworks\n", "\n", @@ -100,8 +95,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "dff51a06", + "execution_count": null, + "id": "735a083e", "metadata": {}, "outputs": [], "source": [ @@ -118,21 +113,23 @@ }, { "cell_type": "markdown", - "id": "45881fbc", + "id": "be427dca", "metadata": {}, "source": [ - "## ๐Ÿ– Feature View Creation and Retrieval " + "--- \n", + "\n", + "## ๐Ÿ– Feature View Creation and Retrieving " ] }, { "cell_type": "code", - "execution_count": 4, - "id": "0d4e6eba", + "execution_count": null, + "id": "cc3192d3", "metadata": {}, "outputs": [], "source": [ - "# Select features for training data.\n", - "selected_features = air_quality_fg.select_all().join(\n", + "# Build a query object with selected features for training dataset\n", + "query = air_quality_fg.select_all().join(\n", " weather_fg.select_except(['unix_time']), \n", " on=['city_name', 'date'],\n", ")" @@ -140,21 +137,35 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "1d5cf648", + "execution_count": null, + "id": "b3b8ba7b-b0ab-4ea5-b050-f8e1faf43c27", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "# here you can check out the merged dataframe\n", + "\n", + "# query_df = query.read()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0e582de6-09aa-4160-be66-0cdd831783d2", "metadata": { "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# query_df.city_name.value_counts()" ] }, { "cell_type": "markdown", - "id": "82c5b7be", + "id": "d83a1681", "metadata": {}, "source": [ "`Feature Views` stands between **Feature Groups** and **Training Dataset**. ะกombining **Feature Groups** we can create **Feature Views** which store a metadata of our data. Having **Feature Views** we can create **Training Dataset**.\n", @@ -178,8 +189,8 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "c0d7fec3", + "execution_count": null, + "id": "403df0b4", "metadata": {}, "outputs": [], "source": [ @@ -187,23 +198,25 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='air_quality_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", ")" ] }, { "cell_type": "markdown", - "id": "8f12f3ac", + "id": "0c723c54", "metadata": {}, "source": [ - "For now, your `Feature View` is saved in Hopsworks and you can retrieve it using `FeatureStore.get_feature_view()`." + "For now `Feature View` is saved in Hopsworks and you can retrieve it using `FeatureStore.get_feature_view()`." ] }, { "cell_type": "markdown", - "id": "72aeb854", + "id": "6e1187a2", "metadata": {}, "source": [ + "---\n", + "\n", "## ๐Ÿ‹๏ธ Training Dataset Creation\n", "\n", "In Hopsworks training data is a query where the projection (set of features) is determined by the parent FeatureView with an optional snapshot on disk of the data returned by the query.\n", @@ -229,25 +242,10 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "317668a8", + "execution_count": null, + "id": "2f5bcf22-6ff1-4995-a8c3-11a1dab396a7", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (12.56s) \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "VersionWarning: Incremented version to `2`.\n" - ] - } - ], + "outputs": [], "source": [ "X, _ = feature_view.training_data(\n", " description = 'Air Quality dataset',\n", @@ -256,7 +254,15 @@ }, { "cell_type": "markdown", - "id": "a18b3733", + "id": "c995b340-5ba6-4116-b8b6-86ca34f0a0ab", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "95783124-8303-47c5-bd15-2804efa15611", "metadata": {}, "source": [ "## ๐Ÿงฌ Modeling" @@ -264,25 +270,25 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "16c721ea", + "execution_count": null, + "id": "5b937dec", "metadata": {}, "outputs": [], "source": [ - "# Create a LabelEncoder object\n", + "# Creating a LabelEncoder object\n", "label_encoder = LabelEncoder()\n", "\n", - "# Fit the encoder to the data in the 'city_name' column\n", + "# Fitting the encoder to the data in the 'city_name' column\n", "label_encoder.fit(X[['city_name']])\n", "\n", - "# Transform the 'city_name' column data using the fitted encoder\n", + "# Transforming the 'city_name' column data using the fitted encoder\n", "encoded = label_encoder.transform(X[['city_name']])" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "ee1a5c8c", + "execution_count": null, + "id": "97cdb6bb-6c9c-44b7-9171-1b420bae9181", "metadata": { "tags": [] }, @@ -300,342 +306,90 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "612ef824", + "execution_count": null, + "id": "4df41c7d-00bd-4203-90a1-8cc298508d68", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# Extract the target variable 'pm2_5' from the DataFrame 'X' and assigning it to the variable 'y'\n", + "# Extracting the target variable 'pm2_5' from the DataFrame 'X' and assigning it to the variable 'y'\n", "y = X.pop('pm2_5')" ] }, { "cell_type": "code", - "execution_count": 11, - "id": "02950e70", + "execution_count": null, + "id": "d0299506-195f-4ebc-b43e-347fe59db31c", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pm_2_5_previous_1_daypm_2_5_previous_2_daypm_2_5_previous_3_daypm_2_5_previous_4_daypm_2_5_previous_5_daypm_2_5_previous_6_daypm_2_5_previous_7_daymean_7_daysmean_14_daysmean_28_days...temperature_maxtemperature_minprecipitation_sumrain_sumsnowfall_sumprecipitation_hourswind_speed_maxwind_gusts_maxwind_direction_dominantcity_name_encoded
1058180.00.02.03.06.06.07.03.4285716.8571435.142857...5.13.71.61.60.06.027.247.9639
669794.73.73.98.015.314.210.68.6285718.8500009.428571...0.0-6.80.00.00.00.019.345.06036
12222310.012.04.010.03.04.04.06.71428610.00000010.964286...1.5-1.90.00.00.00.013.524.127911
\n", - "

3 rows ร— 38 columns

\n", - "
" - ], - "text/plain": [ - " pm_2_5_previous_1_day pm_2_5_previous_2_day pm_2_5_previous_3_day \\\n", - "105818 0.0 0.0 2.0 \n", - "66979 4.7 3.7 3.9 \n", - "122223 10.0 12.0 4.0 \n", - "\n", - " pm_2_5_previous_4_day pm_2_5_previous_5_day pm_2_5_previous_6_day \\\n", - "105818 3.0 6.0 6.0 \n", - "66979 8.0 15.3 14.2 \n", - "122223 10.0 3.0 4.0 \n", - "\n", - " pm_2_5_previous_7_day mean_7_days mean_14_days mean_28_days ... \\\n", - "105818 7.0 3.428571 6.857143 5.142857 ... \n", - "66979 10.6 8.628571 8.850000 9.428571 ... \n", - "122223 4.0 6.714286 10.000000 10.964286 ... \n", - "\n", - " temperature_max temperature_min precipitation_sum rain_sum \\\n", - "105818 5.1 3.7 1.6 1.6 \n", - "66979 0.0 -6.8 0.0 0.0 \n", - "122223 1.5 -1.9 0.0 0.0 \n", - "\n", - " snowfall_sum precipitation_hours wind_speed_max wind_gusts_max \\\n", - "105818 0.0 6.0 27.2 47.9 \n", - "66979 0.0 0.0 19.3 45.0 \n", - "122223 0.0 0.0 13.5 24.1 \n", - "\n", - " wind_direction_dominant city_name_encoded \n", - "105818 6 39 \n", - "66979 60 36 \n", - "122223 279 11 \n", - "\n", - "[3 rows x 38 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Split the data into training and testing sets using the train_test_split function\n", - "X_train, X_test, y_train, y_test = train_test_split(\n", - " X, \n", - " y, \n", - " test_size=0.2, \n", - " random_state=42,\n", - ")\n", - "\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "b4ddfaeb", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "105818 2.0\n", - "66979 9.8\n", - "122223 11.0\n", - "Name: pm2_5, dtype: float64" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_train.head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "59e85ea3", - "metadata": {}, + "outputs": [], "source": [ - "## ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ Model Training" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "44a6893f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
XGBRegressor(base_score=None, booster=None, callbacks=None,\n",
-       "             colsample_bylevel=None, colsample_bynode=None,\n",
-       "             colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
-       "             enable_categorical=False, eval_metric=None, feature_types=None,\n",
-       "             gamma=None, grow_policy=None, importance_type=None,\n",
-       "             interaction_constraints=None, learning_rate=None, max_bin=None,\n",
-       "             max_cat_threshold=None, max_cat_to_onehot=None,\n",
-       "             max_delta_step=None, max_depth=None, max_leaves=None,\n",
-       "             min_child_weight=None, missing=nan, monotone_constraints=None,\n",
-       "             multi_strategy=None, n_estimators=None, n_jobs=None,\n",
-       "             num_parallel_tree=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "XGBRegressor(base_score=None, booster=None, callbacks=None,\n", - " colsample_bylevel=None, colsample_bynode=None,\n", - " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", - " enable_categorical=False, eval_metric=None, feature_types=None,\n", - " gamma=None, grow_policy=None, importance_type=None,\n", - " interaction_constraints=None, learning_rate=None, max_bin=None,\n", - " max_cat_threshold=None, max_cat_to_onehot=None,\n", - " max_delta_step=None, max_depth=None, max_leaves=None,\n", - " min_child_weight=None, missing=nan, monotone_constraints=None,\n", - " multi_strategy=None, n_estimators=None, n_jobs=None,\n", - " num_parallel_tree=None, random_state=None, ...)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create an instance of the XGBoost Regressor\n", - "xgb_regressor = XGBRegressor()\n", - "\n", - "# Fit the XGBoost Regressor to the training data\n", - "xgb_regressor.fit(X_train, y_train)" + "# Splitting the data into training and testing sets using the train_test_split function\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " X, y, test_size=0.2, random_state=42)" ] }, { "cell_type": "markdown", - "id": "6335331f", + "id": "8fd4e24e-7f02-4944-a309-6475b65e7846", "metadata": {}, "source": [ - "## โš–๏ธ Model Validation" + "### โš–๏ธ Model Validation" ] }, { "cell_type": "code", - "execution_count": 14, - "id": "405bb3d6", + "execution_count": null, + "id": "4e5be9f8-0f88-4a7e-8fc1-65ec8b02920d", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ MSE: 29.739315036119873\n", - "โ›ณ๏ธ RMSE: 5.453376480321148\n", - "โ›ณ๏ธ R^2: 0.7422035343350755\n" - ] - } - ], - "source": [ - "# Predict target values on the test set\n", + "outputs": [], + "source": [ + "# Storing the current time as the start time of the cell execution\n", + "start_of_cell = time.time()\n", + "\n", + "# Creating an instance of the XGBoost Regressor\n", + "xgb_regressor = XGBRegressor()\n", + "\n", + "# Fitting the XGBoost Regressor to the training data\n", + "xgb_regressor.fit(X_train, y_train)\n", + "\n", + "# Predicting target values on the test set\n", "y_pred = xgb_regressor.predict(X_test)\n", "\n", - "# Calculate Mean Squared Error (MSE) using sklearn\n", + "# Calculating Mean Squared Error (MSE) using sklearn\n", "mse = mean_squared_error(y_test, y_pred)\n", - "print(\"โ›ณ๏ธ MSE:\", mse)\n", + "print(\"MSE:\", mse)\n", "\n", - "# Calculate Root Mean Squared Error (RMSE) using sklearn\n", + "# Calculating Root Mean Squared Error (RMSE) using sklearn\n", "rmse = mean_squared_error(y_test, y_pred, squared=False)\n", - "print(\"โ›ณ๏ธ RMSE:\", rmse)\n", + "print(\"RMSE:\", rmse)\n", "\n", - "# Calculate R squared using sklearn\n", + "# Calculating R squared using sklearn\n", "r2 = r2_score(y_test, y_pred)\n", - "print(\"โ›ณ๏ธ R^2:\", r2)" + "print(\"R squared:\", r2)\n", + "\n", + "# Storing the current time as the end time of the cell execution\n", + "end_of_cell = time.time()\n", + "\n", + "# Printing information about the execution, including the time taken\n", + "print(f\"Took {round(end_of_cell - start_of_cell, 2)} sec.\\n\")" ] }, { "cell_type": "code", - "execution_count": 15, - "id": "b19bd4aa", + "execution_count": null, + "id": "ac31f9fb-7904-416a-9938-e85320340412", "metadata": { "tags": [] }, "outputs": [], "source": [ - "# Create a DataFrame 'df_' to store true and predicted values for evaluation\n", - "df_pred = pd.DataFrame({\n", + "# Creating a DataFrame 'df_' to store true and predicted values for evaluation\n", + "df_ = pd.DataFrame({\n", " \"y_true\": y_test,\n", " \"y_pred\": y_pred,\n", "})" @@ -643,71 +397,55 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "9a72e8f5", + "execution_count": null, + "id": "f2fc8448-2150-4cfd-803d-afbd4845b59e", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "image/png": "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KQwaNAgDBgzAihUrKr1+//79kZGR4XmcnJyMnJwcrzY5OTlITk4u9xoGgwEGg6HS1yIiIqKGIajBUWJiIhITE/1qe/LkSQwaNAh9+vTBypUrodFUnvTKyspCixYtPI/T0tLw3XffYdq0aZ5jGRkZSEtLC7jvRERE1DCFxFT+kydPYuDAgUhNTcVLL72Es2fPes65sz7vvvsu9Ho9evfuDQD47LPP8M477+Dtt9/2tJ06dSr+8pe/4OWXX8bIkSPx4YcfYseOHX5loYiIiKhxCIngKCMjA4cOHcKhQ4fQqlUrr3PqlQiee+45HD16FGFhYejcuTM++ugj3HbbbZ7zAwYMwPvvv48nn3wSc+bMQceOHfHFF19wjSMiIiLyCNl1joKF6xwRERGFnkaxzhERERFRbWBwRERERKTC4IiIiIhIhcERERERkQqDIyIiIiIVBkdEREREKgyOiIiIiFQYHBERERGpMDgiIiIiUmFwRERERKTC4IiIiIhIhcERERERkQqDIyIiIiIVBkdEREREKgyOiIiIiFQYHBERERGpMDgiIiIiUmFwRERERKTC4IiIiIhIhcERERERkQqDIyIiIiIVBkdEREREKgyOiIiIiFQYHBERERGpMDgiIiIiUmFwRERERKTC4IiIiIhIhcERERERkQqDIyIiIiIVBkdEREREKgyOiIiIiFQYHBERERGpMDgiIiIiUmFwRERERKQSMsHRjTfeiNatWyM8PBwtWrTAvffei1OnTnm12bNnD4xGI8LDw5GSkoJFixaVuc7q1avRuXNnhIeHo3v37lizZk1dvQUiIiIKASETHA0aNAgff/wxDh48iE8//RR//PEHbrvtNs95s9mMYcOGITU1FTt37sTixYsxf/58rFixwtPmp59+wpgxYzBhwgTs3r0bo0ePxujRo7Fv375gvCUiIiKqhxQhhAh2J6riv//9L0aPHg2LxQKdToc333wTc+fOhclkgl6vBwDMmjULX3zxBbKzswEAd9xxBwoLC/H11197rnP11VejV69eWL58uV+vazabERcXh/z8fMTGxtb8GyMiIqIaF8jnd8hkjtRyc3Px3nvvYcCAAdDpdACAzMxMXHfddZ7ACADS09Nx8OBBXLhwwdNm6NChXtdKT09HZmZmua9lsVhgNpu9voiIiKjhCqng6IknnkBUVBSaNm2KY8eO4csv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4uKETqcT4eHhIi4uTuj1emEwGERcXJx48MEHA/zpEZEagyMiqhFbt24VAMTnn3/u8/wrr7wiAIicnBwhhAwMhg8f7tXmjjvuECNGjBBCCPHyyy+Lyy+/XFit1jLXOnr0qNBqteLkyZNex4cMGSJmz54thJDBEQCRlZXl1Wbq1Kli8ODBnsfr168XBoPBE9T4MnLkSDFz5kzP49I7rgshygRHd911l7j++uu92jz22GOia9eunsepqaninnvu8Tx2Op2iefPm4s033yy3LzabTRw+fFj88ssvQqfTiV9++UUcOnRIREdHiy1btojDhw+Ls2fPlvt8Iqoch9WIqEYJIfxum5aWVubxgQMHAAC33347ioqK0K5dO0ycOBGff/457HY7AGDv3r1wOBy4/PLLER0d7fnasmUL/vjjD8/19Ho9evTo4fUad999NzZv3oxTp04BAN577z2MHDkS8fHxAGRt0nPPPYfu3bujSZMmiI6Oxvr16wMudD5w4ECZYa5rrrkGv//+OxwOh+eYun+KoiA5ORlnzpwp97phYWFo06YNsrOz0bdvX/To0QMmkwlJSUm47rrr0KZNGzRr1iygvhKRt7Bgd4CIGoYOHTpAURQcOHAAN998c5nzBw4cQEJCAhITE/26XkpKCg4ePIgNGzYgIyMDDz30EBYvXowtW7bg4sWL0Gq12LlzJ7RardfzoqOjPX+OiIgoUyDdt29ftG/fHh9++CEefPBBfP7551i1apXn/OLFi/Haa6/h1VdfRffu3REVFYVp06bBarUGcDf8p9PpvB4rilJh4Xi3bt1w9OhR2Gw2OJ1OREdHw263w263Izo6Gqmpqdi/f3+t9JWosWBwREQ1omnTprj++uvxxhtvYPr06YiIiPCcM5lMeO+993Dfffd5BStbt271usbWrVvRpUsXz+OIiAiMGjUKo0aNwuTJk9G5c2fs3bsXvXv3hsPhwJkzZ2A0GgPu691334333nsPrVq1gkajwciRIz3nfvzxR9x000245557AABOpxO//fYbunbt6mmj1+u9sj++dOnSBT/++KPXsR9//BGXX355mYAuEGvWrIHNZsOQIUOwaNEi9OnTB3feeSfGjRuH4cOHlwm2iChwHFYjohqzbNkyWCwWpKen4/vvv8fx48exbt06XH/99bjsssvwwgsveLX/8ccfsWjRIvz22294/fXXsXr1akydOhWAnG32v//7v9i3bx/+/PNP/N///R8iIiKQmpqKyy+/HHfffTfuu+8+fPbZZzh8+DB+/vlnLFiwAN98802l/bz77ruxa9cuvPDCC7jttttgMBg85zp27IiMjAz89NNPOHDgACZNmoScnByv57dp0wbbtm3DkSNHcO7cOZ+ZnpkzZ+K7777Dc889h99++w3vvvsuli1bhkcffbQqt9YjNTUV0dHRyMnJwU033YSUlBTs378ft956Kzp06IDU1NRqXZ+IGBwRUQ3q2LEjduzYgXbt2uFvf/sb2rdvj/vvvx+DBg1CZmYmmjRp4tV+5syZ2LFjB3r37o3nn38er7zyCtLT0wEA8fHx+Ne//oVrrrkGPXr0wIYNG/DVV1+hadOmAICVK1fivvvuw8yZM9GpUyeMHj0a27dv92udnw4dOqBfv37Ys2cP7r77bq9zTz75JK688kqkp6dj4MCBSE5OxujRo73aPProo9BqtejatSsSExN91iNdeeWV+Pjjj/Hhhx/iiiuuwLx58/Dss89i3LhxAdxR3zZv3oy+ffsiPDwcP//8M1q1aoUWLVpU+7pEJCkikOpJIiIiogaOmSMiIiIiFQZHRERERCoMjoiIiIhUGBwRERERqTA4IiIiIlJhcERERESkwuCIiIiISIXBEREREZEKgyMiIiIiFQZHRERERCoMjoiIiIhUGBwRERERqfx/mxEnsOo3SocAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Create a residual plot using Seaborn\n", - "residplot = sns.residplot(data=df_pred, x=\"y_true\", y=\"y_pred\", color='orange')\n", - "\n", - "# Add title, xlabel, and ylabel to the residual plot\n", + "outputs": [], + "source": [ + "# Creating a residual plot using Seaborn\n", + "residplot = sns.residplot(data=df_, x=\"y_true\", y=\"y_pred\", color='orange')\n", + "\n", + "# Adding title, xlabel, and ylabel to the residual plot\n", "plt.title('Model Residuals')\n", "plt.xlabel('Observation #')\n", "plt.ylabel('Error')\n", "\n", - "# Display the residual plot\n", + "# Displaying the residual plot\n", "plt.show()\n", "\n", - "# Get the figure from the residual plot and displaying it separately\n", + "# Getting the figure from the residual plot and displaying it separately\n", "fig = residplot.get_figure()\n", "fig.show()" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "d5157113", + "execution_count": null, + "id": "5ae4e226-7a93-4e4d-8131-c1de62a7b6f9", "metadata": { "tags": [] }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot feature importances using the plot_importance function from XGBoost\n", - "plot_importance(\n", - " xgb_regressor, \n", - " max_num_features=25, # Display the top 25 most important features\n", - ")\n", - "plt.show()" + "outputs": [], + "source": [ + "# Plotting feature importances using the plot_importance function from XGBoost\n", + "# 'xgb_regressor' is the trained XGBoost Regressor\n", + "# Setting 'max_num_features' to 25 to display the top 25 most important features\n", + "plot_importance(xgb_regressor, max_num_features=25)" ] }, { "cell_type": "markdown", - "id": "0977f9fe", + "id": "3dcea831-6c21-4396-a0ce-0631d21d1875", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "markdown", + "id": "c066fe79-315e-4b85-b2ab-32d503679dc7", "metadata": { "tags": [] }, @@ -719,20 +457,12 @@ }, { "cell_type": "code", - "execution_count": 18, - "id": "e2fd7e49", + "execution_count": null, + "id": "a787ec40-6bd7-4950-aa5d-bf004e1e5ade", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], "source": [ "# Retrieve the model registry\n", "mr = project.get_model_registry()" @@ -740,7 +470,7 @@ }, { "cell_type": "markdown", - "id": "04886431", + "id": "7d240dc7-8a02-47b2-9667-7483508b2d24", "metadata": {}, "source": [ "### โš™๏ธ Model Schema" @@ -748,7 +478,7 @@ }, { "cell_type": "markdown", - "id": "86eb61ed", + "id": "5c658df3-56a4-450b-90ee-127d0afe5b74", "metadata": {}, "source": [ "The model needs to be set up with a [Model Schema](https://docs.hopsworks.ai/machine-learning-api/latest/generated/model_schema/), which describes the inputs and outputs for a model.\n", @@ -758,8 +488,8 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "8a98e889", + "execution_count": null, + "id": "cd3f3751", "metadata": { "scrolled": true }, @@ -768,79 +498,47 @@ "from hsml.schema import Schema\n", "from hsml.model_schema import ModelSchema\n", "\n", - "# Create input and output schemas using the 'Schema' class for features (X) and target variable (y)\n", + "# Creating input and output schemas using the 'Schema' class for features (X) and target variable (y)\n", "input_schema = Schema(X)\n", "output_schema = Schema(y)\n", "\n", - "# Create a model schema using 'ModelSchema' with the input and output schemas\n", + "# Creating a model schema using 'ModelSchema' with the input and output schemas\n", "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", - "# Convert the model schema to a dictionary representation\n", + "# Converting the model schema to a dictionary representation\n", "schema_dict = model_schema.to_dict()" ] }, { "cell_type": "code", - "execution_count": 20, - "id": "a3d26b4d", + "execution_count": null, + "id": "d2777f5e", "metadata": { "scrolled": true }, "outputs": [], "source": [ - "# Create a directory for the model artifacts if it doesn't exist\n", + "# Creating a directory for the model artifacts if it doesn't exist\n", "model_dir = \"air_quality_model\"\n", "if os.path.isdir(model_dir) == False:\n", " os.mkdir(model_dir)\n", "\n", - "# Save the label encoder and XGBoost regressor as joblib files in the model directory\n", + "# Saving the label encoder and XGBoost regressor as joblib files in the model directory\n", "joblib.dump(label_encoder, model_dir + '/label_encoder.pkl')\n", "joblib.dump(xgb_regressor, model_dir + '/xgboost_regressor.pkl')\n", "\n", - "# Save the residual plot figure as an image in the model directory\n", + "# Saving the residual plot figure as an image in the model directory\n", "fig.savefig(model_dir + \"/residplot.png\")" ] }, { "cell_type": "code", - "execution_count": 21, - "id": "ac2d8166", + "execution_count": null, + "id": "41f6811e", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "db8f5c6580f0428fa7ac741fe6bd7f89", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/6 [00:00 **Hopsworks Feature Store** - Part 04: Batch Inference\n", @@ -10,14 +10,12 @@ "## ๐Ÿ—’๏ธ This notebook is divided into the following sections:\n", "\n", "1. Load batch data.\n", - "2. Retrieve your trained model from the Model Registry.\n", - "3. Load batch data.\n", - "4. Predict batch data." + "2. Predict using model from Model Registry." ] }, { "cell_type": "markdown", - "id": "0cbefa72", + "id": "8855ee1a", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -25,41 +23,31 @@ }, { "cell_type": "code", - "execution_count": 1, - "id": "2635641d", + "execution_count": null, + "id": "019c9226", "metadata": {}, "outputs": [], "source": [ "import joblib\n", "import datetime\n", + "import time\n", "import pandas as pd" ] }, { "cell_type": "markdown", - "id": "97e466ff", + "id": "ce2fe8a8", "metadata": {}, "source": [ - "## ๐Ÿ“ก Connect to Hopsworks Feature Store " + "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " ] }, { "cell_type": "code", - "execution_count": 2, - "id": "dd83456c", + "execution_count": null, + "id": "39f83bc9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/5242\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], "source": [ "import hopsworks\n", "\n", @@ -70,16 +58,16 @@ }, { "cell_type": "markdown", - "id": "88a9587d", + "id": "87485ee0", "metadata": {}, "source": [ - "## โš™๏ธ Feature View Retrieval" + "## โš™๏ธ Feature View Retrieval\n" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "fa7f8ed2", + "execution_count": null, + "id": "e622d6b4", "metadata": {}, "outputs": [], "source": [ @@ -92,26 +80,18 @@ }, { "cell_type": "markdown", - "id": "20bc6944", + "id": "e1dac8b6", "metadata": {}, "source": [ - "## ๐Ÿ—„ Model Registry" + "## ๐Ÿ—„ Model Registry\n" ] }, { "cell_type": "code", - "execution_count": 4, - "id": "33c4f742", + "execution_count": null, + "id": "ca35a9f4", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], "source": [ "# Retrieve the model registry\n", "mr = project.get_model_registry()" @@ -119,99 +99,47 @@ }, { "cell_type": "markdown", - "id": "f887c4ba", + "id": "6f3589dc", "metadata": {}, "source": [ - "## ๐Ÿช Retrieve model from Model Registry" + "## ๐Ÿช Retrieving model from Model Registry" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "9f52593a", + "execution_count": null, + "id": "6ac8014f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloading model artifact (0 dirs, 6 files)... DONE\r" - ] - } - ], + "outputs": [], "source": [ - "# Retrieve the 'air_quality_xgboost_model' from the model registry\n", + "# Retrieving the 'air_quality_xgboost_model' from the model registry\n", "retrieved_model = mr.get_model(\n", " name=\"air_quality_xgboost_model\",\n", " version=1,\n", ")\n", "\n", - "# Download the saved model artifacts to a local directory\n", + "# Downloading the saved model artifacts to a local directory\n", "saved_model_dir = retrieved_model.download()" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "020d13b0", + "execution_count": null, + "id": "3812f78d", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
XGBRegressor(base_score=None, booster=None, callbacks=None,\n",
-       "             colsample_bylevel=None, colsample_bynode=None,\n",
-       "             colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
-       "             enable_categorical=False, eval_metric=None, feature_types=None,\n",
-       "             gamma=None, grow_policy=None, importance_type=None,\n",
-       "             interaction_constraints=None, learning_rate=None, max_bin=None,\n",
-       "             max_cat_threshold=None, max_cat_to_onehot=None,\n",
-       "             max_delta_step=None, max_depth=None, max_leaves=None,\n",
-       "             min_child_weight=None, missing=nan, monotone_constraints=None,\n",
-       "             multi_strategy=None, n_estimators=None, n_jobs=None,\n",
-       "             num_parallel_tree=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "XGBRegressor(base_score=None, booster=None, callbacks=None,\n", - " colsample_bylevel=None, colsample_bynode=None,\n", - " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", - " enable_categorical=False, eval_metric=None, feature_types=None,\n", - " gamma=None, grow_policy=None, importance_type=None,\n", - " interaction_constraints=None, learning_rate=None, max_bin=None,\n", - " max_cat_threshold=None, max_cat_to_onehot=None,\n", - " max_delta_step=None, max_depth=None, max_leaves=None,\n", - " min_child_weight=None, missing=nan, monotone_constraints=None,\n", - " multi_strategy=None, n_estimators=None, n_jobs=None,\n", - " num_parallel_tree=None, random_state=None, ...)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# Load the XGBoost regressor model and label encoder from the saved model directory\n", + "# Loading the XGBoost regressor model and label encoder from the saved model directory\n", "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/xgboost_regressor.pkl\")\n", "retrieved_encoder = joblib.load(saved_model_dir + \"/label_encoder.pkl\")\n", "\n", - "# Display the retrieved XGBoost regressor model\n", + "# Displaying the retrieved XGBoost regressor model\n", "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "b8e37bb1", + "id": "9a762442", "metadata": {}, "source": [ "## โœจ Load Batch Data of last days\n", @@ -221,59 +149,38 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "733a1355", + "execution_count": null, + "id": "4bd49291", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'2024-02-11'" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# Get the current date\n", + "# Getting the current date\n", "today = datetime.date.today()\n", "\n", - "# Calculate a date threshold 30 days ago from the current date\n", + "# Calculating a date threshold 30 days ago from the current date\n", "date_threshold = today - datetime.timedelta(days=30)\n", "\n", - "# Convert the date threshold to a string format\n", + "# Converting the date threshold to a string format\n", "str(date_threshold)" ] }, { "cell_type": "code", - "execution_count": 8, - "id": "5a5c283b", + "execution_count": null, + "id": "3990e55f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.68s) \n" - ] - } - ], + "outputs": [], "source": [ - "# Initialize batch scoring\n", + "# Initializing batch scoring\n", "feature_view.init_batch_scoring(1)\n", "\n", - "# Retrieve batch data from the feature view with a start time set to the date threshold\n", - "batch_data = feature_view.get_batch_data(\n", - " start_time=date_threshold,\n", - ")" + "# Retrieving batch data from the feature view with a start time set to the date threshold\n", + "batch_data = feature_view.get_batch_data(start_time=date_threshold)" ] }, { "cell_type": "markdown", - "id": "00a46a76", + "id": "36f82c4a", "metadata": {}, "source": [ "### ๐Ÿค– Making the predictions" @@ -281,219 +188,44 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "f1e09066", + "execution_count": null, + "id": "a10ff736", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pm_2_5_previous_1_daypm_2_5_previous_2_daypm_2_5_previous_3_daypm_2_5_previous_4_daypm_2_5_previous_5_daypm_2_5_previous_6_daypm_2_5_previous_7_daymean_7_daysmean_14_daysmean_28_days...temperature_maxtemperature_minprecipitation_sumrain_sumsnowfall_sumprecipitation_hourswind_speed_maxwind_gusts_maxwind_direction_dominantcity_name_encoded
05.316.216.315.425.017.210.215.08571415.24285712.939286...14.28.40.00.000.00.034.759.430220
112.217.512.114.512.316.814.314.24285719.85714318.432143...13.110.520.920.900.022.040.164.821224
211.68.018.212.79.96.812.511.3857149.9214298.271429...10.85.29.113.650.05.014.843.218030
\n", - "

3 rows ร— 38 columns

\n", - "
" - ], - "text/plain": [ - " pm_2_5_previous_1_day pm_2_5_previous_2_day pm_2_5_previous_3_day \\\n", - "0 5.3 16.2 16.3 \n", - "1 12.2 17.5 12.1 \n", - "2 11.6 8.0 18.2 \n", - "\n", - " pm_2_5_previous_4_day pm_2_5_previous_5_day pm_2_5_previous_6_day \\\n", - "0 15.4 25.0 17.2 \n", - "1 14.5 12.3 16.8 \n", - "2 12.7 9.9 6.8 \n", - "\n", - " pm_2_5_previous_7_day mean_7_days mean_14_days mean_28_days ... \\\n", - "0 10.2 15.085714 15.242857 12.939286 ... \n", - "1 14.3 14.242857 19.857143 18.432143 ... \n", - "2 12.5 11.385714 9.921429 8.271429 ... \n", - "\n", - " temperature_max temperature_min precipitation_sum rain_sum \\\n", - "0 14.2 8.4 0.0 0.00 \n", - "1 13.1 10.5 20.9 20.90 \n", - "2 10.8 5.2 9.1 13.65 \n", - "\n", - " snowfall_sum precipitation_hours wind_speed_max wind_gusts_max \\\n", - "0 0.0 0.0 34.7 59.4 \n", - "1 0.0 22.0 40.1 64.8 \n", - "2 0.0 5.0 14.8 43.2 \n", - "\n", - " wind_direction_dominant city_name_encoded \n", - "0 302 20 \n", - "1 212 24 \n", - "2 180 30 \n", - "\n", - "[3 rows x 38 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# Transform the 'city_name' column in the batch data using the retrieved label encoder\n", + "# Transforming the 'city_name' column in the batch data using the retrieved label encoder\n", "encoded = retrieved_encoder.transform(batch_data['city_name'])\n", "\n", - "# Concatenate the label-encoded 'city_name' with the original batch data\n", + "# Concatenating the label-encoded 'city_name' with the original batch data\n", "X_batch = pd.concat([batch_data, pd.DataFrame(encoded)], axis=1)\n", "\n", - "# Drop unnecessary columns ('date', 'city_name', 'unix_time') from the batch data\n", + "# Dropping unnecessary columns ('date', 'city_name', 'unix_time') from the batch data\n", "X_batch = X_batch.drop(columns=['date', 'city_name', 'unix_time'])\n", "\n", - "# Rename the newly added column with label-encoded city names to 'city_name_encoded'\n", + "# Renaming the newly added column with label-encoded city names to 'city_name_encoded'\n", "X_batch = X_batch.rename(columns={0: 'city_name_encoded'})\n", "\n", - "# Extract the target variable 'pm2_5' from the batch data\n", - "y_batch = X_batch.pop('pm2_5')\n", - "\n", - "X_batch.head(3)" + "# Extracting the target variable 'pm2_5' from the batch data\n", + "y_batch = X_batch.pop('pm2_5')" ] }, { "cell_type": "code", - "execution_count": 10, - "id": "5149127e", + "execution_count": null, + "id": "b597ea2b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 5.9190893, 6.7028375, 7.9574 , 15.73646 , 8.050383 ],\n", - " dtype=float32)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# Make predictions on the batch data using the retrieved XGBoost regressor model\n", + "# Making predictions on the batch data using the retrieved XGBoost regressor model\n", "predictions = retrieved_xgboost_model.predict(X_batch)\n", "\n", - "# Display the first 5 predictions\n", + "# Displaying the first 5 predictions\n", "predictions[:5]" ] }, { "cell_type": "markdown", - "id": "ccbc0bb6", + "id": "80e2b142", "metadata": {}, "source": [ "---\n", @@ -502,17 +234,17 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "d784e05e", + "execution_count": null, + "id": "c208069a", "metadata": {}, "outputs": [], "source": [ - "# !python3 -m streamlit run streamlit_app.py" + "!python3 -m streamlit run streamlit_app.py" ] }, { "cell_type": "markdown", - "id": "569fc146", + "id": "c97c7f97", "metadata": {}, "source": [ "---\n", @@ -528,7 +260,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -542,7 +274,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/air_quality/5_function_calling.ipynb b/advanced_tutorials/air_quality/5_function_calling.ipynb deleted file mode 100644 index 1d7baee6..00000000 --- a/advanced_tutorials/air_quality/5_function_calling.ipynb +++ /dev/null @@ -1,895 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9b00e25c", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "031b277b", - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install -r requirements.txt --quiet" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "4f72caf8", - "metadata": {}, - "outputs": [], - "source": [ - "import joblib\n", - "\n", - "from functions.llm_chain import (\n", - " load_model, \n", - " get_llm_chain, \n", - " generate_response,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "73c91640", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "cbe50ef2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/5242\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "markdown", - "id": "c4732bcd", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Retrieval" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "489d68e6", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'air_quality_fv' feature view\n", - "feature_view = fs.get_feature_view(\n", - " name='air_quality_fv',\n", - " version=1,\n", - ")\n", - "\n", - "# Initialize batch scoring\n", - "feature_view.init_batch_scoring(1)" - ] - }, - { - "cell_type": "markdown", - "id": "b1097149", - "metadata": {}, - "source": [ - "## ๐Ÿช Retrieve AirQuality Model from Model Registry" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "c9cf3026", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "Downloading model artifact (0 dirs, 6 files)... DONE\r" - ] - } - ], - "source": [ - "# Retrieve the model registry\n", - "mr = project.get_model_registry()\n", - "\n", - "# Retrieve the 'air_quality_xgboost_model' from the model registry\n", - "retrieved_model = mr.get_model(\n", - " name=\"air_quality_xgboost_model\",\n", - " version=1,\n", - ")\n", - "\n", - "# Download the saved model artifacts to a local directory\n", - "saved_model_dir = retrieved_model.download()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "d5a2b8a0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
XGBRegressor(base_score=None, booster=None, callbacks=None,\n",
-       "             colsample_bylevel=None, colsample_bynode=None,\n",
-       "             colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
-       "             enable_categorical=False, eval_metric=None, feature_types=None,\n",
-       "             gamma=None, grow_policy=None, importance_type=None,\n",
-       "             interaction_constraints=None, learning_rate=None, max_bin=None,\n",
-       "             max_cat_threshold=None, max_cat_to_onehot=None,\n",
-       "             max_delta_step=None, max_depth=None, max_leaves=None,\n",
-       "             min_child_weight=None, missing=nan, monotone_constraints=None,\n",
-       "             multi_strategy=None, n_estimators=None, n_jobs=None,\n",
-       "             num_parallel_tree=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "XGBRegressor(base_score=None, booster=None, callbacks=None,\n", - " colsample_bylevel=None, colsample_bynode=None,\n", - " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", - " enable_categorical=False, eval_metric=None, feature_types=None,\n", - " gamma=None, grow_policy=None, importance_type=None,\n", - " interaction_constraints=None, learning_rate=None, max_bin=None,\n", - " max_cat_threshold=None, max_cat_to_onehot=None,\n", - " max_delta_step=None, max_depth=None, max_leaves=None,\n", - " min_child_weight=None, missing=nan, monotone_constraints=None,\n", - " multi_strategy=None, n_estimators=None, n_jobs=None,\n", - " num_parallel_tree=None, random_state=None, ...)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Load the XGBoost regressor model and label encoder from the saved model directory\n", - "model_air_quality = joblib.load(saved_model_dir + \"/xgboost_regressor.pkl\")\n", - "encoder = joblib.load(saved_model_dir + \"/label_encoder.pkl\")\n", - "\n", - "# Display the retrieved XGBoost regressor model\n", - "model_air_quality" - ] - }, - { - "cell_type": "markdown", - "id": "027de50a", - "metadata": {}, - "source": [ - "## โฌ‡๏ธ LLM Loading" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9ab3103e", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", - "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n", - "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-05-14 20:00:29,253 INFO: We will use 90% of the memory on device 0 for storing the model, and 10% for the buffer to avoid OOM. You can set `max_memory` in to a higher value to use more memory (at your own risk).\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "c7af2ad1ff06428db48b5d09d9a75705", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Loading checkpoint shards: 0%| | 0/2 [00:00โ›“๏ธ LangChain" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "b8cfd2b4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DeprecationWarning: `np.bool8` is a deprecated alias for `np.bool_`. (Deprecated NumPy 1.24)\n" - ] - } - ], - "source": [ - "# Create and configure a language model chain.\n", - "llm_chain = get_llm_chain(\n", - " tokenizer,\n", - " model_llm,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "d10b1460", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Model Inference\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "15739772", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– \n", - "===============\n", - "I am an expert in air quality analysis.\n" - ] - } - ], - "source": [ - "QUESTION = \"Who are you?\"\n", - "\n", - "response = generate_response(\n", - " QUESTION,\n", - " feature_view,\n", - " model_air_quality,\n", - " encoder,\n", - " model_llm,\n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "ad9b2229", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (8.25s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for New York:\n", - "Date: 2024-01-10; Air Quality: 7.2\n", - "Date: 2024-01-11; Air Quality: 5.9\n", - "Date: 2024-01-12; Air Quality: 10.8\n", - "Date: 2024-01-13; Air Quality: 5.9\n", - "Date: 2024-01-14; Air Quality: 5.1\n", - "===============\n", - "The air quality in New York from January 10th to January 14th was generally moderate. The measurements show that the air quality fluctuated during this period, with a high of 10.8 on January 12th and lows of 5.1 and 5.9 on different days. Overall, it's a good time to be outside and enjoy the fresh air, but you may want to avoid strenuous outdoor activities on the 12th.\n" - ] - } - ], - "source": [ - "QUESTION1 = \"What was the air quality from 2024-01-10 till 2024-01-14 in New York?\"\n", - "\n", - "response1 = generate_response(\n", - " QUESTION1, \n", - " feature_view, \n", - " model_air_quality, \n", - " encoder,\n", - " model_llm, \n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response1)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "693b98bf", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (8.58s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for New York:\n", - "Date: 2024-01-10; Air Quality: 7.2\n", - "Date: 2024-01-11; Air Quality: 5.9\n", - "Date: 2024-01-12; Air Quality: 10.8\n", - "Date: 2024-01-13; Air Quality: 5.9\n", - "Date: 2024-01-14; Air Quality: 5.1\n", - "===============\n", - "The maximum air quality during that period in New York was on January 12th with an air quality of 10.8. This level is considered to be unhealthy for sensitive groups, and it is advisable to limit outdoor activities.\n" - ] - } - ], - "source": [ - "QUESTION11 = \"When and what was the maximum air quality from 2024-01-10 till 2024-01-14 in New York?\"\n", - "\n", - "response11 = generate_response(\n", - " QUESTION11, \n", - " feature_view, \n", - " model_air_quality,\n", - " encoder,\n", - " model_llm,\n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response11)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "a55195a0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.79s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for New York:\n", - "Date: 2024-01-10; Air Quality: 7.2\n", - "Date: 2024-01-11; Air Quality: 5.9\n", - "Date: 2024-01-12; Air Quality: 10.8\n", - "Date: 2024-01-13; Air Quality: 5.9\n", - "Date: 2024-01-14; Air Quality: 5.1\n", - "===============\n", - "The minimum air quality during that period in New York was on January 14th, with an air quality of 5.1. This indicates that the air quality on that day was quite good, and it would be safe for you to go for a walk or engage in outdoor activities.\n" - ] - } - ], - "source": [ - "QUESTION12 = \"When and what was the minimum air quality from 2024-01-10 till 2024-01-14 in New York?\"\n", - "\n", - "response12 = generate_response(\n", - " QUESTION12, \n", - " feature_view, \n", - " model_air_quality, \n", - " encoder,\n", - " model_llm, \n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response12)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "7be0351d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.90s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for London:\n", - "Date: 2024-05-13; Air Quality: 10.5\n", - "===============\n", - "Yesterday, the air quality in London was safe for most people. However, it might have been slightly uncomfortable for those with respiratory issues.\n" - ] - } - ], - "source": [ - "QUESTION2 = \"What was the air quality yesterday in London?\"\n", - "\n", - "response2 = generate_response(\n", - " QUESTION2,\n", - " feature_view,\n", - " model_air_quality,\n", - " encoder,\n", - " model_llm,\n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response2)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "30c6aca3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (8.33s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for London:\n", - "Date: 2024-05-07; Air Quality: 14.2\n", - "Date: 2024-05-08; Air Quality: 15.1\n", - "Date: 2024-05-09; Air Quality: 23.4\n", - "Date: 2024-05-10; Air Quality: 26.2\n", - "Date: 2024-05-11; Air Quality: 23.1\n", - "Date: 2024-05-12; Air Quality: 16.5\n", - "Date: 2024-05-13; Air Quality: 10.5\n", - "Date: 2024-05-14; Air Quality: 5.9\n", - "===============\n", - "Last week in London, the air quality was generally moderate to good. The readings for the days you provided show that the air quality was improving over the week, with levels ranging from 5.9 on May 14th to 14.2 on May 7th. Overall, the air quality was safe for most activities, but it would be advisable to check for any local advisories before engaging in outdoor activities.\n" - ] - } - ], - "source": [ - "QUESTION = \"What was the air quality like last week in London?\"\n", - "\n", - "response = generate_response(\n", - " QUESTION,\n", - " feature_view, \n", - " model_air_quality,\n", - " encoder,\n", - " model_llm,\n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "3ac41382", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.92s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for London:\n", - "Date: 2024-05-14; Air Quality: 5.9\n", - "Date: 2024-05-15; Air Quality: 10.88\n", - "Date: 2024-05-16; Air Quality: 11.99\n", - "Date: 2024-05-17; Air Quality: 11.6\n", - "Date: 2024-05-18; Air Quality: 11.56\n", - "Date: 2024-05-19; Air Quality: 11.52\n", - "Date: 2024-05-20; Air Quality: 11.52\n", - "===============\n", - "The air quality in London on 2024-05-20 is expected to be at a moderate level, with an Air Quality index of 11.52. This is within the safe range, but it might not be the best day for outdoor activities, especially if you have respiratory issues. It would be advisable to keep an eye on the air quality and possibly choose a different day for more strenuous activities.\n" - ] - } - ], - "source": [ - "QUESTION3 = \"What will the air quality be like in London in 2024-05-20?\"\n", - "\n", - "response3 = generate_response(\n", - " QUESTION3, \n", - " feature_view, \n", - " model_air_quality,\n", - " encoder,\n", - " model_llm, \n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response3)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "1c039b2e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.62s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for Chicago:\n", - "Date: 2024-05-14; Air Quality: 15.0\n", - "Date: 2024-05-15; Air Quality: 8.76\n", - "===============\n", - "Tomorrow, the air quality in Chicago is expected to be significantly better than today. The air quality measurement for tomorrow, based on our data, is 8.76. This level indicates that the air quality is considered good, and it is safe for outdoor activities such as walking or cycling.\n" - ] - } - ], - "source": [ - "QUESTION4 = \"What will the air quality be like in Chicago tomorrow?\"\n", - "\n", - "response4 = generate_response(\n", - " QUESTION4, \n", - " feature_view, \n", - " model_air_quality, \n", - " encoder,\n", - " model_llm, \n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response4)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "c5dc44bb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.82s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for London:\n", - "Date: 2024-05-14; Air Quality: 5.9\n", - "Date: 2024-05-15; Air Quality: 10.88\n", - "Date: 2024-05-16; Air Quality: 11.99\n", - "Date: 2024-05-17; Air Quality: 11.6\n", - "Date: 2024-05-18; Air Quality: 11.56\n", - "Date: 2024-05-19; Air Quality: 11.52\n", - "===============\n", - "Based on the air quality measurements for London, next Sunday, 2024-05-19, the air quality is expected to be at 11.52. This level falls within the moderate range, which means it is safe for most people to go outside, but those with respiratory issues may want to limit their exposure. It is advisable to check for any local alerts or updates before planning any outdoor activities.\n" - ] - } - ], - "source": [ - "QUESTION5 = \"What will the air quality be like in London next Sunday?\"\n", - "\n", - "response5 = generate_response(\n", - " QUESTION5, \n", - " feature_view, \n", - " model_air_quality, \n", - " encoder,\n", - " model_llm, \n", - " tokenizer, \n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response5)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "aa28c252", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (7.65s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for London:\n", - "Date: 2024-05-14; Air Quality: 5.9\n", - "Date: 2024-05-15; Air Quality: 10.88\n", - "Date: 2024-05-16; Air Quality: 11.99\n", - "Date: 2024-05-17; Air Quality: 11.6\n", - "Date: 2024-05-18; Air Quality: 11.56\n", - "===============\n", - "The air quality on May 18 in London is expected to be slightly unhealthy for sensitive groups, with a reading of 11.56. While it may not be ideal for everyone, those with respiratory issues should take extra precautions. It is still generally safe for most people to go outside, but you may want to limit prolonged exposure and consider using a mask.\n" - ] - } - ], - "source": [ - "QUESTION7 = \"What will the air quality be like on May 18 in London?\"\n", - "\n", - "response7 = generate_response(\n", - " QUESTION7,\n", - " feature_view,\n", - " model_air_quality,\n", - " encoder,\n", - " model_llm,\n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response7)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "f65aae43", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– \n", - "===============\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "UserWarning: You seem to be using the pipelines sequentially on GPU. In order to maximize efficiency please use a dataset\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sure, I'd be happy to explain the different PM2.5 air quality levels. PM2.5 refers to particulate matter with a diameter of 2.5 micrometers or less. It's a measure of the concentration of these tiny particles in the air.\n", - "\n", - "Here are the general air quality categories based on PM2.5 levels:\n", - "\n", - "1. Good (0-12 ยตg/mยณ): At this level, the air quality is considered to be safe and suitable for all populations, including those who are sensitive to air pollution.\n", - "\n", - "2. Moderate (12-35 ยตg/mยณ): The air quality is generally safe, but people who are sensitive to air pollution may experience mild discomfort. It's usually safe for most activities, including outdoor exercise.\n", - "\n", - "3. Unhealthy for Sensitive Groups (35-55 ยตg/mยณ): People with lung or heart conditions, children, and the elderly may experience health effects. It's generally safe for most people, but sensitive groups should avoid prolonged outdoor exertion.\n", - "\n", - "4. Unhealthy (55-150 ยตg/mยณ): Everyone may experience health effects, including respiratory symptoms, eye irritation, and aggravation of heart and lung diseases. It's advisable to limit outdoor activities, especially for children and people with pre-existing health conditions.\n", - "\n", - "5. Very Unhealthy (150-250 ยตg/mยณ): This level poses a significant health risk for everyone, with symptoms like respiratory problems, heart attacks, and premature death possible. It's crucial to avoid all outdoor activities, especially for sensitive groups.\n", - "\n", - "6. Hazardous (>250 ยตg/mยณ): This is an emergency situation where the air quality is extremely dangerous. It can cause serious health effects, including serious respiratory problems, heart attacks, and even death. Everyone should avoid all outdoor activities and stay indoors with air filtration systems in place.\n", - "\n", - "Please remember that these are general guidelines, and local air quality standards may vary. It's always best to consult local air quality reports for the most accurate information.\n" - ] - } - ], - "source": [ - "QUESTION = \"Can you please explain different PM2_5 air quality levels?\"\n", - "\n", - "response = generate_response(\n", - " QUESTION, \n", - " feature_view, \n", - " model_air_quality, \n", - " encoder,\n", - " model_llm, \n", - " tokenizer,\n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response)" - ] - }, - { - "cell_type": "markdown", - "id": "41f8615a", - "metadata": {}, - "source": [ - "---\n", - "\n", - "## ๐Ÿงฌ Inference with OpenAI\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "5538f395", - "metadata": {}, - "outputs": [], - "source": [ - "from openai import OpenAI\n", - "import os\n", - "import getpass\n", - "\n", - "from functions.llm_chain import generate_response_openai" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "5618e195", - "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "๐Ÿ”‘ Enter your OpenAI API key: ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท\n" - ] - } - ], - "source": [ - "os.environ[\"OPENAI_API_KEY\"] = os.getenv(\"OPENAI_API_KEY\") or getpass.getpass('๐Ÿ”‘ Enter your OpenAI API key: ')\n", - "\n", - "client = OpenAI(\n", - " api_key=os.environ[\"OPENAI_API_KEY\"],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "62ae66ea", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-05-14 20:28:16,300 INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", - "Finished: Reading data from Hopsworks, using ArrowFlight (8.38s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for London:\n", - "Date: 2024-05-06; Air Quality: 16.4\n", - "Date: 2024-05-07; Air Quality: 14.2\n", - "Date: 2024-05-08; Air Quality: 15.1\n", - "Date: 2024-05-09; Air Quality: 23.4\n", - "Date: 2024-05-10; Air Quality: 26.2\n", - "Date: 2024-05-11; Air Quality: 23.1\n", - "Date: 2024-05-12; Air Quality: 16.5\n", - "Date: 2024-05-13; Air Quality: 10.5\n", - "2024-05-14 20:28:40,843 INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", - "Last week in London, the air quality varied, starting at a good level of 16.4 on the 6th of May, indicating it was quite safe for outdoor activities. It slightly improved further on the 7th with a level of 14.2, and remained fairly stable and good on the 8th at 15.1, suggesting that conditions were conducive for spending time outside. However, there was a noticeable increase in pollution levels starting from the 9th of May, peaking on the 10th with an air quality level of 26.2, which indicated a decline in air quality and might have made outdoor activities less advisable for sensitive groups. The air quality then slightly improved to 23.1 on the 11th, but still remained at levels where people with respiratory conditions should be cautious. The week ended with a return to a good air quality level of 16.5 on the 12th, making it safer again for outdoor activities. By the 13th, the air quality significantly improved to an excellent level of 10.5, suggesting very clean air and optimal conditions for all activities outdoors.\n" - ] - } - ], - "source": [ - "QUESTION = \"What was the air quality like last week in London?\"\n", - "\n", - "response = generate_response_openai( \n", - " QUESTION,\n", - " feature_view,\n", - " model_air_quality,\n", - " encoder,\n", - " client,\n", - " verbose=True,\n", - ")\n", - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "5978d4e5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-05-14 20:28:42,202 INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", - "Finished: Reading data from Hopsworks, using ArrowFlight (7.96s) \n", - "๐Ÿ—“๏ธ Today's date: Tuesday, 2024-05-14\n", - "๐Ÿ“– Air Quality Measurements for Chicago:\n", - "Date: 2024-05-14; Air Quality: 15.0\n", - "Date: 2024-05-15; Air Quality: 8.76\n", - "2024-05-14 20:28:57,762 INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", - "The air quality in Chicago tomorrow will be excellent, with a reading of 8.76. It will be a wonderful day to enjoy outdoor activities, such as going for a walk or a bike ride, as the air will be very clean and healthy to breathe.\n" - ] - } - ], - "source": [ - "QUESTION4 = \"What will the air quality be like in Chicago tomorrow?\"\n", - "\n", - "response4 = generate_response_openai(\n", - " QUESTION4,\n", - " feature_view,\n", - " model_air_quality,\n", - " encoder,\n", - " client,\n", - " verbose=True,\n", - ")\n", - "\n", - "print(response4)" - ] - }, - { - "cell_type": "markdown", - "id": "76fd05ea", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/air_quality/app_gradio.py b/advanced_tutorials/air_quality/app_gradio.py deleted file mode 100644 index 8133662a..00000000 --- a/advanced_tutorials/air_quality/app_gradio.py +++ /dev/null @@ -1,138 +0,0 @@ -import gradio as gr -from transformers import pipeline -import numpy as np -import hopsworks -import joblib -from openai import OpenAI -from functions.llm_chain import load_model, get_llm_chain, generate_response, generate_response_openai - -# Initialize the ASR pipeline -transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base.en") - -def connect_to_hopsworks(): - # Initialize Hopsworks feature store connection - project = hopsworks.login() - fs = project.get_feature_store() - - # Retrieve the model registry - mr = project.get_model_registry() - - # Retrieve the 'air_quality_fv' feature view - feature_view = fs.get_feature_view( - name="air_quality_fv", - version=1, - ) - - # Initialize batch scoring - feature_view.init_batch_scoring(1) - - # Retrieve the 'air_quality_xgboost_model' from the model registry - retrieved_model = mr.get_model( - name="air_quality_xgboost_model", - version=1, - ) - - # Download the saved model artifacts to a local directory - saved_model_dir = retrieved_model.download() - - # Load the XGBoost regressor model and label encoder from the saved model directory - model_air_quality = joblib.load(saved_model_dir + "/xgboost_regressor.pkl") - encoder = joblib.load(saved_model_dir + "/label_encoder.pkl") - - return feature_view, model_air_quality, encoder - - -def retrieve_llm_chain(): - - # Load the LLM and its corresponding tokenizer. - model_llm, tokenizer = load_model() - - # Create and configure a language model chain. - llm_chain = get_llm_chain( - model_llm, - tokenizer, - ) - - return model_llm, tokenizer, llm_chain - - -# Retrieve the feature view, air quality model and encoder for the city_name column -feature_view, model_air_quality, encoder = connect_to_hopsworks() - -def transcribe(audio): - sr, y = audio - y = y.astype(np.float32) - if y.ndim > 1 and y.shape[1] > 1: - y = np.mean(y, axis=1) - y /= np.max(np.abs(y)) - return transcriber({"sampling_rate": sr, "raw": y})["text"] - - -# Generate query response - Adjust this function to handle both LLM and OpenAI API based on a parameter -def generate_query_response(user_query, method, openai_api_key=None): - if method == 'Hermes LLM': - # Load the LLM and its corresponding tokenizer and configure a language model chain - model_llm, tokenizer, llm_chain = retrieve_llm_chain() - - response = generate_response( - user_query, - feature_view, - model_air_quality, - encoder, - model_llm, - tokenizer, - llm_chain, - verbose=False, - ) - return response - - elif method == 'OpenAI API' and openai_api_key: - client = OpenAI( - api_key=openai_api_key - ) - - response = generate_response_openai( - user_query, - feature_view, - model_air_quality, - encoder, - client, - verbose=False, - ) - return response - - else: - return "Invalid method or missing API key." - - -def handle_input(text_input=None, audio_input=None, method='Hermes LLM', openai_api_key=""): - if audio_input is not None: - user_query = transcribe(audio_input) - else: - user_query = text_input - - # Check if OpenAI API key is required but not provided - if method == 'OpenAI API' and not openai_api_key.strip(): - return "OpenAI API key is required for this method." - - if user_query: - return generate_query_response(user_query, method, openai_api_key) - else: - return "Please provide input either via text or voice." - - -# Setting up the Gradio Interface -iface = gr.Interface( - fn=handle_input, - inputs=[ - gr.Textbox(placeholder="Type here or use voice input..."), - gr.Audio(), - gr.Radio(["Hermes LLM", "OpenAI API"], label="Choose the response generation method"), - gr.Textbox(label="Enter your OpenAI API key (only if you selected OpenAI API):", type="password") # Removed `optional=True` - ], - outputs="text", - title="๐ŸŒค๏ธ AirQuality AI Assistant ๐Ÿ’ฌ", - description="Ask your questions about air quality or use your voice to interact. Select the response generation method and provide an OpenAI API key if necessary." -) - -iface.launch(share=True) diff --git a/advanced_tutorials/air_quality/app_streamlit.py b/advanced_tutorials/air_quality/app_streamlit.py deleted file mode 100644 index 00de1d74..00000000 --- a/advanced_tutorials/air_quality/app_streamlit.py +++ /dev/null @@ -1,147 +0,0 @@ -import streamlit as st -import hopsworks -import joblib -from openai import OpenAI -from functions.llm_chain import ( - load_model, - get_llm_chain, - generate_response, - generate_response_openai, -) -import warnings -warnings.filterwarnings('ignore') - -st.title("๐ŸŒค๏ธ AirQuality AI assistant ๐Ÿ’ฌ") - -@st.cache_resource() -def connect_to_hopsworks(): - # Initialize Hopsworks feature store connection - project = hopsworks.login() - fs = project.get_feature_store() - - # Retrieve the model registry - mr = project.get_model_registry() - - # Retrieve the 'air_quality_fv' feature view - feature_view = fs.get_feature_view( - name="air_quality_fv", - version=1, - ) - - # Initialize batch scoring - feature_view.init_batch_scoring(1) - - # Retrieve the 'air_quality_xgboost_model' from the model registry - retrieved_model = mr.get_model( - name="air_quality_xgboost_model", - version=1, - ) - - # Download the saved model artifacts to a local directory - saved_model_dir = retrieved_model.download() - - # Load the XGBoost regressor model and label encoder from the saved model directory - model_air_quality = joblib.load(saved_model_dir + "/xgboost_regressor.pkl") - encoder = joblib.load(saved_model_dir + "/label_encoder.pkl") - - return feature_view, model_air_quality, encoder - - -@st.cache_resource() -def retrieve_llm_chain(): - - # Load the LLM and its corresponding tokenizer. - model_llm, tokenizer = load_model() - - # Create and configure a language model chain. - llm_chain = get_llm_chain( - model_llm, - tokenizer, - ) - - return model_llm, tokenizer, llm_chain - - -# Retrieve the feature view, air quality model and encoder for the city_name column -feature_view, model_air_quality, encoder = connect_to_hopsworks() - -# Initialize or clear chat messages based on response source change -if "response_source" not in st.session_state or "messages" not in st.session_state: - st.session_state.messages = [] - st.session_state.response_source = "" - -# User choice for model selection in the sidebar with OpenAI API as the default -new_response_source = st.sidebar.radio( - "Choose the response generation method:", - ('Hermes LLM', 'OpenAI API'), - index=1 # Sets "OpenAI API" as the default selection -) - -# If the user switches the response generation method, clear the chat -if new_response_source != st.session_state.response_source: - st.session_state.messages = [] # Clear previous chat messages - st.session_state.response_source = new_response_source # Update response source in session state - - # Display a message indicating chat was cleared (optional) - st.experimental_rerun() # Rerun the app to reflect changes immediately - - -if new_response_source == 'OpenAI API': - openai_api_key = st.sidebar.text_input("Enter your OpenAI API key:", type="password") - if openai_api_key: - client = OpenAI( - api_key=openai_api_key - ) - st.sidebar.success("API key saved successfully โœ…") - -elif new_response_source == 'Hermes LLM': - # Conditionally load the LLM, tokenizer, and llm_chain if Local Model is selected - model_llm, tokenizer, llm_chain = retrieve_llm_chain() - - -# Display chat messages from history on app rerun -for message in st.session_state.messages: - with st.chat_message(message["role"]): - st.markdown(message["content"]) - -# React to user input -if user_query := st.chat_input("How can I help you?"): - # Display user message in chat message container - st.chat_message("user").markdown(user_query) - # Add user message to chat history - st.session_state.messages.append({"role": "user", "content": user_query}) - - st.write('โš™๏ธ Generating Response...') - - if new_response_source == 'Hermes LLM': - # Generate a response to the user query - response = generate_response( - user_query, - feature_view, - model_air_quality, - encoder, - model_llm, - tokenizer, - llm_chain, - verbose=False, - ) - - elif new_response_source == 'OpenAI API' and openai_api_key: - response = generate_response_openai( - user_query, - feature_view, - model_air_quality, - encoder, - client, - verbose=False, - ) - - else: - response = "Please select a response generation method and provide necessary details." - - # Display assistant response in chat message container - with st.chat_message("assistant"): - st.markdown(response) - # Add assistant response to chat history - st.session_state.messages.append({"role": "assistant", "content": response}) - \ No newline at end of file diff --git a/advanced_tutorials/air_quality/feature_pipeline.py b/advanced_tutorials/air_quality/feature_pipeline.py new file mode 100644 index 00000000..0cee9c43 --- /dev/null +++ b/advanced_tutorials/air_quality/feature_pipeline.py @@ -0,0 +1,158 @@ +import datetime +import time +import requests +import pandas as pd +import json +import hopsworks + +from functions import * + +import warnings +warnings.filterwarnings("ignore") + +from dotenv import load_dotenv +load_dotenv() + +import os + +# Get the value of the PARAMETER environment variable +continent = os.environ.get('CONTINENT') + + +file_path = os.path.join(os.getcwd(), 'advanced_tutorials', 'air_quality', 'target_cities.json') +with open(file_path) as json_file: + target_cities = json.load(json_file) + + +def get_batch_data_from_fs(td_version, date_threshold): + print(f"Retrieving the Batch data since {date_threshold}") + feature_view.init_batch_scoring(training_dataset_version=td_version) + + batch_data = feature_view.get_batch_data(start_time=date_threshold) + return batch_data + + +def parse_aq_data(last_dates_dict, today): + start_of_cell = time.time() + df_aq_raw = pd.DataFrame() + + print("Parsing started...") + # for continent in target_cities: + for city_name, coords in target_cities[continent].items(): + df_ = get_aqi_data_from_open_meteo(city_name=city_name, + coordinates=coords, + start_date=last_dates_dict[city_name], + end_date=str(today)) + df_aq_raw = pd.concat([df_aq_raw, df_]).reset_index(drop=True) + end_of_cell = time.time() + print("-" * 64) + print(f"Parsed new PM2.5 data for ALL locations up to {str(today)}.") + print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") + return df_aq_raw + + +def parse_weather(last_dates_dict, today): + df_weather_update = pd.DataFrame() + start_of_cell = time.time() + + print("Parsing started...") + # for continent in target_cities: + for city_name, coords in target_cities[continent].items(): + df_ = get_weather_data_from_open_meteo(city_name=city_name, + coordinates=coords, + start_date=last_dates_dict[city_name], + end_date=str(today), + forecast=True) + df_weather_update = pd.concat([df_weather_update, df_]).reset_index(drop=True) + + end_of_cell = time.time() + print(f"Parsed new weather data for ALL cities up to {str(today)}.") + print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") + return df_weather_update + + + +if __name__=="__main__": + project = hopsworks.login() + fs = project.get_feature_store() + print("โœ… Logged in successfully!") + + feature_view = fs.get_feature_view( + name='air_quality_fv', + version=1 + ) + + # I am going to load data for of last 60 days (for feature engineering) + today = datetime.date.today() + date_threshold = today - datetime.timedelta(days=60) + + print("Getting the batch data...") + batch_data = get_batch_data_from_fs(td_version=1, + date_threshold=date_threshold) + + print("Retreived batch data.") + + + last_dates_dict = batch_data[["date", "city_name"]].groupby("city_name").max() + last_dates_dict.date = last_dates_dict.date.astype(str) + # here is a dictionary with city names as keys and last updated date as values + last_dates_dict = last_dates_dict.to_dict()["date"] + + df_aq_raw = parse_aq_data(last_dates_dict, today) + + # we need the previous data to calculate aggregation functions + df_aq_update = pd.concat([ + batch_data[df_aq_raw.columns], + df_aq_raw + ]).reset_index(drop=True) + df_aq_update = df_aq_update.drop_duplicates(subset=['city_name', 'date']) + + print(df_aq_update.tail(7)) + + print('\n๐Ÿ›  Feature Engineering the PM2.5') + + ### + df_aq_update['date'] = pd.to_datetime(df_aq_update['date']) + df_aq_update = feature_engineer_aq(df_aq_update) + df_aq_update = df_aq_update.dropna() + + print(df_aq_update.groupby("city_name").max().tail(7)) + print("โœ… Success!") + ### + + print(3 * "-") + print('\n๐ŸŒค๐Ÿ“† Parsing Weather data') + + df_weather_update = parse_weather(last_dates_dict, today) + print(df_weather_update.groupby("city_name").max().tail(7)) + print("โœ… Successfully parsed!") + + df_aq_update.date = df_aq_update.date.astype(str) + df_weather_update.date = df_weather_update.date.astype(str) + + print("Connecting to feature groups...") + air_quality_fg = fs.get_or_create_feature_group( + name = 'air_quality', + version = 1 + ) + weather_fg = fs.get_or_create_feature_group( + name = 'weather', + version = 1 + ) + + df_aq_update.date = pd.to_datetime(df_aq_update.date) + df_weather_update.date = pd.to_datetime(df_weather_update.date) + + df_aq_update["unix_time"] = df_aq_update["date"].apply(convert_date_to_unix) + df_weather_update["unix_time"] = df_weather_update["date"].apply(convert_date_to_unix) + + df_aq_update.date = df_aq_update.date.astype(str) + df_weather_update.date = df_weather_update.date.astype(str) + + air_quality_fg.insert(df_aq_update) + print("Created job to insert parsed PM2.5 data into FS...") + print("Inserting into air_quality fg.") + + weather_fg.insert(df_weather_update) + print("Created job to insert parsed weather data into FS...") + print("Inserting into weather fg.") diff --git a/integrations/pyspark_streaming/synthetic_data/__init__.py b/advanced_tutorials/air_quality/features/__init__.py similarity index 100% rename from integrations/pyspark_streaming/synthetic_data/__init__.py rename to advanced_tutorials/air_quality/features/__init__.py diff --git a/advanced_tutorials/air_quality/features/air_quality.py b/advanced_tutorials/air_quality/features/air_quality.py index 4cd4fed0..40fc8d1e 100644 --- a/advanced_tutorials/air_quality/features/air_quality.py +++ b/advanced_tutorials/air_quality/features/air_quality.py @@ -18,6 +18,7 @@ def shift_pm_2_5(df: pd.DataFrame, days: int = 5) -> pd.DataFrame: """ for shift_value in range(1, days + 1): df[f'pm_2_5_previous_{shift_value}_day'] = df.groupby('city_name')['pm2_5'].shift(shift_value) + df = df.dropna() return df @@ -226,9 +227,8 @@ def feature_engineer_aq(df: pd.DataFrame) -> pd.DataFrame: for i in [7, 14, 28]: for func in [moving_std, exponential_moving_average, exponential_moving_std]: df_res = func(df_res, i) - - - df_res = df_res.sort_values(by=["date", "pm2_5"]) + + df_res = df_res.sort_values(by=["date", "pm2_5"]).dropna() df_res = df_res.reset_index(drop=True) df_res['year'] = year(df_res['date']) diff --git a/advanced_tutorials/air_quality/functions.py b/advanced_tutorials/air_quality/functions.py new file mode 100644 index 00000000..e0d46205 --- /dev/null +++ b/advanced_tutorials/air_quality/functions.py @@ -0,0 +1,392 @@ +import os +import datetime +import time +import requests +import pandas as pd +import json + +from geopy.geocoders import Nominatim + + +def convert_date_to_unix(x): + """ + Convert datetime to unix time in milliseconds. + """ + dt_obj = datetime.datetime.strptime(str(x), '%Y-%m-%d %H:%M:%S') + dt_obj = int(dt_obj.timestamp() * 1000) + return dt_obj + + +def get_city_coordinates(city_name: str): + """ + Takes city name and returns its latitude and longitude (rounded to 2 digits after dot). + """ + # Initialize Nominatim API (for getting lat and long of the city) + geolocator = Nominatim(user_agent="MyApp") + city = geolocator.geocode(city_name) + + latitude = round(city.latitude, 2) + longitude = round(city.longitude, 2) + + return latitude, longitude + + +##################################### EEA +def convert_to_daily(df, pollutant: str): + """ + Returns DataFrame where pollutant column is resampled to days and rounded. + """ + res_df = df.copy() + # convert dates in 'time' column + res_df["date"] = pd.to_datetime(res_df["date"]) + + # I want data daily, not hourly (mean per each day = 1 datarow per 1 day) + res_df = res_df.set_index('date') + res_df = res_df[pollutant].resample('1d').mean().reset_index() + res_df[pollutant] = res_df[pollutant].fillna(res_df[pollutant].median()) + res_df[pollutant] = res_df[pollutant].apply(lambda x: round(x, 0)) + + return res_df + + +def find_fullest_csv(csv_links: list, year: str): + candidates = [link for link in csv_links if str(year) in link] + biggest_df = pd.read_csv(candidates[0]) + for link in candidates[1:]: + _df = pd.read_csv(link) + if len(biggest_df) < len(_df): + biggest_df = _df + return biggest_df + + +def get_air_quality_from_eea( + city_name: str, + pollutant: str, + start_year: str, + end_year: str, + ): + """ + Takes city name, daterange and returns pandas DataFrame with daily air quality data. + It parses data by 1-year batches, so please specify years, not dates. (example: "2014", "2022"...) + + EEA means European Environmental Agency. So it has data for Europe Union countries ONLY. + """ + start_of_cell = time.time() + + params = { + 'CountryCode': '', + 'CityName': city_name, + 'Pollutant': pollutant.upper(), + 'Year_from': start_year, + 'Year_to': end_year, + 'Station': '', + 'Source': 'All', + 'Samplingpoint': '', + 'Output': 'TEXT', + 'UpdateDate': '', + 'TimeCoverage': 'Year' + } + + # observations endpoint + base_url = "https://fme.discomap.eea.europa.eu/fmedatastreaming/AirQualityDownload/AQData_Extract.fmw?" + try: + response = requests.get(base_url, params=params) + except ConnectionError: + response = requests.get(base_url, params=params) + + response.encoding = response.apparent_encoding + csv_links = response.text.split("\r\n") + + res_df = pd.DataFrame() + target_year = int(start_year) + + for year in range(int(start_year), int(end_year) + 1): + try: + # find the fullest, the biggest csv file with observations for this particular year + _df = find_fullest_csv(csv_links, year) + # append it to res_df + res_df = pd.concat([res_df, _df]) + except IndexError: + print(f"!! Missing data for {year} for {city} city.") + pass + + pollutant = pollutant.lower() + if pollutant == "pm2.5": + pollutant = "pm2_5" + + res_df = res_df.rename(columns={ + 'DatetimeBegin': 'date', + 'Concentration': pollutant + }) + + # cut timezones info + res_df['date'] = res_df['date'].apply(lambda x: x[:-6]) + # convert dates in 'time' column + res_df['date'] = pd.to_datetime(res_df['date']) + + res_df = convert_to_daily(res_df, pollutant) + + res_df['city_name'] = city_name + res_df = res_df[['city_name', 'date', pollutant.lower()]] + + end_of_cell = time.time() + + print(f"Processed {pollutant.upper()} for {city_name} since {start_year} till {end_year}.") + print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") + + return res_df + + + +##################################### USEPA +city_code_dict = {} +pollutant_dict = { + 'CO': '42101', + 'SO2': '42401', + 'NO2': '42602', + 'O3': '44201', + 'PM10': '81102', + 'PM2.5': '88101' +} + +def get_city_code(city_name: str): + "Encodes city name to be used later for data parsing using USEPA." + if city_code_dict: + city_full = [i for i in city_code_dict.keys() if city_name in i][0] + return city_code_dict[city_full] + else: + params = { + "email": "test@aqs.api", + "key": "test" + } + response = requests.get("https://aqs.epa.gov/data/api/list/cbsas?", params) + response_json = response.json() + data = response_json["Data"] + for item in data: + city_code_dict[item['value_represented']] = item['code'] + + return get_city_code(city_name) + + +def get_air_quality_from_usepa( + city_name: str, + pollutant: str, + start_date: str, + end_date: str + ): + """ + Takes city name, daterange and returns pandas DataFrame with daily air quality data. + + USEPA means United States Environmental Protection Agency. So it has data for US ONLY. + """ + start_of_cell = time.time() + res_df = pd.DataFrame() + + for start_date_, end_date_ in make_date_intervals(start_date, end_date): + params = { + "email": "test@aqs.api", + "key": "test", + "param": pollutant_dict[pollutant.upper().replace("_", ".")], # encoded pollutant + "bdate": start_date_, + "edate": end_date_, + "cbsa": get_city_code(city_name) # Core-based statistical area + } + + # observations endpoint + base_url = "https://aqs.epa.gov/data/api/dailyData/byCBSA?" + + response = requests.get(base_url, params=params) + response_json = response.json() + + df_ = pd.DataFrame(response_json["Data"]) + + pollutant = pollutant.lower() + if pollutant == "pm2.5": + pollutant = "pm2_5" + df_ = df_.rename(columns={ + 'date_local': 'date', + 'arithmetic_mean': pollutant + }) + + # convert dates in 'date' column + df_['date'] = pd.to_datetime(df_['date']) + df_['city_name'] = city_name + df_ = df_[['city_name', 'date', pollutant]] + res_df = pd.concat([res_df, df_]) + + # there are duplicated rows (several records for the same day and station). get rid of it. + res_df = res_df.groupby(['date', 'city_name'], as_index=False)[pollutant].mean() + res_df[pollutant] = round(res_df[pollutant], 1) + + end_of_cell = time.time() + print(f"Processed {pollutant.upper()} for {city_name} since {start_date} till {end_date}.") + print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") + + return res_df + + +def make_date_intervals(start_date, end_date): + start_dt = datetime.datetime.strptime(start_date, '%Y-%m-%d') + end_dt = datetime.datetime.strptime(end_date, '%Y-%m-%d') + date_intervals = [] + for year in range(start_dt.year, end_dt.year + 1): + year_start = datetime.datetime(year, 1, 1) + year_end = datetime.datetime(year, 12, 31) + interval_start = max(start_dt, year_start) + interval_end = min(end_dt, year_end) + if interval_start < interval_end: + date_intervals.append((interval_start.strftime('%Y%m%d'), interval_end.strftime('%Y%m%d'))) + return date_intervals + +##################################### Weather Open Meteo +def get_weather_data_from_open_meteo( + city_name: str, + start_date: str, + end_date: str, + coordinates: list = None, + forecast: bool = False, + ): + """ + Takes [city name OR coordinates] and returns pandas DataFrame with weather data. + + Examples of arguments: + coordinates=(47.755, -122.2806), start_date="2023-01-01" + """ + start_of_cell = time.time() + + if coordinates: + latitude, longitude = coordinates + else: + latitude, longitude = get_city_coordinates(city_name=city_name) + + params = { + 'latitude': latitude, + 'longitude': longitude, + 'daily': ["temperature_2m_max", "temperature_2m_min", + "precipitation_sum", "rain_sum", "snowfall_sum", + "precipitation_hours", "windspeed_10m_max", + "windgusts_10m_max", "winddirection_10m_dominant"], + 'timezone': "Europe/London", + 'start_date': start_date, + 'end_date': end_date, + } + + if forecast: + # historical forecast endpoint + base_url = 'https://api.open-meteo.com/v1/forecast' + else: + # historical observations endpoint + base_url = 'https://archive-api.open-meteo.com/v1/archive' + + try: + response = requests.get(base_url, params=params) + time.sleep(2) + except ConnectionError: + response = requests.get(base_url, params=params) + + response_json = response.json() + + res_df = pd.DataFrame(response_json["daily"]) + res_df["city_name"] = city_name + + # rename columns + res_df = res_df.rename(columns={ + "time": "date", + "temperature_2m_max": "temperature_max", + "temperature_2m_min": "temperature_min", + "windspeed_10m_max": "wind_speed_max", + "winddirection_10m_dominant": "wind_direction_dominant", + "windgusts_10m_max": "wind_gusts_max" + }) + + # change columns order + res_df = res_df[ + ['city_name', 'date', 'temperature_max', 'temperature_min', + 'precipitation_sum', 'rain_sum', 'snowfall_sum', + 'precipitation_hours', 'wind_speed_max', + 'wind_gusts_max', 'wind_direction_dominant'] + ] + + # convert dates in 'date' column + res_df["date"] = pd.to_datetime(res_df["date"]) + end_of_cell = time.time() + print(f"Parsed weather for {city_name} since {start_date} till {end_date}.") + print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") + + return res_df + + +##################################### Air Quality data from Open Meteo +def get_aqi_data_from_open_meteo( + city_name: str, + start_date: str, + end_date: str, + coordinates: list = None, + pollutant: str = "pm2_5" + ): + """ + Takes [city name OR coordinates] and returns pandas DataFrame with AQI data. + + Examples of arguments: + ... + coordinates=(47.755, -122.2806), + start_date="2023-01-01", + pollutant="no2" + ... + """ + start_of_cell = time.time() + + if coordinates: + latitude, longitude = coordinates + else: + latitude, longitude = get_city_coordinates(city_name=city_name) + + pollutant = pollutant.lower() + if pollutant == "pm2.5": + pollutant = "pm2_5" + + # make it work with both "no2" and "nitrogen_dioxide" passed. + if pollutant == "no2": + pollutant = "nitrogen_dioxide" + + params = { + 'latitude': latitude, + 'longitude': longitude, + 'hourly': [pollutant], + 'start_date': start_date, + 'end_date': end_date, + 'timezone': "Europe/London" + } + + # base endpoint + base_url = "https://air-quality-api.open-meteo.com/v1/air-quality" + try: + response = requests.get(base_url, params=params) + except ConnectionError: + response = requests.get(base_url, params=params) + response_json = response.json() + res_df = pd.DataFrame(response_json["hourly"]) + + # convert dates + res_df["time"] = pd.to_datetime(res_df["time"]) + + # resample to days + res_df = res_df.groupby(res_df['time'].dt.date).mean(numeric_only=True).reset_index() + res_df[pollutant] = round(res_df[pollutant], 1) + + # rename columns + res_df = res_df.rename(columns={ + "time": "date" + }) + + res_df["city_name"] = city_name + + # change columns order + res_df = res_df[ + ['city_name', 'date', pollutant] + ] + end_of_cell = time.time() + print(f"Processed {pollutant.upper()} for {city_name} since {start_date} till {end_date}.") + print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") + + return res_df \ No newline at end of file diff --git a/advanced_tutorials/air_quality/functions/air_quality_data_retrieval.py b/advanced_tutorials/air_quality/functions/air_quality_data_retrieval.py deleted file mode 100644 index 8f9afd6c..00000000 --- a/advanced_tutorials/air_quality/functions/air_quality_data_retrieval.py +++ /dev/null @@ -1,164 +0,0 @@ -import pandas as pd -from typing import Any, Dict, List -import datetime -import pandas as pd - - -def transform_data(data, encoder): - """ - Transform the input data by encoding the 'city_name' column and dropping unnecessary columns. - - Args: - - data (DataFrame): Input data to be transformed. - - encoder (LabelEncoder): Label encoder object to encode 'city_name'. - - Returns: - - data_transformed (DataFrame): Transformed data with 'city_name_encoded' and dropped columns. - """ - - # Create a copy of the input data to avoid modifying the original data - data_transformed = data.copy() - - # Transform the 'city_name' column in the batch data using the retrieved label encoder - data_transformed['city_name_encoded'] = encoder.transform(data_transformed['city_name']) - - # Drop unnecessary columns from the batch data - data_transformed = data_transformed.drop(columns=['unix_time', 'pm2_5', 'city_name', 'date']) - - return data_transformed - - -def get_data_for_date(date: str, city_name: str, feature_view, model, encoder) -> pd.DataFrame: - """ - Retrieve data for a specific date and city from a feature view. - - Args: - date (str): The date in the format "%Y-%m-%d". - city_name (str): The name of the city to retrieve data for. - feature_view: The feature view object. - model: The machine learning model used for prediction. - encoder (LabelEncoder): Label encoder object to encode 'city_name'. - - Returns: - pd.DataFrame: A DataFrame containing data for the specified date and city. - """ - # Convert date string to datetime object - date_datetime = datetime.datetime.strptime(date, "%Y-%m-%d").date() - - # Retrieve batch data for the specified date range - batch_data = feature_view.get_batch_data( - start_time=date_datetime, - end_time=date_datetime + datetime.timedelta(days=1), - ) - - # Filter batch data for the specified city - batch_data_filtered = batch_data[batch_data['city_name'] == city_name] - - return batch_data_filtered[['date', 'pm2_5']].sort_values('date').reset_index(drop=True) - - -def get_data_in_date_range(date_start: str, date_end: str, city_name: str, feature_view, model, encoder) -> pd.DataFrame: - """ - Retrieve data for a specific date range and city from a feature view. - - Args: - date_start (str): The start date in the format "%Y-%m-%d". - date_end (str): The end date in the format "%Y-%m-%d". - city_name (str): The name of the city to retrieve data for. - feature_view: The feature view object. - model: The machine learning model used for prediction. - encoder (LabelEncoder): Label encoder object to encode 'city_name'. - - Returns: - pd.DataFrame: A DataFrame containing data for the specified date range and city. - """ - # Convert date strings to datetime objects - date_start_dt = datetime.datetime.strptime(date_start, "%Y-%m-%d").date() - date_end_dt = datetime.datetime.strptime(date_end, "%Y-%m-%d").date() - - # Retrieve batch data for the specified date range - batch_data = feature_view.get_batch_data( - start_time=date_start_dt, - end_time=date_end_dt + datetime.timedelta(days=1), - ) - - # Filter batch data for the specified city - batch_data_filtered = batch_data[batch_data['city_name'] == city_name] - - return batch_data_filtered[['date', 'pm2_5']].sort_values('date').reset_index(drop=True) - - -def get_future_data(date: str, city_name: str, feature_view, model, encoder) -> pd.DataFrame: - """ - Predicts future PM2.5 data for a specified date and city using a given feature view and model. - - Args: - date (str): The target future date in the format 'YYYY-MM-DD'. - city_name (str): The name of the city for which the prediction is made. - feature_view: The feature view used to retrieve batch data. - model: The machine learning model used for prediction. - encoder (LabelEncoder): Label encoder object to encode 'city_name'. - - Returns: - pd.DataFrame: A DataFrame containing predicted PM2.5 values for each day starting from the target date. - - """ - # Get today's date - today = datetime.date.today() - - # Convert the target date string to a datetime object - date_in_future = datetime.datetime.strptime(date, "%Y-%m-%d").date() - - # Calculate the difference in days between today and the target date - difference_in_days = (date_in_future - today).days - - # Retrieve batch data for the specified date range - batch_data = feature_view.get_batch_data( - start_time=today, - end_time=today + datetime.timedelta(days=1), - ) - - # Filter batch data for the specified city - batch_data_filtered = batch_data[batch_data['city_name'] == city_name] - - # Transform batch data - batch_data_transformed = transform_data(batch_data_filtered, encoder) - - # Initialize a DataFrame to store predicted PM2.5 values - try: - pm2_5_value = batch_data_filtered['pm2_5'].values[0] - except (IndexError, TypeError): - # If accessing pm2_5 values fails, return a message indicating the feature pipeline needs updating - return "Data is not available. Ask user to run the feature pipeline to update data." - else: - # Initialize a DataFrame to store predicted PM2.5 values - predicted_pm2_5_df = pd.DataFrame({ - 'date': [today.strftime("%Y-%m-%d")], - 'pm2_5': pm2_5_value, - }) - - # Iterate through each day starting from tomorrow up to the target date - for day_number in range(1, difference_in_days + 1): - - # Calculate the date for the current future day - date_future_day = (today + datetime.timedelta(days=day_number)).strftime("%Y-%m-%d") - - # Predict PM2.5 for the current day - predicted_pm2_5 = model.predict(batch_data_transformed) - - # Update previous day PM2.5 values in the batch data for the next prediction - batch_data_transformed['pm_2_5_previous_7_day'] = batch_data_transformed['pm_2_5_previous_6_day'] - batch_data_transformed['pm_2_5_previous_6_day'] = batch_data_transformed['pm_2_5_previous_5_day'] - batch_data_transformed['pm_2_5_previous_5_day'] = batch_data_transformed['pm_2_5_previous_4_day'] - batch_data_transformed['pm_2_5_previous_4_day'] = batch_data_transformed['pm_2_5_previous_3_day'] - batch_data_transformed['pm_2_5_previous_3_day'] = batch_data_transformed['pm_2_5_previous_2_day'] - batch_data_transformed['pm_2_5_previous_2_day'] = batch_data_transformed['pm_2_5_previous_1_day'] - batch_data_transformed['pm_2_5_previous_1_day'] = predicted_pm2_5 - - # Append the predicted PM2.5 value for the current day to the DataFrame - predicted_pm2_5_df = predicted_pm2_5_df._append({ - 'date': date_future_day, - 'pm2_5': predicted_pm2_5[0], - }, ignore_index=True) - - return predicted_pm2_5_df diff --git a/advanced_tutorials/air_quality/functions/common_functions.py b/advanced_tutorials/air_quality/functions/common_functions.py deleted file mode 100644 index 98767a09..00000000 --- a/advanced_tutorials/air_quality/functions/common_functions.py +++ /dev/null @@ -1,25 +0,0 @@ -import datetime -from geopy.geocoders import Nominatim - - -def convert_date_to_unix(x): - """ - Convert datetime to unix time in milliseconds. - """ - dt_obj = datetime.datetime.strptime(str(x), '%Y-%m-%d %H:%M:%S') - dt_obj = int(dt_obj.timestamp() * 1000) - return dt_obj - - -def get_city_coordinates(city_name: str): - """ - Takes city name and returns its latitude and longitude (rounded to 2 digits after dot). - """ - # Initialize Nominatim API (for getting lat and long of the city) - geolocator = Nominatim(user_agent="MyApp") - city = geolocator.geocode(city_name) - - latitude = round(city.latitude, 2) - longitude = round(city.longitude, 2) - - return latitude, longitude \ No newline at end of file diff --git a/advanced_tutorials/air_quality/functions/context_engineering.py b/advanced_tutorials/air_quality/functions/context_engineering.py deleted file mode 100644 index 57662c88..00000000 --- a/advanced_tutorials/air_quality/functions/context_engineering.py +++ /dev/null @@ -1,237 +0,0 @@ -import xml.etree.ElementTree as ET -import re -import inspect -from typing import get_type_hints -import json -import datetime -import torch -import sys -import pandas as pd -from openai import OpenAI -from functions.air_quality_data_retrieval import get_data_for_date, get_data_in_date_range, get_future_data -from typing import Any, Dict, List - - -def get_type_name(t: Any) -> str: - """Get the name of the type.""" - name = str(t) - if "list" in name or "dict" in name: - return name - else: - return t.__name__ - - -def serialize_function_to_json(func: Any) -> str: - """Serialize a function to JSON.""" - signature = inspect.signature(func) - type_hints = get_type_hints(func) - - function_info = { - "name": func.__name__, - "description": func.__doc__, - "parameters": { - "type": "object", - "properties": {} - }, - "returns": type_hints.get('return', 'void').__name__ - } - - for name, _ in signature.parameters.items(): - param_type = get_type_name(type_hints.get(name, type(None))) - function_info["parameters"]["properties"][name] = {"type": param_type} - - return json.dumps(function_info, indent=2) - - -def get_function_calling_prompt(user_query): - fn = """{"name": "function_name", "arguments": {"arg_1": "value_1", "arg_2": value_2, ...}}""" - example = """{"name": "get_data_in_date_range", "arguments": {"date_start": "2024-01-10", "date_end": "2024-01-14", "city_name": ""}}""" - - prompt = f"""<|im_start|>system -You are a helpful assistant with access to the following functions: - -{serialize_function_to_json(get_data_for_date)} - -{serialize_function_to_json(get_data_in_date_range)} - -{serialize_function_to_json(get_future_data)} - -###INSTRUCTIONS: -- You need to choose one function to use and retrieve paramenters for this function from the user input. -- If the user query contains 'will', it is very likely that you will need to use the get_future_data function. -- Do not include feature_view, model and encoder parameters. -- Provide dates STRICTLY in the YYYY-MM-DD format. -- Generate an 'No Function needed' string if the user query does not require function calling. - -IMPORTANT: Today is {datetime.date.today().strftime("%A")}, {datetime.date.today()}. - -To use one of there functions respond STRICTLY with: - - {fn} - - -###EXAMPLES - -EXAMPLE 1: -- User: Hi! -- AI Assiatant: No Function needed. - -EXAMPLE 2: -- User: Is this Air Quality level good or bad? -- AI Assiatant: No Function needed. - -EXAMPLE 3: -- User: When and what was the minimum air quality from 2024-01-10 till 2024-01-14 in ? -- AI Assistant: - - {example} - -<|im_end|> - -<|im_start|>user -{user_query} -<|im_end|> - -<|im_start|>assistant""" - - return prompt - - -def generate_hermes(user_query: str, model_llm, tokenizer) -> str: - """Retrieves a function name and extracts function parameters based on the user query.""" - - prompt = get_function_calling_prompt(user_query) - - tokens = tokenizer(prompt, return_tensors="pt").to(model_llm.device) - input_size = tokens.input_ids.numel() - with torch.inference_mode(): - generated_tokens = model_llm.generate( - **tokens, - use_cache=True, - do_sample=True, - temperature=0.2, - top_p=1.0, - top_k=0, - max_new_tokens=512, - eos_token_id=tokenizer.eos_token_id, - pad_token_id=tokenizer.eos_token_id, - ) - - return tokenizer.decode( - generated_tokens.squeeze()[input_size:], - skip_special_tokens=True, - ) - - -def function_calling_with_openai(user_query: str, client) -> str: - """ - Generates a response using OpenAI's chat API. - - Args: - user_query (str): The user's query or prompt. - instructions (str): Instructions or context to provide to the GPT model. - - Returns: - str: The generated response from the assistant. - """ - - instructions = get_function_calling_prompt(user_query).split('<|im_start|>user')[0] - - completion = client.chat.completions.create( - model="gpt-3.5-turbo", - messages=[ - {"role": "system", "content": instructions}, - {"role": "user", "content": user_query}, - ] - ) - - # Extract and return the assistant's reply from the response - if completion and completion.choices: - last_choice = completion.choices[0] - if last_choice.message: - return last_choice.message.content.strip() - return "" - - -def extract_function_calls(completion: str) -> List[Dict[str, Any]]: - """Extract function calls from completion.""" - completion = completion.strip() - pattern = r"((.*?))" - match = re.search(pattern, completion, re.DOTALL) - if not match: - return None - - multiplefn = match.group(1) - root = ET.fromstring(multiplefn) - functions = root.findall("functioncall") - - return [json.loads(fn.text) for fn in functions] - - -def invoke_function(function, feature_view, model, encoder) -> pd.DataFrame: - """Invoke a function with given arguments.""" - # Extract function name and arguments from input_data - function_name = function['name'] - arguments = function['arguments'] - - # Using Python's getattr function to dynamically call the function by its name and passing the arguments - function_output = getattr(sys.modules[__name__], function_name)( - **arguments, - feature_view=feature_view, - model=model, - encoder=encoder, - ) - - if type(function_output) == str: - return function_output - - # Round the 'pm2_5' value to 2 decimal places - function_output['pm2_5'] = function_output['pm2_5'].apply(round, ndigits=2) - return function_output - - -def get_context_data(user_query: str, feature_view, model_air_quality, encoder, model_llm=None, tokenizer=None, client=None) -> str: - """ - Retrieve context data based on user query. - - Args: - user_query (str): The user query. - feature_view: Feature View for data retrieval. - model_llm: The language model. - tokenizer: The tokenizer. - model_air_quality: The air quality model. - encoder: The encoder. - - Returns: - str: The context data. - """ - - if client: - # Generate a response using LLM - completion = function_calling_with_openai(user_query, client) - - else: - # Generate a response using LLM - completion = generate_hermes( - user_query, - model_llm, - tokenizer, - ) - - # Extract function calls from the completion - functions = extract_function_calls(completion) - - # If function calls were found - if functions: - # Invoke the function with provided arguments - data = invoke_function(functions[0], feature_view, model_air_quality, encoder) - # Return formatted data as string - if isinstance(data, pd.DataFrame): - return f'Air Quality Measurements for {functions[0]["arguments"]["city_name"]}:\n' + '\n'.join( - [f'Date: {row["date"]}; Air Quality: {row["pm2_5"]}' for _, row in data.iterrows()] - ) - # Return message if data is not updated - return data - - # If no function calls were found, return an empty string - return '' diff --git a/advanced_tutorials/air_quality/functions/llm_chain.py b/advanced_tutorials/air_quality/functions/llm_chain.py deleted file mode 100644 index fbdb6ce3..00000000 --- a/advanced_tutorials/air_quality/functions/llm_chain.py +++ /dev/null @@ -1,235 +0,0 @@ -import transformers -from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig -from langchain.llms import HuggingFacePipeline -from langchain.prompts import PromptTemplate -from langchain.memory import ConversationBufferWindowMemory -from langchain.schema.output_parser import StrOutputParser -import torch -import datetime -from typing import Any, Dict, Union -from functions.context_engineering import get_context_data - - -def load_model(model_id: str = "teknium/OpenHermes-2.5-Mistral-7B") -> tuple: - """ - Load the LLM and its corresponding tokenizer. - - Args: - model_id (str, optional): Identifier for the pre-trained model. Defaults to "teknium/OpenHermes-2.5-Mistral-7B". - - Returns: - tuple: A tuple containing the loaded model and tokenizer. - """ - - # Load the tokenizer for Mistral-7B-Instruct model - tokenizer = AutoTokenizer.from_pretrained( - model_id, - ) - - # Set the pad token to the unknown token to handle padding - tokenizer.pad_token = tokenizer.unk_token - - # Set the padding side to "right" to prevent warnings during tokenization - tokenizer.padding_side = "right" - - # BitsAndBytesConfig int-4 config - bnb_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, - bnb_4bit_quant_type="nf4", - bnb_4bit_compute_dtype=torch.bfloat16, - ) - - # Load the Mistral-7B-Instruct model with quantization configuration - model_llm = AutoModelForCausalLM.from_pretrained( - model_id, - device_map="auto", - quantization_config=bnb_config, - ) - - # Configure the pad token ID in the model to match the tokenizer's pad token ID - model_llm.config.pad_token_id = tokenizer.pad_token_id - - return model_llm, tokenizer - - -def get_prompt_template(): - """ - Retrieve a template for generating prompts in a conversational AI system. - - Returns: - str: A string representing the template for generating prompts. - This template includes placeholders for system information, - instructions, previous conversation, context, date and user query. - """ - prompt_template = """<|im_start|>system - You are one of the best air quality experts in the world. - - ###INSTRUCTIONS: - - If you don't know the answer, you will respond politely that you cannot help. - - Use the context table with air quality indicators for city provided by user to generate your answer. - - You answer should be at least one sentence. - - Do not show any calculations to the user. - - Make sure that you use correct air quality indicators for the corresponding date. - - Add a rich analysis of the air quality level, such as whether it is safe, whether to go for a walk, etc. - - Do not mention in your answer that you are using context table. - <|im_end|> - - ### CONTEXT: - {context} - - IMPORTANT: Today is {date_today}. - - <|im_start|>user - {question}<|im_end|> - <|im_start|>assistant""" - return prompt_template - - -def get_llm_chain(tokenizer, model_llm): - """ - Create and configure a language model chain. - - Args: - tokenizer: The tokenizer corresponding to the language model. - model_llm: The pre-trained language model for text generation. - - Returns: - LLMChain: The configured language model chain. - """ - # Create a text generation pipeline using the loaded model and tokenizer - text_generation_pipeline = transformers.pipeline( - model=model_llm, # The pre-trained language model for text generation - tokenizer=tokenizer, # The tokenizer corresponding to the language model - task="text-generation", # Specify the task as text generation - use_cache=True, - do_sample=True, - temperature=0.4, - top_p=1.0, - top_k=0, - max_new_tokens=512, - eos_token_id=tokenizer.eos_token_id, - pad_token_id=tokenizer.eos_token_id, - ) - - # Create a Hugging Face pipeline for Mistral LLM using the text generation pipeline - mistral_llm = HuggingFacePipeline( - pipeline=text_generation_pipeline, - ) - - # Create prompt from prompt template - prompt = PromptTemplate( - input_variables=["context", "question", "date_today"], - template=get_prompt_template(), - ) - - # Create LLM chain - llm_chain = prompt | mistral_llm | StrOutputParser() - - return llm_chain - - -def generate_response( - user_query: str, - feature_view, - model_air_quality, - encoder, - model_llm, - tokenizer, - llm_chain=None, - verbose: bool = False, -) -> str: - """ - Generate response to user query using LLM chain and context data. - - Args: - user_query (str): The user's query. - feature_view: Feature view for data retrieval. - model_llm: Language model for text generation. - tokenizer: Tokenizer for processing text. - model_air_quality: Model for predicting air quality. - encoder: Label Encoder for the city_name column. - llm_chain: LLM Chain. - verbose (bool): Whether to print verbose information. Defaults to False. - - Returns: - str: Generated response to the user query. - """ - # Get context data based on user query - context = get_context_data( - user_query, - feature_view, - model_air_quality, - encoder, - model_llm=model_llm, - tokenizer=tokenizer, - ) - - # Get today's date in a readable format - date_today = f'{datetime.date.today().strftime("%A")}, {datetime.date.today()}' - - # Print today's date and context information if verbose mode is enabled - if verbose: - print(f"๐Ÿ—“๏ธ Today's date: {date_today}") - print(f'๐Ÿ“– {context}') - print('===' * 5) - - # Invoke the language model chain with relevant context - model_output = llm_chain.invoke({ - "context": context, - "date_today": date_today, - "question": user_query, - }) - - # Return the generated text from the model output - return model_output.split('<|im_start|>assistant')[-1].strip() - - -def generate_response_openai( - user_query: str, - feature_view, - model_air_quality, - encoder, - client, - verbose=True, -): - - context = get_context_data( - user_query, - feature_view, - model_air_quality, - encoder, - client=client, - ) - - # Get today's date in a readable format - date_today = f'{datetime.date.today().strftime("%A")}, {datetime.date.today()}' - - # Print today's date and context information if verbose mode is enabled - if verbose: - print(f"๐Ÿ—“๏ธ Today's date: {date_today}") - print(f'๐Ÿ“– {context}') - print('===' * 5) - - instructions = get_prompt_template().split('<|im_start|>user')[0] - - instructions_filled = instructions.format( - context=context, - date_today=date_today - ) - - completion = client.chat.completions.create( - model="gpt-4-0125-preview", - messages=[ - {"role": "system", "content": instructions_filled}, - {"role": "user", "content": user_query}, - ] - ) - - # Extract and return the assistant's reply from the response - if completion and completion.choices: - last_choice = completion.choices[0] - if last_choice.message: - return last_choice.message.content.strip() - return "" - \ No newline at end of file diff --git a/advanced_tutorials/air_quality/functions/parse_air_quality.py b/advanced_tutorials/air_quality/functions/parse_air_quality.py deleted file mode 100644 index 06dd41fe..00000000 --- a/advanced_tutorials/air_quality/functions/parse_air_quality.py +++ /dev/null @@ -1,79 +0,0 @@ -import time -from functions.common_functions import * -import requests -import pandas as pd - - -def get_aqi_data_from_open_meteo( - city_name: str, - start_date: str, - end_date: str, - coordinates: list = None, - pollutant: str = "pm2_5" - ): - """ - Takes [city name OR coordinates] and returns pandas DataFrame with AQI data. - - Examples of arguments: - ... - coordinates=(47.755, -122.2806), - start_date="2023-01-01", - pollutant="no2" - ... - """ - start_of_cell = time.time() - - if coordinates: - latitude, longitude = coordinates - else: - latitude, longitude = get_city_coordinates(city_name=city_name) - - pollutant = pollutant.lower() - if pollutant == "pm2.5": - pollutant = "pm2_5" - - # make it work with both "no2" and "nitrogen_dioxide" passed. - if pollutant == "no2": - pollutant = "nitrogen_dioxide" - - params = { - 'latitude': latitude, - 'longitude': longitude, - 'hourly': [pollutant], - 'start_date': start_date, - 'end_date': end_date, - 'timezone': "Europe/London" - } - - # base endpoint - base_url = "https://air-quality-api.open-meteo.com/v1/air-quality" - try: - response = requests.get(base_url, params=params) - except ConnectionError: - response = requests.get(base_url, params=params) - response_json = response.json() - res_df = pd.DataFrame(response_json["hourly"]) - - # convert dates - res_df["time"] = pd.to_datetime(res_df["time"]) - - # resample to days - res_df = res_df.groupby(res_df['time'].dt.date).mean(numeric_only=True).reset_index() - res_df[pollutant] = round(res_df[pollutant], 1) - - # rename columns - res_df = res_df.rename(columns={ - "time": "date" - }) - - res_df["city_name"] = city_name - - # change columns order - res_df = res_df[ - ['city_name', 'date', pollutant] - ] - end_of_cell = time.time() - print(f"Processed {pollutant.upper()} for {city_name} since {start_date} till {end_date}.") - print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") - - return res_df \ No newline at end of file diff --git a/advanced_tutorials/air_quality/functions/parse_weather.py b/advanced_tutorials/air_quality/functions/parse_weather.py deleted file mode 100644 index bbebc34c..00000000 --- a/advanced_tutorials/air_quality/functions/parse_weather.py +++ /dev/null @@ -1,81 +0,0 @@ -import time -from functions.common_functions import * -import requests -import pandas as pd - - -def get_weather_data_from_open_meteo( - city_name: str, - start_date: str, - end_date: str, - coordinates: list = None, - forecast: bool = False, - ): - """ - Takes [city name OR coordinates] and returns pandas DataFrame with weather data. - - Examples of arguments: - coordinates=(47.755, -122.2806), start_date="2023-01-01" - """ - start_of_cell = time.time() - - if coordinates: - latitude, longitude = coordinates - else: - latitude, longitude = get_city_coordinates(city_name=city_name) - - params = { - 'latitude': latitude, - 'longitude': longitude, - 'daily': ["temperature_2m_max", "temperature_2m_min", - "precipitation_sum", "rain_sum", "snowfall_sum", - "precipitation_hours", "windspeed_10m_max", - "windgusts_10m_max", "winddirection_10m_dominant"], - 'timezone': "Europe/London", - 'start_date': start_date, - 'end_date': end_date, - } - - if forecast: - # historical forecast endpoint - base_url = 'https://api.open-meteo.com/v1/forecast' - else: - # historical observations endpoint - base_url = 'https://archive-api.open-meteo.com/v1/archive' - - try: - response = requests.get(base_url, params=params) - time.sleep(2) - except ConnectionError: - response = requests.get(base_url, params=params) - - response_json = response.json() - - res_df = pd.DataFrame(response_json["daily"]) - res_df["city_name"] = city_name - - # rename columns - res_df = res_df.rename(columns={ - "time": "date", - "temperature_2m_max": "temperature_max", - "temperature_2m_min": "temperature_min", - "windspeed_10m_max": "wind_speed_max", - "winddirection_10m_dominant": "wind_direction_dominant", - "windgusts_10m_max": "wind_gusts_max" - }) - - # change columns order - res_df = res_df[ - ['city_name', 'date', 'temperature_max', 'temperature_min', - 'precipitation_sum', 'rain_sum', 'snowfall_sum', - 'precipitation_hours', 'wind_speed_max', - 'wind_gusts_max', 'wind_direction_dominant'] - ] - - # convert dates in 'date' column - res_df["date"] = pd.to_datetime(res_df["date"]) - end_of_cell = time.time() - print(f"Parsed weather for {city_name} since {start_date} till {end_date}.") - print(f"Took {round(end_of_cell - start_of_cell, 2)} sec.\n") - - return res_df \ No newline at end of file diff --git a/advanced_tutorials/air_quality/requirements.txt b/advanced_tutorials/air_quality/requirements.txt index edafbefb..9d933db1 100644 --- a/advanced_tutorials/air_quality/requirements.txt +++ b/advanced_tutorials/air_quality/requirements.txt @@ -1,12 +1,7 @@ -geopy==2.4.1 -joblib==1.2.0 -xgboost==2.0.3 -transformers==4.38.2 -protobuf==3.20.0 -langchain==0.1.10 -flask-sqlalchemy==3.1.1 -bitsandbytes==0.42.0 -accelerate==0.27.2 -streamlit==1.31.1 -sentencepiece==0.2.0 -gradio==4.21.0 +hopsworks +geopy +pandas +numpy +streamlit +streamlit-folium +joblib \ No newline at end of file diff --git a/advanced_tutorials/bitcoin/1_bitcoin_feature_backfill.ipynb b/advanced_tutorials/bitcoin/1_bitcoin_feature_backfill.ipynb index f405c2b9..d57908bc 100644 --- a/advanced_tutorials/bitcoin/1_bitcoin_feature_backfill.ipynb +++ b/advanced_tutorials/bitcoin/1_bitcoin_feature_backfill.ipynb @@ -382,7 +382,10 @@ " event_time='unix',\n", ")\n", "\n", - "tweets_vader_fg.insert(tweets_vader)" + "tweets_vader_fg.insert(\n", + " tweets_vader,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { @@ -414,7 +417,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/advanced_tutorials/bitcoin/2_bitcoin_feature_pipeline.ipynb b/advanced_tutorials/bitcoin/2_bitcoin_feature_pipeline.ipynb index ec6778f2..f44da640 100644 --- a/advanced_tutorials/bitcoin/2_bitcoin_feature_pipeline.ipynb +++ b/advanced_tutorials/bitcoin/2_bitcoin_feature_pipeline.ipynb @@ -504,7 +504,7 @@ "metadata": {}, "outputs": [], "source": [ - "tweets_vader_fg.insert(tweets_vader_batch)" + "tweets_vader_fg.insert(tweets_vader_batch, wait=True)" ] }, { @@ -536,7 +536,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/advanced_tutorials/citibike/1_citibike_feature_backfill.ipynb b/advanced_tutorials/citibike/1_citibike_feature_backfill.ipynb index 8dafddbb..c6de6709 100644 --- a/advanced_tutorials/citibike/1_citibike_feature_backfill.ipynb +++ b/advanced_tutorials/citibike/1_citibike_feature_backfill.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "3853d219", + "id": "7601bd38", "metadata": { "id": "ccbbf2cc" }, @@ -23,7 +23,7 @@ }, { "cell_type": "markdown", - "id": "6d0a2c45", + "id": "ed32afc3", "metadata": { "id": "akyCpdrP0GDH" }, @@ -34,7 +34,7 @@ { "cell_type": "code", "execution_count": null, - "id": "22629764", + "id": "990e400c", "metadata": {}, "outputs": [], "source": [ @@ -45,7 +45,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cf987f2e", + "id": "9592775e", "metadata": { "id": "c3fd23b4" }, @@ -58,10 +58,7 @@ "\n", "from pandas.tseries.holiday import USFederalHolidayCalendar\n", "\n", - "from features import (\n", - " citibike, \n", - " meteorological_measurements,\n", - ")\n", + "from features import citibike, meteorological_measurements\n", "\n", "# Mute warnings\n", "import warnings\n", @@ -70,7 +67,7 @@ }, { "cell_type": "markdown", - "id": "0166a759", + "id": "c0557cde", "metadata": { "id": "KVH8VU5g0JDP" }, @@ -80,7 +77,7 @@ }, { "cell_type": "markdown", - "id": "e37497d5", + "id": "86c5470d", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Load the historical data and ๐Ÿ› ๏ธ Perform Feature Engineering\n", @@ -94,7 +91,7 @@ }, { "cell_type": "markdown", - "id": "30f64562", + "id": "22340095", "metadata": { "id": "285d06c9" }, @@ -121,7 +118,7 @@ }, { "cell_type": "markdown", - "id": "da2ffb7c", + "id": "ae44de76", "metadata": {}, "source": [ "Let's download some data [from here](https://s3.amazonaws.com/tripdata/index.html) and perform preprocessing (removal of redundant columns and data grouping)" @@ -130,7 +127,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b19dedd6", + "id": "54627832", "metadata": { "scrolled": true }, @@ -144,7 +141,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9f6559bb", + "id": "95eb7665", "metadata": {}, "outputs": [], "source": [ @@ -155,7 +152,7 @@ { "cell_type": "code", "execution_count": null, - "id": "267edd82", + "id": "d496fdd7", "metadata": {}, "outputs": [], "source": [ @@ -175,7 +172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6f4ef6d9", + "id": "58f8f21f", "metadata": { "scrolled": true }, @@ -191,7 +188,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d916a111", + "id": "cba9dfee", "metadata": {}, "outputs": [], "source": [ @@ -201,7 +198,7 @@ }, { "cell_type": "markdown", - "id": "645c42b0", + "id": "aedc5568", "metadata": {}, "source": [ "### ๐Ÿ“’ Citibike stations info" @@ -210,7 +207,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29d136ad", + "id": "63a68bbd", "metadata": {}, "outputs": [], "source": [ @@ -221,7 +218,7 @@ { "cell_type": "code", "execution_count": null, - "id": "72e40b6b", + "id": "d960d9ac", "metadata": {}, "outputs": [], "source": [ @@ -238,7 +235,7 @@ { "cell_type": "code", "execution_count": null, - "id": "66243560", + "id": "105028e5", "metadata": {}, "outputs": [], "source": [ @@ -249,7 +246,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f5322a07", + "id": "f0360a2a", "metadata": {}, "outputs": [], "source": [ @@ -276,7 +273,7 @@ }, { "cell_type": "markdown", - "id": "1eee1015", + "id": "517224b3", "metadata": {}, "source": [ "### ๐Ÿ“… US holidays" @@ -285,7 +282,7 @@ { "cell_type": "code", "execution_count": null, - "id": "03775cbe", + "id": "ca65a9b6", "metadata": {}, "outputs": [], "source": [ @@ -308,7 +305,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ff976b80", + "id": "fa12d5a0", "metadata": {}, "outputs": [], "source": [ @@ -328,7 +325,7 @@ { "cell_type": "code", "execution_count": null, - "id": "db30ed56", + "id": "e93487c9", "metadata": {}, "outputs": [], "source": [ @@ -343,7 +340,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7574b15d", + "id": "0c044390", "metadata": {}, "outputs": [], "source": [ @@ -360,7 +357,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76b5c737", + "id": "73a33b2d", "metadata": {}, "outputs": [], "source": [ @@ -369,7 +366,7 @@ }, { "cell_type": "markdown", - "id": "0405e960", + "id": "7e5f8bd1", "metadata": {}, "source": [ "### ๐ŸŒค Meteorological measurements from VisualCrossing" @@ -377,7 +374,7 @@ }, { "cell_type": "markdown", - "id": "96d72937", + "id": "ba160d85-10f3-4d7b-b9b4-efd706b6ceba", "metadata": {}, "source": [ "You will parse weather data so you should get an API key from [VisualCrossing](https://www.visualcrossing.com/). You can use [this link](https://www.visualcrossing.com/weather-api).\n", @@ -394,7 +391,7 @@ { "cell_type": "code", "execution_count": null, - "id": "271bed12", + "id": "c619138e", "metadata": {}, "outputs": [], "source": [ @@ -408,7 +405,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2ad07dd2", + "id": "0b2515c9", "metadata": {}, "outputs": [], "source": [ @@ -424,7 +421,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d4875559", + "id": "b67b32d9", "metadata": {}, "outputs": [], "source": [ @@ -442,7 +439,7 @@ }, { "cell_type": "markdown", - "id": "4a826897", + "id": "49834242", "metadata": { "id": "H1aYmOX60MXj" }, @@ -452,7 +449,7 @@ }, { "cell_type": "markdown", - "id": "b204ebdc", + "id": "dab06068", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -461,7 +458,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ba3395d2", + "id": "c553b1f8", "metadata": { "id": "cae776d7" }, @@ -476,7 +473,7 @@ }, { "cell_type": "markdown", - "id": "be0dfb9d", + "id": "da6ba183", "metadata": {}, "source": [ "---" @@ -484,7 +481,7 @@ }, { "cell_type": "markdown", - "id": "f55978ba", + "id": "5b93d95e", "metadata": {}, "source": [ "## ๐Ÿช„ Creating Feature Groups \n", @@ -495,7 +492,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6501923e", + "id": "8d715bd8", "metadata": {}, "outputs": [], "source": [ @@ -511,7 +508,7 @@ { "cell_type": "code", "execution_count": null, - "id": "81c75fd2", + "id": "3e10b145", "metadata": { "scrolled": true }, @@ -523,7 +520,7 @@ { "cell_type": "code", "execution_count": null, - "id": "98c5b065", + "id": "c7af8432", "metadata": { "id": "c691d509" }, @@ -540,7 +537,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3e821b95", + "id": "29631f51", "metadata": { "id": "67228279" }, @@ -552,7 +549,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9f1736bf", + "id": "8a5c6266", "metadata": {}, "outputs": [], "source": [ @@ -568,7 +565,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aab10254", + "id": "014d4c35", "metadata": {}, "outputs": [], "source": [ @@ -578,7 +575,7 @@ { "cell_type": "code", "execution_count": null, - "id": "010f1a00", + "id": "847ab26c", "metadata": {}, "outputs": [], "source": [ @@ -594,18 +591,21 @@ { "cell_type": "code", "execution_count": null, - "id": "695d18c5", + "id": "d72fd5f1", "metadata": { "scrolled": true }, "outputs": [], "source": [ - "meteorological_measurements_fg.insert(df_weather)" + "meteorological_measurements_fg.insert(\n", + " df_weather, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "77dddcf2", + "id": "a373a025", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 02: Feature Pipeline \n", @@ -620,7 +620,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -634,7 +634,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/citibike/2_citibike_feature_pipeline.ipynb b/advanced_tutorials/citibike/2_citibike_feature_pipeline.ipynb index 737a00f9..0bd7c4be 100644 --- a/advanced_tutorials/citibike/2_citibike_feature_pipeline.ipynb +++ b/advanced_tutorials/citibike/2_citibike_feature_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d179fa38", + "id": "74b6c01c", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 02: Feature Pipeline\n", @@ -15,7 +15,7 @@ }, { "cell_type": "markdown", - "id": "66df50de", + "id": "8d022a10", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5b87f18e", + "id": "7faa949f", "metadata": {}, "outputs": [], "source": [ @@ -32,10 +32,7 @@ "import pandas as pd\n", "import os\n", "\n", - "from features import (\n", - " citibike, \n", - " meteorological_measurements,\n", - ")\n", + "from features import citibike, meteorological_measurements\n", "\n", "# Mute warnings\n", "import warnings\n", @@ -44,7 +41,7 @@ }, { "cell_type": "markdown", - "id": "b33339b0", + "id": "d3dc1ac1", "metadata": {}, "source": [ "---" @@ -52,7 +49,7 @@ }, { "cell_type": "markdown", - "id": "1dfacd9f", + "id": "77939976", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -61,7 +58,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3046b3e4", + "id": "608986f1", "metadata": {}, "outputs": [], "source": [ @@ -75,7 +72,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bd7ce002", + "id": "2cc9d553", "metadata": {}, "outputs": [], "source": [ @@ -93,7 +90,7 @@ }, { "cell_type": "markdown", - "id": "6c7b15a8", + "id": "bf4c2d52", "metadata": {}, "source": [ "### ๐Ÿ“… Getting tha last date\n" @@ -102,7 +99,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ffeaec13", + "id": "6f339455", "metadata": { "scrolled": true }, @@ -116,7 +113,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e800d919", + "id": "41c8bce4", "metadata": {}, "outputs": [], "source": [ @@ -128,7 +125,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a97c80e1", + "id": "93633194", "metadata": {}, "outputs": [], "source": [ @@ -140,7 +137,7 @@ }, { "cell_type": "markdown", - "id": "05fabd24", + "id": "dce30ea9", "metadata": {}, "source": [ "---" @@ -148,7 +145,7 @@ }, { "cell_type": "markdown", - "id": "fd72808f", + "id": "2bfde864", "metadata": {}, "source": [ "## ๐Ÿช„ Parsing new data" @@ -156,7 +153,7 @@ }, { "cell_type": "markdown", - "id": "32c5efb2", + "id": "d41cb2c5", "metadata": {}, "source": [ "### ๐Ÿšฒ Citibike usage info" @@ -165,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63aa1c27", + "id": "2ca902e0", "metadata": {}, "outputs": [], "source": [ @@ -180,7 +177,7 @@ { "cell_type": "code", "execution_count": null, - "id": "19a46498", + "id": "6efc7e2f", "metadata": {}, "outputs": [], "source": [ @@ -193,7 +190,7 @@ { "cell_type": "code", "execution_count": null, - "id": "198d0ba4", + "id": "62cb7d60", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +206,7 @@ }, { "cell_type": "markdown", - "id": "8bf55a65", + "id": "aa39e68f", "metadata": {}, "source": [ "### ๐ŸŒค Meteorological measurements from VisualCrossing" @@ -217,7 +214,7 @@ }, { "cell_type": "markdown", - "id": "cf040fe7", + "id": "623ed453", "metadata": {}, "source": [ "You will parse weather data so you should get an API key from [VisualCrossing](https://www.visualcrossing.com/). You can use [this link](https://www.visualcrossing.com/weather-api).\n", @@ -234,7 +231,7 @@ { "cell_type": "code", "execution_count": null, - "id": "af212086", + "id": "525d223f", "metadata": {}, "outputs": [], "source": [ @@ -248,7 +245,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3773aa84", + "id": "183769e6", "metadata": {}, "outputs": [], "source": [ @@ -264,7 +261,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ce61c382", + "id": "74198dc8", "metadata": {}, "outputs": [], "source": [ @@ -276,7 +273,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28655bc8", + "id": "3b343078", "metadata": {}, "outputs": [], "source": [ @@ -291,7 +288,7 @@ }, { "cell_type": "markdown", - "id": "f3426f85", + "id": "ebdb3fa7", "metadata": {}, "source": [ "---" @@ -299,7 +296,7 @@ }, { "cell_type": "markdown", - "id": "f5dad7d4", + "id": "d95d789c", "metadata": {}, "source": [ "## โฌ†๏ธ Uploading new data to the Feature Store" @@ -308,7 +305,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9b144f46", + "id": "d207b245", "metadata": {}, "outputs": [], "source": [ @@ -319,17 +316,20 @@ { "cell_type": "code", "execution_count": null, - "id": "0c4a51b2", + "id": "dfd8086a", "metadata": {}, "outputs": [], "source": [ "# Insert new data\n", - "meteorological_measurements_fg.insert(df_weather_batch)" + "meteorological_measurements_fg.insert(\n", + " df_weather_batch,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "a4b670d1", + "id": "4f39826e", "metadata": {}, "source": [ "---" @@ -337,7 +337,7 @@ }, { "cell_type": "markdown", - "id": "84acdbfe", + "id": "139be1e7", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 03: Training Pipeline \n", @@ -348,7 +348,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -362,7 +362,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/citibike/3_citibike_training_pipeline.ipynb b/advanced_tutorials/citibike/3_citibike_training_pipeline.ipynb index 2e3d5fb6..f47dac82 100644 --- a/advanced_tutorials/citibike/3_citibike_training_pipeline.ipynb +++ b/advanced_tutorials/citibike/3_citibike_training_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d1b75d88", + "id": "fd5a44c9", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 03: Training Pipeline\n", @@ -21,7 +21,7 @@ }, { "cell_type": "markdown", - "id": "5be42c18", + "id": "5272c5bf", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -30,10 +30,11 @@ { "cell_type": "code", "execution_count": null, - "id": "8c8527eb", + "id": "f2216406", "metadata": {}, "outputs": [], "source": [ + "import joblib\n", "import os\n", "\n", "import pandas as pd\n", @@ -53,7 +54,7 @@ }, { "cell_type": "markdown", - "id": "329c3705", + "id": "5f08ae28", "metadata": {}, "source": [ "---" @@ -61,7 +62,7 @@ }, { "cell_type": "markdown", - "id": "5327ca0a", + "id": "3c4e057b", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -70,7 +71,7 @@ { "cell_type": "code", "execution_count": null, - "id": "134eefda", + "id": "f2910bd8", "metadata": { "scrolled": true }, @@ -86,7 +87,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b6870ce1", + "id": "09927639", "metadata": {}, "outputs": [], "source": [ @@ -96,6 +97,11 @@ " version=1,\n", ")\n", "\n", + "citibike_stations_info_fg = fs.get_or_create_feature_group(\n", + " name=\"citibike_stations_info\",\n", + " version=1,\n", + ")\n", + "\n", "us_holidays_fg = fs.get_or_create_feature_group(\n", " name=\"us_holidays\",\n", " version=1,\n", @@ -109,7 +115,7 @@ }, { "cell_type": "markdown", - "id": "b4c983ba", + "id": "5c162680", "metadata": {}, "source": [ "---" @@ -117,7 +123,7 @@ }, { "cell_type": "markdown", - "id": "937eea82", + "id": "2963c406", "metadata": {}, "source": [ "## ๐Ÿ– Feature View Creation and Retrieving \n", @@ -128,12 +134,12 @@ { "cell_type": "code", "execution_count": null, - "id": "492fe596", + "id": "abddfc94", "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = meteorological_measurements_fg.select_except([\"timestamp\"])\\\n", + "# Select features for training data.\n", + "query = meteorological_measurements_fg.select_except([\"timestamp\"])\\\n", " .join(\n", " us_holidays_fg.select_except([\"timestamp\"]),\n", " on=\"date\", join_type=\"left\"\n", @@ -147,19 +153,21 @@ { "cell_type": "code", "execution_count": null, - "id": "b293bc00", + "id": "e4f346fb", "metadata": { "scrolled": true }, "outputs": [], "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# # uncomment and run cell below if you want to see some rows from this query\n", + "# # but you will have to wait some time\n", + "\n", + "# query.read()" ] }, { "cell_type": "markdown", - "id": "8ad20ee3", + "id": "aa092bc9", "metadata": {}, "source": [ "`Feature Views` stands between **Feature Groups** and **Training Dataset**. ะกombining **Feature Groups** we can create **Feature Views** which store a metadata of our data. Having **Feature Views** we can create **Training Dataset**.\n", @@ -184,13 +192,13 @@ { "cell_type": "code", "execution_count": null, - "id": "71cd5362", + "id": "0bf70fac", "metadata": {}, "outputs": [], "source": [ "feature_view = fs.get_or_create_feature_view(\n", " name='citibike_fv',\n", - " query=selected_features,\n", + " query=query,\n", " labels=[\"users_count\"],\n", " version=1, \n", ")" @@ -198,7 +206,7 @@ }, { "cell_type": "markdown", - "id": "c2664d7d", + "id": "99c6f378", "metadata": {}, "source": [ "---\n", @@ -235,7 +243,7 @@ { "cell_type": "code", "execution_count": null, - "id": "abf7cd6c", + "id": "a6a7871c", "metadata": { "scrolled": true }, @@ -252,16 +260,10 @@ { "cell_type": "code", "execution_count": null, - "id": "f9970969", + "id": "eb27d58b", "metadata": {}, "outputs": [], "source": [ - "# Set the multi-level index for the training set using 'date' and 'station_id' columns\n", - "X_train = X_train.set_index([\"date\", \"station_id\"])\n", - "\n", - "# Set the multi-level index for the test set using 'date' and 'station_id' columns\n", - "X_test = X_test.set_index([\"date\", \"station_id\"])\n", - "\n", "# Convert the specified columns in the training set to float type\n", "X_train.iloc[:, 1:-1] = X_train.iloc[:, 1:-1].astype(float)\n", "\n", @@ -275,10 +277,16 @@ { "cell_type": "code", "execution_count": null, - "id": "bec1b8cb", + "id": "4d68fc49", "metadata": {}, "outputs": [], "source": [ + "# Set the multi-level index for the training set using 'date' and 'station_id' columns\n", + "X_train = X_train.set_index([\"date\", \"station_id\"])\n", + "\n", + "# Set the multi-level index for the test set using 'date' and 'station_id' columns\n", + "X_test = X_test.set_index([\"date\", \"station_id\"])\n", + "\n", "# Drop rows with missing values in the training set\n", "X_train.dropna(inplace=True)\n", "\n", @@ -297,7 +305,7 @@ }, { "cell_type": "markdown", - "id": "2d8f9077", + "id": "436bd004", "metadata": {}, "source": [ "---\n", @@ -307,7 +315,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4fd16a7a", + "id": "11efe09b", "metadata": {}, "outputs": [], "source": [ @@ -321,7 +329,7 @@ { "cell_type": "code", "execution_count": null, - "id": "692cf009", + "id": "2b8e790a", "metadata": {}, "outputs": [], "source": [ @@ -336,7 +344,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e55a7910", + "id": "a2db802f", "metadata": {}, "outputs": [], "source": [ @@ -361,7 +369,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b52f9ca7", + "id": "f60d8fc0", "metadata": {}, "outputs": [], "source": [ @@ -371,7 +379,7 @@ }, { "cell_type": "markdown", - "id": "32a55b93", + "id": "641ade81", "metadata": {}, "source": [ "---\n", @@ -385,7 +393,7 @@ { "cell_type": "code", "execution_count": null, - "id": "55d29272", + "id": "aecf4adf", "metadata": {}, "outputs": [], "source": [ @@ -397,10 +405,7 @@ "output_schema = Schema(y_train)\n", "\n", "# Create a model schema with the input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "# Convert the model schema to a dictionary\n", "model_schema.to_dict()" @@ -408,7 +413,7 @@ }, { "cell_type": "markdown", - "id": "f66fcfcb", + "id": "3c97a550", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n", @@ -419,7 +424,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a0838eaa", + "id": "1feacc3e", "metadata": {}, "outputs": [], "source": [ @@ -428,8 +433,8 @@ "if not os.path.isdir(model_dir):\n", " os.mkdir(model_dir)\n", "\n", - "# Save the XGBoost regressor model as json file to the specified directory\n", - "regressor.save_model(model_dir + \"/model.json\")\n", + "# Save the XGBoost regressor model to the specified directory\n", + "joblib.dump(regressor, model_dir + '/citibike_xgb_model.pkl')\n", "\n", "# Save the residual plot figure as an image in the model directory\n", "fig.savefig(model_dir + \"/residplot.png\")" @@ -438,7 +443,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bebbb812", + "id": "0102be25", "metadata": {}, "outputs": [], "source": [ @@ -460,7 +465,7 @@ }, { "cell_type": "markdown", - "id": "87a7b133", + "id": "4d5ec11d", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 04: Batch Inference \n", @@ -471,7 +476,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -485,7 +490,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/citibike/4_citibike_batch_inference.ipynb b/advanced_tutorials/citibike/4_citibike_batch_inference.ipynb index 9ac03167..5c8a4054 100644 --- a/advanced_tutorials/citibike/4_citibike_batch_inference.ipynb +++ b/advanced_tutorials/citibike/4_citibike_batch_inference.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "0986a873", + "id": "c958e52b", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 04: Batch Inference\n", @@ -16,7 +16,7 @@ }, { "cell_type": "markdown", - "id": "62c1023b", + "id": "8855ee1a", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -25,16 +25,16 @@ { "cell_type": "code", "execution_count": null, - "id": "216b9341", + "id": "019c9226", "metadata": {}, "outputs": [], "source": [ - "from xgboost import XGBRegressor" + "import joblib" ] }, { "cell_type": "markdown", - "id": "80bbe6ea", + "id": "ce2fe8a8", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -43,7 +43,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49f4411c", + "id": "39f83bc9", "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "markdown", - "id": "b46ff232", + "id": "87485ee0", "metadata": {}, "source": [ "## โš™๏ธ Feature View Retrieval\n" @@ -65,7 +65,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0222c382", + "id": "e622d6b4", "metadata": {}, "outputs": [], "source": [ @@ -78,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "43641348", + "id": "e1dac8b6", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -87,7 +87,7 @@ { "cell_type": "code", "execution_count": null, - "id": "30843255", + "id": "ca35a9f4", "metadata": {}, "outputs": [], "source": [ @@ -97,7 +97,7 @@ }, { "cell_type": "markdown", - "id": "93255afe", + "id": "6f3589dc", "metadata": {}, "source": [ "## ๐Ÿ“ฎ Retrieving model from Model Registry " @@ -106,7 +106,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b13fd4c8", + "id": "6ac8014f", "metadata": {}, "outputs": [], "source": [ @@ -123,21 +123,20 @@ { "cell_type": "code", "execution_count": null, - "id": "ca2d53b4", + "id": "1a1221c7", "metadata": {}, "outputs": [], "source": [ - "# Initialize the model\n", - "model = XGBRegressor()\n", + "# Load the XGBoost model from the downloaded model directory\n", + "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/citibike_xgb_model.pkl\")\n", "\n", - "# Load the model from a saved JSON file\n", - "model.load_model(saved_model_dir + \"/model.json\")\n", - "model" + "# Display the retrieved XGBoost model\n", + "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "24dc2b3d", + "id": "3ad20124", "metadata": {}, "source": [ "## ๐Ÿค– Making the predictions " @@ -145,7 +144,7 @@ }, { "cell_type": "markdown", - "id": "ffad1cc9", + "id": "21c82dc9", "metadata": {}, "source": [ "### โœจ Load Batch Data" @@ -154,7 +153,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2fffa43f", + "id": "7d10c618", "metadata": {}, "outputs": [], "source": [ @@ -174,26 +173,26 @@ { "cell_type": "code", "execution_count": null, - "id": "32efe93e", + "id": "7b6410e0", "metadata": {}, "outputs": [], "source": [ - "# Set the multi-level index for the batch data using 'date' and 'station_id' columns\n", - "X_batch = batch_data.set_index([\"date\", \"station_id\"])\n", - "\n", "# Convert the specified columns in the batch data to float type\n", - "X_batch.iloc[:, 1:-1] = X_batch.iloc[:, 1:-1].astype(float)" + "batch_data.iloc[:, 1:-1] = batch_data.iloc[:, 1:-1].astype(float)\n", + "\n", + "# Set the multi-level index for the batch data using 'date' and 'station_id' columns\n", + "X_batch = batch_data.set_index([\"date\", \"station_id\"])" ] }, { "cell_type": "code", "execution_count": null, - "id": "8d424819", + "id": "9922d9ef", "metadata": {}, "outputs": [], "source": [ "# Make predictions using the retrieved XGBoost model on the batch data\n", - "predictions = model.predict(X_batch)\n", + "predictions = retrieved_xgboost_model.predict(X_batch)\n", "\n", "# Display the first 10 predictions\n", "predictions[:10]" @@ -201,7 +200,7 @@ }, { "cell_type": "markdown", - "id": "354d65a7", + "id": "89bc07f2", "metadata": {}, "source": [ "---\n", @@ -217,7 +216,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -231,7 +230,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/citibike/features/citibike.py b/advanced_tutorials/citibike/features/citibike.py index eef5b623..04bc4ce6 100644 --- a/advanced_tutorials/citibike/features/citibike.py +++ b/advanced_tutorials/citibike/features/citibike.py @@ -71,12 +71,10 @@ def get_last_date_in_fg(fg) -> str: Returns: str: Last date string in the format '%Y-%m-%d'. """ - date_max = [ - int(feature.max) - for feature in fg.statistics.feature_descriptive_statistics - if feature.feature_name == 'timestamp' - ][0] - return convert_unix_to_date(date_max) + for col in fg.statistics.content["columns"]: + if col["column"] == "timestamp": + res = col["maximum"] + return convert_unix_to_date(res) ############################################################################### @@ -146,10 +144,10 @@ def update_month_data(main_df: pd.DataFrame, month: str, year: str) -> pd.DataFr print(f"_____ Processing {month}/{year}... _____") if f"{year}{month}" in ["202206", "202207"]: - citibike = "citibike" + citibike = "citbike" else: citibike = "citibike" - url = f'https://s3.amazonaws.com/tripdata/JC-{year}{month}-{citibike}-tripdata.csv.zip' + url = f'https://s3.amazonaws.com/tripdata/{year}{month}-{citibike}-tripdata.csv.zip' print(url) filename = "data/" + url.split('/')[-1].split(".")[0] + ".csv" fn_list = filename.split(".") diff --git a/advanced_tutorials/citibike/streamlit_batch_inference_app.py b/advanced_tutorials/citibike/streamlit_batch_inference_app.py index e336ad0b..b772d534 100644 --- a/advanced_tutorials/citibike/streamlit_batch_inference_app.py +++ b/advanced_tutorials/citibike/streamlit_batch_inference_app.py @@ -1,17 +1,14 @@ from datetime import timedelta, datetime from random import sample import os +import joblib import pandas as pd -from xgboost import XGBRegressor import plotly.express as px import streamlit as st import hopsworks -from features import ( - citibike, - meteorological_measurements, -) +from features import citibike, meteorological_measurements def print_fancy_header(text, font_size=22, color="#ff5f27"): @@ -165,11 +162,7 @@ def get_model(project, model_name, file_name): if list_of_files: model_path = list_of_files[0] - # Initialize the model - model = XGBRegressor() - - # Load the model from a saved JSON file - model.load_model("/model.json") + model = joblib.load(model_path) else: if not os.path.exists(file_name): mr = project.get_model_registry() @@ -180,12 +173,8 @@ def get_model(project, model_name, file_name): EVALUATION_METRIC, SORT_METRICS_BY) model_dir = model.download() - - # Initialize the model - model = XGBRegressor() - - # Load the model from a saved JSON file - model.load_model(model_dir + "/model.json") + model = joblib.load(model_dir + f"/{file_name}") + return model print_fancy_header('\n ๐Ÿค– Getting the model...') diff --git a/advanced_tutorials/credit_scores/1_credit_scores_feature_backfill.ipynb b/advanced_tutorials/credit_scores/1_credit_scores_feature_backfill.ipynb index f3935a84..b703f6fb 100644 --- a/advanced_tutorials/credit_scores/1_credit_scores_feature_backfill.ipynb +++ b/advanced_tutorials/credit_scores/1_credit_scores_feature_backfill.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "57fda212", + "id": "c656257d", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 01: Feature Backfill\n", @@ -20,7 +20,7 @@ }, { "cell_type": "markdown", - "id": "f8aef9c3", + "id": "066cfc1d", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -29,7 +29,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a04f9f76", + "id": "c2fb6ff7", "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76ff915b", + "id": "54ef807e", "metadata": {}, "outputs": [], "source": [ @@ -57,7 +57,7 @@ }, { "cell_type": "markdown", - "id": "1e866352", + "id": "8f346331", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Loading the Data " @@ -65,7 +65,7 @@ }, { "cell_type": "markdown", - "id": "bba27dfe", + "id": "fe19b02c", "metadata": {}, "source": [ "#### โ›ณ๏ธ Application Train dataset\n", @@ -76,21 +76,18 @@ { "cell_type": "code", "execution_count": null, - "id": "db7f16d6", + "id": "f80905ab", "metadata": {}, "outputs": [], "source": [ - "applications_df = pd.read_csv(\n", - " \"https://repo.hops.works/dev/davit/credit_scores/applications.csv\",\n", - " parse_dates=['datetime'],\n", - ")\n", - "applications_df.head(3)" + "applications_df = pd.read_csv(\"https://repo.hops.works/dev/davit/credit_scores/applications.csv\")\n", + "applications_df.head()" ] }, { "cell_type": "code", "execution_count": null, - "id": "7ac4fcde", + "id": "d20080f2-8802-475c-8518-ad887d14d382", "metadata": {}, "outputs": [], "source": [ @@ -99,7 +96,7 @@ }, { "cell_type": "markdown", - "id": "67cf47dd", + "id": "c662aa9a", "metadata": {}, "source": [ "#### โ›ณ๏ธ Bureau Balance dataset\n", @@ -110,20 +107,18 @@ { "cell_type": "code", "execution_count": null, - "id": "bfbf2905", + "id": "d7786a1a", "metadata": {}, "outputs": [], "source": [ - "bureau_balances_df = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/credit_scores/bureau_balances.csv',\n", - ")[:5_000]\n", + "bureau_balances_df = pd.read_csv('https://repo.hops.works/dev/davit/credit_scores/bureau_balances.csv')\n", "bureau_balances_df.head(3)" ] }, { "cell_type": "code", "execution_count": null, - "id": "7fdb786b", + "id": "926038e8-3ed1-4895-be51-2d41ac41638e", "metadata": {}, "outputs": [], "source": [ @@ -132,7 +127,7 @@ }, { "cell_type": "markdown", - "id": "373e62be", + "id": "74ea2756", "metadata": {}, "source": [ "#### โ›ณ๏ธ Bureau Dataset\n", @@ -143,21 +138,18 @@ { "cell_type": "code", "execution_count": null, - "id": "76e83f31", + "id": "dea341fa", "metadata": {}, "outputs": [], "source": [ - "bureaus_df = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/credit_scores/bureaus.csv',\n", - " parse_dates=['datetime'],\n", - ")[:5_000]\n", + "bureaus_df = pd.read_csv('https://repo.hops.works/dev/davit/credit_scores/bureaus.csv')\n", "bureaus_df.head(3)" ] }, { "cell_type": "code", "execution_count": null, - "id": "26618c66", + "id": "8953770c-1563-44af-8f5c-2159bc233422", "metadata": {}, "outputs": [], "source": [ @@ -166,7 +158,7 @@ }, { "cell_type": "markdown", - "id": "d2c81e95", + "id": "e4ebded9", "metadata": {}, "source": [ "#### โ›ณ๏ธ Credit Card Balance Dataset\n", @@ -177,20 +169,18 @@ { "cell_type": "code", "execution_count": null, - "id": "20781cea", + "id": "987feeaf", "metadata": {}, "outputs": [], "source": [ - "credit_card_balances_df = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/credit_scores/credit_card_balances.csv',\n", - ")[:5_000]\n", + "credit_card_balances_df = pd.read_csv('https://repo.hops.works/dev/davit/credit_scores/credit_card_balances.csv')\n", "credit_card_balances_df.head(3)" ] }, { "cell_type": "code", "execution_count": null, - "id": "02401dd0", + "id": "3794cabc-f1b1-4375-86ff-7855aab2b552", "metadata": {}, "outputs": [], "source": [ @@ -199,7 +189,7 @@ }, { "cell_type": "markdown", - "id": "06ed02d7", + "id": "761f558e", "metadata": {}, "source": [ "#### โ›ณ๏ธ Installments Payments Dataset\n", @@ -210,21 +200,18 @@ { "cell_type": "code", "execution_count": null, - "id": "a30b2039", + "id": "b494b088", "metadata": {}, "outputs": [], "source": [ - "installment_payments_df = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/credit_scores/installment_payments.csv',\n", - " parse_dates=['datetime'],\n", - ")[:5_000]\n", + "installment_payments_df = pd.read_csv('https://repo.hops.works/dev/davit/credit_scores/installment_payments.csv')\n", "installment_payments_df.head(3)" ] }, { "cell_type": "code", "execution_count": null, - "id": "6d84e96d", + "id": "addb3009-7073-41fd-b176-ff9143757b10", "metadata": {}, "outputs": [], "source": [ @@ -233,7 +220,7 @@ }, { "cell_type": "markdown", - "id": "818dfd45", + "id": "d1749444", "metadata": {}, "source": [ "#### โ›ณ๏ธ POS (point of sales) and Cash Loans Balance Dataset\n", @@ -246,20 +233,18 @@ { "cell_type": "code", "execution_count": null, - "id": "0590ef5b", + "id": "5b10a16f", "metadata": {}, "outputs": [], "source": [ - "pos_cash_balances_df = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/credit_scores/pos_cash_balances.csv'\n", - ")[:5_000]\n", + "pos_cash_balances_df = pd.read_csv('https://repo.hops.works/dev/davit/credit_scores/pos_cash_balances.csv')\n", "pos_cash_balances_df.head(3)" ] }, { "cell_type": "code", "execution_count": null, - "id": "f81edfdb", + "id": "ee35a51b-0b10-4b85-8e62-837a9ab04c90", "metadata": {}, "outputs": [], "source": [ @@ -268,7 +253,7 @@ }, { "cell_type": "markdown", - "id": "f17eddb3", + "id": "8674301f", "metadata": {}, "source": [ "#### โ›ณ๏ธ Previous Application Dataset\n", @@ -281,21 +266,18 @@ { "cell_type": "code", "execution_count": null, - "id": "fb26017d", + "id": "f269dce9", "metadata": {}, "outputs": [], "source": [ - "previous_applications_df = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/credit_scores/previous_applications.csv',\n", - " parse_dates=['datetime'],\n", - ")[:5_000]\n", + "previous_applications_df = pd.read_csv('https://repo.hops.works/dev/davit/credit_scores/previous_applications.csv')\n", "previous_applications_df.head(3)" ] }, { "cell_type": "code", "execution_count": null, - "id": "e3ad79b1", + "id": "459f6a2d-2d4c-4b52-a1fd-49f9f06801dc", "metadata": {}, "outputs": [], "source": [ @@ -304,7 +286,7 @@ }, { "cell_type": "markdown", - "id": "04031bfe", + "id": "5bb1d5d4", "metadata": {}, "source": [ "---\n", @@ -314,7 +296,7 @@ }, { "cell_type": "markdown", - "id": "357a82fb", + "id": "a4388bf5", "metadata": {}, "source": [ "#### โ›ณ๏ธ Dataset with amount of previous loans" @@ -323,7 +305,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7f0ca14d", + "id": "11abd601", "metadata": {}, "outputs": [], "source": [ @@ -338,7 +320,7 @@ }, { "cell_type": "markdown", - "id": "22dd8d88", + "id": "36b74f22", "metadata": {}, "source": [ "---\n", @@ -349,7 +331,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be753565", + "id": "76110306", "metadata": {}, "outputs": [], "source": [ @@ -367,7 +349,7 @@ }, { "cell_type": "markdown", - "id": "2a19b083", + "id": "2a2c1615-3cfd-4269-92d2-9692333260f7", "metadata": {}, "source": [ "---" @@ -375,7 +357,7 @@ }, { "cell_type": "markdown", - "id": "3010ef38", + "id": "f6f79748", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " @@ -384,7 +366,7 @@ { "cell_type": "code", "execution_count": null, - "id": "40952cd2", + "id": "b8ce6369", "metadata": {}, "outputs": [], "source": [ @@ -397,7 +379,7 @@ }, { "cell_type": "markdown", - "id": "f1583bb4", + "id": "ff8f9f0b", "metadata": {}, "source": [ "---\n", @@ -413,7 +395,7 @@ }, { "cell_type": "markdown", - "id": "99a80d79", + "id": "bccf2036", "metadata": {}, "source": [ "### โ›ณ๏ธ Creating Applications Feature Group " @@ -422,7 +404,7 @@ { "cell_type": "code", "execution_count": null, - "id": "07a61adb", + "id": "a1841c22", "metadata": {}, "outputs": [], "source": [ @@ -433,12 +415,15 @@ " online_enabled=False,\n", " event_time='datetime',\n", ")\n", - "applications_fg.insert(applications_df)" + "applications_fg.insert(\n", + " applications_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "ecec6457", + "id": "a3bf21e8", "metadata": {}, "source": [ "#### โ›ณ๏ธ Bureau Balance Feature Group" @@ -447,7 +432,7 @@ { "cell_type": "code", "execution_count": null, - "id": "524e6d30", + "id": "03aef307", "metadata": {}, "outputs": [], "source": [ @@ -457,12 +442,15 @@ " primary_key=['sk_id_bureau'],\n", " online_enabled=False,\n", ")\n", - "bureau_balances_fg.insert(bureau_balances_df)" + "bureau_balances_fg.insert(\n", + " bureau_balances_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "b843a188", + "id": "f8c5d4f2", "metadata": {}, "source": [ "#### โ›ณ๏ธ Bureau Feature Group" @@ -471,7 +459,7 @@ { "cell_type": "code", "execution_count": null, - "id": "054bd543", + "id": "ccc0c9bf", "metadata": {}, "outputs": [], "source": [ @@ -482,12 +470,15 @@ " online_enabled=False,\n", " event_time='datetime',\n", ")\n", - "bureaus_fg.insert(bureaus_df)" + "bureaus_fg.insert(\n", + " bureaus_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "3aeebdbc", + "id": "f61e8d9a", "metadata": {}, "source": [ "#### โ›ณ๏ธ Previous Application Feature Group" @@ -496,7 +487,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f1563811", + "id": "6054f0c2", "metadata": {}, "outputs": [], "source": [ @@ -507,12 +498,15 @@ " online_enabled=False,\n", " event_time='datetime',\n", ")\n", - "previous_applications_fg.insert(previous_applications_df)" + "previous_applications_fg.insert(\n", + " previous_applications_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "a5f945b0", + "id": "7c96104c", "metadata": {}, "source": [ "#### โ›ณ๏ธ Pos_Cash_Balance Feature Group" @@ -521,7 +515,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b3a58faf", + "id": "16f3d825", "metadata": {}, "outputs": [], "source": [ @@ -539,7 +533,7 @@ }, { "cell_type": "markdown", - "id": "df4b62a5", + "id": "8cdbdfae", "metadata": {}, "source": [ "#### โ›ณ๏ธ Instalments Payments Feature Group" @@ -548,7 +542,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ef53f638", + "id": "1d5b3ab7", "metadata": {}, "outputs": [], "source": [ @@ -559,12 +553,15 @@ " online_enabled=False,\n", " event_time='datetime',\n", ")\n", - "installment_payments_fg.insert(installment_payments_df)" + "installment_payments_fg.insert(\n", + " installment_payments_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "f8ecce49", + "id": "07b5b3ee", "metadata": {}, "source": [ "#### โ›ณ๏ธ Credit Card Balance Feature Group" @@ -573,7 +570,7 @@ { "cell_type": "code", "execution_count": null, - "id": "731c93d2", + "id": "ef832847", "metadata": {}, "outputs": [], "source": [ @@ -583,12 +580,15 @@ " primary_key=['sk_id_prev','sk_id_curr'],\n", " online_enabled=False,\n", ")\n", - "credit_card_balances_fg.insert(credit_card_balances_df)" + "credit_card_balances_fg.insert(\n", + " credit_card_balances_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "56e9dabb", + "id": "0db06e97", "metadata": {}, "source": [ "#### โ›ณ๏ธ Previous Load Counts Feature Group" @@ -597,7 +597,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37540f47", + "id": "9dba1014", "metadata": {}, "outputs": [], "source": [ @@ -608,12 +608,15 @@ " online_enabled=False,\n", ")\n", "\n", - "previous_loan_counts_fg.insert(previous_loan_counts)" + "previous_loan_counts_fg.insert(\n", + " previous_loan_counts,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "a5d6c36a", + "id": "53239f75", "metadata": {}, "source": [ "---\n", @@ -624,7 +627,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c5cbec27", + "id": "b60c91ef", "metadata": {}, "outputs": [], "source": [ @@ -646,7 +649,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0ba3a43b", + "id": "391d53f0", "metadata": {}, "outputs": [], "source": [ @@ -662,7 +665,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3d67482", + "id": "f9c3c88e", "metadata": {}, "outputs": [], "source": [ @@ -678,7 +681,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f5291588", + "id": "d142a638", "metadata": {}, "outputs": [], "source": [ @@ -697,7 +700,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fabe58e9", + "id": "35fe1c36", "metadata": {}, "outputs": [], "source": [ @@ -720,7 +723,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d9943e37", + "id": "f391fb42", "metadata": {}, "outputs": [], "source": [ @@ -742,7 +745,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9e6c8306", + "id": "198ea486", "metadata": {}, "outputs": [], "source": [ @@ -764,7 +767,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21a04b2f", + "id": "1192adb5", "metadata": {}, "outputs": [], "source": [ @@ -789,7 +792,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4c752b39", + "id": "ef05b0f8", "metadata": {}, "outputs": [], "source": [ @@ -814,7 +817,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2dbb0b76", + "id": "092f6972", "metadata": {}, "outputs": [], "source": [ @@ -837,7 +840,7 @@ { "cell_type": "code", "execution_count": null, - "id": "826f5989", + "id": "0ea22d3b", "metadata": {}, "outputs": [], "source": [ @@ -861,7 +864,7 @@ }, { "cell_type": "markdown", - "id": "6537d223", + "id": "8f0431ac", "metadata": {}, "source": [ "---\n", @@ -873,7 +876,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -887,7 +890,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/credit_scores/2_credit_scores_feature_pipeline.ipynb b/advanced_tutorials/credit_scores/2_credit_scores_feature_pipeline.ipynb index 2e5c58f3..0e9348a9 100644 --- a/advanced_tutorials/credit_scores/2_credit_scores_feature_pipeline.ipynb +++ b/advanced_tutorials/credit_scores/2_credit_scores_feature_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "e4a4651b", + "id": "f7354b1d", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 02: Feature Pipeline\n", @@ -15,7 +15,7 @@ }, { "cell_type": "markdown", - "id": "6fc5c2aa", + "id": "39778877-81b1-431b-b3e9-b5e1f91fc07a", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c0f6efe0", + "id": "b487597a", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ }, { "cell_type": "markdown", - "id": "128d18f2", + "id": "062a6265", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " @@ -47,7 +47,7 @@ { "cell_type": "code", "execution_count": null, - "id": "264299c3", + "id": "c4aa2f9a", "metadata": {}, "outputs": [], "source": [ @@ -60,7 +60,7 @@ }, { "cell_type": "markdown", - "id": "2113f6d2", + "id": "7825f41d", "metadata": {}, "source": [ "## ๐Ÿช„ Retrieving Feature Groups" @@ -68,7 +68,7 @@ }, { "cell_type": "markdown", - "id": "7d41f6a5", + "id": "a0efc688", "metadata": {}, "source": [ "#### โ›ณ๏ธ Application Train Feature Group" @@ -77,7 +77,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5392fa62", + "id": "f6467043", "metadata": {}, "outputs": [], "source": [ @@ -92,7 +92,7 @@ }, { "cell_type": "markdown", - "id": "09c50194", + "id": "19daef3c", "metadata": {}, "source": [ "#### โ›ณ๏ธ Bureau Balance Feature Group" @@ -101,7 +101,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4407f16c", + "id": "8a8647c3", "metadata": {}, "outputs": [], "source": [ @@ -116,7 +116,7 @@ }, { "cell_type": "markdown", - "id": "1636c8ec", + "id": "a06132a4", "metadata": {}, "source": [ "#### โ›ณ๏ธ Bureau Feature Group" @@ -125,7 +125,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b4bd73a7", + "id": "29f0701b", "metadata": {}, "outputs": [], "source": [ @@ -140,7 +140,7 @@ }, { "cell_type": "markdown", - "id": "aa8d1f18", + "id": "70d72f96", "metadata": {}, "source": [ "#### โ›ณ๏ธ Credit Card Balance Feature Group" @@ -149,7 +149,7 @@ { "cell_type": "code", "execution_count": null, - "id": "132e0515", + "id": "22a67c9c", "metadata": {}, "outputs": [], "source": [ @@ -164,7 +164,7 @@ }, { "cell_type": "markdown", - "id": "680b4258", + "id": "4466e30c", "metadata": {}, "source": [ "#### โ›ณ๏ธ Installments Payments Feature Group" @@ -173,7 +173,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8a762268", + "id": "b55c6bb8", "metadata": {}, "outputs": [], "source": [ @@ -188,7 +188,7 @@ }, { "cell_type": "markdown", - "id": "1deb0620", + "id": "211c9ae4", "metadata": {}, "source": [ "#### โ›ณ๏ธ POS (point of sales) and Cash Loans Balance Feature Group" @@ -197,7 +197,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3e5424d9", + "id": "561cea06", "metadata": {}, "outputs": [], "source": [ @@ -212,7 +212,7 @@ }, { "cell_type": "markdown", - "id": "deb2d43d", + "id": "70a2ff26", "metadata": {}, "source": [ "#### โ›ณ๏ธ Previous Application Feature Group" @@ -221,7 +221,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dcb67123", + "id": "9780899b", "metadata": {}, "outputs": [], "source": [ @@ -236,7 +236,7 @@ }, { "cell_type": "markdown", - "id": "cc760910", + "id": "a7629071", "metadata": {}, "source": [ "#### โ›ณ๏ธ Previous Load Counts Feature Group" @@ -245,7 +245,7 @@ { "cell_type": "code", "execution_count": null, - "id": "546a5b4c", + "id": "5a591631", "metadata": {}, "outputs": [], "source": [ @@ -260,7 +260,7 @@ }, { "cell_type": "markdown", - "id": "94c4ba70", + "id": "bbf8ecdb", "metadata": {}, "source": [ "---\n", @@ -271,7 +271,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fb7a171f", + "id": "cd420aa0", "metadata": {}, "outputs": [], "source": [ @@ -283,7 +283,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7bc5dcba", + "id": "9991cd0e", "metadata": {}, "outputs": [], "source": [ @@ -295,7 +295,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a2e47f1a", + "id": "34ed2b23", "metadata": {}, "outputs": [], "source": [ @@ -306,7 +306,7 @@ { "cell_type": "code", "execution_count": null, - "id": "885c31d7", + "id": "0d0f30c4", "metadata": {}, "outputs": [], "source": [ @@ -318,7 +318,7 @@ { "cell_type": "code", "execution_count": null, - "id": "80007a73", + "id": "6f054238", "metadata": {}, "outputs": [], "source": [ @@ -329,7 +329,7 @@ { "cell_type": "code", "execution_count": null, - "id": "15c769bc", + "id": "3762a023", "metadata": {}, "outputs": [], "source": [ @@ -341,7 +341,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9a610bdf", + "id": "0afa4f91", "metadata": {}, "outputs": [], "source": [ @@ -352,7 +352,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c7688844", + "id": "67a6d629", "metadata": {}, "outputs": [], "source": [ @@ -364,7 +364,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fab35cbb", + "id": "ca00b80c", "metadata": {}, "outputs": [], "source": [ @@ -374,7 +374,7 @@ }, { "cell_type": "markdown", - "id": "7afca5ac", + "id": "4d0e1f50", "metadata": {}, "source": [ "### โฌ†๏ธ Uploading new data to the Feature Store" @@ -383,7 +383,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76e22b7f", + "id": "88ccf658", "metadata": {}, "outputs": [], "source": [ @@ -393,60 +393,69 @@ { "cell_type": "code", "execution_count": null, - "id": "314519ea", + "id": "a7d5e49f", "metadata": {}, "outputs": [], "source": [ - "bureau_balances_fg.insert(bureau_balances_df_generated)" + "bureau_balances_fg.insert(\n", + " bureau_balances_df_generated,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "c0af16ec", + "id": "a07c0a8d", "metadata": {}, "outputs": [], "source": [ - "bureaus_fg.insert(bureaus_df_generated)" + "bureaus_fg.insert(\n", + " bureaus_df_generated, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "610e0982", + "id": "ae679e44", "metadata": {}, "outputs": [], "source": [ - "credit_card_balances_fg.insert(credit_card_balances_df_generated)" + "credit_card_balances_fg.insert(\n", + " credit_card_balances_df_generated,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "8016add7", + "id": "f71a84e1", "metadata": {}, "outputs": [], "source": [ - "installment_payments_fg.insert(\n", - " installment_payments_df_generated,\n", - " write_options={\"wait_for_job\": True},\n", - ")" + "installment_payments_fg.insert(installment_payments_df_generated)" ] }, { "cell_type": "code", "execution_count": null, - "id": "10e5f793", + "id": "b9a1be50", "metadata": {}, "outputs": [], "source": [ - "pos_cash_balances_fg.insert(pos_cash_balances_df_generated)" + "pos_cash_balances_fg.insert(\n", + " pos_cash_balances_df_generated,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "486f3751", + "id": "18bbd6f6", "metadata": {}, "outputs": [], "source": [ @@ -456,16 +465,19 @@ { "cell_type": "code", "execution_count": null, - "id": "187819d3", + "id": "b3297c8e", "metadata": {}, "outputs": [], "source": [ - "previous_loan_counts_fg.insert(previous_loan_counts_df_generated)" + "previous_loan_counts_fg.insert(\n", + " previous_loan_counts_df_generated,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "0ca58c46", + "id": "f9b23f29", "metadata": {}, "source": [ "---\n", @@ -477,7 +489,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -491,7 +503,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/credit_scores/3_credit_scores_training_pipeline.ipynb b/advanced_tutorials/credit_scores/3_credit_scores_training_pipeline.ipynb index 4172e7da..87a91c89 100644 --- a/advanced_tutorials/credit_scores/3_credit_scores_training_pipeline.ipynb +++ b/advanced_tutorials/credit_scores/3_credit_scores_training_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "e3835d20", + "id": "ec1fb5d4", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 03: Training Pipeline\n", @@ -24,7 +24,7 @@ }, { "cell_type": "markdown", - "id": "6a039456", + "id": "d9985c8d-9000-42e8-840a-ce63b3ae8a20", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -33,20 +33,21 @@ { "cell_type": "code", "execution_count": null, - "id": "78a3bd7f", + "id": "1b129ae2", "metadata": {}, "outputs": [], "source": [ - "!pip install xgboost --quiet" + "!pip install xgboost" ] }, { "cell_type": "code", "execution_count": null, - "id": "36ef21de", + "id": "6a6e4839", "metadata": {}, "outputs": [], "source": [ + "import joblib\n", "import os\n", "\n", "import matplotlib.pyplot as plt\n", @@ -65,7 +66,7 @@ }, { "cell_type": "markdown", - "id": "7e17c271", + "id": "63e78e5c", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " @@ -74,7 +75,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a9926d65", + "id": "8e230c78", "metadata": {}, "outputs": [], "source": [ @@ -87,7 +88,7 @@ }, { "cell_type": "markdown", - "id": "a751877c", + "id": "d3b486e2", "metadata": {}, "source": [ "## ๐Ÿช„ Retrieving Feature Groups" @@ -96,7 +97,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49d2ea72", + "id": "6ef0178b", "metadata": {}, "outputs": [], "source": [ @@ -144,7 +145,7 @@ }, { "cell_type": "markdown", - "id": "68d1d7fd", + "id": "af7bc837", "metadata": {}, "source": [ "---\n", @@ -169,7 +170,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5b73ebfe", + "id": "78225ce5", "metadata": {}, "outputs": [], "source": [ @@ -179,7 +180,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e3be7448", + "id": "629d2672", "metadata": {}, "outputs": [], "source": [ @@ -189,7 +190,7 @@ { "cell_type": "code", "execution_count": null, - "id": "39e3b236", + "id": "0db3a1d3", "metadata": {}, "outputs": [], "source": [ @@ -198,7 +199,7 @@ }, { "cell_type": "markdown", - "id": "4af51378", + "id": "41890ff4", "metadata": {}, "source": [ "---\n", @@ -209,12 +210,12 @@ { "cell_type": "code", "execution_count": null, - "id": "62380318", + "id": "41c4be37", "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = bureaus_fg.select_except(['sk_id_curr','sk_id_bureau','datetime'])\\\n", + "# Build a query object \n", + "query = bureaus_fg.select_except(['sk_id_curr','sk_id_bureau','datetime'])\\\n", " .join(applications_fg.select_except(['sk_id_curr',\n", " 'datetime',\n", " 'flag_mobil',\n", @@ -233,13 +234,13 @@ " .join(credit_card_balances_fg.select_except(['sk_id_prev', 'sk_id_curr']))\\\n", " .join(previous_loan_counts_fg.select_except('sk_id_curr'))\n", "\n", - "selected_features_show5 = selected_features.show(5)\n", - "selected_features_show5" + "query_show5 = query.show(5)\n", + "query_show5" ] }, { "cell_type": "markdown", - "id": "e020793a", + "id": "258201a7", "metadata": { "tags": [] }, @@ -256,7 +257,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b4add316", + "id": "3f4173f3", "metadata": {}, "outputs": [], "source": [ @@ -266,7 +267,7 @@ }, { "cell_type": "markdown", - "id": "0e22bdc1", + "id": "1e20134b", "metadata": {}, "source": [ "We can retrieve transformation function we need .\n", @@ -279,27 +280,26 @@ { "cell_type": "code", "execution_count": null, - "id": "d4417311", + "id": "8a41e840", "metadata": {}, "outputs": [], "source": [ - "# Extracting the names of categorical columns in the 'selected_features_show5query_show5' DataFrame\n", - "cat_cols = selected_features_show5.dtypes[selected_features_show5.dtypes == 'object'].index\n", + "# Extracting the names of categorical columns in the 'query_show5' DataFrame\n", + "cat_cols = query_show5.dtypes[query_show5.dtypes == 'object'].index\n", "\n", "# Retrieving the Label Encoder transformation function from Featuretools\n", - "label_encoder = fs.get_transformation_function(name='label_encoder') \n", + "le = fs.get_transformation_function(name='label_encoder') \n", "\n", "# Creating a dictionary of transformation functions, where each categorical column is associated with the Label Encoder\n", "transformation_functions = {\n", - " col: label_encoder\n", - " for col \n", - " in cat_cols\n", + " col: le\n", + " for col in cat_cols\n", "}" ] }, { "cell_type": "markdown", - "id": "3194fda2", + "id": "5a161181", "metadata": {}, "source": [ "---\n", @@ -328,7 +328,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2973313e", + "id": "0eddfb1d", "metadata": {}, "outputs": [], "source": [ @@ -338,13 +338,13 @@ " version=1,\n", " labels=['target'],\n", " transformation_functions=transformation_functions,\n", - " query=selected_features,\n", + " query=query,\n", ")" ] }, { "cell_type": "markdown", - "id": "28671167", + "id": "5d957dae", "metadata": {}, "source": [ "---\n", @@ -381,7 +381,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bb7b350a", + "id": "b30b61c3", "metadata": {}, "outputs": [], "source": [ @@ -392,7 +392,7 @@ }, { "cell_type": "markdown", - "id": "67d287f1", + "id": "a6d47d29", "metadata": {}, "source": [ "---\n", @@ -402,7 +402,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3d07c823", + "id": "e0902530", "metadata": {}, "outputs": [], "source": [ @@ -415,7 +415,7 @@ }, { "cell_type": "markdown", - "id": "f3195458", + "id": "69c7eff1", "metadata": {}, "source": [ "---\n", @@ -425,7 +425,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b5f5b547", + "id": "393ec28c", "metadata": {}, "outputs": [], "source": [ @@ -443,7 +443,7 @@ { "cell_type": "code", "execution_count": null, - "id": "94d781e3", + "id": "896802e7", "metadata": {}, "outputs": [], "source": [ @@ -472,7 +472,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4ff26ab1", + "id": "38891567", "metadata": {}, "outputs": [], "source": [ @@ -491,7 +491,7 @@ }, { "cell_type": "markdown", - "id": "4e841906", + "id": "668f2efb", "metadata": {}, "source": [ "---\n", @@ -503,7 +503,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b1978dcb", + "id": "fd5ec387", "metadata": {}, "outputs": [], "source": [ @@ -513,7 +513,7 @@ }, { "cell_type": "markdown", - "id": "e435716f", + "id": "30b0c2a7", "metadata": {}, "source": [ "### โš™๏ธ Model Schema\n", @@ -526,7 +526,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d7863e60", + "id": "c671699c", "metadata": {}, "outputs": [], "source": [ @@ -538,10 +538,7 @@ "output_schema = Schema(y_train)\n", "\n", "# Creating a model schema\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "# Converting the model schema to a dictionary representation\n", "schema_dict = model_schema.to_dict()" @@ -549,7 +546,7 @@ }, { "cell_type": "markdown", - "id": "b68f4493", + "id": "2489db15", "metadata": {}, "source": [ "### ๐Ÿ’ฝ Save a model" @@ -558,7 +555,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1c58e284", + "id": "5400b050-a035-432c-9978-fcd42ba96854", "metadata": {}, "outputs": [], "source": [ @@ -567,8 +564,8 @@ "if os.path.isdir(model_dir) == False:\n", " os.mkdir(model_dir)\n", "\n", - "# Saving the trained XGBoost model as a json file in the model directory\n", - "xgboost_model.save_model(model_dir + \"/model.json\")\n", + "# Saving the trained XGBoost model as a joblib file in the model directory\n", + "joblib.dump(xgboost_model, model_dir + '/credit_scores_model.pkl')\n", "\n", "# Saving the confusion matrix and feature importance plots as images in the model directory\n", "figure_cm.figure.savefig(model_dir + '/confusion_matrix.png')\n", @@ -578,7 +575,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70342ce2", + "id": "ce5af23f", "metadata": {}, "outputs": [], "source": [ @@ -597,7 +594,7 @@ }, { "cell_type": "markdown", - "id": "00656e4d", + "id": "fda2c1c0", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 04: Batch Inference \n", @@ -608,7 +605,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -622,7 +619,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/credit_scores/4_credit_scores_batch_inference.ipynb b/advanced_tutorials/credit_scores/4_credit_scores_batch_inference.ipynb index fec9040c..8290b765 100644 --- a/advanced_tutorials/credit_scores/4_credit_scores_batch_inference.ipynb +++ b/advanced_tutorials/credit_scores/4_credit_scores_batch_inference.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "9a7e8c3f", + "id": "c958e52b", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 04: Batch Inference\n", @@ -16,7 +16,7 @@ }, { "cell_type": "markdown", - "id": "6406a5b4", + "id": "8855ee1a", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -25,16 +25,16 @@ { "cell_type": "code", "execution_count": null, - "id": "e85d7fa1", + "id": "019c9226", "metadata": {}, "outputs": [], "source": [ - "from xgboost import XGBClassifier" + "import joblib" ] }, { "cell_type": "markdown", - "id": "63a37311", + "id": "ce2fe8a8", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -43,7 +43,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1d91074e", + "id": "39f83bc9", "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "markdown", - "id": "895e78b9", + "id": "87485ee0", "metadata": {}, "source": [ "## โš™๏ธ Feature View Retrieval\n" @@ -65,7 +65,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0add3c12", + "id": "e622d6b4", "metadata": {}, "outputs": [], "source": [ @@ -78,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "e9dbf027", + "id": "e1dac8b6", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -87,7 +87,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a3a14916", + "id": "ca35a9f4", "metadata": {}, "outputs": [], "source": [ @@ -97,7 +97,7 @@ }, { "cell_type": "markdown", - "id": "9073c8dc", + "id": "6f3589dc", "metadata": {}, "source": [ "## ๐Ÿ“ฎ Retrieving model from Model Registry " @@ -106,7 +106,7 @@ { "cell_type": "code", "execution_count": null, - "id": "63b4b803", + "id": "6ac8014f", "metadata": {}, "outputs": [], "source": [ @@ -123,21 +123,20 @@ { "cell_type": "code", "execution_count": null, - "id": "3156cdfc", + "id": "ac68c2a0", "metadata": {}, "outputs": [], "source": [ - "# Initialize the model\n", - "model = XGBClassifier()\n", + "# Loading the XGBoost model from the saved model directory\n", + "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/credit_scores_model.pkl\")\n", "\n", - "# Load the model from a saved JSON file\n", - "model.load_model(saved_model_dir + \"/model.json\")\n", - "model" + "# Displaying the retrieved XGBoost model\n", + "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "03492b0c", + "id": "50a96ca9", "metadata": {}, "source": [ "## ๐Ÿค– Making the predictions " @@ -145,7 +144,7 @@ }, { "cell_type": "markdown", - "id": "8e610938", + "id": "de0c050d", "metadata": {}, "source": [ "### โœจ Load Batch Data" @@ -154,7 +153,7 @@ { "cell_type": "code", "execution_count": null, - "id": "93fe4ec8", + "id": "fc56ebd1", "metadata": {}, "outputs": [], "source": [ @@ -171,12 +170,12 @@ { "cell_type": "code", "execution_count": null, - "id": "2169cbdc", + "id": "fcbfef6e", "metadata": {}, "outputs": [], "source": [ "# Making predictions on the batch data using the retrieved XGBoost model\n", - "predictions = model.predict(batch_data)\n", + "predictions = retrieved_xgboost_model.predict(batch_data)\n", "\n", "# Displaying the first 10 predictions\n", "predictions[:10]" @@ -184,7 +183,7 @@ }, { "cell_type": "markdown", - "id": "e7d371d5", + "id": "89bc07f2", "metadata": {}, "source": [ "---\n", @@ -200,7 +199,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -214,7 +213,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/electricity/1_electricity_feature_backfill.ipynb b/advanced_tutorials/electricity/1_electricity_feature_backfill.ipynb index 098a88bc..7edc82cb 100644 --- a/advanced_tutorials/electricity/1_electricity_feature_backfill.ipynb +++ b/advanced_tutorials/electricity/1_electricity_feature_backfill.ipynb @@ -336,7 +336,10 @@ }, "outputs": [], "source": [ - "swedish_holidays_fg.insert(holidays_df)" + "swedish_holidays_fg.insert(\n", + " holidays_df, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { diff --git a/advanced_tutorials/electricity/2_electricity_feature_pipeline.ipynb b/advanced_tutorials/electricity/2_electricity_feature_pipeline.ipynb index fa3e08b0..0145001b 100644 --- a/advanced_tutorials/electricity/2_electricity_feature_pipeline.ipynb +++ b/advanced_tutorials/electricity/2_electricity_feature_pipeline.ipynb @@ -185,7 +185,10 @@ "outputs": [], "source": [ "# Insert data\n", - "electricity_prices_fg.insert(electricity_prices_df)" + "electricity_prices_fg.insert(\n", + " electricity_prices_df, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { diff --git a/advanced_tutorials/electricity/3_electricity_training_pipeline.ipynb b/advanced_tutorials/electricity/3_electricity_training_pipeline.ipynb index 5abdf401..7bed7506 100644 --- a/advanced_tutorials/electricity/3_electricity_training_pipeline.ipynb +++ b/advanced_tutorials/electricity/3_electricity_training_pipeline.ipynb @@ -115,8 +115,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = electricity_prices_fg.select_all()\\\n", + "fg_query = electricity_prices_fg.select_all()\\\n", " .join(\n", " meteorological_measurements_fg\\\n", " .select_except([\"timestamp\"])\n", @@ -137,8 +136,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# uncomment this if you would like to view query results\n", + "fg_query.show(5)" ] }, { @@ -216,7 +215,7 @@ " version=1,\n", " labels=[], # you will define our 'y' later manualy\n", " transformation_functions=mapping_transformers,\n", - " query=selected_features,\n", + " query=fg_query,\n", ")" ] }, diff --git a/advanced_tutorials/fraud_cheque_detection/1_feature_pipeline.ipynb b/advanced_tutorials/fraud_cheque_detection/1_feature_pipeline.ipynb deleted file mode 100644 index 6ad2ae39..00000000 --- a/advanced_tutorials/fraud_cheque_detection/1_feature_pipeline.ipynb +++ /dev/null @@ -1,1408 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "610d4489", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "c0bcaa61", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", - "\u001b[0m" - ] - } - ], - "source": [ - "!pip install -r requirements.txt -q" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c5760f50", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-05-07 12:50:06,474 INFO: generated new fontManager\n" - ] - } - ], - "source": [ - "import config\n", - "import pandas as pd\n", - "\n", - "from functions.utils import (\n", - " load_image,\n", - " show_image,\n", - " download_and_extract_zip,\n", - ")\n", - "from functions.donut import (\n", - " load_cheque_parser,\n", - " parse_text,\n", - ")\n", - "from features.cheque import (\n", - " spell_check,\n", - " amount_letter_number_match,\n", - " get_amount_match_column,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "c25e5d83", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Data Loading" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "65065778", - "metadata": {}, - "outputs": [], - "source": [ - "download_and_extract_zip(config.DOWNLOAD_URL)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e977adb3", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalid
012418Three Thousand Seven Hundred and Fifty Five3755120.pngaxisEdmee Pelletier1
121414Three Thousand One Hundred and Sixty Eight316871.pngaxisRenata Lukic1
231532Six Thousand Nine Hundred and Forty Two694276.pngaxisChelsea Watson1
34275Nine Thousand Five Hundred and Forty One9541137.pngaxisFawwaz Zuhayr Mustafa1
45524Two Thousand Nine Hundred and Twelve291226.pngaxisClarice Blanc1
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text \\\n", - "0 1 24 18 Three Thousand Seven Hundred and Fifty Five \n", - "1 2 14 14 Three Thousand One Hundred and Sixty Eight \n", - "2 3 15 32 Six Thousand Nine Hundred and Forty Two \n", - "3 4 27 5 Nine Thousand Five Hundred and Forty One \n", - "4 5 5 24 Two Thousand Nine Hundred and Twelve \n", - "\n", - " amount_in_numbers signature_file bank_name user2name valid \n", - "0 3755 120.png axis Edmee Pelletier 1 \n", - "1 3168 71.png axis Renata Lukic 1 \n", - "2 6942 76.png axis Chelsea Watson 1 \n", - "3 9541 137.png axis Fawwaz Zuhayr Mustafa 1 \n", - "4 2912 26.png axis Clarice Blanc 1 " - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = pd.read_csv('data/res.csv')\n", - "data.columns = data.columns.str.lower()\n", - "data.rename(\n", - " columns={\n", - " 'value_letters': 'amount_in_text',\n", - " 'value_numbers': 'amount_in_numbers',\n", - " }, \n", - " inplace=True,\n", - ")\n", - "data.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "88c9bf6c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "bank_name\n", - "axis 1000\n", - "Agricole 1000\n", - "Banque 1000\n", - "canara 1000\n", - "HSBC 1000\n", - "ICICI 1000\n", - "Saudi 1000\n", - "Attejari 1000\n", - "Biat 1000\n", - "Universelle 1000\n", - "Name: count, dtype: int64" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data.bank_name.value_counts()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "a08ffae4", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "valid\n", - "1 8000\n", - "0 2000\n", - "Name: count, dtype: int64" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data.valid.value_counts()" - ] - }, - { - "cell_type": "markdown", - "id": "f5822567", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€๐ŸŽจ Data Visualization" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "7bdbd2f6", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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KC0tRVtbGywWC3w+H0KhkFKeR40ahcceewwOhwMHDhxAKpXCwoUL8eyzz2L+/PnYtm0bAGDEiBGquu9f//pX/OhHP0J9fb1SdmW6VvKV29ra0NzcjIsvvhhTp05FZWUl/u3f/g27du1CV1cXFi5ciLa2Nmzfvh2PPPKIooENHjwYHo8HPT09WL9+Pfbu3auoETwIZRpgKghutxt+v19lX1mwYAFisRh+/etfY8mSJUgkEuju7kZ+fj68Xi82b96MX//618jOzsaKFSsQjUYVDZNrVmaQueiii9DS0oK+vj689NJLKrf92LFj0draqrw8pItEo1GceeaZ+PGPfwygn9aWTqfxwAMPoL29He+//z527dqFZDKJ888/H//2b/+mFLKamhq43W5s2bIFRUVFiMVi2Lx5M2pra5U3iKlgmRLy4MGDWLx4MWbOnKkO/SFDhqC6ulrNOVr8//znP+Ppp5/G6aefjgULFmDSpEkA+q2fmzdvxtSpUxGNRlFYWIi3334boVAIU6ZMwYMPPojHH38cCxcuhN1uRyQSQXt7O6qrqzVW7KVLl2Lbtm2Ix+O45JJLcOedd6pA3Orqatx2222IxWLo6urCI488gkgkgoceegi33HILampqkJWVpTw3HN+Ojg688MILeOihh7Bt2zZEIhGMGDECZWVleP3117Fp0yY0NjYCAM477zxMnToVGzZswCOPPIK///3v2LFjBy699FKcccYZiEQi+M1vfoOHHnoIVVVVuP766/HVr371/24jMHAYZMrl1157DevWrUMoFMK8efMwdOhQ3H333YoCd9111ymBPhMllaA39j//8z8xatQo3H///TCZTFi+fDlmz56Np59+GpWVlQCgSd1O5YMGRlJc7Xa7iossLi7G5MmT8aUvfQkAsGXLFtx4442YPn06xo8fj+uvvx7AoZhRWTdLZhbcsWMH3n//faUoMTvf3r178cEHHxxWcFmmmpaB8pMmTcLw4cPx4IMPYsiQIbjooovwy1/+EuXl5bj55puVQC5pS5LGJFMPp1IpjBkzBs3NzfjHP/6BefPmIRgM4nvf+x6++93v4oILLlAUO+nRpzBPgwO92KFQSClmfF53dzf27t2L3t5exUbJysrSUO55XsoMgvSgMi6USmJlZSWKi4v/9ybo/yIMReMEw2QyqawNVVVVqKioQH5+PsrLy2E2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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image1 = load_image('1.jpg')\n", - "\n", - "show_image(image1)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "9207bb77", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalid
012418Three Thousand Seven Hundred and Fifty Five3755120.pngaxisEdmee Pelletier1
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text \\\n", - "0 1 24 18 Three Thousand Seven Hundred and Fifty Five \n", - "\n", - " amount_in_numbers signature_file bank_name user2name valid \n", - "0 3755 120.png axis Edmee Pelletier 1 " - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data.head(1)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "367d510f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalid
500501441One Thousand and Five3708NanaxisGerma de Geus0
5015023831Three Hundred and Thirty Six3318NanaxisNaomi Grant0
50250335278999177.pngaxisColette Monjeau0
503504363Three Thousand and Fifty Seven3707NanaxisJiang Li Tao0
5045051327Nineteen68.pngaxisColette Monjeau0
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text \\\n", - "500 501 4 41 One Thousand and Five \n", - "501 502 38 31 Three Hundred and Thirty Six \n", - "502 503 35 27 \n", - "503 504 36 3 Three Thousand and Fifty Seven \n", - "504 505 13 27 Nineteen \n", - "\n", - " amount_in_numbers signature_file bank_name user2name valid \n", - "500 3708 Nan axis Germa de Geus 0 \n", - "501 3318 Nan axis Naomi Grant 0 \n", - "502 8999 177.png axis Colette Monjeau 0 \n", - "503 3707 Nan axis Jiang Li Tao 0 \n", - "504 68.png axis Colette Monjeau 0 " - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data[data.valid==0].head(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "38e49887", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image501 = load_image('501.jpg')\n", - "show_image(image501)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "9359ff42", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image502 = load_image('502.jpg')\n", - "show_image(image502)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "08848b90", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image503 = load_image('503.jpg')\n", - "show_image(image503)" - ] - }, - { - "cell_type": "markdown", - "id": "def821e2", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ Feature Engineering \n" - ] - }, - { - "cell_type": "markdown", - "id": "f63c2ba5", - "metadata": {}, - "source": [ - "### โ›ณ๏ธ Spell Check \n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "0c92a0c0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(True, 'three thousand seven hundred and fifty five')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spell_check('Three Thousand Seven Hundred and Fifty Five')" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "4f32a09d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(False, 'three thousand seven hundred and fifty five')" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spell_check('Threee Thousand Seven Hundred and Fifty Five')" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "aa6e373f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(True, 'for thousand seven hundred and thirty six')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spell_check('for thousand seven hundred and thirty six')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "64a54945", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(False, 'missing')" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spell_check(' ')" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "9dc26883", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(False, 'missing')" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spell_check('missing')" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "6c1699fc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalidspelling_is_correctamount_in_text_corrected
012418Three Thousand Seven Hundred and Fifty Five3755120.pngaxisEdmee Pelletier1Truethree thousand seven hundred and fifty five
121414Three Thousand One Hundred and Sixty Eight316871.pngaxisRenata Lukic1Truethree thousand one hundred and sixty eight
231532Six Thousand Nine Hundred and Forty Two694276.pngaxisChelsea Watson1Truesix thousand nine hundred and forty two
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text \\\n", - "0 1 24 18 Three Thousand Seven Hundred and Fifty Five \n", - "1 2 14 14 Three Thousand One Hundred and Sixty Eight \n", - "2 3 15 32 Six Thousand Nine Hundred and Forty Two \n", - "\n", - " amount_in_numbers signature_file bank_name user2name valid \\\n", - "0 3755 120.png axis Edmee Pelletier 1 \n", - "1 3168 71.png axis Renata Lukic 1 \n", - "2 6942 76.png axis Chelsea Watson 1 \n", - "\n", - " spelling_is_correct amount_in_text_corrected \n", - "0 True three thousand seven hundred and fifty five \n", - "1 True three thousand one hundred and sixty eight \n", - "2 True six thousand nine hundred and forty two " - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data[['spelling_is_correct', 'amount_in_text_corrected']] = data['amount_in_text'].apply(\n", - " lambda x: pd.Series(spell_check(x))\n", - ")\n", - "data.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "4362adec", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalidspelling_is_correctamount_in_text_corrected
50250335278999177.pngaxisColette Monjeau0Falsemissing
50550651798928.pngaxisEmily D. Short0Falsemissing
5075082945113149.pngaxisWafiyah Nashwa Wasem0Falsemissing
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text amount_in_numbers signature_file \\\n", - "502 503 35 27 8999 177.png \n", - "505 506 5 1 7989 28.png \n", - "507 508 29 4 5113 149.png \n", - "\n", - " bank_name user2name valid spelling_is_correct \\\n", - "502 axis Colette Monjeau 0 False \n", - "505 axis Emily D. Short 0 False \n", - "507 axis Wafiyah Nashwa Wasem 0 False \n", - "\n", - " amount_in_text_corrected \n", - "502 missing \n", - "505 missing \n", - "507 missing " - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data[(data.amount_in_text == ' ')].head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "7798f0c5", - "metadata": {}, - "source": [ - "### โ›ณ๏ธ Amount in Letter and Number Match \n" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "253c16d8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amount_letter_number_match('three thousand seven hundred and fifty five', '3755')" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "17e7799d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amount_letter_number_match('ThreeE Thousand Eight Hundred and Twenty Three', '7203')" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "a268a403", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(False, 'Amount in words is missing')" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amount_letter_number_match('missing', '3754')" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "771196e4", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(False, 'Amount in numbers is missing')" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amount_letter_number_match('Three Thousand Eight', 'missing')" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "151b4791", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalidspelling_is_correctamount_in_text_correctedamount_letter_number_match
012418Three Thousand Seven Hundred and Fifty Five3755120.pngaxisEdmee Pelletier1Truethree thousand seven hundred and fifty fiveTrue
121414Three Thousand One Hundred and Sixty Eight316871.pngaxisRenata Lukic1Truethree thousand one hundred and sixty eightTrue
231532Six Thousand Nine Hundred and Forty Two694276.pngaxisChelsea Watson1Truesix thousand nine hundred and forty twoTrue
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text \\\n", - "0 1 24 18 Three Thousand Seven Hundred and Fifty Five \n", - "1 2 14 14 Three Thousand One Hundred and Sixty Eight \n", - "2 3 15 32 Six Thousand Nine Hundred and Forty Two \n", - "\n", - " amount_in_numbers signature_file bank_name user2name valid \\\n", - "0 3755 120.png axis Edmee Pelletier 1 \n", - "1 3168 71.png axis Renata Lukic 1 \n", - "2 6942 76.png axis Chelsea Watson 1 \n", - "\n", - " spelling_is_correct amount_in_text_corrected \\\n", - "0 True three thousand seven hundred and fifty five \n", - "1 True three thousand one hundred and sixty eight \n", - "2 True six thousand nine hundred and forty two \n", - "\n", - " amount_letter_number_match \n", - "0 True \n", - "1 True \n", - "2 True " - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data['amount_letter_number_match'] = data[['amount_in_text_corrected', 'amount_in_numbers']].apply(\n", - " lambda x: get_amount_match_column(x.iloc[0], x.iloc[1]), \n", - " axis=1,\n", - ")\n", - "data.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "d7352554", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cheque_nouser1user2amount_in_textamount_in_numberssignature_filebank_nameuser2namevalidspelling_is_correctamount_in_text_correctedamount_letter_number_match
50250335278999177.pngaxisColette Monjeau0FalsemissingFalse
50550651798928.pngaxisEmily D. Short0FalsemissingFalse
5075082945113149.pngaxisWafiyah Nashwa Wasem0FalsemissingFalse
\n", - "
" - ], - "text/plain": [ - " cheque_no user1 user2 amount_in_text amount_in_numbers signature_file \\\n", - "502 503 35 27 8999 177.png \n", - "505 506 5 1 7989 28.png \n", - "507 508 29 4 5113 149.png \n", - "\n", - " bank_name user2name valid spelling_is_correct \\\n", - "502 axis Colette Monjeau 0 False \n", - "505 axis Emily D. Short 0 False \n", - "507 axis Wafiyah Nashwa Wasem 0 False \n", - "\n", - " amount_in_text_corrected amount_letter_number_match \n", - "502 missing False \n", - "505 missing False \n", - "507 missing False " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "condition = (data['spelling_is_correct'] == False) & (data['amount_letter_number_match'] == False)\n", - "\n", - "data.loc[condition, 'valid'] = 0\n", - "\n", - "data[condition].head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "fca40774", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "valid\n", - "1 6410\n", - "0 3590\n", - "Name: count, dtype: int64" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data.valid.value_counts()" - ] - }, - { - "cell_type": "markdown", - "id": "1037b491", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "57b46c7b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/11385\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "markdown", - "id": "c46a9f7b", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation " - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "84f64635", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "0b998648f22d4f599021c14a0530f243", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/10000 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: cheque_fg_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://snurran.hops.works/p/11385/jobs/named/cheque_fg_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Get or create the 'cheque_fg' feature group\n", - "cheque_fg = fs.get_or_create_feature_group(\n", - " name=\"cheque_fg\",\n", - " description='Parsed Cheque Information',\n", - " primary_key=['cheque_no'],\n", - " version=1,\n", - ")\n", - "\n", - "cheque_fg.insert(data)" - ] - }, - { - "cell_type": "markdown", - "id": "d70a5d38", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/fraud_cheque_detection/2_training_pipeline.ipynb b/advanced_tutorials/fraud_cheque_detection/2_training_pipeline.ipynb deleted file mode 100644 index a4614d71..00000000 --- a/advanced_tutorials/fraud_cheque_detection/2_training_pipeline.ipynb +++ /dev/null @@ -1,573 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "10d31d1c", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "5e1d6709", - "metadata": {}, - "outputs": [], - "source": [ - "from xgboost import XGBClassifier, plot_importance\n", - "import matplotlib.pyplot as plt\n", - "import os\n", - "from sklearn.metrics import (\n", - " accuracy_score, \n", - " precision_score, \n", - " recall_score, \n", - " f1_score, \n", - " confusion_matrix,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "9d627011", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "61c62287", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/11385\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "e5425130", - "metadata": {}, - "outputs": [], - "source": [ - "cheque_fg = fs.get_feature_group(\n", - " name=\"cheque_fg\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "848b2616", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature View Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "4cffdd7a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature view created successfully, explore it at \n", - "https://snurran.hops.works/p/11385/fs/11333/fv/cheque_fraud_detection/version/1\n" - ] - } - ], - "source": [ - "# Get or create the 'cheque_fraud_detection' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name=\"cheque_fraud_detection\",\n", - " version=1,\n", - " description='Parsed Cheque Data for Fraud Detection',\n", - " query=cheque_fg.select([\"spelling_is_correct\", \"amount_letter_number_match\", \"valid\"]),\n", - " labels=['valid'],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "3184b661", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (0.85s) \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "VersionWarning: Incremented version to `1`.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
spelling_is_correctamount_letter_number_match
0TrueFalse
1TrueTrue
2TrueTrue
\n", - "
" - ], - "text/plain": [ - " spelling_is_correct amount_letter_number_match\n", - "0 True False\n", - "1 True True\n", - "2 True True" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train, X_test, y_train, y_test = feature_view.train_test_split(\n", - " test_size=0.2\n", - ")\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "b8b05533", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
valid
00
11
21
\n", - "
" - ], - "text/plain": [ - " valid\n", - "0 0\n", - "1 1\n", - "2 1" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y_train.head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "2873a632", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Model Building \n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "0527ae99", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
XGBClassifier(base_score=None, booster=None, callbacks=None,\n",
-       "              colsample_bylevel=None, colsample_bynode=None,\n",
-       "              colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
-       "              enable_categorical=False, eval_metric=None, feature_types=None,\n",
-       "              gamma=None, grow_policy=None, importance_type=None,\n",
-       "              interaction_constraints=None, learning_rate=None, max_bin=None,\n",
-       "              max_cat_threshold=None, max_cat_to_onehot=None,\n",
-       "              max_delta_step=None, max_depth=None, max_leaves=None,\n",
-       "              min_child_weight=None, missing=nan, monotone_constraints=None,\n",
-       "              multi_strategy=None, n_estimators=None, n_jobs=None,\n",
-       "              num_parallel_tree=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "XGBClassifier(base_score=None, booster=None, callbacks=None,\n", - " colsample_bylevel=None, colsample_bynode=None,\n", - " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", - " enable_categorical=False, eval_metric=None, feature_types=None,\n", - " gamma=None, grow_policy=None, importance_type=None,\n", - " interaction_constraints=None, learning_rate=None, max_bin=None,\n", - " max_cat_threshold=None, max_cat_to_onehot=None,\n", - " max_delta_step=None, max_depth=None, max_leaves=None,\n", - " min_child_weight=None, missing=nan, monotone_constraints=None,\n", - " multi_strategy=None, n_estimators=None, n_jobs=None,\n", - " num_parallel_tree=None, random_state=None, ...)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create an instance of the XGBoost Classifier\n", - "xgb_classifier = XGBClassifier()\n", - "\n", - "# Fit the XGBoost Classifier to the training data\n", - "xgb_classifier.fit(X_train, y_train)" - ] - }, - { - "cell_type": "markdown", - "id": "e5f35c0e", - "metadata": {}, - "source": [ - "## โš–๏ธ Model Validation " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "48dcd543", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "โ›ณ๏ธ Accuracy: 0.96\n", - "โ›ณ๏ธ Precision: 0.95\n", - "โ›ณ๏ธ Recall: 0.97\n", - "โ›ณ๏ธ F1 Score: 0.95\n", - "โ›ณ๏ธ Confusion Matrix:\n", - "[[ 746 0]\n", - " [ 86 1168]]\n" - ] - } - ], - "source": [ - "# Make predictions on the testing set\n", - "y_pred = xgb_classifier.predict(X_test)\n", - "\n", - "# Calculate metrics\n", - "accuracy = accuracy_score(y_test, y_pred)\n", - "precision = precision_score(y_test, y_pred, average='macro')\n", - "recall = recall_score(y_test, y_pred, average='macro')\n", - "f1 = f1_score(y_test, y_pred, average='macro')\n", - "\n", - "# Optionally, display a confusion matrix\n", - "cm = confusion_matrix(y_test, y_pred)\n", - "\n", - "# Print the metrics\n", - "print(f\"โ›ณ๏ธ Accuracy: {accuracy:.2f}\")\n", - "print(f\"โ›ณ๏ธ Precision: {precision:.2f}\")\n", - "print(f\"โ›ณ๏ธ Recall: {recall:.2f}\")\n", - "print(f\"โ›ณ๏ธ F1 Score: {f1:.2f}\")\n", - "print(f\"โ›ณ๏ธ Confusion Matrix:\\n{cm}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "d7f3bdc2", - "metadata": {}, - "outputs": [], - "source": [ - "# Creating a directory for the model artifacts if it doesn't exist\n", - "model_dir = \"cheque_fraud_detection_model\"\n", - "if not os.path.exists(model_dir):\n", - " os.mkdir(model_dir)\n", - " \n", - "images_dir = model_dir + \"/images\"\n", - "if not os.path.exists(images_dir):\n", - " os.mkdir(images_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "cb8d4756", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvUAAAHHCAYAAAA/GKe2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEXElEQVR4nO3deVgVdf//8dcB2TeBUMQQUHDf19tcSxOXLJdyawFTu03MXMslQbSkTFPLUtM7/VYubZZlam6opeldpmaamAtpt3prpiKSipz5/eGPc3cEZdXD2PNxXeeKMzNn5j3vM8mLOZ+ZYzEMwxAAAAAA03JydAEAAAAAioZQDwAAAJgcoR4AAAAwOUI9AAAAYHKEegAAAMDkCPUAAACAyRHqAQAAAJMj1AMAAAAmR6gHAAAATI5QDwBACbFw4UJZLBalpqY6uhQAJkOoBwA4THaIze0xevToW7LNrVu3asKECTp37twtWf/fWUZGhiZMmKCNGzc6uhTgb6eUowsAAGDixImKiIiwm1azZs1bsq2tW7cqMTFRsbGxKl269C3ZRmE9/vjj6tWrl9zc3BxdSqFkZGQoMTFRktS6dWvHFgP8zRDqAQAO16FDBzVs2NDRZRTJxYsX5eXlVaR1ODs7y9nZuZgqun2sVquuXLni6DKAvzWG3wAASrxVq1apRYsW8vLyko+Pjzp16qS9e/faLfPjjz8qNjZWFStWlLu7u4KDg/Xkk0/qzJkztmUmTJigUaNGSZIiIiJsQ31SU1OVmpoqi8WihQsX5ti+xWLRhAkT7NZjsVi0b98+9enTR/7+/mrevLlt/vvvv68GDRrIw8NDAQEB6tWrl44dO5bnfuY2pj48PFwPPPCANm7cqIYNG8rDw0O1atWyDXFZtmyZatWqJXd3dzVo0EA7d+60W2dsbKy8vb11+PBhRUdHy8vLSyEhIZo4caIMw7Bb9uLFixoxYoRCQ0Pl5uamKlWqaOrUqTmWs1gsGjx4sBYtWqQaNWrIzc1Nc+bMUVBQkCQpMTHR1tvsvuXn/flrbw8ePGj7NMXPz099+/ZVRkZGjp69//77aty4sTw9PeXv76+WLVtqzZo1dsvk5/gBzI4z9QAAhzt//rx+//13u2l33XWXJOm9995TTEyMoqOj9corrygjI0OzZ89W8+bNtXPnToWHh0uS1q5dq8OHD6tv374KDg7W3r179fbbb2vv3r3atm2bLBaLunXrpgMHDmjJkiWaPn26bRtBQUE6ffp0get+5JFHFBUVpcmTJ9uC70svvaTx48erR48e6t+/v06fPq033nhDLVu21M6dOws15OfgwYPq06eP/vnPf+qxxx7T1KlT1blzZ82ZM0djx47VoEGDJElJSUnq0aOHUlJS5OT0v/N2WVlZat++vf7xj39oypQpWr16tRISEnT16lVNnDhRkmQYhh588EElJyerX79+qlu3rr766iuNGjVK//nPfzR9+nS7mjZs2KAPP/xQgwcP1l133aU6depo9uzZevrpp9W1a1d169ZNklS7dm1J+Xt//qpHjx6KiIhQUlKSfvjhB82fP19lypTRK6+8YlsmMTFREyZM0D333KOJEyfK1dVV27dv14YNG9SuXTtJ+T9+ANMzAABwkAULFhiScn0YhmFcuHDBKF26tDFgwAC71508edLw8/Ozm56RkZFj/UuWLDEkGZs3b7ZNe/XVVw1JxpEjR+yWPXLkiCHJWLBgQY71SDISEhJszxMSEgxJRu/eve2WS01NNZydnY2XXnrJbvqePXuMUqVK5Zh+o378tbawsDBDkrF161bbtK+++sqQZHh4eBi//vqrbfrcuXMNSUZycrJtWkxMjCHJeOaZZ2zTrFar0alTJ8PV1dU4ffq0YRiG8dlnnxmSjBdffNGupocfftiwWCzGwYMH7frh5ORk7N27127Z06dP5+hVtvy+P9m9ffLJJ+2W7dq1qxEYGGh7/ssvvxhOTk5G165djaysLLtlrVarYRgFO34As2P4DQDA4d58802tXbvW7iFdO7t77tw59e7dW7///rvt4ezsrCZNmig5Odm2Dg8PD9vPly5d0u+//65//OMfkqQffvjhltQ9cOBAu+fLli2T1WpVjx497OoNDg5WVFSUXb0FUb16dTVt2tT2vEmTJpKk++67TxUqVMgx/fDhwznWMXjwYNvP2cNnrly5onXr1kmSVq5cKWdnZw0ZMsTudSNGjJBhGFq1apXd9FatWql69er53oeCvj/X97ZFixY6c+aM0tLSJEmfffaZrFar4uPj7T6VyN4/qWDHD2B2DL8BADhc48aNc71Q9pdffpF0LbzmxtfX1/bzH3/8ocTERC1dulSnTp2yW+78+fPFWO3/XH/Hnl9++UWGYSgqKirX5V1cXAq1nb8G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33//XdK1TwI2bdqkmTNn2raRmpqqe++9V5Lk7+8vi8Wi2NhY234nJSUpIiJCHh4eqlOnjj7++OMc+71q1So1aNBAbm5u+uabb25aX/YQmPfee0/h4eHy8/NTr169dOHCBdsy4eHhmjFjht3r6tatqwkTJtieWywWzZ07Vw888IA8PT1VrVo1ffvttzp48KBat24tLy8v3XPPPbke7HPnzlVoaKg8PT3Vo0ePHAf3/PnzVa1aNbm7u6tq1ap66623bPOyj6EPPvhArVq1kru7uxYtWnTTfc5+71esWKEqVarI09NTDz/8sDIyMvR///d/Cg8Pl7+/v4YMGaKsrCzb69577z01bNhQPj4+Cg4OVp8+fXTq1ClbHTd736ZMmaLIyEi5ubmpQoUKeumll+xqOnz4sO699155enqqTp06+vbbb2+6DwAA4PbIziUBAQG2affcc48++OAD/fHHH7JarVq6dKkuXbqkmjVr5rqOK1euaMeOHWrbtq1tmpOTk1q3bl2gWhx6mvbixYsaPny4ateurfT0dMXHx6tr1652Y4gTEhI0Y8YMVahQQU8++aT69OkjHx8fzZw50xb04uPjNXv2bEnSzJkzNW3aNM2dO1f16tXTO++8owcffFB79+5VVFRUvmvLyMjQ1KlT9d5778nJyUmPPfaYRo4cqUWLFmnkyJH6+eeflZaWpgULFkiyfzPz49y5c7rvvvvUv39/TZ8+XX/++aeef/559ejRQxs2bNDMmTN14MAB1axZUxMnTpQkBQUF6ZNPPlH37t2VkpIiX19feXh4SLo2xuv999/XnDlzFBUVpc2bN+uxxx5TUFCQWrVqZdvu6NGjNXXqVFWsWFH+/v551nno0CF99tlnWrFihc6ePasePXro5ZdfzhE88zJp0iS99tpreu211/T888+rT58+qlixosaMGWN7bwcPHqxVq1bZXnPw4EF9+OGH+uKLL5SWlqZ+/fpp0KBBtmC+aNEixcfHa9asWapXr5527typAQMGyMvLSzExMXb7PG3aNNWrV0/u7u551pqRkaHXX39dS5cu1YULF9StWzd17dpVpUuX1sqVK3X48GF1795dzZo1U8+ePSVd+wRg0qRJqlKlik6dOqXhw4crNjZWK1euVGho6A3ftzFjxmjevHmaPn26mjdvrhMnTmj//v129YwbN05Tp05VVFSUxo0b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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plotting feature importances using the plot_importance function from XGBoost\n", - "plot_importance(xgb_classifier)\n", - "\n", - "feature_importance_path = images_dir + \"/feature_importance.png\"\n", - "\n", - "plt.savefig(feature_importance_path)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "6ca65e8c", - "metadata": {}, - "source": [ - "## ๐Ÿ—„ Model Registry " - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "fc4e83db", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "# Retrieve the model registry\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "8134ed6b", - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "# Create input and output schemas using the 'Schema' class for features and target variable\n", - "input_schema = Schema(X_train)\n", - "output_schema = Schema(y_train)\n", - "\n", - "# Create a model schema using 'ModelSchema' with the input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", - "\n", - "# Convert the model schema to a dictionary representation\n", - "schema_dict = model_schema.to_dict()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "405f246b", - "metadata": {}, - "outputs": [], - "source": [ - "xgb_classifier.save_model(model_dir + \"/model.json\")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "7887086d", - "metadata": {}, - "outputs": [], - "source": [ - "res_dict = { \n", - " \"Accuracy\": str(round(accuracy, 2)),\n", - " \"Precision\": str(round(precision, 2)),\n", - " \"Recall\": str(round(recall, 2)),\n", - " \"F1 Score\": str(round(f1, 2)),\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "80c9ad93", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "e66c24a393464c25b38c2ed5b76e14c4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/6 [00:00 ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "8bed2e2a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n", - "\u001b[0m" - ] - } - ], - "source": [ - "!pip install -r requirements.txt -q" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "e1343eb1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2024-05-14 20:34:55,326 INFO: generated new fontManager\n" - ] - } - ], - "source": [ - "from xgboost import XGBClassifier\n", - "import pandas as pd\n", - "\n", - "from functions.utils import (\n", - " load_image,\n", - " show_image\n", - ")\n", - "from functions.donut import (\n", - " load_cheque_parser,\n", - " parse_text,\n", - " evaluate_cheque_fraud,\n", - ")\n", - "from functions.llm_chain import(\n", - " get_llm_chain,\n", - " generate_response,\n", - " format_response,\n", - ")\n", - "from features.cheque_validation import get_cheque_ids\n", - "\n", - "import config\n", - "\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "id": "a9fd8c23", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "c34837f2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/11385\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "markdown", - "id": "a3569ef7", - "metadata": {}, - "source": [ - "## ๐Ÿช Download the Fraud Detection Model from Model Registry " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "fbecf2c2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "Downloading model artifact (1 dirs, 5 files)... DONE\r" - ] - } - ], - "source": [ - "mr = project.get_model_registry()\n", - "\n", - "retrieved_model = mr.get_model(\n", - " name=\"cheque_fraud_detection_model\",\n", - " version=1,\n", - ")\n", - "\n", - "# Download the saved model artifacts to a local directory\n", - "saved_model_dir = retrieved_model.download()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "1f819625", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
XGBClassifier(base_score='6.4060706E-1', booster='gbtree', callbacks=None,\n",
-       "              colsample_bylevel=None, colsample_bynode=None,\n",
-       "              colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
-       "              enable_categorical=False, eval_metric=None,\n",
-       "              feature_types=['i', 'i'], gamma=None, grow_policy=None,\n",
-       "              importance_type=None, interaction_constraints=None,\n",
-       "              learning_rate=None, max_bin=None, max_cat_threshold=None,\n",
-       "              max_cat_to_onehot=None, max_delta_step=None, max_depth=None,\n",
-       "              max_leaves=None, min_child_weight=None, missing=nan,\n",
-       "              monotone_constraints=None, multi_strategy=None, n_estimators=None,\n",
-       "              n_jobs=None, num_parallel_tree=None, random_state=None, ...)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ], - "text/plain": [ - "XGBClassifier(base_score='6.4060706E-1', booster='gbtree', callbacks=None,\n", - " colsample_bylevel=None, colsample_bynode=None,\n", - " colsample_bytree=None, device=None, early_stopping_rounds=None,\n", - " enable_categorical=False, eval_metric=None,\n", - " feature_types=['i', 'i'], gamma=None, grow_policy=None,\n", - " importance_type=None, interaction_constraints=None,\n", - " learning_rate=None, max_bin=None, max_cat_threshold=None,\n", - " max_cat_to_onehot=None, max_delta_step=None, max_depth=None,\n", - " max_leaves=None, min_child_weight=None, missing=nan,\n", - " monotone_constraints=None, multi_strategy=None, n_estimators=None,\n", - " n_jobs=None, num_parallel_tree=None, random_state=None, ...)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_fraud_detection = XGBClassifier()\n", - "\n", - "model_fraud_detection.load_model(saved_model_dir + \"/model.json\")\n", - "\n", - "model_fraud_detection" - ] - }, - { - "cell_type": "markdown", - "id": "8e4032ca", - "metadata": {}, - "source": [ - "## ๐Ÿฉ Donut Model Loading \n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "13efd4a6", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DeprecationWarning: `np.bool8` is a deprecated alias for `np.bool_`. (Deprecated NumPy 1.24)\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "897f241321c24306b798e1bf61e30d3f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "preprocessor_config.json: 0%| | 0.00/361 [00:00 ๐Ÿš€ Cheque Text Parsing \n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "3752b514", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'amt_in_words': 'Three Thousand Seven Hundred and Eighty Five', 'amt_in_figures': '3755', 'payee_name': 'Edmee Pelletier', 'bank_name': 'AXIS BANK', 'cheque_date': '06/05/22'}\n" - ] - }, - { - "data": { - "image/png": "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KC0tRVtbGywWC3w+H0KhkFKeR40ahcceewwOhwMHDhxAKpXCwoUL8eyzz2L+/PnYtm0bAGDEiBGquu9f//pX/OhHP0J9fb1SdmW6VvKV29ra0NzcjIsvvhhTp05FZWUl/u3f/g27du1CV1cXFi5ciLa2Nmzfvh2PPPKIooENHjwYHo8HPT09WL9+Pfbu3auoETwIZRpgKghutxt+v19lX1mwYAFisRh+/etfY8mSJUgkEuju7kZ+fj68Xi82b96MX//618jOzsaKFSsQjUYVDZNrVmaQueiii9DS0oK+vj689NJLKrf92LFj0draqrw8pItEo1GceeaZ+PGPfwygn9aWTqfxwAMPoL29He+//z527dqFZDKJ888/H//2b/+mFLKamhq43W5s2bIFRUVFiMVi2Lx5M2pra5U3iKlgmRLy4MGDWLx4MWbOnKkO/SFDhqC6ulrNOVr8//znP+Ppp5/G6aefjgULFmDSpEkA+q2fmzdvxtSpUxGNRlFYWIi3334boVAIU6ZMwYMPPojHH38cCxcuhN1uRyQSQXt7O6qrqzVW7KVLl2Lbtm2Ix+O45JJLcOedd6pA3Orqatx2222IxWLo6urCI488gkgkgoceegi33HILampqkJWVpTw3HN+Ojg688MILeOihh7Bt2zZEIhGMGDECZWVleP3117Fp0yY0NjYCAM477zxMnToVGzZswCOPPIK///3v2LFjBy699FKcccYZiEQi+M1vfoOHHnoIVVVVuP766/HVr371/24jMHAYZMrl1157DevWrUMoFMK8efMwdOhQ3H333YoCd9111ymBPhMllaA39j//8z8xatQo3H///TCZTFi+fDlmz56Np59+GpWVlQCgSd1O5YMGRlJc7Xa7iossLi7G5MmT8aUvfQkAsGXLFtx4442YPn06xo8fj+uvvx7AoZhRWTdLZhbcsWMH3n//faUoMTvf3r178cEHHxxWcFmmmpaB8pMmTcLw4cPx4IMPYsiQIbjooovwy1/+EuXl5bj55puVQC5pS5LGJFMPp1IpjBkzBs3NzfjHP/6BefPmIRgM4nvf+x6++93v4oILLlAUO+nRpzBPgwO92KFQSClmfF53dzf27t2L3t5exUbJysrSUO55XsoMgvSgMi6USmJlZSWKi4v/9ybo/yIMReMEw2QyqawNVVVVqKioQH5+PsrLy2E2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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image1 = load_image('1.jpg')\n", - "\n", - "parsed_text1 = parse_text(\n", - " image1, \n", - " processor, \n", - " model_parser,\n", - ")\n", - "print(parsed_text1)\n", - "\n", - "show_image(image1)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "e1f40889", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'amt_in_words': 'Three Thousand One Hundred and Sixty Eight', 'amt_in_figures': '3168', 'payee_name': 'Renata Lukic', 'bank_name': 'AXIS BANK', 'cheque_date': '06/05/22'}\n" - ] - }, - { - "data": { - "image/png": "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jAyYTCaUl5fjggsugFarRU9PDx577DF0dXUhGo2itLRUFJQ899xzhRX0qaeeEnNqz549wmr16KOPor6+Hp9//jmqq6tF/wDA7t278eKLLyI7OxtutxsFBQUYPXo0SkpK4HA48Otf/xparRbf+c530N3djcrKSixZskQUr7zvvvuEAmSz2bBkyRJYLBb853/+J4YOHYrCwkLcd999GDduHKxWKz766CPodP2pvi+77DKsW7cO4XAYl112GT7//HOsXbsWWVlZ2LJlCw4cOCAKh6WlpeG8884Tno+f/exniMViyMrKwvnnn4/Dhw+LVM5UxPR73/ueCHzds2cP+vr64Pf7MX/+fGRmZsJqteL111/H2Wefjfnz5+O3v/0tfD4fvvOd78DpdKKjowN//etfsXPnTvT09CCZTOLCCy+EzWbDmjVr8PTTTyMvLw/3338/LrvsMmRkZOAvf/kLnE4nMjIyMH36dNxwww0oKiqC3+/HkiVL8Pe//x0ul0t4fC644AJs374dK1aswOuvv44f//jHGDVqFFauXIm1a9di3bp10Gg0mD59Os4991w8//zzMJlMKCoqQnV1Nc4//3xMnDgRyWQS27dvx89//nOMGTMGfr8f+/fvx/333w+dTofPPvsM9fX1MJlMGDp0KPx+vxBg/vCHP6ChoQE///nPsX79ejQ1NaG8vBwbNmxAJBLB6tWrMXnyZDidTjz//PO46aabUFJSgp/85Cd45JFHMGPGDPzwhz/EokWLMG7cODz//POYPHkyJk6cKMbimwSuBHBBmhtCaF8jkNDt9/sVGYzIgEPUW/rHU0CrqdH07JkzZx6jmGg0GlFAmLwPBNqHOeVPzTSg/bujowNWqxUul0tBA6e/81hPOsPJsETUbK1Wq0ggwd+De+7pDKOkM/QOdA7Mnz9f0KUuvfRSRdtJPiJaMCXE4WcRl9OCwaCowUPnHwed41yY5+OSijrNDWUnI4RzeqLFYlH0k5raRPIfGXHUIAMuvze1nxTMZDKpYHzwFObk6adnkRxL48rbR9d8GeXqX4EzVtGgTYK7rbglnvOfuSYIKFM10kakDjCkScvjLnihHVogRGvhm5gafLER9YW74evq6vDCCy8gFoshLy8Pt9xyC1auXIn6+nrMnTsXfr8fXq9XCJVdXV342c9+hosvvhiXX345HnvsMTQ3NyMej+NX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BXh6V14tnIQeSs1L13LlglsiU3kk1F47ejYZZNR7LQlkdB23aFKf0ed0PnDlic8xvj74HCbBjwedSpw68HlLXP3Kykqx/g0GA7KyskSyCvUYq3/m+2xbWxsCgYCgM7rdblGLK5FICGWWFPpUxeL0er1I+EKF5egfp/qo9wDu8QNwDI2R78n8nejeXHDmHmo+twGld5fuy9+PqLDcOKQ2cnBDDfUhj8mg7G38Gno2nWG0H6nPOQ5usFC/h9rbzdtF+za9k5qhkspocyZAUqdOIVJNGC5g8QWmdi2ezDPUwpOacnW8+w3URrXrT/2/Whjin6ktHanuof6cCwUDeWAkTj34+KnnrVpA02q14rDhMTz0XT7X1X+j/2kT54cTB1dY1X9Xr4NUmzg/bLinjreRkIommApcAUh16PC2DLQeUrWX7x1fBG4ASLU2qZ2p/kb/q5WmVErF8fqAX8cP2IHay9txvPur6Uap3pW/H38nGptU+5H6sE81Nqk+5/u5WujgfcHvwd8j1fxUU0Bobp+JQsg3Beq5ZDKZMH78eABHMzeR4szneqozkAu6Go0GBQUFCsH9eHsKAIUAPFA71fNPfQ/1d4839wZaT6loh2pPrnqvIHDZQp2IQ723H69N9K5qaiVdo96j1FDvuan20lTvq36nVOdTqp/PREiPxikEP9AGcnOrLfsDuTnVi/Vk7p/qHifSli9q4/HueTJtP9l2Spx6HG/ensy1A21PJzMHTqQtA83tE73+iw60r2JNpPqO+poTvefx2vpF91TjRPaFgYSSgdqr/vlk7/lF75Hqvl/03BNt1/H64Kv4OdUz1O053ucSpxYnu15OZE6e7L2/zNzn7fmiz0/k/sfb509kL/8yP3/Re5xIGwfaV9XtHOieX3TtF31+JkIqGhISEhISEhISEhISXznObH+MhISEhISEhISEhMRpCaloSEhISEhISEhISEh85ZCKhoSEhISEhISEhITEVw6paEhISEhISEhISEhIfOWQioaEhISEhISEhISExFcOqWhISEhISEhISEhISHzlkIqGhISEhISEhISEhMRXDqloSEhISEhISEhISEh85ZCKhoSEhISEhISEhITEVw79qW6AxL8GX1TWnv6nv9H/xysUn0wmFfdS3/t0wPHeO5FIQKPRQKPRiHf5Mu3nz1D3Y6pnS0hISEhISHwxBpJR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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image2 = load_image('2.jpg')\n", - "\n", - "parsed_text2 = parse_text(\n", - " image2, \n", - " processor, \n", - " model_parser,\n", - ")\n", - "print(parsed_text2)\n", - "\n", - "show_image(image2)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "d73d918b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'amt_in_words': 'Three Hundred and Thirty Six', 'amt_in_figures': '3318', 'payee_name': 'Naomi Grant', 'bank_name': 'AXIS BANK', 'cheque_date': '06/05/22'}\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image502 = load_image('502.jpg')\n", - "\n", - "parsed_text502 = parse_text(\n", - " image502, \n", - " processor, \n", - " model_parser,\n", - ")\n", - "print(parsed_text502)\n", - "\n", - "show_image(image502)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "c78caf91", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'amt_in_words': 'missing', 'amt_in_figures': '8999', 'payee_name': 'Colette Monjeau', 'bank_name': 'AXIS BANK', 'cheque_date': '06/05/22'}\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "image503 = load_image('503.jpg')\n", - "\n", - "parsed_text503 = parse_text(\n", - " image503, \n", - " processor, \n", - " model_parser,\n", - ")\n", - "print(parsed_text503)\n", - "\n", - "show_image(image503)" - ] - }, - { - "cell_type": "markdown", - "id": "5eaf39ca", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€โš–๏ธ Check Evaluation \n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "1418a08c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('fraud',\n", - " 'Spelling is correct: True',\n", - " 'Numeric and alphabetic values match: False')" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "evaluate_cheque_fraud(\n", - " parsed_text1, \n", - " model_fraud_detection,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "de7e3d92", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('valid',\n", - " 'Spelling is correct: True',\n", - " 'Numeric and alphabetic values match: True')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "evaluate_cheque_fraud(\n", - " parsed_text2, \n", - " model_fraud_detection,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "fa656a86", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('valid',\n", - " 'Spelling is correct: True',\n", - " 'Numeric and alphabetic values match: True')" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "image3 = load_image('3.jpg')\n", - "\n", - "parsed_text3 = parse_text(\n", - " image3, \n", - " processor, \n", - " model_parser,\n", - ")\n", - "\n", - "evaluate_cheque_fraud(\n", - " parsed_text3, \n", - " model_fraud_detection,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "3bc9afe8", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('fraud',\n", - " 'Spelling is correct: True',\n", - " 'Numeric and alphabetic values match: False')" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "evaluate_cheque_fraud(\n", - " parsed_text502, \n", - " model_fraud_detection,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "b91d0b40", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('fraud',\n", - " 'Spelling is correct: False',\n", - " \"Numeric and alphabetic values match: (False, 'Amount in words is missing')\")" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "evaluate_cheque_fraud(\n", - " parsed_text503, \n", - " model_fraud_detection,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "4f8f7c7b", - "metadata": {}, - "source": [ - "## ๐Ÿ”— LLM Chain Loading \n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "da9bb569", - "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "๐Ÿ”‘ Enter your HuggingFace API key: ยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยทยท\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "3e1fe0d2ef6e4b34a816e86005a35597", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "tokenizer_config.json: 0%| | 0.00/51.0k [00:00๐Ÿš€ Inference \n" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "e60661ec", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "๐Ÿ“– Context:\n", - "Amount in words: Three Thousand One Hundred and Sixty Eight\n", - "Amount in numbers: 3168\n", - "Spelling is correct: True\n", - "Numeric and alphabetic values match: True\n", - "Verdict: valid\n", - "----------\n", - "\n", - "Valid | The cheque is considered valid because the amount in words \"Three Thousand One Hundred and Sixty Eight\" matches the amount in numbers 3168 and the spelling is correct.\n" - ] - } - ], - "source": [ - "response = generate_response(\n", - " '2.jpg', \n", - " processor, \n", - " model_parser, \n", - " model_fraud_detection, \n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "232f8e4b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "๐Ÿ“– Context:\n", - "Amount in words: Six Thousand Nine Hundred and Forty Two\n", - "Amount in numbers: 6942\n", - "Spelling is correct: True\n", - "Numeric and alphabetic values match: True\n", - "Verdict: valid\n", - "----------\n", - "\n", - "Valid | The cheque is considered valid because the amount in words \"Six Thousand Nine Hundred and Forty Two\" matches the amount in numbers 6942 and the spelling is correct.\n" - ] - } - ], - "source": [ - "response = generate_response(\n", - " '3.jpg', \n", - " processor, \n", - " model_parser, \n", - " model_fraud_detection, \n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "7795f95d", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "๐Ÿ“– Context:\n", - "Amount in words: Three Hundred and Thirty Six\n", - "Amount in numbers: 3318\n", - "Spelling is correct: True\n", - "Numeric and alphabetic values match: False\n", - "Verdict: fraud\n", - "----------\n", - "\n", - "Fraud | The cheque is fraudulent due to a mismatch between the numeric and alphabetic values. The amount in words is \"Three Hundred and Thirty Six\", while the amount in numbers is 3318. The discrepancy between the two values suggests that the cheque has been tampered with, making it a fraudulent transaction.\n" - ] - } - ], - "source": [ - "response = generate_response(\n", - " '502.jpg', \n", - " processor, \n", - " model_parser, \n", - " model_fraud_detection, \n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "print(response)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "b8897a01", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "๐Ÿ“– Context:\n", - "Amount in words: missing\n", - "Amount in numbers: 8999\n", - "Spelling is correct: False\n", - "Numeric and alphabetic values match: (False, 'Amount in words is missing')\n", - "Verdict: fraud\n", - "----------\n", - "\n", - "Fraud | The cheque is considered fraudulent because the amount in words is missing, which is a crucial detail that should be included in a valid cheque.\n" - ] - } - ], - "source": [ - "response = generate_response(\n", - " '503.jpg', \n", - " processor, \n", - " model_parser, \n", - " model_fraud_detection, \n", - " llm_chain,\n", - " verbose=True,\n", - ")\n", - "print(response)" - ] - }, - { - "cell_type": "markdown", - "id": "c67483cf", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Batch Inference \n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "6953f9a6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['1.jpg',\n", - " '10.jpg',\n", - " '100.jpg',\n", - " '1000.jpg',\n", - " '1001.jpg',\n", - " '1002.jpg',\n", - " '1003.jpg',\n", - " '1004.jpg',\n", - " '1005.jpg',\n", - " '1006.jpg',\n", - " '1007.jpg',\n", - " '1008.jpg',\n", - " '1009.jpg',\n", - " '101.jpg',\n", - " '1010.jpg']" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from os import listdir\n", - "from os.path import isfile, join\n", - "\n", - "FOLDER_NAME = 'cheques_batch/'\n", - "\n", - "cheque_names = [image for image in listdir(FOLDER_NAME)]\n", - "cheque_names" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cec1a184", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "--- Logging error ---\n", - "Traceback (most recent call last):\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/logging/__init__.py\", line 1100, in emit\n", - " msg = self.format(record)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/logging/__init__.py\", line 943, in format\n", - " return fmt.format(record)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/logging/__init__.py\", line 678, in format\n", - " record.message = record.getMessage()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/logging/__init__.py\", line 368, in getMessage\n", - " msg = msg % self.args\n", - "TypeError: not all arguments converted during string formatting\n", - "Call stack:\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/runpy.py\", line 196, in _run_module_as_main\n", - " return _run_code(code, main_globals, None,\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/runpy.py\", line 86, in _run_code\n", - " exec(code, run_globals)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel_launcher.py\", line 16, in \n", - " app.launch_new_instance()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/traitlets/config/application.py\", line 1043, in launch_instance\n", - " app.start()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/kernelapp.py\", line 612, in start\n", - " self.io_loop.start()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/platform/asyncio.py\", line 199, in start\n", - " self.asyncio_loop.run_forever()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/asyncio/base_events.py\", line 603, in run_forever\n", - " self._run_once()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/nest_asyncio.py\", line 133, in _run_once\n", - " handle._run()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/asyncio/events.py\", line 80, in _run\n", - " self._context.run(self._callback, *self._args)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/ioloop.py\", line 688, in \n", - " lambda f: self._run_callback(functools.partial(callback, future))\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/ioloop.py\", line 741, in _run_callback\n", - " ret = callback()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 814, in inner\n", - " self.ctx_run(self.run)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 775, in run\n", - " yielded = self.gen.send(value)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 381, in dispatch_queue\n", - " yield self.process_one()\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 250, in wrapper\n", - " runner = Runner(ctx_run, result, future, yielded)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 741, in __init__\n", - " self.ctx_run(self.run)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 775, in run\n", - " yielded = self.gen.send(value)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 365, in process_one\n", - " yield gen.maybe_future(dispatch(*args))\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 234, in wrapper\n", - " yielded = ctx_run(next, result)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 268, in dispatch_shell\n", - " yield gen.maybe_future(handler(stream, idents, msg))\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 234, in wrapper\n", - " yielded = ctx_run(next, result)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/kernelbase.py\", line 543, in execute_request\n", - " self.do_execute(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/tornado/gen.py\", line 234, in wrapper\n", - " yielded = ctx_run(next, result)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/ipkernel.py\", line 306, in do_execute\n", - " res = shell.run_cell(code, store_history=store_history, silent=silent)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/ipykernel/zmqshell.py\", line 536, in run_cell\n", - " return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 2914, in run_cell\n", - " result = self._run_cell(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 2960, in _run_cell\n", - " return runner(coro)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/IPython/core/async_helpers.py\", line 78, in _pseudo_sync_runner\n", - " coro.send(None)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3185, in run_cell_async\n", - " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3377, in run_ast_nodes\n", - " if (await self.run_code(code, result, async_=asy)):\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/IPython/core/interactiveshell.py\", line 3457, in run_code\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " File \"\", line 1, in \n", - " cheque_batch_validation = [\n", - " File \"\", line 2, in \n", - " generate_response(\n", - " File \"/home/yarnapp/hopsfs/Jupyter/functions/llm_chain.py\", line 225, in generate_response\n", - " model_output = llm_chain.invoke({\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/langchain_core/runnables/base.py\", line 2499, in invoke\n", - " input = step.invoke(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/langchain_core/language_models/llms.py\", line 276, in invoke\n", - " self.generate_prompt(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/langchain_core/language_models/llms.py\", line 633, in generate_prompt\n", - " return self.generate(prompt_strings, stop=stop, callbacks=callbacks, **kwargs)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/langchain_core/language_models/llms.py\", line 803, in generate\n", - " output = self._generate_helper(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/langchain_core/language_models/llms.py\", line 657, in _generate_helper\n", - " self._generate(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/langchain_community/llms/huggingface_pipeline.py\", line 267, in _generate\n", - " responses = self.pipeline(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/transformers/pipelines/text_generation.py\", line 240, in __call__\n", - " return super().__call__(text_inputs, **kwargs)\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/transformers/pipelines/base.py\", line 1167, in __call__\n", - " logger.warning_once(\n", - " File \"/srv/hops/anaconda/envs/theenv/lib/python3.10/site-packages/transformers/utils/logging.py\", line 329, in warning_once\n", - " self.warning(*args, **kwargs)\n", - "Message: 'You seem to be using the pipelines sequentially on GPU. In order to maximize efficiency please use a dataset'\n", - "Arguments: (,)\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n", - "Setting `pad_token_id` to `eos_token_id`:128009 for open-end generation.\n" - ] - } - ], - "source": [ - "cheque_batch_validation = [\n", - " generate_response(\n", - " cheque_name, \n", - " processor, \n", - " model_parser, \n", - " model_fraud_detection, \n", - " llm_chain,verbose=False,\n", - " folder_name=FOLDER_NAME,\n", - " ) \n", - " for cheque_name \n", - " in cheque_names\n", - "]\n", - "\n", - "responses_formatted = [\n", - " format_response(response) \n", - " for response \n", - " in cheque_batch_validation\n", - "]\n", - "\n", - "cheque_validation_df = pd.DataFrame(\n", - " responses_formatted, \n", - " columns=['status', 'description'],\n", - ")\n", - "\n", - "cheque_validation_df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "72b14181", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a56569be", - "metadata": {}, - "outputs": [], - "source": [ - "from hsfs.feature import Feature\n", - "\n", - "features = [\n", - " Feature(name=\"cheque_id\", type=\"bigint\"),\n", - " Feature(name=\"status\", type=\"string\"),\n", - " Feature(name=\"description\", type=\"string\", online_type = \"TEXT\"),\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "968b7b16", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'cheque_validation' feature group\n", - "cheque_validation_fg = fs.get_or_create_feature_group(\n", - " name=\"cheque_validation_fg\",\n", - " version=1,\n", - " description='Cheque Validation and description',\n", - " primary_key=['cheque_id'],\n", - " online_enabled=True,\n", - " features=features,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "40eb1c4d", - "metadata": {}, - "outputs": [], - "source": [ - "cheque_validation_df_w_index = get_cheque_ids(\n", - " cheque_validation_fg, \n", - " cheque_validation_df,\n", - ")\n", - "cheque_validation_df_w_index.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "83d93efd", - "metadata": {}, - "outputs": [], - "source": [ - "cheque_validation_fg.insert(\n", - " cheque_validation_df_w_index,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "97599fa4", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/fraud_cheque_detection/README.md b/advanced_tutorials/fraud_cheque_detection/README.md deleted file mode 100644 index 3cc5d98b..00000000 --- a/advanced_tutorials/fraud_cheque_detection/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# ๐Ÿฆ Cheque Fraud Detection - -## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Overview - -The Cheque Fraud Detection project is designed to identify fraudulent cheques and provide detailed explanations for each validation. The project encompasses three main components: a feature pipeline, a training pipeline, and an inference pipeline. - -[Helper video describing how to implement the Cheque Fraud Detection system](https://www.youtube.com/watch?v=0H-XJ5qLFyA&t=1s) - -## ๐Ÿ“– Feature Pipeline - -The Feature Pipeline does the following: - -1. **Data Loading**: The process begins with downloading the dataset into a pandas DataFrame. Initial data exploration is conducted to understand the structure and distribution of the data. - -2. **Feature Engineering**: Key features are extracted from the raw data, including textual corrections and matching the amount written in words with the numerical amount. These features are essential for training an effective fraud detection model. - -4. **Feature Group Creation**: Create a **Cheque Feature Group** to store your cheque data. - -This notebook lays the groundwork for building a robust fraud detection model by ensuring the data is accurate, consistent, and ready for the training phase. - -## ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ Training Pipeline - -The Training Pipeline notebook focuses on building and evaluating the fraud detection model. This phase is crucial for developing a robust classifier capable of accurately identifying fraudulent cheques. The notebook includes several important steps: - -1. **Data Import and Setup**: The notebook begins by importing the necessary libraries and connecting to the Hopsworks feature store. This setup phase ensures that all required resources and datasets are accessible. - -2. **Feature Retrieval**: Create a **Feature View** with selected features and retrieve a train-test split for model training. - -3. **Model Training**: An XGBoost classifier is trained using the retrieved features. XGBoost is chosen for its efficiency and high performance in classification tasks. The model learns to differentiate between valid and fraudulent cheques based on the provided features. - -4. **Model Evaluation**: The trained model is evaluated using various metrics, including accuracy, precision, recall, F1 score, and confusion matrix. These metrics provide a comprehensive understanding of the model's performance and highlight areas for potential improvement. - -5. **Model Saving**: The trained model is saved in the **Hopsworks Model Registry**. - -## ๐Ÿš€ Inference Pipeline - -The Inference Pipeline notebook is designed to make predictions on new cheques and provide detailed explanations for each validation. This phase is crucial for deploying the model in a real-world scenario, where it can validate cheques and explain the reasons behind its decisions. The notebook includes the next steps: - -1. **Model Loading**: The trained XGBoost model is loaded from the **Hopsworks Model Registry** to perform inference on new data. Additionally, the `Donut OCR model` is loaded for text extraction from cheque images. - -2. **Text Parsing and Validation**: `Donut OCR` is used to parse text from new cheque images. This step extracts the necessary textual data, such as the written amount, for validation against numerical data. - -3. **Fraud Detection**: The extracted features are fed into the trained model to predict whether a cheque is fraudulent or valid. This prediction is based on the learned patterns from the training phase. - -4. **LLM Loading**: Load the `meta-llama/Meta-Llama-3-8B-Instruct` model and set up LLM Chain for text generation using Langchain. - -5. **Explanation Generation**: An LLM chain is used to generate detailed explanations for each validation result. This step leverages a Large Language Model to provide insights into why a cheque is considered fraudulent or valid, enhancing transparency and understanding. - -6. **Batch Inference**: The notebook also supports batch inference, allowing multiple cheques to be processed at once. Then validations and corresponding descriptions are saved in the **cheque_validation** Feature Group. This is useful for validating large volumes of cheques efficiently. - -## ๐Ÿ›  Setup and Installation - -1. Clone the Repository: - -``` -git clone https://github.com/logicalclocks/hopsworks-tutorials.git -cd hopsworks-tutorials/advanced_tutorials/fraud_cheque_detection -``` - -2. Install Dependencies: - -``` -pip install -r requirements.txt -``` - -3. Run Notebooks Sequentially: - -- Start with `1_feature_pipeline.ipynb` to preprocess and store features. -- Proceed with `2_training_pipeline.ipynb` to train and save the model. -- Finally, execute `3_inference_pipeline.ipynb` to perform predictions and generate explanations. - ---- - diff --git a/advanced_tutorials/fraud_cheque_detection/config.py b/advanced_tutorials/fraud_cheque_detection/config.py deleted file mode 100644 index d13f6e1a..00000000 --- a/advanced_tutorials/fraud_cheque_detection/config.py +++ /dev/null @@ -1,30 +0,0 @@ -### Dataset Configuration -DATASET_NAME = "shivi/cheques_sample_data" - -### Cheque Data URL -DOWNLOAD_URL = "https://repo.hops.works/dev/jdowling/cheque-fraud.zip" - -### Donut Configuration -DONUT_BASE_REPO = "naver-clova-ix/donut-base" #"nielsr/donut-base" -DONUT_FT_REPO = "shivi/donut-cheque-parser" -IMAGE_SIZE = [960, 720] # Input image size -MAX_LENGTH = 768 # Max generated sequence length for text decoder of Donut - -### Task Tokens -TASK_START_TOKEN = "" -TASK_END_TOKEN = "" - -### Training Configuration -BATCH_SIZE = 1 -NUM_WORKERS = 4 -MAX_EPOCHS = 30 -VAL_CHECK_INTERVAL = 0.2 -CHECK_VAL_EVERY_N_EPOCH = 1 -GRADIENT_CLIP_VAL = 1.0 -LEARNING_RATE = 3e-5 -VERBOSE = True - -### Hardware Configuration -ACCELERATOR = "gpu" -DEVICE_NUM = 1 -PRECISION = 16 diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/1.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/1.jpg deleted file mode 100644 index 7d0171be..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/1.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/10.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/10.jpg deleted file mode 100644 index 31cd48ec..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/10.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/11.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/11.jpg deleted file mode 100644 index 6c08e820..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/11.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/12.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/12.jpg deleted file mode 100644 index 359f2d0b..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/12.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/13.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/13.jpg deleted file mode 100644 index 963cd43f..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/13.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/14.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/14.jpg deleted file mode 100644 index 09b08763..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/14.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/15.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/15.jpg deleted file mode 100644 index bc8282f7..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/15.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/16.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/16.jpg deleted file mode 100644 index bdacf403..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/16.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/17.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/17.jpg deleted file mode 100644 index 1b9d6e8d..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/17.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/18.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/18.jpg deleted file mode 100644 index efa94918..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/18.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/19.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/19.jpg deleted file mode 100644 index 90b54ef4..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/19.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/2.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/2.jpg deleted file mode 100644 index a46b7f1b..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/2.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/20.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/20.jpg deleted file mode 100644 index 57715b6a..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/20.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/3.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/3.jpg deleted file mode 100644 index dd7c784d..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/3.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/4.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/4.jpg deleted file mode 100644 index 456d081f..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/4.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/5.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/5.jpg deleted file mode 100644 index 637afc7d..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/5.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/500.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/500.jpg deleted file mode 100644 index 5e18c329..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/500.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/501.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/501.jpg deleted file mode 100644 index cedb184e..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/501.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/502.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/502.jpg deleted file mode 100644 index 550661e8..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/502.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/503.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/503.jpg deleted file mode 100644 index 5aa6d21f..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/503.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/504.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/504.jpg deleted file mode 100644 index 150f28d1..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/504.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/6.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/6.jpg deleted file mode 100644 index fbcb233a..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/6.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/7.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/7.jpg deleted file mode 100644 index 90a78e35..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/7.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/8.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/8.jpg deleted file mode 100644 index 8aceedb6..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/8.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/images/9.jpg b/advanced_tutorials/fraud_cheque_detection/data/images/9.jpg deleted file mode 100644 index cf58e2fe..00000000 Binary files a/advanced_tutorials/fraud_cheque_detection/data/images/9.jpg and /dev/null differ diff --git a/advanced_tutorials/fraud_cheque_detection/data/res.csv b/advanced_tutorials/fraud_cheque_detection/data/res.csv deleted file mode 100644 index e73ef18f..00000000 --- a/advanced_tutorials/fraud_cheque_detection/data/res.csv +++ /dev/null @@ -1,10001 +0,0 @@ -CHEQUE_NO,USER1,USER2,VALUE_LETTERS,VALUE_NUMBERS,SIGNATURE_FILE,BANK_NAME,USER2NAME,valid -1,24,18,Three Thousand Seven Hundred and Fifty Five,3755,120.png,axis,Edmee Pelletier,1 -2,14,14,Three Thousand One Hundred and Sixty Eight,3168,71.png,axis,Renata Lukic,1 -3,15,32,Six Thousand Nine Hundred and Forty Two,6942,76.png,axis,Chelsea Watson,1 -4,27,5,Nine Thousand Five Hundred and Forty One,9541,137.png,axis,Fawwaz Zuhayr Mustafa,1 -5,5,24,Two Thousand Nine Hundred and Twelve,2912,26.png,axis,Clarice Blanc,1 -6,19,41,Nine Thousand Four Hundred and Eighty Seven,9487,95.png,axis,Germa de Geus,1 -7,35,39,Eight Thousand and Fourteen,8014,178.png,axis,Katie Connor,1 -8,26,41,Three Thousand Five Hundred and Three,3503,134.png,axis,Germa de Geus,1 -9,7,1,Four Thousand Two Hundred and Fifty Five,4255,37.png,axis,Emily D. Short,1 -10,1,39,Nine Thousand Six Hundred and Thirty Five,9635,9.png,axis,Katie Connor,1 -11,28,17,Seven Thousand Eight Hundred and Thirty,7830,140.png,axis,Yolette Cloutier,1 -12,7,7,Three Thousand Eight Hundred and Forty Five,3845,36.png,axis,Hasna Bahiyaa Amari,1 -13,12,40,Six Thousand Five Hundred and Forty Seven,6547,61.png,axis,David Howard,1 -14,27,15,One Thousand Nine Hundred and Twenty Nine,1929,136.png,axis,Milenko Tkalcic,1 -15,12,23,Eight Hundred and Thirty Eight,838,64.png,axis,Thรฉrรจse Fortier,1 -16,39,0,Two Thousand Four Hundred and Four,2404,198.png,axis,Ethel M. Bryson,1 -17,8,3,Seven Thousand Two Hundred and Nineteen,7219,44.png,axis,Jiang Li Tao,1 -18,29,23,Two Thousand Eight Hundred and Forty Six,2846,149.png,axis,Thรฉrรจse Fortier,1 -19,4,42,Five Thousand and Fifty,5050,21.png,axis,Brady Jamin,1 -20,2,16,Four Thousand Three Hundred and Thirty,4330,11.png,axis,Searlas Grenier,1 -21,42,3,Eight Thousand Three Hundred and Eighty Seven,8387,210.png,axis,Jiang Li Tao,1 -22,6,18,Eight Thousand Five Hundred and Twenty Four,8524,33.png,axis,Edmee Pelletier,1 -23,2,16,Nine Thousand One Hundred and Forty Two,9142,11.png,axis,Searlas Grenier,1 -24,5,9,Six Hundred and Ten,610,29.png,axis,Maria Kalb,1 -25,26,39,Five Thousand Two Hundred and Ninety Seven,5297,134.png,axis,Katie Connor,1 -26,42,5,Nine Thousand Two Hundred and Forty Three,9243,213.png,axis,Fawwaz Zuhayr Mustafa,1 -27,14,39,Five Thousand Three Hundred and Sixty,5360,71.png,axis,Katie Connor,1 -28,18,7,Nine Thousand One Hundred and Forty Seven,9147,94.png,axis,Hasna Bahiyaa Amari,1 -29,5,43,Five Thousand Eight Hundred and Fifty Nine,5859,27.png,axis,Aruna Bekx,1 -30,40,6,Four Thousand Three Hundred and Twenty One,4321,202.png,axis,Abdul Qais Khouri,1 -31,1,16,One Thousand Three Hundred and Thirty Seven,1337,5.png,axis,Searlas Grenier,1 -32,11,4,One Thousand Nine Hundred and Eighty One,1981,58.png,axis,Wafiyah Nashwa Wasem,1 -33,34,31,Nine Thousand Five Hundred and Fifty,9550,172.png,axis,Naomi Grant,1 -34,18,0,Eight Thousand Four Hundred and Eighty Six,8486,93.png,axis,Ethel M. Bryson,1 -35,38,30,Eight Thousand and Thirty Eight,8038,194.png,axis,Jodie Holden,1 -36,26,3,Eight Thousand and Fifty Four,8054,130.png,axis,Jiang Li Tao,1 -37,30,1,Four Thousand Five Hundred and Seventy Five,4575,152.png,axis,Emily D. Short,1 -38,29,39,Six Thousand Two Hundred and Sixty Eight,6268,148.png,axis,Katie Connor,1 -39,19,0,Six Thousand Seven Hundred and Seventy Eight,6778,97.png,axis,Ethel M. Bryson,1 -40,16,21,Two Thousand Five Hundred and Thirty Six,2536,84.png,axis,David Corbeil,1 -41,28,28,Two Thousand Six Hundred and Sixty Five,2665,141.png,axis,Chapin Auger,1 -42,22,34,Five Thousand One Hundred and Fifty Nine,5159,113.png,axis,Holly Martin,1 -43,41,16,One Thousand Three Hundred and Eighty Two,1382,207.png,axis,Searlas Grenier,1 -44,24,39,Four Thousand Five Hundred and Thirty Eight,4538,120.png,axis,Katie Connor,1 -45,34,19,Four Thousand Two Hundred and Fifty Five,4255,173.png,axis,Franรงoise Lapierre,1 -46,43,9,Three Thousand Seven Hundred and Sixty Two,3762,218.png,axis,Maria Kalb,1 -47,42,31,Nine Thousand Three Hundred and Ninety,9390,213.png,axis,Naomi Grant,1 -48,26,39,Eight Thousand Eight Hundred and Eighty Two,8882,130.png,axis,Katie Connor,1 -49,41,20,One Hundred and Ninety Six,196,205.png,axis,Seymour Patenaude,1 -50,8,17,Two Thousand Four Hundred and Sixty Five,2465,41.png,axis,Yolette Cloutier,1 -51,38,40,Four Thousand Five Hundred and Seven,4507,192.png,axis,David Howard,1 -52,24,28,One Thousand Nine Hundred and Fifty Two,1952,120.png,axis,Chapin Auger,1 -53,39,43,Seven Hundred and Seventy Two,772,196.png,axis,Aruna Bekx,1 -54,20,32,Nine Thousand Seven Hundred,9700,104.png,axis,Chelsea Watson,1 -55,0,4,Six Thousand Seven Hundred and Forty,6740,0.png,axis,Wafiyah Nashwa Wasem,1 -56,41,39,Five Thousand Five Hundred and Forty Six,5546,209.png,axis,Katie Connor,1 -57,21,18,Eight Thousand Three Hundred and Seventy Three,8373,105.png,axis,Edmee Pelletier,1 -58,18,13,One Hundred and Eighty Two,182,90.png,axis,Petra Kovacic,1 -59,3,3,Six Thousand Five Hundred and Twenty Eight,6528,19.png,axis,Jiang Li Tao,1 -60,5,43,Six Thousand Six Hundred and Thirty Six,6636,26.png,axis,Aruna Bekx,1 -61,19,13,Eight Thousand Eight Hundred and Sixty Five,8865,98.png,axis,Petra Kovacic,1 -62,33,18,Eight Hundred and Ninety Seven,897,165.png,axis,Edmee Pelletier,1 -63,38,34,Eight Thousand Two Hundred and Five,8205,194.png,axis,Holly Martin,1 -64,4,29,Nine Thousand Four Hundred and Ninety Seven,9497,20.png,axis,Hayden Bruce,1 -65,15,20,Eight Thousand and Twenty Seven,8027,76.png,axis,Seymour Patenaude,1 -66,0,17,One Thousand Two Hundred and Twenty One,1221,3.png,axis,Yolette Cloutier,1 -67,28,8,Three Thousand Seven Hundred and Fifty,3750,140.png,axis,Steffen Krueger,1 -68,1,16,One Thousand Eight Hundred and Fifty One,1851,7.png,axis,Searlas Grenier,1 -69,13,19,Six Thousand Seven Hundred and Eighty Five,6785,65.png,axis,Franรงoise Lapierre,1 -70,13,37,Seven Thousand Two Hundred and Twenty Three,7223,66.png,axis,Eva Davies,1 -71,30,8,Three Thousand Nine Hundred and Sixty Three,3963,151.png,axis,Steffen Krueger,1 -72,42,37,Six Thousand Nine Hundred and Ninety Four,6994,213.png,axis,Eva Davies,1 -73,19,41,Five Thousand Eight Hundred and Eight,5808,98.png,axis,Germa de Geus,1 -74,27,37,Seven Thousand Three Hundred and Fourteen,7314,135.png,axis,Eva Davies,1 -75,14,6,One Thousand Two Hundred and Ninety Four,1294,74.png,axis,Abdul Qais Khouri,1 -76,21,30,Three Thousand Nine Hundred and Fifty One,3951,106.png,axis,Jodie Holden,1 -77,38,40,Two Thousand and Sixty One,2061,191.png,axis,David Howard,1 -78,13,7,Two Thousand Nine Hundred and Sixty One,2961,65.png,axis,Hasna Bahiyaa Amari,1 -79,0,7,Five Hundred and Fifty Nine,559,0.png,axis,Hasna Bahiyaa Amari,1 -80,29,14,One Thousand Seven Hundred and Thirty Seven,1737,146.png,axis,Renata Lukic,1 -81,25,21,Five Thousand Eight Hundred and Fifty Three,5853,128.png,axis,David Corbeil,1 -82,19,39,Four Thousand and Four,4004,99.png,axis,Katie Connor,1 -83,33,8,Nine Thousand Two Hundred and Eighty Five,9285,169.png,axis,Steffen Krueger,1 -84,25,40,Eight Thousand and Forty,8040,125.png,axis,David Howard,1 -85,9,37,Five Thousand One Hundred and Eighty Seven,5187,45.png,axis,Eva Davies,1 -86,4,9,Three Thousand Seven Hundred and Twenty Seven,3727,22.png,axis,Maria Kalb,1 -87,34,20,Eight Thousand Nine Hundred and Nineteen,8919,171.png,axis,Seymour Patenaude,1 -88,23,17,Five Thousand Two Hundred and Ninety Four,5294,118.png,axis,Yolette Cloutier,1 -89,41,22,Two Thousand Two Hundred and Ninety Seven,2297,208.png,axis,Eglantine Forest,1 -90,32,26,Three Thousand One Hundred and Four,3104,164.png,axis,Sidney Lapointe,1 -91,7,13,Seven Thousand Seven Hundred and Seventeen,7717,39.png,axis,Petra Kovacic,1 -92,41,33,Five Thousand Two Hundred and Eighty Six,5286,205.png,axis,Eleanor Freeman,1 -93,28,36,One Thousand Seven Hundred and Forty,1740,143.png,axis,Thomas Chapman,1 -94,29,26,Five Thousand Two Hundred and Thirty Nine,5239,149.png,axis,Sidney Lapointe,1 -95,3,10,Two Thousand Eight Hundred and Thirty Nine,2839,16.png,axis,Stephan Schwab,1 -96,8,40,Four Thousand and Seventy Nine,4079,43.png,axis,David Howard,1 -97,23,12,Two Hundred and Two,202,118.png,axis,Marcel Achen,1 -98,3,34,Seven Thousand and Ninety Two,7092,19.png,axis,Holly Martin,1 -99,27,7,Eight Thousand Six Hundred and Forty One,8641,136.png,axis,Hasna Bahiyaa Amari,1 -100,35,31,Four Hundred and Sixty Four,464,175.png,axis,Naomi Grant,1 -101,5,9,Five Thousand Nine Hundred and Ninety Six,5996,27.png,axis,Maria Kalb,1 -102,9,33,Four Hundred and Forty Seven,447,49.png,axis,Eleanor Freeman,1 -103,0,33,Six Thousand Nine Hundred and Sixty Five,6965,3.png,axis,Eleanor Freeman,1 -104,30,3,Two Hundred and Fifty Seven,257,152.png,axis,Jiang Li Tao,1 -105,7,25,Nine Thousand Two Hundred and Forty,9240,36.png,axis,Fleurette Coudert,1 -106,26,7,Seven Hundred and Thirty Seven,737,130.png,axis,Hasna Bahiyaa Amari,1 -107,8,18,Six Thousand Seven Hundred and Ninety Eight,6798,43.png,axis,Edmee Pelletier,1 -108,9,6,Three Hundred and Sixty Three,363,48.png,axis,Abdul Qais Khouri,1 -109,32,7,Eight Thousand Eight Hundred and Twelve,8812,160.png,axis,Hasna Bahiyaa Amari,1 -110,20,0,One Thousand Nine Hundred and Ten,1910,102.png,axis,Ethel M. Bryson,1 -111,35,11,Eight Thousand Seven Hundred and Thirty,8730,179.png,axis,Jens Egger,1 -112,29,7,Eight Thousand Four Hundred and Seventy One,8471,145.png,axis,Hasna Bahiyaa Amari,1 -113,21,21,Five Thousand Nine Hundred and Seventy Two,5972,109.png,axis,David Corbeil,1 -114,38,17,Seven Thousand One Hundred and Sixty One,7161,193.png,axis,Yolette Cloutier,1 -115,41,2,Nine Thousand One Hundred and Ninety Five,9195,206.png,axis,Chi Hsiao,1 -116,24,35,Six Thousand Eight Hundred and Ninety Seven,6897,122.png,axis,Elliot Humphreys,1 -117,10,34,Twenty,20,52.png,axis,Holly Martin,1 -118,12,31,Three Thousand Seven Hundred and Eighty Three,3783,64.png,axis,Naomi Grant,1 -119,15,30,Four Thousand Four Hundred and Thirty Nine,4439,76.png,axis,Jodie Holden,1 -120,17,10,Nine Thousand and Ninety Six,9096,86.png,axis,Stephan Schwab,1 -121,36,11,Seven Thousand Four Hundred and Thirty Five,7435,181.png,axis,Jens Egger,1 -122,8,19,Four Thousand Five Hundred and Sixty Four,4564,40.png,axis,Franรงoise Lapierre,1 -123,9,3,Three Thousand Two Hundred and Twenty Two,3222,46.png,axis,Jiang Li Tao,1 -124,18,40,Eight Thousand One Hundred and Seventy Six,8176,93.png,axis,David Howard,1 -125,42,23,Eight Thousand Seven Hundred and Forty Five,8745,212.png,axis,Thรฉrรจse Fortier,1 -126,8,15,Six Thousand and Ninety Six,6096,44.png,axis,Milenko Tkalcic,1 -127,32,37,Three Thousand Four Hundred and Fifty Six,3456,162.png,axis,Eva Davies,1 -128,23,18,Three Thousand Four Hundred and Six,3406,116.png,axis,Edmee Pelletier,1 -129,4,0,Three Thousand One Hundred and Thirty Four,3134,21.png,axis,Ethel M. Bryson,1 -130,37,23,Four Thousand Nine Hundred and Seventy One,4971,187.png,axis,Thรฉrรจse Fortier,1 -131,4,41,One Thousand Eight Hundred and Sixty,1860,21.png,axis,Germa de Geus,1 -132,7,3,One Thousand Nine Hundred and Fifty One,1951,37.png,axis,Jiang Li Tao,1 -133,30,15,Five Thousand and Sixty Nine,5069,154.png,axis,Milenko Tkalcic,1 -134,31,5,Five Thousand and Forty Five,5045,155.png,axis,Fawwaz Zuhayr Mustafa,1 -135,35,17,Five Thousand Six Hundred and Sixty Nine,5669,178.png,axis,Yolette Cloutier,1 -136,12,40,Nine Thousand Five Hundred and Forty One,9541,62.png,axis,David Howard,1 -137,11,19,Two Thousand Eight Hundred and Forty Six,2846,58.png,axis,Franรงoise Lapierre,1 -138,16,39,Five Thousand and Forty Seven,5047,80.png,axis,Katie Connor,1 -139,14,20,Six Thousand Four Hundred and Twenty Two,6422,71.png,axis,Seymour Patenaude,1 -140,26,40,Eight Thousand Seven Hundred and Twenty Seven,8727,133.png,axis,David Howard,1 -141,23,12,Seven Thousand and Sixty Three,7063,118.png,axis,Marcel Achen,1 -142,41,42,Six Thousand Eight Hundred and Fifty Seven,6857,205.png,axis,Brady Jamin,1 -143,30,2,Four Thousand Four Hundred and Ninety Six,4496,153.png,axis,Chi Hsiao,1 -144,34,34,Six Thousand Two Hundred and Four,6204,172.png,axis,Holly Martin,1 -145,16,2,Nine Thousand Five Hundred and Forty Five,9545,83.png,axis,Chi Hsiao,1 -146,32,36,Seven Hundred and Ninety,790,164.png,axis,Thomas Chapman,1 -147,23,9,Nine Thousand Five Hundred and Sixty Six,9566,115.png,axis,Maria Kalb,1 -148,28,18,Seven Thousand Eight Hundred and Forty Five,7845,141.png,axis,Edmee Pelletier,1 -149,17,38,Seven Thousand and Eighty Three,7083,86.png,axis,Freddie Reid,1 -150,12,25,Two Thousand Eight Hundred and Seventy Nine,2879,60.png,axis,Fleurette Coudert,1 -151,5,23,Four Thousand One Hundred and Five,4105,28.png,axis,Thรฉrรจse Fortier,1 -152,38,17,Six Thousand Seven Hundred and Ninety Five,6795,192.png,axis,Yolette Cloutier,1 -153,2,29,Seven Thousand Three Hundred and Thirty Three,7333,14.png,axis,Hayden Bruce,1 -154,34,0,Eight Thousand Four Hundred and Nineteen,8419,172.png,axis,Ethel M. Bryson,1 -155,26,42,Two Thousand Two Hundred and Fifty Three,2253,130.png,axis,Brady Jamin,1 -156,32,22,One Hundred and Forty Five,145,161.png,axis,Eglantine Forest,1 -157,5,26,One Thousand Six Hundred and Fifty Two,1652,26.png,axis,Sidney Lapointe,1 -158,10,24,Five Thousand Four Hundred and Sixty One,5461,51.png,axis,Clarice Blanc,1 -159,31,9,Nine Thousand Six Hundred and Nine,9609,155.png,axis,Maria Kalb,1 -160,16,36,Six Thousand Seven Hundred and Thirty Nine,6739,83.png,axis,Thomas Chapman,1 -161,38,16,Five Thousand Six Hundred and Forty Seven,5647,191.png,axis,Searlas Grenier,1 -162,41,17,One Hundred and One,101,206.png,axis,Yolette Cloutier,1 -163,39,31,Eight Hundred and Thirty Three,833,197.png,axis,Naomi Grant,1 -164,1,35,Five Thousand and Twenty Six,5026,9.png,axis,Elliot Humphreys,1 -165,5,31,Eight Thousand Eight Hundred and Eighty One,8881,26.png,axis,Naomi Grant,1 -166,36,11,Seven Thousand Eight Hundred and Fifty,7850,180.png,axis,Jens Egger,1 -167,10,25,Two Thousand Seven Hundred and Ninety Three,2793,50.png,axis,Fleurette Coudert,1 -168,7,33,Four Thousand One Hundred and Twenty,4120,36.png,axis,Eleanor Freeman,1 -169,42,38,Four Thousand Eight Hundred and Fifty Seven,4857,211.png,axis,Freddie Reid,1 -170,31,6,Four Thousand Two Hundred and Forty Five,4245,159.png,axis,Abdul Qais Khouri,1 -171,39,43,Four Thousand Six Hundred and Fifty Four,4654,198.png,axis,Aruna Bekx,1 -172,31,18,One Thousand One Hundred and Fifty Eight,1158,155.png,axis,Edmee Pelletier,1 -173,28,15,Two Thousand Five Hundred and Fifteen,2515,140.png,axis,Milenko Tkalcic,1 -174,40,41,Eight Thousand One Hundred and Eight,8108,202.png,axis,Germa de Geus,1 -175,15,7,Two Thousand Six Hundred and Eighteen,2618,76.png,axis,Hasna Bahiyaa Amari,1 -176,32,34,Four Thousand Five Hundred and Four,4504,163.png,axis,Holly Martin,1 -177,21,0,Seven Thousand Three Hundred and Forty,7340,107.png,axis,Ethel M. Bryson,1 -178,13,34,Four Thousand Five Hundred and Eight,4508,69.png,axis,Holly Martin,1 -179,21,34,Eight Thousand Four Hundred and Forty Six,8446,107.png,axis,Holly Martin,1 -180,25,22,Five Thousand Six Hundred and Eighty Seven,5687,127.png,axis,Eglantine Forest,1 -181,34,16,Six Thousand Five Hundred and Forty Three,6543,172.png,axis,Searlas Grenier,1 -182,43,7,Two Thousand Two Hundred and Seventy Five,2275,217.png,axis,Hasna Bahiyaa Amari,1 -183,32,9,Two Thousand Nine Hundred and Eighty One,2981,160.png,axis,Maria Kalb,1 -184,40,11,Five Thousand Four Hundred and Twenty Eight,5428,204.png,axis,Jens Egger,1 -185,8,36,Five Thousand Seven Hundred and Thirty One,5731,41.png,axis,Thomas Chapman,1 -186,32,23,Nine Thousand Five Hundred and Eighty Six,9586,163.png,axis,Thรฉrรจse Fortier,1 -187,18,10,Three Thousand Seven Hundred and Fifty Two,3752,93.png,axis,Stephan Schwab,1 -188,7,5,Nine Hundred and Seventy Four,974,38.png,axis,Fawwaz Zuhayr Mustafa,1 -189,27,27,Six Thousand Two Hundred and Twenty,6220,136.png,axis,Colette Monjeau,1 -190,22,40,One Thousand Four Hundred and Sixty,1460,111.png,axis,David Howard,1 -191,34,2,Eight Thousand Three Hundred and Forty Three,8343,171.png,axis,Chi Hsiao,1 -192,40,23,Four Thousand and Nine,4009,203.png,axis,Thรฉrรจse Fortier,1 -193,25,38,Nine Thousand Five Hundred and Thirty,9530,127.png,axis,Freddie Reid,1 -194,41,13,Three Thousand Nine Hundred and Fifty Six,3956,207.png,axis,Petra Kovacic,1 -195,13,11,Six Thousand Eight Hundred and Forty Three,6843,67.png,axis,Jens Egger,1 -196,31,9,Six Thousand Six Hundred and Twenty,6620,157.png,axis,Maria Kalb,1 -197,27,24,One Thousand Seven Hundred and Ninety Six,1796,136.png,axis,Clarice Blanc,1 -198,17,17,Six Thousand Three Hundred and Thirty Eight,6338,85.png,axis,Yolette Cloutier,1 -199,13,39,Two Thousand Five Hundred and Seven,2507,67.png,axis,Katie Connor,1 -200,33,14,Three Thousand One Hundred and Twenty Four,3124,167.png,axis,Renata Lukic,1 -201,34,31,Seven Thousand Eight Hundred and Ninety Three,7893,174.png,axis,Naomi Grant,1 -202,1,5,Six Thousand Four Hundred and Fifty,6450,5.png,axis,Fawwaz Zuhayr Mustafa,1 -203,20,7,Three Thousand Three Hundred and Fifty Seven,3357,102.png,axis,Hasna Bahiyaa Amari,1 -204,29,13,Seven Thousand Two Hundred and Sixty,7260,146.png,axis,Petra Kovacic,1 -205,19,43,Five Thousand Three Hundred and Three,5303,97.png,axis,Aruna Bekx,1 -206,26,28,Four Thousand One Hundred and Eleven,4111,133.png,axis,Chapin Auger,1 -207,15,21,Four Thousand Nine Hundred and Ninety Two,4992,75.png,axis,David Corbeil,1 -208,10,41,Seven Thousand Two Hundred and Ninety Five,7295,54.png,axis,Germa de Geus,1 -209,5,38,Six Thousand Three Hundred and Forty Four,6344,25.png,axis,Freddie Reid,1 -210,30,29,Seven Thousand Four Hundred and Sixty Six,7466,153.png,axis,Hayden Bruce,1 -211,6,17,Seven Thousand Two Hundred and Seventy Five,7275,31.png,axis,Yolette Cloutier,1 -212,30,9,Two Thousand Nine Hundred and Twenty Nine,2929,153.png,axis,Maria Kalb,1 -213,19,7,Five Thousand Two Hundred and Twenty Seven,5227,95.png,axis,Hasna Bahiyaa Amari,1 -214,21,7,Nine Thousand One Hundred and Six,9106,106.png,axis,Hasna Bahiyaa Amari,1 -215,21,29,Three Thousand Five Hundred and Eighty Nine,3589,107.png,axis,Hayden Bruce,1 -216,24,11,Eight Thousand and Seventy Five,8075,123.png,axis,Jens Egger,1 -217,34,21,One Thousand Two Hundred and Eighteen,1218,174.png,axis,David Corbeil,1 -218,40,34,Three Thousand Two Hundred and Nineteen,3219,204.png,axis,Holly Martin,1 -219,26,40,Nine Thousand Eight Hundred and Twenty Four,9824,130.png,axis,David Howard,1 -220,34,4,Three Thousand Seven Hundred and Ninety Eight,3798,170.png,axis,Wafiyah Nashwa Wasem,1 -221,0,21,Three Thousand Six Hundred and Ninety Six,3696,0.png,axis,David Corbeil,1 -222,3,4,Five Thousand Three Hundred and Eighty,5380,18.png,axis,Wafiyah Nashwa Wasem,1 -223,22,20,Eight Thousand Five Hundred and Seventy Seven,8577,112.png,axis,Seymour Patenaude,1 -224,3,5,Six Thousand Two Hundred and Eighty Seven,6287,19.png,axis,Fawwaz Zuhayr Mustafa,1 -225,3,15,Two Thousand and Forty Eight,2048,17.png,axis,Milenko Tkalcic,1 -226,35,17,Eight Thousand Six Hundred,8600,178.png,axis,Yolette Cloutier,1 -227,33,41,Nine Thousand Six Hundred and Seventy Two,9672,166.png,axis,Germa de Geus,1 -228,32,35,Four Hundred and Fifty Three,453,160.png,axis,Elliot Humphreys,1 -229,14,16,Eight Thousand Eight Hundred and Ninety One,8891,74.png,axis,Searlas Grenier,1 -230,38,19,Six Thousand Four Hundred and Ninety Two,6492,192.png,axis,Franรงoise Lapierre,1 -231,9,43,One Thousand Nine Hundred and Ninety Six,1996,46.png,axis,Aruna Bekx,1 -232,1,33,Four Thousand Seven Hundred and Fifty Four,4754,9.png,axis,Eleanor Freeman,1 -233,19,35,Seven Thousand Nine Hundred and Twenty Nine,7929,95.png,axis,Elliot Humphreys,1 -234,4,31,Eight Thousand Eight Hundred and Seventy Six,8876,23.png,axis,Naomi Grant,1 -235,1,33,Two Thousand Six Hundred and Sixty Nine,2669,6.png,axis,Eleanor Freeman,1 -236,12,29,Seven Hundred and Eighty Six,786,63.png,axis,Hayden Bruce,1 -237,9,9,Eight Thousand Four Hundred and Sixty,8460,45.png,axis,Maria Kalb,1 -238,36,20,One Thousand One Hundred and Thirty Eight,1138,180.png,axis,Seymour Patenaude,1 -239,33,27,Seven Thousand Seven Hundred and Seventy Three,7773,168.png,axis,Colette Monjeau,1 -240,10,19,Six Thousand One Hundred and Sixty,6160,52.png,axis,Franรงoise Lapierre,1 -241,20,21,Six Thousand Four Hundred and Twenty One,6421,102.png,axis,David Corbeil,1 -242,15,28,One Thousand Six Hundred and Seventy Eight,1678,78.png,axis,Chapin Auger,1 -243,29,21,Seven Thousand One Hundred and Sixty Six,7166,147.png,axis,David Corbeil,1 -244,36,18,Seven Thousand One Hundred and Thirty Seven,7137,184.png,axis,Edmee Pelletier,1 -245,38,34,Seven Thousand Eight Hundred,7800,191.png,axis,Holly Martin,1 -246,43,5,Seven Thousand One Hundred and Sixty Five,7165,216.png,axis,Fawwaz Zuhayr Mustafa,1 -247,18,1,Four Thousand Six Hundred and Sixty One,4661,91.png,axis,Emily D. Short,1 -248,18,11,One Thousand Eight Hundred and Sixty Nine,1869,90.png,axis,Jens Egger,1 -249,38,28,Four Thousand Six Hundred and Seventy Three,4673,194.png,axis,Chapin Auger,1 -250,41,31,Three Thousand Two Hundred and Thirty Seven,3237,205.png,axis,Naomi Grant,1 -251,17,17,Five Thousand Six Hundred and Fifty Five,5655,89.png,axis,Yolette Cloutier,1 -252,4,12,One Thousand Four Hundred and Twenty Three,1423,22.png,axis,Marcel Achen,1 -253,10,3,Four Thousand Three Hundred and Twenty Seven,4327,50.png,axis,Jiang Li Tao,1 -254,21,38,One Thousand Nine Hundred and Fourteen,1914,105.png,axis,Freddie Reid,1 -255,32,28,Seven Thousand and Eighty Seven,7087,161.png,axis,Chapin Auger,1 -256,14,27,Six Thousand Five Hundred and Forty Four,6544,74.png,axis,Colette Monjeau,1 -257,4,19,Seven Thousand and Eighty,7080,22.png,axis,Franรงoise Lapierre,1 -258,4,15,One Thousand Three Hundred and Ninety Three,1393,21.png,axis,Milenko Tkalcic,1 -259,13,31,Three Hundred and Thirty One,331,67.png,axis,Naomi Grant,1 -260,36,8,Three Thousand Three Hundred and Eighty Eight,3388,181.png,axis,Steffen Krueger,1 -261,23,5,Three Thousand Four Hundred and Twenty One,3421,116.png,axis,Fawwaz Zuhayr Mustafa,1 -262,22,2,Seven Thousand and Eight,7008,114.png,axis,Chi Hsiao,1 -263,5,28,Four Thousand Seven Hundred and Eighty,4780,27.png,axis,Chapin Auger,1 -264,37,33,Two Hundred and Fifty Two,252,188.png,axis,Eleanor Freeman,1 -265,3,41,One Thousand One Hundred and Forty Three,1143,18.png,axis,Germa de Geus,1 -266,22,24,Five Thousand Eight Hundred and Forty Four,5844,113.png,axis,Clarice Blanc,1 -267,39,1,Two Thousand One Hundred and Thirty One,2131,198.png,axis,Emily D. Short,1 -268,32,28,Nine Thousand Seven Hundred and Forty Nine,9749,163.png,axis,Chapin Auger,1 -269,24,17,Nine Thousand Five Hundred and Twenty Seven,9527,124.png,axis,Yolette Cloutier,1 -270,14,11,Six Thousand Seven Hundred,6700,73.png,axis,Jens Egger,1 -271,34,3,Six Thousand Three Hundred and Thirteen,6313,174.png,axis,Jiang Li Tao,1 -272,40,4,Seven Thousand Eight Hundred and Twenty Eight,7828,202.png,axis,Wafiyah Nashwa Wasem,1 -273,16,22,Nine Hundred and Ninety Two,992,81.png,axis,Eglantine Forest,1 -274,3,31,Three Thousand Six Hundred and Eighty Eight,3688,17.png,axis,Naomi Grant,1 -275,35,4,One Thousand and Twenty Three,1023,176.png,axis,Wafiyah Nashwa Wasem,1 -276,41,21,Eight Thousand Five Hundred and Fifty,8550,205.png,axis,David Corbeil,1 -277,21,23,Four Hundred and Five,405,105.png,axis,Thรฉrรจse Fortier,1 -278,30,3,Three Thousand Six Hundred and Fifty Four,3654,152.png,axis,Jiang Li Tao,1 -279,21,40,Six Thousand Two Hundred and Forty Four,6244,109.png,axis,David Howard,1 -280,15,37,Three Thousand One Hundred and Thirty Five,3135,75.png,axis,Eva Davies,1 -281,36,3,Six Thousand Seven Hundred and Eighty Two,6782,183.png,axis,Jiang Li Tao,1 -282,21,39,Nine Hundred and Twenty Nine,929,105.png,axis,Katie Connor,1 -283,14,21,Two Thousand Six Hundred and Thirty Five,2635,72.png,axis,David Corbeil,1 -284,43,24,Seven Thousand Six Hundred and Ninety Two,7692,216.png,axis,Clarice Blanc,1 -285,42,9,Five Thousand Two Hundred and Five,5205,210.png,axis,Maria Kalb,1 -286,37,18,Four Thousand and Forty Three,4043,188.png,axis,Edmee Pelletier,1 -287,43,3,Four Thousand Seven Hundred and Forty Nine,4749,218.png,axis,Jiang Li Tao,1 -288,2,34,Seven Thousand Six Hundred and Twenty One,7621,13.png,axis,Holly Martin,1 -289,26,9,One Thousand Four Hundred and Eighty Two,1482,130.png,axis,Maria Kalb,1 -290,5,31,Five Thousand Four Hundred and Thirty Six,5436,27.png,axis,Naomi Grant,1 -291,15,41,Eight Thousand Two Hundred and Sixty Six,8266,76.png,axis,Germa de Geus,1 -292,20,3,Seven Thousand Five Hundred and Sixty Four,7564,102.png,axis,Jiang Li Tao,1 -293,30,28,Two Thousand Four Hundred and Nineteen,2419,150.png,axis,Chapin Auger,1 -294,43,38,Four Hundred and Eighty,480,215.png,axis,Freddie Reid,1 -295,32,0,Nine Thousand and Thirty Seven,9037,161.png,axis,Ethel M. Bryson,1 -296,8,34,Seven Thousand and Fifty Four,7054,43.png,axis,Holly Martin,1 -297,16,13,Five Thousand Five Hundred and Twenty Three,5523,84.png,axis,Petra Kovacic,1 -298,4,1,Eight Thousand and Three,8003,22.png,axis,Emily D. Short,1 -299,1,25,Five Hundred,500,9.png,axis,Fleurette Coudert,1 -300,10,22,Six Thousand One Hundred and Thirty Nine,6139,53.png,axis,Eglantine Forest,1 -301,40,43,Three Thousand and Eighty,3080,202.png,axis,Aruna Bekx,1 -302,41,41,Seven Thousand Six Hundred and Eleven,7611,207.png,axis,Germa de Geus,1 -303,17,26,Five Hundred and Fifty Eight,558,85.png,axis,Sidney Lapointe,1 -304,16,25,Four Thousand Seven Hundred and Twenty Five,4725,83.png,axis,Fleurette Coudert,1 -305,31,2,Two Thousand Two Hundred and Eighty One,2281,158.png,axis,Chi Hsiao,1 -306,16,10,Eight Thousand Two Hundred and Twenty Three,8223,80.png,axis,Stephan Schwab,1 -307,34,7,Nine Thousand Nine Hundred and Seventy Nine,9979,172.png,axis,Hasna Bahiyaa Amari,1 -308,42,20,One Hundred and Eighty Four,184,212.png,axis,Seymour Patenaude,1 -309,24,19,Nine Thousand Two Hundred and Fifty Seven,9257,122.png,axis,Franรงoise Lapierre,1 -310,34,35,Nine Thousand Two Hundred and Twenty Three,9223,174.png,axis,Elliot Humphreys,1 -311,40,27,Nine Thousand One Hundred and Thirty One,9131,203.png,axis,Colette Monjeau,1 -312,28,37,Nine Thousand Nine Hundred and Fifty Five,9955,140.png,axis,Eva Davies,1 -313,39,2,Five Hundred and Eighty Six,586,195.png,axis,Chi Hsiao,1 -314,2,24,Three Thousand One Hundred and Seventy Nine,3179,12.png,axis,Clarice Blanc,1 -315,0,20,Five Thousand Six Hundred and Seventy,5670,2.png,axis,Seymour Patenaude,1 -316,1,21,Two Thousand Six Hundred and Ninety One,2691,8.png,axis,David Corbeil,1 -317,15,29,Three Thousand Two Hundred and Three,3203,75.png,axis,Hayden Bruce,1 -318,34,15,Five Thousand One Hundred and Fifty Four,5154,170.png,axis,Milenko Tkalcic,1 -319,22,34,Six Thousand Seven Hundred and Ninety Nine,6799,113.png,axis,Holly Martin,1 -320,7,33,Two Thousand Seven Hundred and Seventy Three,2773,35.png,axis,Eleanor Freeman,1 -321,16,42,Four Thousand Six Hundred and Forty Nine,4649,80.png,axis,Brady Jamin,1 -322,1,41,Four Thousand Two Hundred and Twelve,4212,7.png,axis,Germa de Geus,1 -323,35,31,Four Thousand Four Hundred and Sixty Five,4465,178.png,axis,Naomi Grant,1 -324,23,8,Seven Thousand Six Hundred and Six,7606,118.png,axis,Steffen Krueger,1 -325,10,39,Four Thousand Seven Hundred and Seventy Two,4772,53.png,axis,Katie Connor,1 -326,10,43,Five Thousand Seven Hundred and Fifty Nine,5759,52.png,axis,Aruna Bekx,1 -327,8,7,Seven Thousand Five Hundred and Seventy Nine,7579,40.png,axis,Hasna Bahiyaa Amari,1 -328,40,21,Seven Hundred and Fifteen,715,200.png,axis,David Corbeil,1 -329,6,13,Seven Thousand Five Hundred and Eighty Three,7583,30.png,axis,Petra Kovacic,1 -330,43,16,Eight Thousand Five Hundred and Twenty Three,8523,215.png,axis,Searlas Grenier,1 -331,14,19,Four Thousand Three Hundred and Eighty One,4381,73.png,axis,Franรงoise Lapierre,1 -332,8,1,One Thousand Eight Hundred and Forty One,1841,43.png,axis,Emily D. Short,1 -333,41,27,Three Thousand Two Hundred and Ninety,3290,207.png,axis,Colette Monjeau,1 -334,16,3,One Thousand Seven Hundred and Sixty Six,1766,81.png,axis,Jiang Li Tao,1 -335,4,5,Six Thousand Three Hundred and Twelve,6312,24.png,axis,Fawwaz Zuhayr Mustafa,1 -336,6,25,Eight Thousand Seven Hundred and Sixty,8760,31.png,axis,Fleurette Coudert,1 -337,14,42,Nine Thousand Eight Hundred and Seventy One,9871,71.png,axis,Brady Jamin,1 -338,16,28,Seven Thousand One Hundred and Fifty Three,7153,80.png,axis,Chapin Auger,1 -339,26,32,Seven Thousand and Twenty Seven,7027,133.png,axis,Chelsea Watson,1 -340,40,14,Five Thousand Four Hundred and Eighty Four,5484,204.png,axis,Renata Lukic,1 -341,23,14,Four Thousand Nine Hundred and Ninety One,4991,117.png,axis,Renata Lukic,1 -342,5,33,Eight Thousand and Seventy Eight,8078,28.png,axis,Eleanor Freeman,1 -343,22,19,Four Thousand Two Hundred and Eighty One,4281,112.png,axis,Franรงoise Lapierre,1 -344,26,23,Three Thousand Six Hundred and Thirty Two,3632,132.png,axis,Thรฉrรจse Fortier,1 -345,43,13,Seven Thousand Three Hundred and Sixty Two,7362,215.png,axis,Petra Kovacic,1 -346,18,18,Two Thousand Four Hundred and Ninety Three,2493,92.png,axis,Edmee Pelletier,1 -347,37,31,Seven Thousand Four Hundred and Ninety,7490,188.png,axis,Naomi Grant,1 -348,0,32,One Thousand Five Hundred and Eighty Four,1584,0.png,axis,Chelsea Watson,1 -349,24,11,Seven Hundred and Twenty One,721,120.png,axis,Jens Egger,1 -350,16,10,Nine Thousand One Hundred and Twenty Three,9123,83.png,axis,Stephan Schwab,1 -351,22,41,Two Thousand Two Hundred and Sixty Seven,2267,111.png,axis,Germa de Geus,1 -352,40,1,Seven Thousand Eight Hundred and Sixty Three,7863,203.png,axis,Emily D. Short,1 -353,2,3,Two Hundred and Ninety Seven,297,11.png,axis,Jiang Li Tao,1 -354,31,6,Two Thousand Four Hundred and Thirty Eight,2438,158.png,axis,Abdul Qais Khouri,1 -355,6,6,Four Thousand and Sixty Six,4066,30.png,axis,Abdul Qais Khouri,1 -356,14,13,Four Thousand Eight Hundred and Forty One,4841,72.png,axis,Petra Kovacic,1 -357,3,20,Eight Thousand and Forty Six,8046,17.png,axis,Seymour Patenaude,1 -358,4,22,Five Thousand Six Hundred and Fifty Three,5653,24.png,axis,Eglantine Forest,1 -359,21,3,Three Thousand Six Hundred and Twenty Four,3624,107.png,axis,Jiang Li Tao,1 -360,11,27,Nine Thousand Seven Hundred and Forty Eight,9748,55.png,axis,Colette Monjeau,1 -361,18,27,Two Thousand Three Hundred and Sixty Three,2363,90.png,axis,Colette Monjeau,1 -362,23,26,Five Thousand Two Hundred and Seventeen,5217,118.png,axis,Sidney Lapointe,1 -363,14,37,Two Hundred and Thirty One,231,70.png,axis,Eva Davies,1 -364,35,41,Seven Thousand Two Hundred and Sixty Three,7263,177.png,axis,Germa de Geus,1 -365,40,14,Seven Hundred and Thirty Eight,738,200.png,axis,Renata Lukic,1 -366,17,41,Nine Thousand One Hundred and Seventy Eight,9178,86.png,axis,Germa de Geus,1 -367,37,35,Eight Thousand Seven Hundred,8700,186.png,axis,Elliot Humphreys,1 -368,20,4,Five Thousand Seven Hundred and Forty,5740,101.png,axis,Wafiyah Nashwa Wasem,1 -369,32,19,Six Thousand Two Hundred and Thirty Nine,6239,161.png,axis,Franรงoise Lapierre,1 -370,40,32,Seven Thousand Two Hundred and Ten,7210,201.png,axis,Chelsea Watson,1 -371,13,30,Five Thousand Nine Hundred and Two,5902,67.png,axis,Jodie Holden,1 -372,25,29,Two Thousand Six Hundred and Sixty Nine,2669,125.png,axis,Hayden Bruce,1 -373,12,37,Six Thousand Four Hundred and Thirty Eight,6438,63.png,axis,Eva Davies,1 -374,7,8,Six Thousand Two Hundred and Twenty Three,6223,38.png,axis,Steffen Krueger,1 -375,34,8,Seven Thousand Nine Hundred and Thirty Four,7934,171.png,axis,Steffen Krueger,1 -376,36,42,Two Thousand Four Hundred and Twenty One,2421,181.png,axis,Brady Jamin,1 -377,37,32,Two Thousand Six Hundred and Forty One,2641,189.png,axis,Chelsea Watson,1 -378,11,3,Two Thousand Seven Hundred and Eighty Two,2782,55.png,axis,Jiang Li Tao,1 -379,1,13,Three Thousand Three Hundred and Seventy Five,3375,6.png,axis,Petra Kovacic,1 -380,26,25,Nine Thousand Two Hundred and Thirty Two,9232,132.png,axis,Fleurette Coudert,1 -381,6,34,Eight Thousand Seven Hundred and Eighty Three,8783,34.png,axis,Holly Martin,1 -382,1,31,Five Thousand Three Hundred and Ninety Two,5392,5.png,axis,Naomi Grant,1 -383,11,37,Three Thousand Three Hundred and Seventy,3370,59.png,axis,Eva Davies,1 -384,37,1,Four Hundred and Six,406,189.png,axis,Emily D. Short,1 -385,41,42,Six Thousand Nine Hundred and Eight,6908,208.png,axis,Brady Jamin,1 -386,37,35,Six Thousand Five Hundred and Ninety Two,6592,185.png,axis,Elliot Humphreys,1 -387,8,40,Six Thousand Three Hundred and Seventy One,6371,43.png,axis,David Howard,1 -388,28,8,Four Thousand Nine Hundred and Fifty Nine,4959,140.png,axis,Steffen Krueger,1 -389,16,33,Two Thousand One Hundred and Twenty Seven,2127,81.png,axis,Eleanor Freeman,1 -390,17,26,Two Thousand and Fifty Seven,2057,85.png,axis,Sidney Lapointe,1 -391,38,23,Four Thousand Nine Hundred and Seventy,4970,190.png,axis,Thรฉrรจse Fortier,1 -392,21,21,Six Thousand One Hundred and Nineteen,6119,106.png,axis,David Corbeil,1 -393,38,24,Six Hundred and Six,606,190.png,axis,Clarice Blanc,1 -394,26,2,Eight Hundred and Three,803,134.png,axis,Chi Hsiao,1 -395,33,11,Four Thousand Three Hundred and Sixty Nine,4369,167.png,axis,Jens Egger,1 -396,20,4,One Hundred,100,101.png,axis,Wafiyah Nashwa Wasem,1 -397,1,14,Nine Thousand Four Hundred and Twenty Two,9422,6.png,axis,Renata Lukic,1 -398,32,1,Six Thousand Five Hundred and Thirty Four,6534,161.png,axis,Emily D. Short,1 -399,37,39,Two Thousand Two Hundred and Seventy Six,2276,188.png,axis,Katie Connor,1 -400,17,24,Nine Thousand Three Hundred and Sixty Five,9365,88.png,axis,Clarice Blanc,1 -401,40,34,One Thousand Three Hundred and Eighty Four,1384,201.png,axis,Holly Martin,1 -402,12,29,Five Thousand Nine Hundred and Thirteen,5913,64.png,axis,Hayden Bruce,1 -403,32,21,One Thousand Two Hundred and Twenty One,1221,162.png,axis,David Corbeil,1 -404,42,1,Nine Thousand and Eighty Four,9084,212.png,axis,Emily D. Short,1 -405,39,10,Three Thousand Eight Hundred and Seventy Nine,3879,198.png,axis,Stephan Schwab,1 -406,28,39,Nine Thousand Six Hundred and Seventeen,9617,144.png,axis,Katie Connor,1 -407,21,2,Three Thousand Five Hundred and Forty Six,3546,105.png,axis,Chi Hsiao,1 -408,27,1,Four Thousand One Hundred and Seventy Nine,4179,138.png,axis,Emily D. Short,1 -409,19,38,Two Hundred and Forty Eight,248,96.png,axis,Freddie Reid,1 -410,4,27,One Thousand Three Hundred and Sixty Six,1366,22.png,axis,Colette Monjeau,1 -411,43,22,Eight Thousand Nine Hundred and Twenty Two,8922,219.png,axis,Eglantine Forest,1 -412,36,14,Two Thousand Four Hundred and Twenty Three,2423,181.png,axis,Renata Lukic,1 -413,36,9,One Thousand Three Hundred and Fifteen,1315,181.png,axis,Maria Kalb,1 -414,39,1,Eight Thousand Six Hundred and Fifteen,8615,195.png,axis,Emily D. Short,1 -415,25,23,Three Hundred and Seven,307,126.png,axis,Thรฉrรจse Fortier,1 -416,42,29,Three Thousand Eight Hundred and One,3801,210.png,axis,Hayden Bruce,1 -417,1,12,Nine Thousand Seven Hundred and Eighty Eight,9788,7.png,axis,Marcel Achen,1 -418,2,6,Six Thousand Two Hundred and Fifty Two,6252,13.png,axis,Abdul Qais Khouri,1 -419,4,29,Two Thousand Six Hundred and Seventy Three,2673,24.png,axis,Hayden Bruce,1 -420,22,2,Eight Hundred and Eighty Three,883,112.png,axis,Chi Hsiao,1 -421,29,22,Seven Thousand Six Hundred and Fifty Five,7655,149.png,axis,Eglantine Forest,1 -422,27,10,Seven Thousand Four Hundred and Sixty Three,7463,136.png,axis,Stephan Schwab,1 -423,18,14,Five Thousand Two Hundred and Fifty,5250,94.png,axis,Renata Lukic,1 -424,1,27,Two Thousand One Hundred and Twenty,2120,9.png,axis,Colette Monjeau,1 -425,4,13,One Thousand Two Hundred and Thirty Eight,1238,24.png,axis,Petra Kovacic,1 -426,5,8,Seven Thousand Seven Hundred and Forty Three,7743,28.png,axis,Steffen Krueger,1 -427,26,8,Three Hundred and Four,304,134.png,axis,Steffen Krueger,1 -428,4,18,Seven Thousand One Hundred and Ninety Six,7196,20.png,axis,Edmee Pelletier,1 -429,15,34,Two Thousand Eight Hundred and Seventy Seven,2877,79.png,axis,Holly Martin,1 -430,17,29,Seven Thousand One Hundred and Seventeen,7117,85.png,axis,Hayden Bruce,1 -431,2,22,Four Thousand Two Hundred and Eight,4208,14.png,axis,Eglantine Forest,1 -432,31,38,Eight Thousand Eight Hundred and Ninety Eight,8898,156.png,axis,Freddie Reid,1 -433,26,43,One Thousand and Ninety,1090,131.png,axis,Aruna Bekx,1 -434,37,33,Three Thousand Seven Hundred and Forty Three,3743,185.png,axis,Eleanor Freeman,1 -435,24,7,Four Thousand Five Hundred and Eighty Three,4583,124.png,axis,Hasna Bahiyaa Amari,1 -436,18,38,Two Thousand Three Hundred and Sixty Seven,2367,93.png,axis,Freddie Reid,1 -437,4,29,Six Thousand Five Hundred and Twenty Eight,6528,20.png,axis,Hayden Bruce,1 -438,37,34,Six Thousand and Eighty Eight,6088,186.png,axis,Holly Martin,1 -439,9,11,Five Thousand Three Hundred and Twenty Eight,5328,45.png,axis,Jens Egger,1 -440,18,15,Three Hundred and Forty Five,345,90.png,axis,Milenko Tkalcic,1 -441,42,40,Four Thousand Two Hundred and Nine,4209,213.png,axis,David Howard,1 -442,27,13,Eight Thousand and Thirty Four,8034,135.png,axis,Petra Kovacic,1 -443,31,38,Nine Thousand Eight Hundred and Sixty Two,9862,158.png,axis,Freddie Reid,1 -444,30,43,Eight Thousand Nine Hundred and Fifty Seven,8957,151.png,axis,Aruna Bekx,1 -445,1,43,Three Thousand Six Hundred and Sixteen,3616,8.png,axis,Aruna Bekx,1 -446,42,1,Seven Thousand Three Hundred and Forty One,7341,210.png,axis,Emily D. Short,1 -447,20,35,Two Thousand Four Hundred and Twenty,2420,103.png,axis,Elliot Humphreys,1 -448,19,9,Eight Thousand Four Hundred and Forty Eight,8448,98.png,axis,Maria Kalb,1 -449,43,3,Nine Thousand and Thirty Eight,9038,216.png,axis,Jiang Li Tao,1 -450,9,30,Four Thousand Seven Hundred and Twelve,4712,45.png,axis,Jodie Holden,1 -451,18,17,Seven Thousand Seven Hundred and Fifty Four,7754,90.png,axis,Yolette Cloutier,1 -452,15,37,Eight Thousand Three Hundred and Fifty Eight,8358,78.png,axis,Eva Davies,1 -453,42,14,Eight Thousand Four Hundred and Ninety Eight,8498,213.png,axis,Renata Lukic,1 -454,2,40,One Thousand Five Hundred and Twelve,1512,14.png,axis,David Howard,1 -455,37,17,Five Thousand Eight Hundred and Fifteen,5815,189.png,axis,Yolette Cloutier,1 -456,33,23,Four Thousand Seven Hundred and Seventy Eight,4778,166.png,axis,Thรฉrรจse Fortier,1 -457,18,42,Four Thousand One Hundred and Eighty Four,4184,93.png,axis,Brady Jamin,1 -458,5,29,One Thousand One Hundred and Thirty Two,1132,27.png,axis,Hayden Bruce,1 -459,0,37,Five Thousand Four Hundred and Eighteen,5418,1.png,axis,Eva Davies,1 -460,40,27,Five Thousand Nine Hundred and Twenty,5920,202.png,axis,Colette Monjeau,1 -461,4,18,Four Thousand Four Hundred and Thirty Eight,4438,21.png,axis,Edmee Pelletier,1 -462,25,28,Six Thousand Five Hundred and Ninety Six,6596,126.png,axis,Chapin Auger,1 -463,13,1,One Thousand Six Hundred and Eighty One,1681,69.png,axis,Emily D. Short,1 -464,26,9,Four Hundred and Fifty One,451,132.png,axis,Maria Kalb,1 -465,28,28,Eight Thousand One Hundred and Seventy Five,8175,140.png,axis,Chapin Auger,1 -466,35,41,Two Thousand Five Hundred and Seventy Two,2572,177.png,axis,Germa de Geus,1 -467,8,14,Four Thousand Three Hundred and Eighty Eight,4388,43.png,axis,Renata Lukic,1 -468,37,19,Five Thousand Nine Hundred and Seven,5907,187.png,axis,Franรงoise Lapierre,1 -469,13,39,Eight Thousand Nine Hundred and Sixty Nine,8969,69.png,axis,Katie Connor,1 -470,43,8,One Thousand Eight Hundred and Twenty Seven,1827,218.png,axis,Steffen Krueger,1 -471,1,26,Two Thousand Five Hundred and Seventy Nine,2579,8.png,axis,Sidney Lapointe,1 -472,40,14,One Hundred and Eighty Five,185,201.png,axis,Renata Lukic,1 -473,34,34,One Thousand Four Hundred and Thirty Four,1434,170.png,axis,Holly Martin,1 -474,0,7,Nine Thousand Four Hundred and Seventy Six,9476,2.png,axis,Hasna Bahiyaa Amari,1 -475,38,28,Six Thousand Six Hundred and Fifty Nine,6659,190.png,axis,Chapin Auger,1 -476,16,33,Two Thousand Four Hundred and Sixty Two,2462,81.png,axis,Eleanor Freeman,1 -477,5,23,Four Thousand Seven Hundred and Eighty Five,4785,26.png,axis,Thรฉrรจse Fortier,1 -478,28,19,Two Thousand Three Hundred and Sixty Two,2362,144.png,axis,Franรงoise Lapierre,1 -479,27,40,Four Thousand Four Hundred and Sixty Nine,4469,137.png,axis,David Howard,1 -480,6,27,Seven Thousand Eight Hundred and Eight,7808,34.png,axis,Colette Monjeau,1 -481,28,24,Three Thousand Two Hundred and Sixty Six,3266,142.png,axis,Clarice Blanc,1 -482,22,7,Two Thousand Eight Hundred and Ninety Three,2893,113.png,axis,Hasna Bahiyaa Amari,1 -483,21,0,Four Thousand Three Hundred and Forty Nine,4349,107.png,axis,Ethel M. Bryson,1 -484,15,11,Seven Thousand Nine Hundred and Twenty One,7921,76.png,axis,Jens Egger,1 -485,40,0,Two Thousand Seven Hundred and Ten,2710,202.png,axis,Ethel M. Bryson,1 -486,12,13,Six Thousand Eight Hundred and Fifteen,6815,61.png,axis,Petra Kovacic,1 -487,29,39,Six Thousand Three Hundred and Fifty Six,6356,146.png,axis,Katie Connor,1 -488,31,3,Five Thousand Eight Hundred and Ninety Nine,5899,158.png,axis,Jiang Li Tao,1 -489,4,31,Five Thousand Eight Hundred and Sixty Five,5865,20.png,axis,Naomi Grant,1 -490,18,32,Four Thousand Three Hundred and Sixty Nine,4369,92.png,axis,Chelsea Watson,1 -491,3,30,Nine Hundred and Twenty Three,923,19.png,axis,Jodie Holden,1 -492,15,36,Three Thousand Four Hundred and Forty Six,3446,75.png,axis,Thomas Chapman,1 -493,0,21,Five Hundred and Ninety Six,596,4.png,axis,David Corbeil,1 -494,40,39,Five Thousand One Hundred and Thirty,5130,204.png,axis,Katie Connor,1 -495,33,4,Six Hundred and Thirty Five,635,165.png,axis,Wafiyah Nashwa Wasem,1 -496,9,11,Nine Thousand Eight Hundred and Thirteen,9813,49.png,axis,Jens Egger,1 -497,35,39,One Thousand Nine Hundred and Thirteen,1913,175.png,axis,Katie Connor,1 -498,5,41,Seven Thousand Five Hundred and Seventeen,7517,28.png,axis,Germa de Geus,1 -499,40,20,Nine Thousand Two Hundred and Twelve,9212,202.png,axis,Seymour Patenaude,1 -500,21,13,Two Thousand Eight Hundred and Seventy Six,2876,109.png,axis,Petra Kovacic,1 -501,4,41,One Thousand and Five,3708,Nan,axis,Germa de Geus,0 -502,38,31,Three Hundred and Thirty Six,3318,Nan,axis,Naomi Grant,0 -503,35,27, ,8999,177.png,axis,Colette Monjeau,0 -504,36,3,Three Thousand and Fifty Seven,3707,Nan,axis,Jiang Li Tao,0 -505,13,27,Nineteen, ,68.png,axis,Colette Monjeau,0 -506,5,1, ,7989,28.png,axis,Emily D. Short,0 -507,27,37,Two Hundred and Twenty One, ,137.png,axis,Eva Davies,0 -508,29,4, ,5113,149.png,axis,Wafiyah Nashwa Wasem,0 -509,0,38,One Thousand Seven Hundred and Seventy Five,2153,Nan,axis,Freddie Reid,0 -510,39,20,Six Thousand and Sixty Four, ,196.png,axis,Seymour Patenaude,0 -511,36,23,One Thousand Three Hundred and Twenty Nine,4574,Nan,axis,Thรฉrรจse Fortier,0 -512,20,5,Three Thousand Two Hundred and Seventy Five, ,101.png,axis,Fawwaz Zuhayr Mustafa,0 -513,42,3, ,8558,214.png,axis,Jiang Li Tao,0 -514,28,13, ,4879,144.png,axis,Petra Kovacic,0 -515,9,4,Nine Hundred and Ninety Five,2378,Nan,axis,Wafiyah Nashwa Wasem,0 -516,11,43,One Thousand Five Hundred and Seventy Five,2202,Nan,axis,Aruna Bekx,0 -517,40,29,Eight Thousand Nine Hundred and Eighty Seven,9612,Nan,axis,Hayden Bruce,0 -518,32,3,Four Thousand Four Hundred and Ninety One,9170,Nan,axis,Jiang Li Tao,0 -519,1,33,Five Thousand Six Hundred and Eighty Six,7050,Nan,axis,Eleanor Freeman,0 -520,13,29,One Thousand Four Hundred and Fifty One,2408,Nan,axis,Hayden Bruce,0 -521,24,36,Three Thousand One Hundred and Ninety Seven, ,120.png,axis,Thomas Chapman,0 -522,11,4, ,1349,56.png,axis,Wafiyah Nashwa Wasem,0 -523,15,16,One Thousand Three Hundred and Forty Six,9854,Nan,axis,Searlas Grenier,0 -524,7,27,One Thousand Two Hundred and Twenty,3934,Nan,axis,Colette Monjeau,0 -525,38,38,Nine Hundred and Twelve,1056,Nan,axis,Freddie Reid,0 -526,15,14,Two Hundred and Ninety Six,873,Nan,axis,Renata Lukic,0 -527,31,25,Two Hundred and Forty Eight,4742,Nan,axis,Fleurette Coudert,0 -528,32,23, ,9294,160.png,axis,Thรฉrรจse Fortier,0 -529,8,1,Two Hundred and Thirty One,8802,Nan,axis,Emily D. Short,0 -530,40,38,Eight Thousand Two Hundred and Forty Five, ,201.png,axis,Freddie Reid,0 -531,24,26,Three Thousand Six Hundred and Sixty Seven, ,124.png,axis,Sidney Lapointe,0 -532,11,0,One Thousand Four Hundred and Ninety Two,1932,Nan,axis,Ethel M. Bryson,0 -533,0,30,Four Thousand and Fifty Two,4519,Nan,axis,Jodie Holden,0 -534,42,42,Two Thousand Seven Hundred and Forty One,2790,Nan,axis,Brady Jamin,0 -535,15,23,One Thousand Nine Hundred and Ninety Eight,3279,Nan,axis,Thรฉrรจse Fortier,0 -536,41,9, ,6833,205.png,axis,Maria Kalb,0 -537,22,3,Six Hundred and Forty,906,Nan,axis,Jiang Li Tao,0 -538,9,9,Thirty Seven, ,49.png,axis,Maria Kalb,0 -539,32,31,Four Thousand Three Hundred and Sixty Nine, ,162.png,axis,Naomi Grant,0 -540,42,22,Six Thousand Five Hundred and Seventeen,7914,Nan,axis,Eglantine Forest,0 -541,0,17,One Thousand Five Hundred and Sixteen,5351,Nan,axis,Yolette Cloutier,0 -542,20,30,Three Thousand One Hundred and Eighty Three,8284,Nan,axis,Jodie Holden,0 -543,33,16,Seven Hundred and Forty,4201,Nan,axis,Searlas Grenier,0 -544,2,37, ,1166,10.png,axis,Eva Davies,0 -545,17,27, ,589,85.png,axis,Colette Monjeau,0 -546,36,27,Five Thousand Three Hundred and Ninety Four,7049,Nan,axis,Colette Monjeau,0 -547,11,34,Eight Thousand One Hundred and Eighty Six,9680,Nan,axis,Holly Martin,0 -548,41,0, ,3702,209.png,axis,Ethel M. Bryson,0 -549,22,11,One Thousand Three Hundred and Ninety Eight,7073,Nan,axis,Jens Egger,0 -550,6,20,Seven Hundred and Thirty Three, ,32.png,axis,Seymour Patenaude,0 -551,5,32, ,9909,26.png,axis,Chelsea Watson,0 -552,2,2, ,2480,12.png,axis,Chi Hsiao,0 -553,15,27, ,8291,79.png,axis,Colette Monjeau,0 -554,16,6, ,8862,82.png,axis,Abdul Qais Khouri,0 -555,16,10, ,957,81.png,axis,Stephan Schwab,0 -556,42,4,Two Hundred and Sixty Three, ,213.png,axis,Wafiyah Nashwa Wasem,0 -557,11,37,One Thousand Five Hundred and Fifty Nine,2491,Nan,axis,Eva Davies,0 -558,35,41, ,261,177.png,axis,Germa de Geus,0 -559,21,41,Two Thousand Three Hundred and Twenty Eight,7942,Nan,axis,Germa de Geus,0 -560,19,28,Four Thousand Eight Hundred and Thirty Three, ,96.png,axis,Chapin Auger,0 -561,9,34,Five Thousand Two Hundred and Fifty Five,9924,Nan,axis,Holly Martin,0 -562,41,10,Three Thousand Six Hundred and Thirty Three,5573,Nan,axis,Stephan Schwab,0 -563,30,28,Twenty One,664,Nan,axis,Chapin Auger,0 -564,14,0,Six Hundred and Twenty Eight,7953,Nan,axis,Ethel M. Bryson,0 -565,0,25,Four Thousand Four Hundred and Ninety Six,5883,Nan,axis,Fleurette Coudert,0 -566,21,11,Nine Hundred and Fifty Nine,1553,Nan,axis,Jens Egger,0 -567,23,17,One Thousand Six Hundred and Seventy Eight, ,116.png,axis,Yolette Cloutier,0 -568,34,37,Five Thousand Five Hundred and Twenty Four, ,171.png,axis,Eva Davies,0 -569,20,23,Two Thousand Six Hundred and Fifty Seven, ,101.png,axis,Thรฉrรจse Fortier,0 -570,43,11,One Hundred and Four,1270,Nan,axis,Jens Egger,0 -571,30,1,One Hundred and Sixty Two, ,154.png,axis,Emily D. Short,0 -572,5,0, ,6592,28.png,axis,Ethel M. Bryson,0 -573,42,0,Eight Hundred and Nineteen,2570,Nan,axis,Ethel M. Bryson,0 -574,18,7,Two Thousand Four Hundred and Forty Five, ,92.png,axis,Hasna Bahiyaa Amari,0 -575,8,14,One Thousand Nine Hundred and Thirty,5751,Nan,axis,Renata Lukic,0 -576,22,8,One Thousand One Hundred and Six,4614,Nan,axis,Steffen Krueger,0 -577,27,15,Six Thousand and Forty Nine,6285,Nan,axis,Milenko Tkalcic,0 -578,8,34,Four Thousand Eight Hundred and Thirty Eight,7002,Nan,axis,Holly Martin,0 -579,39,38, ,2541,195.png,axis,Freddie Reid,0 -580,33,40,One Thousand Eight Hundred and Ninety Eight,6676,Nan,axis,David Howard,0 -581,8,10,One Thousand Four Hundred and Fifty Two, ,43.png,axis,Stephan Schwab,0 -582,17,32, ,8413,85.png,axis,Chelsea Watson,0 -583,0,19, ,3811,0.png,axis,Franรงoise Lapierre,0 -584,42,42,Two Thousand Eight Hundred and Seventy Seven,4782,Nan,axis,Brady Jamin,0 -585,41,13,Three Thousand One Hundred and Seventy Nine,3331,Nan,axis,Petra Kovacic,0 -586,21,38,Two Thousand Three Hundred and Twelve, ,109.png,axis,Freddie Reid,0 -587,16,19,One Thousand Five Hundred and One,5171,Nan,axis,Franรงoise Lapierre,0 -588,15,14,Eight Hundred and Forty Two, ,76.png,axis,Renata Lukic,0 -589,16,40, ,1140,84.png,axis,David Howard,0 -590,20,36,Four Thousand Seven Hundred and Eighty Nine,5524,Nan,axis,Thomas Chapman,0 -591,25,6,Four Thousand Eight Hundred and Eighty Five, ,128.png,axis,Abdul Qais Khouri,0 -592,24,1,Five Thousand Three Hundred,5820,Nan,axis,Emily D. Short,0 -593,4,10, ,6893,22.png,axis,Stephan Schwab,0 -594,30,14,Four Thousand Five Hundred and Ninety Four,5249,Nan,axis,Renata Lukic,0 -595,33,1,One Thousand Seven Hundred and Ninety Four,1855,Nan,axis,Emily D. Short,0 -596,19,21,One Thousand Two Hundred and Seventy,1446,Nan,axis,David Corbeil,0 -597,25,17, ,8266,125.png,axis,Yolette Cloutier,0 -598,27,2,Five Thousand Eight Hundred and Fifty Eight, ,139.png,axis,Chi Hsiao,0 -599,37,17,Fourteen,3066,Nan,axis,Yolette Cloutier,0 -600,16,13,Forty Four,3892,Nan,axis,Petra Kovacic,0 -601,24,19, ,4323,120.png,axis,Franรงoise Lapierre,0 -602,32,12,One Thousand Five Hundred and Ninety Eight,1830,Nan,axis,Marcel Achen,0 -603,13,0, ,4180,69.png,axis,Ethel M. Bryson,0 -604,39,42,Four Hundred and Fifty Four, ,196.png,axis,Brady Jamin,0 -605,14,11,Two Thousand Eight Hundred and Eighty Nine, ,70.png,axis,Jens Egger,0 -606,39,31,One Thousand Two Hundred and Seventy Four, ,197.png,axis,Naomi Grant,0 -607,16,13,One Thousand Two Hundred and Ninety Two, ,80.png,axis,Petra Kovacic,0 -608,33,18,Two Thousand and Fourteen, ,167.png,axis,Edmee Pelletier,0 -609,41,11,Eight Thousand Eight Hundred and Forty Nine,8882,Nan,axis,Jens Egger,0 -610,27,16,One Thousand One Hundred and Fourteen, ,138.png,axis,Searlas Grenier,0 -611,15,15,Five Hundred and Forty Four,1247,Nan,axis,Milenko Tkalcic,0 -612,35,31,Five Hundred and Sixty Five,2474,Nan,axis,Naomi Grant,0 -613,41,19, ,9080,207.png,axis,Franรงoise Lapierre,0 -614,40,39,Three Thousand Four Hundred and Forty Three, ,201.png,axis,Katie Connor,0 -615,12,32,Four Thousand One Hundred and Thirty One,4644,Nan,axis,Chelsea Watson,0 -616,37,37,Three Hundred and Ninety One, ,185.png,axis,Eva Davies,0 -617,32,2,Three Thousand Seven Hundred and Twelve,4092,Nan,axis,Chi Hsiao,0 -618,29,1,Two Thousand Three Hundred and Twenty Eight,6158,Nan,axis,Emily D. Short,0 -619,20,23,One Thousand Four Hundred and Thirty One, ,100.png,axis,Thรฉrรจse Fortier,0 -620,11,4,Four Thousand Eight Hundred and Forty Six, ,56.png,axis,Wafiyah Nashwa Wasem,0 -621,12,14, ,879,61.png,axis,Renata Lukic,0 -622,5,34,Three Thousand and Twelve,3226,Nan,axis,Holly Martin,0 -623,10,7,Six Thousand Six Hundred and Fifty Nine, ,53.png,axis,Hasna Bahiyaa Amari,0 -624,2,40,Two Hundred and Thirteen,9373,Nan,axis,David Howard,0 -625,1,42,Two Thousand Three Hundred and Four, ,5.png,axis,Brady Jamin,0 -626,23,35,Five Thousand Six Hundred and Six, ,118.png,axis,Elliot Humphreys,0 -627,15,16, ,4869,79.png,axis,Searlas Grenier,0 -628,4,8,Three Thousand and Fifty One,3522,Nan,axis,Steffen Krueger,0 -629,14,3,Two Thousand Five Hundred and Forty Seven,7253,Nan,axis,Jiang Li Tao,0 -630,23,36,Four Thousand Three Hundred and Forty Seven,6116,Nan,axis,Thomas Chapman,0 -631,8,18, ,8699,42.png,axis,Edmee Pelletier,0 -632,27,34,One Thousand and Six,1072,Nan,axis,Holly Martin,0 -633,6,42,Eight Hundred and Seventy Seven,1401,Nan,axis,Brady Jamin,0 -634,27,20,Two Thousand Four Hundred and Twelve,4468,Nan,axis,Seymour Patenaude,0 -635,28,10,Three Thousand Five Hundred and Eighty Six,6278,Nan,axis,Stephan Schwab,0 -636,1,7, ,7661,6.png,axis,Hasna Bahiyaa Amari,0 -637,16,11,Five Thousand Eight Hundred and Fifty Nine,9513,Nan,axis,Jens Egger,0 -638,29,31,Three Thousand Nine Hundred and Fourteen, ,146.png,axis,Naomi Grant,0 -639,29,26,Four Thousand Seven Hundred and Ninety Two,8907,Nan,axis,Sidney Lapointe,0 -640,18,1,Two Thousand Three Hundred and Two,4342,Nan,axis,Emily D. Short,0 -641,36,34,Six Thousand Three Hundred and Ninety Seven,9622,Nan,axis,Holly Martin,0 -642,0,32,Three Hundred and Thirty One, ,2.png,axis,Chelsea Watson,0 -643,36,7,Five Hundred and Sixty One,1142,Nan,axis,Hasna Bahiyaa Amari,0 -644,12,20,Five Thousand Seven Hundred and Thirteen,6211,Nan,axis,Seymour Patenaude,0 -645,43,38,Three Thousand and Six, ,216.png,axis,Freddie Reid,0 -646,38,39,Three Thousand Three Hundred and Two,5800,Nan,axis,Katie Connor,0 -647,24,27,Two Thousand Eight Hundred and Sixty, ,120.png,axis,Colette Monjeau,0 -648,16,37, ,1330,83.png,axis,Eva Davies,0 -649,29,32, ,8249,148.png,axis,Chelsea Watson,0 -650,12,7,Nine Thousand One Hundred and Seventy One,9429,Nan,axis,Hasna Bahiyaa Amari,0 -651,43,29,One Hundred and Twenty Two,1010,Nan,axis,Hayden Bruce,0 -652,7,16,Five Thousand One Hundred and Twenty One,7208,Nan,axis,Searlas Grenier,0 -653,24,40, ,4064,120.png,axis,David Howard,0 -654,14,40, ,8963,72.png,axis,David Howard,0 -655,39,17,Eight Thousand Eight Hundred and Twenty Two,9149,Nan,axis,Yolette Cloutier,0 -656,30,12, ,1816,152.png,axis,Marcel Achen,0 -657,40,13,Two Thousand Nine Hundred and Seventy Four,8702,Nan,axis,Petra Kovacic,0 -658,19,6, ,1007,96.png,axis,Abdul Qais Khouri,0 -659,19,24,One Thousand Three Hundred and Sixty Six, ,99.png,axis,Clarice Blanc,0 -660,22,12,Two Thousand and Eighty Six, ,112.png,axis,Marcel Achen,0 -661,37,35,Five,2330,Nan,axis,Elliot Humphreys,0 -662,5,3,One Thousand Four Hundred and Eighty, ,28.png,axis,Jiang Li Tao,0 -663,9,35,Three Thousand and Ten,3389,Nan,axis,Elliot Humphreys,0 -664,9,24,Five Thousand Five Hundred and Fifty Six, ,46.png,axis,Clarice Blanc,0 -665,23,39,Five Thousand Two Hundred and Thirty, ,118.png,axis,Katie Connor,0 -666,22,10, ,4819,111.png,axis,Stephan Schwab,0 -667,2,5, ,2742,10.png,axis,Fawwaz Zuhayr Mustafa,0 -668,10,9,Seven Thousand and Nineteen,7044,Nan,axis,Maria Kalb,0 -669,5,18, ,4238,28.png,axis,Edmee Pelletier,0 -670,30,0,Three Hundred and Sixty Two,1372,Nan,axis,Ethel M. Bryson,0 -671,19,26, ,4330,95.png,axis,Sidney Lapointe,0 -672,3,37, ,5369,15.png,axis,Eva Davies,0 -673,15,15, ,5264,78.png,axis,Milenko Tkalcic,0 -674,18,34, ,897,92.png,axis,Holly Martin,0 -675,11,24,Four Thousand Nine Hundred and Thirty Two, ,59.png,axis,Clarice Blanc,0 -676,38,7,Five Thousand One Hundred and Seventeen,6304,Nan,axis,Hasna Bahiyaa Amari,0 -677,38,43,Three Thousand and Fifteen, ,193.png,axis,Aruna Bekx,0 -678,35,10,Four Hundred and Fifty Two,3529,Nan,axis,Stephan Schwab,0 -679,2,13, ,6954,10.png,axis,Petra Kovacic,0 -680,10,20, ,5340,54.png,axis,Seymour Patenaude,0 -681,18,25,One Thousand Seven Hundred and Fifty Nine,2112,Nan,axis,Fleurette Coudert,0 -682,12,1,Six Hundred and Forty Three,3040,Nan,axis,Emily D. Short,0 -683,3,5,One Hundred and Thirty Six,3788,Nan,axis,Fawwaz Zuhayr Mustafa,0 -684,34,31,Five Hundred and Ninety Six,1384,Nan,axis,Naomi Grant,0 -685,10,24, ,4550,53.png,axis,Clarice Blanc,0 -686,26,29,One Thousand Seven Hundred and Twenty Six,2274,Nan,axis,Hayden Bruce,0 -687,11,6,Seven Thousand and Seventy One, ,57.png,axis,Abdul Qais Khouri,0 -688,15,26, ,191,79.png,axis,Sidney Lapointe,0 -689,40,5,Three Thousand Five Hundred and Ninety Three,4801,Nan,axis,Fawwaz Zuhayr Mustafa,0 -690,26,40,One Thousand Two Hundred and Fifty One,7382,Nan,axis,David Howard,0 -691,7,2,Three Thousand Nine Hundred and Twenty Three,9051,Nan,axis,Chi Hsiao,0 -692,26,4,Three Thousand Seven Hundred and Eighty, ,130.png,axis,Wafiyah Nashwa Wasem,0 -693,29,41, ,6638,145.png,axis,Germa de Geus,0 -694,23,36, ,2023,118.png,axis,Thomas Chapman,0 -695,33,36,One Hundred and Twenty Five,812,Nan,axis,Thomas Chapman,0 -696,29,38,One Thousand Seven Hundred and Thirty Nine,8080,Nan,axis,Freddie Reid,0 -697,0,11, ,4785,2.png,axis,Jens Egger,0 -698,40,19,Three Hundred and Ninety Eight, ,203.png,axis,Franรงoise Lapierre,0 -699,0,12, ,7252,3.png,axis,Marcel Achen,0 -700,12,3,Two Hundred and Fifty Three,3007,Nan,axis,Jiang Li Tao,0 -701,42,29,For Thousand Seven Hundred and Thirty Six,4736,214.png,axis,Hayden Bruce,1 -702,7,16,Eigt Thousand Six Hundred and Foty Eigt,8648,37.png,axis,Searlas Grenier,1 -703,2,16,For Thousand and Foty Eigt,4048,14.png,axis,Searlas Grenier,1 -704,4,36,Six Thousand On Hundred and Thirty Nine,6139,21.png,axis,Thomas Chapman,1 -705,4,2,For Thousand For Hundred and Thirty For,4434,22.png,axis,Chi Hsiao,1 -706,9,23,For Thousand Two Hundred and Twenty Seven,4227,46.png,axis,Thรฉrรจse Fortier,1 -707,34,10,On Hundred and Sixt Six,166,171.png,axis,Stephan Schwab,1 -708,35,9,Thre Thousand Two Hundred and Foty Eigt,3248,175.png,axis,Maria Kalb,1 -709,25,16,Two Thousand Eigt Hundred and Eleven,2811,125.png,axis,Searlas Grenier,1 -710,19,25,Thre Thousand Five Hundred and Seenty Thre,3573,98.png,axis,Fleurette Coudert,1 -711,29,39,On Thousand Two Hundred and Fifty Thre,1253,146.png,axis,Katie Connor,1 -712,0,6,Seven Thousand Seven Hundred and Eigt,7708,3.png,axis,Abdul Qais Khouri,1 -713,23,31,For Thousand Thre Hundred and Foty Eigt,4348,117.png,axis,Naomi Grant,1 -714,36,7,On Thousand On Hundred and Sixt Seven,1167,182.png,axis,Hasna Bahiyaa Amari,1 -715,23,37,On Thousand Six Hundred,1600,118.png,axis,Eva Davies,1 -716,9,10,Six Thousand Eigt Hundred and Eigt,6808,48.png,axis,Stephan Schwab,1 -717,21,30,Eigt Thousand Thre Hundred and Two,8302,107.png,axis,Jodie Holden,1 -718,2,27,Two Thousand Two Hundred and Thirty Eigt,2238,13.png,axis,Colette Monjeau,1 -719,13,18,Two Thousand Six Hundred and Eihty Thre,2683,65.png,axis,Edmee Pelletier,1 -720,6,18,For Thousand On Hundred and Eihty Five,4185,34.png,axis,Edmee Pelletier,1 -721,19,18,Six Thousand For Hundred and Two,6402,98.png,axis,Edmee Pelletier,1 -722,36,10,Five Thousand Seven Hundred and Nine,5709,181.png,axis,Stephan Schwab,1 -723,28,31,Two Thousand Eigt Hundred and Seenty,2870,143.png,axis,Naomi Grant,1 -724,23,37,Seven Thousand Six Hundred and Sixt,7660,116.png,axis,Eva Davies,1 -725,5,9,Thre Hundred and Ninety Seven,397,25.png,axis,Maria Kalb,1 -726,26,42,Two Thousand Thre Hundred and Eigt,2308,134.png,axis,Brady Jamin,1 -727,0,8,Eigt Thousand Six Hundred and Sixt Eigt,8668,4.png,axis,Steffen Krueger,1 -728,14,37,Seven Thousand On Hundred and Foty On,7141,70.png,axis,Eva Davies,1 -729,31,24,Six Thousand For Hundred and Foty Seven,6447,159.png,axis,Clarice Blanc,1 -730,0,0,Eigt Thousand Eigt Hundred and Six,8806,3.png,axis,Ethel M. Bryson,1 -731,35,18,On Thousand Two Hundred and Fifty On,1251,178.png,axis,Edmee Pelletier,1 -732,18,6,Seven Thousand Seven Hundred and Foty Two,7742,92.png,axis,Abdul Qais Khouri,1 -733,18,30,Six Thousand Eigt Hundred and Eihty Thre,6883,93.png,axis,Jodie Holden,1 -734,16,10,Six Thousand Seven Hundred and Seenty Eigt,6778,84.png,axis,Stephan Schwab,1 -735,43,27,Seven Thousand On Hundred and Eihteen,7118,217.png,axis,Colette Monjeau,1 -736,19,2,Six Thousand Six Hundred and Sixt Seven,6667,97.png,axis,Chi Hsiao,1 -737,18,3,For Thousand and Foty Six,4046,91.png,axis,Jiang Li Tao,1 -738,7,38,Five Thousand Thre Hundred and Sxten,5316,37.png,axis,Freddie Reid,1 -739,32,6,Five Thousand and Twenty On,5021,160.png,axis,Abdul Qais Khouri,1 -740,21,13,Seven Thousand Eigt Hundred and Sixt Five,7865,108.png,axis,Petra Kovacic,1 -741,29,10,Six Thousand Five Hundred and Eihty For,6584,149.png,axis,Stephan Schwab,1 -742,23,23,Seven Thousand Seven Hundred and Ninety Six,7796,116.png,axis,Thรฉrรจse Fortier,1 -743,2,0,Eigt Thousand Seven Hundred and Nine,8709,14.png,axis,Ethel M. Bryson,1 -744,0,41,Thre Thousand Two Hundred and Foty Nine,3249,0.png,axis,Germa de Geus,1 -745,23,37,Two Thousand On Hundred and Fifty Nine,2159,116.png,axis,Eva Davies,1 -746,29,19,Thre Thousand Thre Hundred and Six,3306,147.png,axis,Franรงoise Lapierre,1 -747,31,6,Nine Thousand Five Hundred and Foty,9540,156.png,axis,Abdul Qais Khouri,1 -748,42,33,Nine Hundred,900,211.png,axis,Eleanor Freeman,1 -749,3,4,Two Thousand For Hundred and Seenty On,2471,15.png,axis,Wafiyah Nashwa Wasem,1 -750,24,17,Two Thousand Eigt Hundred and Thirty Six,2836,124.png,axis,Yolette Cloutier,1 -751,32,9,Six Thousand For Hundred and Sixt On,6461,160.png,axis,Maria Kalb,1 -752,10,41,Five Thousand Six Hundred and Eihty Five,5685,50.png,axis,Germa de Geus,1 -753,41,12,Two Thousand Nine Hundred and Fifty Six,2956,207.png,axis,Marcel Achen,1 -754,1,31,For Thousand Six Hundred and Twenty Thre,4623,8.png,axis,Naomi Grant,1 -755,16,5,On Thousand Nine Hundred and Foty On,1941,80.png,axis,Fawwaz Zuhayr Mustafa,1 -756,6,20,Six Thousand Nine Hundred and Ninety Thre,6993,31.png,axis,Seymour Patenaude,1 -757,17,13,Seven Thousand Eigt Hundred and Foty Thre,7843,87.png,axis,Petra Kovacic,1 -758,14,32,Five Thousand Five Hundred and Thirteen,5513,74.png,axis,Chelsea Watson,1 -759,39,3,Nine Thousand Six Hundred and Sixt Thre,9663,199.png,axis,Jiang Li Tao,1 -760,18,17,Nine Thousand On Hundred and Two,9102,94.png,axis,Yolette Cloutier,1 -761,11,19,For Thousand Thre Hundred and Eihty Two,4382,55.png,axis,Franรงoise Lapierre,1 -762,26,18,Seven Thousand Nine Hundred and Sixt Two,7962,133.png,axis,Edmee Pelletier,1 -763,17,23,For Thousand and Fifty Seven,4057,87.png,axis,Thรฉrรจse Fortier,1 -764,3,19,Five Thousand On Hundred and Nine,5109,15.png,axis,Franรงoise Lapierre,1 -765,15,27,On Thousand Nine Hundred and Thirty Six,1936,76.png,axis,Colette Monjeau,1 -766,12,10,Two Thousand Thre Hundred and Sixt Eigt,2368,63.png,axis,Stephan Schwab,1 -767,4,2,Two Thousand and Ninety Two,2092,20.png,axis,Chi Hsiao,1 -768,39,40,Thre Thousand Six Hundred and Fifty Eigt,3658,196.png,axis,David Howard,1 -769,1,35,Thre Thousand For Hundred and Fifty Five,3455,9.png,axis,Elliot Humphreys,1 -770,30,23,Seven Thousand Eigt Hundred and Ninety For,7894,153.png,axis,Thรฉrรจse Fortier,1 -771,33,34,Five Thousand Eigt Hundred and Twenty On,5821,166.png,axis,Holly Martin,1 -772,41,5,Thre Thousand Eigt Hundred and Foty Two,3842,208.png,axis,Fawwaz Zuhayr Mustafa,1 -773,24,3,Nine Thousand Thre Hundred and Thirty Eigt,9338,124.png,axis,Jiang Li Tao,1 -774,41,41,Five Thousand Nine Hundred and Thirty Thre,5933,209.png,axis,Germa de Geus,1 -775,33,43,On Thousand Eigt Hundred and Fifty For,1854,169.png,axis,Aruna Bekx,1 -776,15,17,Seven Thousand Seven Hundred and Twenty Thre,7723,77.png,axis,Yolette Cloutier,1 -777,35,25,Two Thousand On Hundred and Thirty Two,2132,175.png,axis,Fleurette Coudert,1 -778,38,6,Nine Thousand For Hundred and Ninety Five,9495,193.png,axis,Abdul Qais Khouri,1 -779,7,15,Five Thousand Thre Hundred and Eihty Five,5385,37.png,axis,Milenko Tkalcic,1 -780,27,9,On Thousand Six Hundred and Fifty Thre,1653,136.png,axis,Maria Kalb,1 -781,27,7,On Thousand Thre Hundred and Seenty Eigt,1378,139.png,axis,Hasna Bahiyaa Amari,1 -782,23,22,Nine Thousand For Hundred and Eihty Nine,9489,118.png,axis,Eglantine Forest,1 -783,22,15,Eigt Hundred and Ninety,890,113.png,axis,Milenko Tkalcic,1 -784,24,9,Seven Thousand Six Hundred and Two,7602,124.png,axis,Maria Kalb,1 -785,23,27,Six Thousand Thre Hundred and For,6304,116.png,axis,Colette Monjeau,1 -786,38,9,On Thousand Thre Hundred and Seenty Seven,1377,194.png,axis,Maria Kalb,1 -787,21,25,Seven Thousand Two Hundred and Fifty Eigt,7258,107.png,axis,Fleurette Coudert,1 -788,40,27,For Thousand On Hundred and Eihty,4180,201.png,axis,Colette Monjeau,1 -789,28,36,Five Thousand Thre Hundred and Foty Nine,5349,140.png,axis,Thomas Chapman,1 -790,6,39,Eigt Thousand Eigt Hundred and Foty,8840,32.png,axis,Katie Connor,1 -791,25,31,Thre Thousand Six Hundred and Fifty For,3654,128.png,axis,Naomi Grant,1 -792,7,19,Nine Thousand Thre Hundred and Twenty Two,9322,35.png,axis,Franรงoise Lapierre,1 -793,7,23,Thre Hundred and Nine,309,36.png,axis,Thรฉrรจse Fortier,1 -794,15,16,Two Thousand Eigt Hundred and Ninety Seven,2897,77.png,axis,Searlas Grenier,1 -795,24,12,On Thousand Nine Hundred and Thre,1903,122.png,axis,Marcel Achen,1 -796,9,20,Two Thousand On Hundred and Seenty For,2174,49.png,axis,Seymour Patenaude,1 -797,17,32,Nine Hundred and Eigt,908,85.png,axis,Chelsea Watson,1 -798,16,6,Nine Thousand and Thirty Thre,9033,84.png,axis,Abdul Qais Khouri,1 -799,20,9,On Hundred and Forteen,114,104.png,axis,Maria Kalb,1 -800,39,25,Thre Thousand Nine Hundred and Eleven,3911,196.png,axis,Fleurette Coudert,1 -801,9,38,On Thousand Five Hundred and Seenty For,1574,46.png,axis,Freddie Reid,1 -802,27,11,For Thousand Five Hundred and Seenty For,4574,135.png,axis,Jens Egger,1 -803,21,38,Two Thousand Nine Hundred and Eihty Seven,2987,107.png,axis,Freddie Reid,1 -804,15,20,Two Thousand Seven Hundred and Twenty On,2721,77.png,axis,Seymour Patenaude,1 -805,21,20,Nine Thousand Five Hundred and Twenty Eigt,9528,108.png,axis,Seymour Patenaude,1 -806,10,11,Two Thousand For Hundred and Twenty Six,2426,50.png,axis,Jens Egger,1 -807,1,22,Nine Thousand On Hundred and Sixt Thre,9163,9.png,axis,Eglantine Forest,1 -808,26,39,Nine Hundred and Ninety Nine,999,134.png,axis,Katie Connor,1 -809,15,7,Seven Thousand Nine Hundred and Thirty,7930,79.png,axis,Hasna Bahiyaa Amari,1 -810,7,19,Eigt Thousand Seven Hundred and Sixt Eigt,8768,37.png,axis,Franรงoise Lapierre,1 -811,40,41,Nine Thousand Eigt Hundred and Ninety Seven,9897,203.png,axis,Germa de Geus,1 -812,10,24,On Thousand Nine Hundred and Eihty,1980,50.png,axis,Clarice Blanc,1 -813,34,7,On Thousand On Hundred and Foty On,1141,174.png,axis,Hasna Bahiyaa Amari,1 -814,19,27,Eigt Thousand For Hundred and Two,8402,96.png,axis,Colette Monjeau,1 -815,8,41,On Thousand and Seenty On,1071,42.png,axis,Germa de Geus,1 -816,17,7,Seven Thousand Thre Hundred and Ninety Five,7395,89.png,axis,Hasna Bahiyaa Amari,1 -817,19,30,Nine Thousand For Hundred and Foty,9440,98.png,axis,Jodie Holden,1 -818,35,31,Nine Thousand Five Hundred and Sixt Two,9562,175.png,axis,Naomi Grant,1 -819,29,13,For Thousand Seven Hundred and Sixt Seven,4767,148.png,axis,Petra Kovacic,1 -820,19,28,For Thousand Eigt Hundred and Ninety Six,4896,96.png,axis,Chapin Auger,1 -821,19,11,Six Thousand Nine Hundred and Fiteen,6915,97.png,axis,Jens Egger,1 -822,26,29,For Thousand Two Hundred and Ninety Two,4292,131.png,axis,Hayden Bruce,1 -823,11,25,On Thousand Two Hundred and Twenty Eigt,1228,59.png,axis,Fleurette Coudert,1 -824,0,3,Six Thousand On Hundred and Eihty Seven,6187,3.png,axis,Jiang Li Tao,1 -825,13,0,Six Thousand Eigt Hundred and Fifty,6850,66.png,axis,Ethel M. Bryson,1 -826,31,17,Seven Thousand Thre Hundred and Thirty Six,7336,156.png,axis,Yolette Cloutier,1 -827,43,43,Nine Thousand and Thirty Six,9036,219.png,axis,Aruna Bekx,1 -828,11,0,Six Thousand Five Hundred and Ninety Six,6596,55.png,axis,Ethel M. Bryson,1 -829,6,7,Six Thousand Thre Hundred and Eihteen,6318,31.png,axis,Hasna Bahiyaa Amari,1 -830,6,38,Six Thousand Five Hundred and Eihty,6580,33.png,axis,Freddie Reid,1 -831,28,4,On Thousand Eigt Hundred and Seenty Seven,1877,140.png,axis,Wafiyah Nashwa Wasem,1 -832,20,5,Eigt Thousand Eigt Hundred and Seenty On,8871,100.png,axis,Fawwaz Zuhayr Mustafa,1 -833,26,30,Eigt Thousand Six Hundred and Eihty Two,8682,134.png,axis,Jodie Holden,1 -834,25,18,Two Thousand For Hundred and Twenty Six,2426,126.png,axis,Edmee Pelletier,1 -835,15,14,Six Thousand Five Hundred and Twenty For,6524,78.png,axis,Renata Lukic,1 -836,4,0,Two Thousand For Hundred and Foty Seven,2447,20.png,axis,Ethel M. Bryson,1 -837,18,38,Eigt Thousand Five Hundred and Sixt Nine,8569,90.png,axis,Freddie Reid,1 -838,3,22,For Hundred and Thre,403,19.png,axis,Eglantine Forest,1 -839,28,5,Two Thousand Nine Hundred and Eleven,2911,140.png,axis,Fawwaz Zuhayr Mustafa,1 -840,18,32,Eigt Thousand Nine Hundred and Fifty,8950,92.png,axis,Chelsea Watson,1 -841,33,20,On Thousand Nine Hundred and Fifty Thre,1953,167.png,axis,Seymour Patenaude,1 -842,9,30,For Thousand Five Hundred and Eigt,4508,45.png,axis,Jodie Holden,1 -843,3,43,Five Thousand Seven Hundred and Thirty On,5731,17.png,axis,Aruna Bekx,1 -844,20,7,Thre Thousand and Twenty,3020,101.png,axis,Hasna Bahiyaa Amari,1 -845,30,36,For Thousand Seven Hundred and Seenty Five,4775,153.png,axis,Thomas Chapman,1 -846,35,15,For Hundred and Sixt Nine,469,178.png,axis,Milenko Tkalcic,1 -847,22,17,Six Thousand Thre Hundred and Two,6302,110.png,axis,Yolette Cloutier,1 -848,25,3,On Hundred and Foty Thre,143,129.png,axis,Jiang Li Tao,1 -849,30,16,Thre Thousand On Hundred and Foty Two,3142,151.png,axis,Searlas Grenier,1 -850,11,25,Five Thousand For Hundred and Fifty Seven,5457,55.png,axis,Fleurette Coudert,1 -851,22,40,Thre Thousand For Hundred and Twenty,3420,111.png,axis,David Howard,1 -852,20,33,Seven Thousand For Hundred and Eihty Seven,7487,102.png,axis,Eleanor Freeman,1 -853,7,13,Nine Thousand Six Hundred and Ninety Five,9695,36.png,axis,Petra Kovacic,1 -854,29,29,Five Thousand Thre Hundred and Sixt On,5361,148.png,axis,Hayden Bruce,1 -855,31,23,Nine Hundred and Thirty Five,935,158.png,axis,Thรฉrรจse Fortier,1 -856,37,43,Thre Thousand Eigt Hundred and Ninety Five,3895,186.png,axis,Aruna Bekx,1 -857,30,25,Eigt Thousand and Eihty Seven,8087,150.png,axis,Fleurette Coudert,1 -858,39,35,Two Thousand Seven Hundred and Fifty Nine,2759,195.png,axis,Elliot Humphreys,1 -859,37,14,Seven Thousand Two Hundred and Foty,7240,189.png,axis,Renata Lukic,1 -860,36,2,Ninety Two,92,184.png,axis,Chi Hsiao,1 -861,18,6,Five Thousand Eigt Hundred and Eihteen,5818,91.png,axis,Abdul Qais Khouri,1 -862,40,13,Two Thousand Eigt Hundred and Foty Seven,2847,202.png,axis,Petra Kovacic,1 -863,40,16,Eigt Thousand On Hundred and Forteen,8114,200.png,axis,Searlas Grenier,1 -864,24,28,Two Thousand Seven Hundred and Seenty Nine,2779,122.png,axis,Chapin Auger,1 -865,42,3,On Thousand On Hundred and Thirty Five,1135,213.png,axis,Jiang Li Tao,1 -866,6,27,For Thousand Thre Hundred and Seenty Thre,4373,33.png,axis,Colette Monjeau,1 -867,21,7,Five Thousand Nine Hundred and Eihty Five,5985,106.png,axis,Hasna Bahiyaa Amari,1 -868,9,42,Two Thousand For Hundred and Eihty Two,2482,49.png,axis,Brady Jamin,1 -869,42,6,Eigt Thousand Eigt Hundred and Five,8805,212.png,axis,Abdul Qais Khouri,1 -870,34,17,Five Thousand Five Hundred and Ninety Eigt,5598,171.png,axis,Yolette Cloutier,1 -871,37,1,On Thousand Thre Hundred and Twenty For,1324,186.png,axis,Emily D. Short,1 -872,39,4,On Thousand Nine Hundred and Seenty For,1974,198.png,axis,Wafiyah Nashwa Wasem,1 -873,17,18,Eigt Hundred and Twlve,812,89.png,axis,Edmee Pelletier,1 -874,34,3,For Thousand Five Hundred and Thirty Six,4536,171.png,axis,Jiang Li Tao,1 -875,9,42,Five Thousand Six Hundred and Sixt For,5664,49.png,axis,Brady Jamin,1 -876,3,25,Seven Thousand Thre Hundred and Thirty Six,7336,16.png,axis,Fleurette Coudert,1 -877,37,25,For Hundred and Seenty Eigt,478,187.png,axis,Fleurette Coudert,1 -878,17,16,Thre Thousand Eigt Hundred and Seenty Thre,3873,87.png,axis,Searlas Grenier,1 -879,10,28,On Thousand Seven Hundred and Fifty Five,1755,54.png,axis,Chapin Auger,1 -880,34,33,Seven Thousand Two Hundred and Fiteen,7215,170.png,axis,Eleanor Freeman,1 -881,14,41,Five Thousand and Eihty Six,5086,73.png,axis,Germa de Geus,1 -882,2,28,Thre Thousand On Hundred and Foty Five,3145,13.png,axis,Chapin Auger,1 -883,38,0,Eigt Thousand Six Hundred and Foty,8640,192.png,axis,Ethel M. Bryson,1 -884,0,4,Eigt Thousand On Hundred and Eihty Eigt,8188,2.png,axis,Wafiyah Nashwa Wasem,1 -885,17,24,Thre Thousand For Hundred and Foty For,3444,85.png,axis,Clarice Blanc,1 -886,0,24,On Thousand Eigt Hundred and Ninety Eigt,1898,2.png,axis,Clarice Blanc,1 -887,43,9,For Thousand Five Hundred and Ninety On,4591,218.png,axis,Maria Kalb,1 -888,38,36,For Thousand On Hundred and Sixt On,4161,191.png,axis,Thomas Chapman,1 -889,42,40,Nine Hundred and Foty Six,946,213.png,axis,David Howard,1 -890,38,1,Eigt Thousand Nine Hundred and Ninety On,8991,191.png,axis,Emily D. Short,1 -891,26,35,Seven Thousand and Eihty On,7081,133.png,axis,Elliot Humphreys,1 -892,40,2,Seven Hundred and Seenty Two,772,201.png,axis,Chi Hsiao,1 -893,7,14,Nine Thousand and Thre,9003,35.png,axis,Renata Lukic,1 -894,6,4,Five Thousand Two Hundred and Sixt Thre,5263,31.png,axis,Wafiyah Nashwa Wasem,1 -895,31,8,Nine Hundred and Ninety Thre,993,156.png,axis,Steffen Krueger,1 -896,13,10,Eigt Thousand Seven Hundred and Foty On,8741,69.png,axis,Stephan Schwab,1 -897,27,10,Nine Thousand For Hundred and Seenty Seven,9477,135.png,axis,Stephan Schwab,1 -898,40,33,Thre Thousand Seven Hundred and Seventeen,3717,202.png,axis,Eleanor Freeman,1 -899,35,33,Seven Thousand Nine Hundred and Sixt Eigt,7968,177.png,axis,Eleanor Freeman,1 -900,36,32,For Thousand and For,4004,181.png,axis,Chelsea Watson,1 -901,22,3,Seven Thousand Thre Hundred and Eihty Two,7382,111.png,axis,Jiang Li Tao,1 -902,4,8,Nine Thousand For Hundred and Twenty Two,9422,24.png,axis,Steffen Krueger,1 -903,4,38,Five Thousand Thre Hundred and Eihty,5380,22.png,axis,Freddie Reid,1 -904,31,8,On Thousand Eigt Hundred and Thirty On,1831,158.png,axis,Steffen Krueger,1 -905,22,9,Thre Hundred and Ten,310,113.png,axis,Maria Kalb,1 -906,11,39,Five Thousand Nine Hundred and Thirty For,5934,56.png,axis,Katie Connor,1 -907,11,15,Thre Thousand For Hundred and On,3401,58.png,axis,Milenko Tkalcic,1 -908,16,26,For Thousand Two Hundred and Fifty For,4254,82.png,axis,Sidney Lapointe,1 -909,18,24,Nine Thousand Five Hundred and Seenty Thre,9573,94.png,axis,Clarice Blanc,1 -910,20,42,Eigt Thousand and Ninety Five,8095,101.png,axis,Brady Jamin,1 -911,11,12,Seven Thousand Nine Hundred and Thirteen,7913,59.png,axis,Marcel Achen,1 -912,32,16,Nine Thousand Thre Hundred and Sixt Eigt,9368,160.png,axis,Searlas Grenier,1 -913,26,2,Six Thousand For Hundred and Seenty Thre,6473,131.png,axis,Chi Hsiao,1 -914,9,43,Five Thousand On Hundred and Thirty For,5134,48.png,axis,Aruna Bekx,1 -915,39,7,Nine Thousand Seven Hundred and Foty Eigt,9748,198.png,axis,Hasna Bahiyaa Amari,1 -916,9,19,Thre Thousand For Hundred and Fiteen,3415,45.png,axis,Franรงoise Lapierre,1 -917,35,43,Five Thousand Nine Hundred and Ninety Five,5995,178.png,axis,Aruna Bekx,1 -918,9,22,For Thousand Nine Hundred and Eigt,4908,45.png,axis,Eglantine Forest,1 -919,32,0,Two Thousand Five Hundred and Seenty On,2571,160.png,axis,Ethel M. Bryson,1 -920,28,24,On Thousand On Hundred and Foty,1140,141.png,axis,Clarice Blanc,1 -921,37,42,On Thousand Seven Hundred and Seenty Two,1772,187.png,axis,Brady Jamin,1 -922,29,31,Eigt Hundred and Twenty Eigt,828,147.png,axis,Naomi Grant,1 -923,9,8,For Thousand Two Hundred and Foty For,4244,49.png,axis,Steffen Krueger,1 -924,11,29,For Thousand Eigt Hundred and Twenty Eigt,4828,58.png,axis,Hayden Bruce,1 -925,30,21,Nine Thousand Thre Hundred and Eihteen,9318,151.png,axis,David Corbeil,1 -926,32,34,Nine Thousand Thre Hundred and Fifty Eigt,9358,164.png,axis,Holly Martin,1 -927,17,20,Eigt Thousand Eigt Hundred and Eihty Eigt,8888,86.png,axis,Seymour Patenaude,1 -928,34,1,Thre Thousand Thre Hundred and Twenty For,3324,173.png,axis,Emily D. Short,1 -929,11,5,On Thousand Five Hundred and Fifty On,1551,59.png,axis,Fawwaz Zuhayr Mustafa,1 -930,43,4,Nine Thousand Six Hundred and Seenty Five,9675,219.png,axis,Wafiyah Nashwa Wasem,1 -931,43,20,Six Thousand On Hundred and Fifty For,6154,218.png,axis,Seymour Patenaude,1 -932,22,14,Thre Thousand and Foty Five,3045,111.png,axis,Renata Lukic,1 -933,0,3,Nine Thousand Two Hundred and Fifty Two,9252,0.png,axis,Jiang Li Tao,1 -934,36,11,Five Thousand and Twenty Five,5025,180.png,axis,Jens Egger,1 -935,32,32,On Thousand and Thirty Five,1035,162.png,axis,Chelsea Watson,1 -936,23,38,Seven Thousand For Hundred and Sixt Two,7462,115.png,axis,Freddie Reid,1 -937,22,31,Eigt Thousand Eigt Hundred and Eigt,8808,110.png,axis,Naomi Grant,1 -938,26,36,For Thousand Six Hundred and Seventeen,4617,130.png,axis,Thomas Chapman,1 -939,18,18,Nine Thousand and Seenty Six,9076,92.png,axis,Edmee Pelletier,1 -940,26,5,Thre Thousand For Hundred and Foty Two,3442,130.png,axis,Fawwaz Zuhayr Mustafa,1 -941,43,8,Nine Thousand Nine Hundred and Eihty Seven,9987,215.png,axis,Steffen Krueger,1 -942,34,24,Two Thousand Seven Hundred and Foty Thre,2743,174.png,axis,Clarice Blanc,1 -943,13,2,Seven Thousand Thre Hundred and Nineten,7319,65.png,axis,Chi Hsiao,1 -944,0,16,Eigt Thousand Six Hundred and Ninety For,8694,1.png,axis,Searlas Grenier,1 -945,20,36,For Thousand Six Hundred and Eihty,4680,101.png,axis,Thomas Chapman,1 -946,25,14,Two Thousand Nine Hundred and Nine,2909,127.png,axis,Renata Lukic,1 -947,4,41,Thre Thousand Six Hundred and Eigt,3608,22.png,axis,Germa de Geus,1 -948,37,36,Nine Hundred and Eihty Seven,987,188.png,axis,Thomas Chapman,1 -949,1,35,Thre Thousand and Fifty Seven,3057,7.png,axis,Elliot Humphreys,1 -950,10,28,Five Thousand Five Hundred and Seenty Seven,5577,53.png,axis,Chapin Auger,1 -951,19,34,On Thousand Nine Hundred and Foty Five,1945,96.png,axis,Holly Martin,1 -952,0,19,For Hundred and Ninety Thre,493,0.png,axis,Franรงoise Lapierre,1 -953,4,32,Eigt Thousand Two Hundred and Ninety Five,8295,21.png,axis,Chelsea Watson,1 -954,18,21,Seven Thousand Nine Hundred and Fifty Five,7955,90.png,axis,David Corbeil,1 -955,18,37,Thre Thousand Thre Hundred and Eihty Thre,3383,94.png,axis,Eva Davies,1 -956,13,32,On Thousand Seven Hundred,1700,69.png,axis,Chelsea Watson,1 -957,31,14,Seven Thousand On Hundred,7100,156.png,axis,Renata Lukic,1 -958,0,8,Two Thousand Thre Hundred and Nineten,2319,3.png,axis,Steffen Krueger,1 -959,14,32,Two Thousand On Hundred and Fifty Five,2155,70.png,axis,Chelsea Watson,1 -960,41,8,For Thousand and Forteen,4014,209.png,axis,Steffen Krueger,1 -961,30,24,On Thousand Thre Hundred and Foty On,1341,152.png,axis,Clarice Blanc,1 -962,15,39,Eigt Thousand On Hundred and Ten,8110,75.png,axis,Katie Connor,1 -963,39,29,Five Thousand Nine Hundred and Thirteen,5913,195.png,axis,Hayden Bruce,1 -964,19,32,Seven Thousand For Hundred and Ninety Eigt,7498,97.png,axis,Chelsea Watson,1 -965,7,14,Seven Thousand Five Hundred and Fifty Five,7555,38.png,axis,Renata Lukic,1 -966,9,2,Two Thousand Thre Hundred and Ninety Seven,2397,46.png,axis,Chi Hsiao,1 -967,26,35,Nine Thousand Thre Hundred and Fiteen,9315,134.png,axis,Elliot Humphreys,1 -968,36,40,On Thousand Nine Hundred and Twenty,1920,182.png,axis,David Howard,1 -969,19,2,Two Thousand Five Hundred and Thirty On,2531,97.png,axis,Chi Hsiao,1 -970,30,16,For Hundred and Thirteen,413,152.png,axis,Searlas Grenier,1 -971,15,41,For Thousand For Hundred and Ninety On,4491,79.png,axis,Germa de Geus,1 -972,12,8,Five Thousand Six Hundred and Twenty Two,5622,60.png,axis,Steffen Krueger,1 -973,5,26,Two Thousand Thre Hundred and Foty Two,2342,26.png,axis,Sidney Lapointe,1 -974,11,6,For Hundred and Twenty Six,426,57.png,axis,Abdul Qais Khouri,1 -975,29,14,On Thousand Five Hundred and Fifty For,1554,148.png,axis,Renata Lukic,1 -976,10,8,Two Thousand Eigt Hundred and Thirty Nine,2839,52.png,axis,Steffen Krueger,1 -977,32,5,For Thousand Thre Hundred and Thirty Nine,4339,160.png,axis,Fawwaz Zuhayr Mustafa,1 -978,14,16,Two Thousand Thre Hundred and Fifty Two,2352,70.png,axis,Searlas Grenier,1 -979,9,34,On Thousand For Hundred and Fifty,1450,46.png,axis,Holly Martin,1 -980,17,4,Eigt Thousand Seven Hundred and Twlve,8712,85.png,axis,Wafiyah Nashwa Wasem,1 -981,30,27,Two Thousand Thre Hundred and Twenty Five,2325,154.png,axis,Colette Monjeau,1 -982,26,41,Thre Thousand Two Hundred and Thirty Seven,3237,133.png,axis,Germa de Geus,1 -983,30,39,Seven Thousand Nine Hundred and Fifty Six,7956,153.png,axis,Katie Connor,1 -984,5,2,On Thousand Two Hundred and Thirty On,1231,29.png,axis,Chi Hsiao,1 -985,34,4,On Thousand Five Hundred and Fifty For,1554,174.png,axis,Wafiyah Nashwa Wasem,1 -986,14,23,Two Thousand On Hundred and Twenty Nine,2129,70.png,axis,Thรฉrรจse Fortier,1 -987,21,7,Eigt Thousand Seven Hundred and Thirty Two,8732,105.png,axis,Hasna Bahiyaa Amari,1 -988,14,39,Two Thousand Six Hundred and Twenty Nine,2629,71.png,axis,Katie Connor,1 -989,15,20,Two Thousand Five Hundred and Twenty Six,2526,78.png,axis,Seymour Patenaude,1 -990,1,11,Seven Thousand For Hundred and Foty Five,7445,5.png,axis,Jens Egger,1 -991,40,23,On Thousand Eigt Hundred and Twenty Seven,1827,202.png,axis,Thรฉrรจse Fortier,1 -992,9,25,Two Thousand Six Hundred and Sixt Two,2662,46.png,axis,Fleurette Coudert,1 -993,1,42,Seven Thousand and Twenty Thre,7023,7.png,axis,Brady Jamin,1 -994,22,27,Five Thousand For Hundred and Eihty Six,5486,110.png,axis,Colette Monjeau,1 -995,34,21,Thre Thousand Nine Hundred and Seenty On,3971,173.png,axis,David Corbeil,1 -996,0,6,Five Thousand and Ninety Five,5095,1.png,axis,Abdul Qais Khouri,1 -997,10,5,Six Thousand Seven Hundred and Ninety Five,6795,54.png,axis,Fawwaz Zuhayr Mustafa,1 -998,24,43,Thre Thousand Thre Hundred and Ten,3310,124.png,axis,Aruna Bekx,1 -999,14,2,Six Thousand Five Hundred and Nine,6509,70.png,axis,Chi Hsiao,1 -1000,19,10,Five Hundred and Thirty Eigt,538,99.png,axis,Stephan Schwab,1 -1001,36,26,Eight Thousand Two Hundred and Forty One,8241,180.png,Agricole,Sidney Lapointe,1 -1002,10,8,One Thousand and Twenty Five,1025,53.png,Agricole,Steffen Krueger,1 -1003,19,29,Eight Thousand Six Hundred and Fifteen,8615,96.png,Agricole,Hayden Bruce,1 -1004,32,24,Four Thousand One Hundred and Forty One,4141,163.png,Agricole,Clarice Blanc,1 -1005,10,16,Four Thousand Eight Hundred and Forty Five,4845,51.png,Agricole,Searlas Grenier,1 -1006,37,21,Seven Thousand Three Hundred and Twenty Eight,7328,186.png,Agricole,David Corbeil,1 -1007,34,40,Eight Thousand and Ninety Eight,8098,170.png,Agricole,David Howard,1 -1008,31,18,Three Thousand Two Hundred and Eighteen,3218,155.png,Agricole,Edmee Pelletier,1 -1009,28,16,Two Thousand Five Hundred and Sixty,2560,142.png,Agricole,Searlas Grenier,1 -1010,34,39,One Thousand One Hundred and Seventy Six,1176,170.png,Agricole,Katie Connor,1 -1011,1,21,Three Hundred and Ninety Seven,397,7.png,Agricole,David Corbeil,1 -1012,4,26,Two Thousand and Sixty One,2061,20.png,Agricole,Sidney Lapointe,1 -1013,31,9,One Thousand Five Hundred and Seventy Five,1575,159.png,Agricole,Maria Kalb,1 -1014,24,27,Five Thousand and Eighty Six,5086,122.png,Agricole,Colette Monjeau,1 -1015,34,29,Four Thousand One Hundred and Forty Three,4143,170.png,Agricole,Hayden Bruce,1 -1016,8,20,Five Thousand Seven Hundred and Twenty,5720,44.png,Agricole,Seymour Patenaude,1 -1017,17,24,Seven Thousand Eight Hundred and Forty Nine,7849,86.png,Agricole,Clarice Blanc,1 -1018,5,17,One Thousand and Forty Seven,1047,29.png,Agricole,Yolette Cloutier,1 -1019,32,37,Nine Thousand and Thirty,9030,162.png,Agricole,Eva Davies,1 -1020,30,38,One Thousand Six Hundred and Eighty,1680,152.png,Agricole,Freddie Reid,1 -1021,37,10,Three Thousand Seven Hundred and Fifty Four,3754,188.png,Agricole,Stephan Schwab,1 -1022,5,5,Two Thousand and Ninety Eight,2098,27.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1023,39,3,Seven Thousand Five Hundred and Eighty Nine,7589,197.png,Agricole,Jiang Li Tao,1 -1024,10,36,Nine Thousand Six Hundred and Fifteen,9615,53.png,Agricole,Thomas Chapman,1 -1025,38,22,Nine Thousand and Seventy Eight,9078,190.png,Agricole,Eglantine Forest,1 -1026,21,29,Two Thousand Eight Hundred and Eleven,2811,107.png,Agricole,Hayden Bruce,1 -1027,18,41,Nine Thousand and Eighty,9080,94.png,Agricole,Germa de Geus,1 -1028,8,40,Three Thousand Eight Hundred and Sixty Nine,3869,40.png,Agricole,David Howard,1 -1029,25,3,Six Thousand and Fifteen,6015,127.png,Agricole,Jiang Li Tao,1 -1030,41,0,Eight Thousand and Seventy Five,8075,208.png,Agricole,Ethel M. Bryson,1 -1031,7,7,Two Thousand Five Hundred and Fifty Eight,2558,35.png,Agricole,Hasna Bahiyaa Amari,1 -1032,16,29,Seven Thousand One Hundred and Eight,7108,83.png,Agricole,Hayden Bruce,1 -1033,36,36,One Thousand Seven Hundred and Fifty Six,1756,181.png,Agricole,Thomas Chapman,1 -1034,8,34,One Thousand Nine Hundred and Nineteen,1919,43.png,Agricole,Holly Martin,1 -1035,11,27,Six Hundred and Seventeen,617,58.png,Agricole,Colette Monjeau,1 -1036,26,26,Eight Hundred and Sixty Nine,869,134.png,Agricole,Sidney Lapointe,1 -1037,9,42,Four Thousand Seven Hundred and Fifty Four,4754,48.png,Agricole,Brady Jamin,1 -1038,33,25,Nine Thousand Nine Hundred and Fifty Two,9952,165.png,Agricole,Fleurette Coudert,1 -1039,41,9,Two Thousand Four Hundred and Sixty Two,2462,205.png,Agricole,Maria Kalb,1 -1040,35,39,Four Hundred and Twenty Three,423,175.png,Agricole,Katie Connor,1 -1041,5,41,Three Thousand Two Hundred and Eighty Four,3284,29.png,Agricole,Germa de Geus,1 -1042,29,35,Three Thousand Eight Hundred and Eighty Three,3883,148.png,Agricole,Elliot Humphreys,1 -1043,28,13,Five Thousand Two Hundred and Thirty Nine,5239,140.png,Agricole,Petra Kovacic,1 -1044,27,27,Eight Hundred and Ten,810,135.png,Agricole,Colette Monjeau,1 -1045,14,1,Seven Thousand and Ninety Two,7092,70.png,Agricole,Emily D. Short,1 -1046,29,34,Four Thousand Five Hundred and Fifty Two,4552,146.png,Agricole,Holly Martin,1 -1047,6,39,Nine Thousand Six Hundred and Nine,9609,31.png,Agricole,Katie Connor,1 -1048,19,21,Seven Thousand One Hundred and Eighty Two,7182,96.png,Agricole,David Corbeil,1 -1049,8,13,Two Thousand One Hundred and Ninety Six,2196,44.png,Agricole,Petra Kovacic,1 -1050,29,26,One Thousand Three Hundred and Twelve,1312,149.png,Agricole,Sidney Lapointe,1 -1051,20,4,Eight Thousand Two Hundred and Twenty Two,8222,100.png,Agricole,Wafiyah Nashwa Wasem,1 -1052,41,34,Four Thousand and Eighty Eight,4088,208.png,Agricole,Holly Martin,1 -1053,7,4,One Thousand Five Hundred and Seventy One,1571,36.png,Agricole,Wafiyah Nashwa Wasem,1 -1054,12,26,Nine Thousand Six Hundred and Seventy Eight,9678,62.png,Agricole,Sidney Lapointe,1 -1055,18,39,Three Thousand Six Hundred and Twenty Six,3626,91.png,Agricole,Katie Connor,1 -1056,32,26,Two Thousand Six Hundred and Fifty Three,2653,161.png,Agricole,Sidney Lapointe,1 -1057,8,5,Thirty Four,34,44.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1058,35,1,Four Hundred and Eighty Two,482,175.png,Agricole,Emily D. Short,1 -1059,9,23,Six Thousand Nine Hundred and Fifty Nine,6959,46.png,Agricole,Thรฉrรจse Fortier,1 -1060,10,37,Seven Thousand Eight Hundred and Ninety Seven,7897,51.png,Agricole,Eva Davies,1 -1061,21,7,Three Thousand Three Hundred and Forty Eight,3348,106.png,Agricole,Hasna Bahiyaa Amari,1 -1062,11,8,One Thousand Five Hundred and Fifty Eight,1558,59.png,Agricole,Steffen Krueger,1 -1063,2,37,Six Thousand and Fifty Five,6055,14.png,Agricole,Eva Davies,1 -1064,24,26,Eight Thousand Nine Hundred and Eighty Six,8986,124.png,Agricole,Sidney Lapointe,1 -1065,0,42,Fifty Seven,57,0.png,Agricole,Brady Jamin,1 -1066,2,16,Three Thousand Four Hundred and Forty One,3441,13.png,Agricole,Searlas Grenier,1 -1067,36,3,Five Thousand One Hundred and Nineteen,5119,184.png,Agricole,Jiang Li Tao,1 -1068,20,39,Five Thousand Seven Hundred,5700,103.png,Agricole,Katie Connor,1 -1069,25,35,Five Thousand One Hundred and Six,5106,129.png,Agricole,Elliot Humphreys,1 -1070,42,32,Two Thousand Nine Hundred and Fifty Six,2956,213.png,Agricole,Chelsea Watson,1 -1071,19,3,Forty Five,45,95.png,Agricole,Jiang Li Tao,1 -1072,18,30,Two Hundred and Twelve,212,90.png,Agricole,Jodie Holden,1 -1073,12,37,Four Hundred and Sixty Four,464,63.png,Agricole,Eva Davies,1 -1074,26,25,Three Thousand Four Hundred and Sixty Five,3465,133.png,Agricole,Fleurette Coudert,1 -1075,41,1,Two Thousand Six Hundred and Fifty,2650,206.png,Agricole,Emily D. Short,1 -1076,31,42,Nine Thousand Seven Hundred and Ninety Four,9794,155.png,Agricole,Brady Jamin,1 -1077,41,25,Six Hundred and Sixty Eight,668,206.png,Agricole,Fleurette Coudert,1 -1078,15,29,Six Thousand Seven Hundred and Forty Six,6746,76.png,Agricole,Hayden Bruce,1 -1079,10,42,Eight Thousand Nine Hundred and Twenty Three,8923,54.png,Agricole,Brady Jamin,1 -1080,24,17,Nine Thousand Six Hundred and Twenty Four,9624,123.png,Agricole,Yolette Cloutier,1 -1081,43,15,One Hundred and Fifty Six,156,215.png,Agricole,Milenko Tkalcic,1 -1082,10,42,Seven Thousand Three Hundred and Sixty Eight,7368,54.png,Agricole,Brady Jamin,1 -1083,35,19,Two Thousand and Twenty Six,2026,177.png,Agricole,Franรงoise Lapierre,1 -1084,40,4,Three Thousand Nine Hundred and Seventy,3970,200.png,Agricole,Wafiyah Nashwa Wasem,1 -1085,10,8,Six Thousand One Hundred and Seventy Eight,6178,50.png,Agricole,Steffen Krueger,1 -1086,12,24,Two Thousand Seven Hundred and Sixty Seven,2767,64.png,Agricole,Clarice Blanc,1 -1087,6,2,Three Thousand Four Hundred and Fifty Four,3454,31.png,Agricole,Chi Hsiao,1 -1088,21,30,Six Thousand and Forty Three,6043,109.png,Agricole,Jodie Holden,1 -1089,30,8,Nine Thousand One Hundred and Eighty Two,9182,153.png,Agricole,Steffen Krueger,1 -1090,27,33,Nine Hundred and Ninety Three,993,135.png,Agricole,Eleanor Freeman,1 -1091,1,31,Three Thousand Six Hundred and Forty One,3641,9.png,Agricole,Naomi Grant,1 -1092,41,11,Three Thousand Four Hundred and Ninety One,3491,209.png,Agricole,Jens Egger,1 -1093,8,29,Nine Thousand and Eleven,9011,40.png,Agricole,Hayden Bruce,1 -1094,6,26,Eight Hundred and Sixty,860,32.png,Agricole,Sidney Lapointe,1 -1095,42,0,Seven Thousand Five Hundred and Three,7503,214.png,Agricole,Ethel M. Bryson,1 -1096,39,17,One Thousand and Forty Four,1044,199.png,Agricole,Yolette Cloutier,1 -1097,27,42,Three Thousand Two Hundred and Fifty,3250,138.png,Agricole,Brady Jamin,1 -1098,43,37,Six Thousand Eight Hundred and Seventy One,6871,216.png,Agricole,Eva Davies,1 -1099,34,23,Eight Thousand Three Hundred and Eighteen,8318,171.png,Agricole,Thรฉrรจse Fortier,1 -1100,12,8,Eight Thousand Six Hundred and Twenty Nine,8629,64.png,Agricole,Steffen Krueger,1 -1101,14,33,Six Thousand One Hundred and Twenty Six,6126,72.png,Agricole,Eleanor Freeman,1 -1102,25,13,Two Thousand Three Hundred and Seventy Nine,2379,125.png,Agricole,Petra Kovacic,1 -1103,35,8,Two Thousand Six Hundred and Ninety Six,2696,177.png,Agricole,Steffen Krueger,1 -1104,30,3,Four Thousand Six Hundred and Ninety,4690,154.png,Agricole,Jiang Li Tao,1 -1105,18,10,Two Hundred and Thirty Nine,239,93.png,Agricole,Stephan Schwab,1 -1106,42,42,Two Hundred and Eighty Seven,287,214.png,Agricole,Brady Jamin,1 -1107,36,6,Eight Hundred and Sixty Eight,868,180.png,Agricole,Abdul Qais Khouri,1 -1108,2,35,Four Thousand Six Hundred and Ninety Three,4693,10.png,Agricole,Elliot Humphreys,1 -1109,21,33,Six Thousand Eight Hundred and Fifty Six,6856,106.png,Agricole,Eleanor Freeman,1 -1110,1,13,Forty Four,44,7.png,Agricole,Petra Kovacic,1 -1111,22,4,Nine Thousand Eight Hundred and Ten,9810,114.png,Agricole,Wafiyah Nashwa Wasem,1 -1112,26,19,Nine Thousand Seven Hundred and Eighty Six,9786,134.png,Agricole,Franรงoise Lapierre,1 -1113,24,12,Three Hundred and Sixty Nine,369,120.png,Agricole,Marcel Achen,1 -1114,18,2,Nine Thousand Six Hundred and Fifty Three,9653,94.png,Agricole,Chi Hsiao,1 -1115,18,18,Four Thousand Nine Hundred and Three,4903,91.png,Agricole,Edmee Pelletier,1 -1116,4,36,Nine Thousand Seven Hundred and Thirty One,9731,20.png,Agricole,Thomas Chapman,1 -1117,23,30,Two Thousand Five Hundred and Eighty Nine,2589,118.png,Agricole,Jodie Holden,1 -1118,33,19,Three Thousand Eight Hundred and Fifty,3850,168.png,Agricole,Franรงoise Lapierre,1 -1119,39,39,One Thousand One Hundred and Sixty One,1161,199.png,Agricole,Katie Connor,1 -1120,21,40,Three Hundred and Seventy Six,376,105.png,Agricole,David Howard,1 -1121,26,15,Eight Thousand Seven Hundred and Ten,8710,131.png,Agricole,Milenko Tkalcic,1 -1122,3,37,Nine Thousand One Hundred and Thirty Six,9136,19.png,Agricole,Eva Davies,1 -1123,16,15,Three Thousand Eight Hundred and One,3801,83.png,Agricole,Milenko Tkalcic,1 -1124,5,24,Four Thousand Four Hundred and Seventy Five,4475,28.png,Agricole,Clarice Blanc,1 -1125,21,42,Three Thousand Seven Hundred and Forty Four,3744,105.png,Agricole,Brady Jamin,1 -1126,34,30,One Thousand Six Hundred and Fifty Three,1653,173.png,Agricole,Jodie Holden,1 -1127,1,42,One Hundred and Sixty Eight,168,8.png,Agricole,Brady Jamin,1 -1128,11,31,Nine Thousand Six Hundred and Nineteen,9619,58.png,Agricole,Naomi Grant,1 -1129,43,18,Five Thousand One Hundred and Seventy Three,5173,217.png,Agricole,Edmee Pelletier,1 -1130,7,8,Two Thousand and Thirty,2030,38.png,Agricole,Steffen Krueger,1 -1131,30,41,Two Thousand Five Hundred and Eighty,2580,153.png,Agricole,Germa de Geus,1 -1132,20,6,Three Thousand Seven Hundred and Sixty Eight,3768,101.png,Agricole,Abdul Qais Khouri,1 -1133,0,36,Four Thousand Three Hundred and Eighty Seven,4387,0.png,Agricole,Thomas Chapman,1 -1134,32,41,Nine Thousand and Thirty Seven,9037,161.png,Agricole,Germa de Geus,1 -1135,4,0,Eight Thousand Two Hundred and Forty Five,8245,21.png,Agricole,Ethel M. Bryson,1 -1136,41,34,Nine Thousand Seven Hundred and Thirty Eight,9738,207.png,Agricole,Holly Martin,1 -1137,10,35,Seven Thousand Three Hundred and Seventy,7370,50.png,Agricole,Elliot Humphreys,1 -1138,7,42,Three Thousand Two Hundred and Eighty Four,3284,38.png,Agricole,Brady Jamin,1 -1139,43,36,One Thousand Three Hundred and Seventy Nine,1379,217.png,Agricole,Thomas Chapman,1 -1140,18,1,Two Thousand Two Hundred and Eighty Three,2283,91.png,Agricole,Emily D. Short,1 -1141,13,28,Five Thousand and Sixty Four,5064,69.png,Agricole,Chapin Auger,1 -1142,4,33,Nine Thousand Five Hundred and Ninety Two,9592,22.png,Agricole,Eleanor Freeman,1 -1143,40,3,Six Thousand Nine Hundred and Ninety Nine,6999,204.png,Agricole,Jiang Li Tao,1 -1144,4,5,Four Thousand Eight Hundred and Six,4806,23.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1145,34,38,Six Hundred and Seventy Three,673,174.png,Agricole,Freddie Reid,1 -1146,35,11,Three Thousand Six Hundred and Fifty,3650,176.png,Agricole,Jens Egger,1 -1147,28,22,One Thousand One Hundred and Thirty Two,1132,140.png,Agricole,Eglantine Forest,1 -1148,27,36,Nine Thousand Six Hundred and Sixteen,9616,138.png,Agricole,Thomas Chapman,1 -1149,16,19,Seven Thousand Five Hundred and Twenty Seven,7527,80.png,Agricole,Franรงoise Lapierre,1 -1150,0,13,Seven Thousand Nine Hundred and Twenty,7920,4.png,Agricole,Petra Kovacic,1 -1151,28,29,Seven Thousand Three Hundred and Seventy One,7371,144.png,Agricole,Hayden Bruce,1 -1152,23,27,Four Thousand One Hundred and Thirty Seven,4137,116.png,Agricole,Colette Monjeau,1 -1153,19,42,Seven Hundred and Eighty Eight,788,98.png,Agricole,Brady Jamin,1 -1154,38,3,Two Thousand Three Hundred and Ten,2310,192.png,Agricole,Jiang Li Tao,1 -1155,27,19,Seven Thousand Two Hundred and Ninety Four,7294,136.png,Agricole,Franรงoise Lapierre,1 -1156,6,30,Six Hundred and Forty Six,646,33.png,Agricole,Jodie Holden,1 -1157,34,25,Nine Thousand Six Hundred and Thirty Two,9632,170.png,Agricole,Fleurette Coudert,1 -1158,13,43,Four Thousand Six Hundred and Ninety Three,4693,66.png,Agricole,Aruna Bekx,1 -1159,5,22,Two Thousand Three Hundred and Twenty,2320,27.png,Agricole,Eglantine Forest,1 -1160,7,12,Seven Thousand Three Hundred and Twenty,7320,35.png,Agricole,Marcel Achen,1 -1161,7,29,Two Thousand Eight Hundred and Ninety Seven,2897,37.png,Agricole,Hayden Bruce,1 -1162,4,18,One Thousand Five Hundred and Seventy Four,1574,21.png,Agricole,Edmee Pelletier,1 -1163,36,20,Nine Thousand Four Hundred and Ten,9410,180.png,Agricole,Seymour Patenaude,1 -1164,37,41,Five Thousand Nine Hundred and Thirty Four,5934,188.png,Agricole,Germa de Geus,1 -1165,32,18,Four Thousand Two Hundred and Ninety One,4291,161.png,Agricole,Edmee Pelletier,1 -1166,42,18,One Thousand Four Hundred and Eighty Two,1482,214.png,Agricole,Edmee Pelletier,1 -1167,39,34,One Thousand Eight Hundred and Fifty,1850,196.png,Agricole,Holly Martin,1 -1168,11,25,One Thousand One Hundred and Fifty,1150,59.png,Agricole,Fleurette Coudert,1 -1169,41,24,Five Thousand One Hundred and Ninety Four,5194,208.png,Agricole,Clarice Blanc,1 -1170,37,1,Six Thousand and Two,6002,185.png,Agricole,Emily D. Short,1 -1171,26,16,Six Thousand Two Hundred and Seventy Five,6275,132.png,Agricole,Searlas Grenier,1 -1172,35,5,Three Thousand Seven Hundred,3700,178.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1173,9,24,One Thousand One Hundred and Eighty Five,1185,47.png,Agricole,Clarice Blanc,1 -1174,30,40,Five Thousand Three Hundred and Thirty,5330,154.png,Agricole,David Howard,1 -1175,10,21,Four Thousand Eight Hundred and Three,4803,54.png,Agricole,David Corbeil,1 -1176,31,15,Five Thousand Four Hundred and Seventy,5470,159.png,Agricole,Milenko Tkalcic,1 -1177,9,23,Six Thousand Two Hundred and Ninety One,6291,46.png,Agricole,Thรฉrรจse Fortier,1 -1178,37,4,Nine Thousand Nine Hundred and Twenty Nine,9929,185.png,Agricole,Wafiyah Nashwa Wasem,1 -1179,13,0,Six Thousand One Hundred and Eighty Seven,6187,65.png,Agricole,Ethel M. Bryson,1 -1180,39,13,Seven Thousand and Sixty Two,7062,195.png,Agricole,Petra Kovacic,1 -1181,29,23,Four Thousand Two Hundred and Fourteen,4214,149.png,Agricole,Thรฉrรจse Fortier,1 -1182,15,27,Two Thousand One Hundred and Forty Three,2143,76.png,Agricole,Colette Monjeau,1 -1183,14,40,Five Thousand Eight Hundred and Three,5803,72.png,Agricole,David Howard,1 -1184,2,22,Three Thousand and Thirty One,3031,13.png,Agricole,Eglantine Forest,1 -1185,16,20,Four Hundred and Nineteen,419,83.png,Agricole,Seymour Patenaude,1 -1186,27,33,Seven Hundred and Twenty Nine,729,136.png,Agricole,Eleanor Freeman,1 -1187,36,31,Six Hundred and Six,606,181.png,Agricole,Naomi Grant,1 -1188,8,3,Nine Thousand One Hundred and Sixty Nine,9169,42.png,Agricole,Jiang Li Tao,1 -1189,12,36,Six Thousand Two Hundred and Thirteen,6213,61.png,Agricole,Thomas Chapman,1 -1190,26,5,One Thousand Nine Hundred and Ninety Nine,1999,132.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1191,39,12,Six Thousand Eight Hundred and Thirty Three,6833,196.png,Agricole,Marcel Achen,1 -1192,22,13,Five Thousand and Forty Six,5046,113.png,Agricole,Petra Kovacic,1 -1193,16,14,Eight Thousand and Thirty One,8031,82.png,Agricole,Renata Lukic,1 -1194,36,4,Three Thousand and Fourteen,3014,184.png,Agricole,Wafiyah Nashwa Wasem,1 -1195,30,33,Eight Thousand Eight Hundred and Fifty Seven,8857,152.png,Agricole,Eleanor Freeman,1 -1196,22,30,One Thousand Five Hundred and Sixty Eight,1568,111.png,Agricole,Jodie Holden,1 -1197,21,33,Six Thousand Nine Hundred and Forty,6940,107.png,Agricole,Eleanor Freeman,1 -1198,41,2,Three Thousand Eight Hundred and Eighty Eight,3888,207.png,Agricole,Chi Hsiao,1 -1199,21,35,Three Hundred and Eighteen,318,108.png,Agricole,Elliot Humphreys,1 -1200,27,7,Four Thousand Seven Hundred and Ninety Seven,4797,135.png,Agricole,Hasna Bahiyaa Amari,1 -1201,10,20,Two Thousand Five Hundred and Fifty Five,2555,51.png,Agricole,Seymour Patenaude,1 -1202,43,14,Five Thousand Two Hundred and Forty Three,5243,217.png,Agricole,Renata Lukic,1 -1203,36,38,Seven Thousand One Hundred and Forty Eight,7148,182.png,Agricole,Freddie Reid,1 -1204,27,16,Two Thousand Three Hundred and Fifty Eight,2358,136.png,Agricole,Searlas Grenier,1 -1205,39,14,Nine Thousand Seven Hundred and Twenty Six,9726,198.png,Agricole,Renata Lukic,1 -1206,7,36,Eight Thousand Five Hundred and Seventy One,8571,39.png,Agricole,Thomas Chapman,1 -1207,38,16,Five Thousand and Eighty Three,5083,194.png,Agricole,Searlas Grenier,1 -1208,5,14,Two Thousand Five Hundred and Ninety Five,2595,28.png,Agricole,Renata Lukic,1 -1209,35,28,Three Thousand Four Hundred and Seventy Five,3475,177.png,Agricole,Chapin Auger,1 -1210,27,0,Six Thousand Eight Hundred and Seventy Two,6872,136.png,Agricole,Ethel M. Bryson,1 -1211,33,32,One Thousand Eight Hundred and Fifty One,1851,168.png,Agricole,Chelsea Watson,1 -1212,31,3,Seven Thousand Six Hundred and Seventy Three,7673,158.png,Agricole,Jiang Li Tao,1 -1213,10,18,Five Thousand Four Hundred and Fifty,5450,53.png,Agricole,Edmee Pelletier,1 -1214,35,28,Six Thousand and Four,6004,176.png,Agricole,Chapin Auger,1 -1215,18,34,One Thousand Nine Hundred and Eighty Nine,1989,90.png,Agricole,Holly Martin,1 -1216,21,12,Four Thousand Seven Hundred and Seventy Seven,4777,107.png,Agricole,Marcel Achen,1 -1217,13,18,Six Hundred and Seventeen,617,65.png,Agricole,Edmee Pelletier,1 -1218,43,30,Nine Thousand Six Hundred and Twenty Four,9624,216.png,Agricole,Jodie Holden,1 -1219,2,15,Two Thousand Three Hundred and Thirteen,2313,12.png,Agricole,Milenko Tkalcic,1 -1220,31,19,Three Thousand Eight Hundred and Sixty Nine,3869,159.png,Agricole,Franรงoise Lapierre,1 -1221,30,7,Six Thousand Nine Hundred and One,6901,153.png,Agricole,Hasna Bahiyaa Amari,1 -1222,9,22,Eight Thousand Three Hundred and Thirty Six,8336,49.png,Agricole,Eglantine Forest,1 -1223,2,3,Eight Thousand Six Hundred and Eighty Nine,8689,11.png,Agricole,Jiang Li Tao,1 -1224,3,0,Eight Thousand Eight Hundred and Seventy Seven,8877,17.png,Agricole,Ethel M. Bryson,1 -1225,12,16,Two Thousand Eight Hundred and Fifty One,2851,63.png,Agricole,Searlas Grenier,1 -1226,38,27,Nine Thousand Four Hundred and Ninety Three,9493,193.png,Agricole,Colette Monjeau,1 -1227,7,43,Nine Thousand Six Hundred and Thirty Four,9634,39.png,Agricole,Aruna Bekx,1 -1228,22,16,Four Thousand Five Hundred and Forty Nine,4549,111.png,Agricole,Searlas Grenier,1 -1229,27,16,Six Thousand Two Hundred and Twenty Eight,6228,135.png,Agricole,Searlas Grenier,1 -1230,29,21,Four Thousand Eight Hundred and Ninety,4890,148.png,Agricole,David Corbeil,1 -1231,19,43,Two Thousand and Ninety Five,2095,98.png,Agricole,Aruna Bekx,1 -1232,32,41,Nine Thousand Eight Hundred and Twenty One,9821,163.png,Agricole,Germa de Geus,1 -1233,37,21,Three Thousand Eight Hundred and Forty Six,3846,189.png,Agricole,David Corbeil,1 -1234,25,20,Seven Thousand Nine Hundred and Five,7905,128.png,Agricole,Seymour Patenaude,1 -1235,19,28,Five Thousand Seven Hundred and Forty Eight,5748,99.png,Agricole,Chapin Auger,1 -1236,8,28,One Thousand Seven Hundred and Seventy Seven,1777,40.png,Agricole,Chapin Auger,1 -1237,6,17,Three Thousand Four Hundred and Seventy Eight,3478,31.png,Agricole,Yolette Cloutier,1 -1238,32,12,Nine Thousand Four Hundred and Seventy One,9471,161.png,Agricole,Marcel Achen,1 -1239,28,28,Eight Thousand Eight Hundred and Seventy,8870,144.png,Agricole,Chapin Auger,1 -1240,23,26,Nine Thousand One Hundred and Fifty Four,9154,118.png,Agricole,Sidney Lapointe,1 -1241,3,19,Seven Thousand Six Hundred and Fifty Eight,7658,16.png,Agricole,Franรงoise Lapierre,1 -1242,24,16,Nine Thousand Seven Hundred and Forty Nine,9749,121.png,Agricole,Searlas Grenier,1 -1243,20,28,Six Thousand Seven Hundred and Ninety Eight,6798,101.png,Agricole,Chapin Auger,1 -1244,10,42,Two Thousand Two Hundred and Forty,2240,52.png,Agricole,Brady Jamin,1 -1245,28,26,Six Thousand Nine Hundred and Fifty Four,6954,142.png,Agricole,Sidney Lapointe,1 -1246,43,34,Eight Thousand Three Hundred and Forty Five,8345,218.png,Agricole,Holly Martin,1 -1247,21,9,Three Thousand Six Hundred and Ninety Two,3692,108.png,Agricole,Maria Kalb,1 -1248,8,16,Six Thousand Three Hundred and Thirty Four,6334,43.png,Agricole,Searlas Grenier,1 -1249,5,23,One Thousand and Ninety Four,1094,29.png,Agricole,Thรฉrรจse Fortier,1 -1250,43,30,Eight Thousand Two Hundred and Ninety,8290,215.png,Agricole,Jodie Holden,1 -1251,10,21,Seven Thousand Two Hundred and Eighty,7280,51.png,Agricole,David Corbeil,1 -1252,26,29,Seven Thousand One Hundred and Ninety Nine,7199,130.png,Agricole,Hayden Bruce,1 -1253,12,41,Five Thousand Two Hundred and Twenty Nine,5229,64.png,Agricole,Germa de Geus,1 -1254,7,2,Nine Thousand Six Hundred and One,9601,39.png,Agricole,Chi Hsiao,1 -1255,0,19,Seven Thousand and Thirty Five,7035,1.png,Agricole,Franรงoise Lapierre,1 -1256,11,4,Eight Thousand Eight Hundred and Six,8806,55.png,Agricole,Wafiyah Nashwa Wasem,1 -1257,19,17,Four Thousand Seven Hundred and Twenty Eight,4728,95.png,Agricole,Yolette Cloutier,1 -1258,24,0,Six Thousand Six Hundred and Fifty Nine,6659,120.png,Agricole,Ethel M. Bryson,1 -1259,25,15,Five Thousand Seven Hundred and Ninety,5790,125.png,Agricole,Milenko Tkalcic,1 -1260,35,36,One Thousand Two Hundred and Ninety Five,1295,176.png,Agricole,Thomas Chapman,1 -1261,15,38,Three Thousand Five Hundred and Fifty Seven,3557,75.png,Agricole,Freddie Reid,1 -1262,32,27,Five Thousand Nine Hundred and Nine,5909,161.png,Agricole,Colette Monjeau,1 -1263,43,15,Six Thousand One Hundred and Forty Five,6145,215.png,Agricole,Milenko Tkalcic,1 -1264,14,42,Three Thousand Five Hundred and Seventy Six,3576,71.png,Agricole,Brady Jamin,1 -1265,13,22,Three Thousand Seven Hundred and Twenty Three,3723,66.png,Agricole,Eglantine Forest,1 -1266,2,18,Two Thousand Seven Hundred and Seventy Three,2773,13.png,Agricole,Edmee Pelletier,1 -1267,34,26,Seven Thousand Three Hundred and Ninety Nine,7399,173.png,Agricole,Sidney Lapointe,1 -1268,41,26,One Thousand Nine Hundred and Fifty Six,1956,207.png,Agricole,Sidney Lapointe,1 -1269,21,39,One Thousand Seven Hundred and Fifty,1750,109.png,Agricole,Katie Connor,1 -1270,36,10,Six Thousand Eight Hundred and Eighty Three,6883,182.png,Agricole,Stephan Schwab,1 -1271,2,16,Two Thousand Six Hundred and Eighty One,2681,13.png,Agricole,Searlas Grenier,1 -1272,9,6,Four Thousand Two Hundred and Ninety One,4291,45.png,Agricole,Abdul Qais Khouri,1 -1273,35,4,One Thousand Five Hundred and Fifty Five,1555,176.png,Agricole,Wafiyah Nashwa Wasem,1 -1274,22,37,Two Thousand and Sixty Eight,2068,112.png,Agricole,Eva Davies,1 -1275,38,6,Nine Hundred and Sixty Seven,967,190.png,Agricole,Abdul Qais Khouri,1 -1276,25,20,One Thousand Five Hundred and Sixty Five,1565,126.png,Agricole,Seymour Patenaude,1 -1277,43,22,Six Thousand Two Hundred and Sixty One,6261,219.png,Agricole,Eglantine Forest,1 -1278,16,0,Two Thousand Six Hundred and Forty Five,2645,83.png,Agricole,Ethel M. Bryson,1 -1279,26,41,Eight Thousand Three Hundred and Eight,8308,131.png,Agricole,Germa de Geus,1 -1280,4,27,One Thousand Seven Hundred and Sixty Three,1763,21.png,Agricole,Colette Monjeau,1 -1281,43,17,Eight Thousand Six Hundred and Seventy Seven,8677,215.png,Agricole,Yolette Cloutier,1 -1282,5,22,One Hundred and Fifty,150,27.png,Agricole,Eglantine Forest,1 -1283,23,20,One Thousand Five Hundred and Eighty Three,1583,116.png,Agricole,Seymour Patenaude,1 -1284,14,15,Six Thousand Eight Hundred and Thirty Six,6836,74.png,Agricole,Milenko Tkalcic,1 -1285,22,2,Three Thousand Five Hundred and Sixty Two,3562,110.png,Agricole,Chi Hsiao,1 -1286,22,43,Three Thousand Nine Hundred and Sixty Four,3964,112.png,Agricole,Aruna Bekx,1 -1287,26,14,Nine Hundred and Three,903,133.png,Agricole,Renata Lukic,1 -1288,41,25,Three Thousand Nine Hundred and Forty Nine,3949,207.png,Agricole,Fleurette Coudert,1 -1289,7,37,Two Thousand Nine Hundred and Seventy Three,2973,36.png,Agricole,Eva Davies,1 -1290,2,9,Eight Thousand Five Hundred and Seventy Six,8576,12.png,Agricole,Maria Kalb,1 -1291,35,3,Eight Thousand Nine Hundred and Nine,8909,178.png,Agricole,Jiang Li Tao,1 -1292,32,36,Seven Thousand One Hundred and Ninety Two,7192,161.png,Agricole,Thomas Chapman,1 -1293,18,4,One Thousand Six Hundred and Eighty Seven,1687,94.png,Agricole,Wafiyah Nashwa Wasem,1 -1294,0,2,Eight Thousand Seven Hundred and Sixteen,8716,1.png,Agricole,Chi Hsiao,1 -1295,21,42,Six Thousand Six Hundred and Eighty Six,6686,105.png,Agricole,Brady Jamin,1 -1296,27,6,Two Thousand Five Hundred and Eighty Six,2586,139.png,Agricole,Abdul Qais Khouri,1 -1297,4,29,Eight Thousand Four Hundred and Forty Five,8445,20.png,Agricole,Hayden Bruce,1 -1298,16,19,Eight Thousand and Twenty Four,8024,84.png,Agricole,Franรงoise Lapierre,1 -1299,14,13,Nine Thousand and Sixty,9060,73.png,Agricole,Petra Kovacic,1 -1300,38,2,Five Thousand Two Hundred and Thirty Five,5235,194.png,Agricole,Chi Hsiao,1 -1301,10,8,Three Thousand Eight Hundred and Forty Two,3842,53.png,Agricole,Steffen Krueger,1 -1302,6,42,Seven Thousand Five Hundred and Eleven,7511,34.png,Agricole,Brady Jamin,1 -1303,28,12,Five Thousand Three Hundred and Fifty Nine,5359,141.png,Agricole,Marcel Achen,1 -1304,26,5,Six Thousand Nine Hundred and Nine,6909,130.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1305,32,10,Six Thousand Nine Hundred and Eighty One,6981,161.png,Agricole,Stephan Schwab,1 -1306,24,7,Three Thousand Three Hundred and Forty Seven,3347,122.png,Agricole,Hasna Bahiyaa Amari,1 -1307,16,41,Four Thousand Three Hundred and Fifty Four,4354,83.png,Agricole,Germa de Geus,1 -1308,39,11,Seven Thousand One Hundred and Twelve,7112,197.png,Agricole,Jens Egger,1 -1309,8,38,Six Thousand Nine Hundred and Fifty One,6951,44.png,Agricole,Freddie Reid,1 -1310,39,19,Five Hundred and One,501,196.png,Agricole,Franรงoise Lapierre,1 -1311,19,26,Six Thousand Three Hundred and Twenty,6320,96.png,Agricole,Sidney Lapointe,1 -1312,13,39,Five Thousand Eight Hundred and Seventy Five,5875,67.png,Agricole,Katie Connor,1 -1313,11,17,Two Thousand Two Hundred and Fourteen,2214,55.png,Agricole,Yolette Cloutier,1 -1314,26,19,Four Thousand and Twenty,4020,134.png,Agricole,Franรงoise Lapierre,1 -1315,30,28,Three Thousand and Two,3002,153.png,Agricole,Chapin Auger,1 -1316,21,29,Seven Thousand and Twenty,7020,109.png,Agricole,Hayden Bruce,1 -1317,7,2,Seven Thousand Two Hundred and Sixty One,7261,36.png,Agricole,Chi Hsiao,1 -1318,25,32,Seven Thousand Seven Hundred and Sixty Eight,7768,128.png,Agricole,Chelsea Watson,1 -1319,33,25,Six Hundred and Sixty Two,662,169.png,Agricole,Fleurette Coudert,1 -1320,23,41,Four Thousand One Hundred and Ninety Two,4192,116.png,Agricole,Germa de Geus,1 -1321,39,31,Six Thousand One Hundred and Twenty Three,6123,196.png,Agricole,Naomi Grant,1 -1322,23,27,Five Thousand Five Hundred and Fifty Seven,5557,116.png,Agricole,Colette Monjeau,1 -1323,9,8,Three Thousand Four Hundred and Twenty One,3421,45.png,Agricole,Steffen Krueger,1 -1324,24,24,Four Thousand Three Hundred and Seventy,4370,120.png,Agricole,Clarice Blanc,1 -1325,28,23,One Thousand Three Hundred and Twenty One,1321,144.png,Agricole,Thรฉrรจse Fortier,1 -1326,23,20,Seven Thousand Two Hundred and Sixty Seven,7267,117.png,Agricole,Seymour Patenaude,1 -1327,2,1,Three Thousand Four Hundred and Forty Two,3442,10.png,Agricole,Emily D. Short,1 -1328,43,37,One Thousand Seven Hundred and Forty Three,1743,219.png,Agricole,Eva Davies,1 -1329,23,29,Three Thousand and Sixteen,3016,119.png,Agricole,Hayden Bruce,1 -1330,36,25,Seven Thousand and Sixteen,7016,182.png,Agricole,Fleurette Coudert,1 -1331,14,38,Eight Thousand Nine Hundred and Eighty Two,8982,73.png,Agricole,Freddie Reid,1 -1332,2,34,Seven Thousand and Twenty Four,7024,14.png,Agricole,Holly Martin,1 -1333,0,38,Six Thousand Nine Hundred and Six,6906,1.png,Agricole,Freddie Reid,1 -1334,40,31,Seven Thousand Six Hundred and Thirty Four,7634,204.png,Agricole,Naomi Grant,1 -1335,23,12,Eight Thousand Three Hundred and Ninety One,8391,119.png,Agricole,Marcel Achen,1 -1336,3,37,Five Thousand Seven Hundred and Sixty Six,5766,19.png,Agricole,Eva Davies,1 -1337,27,15,Six Thousand Four Hundred and Eighty Six,6486,135.png,Agricole,Milenko Tkalcic,1 -1338,8,27,Six Thousand Two Hundred and Sixty Two,6262,43.png,Agricole,Colette Monjeau,1 -1339,32,8,Five Hundred and Seventy Nine,579,162.png,Agricole,Steffen Krueger,1 -1340,4,14,Seven Thousand Nine Hundred and Eighty Nine,7989,20.png,Agricole,Renata Lukic,1 -1341,39,35,Nine Thousand Two Hundred and Fifty Seven,9257,197.png,Agricole,Elliot Humphreys,1 -1342,17,3,Three Thousand Three Hundred and Seventy One,3371,88.png,Agricole,Jiang Li Tao,1 -1343,22,22,Five Thousand Eight Hundred and Fifteen,5815,111.png,Agricole,Eglantine Forest,1 -1344,30,24,Four Thousand Eight Hundred and Ninety Two,4892,150.png,Agricole,Clarice Blanc,1 -1345,15,39,Five Thousand Five Hundred and Seventy Nine,5579,78.png,Agricole,Katie Connor,1 -1346,26,42,Four Thousand Eight Hundred and Forty Six,4846,132.png,Agricole,Brady Jamin,1 -1347,7,27,Five Thousand Two Hundred and Seventy Five,5275,39.png,Agricole,Colette Monjeau,1 -1348,43,32,Six Thousand Eight Hundred and Sixty Eight,6868,217.png,Agricole,Chelsea Watson,1 -1349,28,29,Seven Thousand Seven Hundred and Ninety Five,7795,141.png,Agricole,Hayden Bruce,1 -1350,28,36,One Thousand and Forty Nine,1049,140.png,Agricole,Thomas Chapman,1 -1351,20,11,One Thousand One Hundred and Twenty Eight,1128,101.png,Agricole,Jens Egger,1 -1352,42,11,Seven Thousand and Sixty Seven,7067,210.png,Agricole,Jens Egger,1 -1353,41,13,Five Thousand Seven Hundred and Four,5704,207.png,Agricole,Petra Kovacic,1 -1354,39,20,Four Thousand Two Hundred and Ninety Eight,4298,197.png,Agricole,Seymour Patenaude,1 -1355,16,39,Six Thousand Two Hundred and Seven,6207,80.png,Agricole,Katie Connor,1 -1356,27,27,Five Hundred and Fifty Eight,558,135.png,Agricole,Colette Monjeau,1 -1357,10,42,Six Thousand Four Hundred and Sixty Two,6462,51.png,Agricole,Brady Jamin,1 -1358,36,33,Nine Thousand Seven Hundred and Eighty Four,9784,182.png,Agricole,Eleanor Freeman,1 -1359,11,12,Nine Thousand Nine Hundred and Forty Eight,9948,59.png,Agricole,Marcel Achen,1 -1360,15,14,Four Thousand and Twenty Three,4023,77.png,Agricole,Renata Lukic,1 -1361,26,5,Eight Thousand Seven Hundred and Seventy Three,8773,132.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1362,17,5,Two Hundred and Ninety One,291,88.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1363,27,12,Eight Thousand and Fifty Two,8052,135.png,Agricole,Marcel Achen,1 -1364,21,5,Nine Thousand Seven Hundred and Sixty One,9761,106.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1365,13,7,Four Thousand and Thirty Five,4035,65.png,Agricole,Hasna Bahiyaa Amari,1 -1366,21,37,One Thousand One Hundred and Eighty Eight,1188,107.png,Agricole,Eva Davies,1 -1367,40,1,Five Thousand and Fifty Three,5053,200.png,Agricole,Emily D. Short,1 -1368,21,25,Eight Thousand Five Hundred and Eighty Nine,8589,107.png,Agricole,Fleurette Coudert,1 -1369,18,29,Eight Thousand Six Hundred and Ninety Six,8696,93.png,Agricole,Hayden Bruce,1 -1370,28,37,Three Thousand Two Hundred and Eighty Six,3286,144.png,Agricole,Eva Davies,1 -1371,33,3,Three Thousand Two Hundred and Twenty Three,3223,167.png,Agricole,Jiang Li Tao,1 -1372,11,32,Nine Thousand One Hundred and Three,9103,59.png,Agricole,Chelsea Watson,1 -1373,12,21,Nine Thousand and Five,9005,64.png,Agricole,David Corbeil,1 -1374,10,33,Eight Thousand Nine Hundred and Five,8905,53.png,Agricole,Eleanor Freeman,1 -1375,15,35,Eight Thousand One Hundred and Sixty Eight,8168,79.png,Agricole,Elliot Humphreys,1 -1376,43,37,Seven Thousand Seven Hundred and Sixty Two,7762,217.png,Agricole,Eva Davies,1 -1377,16,30,Seven Thousand Six Hundred and Seventy Four,7674,80.png,Agricole,Jodie Holden,1 -1378,7,1,Six Thousand Six Hundred and Seventy Seven,6677,39.png,Agricole,Emily D. Short,1 -1379,26,15,Seven Thousand Five Hundred and Seventy Five,7575,130.png,Agricole,Milenko Tkalcic,1 -1380,22,4,Four Thousand Six Hundred and Seventy,4670,114.png,Agricole,Wafiyah Nashwa Wasem,1 -1381,37,36,Eight Thousand Nine Hundred and Forty One,8941,188.png,Agricole,Thomas Chapman,1 -1382,13,37,Six Thousand Four Hundred and Fifty Five,6455,69.png,Agricole,Eva Davies,1 -1383,26,28,Five Hundred and Two,502,134.png,Agricole,Chapin Auger,1 -1384,24,32,Nine Thousand Eight Hundred and Fifty One,9851,121.png,Agricole,Chelsea Watson,1 -1385,42,27,Four Thousand Nine Hundred and Twenty Three,4923,213.png,Agricole,Colette Monjeau,1 -1386,14,32,One Thousand Three Hundred and Thirteen,1313,70.png,Agricole,Chelsea Watson,1 -1387,33,14,Six Thousand Six Hundred and Seventy Seven,6677,167.png,Agricole,Renata Lukic,1 -1388,18,2,Six Hundred and Thirty One,631,94.png,Agricole,Chi Hsiao,1 -1389,5,15,Three Thousand Six Hundred and Eight,3608,27.png,Agricole,Milenko Tkalcic,1 -1390,25,42,Nine Thousand Four Hundred and Fifty Three,9453,128.png,Agricole,Brady Jamin,1 -1391,28,9,Four Thousand and Twenty Six,4026,142.png,Agricole,Maria Kalb,1 -1392,18,3,Five Thousand and Ninety Two,5092,92.png,Agricole,Jiang Li Tao,1 -1393,36,5,One Thousand Eight Hundred and Ninety Six,1896,180.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1394,3,20,Eight Thousand Five Hundred and Sixty Three,8563,19.png,Agricole,Seymour Patenaude,1 -1395,34,36,Seven Thousand One Hundred and Fifty Seven,7157,172.png,Agricole,Thomas Chapman,1 -1396,24,17,Five Hundred and Forty Eight,548,120.png,Agricole,Yolette Cloutier,1 -1397,35,9,Nine Thousand Four Hundred and Ninety Nine,9499,178.png,Agricole,Maria Kalb,1 -1398,32,43,One Thousand Nine Hundred,1900,162.png,Agricole,Aruna Bekx,1 -1399,3,21,Four Thousand Eight Hundred and Eighteen,4818,17.png,Agricole,David Corbeil,1 -1400,26,24,One Thousand Eight Hundred and Thirty Eight,1838,131.png,Agricole,Clarice Blanc,1 -1401,32,26,Nine Hundred and Ten,910,161.png,Agricole,Sidney Lapointe,1 -1402,13,41,Six Thousand Eight Hundred and Ninety,6890,68.png,Agricole,Germa de Geus,1 -1403,15,40,Eight Thousand and Seventy Four,8074,77.png,Agricole,David Howard,1 -1404,16,34,Six Hundred and Thirty One,631,82.png,Agricole,Holly Martin,1 -1405,7,27,Three Thousand One Hundred and Four,3104,36.png,Agricole,Colette Monjeau,1 -1406,8,2,Two Thousand Two Hundred and Seventeen,2217,44.png,Agricole,Chi Hsiao,1 -1407,15,28,Five Thousand and Sixty Five,5065,77.png,Agricole,Chapin Auger,1 -1408,24,25,One Thousand Eight Hundred and Fifty Seven,1857,120.png,Agricole,Fleurette Coudert,1 -1409,0,8,Two Thousand Nine Hundred and Thirty Two,2932,1.png,Agricole,Steffen Krueger,1 -1410,37,25,Seven Thousand One Hundred and Ten,7110,189.png,Agricole,Fleurette Coudert,1 -1411,43,14,Seven Thousand Four Hundred and Ninety Five,7495,216.png,Agricole,Renata Lukic,1 -1412,16,28,Two Thousand Seven Hundred and Thirty Nine,2739,84.png,Agricole,Chapin Auger,1 -1413,1,22,Six Thousand Six Hundred and Eighteen,6618,5.png,Agricole,Eglantine Forest,1 -1414,30,34,Four Thousand Seven Hundred and Ninety Eight,4798,152.png,Agricole,Holly Martin,1 -1415,5,13,Six Thousand Nine Hundred and Eighty Three,6983,29.png,Agricole,Petra Kovacic,1 -1416,29,8,Four Thousand Eight Hundred and Fifty Seven,4857,146.png,Agricole,Steffen Krueger,1 -1417,7,38,Four Thousand Four Hundred and Seventy Three,4473,35.png,Agricole,Freddie Reid,1 -1418,29,24,Eight Thousand Three Hundred and Twenty Five,8325,146.png,Agricole,Clarice Blanc,1 -1419,34,19,Five Thousand and Ninety Three,5093,173.png,Agricole,Franรงoise Lapierre,1 -1420,40,11,Eight Hundred and Fifty Six,856,201.png,Agricole,Jens Egger,1 -1421,33,15,Seven Thousand Three Hundred and Ninety,7390,168.png,Agricole,Milenko Tkalcic,1 -1422,27,19,Four Thousand Five Hundred and Eighty,4580,135.png,Agricole,Franรงoise Lapierre,1 -1423,17,19,One Thousand Seven Hundred and Thirty One,1731,89.png,Agricole,Franรงoise Lapierre,1 -1424,20,7,Nine Thousand Four Hundred and Fifty Two,9452,102.png,Agricole,Hasna Bahiyaa Amari,1 -1425,0,26,Two Thousand Eight Hundred and Ninety,2890,0.png,Agricole,Sidney Lapointe,1 -1426,21,10,Three Thousand Two Hundred and Eighty Four,3284,107.png,Agricole,Stephan Schwab,1 -1427,19,30,Nine Hundred and Ninety Six,996,98.png,Agricole,Jodie Holden,1 -1428,25,40,Eight Thousand Nine Hundred and Ninety Five,8995,128.png,Agricole,David Howard,1 -1429,1,32,One Thousand and Sixty Nine,1069,8.png,Agricole,Chelsea Watson,1 -1430,43,25,Three Thousand Five Hundred and Fifty Five,3555,216.png,Agricole,Fleurette Coudert,1 -1431,35,12,Seven Thousand Eight Hundred and Eighty,7880,177.png,Agricole,Marcel Achen,1 -1432,17,35,Eight Thousand and Ninety Three,8093,89.png,Agricole,Elliot Humphreys,1 -1433,5,42,Five Thousand Five Hundred and Forty Five,5545,26.png,Agricole,Brady Jamin,1 -1434,11,33,Two Thousand Four Hundred and Twenty,2420,59.png,Agricole,Eleanor Freeman,1 -1435,9,24,Eight Thousand Nine Hundred and Twenty Three,8923,48.png,Agricole,Clarice Blanc,1 -1436,34,12,Seven Thousand Eight Hundred and Sixty Two,7862,174.png,Agricole,Marcel Achen,1 -1437,37,21,One Thousand Six Hundred and Three,1603,187.png,Agricole,David Corbeil,1 -1438,36,15,Six Thousand Three Hundred and Fifty Six,6356,182.png,Agricole,Milenko Tkalcic,1 -1439,27,30,Four Thousand Six Hundred and Ninety Three,4693,139.png,Agricole,Jodie Holden,1 -1440,1,11,Three Thousand Eight Hundred and Thirty,3830,9.png,Agricole,Jens Egger,1 -1441,1,28,Two Thousand Four Hundred and Twelve,2412,5.png,Agricole,Chapin Auger,1 -1442,25,20,Five Thousand One Hundred and Ten,5110,125.png,Agricole,Seymour Patenaude,1 -1443,7,40,One Thousand Five Hundred and Forty Seven,1547,39.png,Agricole,David Howard,1 -1444,12,34,One Thousand Two Hundred and Sixty Seven,1267,60.png,Agricole,Holly Martin,1 -1445,20,27,Two Hundred and Sixty Five,265,103.png,Agricole,Colette Monjeau,1 -1446,39,26,One Hundred and Thirty Eight,138,196.png,Agricole,Sidney Lapointe,1 -1447,37,22,Four Hundred and Fifty Two,452,186.png,Agricole,Eglantine Forest,1 -1448,22,37,Three Thousand Eight Hundred and Fifty Nine,3859,112.png,Agricole,Eva Davies,1 -1449,7,6,Five Thousand and Eighty Six,5086,39.png,Agricole,Abdul Qais Khouri,1 -1450,37,17,Eight Thousand Six Hundred and Ninety,8690,186.png,Agricole,Yolette Cloutier,1 -1451,35,36,Eight Thousand and Twenty Eight,8028,178.png,Agricole,Thomas Chapman,1 -1452,15,0,Nine Thousand Four Hundred and Thirty Three,9433,77.png,Agricole,Ethel M. Bryson,1 -1453,31,1,Nine Thousand Nine Hundred and Ninety One,9991,159.png,Agricole,Emily D. Short,1 -1454,2,34,Seven Thousand Two Hundred and Eight,7208,13.png,Agricole,Holly Martin,1 -1455,19,28,Nine Thousand Eight Hundred and Eighty Two,9882,95.png,Agricole,Chapin Auger,1 -1456,42,41,Nine Thousand Six Hundred,9600,212.png,Agricole,Germa de Geus,1 -1457,33,0,Seven Thousand One Hundred and Forty Eight,7148,165.png,Agricole,Ethel M. Bryson,1 -1458,39,26,Nine Hundred and Ten,910,196.png,Agricole,Sidney Lapointe,1 -1459,38,38,Four Thousand Five Hundred and Forty Five,4545,192.png,Agricole,Freddie Reid,1 -1460,12,12,Five Thousand Six Hundred and Six,5606,60.png,Agricole,Marcel Achen,1 -1461,39,16,Eight Thousand Seven Hundred and Eighty Three,8783,199.png,Agricole,Searlas Grenier,1 -1462,34,2,Three Thousand and Ninety Eight,3098,173.png,Agricole,Chi Hsiao,1 -1463,11,21,Five Thousand One Hundred and Twenty Five,5125,56.png,Agricole,David Corbeil,1 -1464,20,14,Two Thousand Eight Hundred and Forty Eight,2848,104.png,Agricole,Renata Lukic,1 -1465,25,4,Five Thousand and Twenty Three,5023,126.png,Agricole,Wafiyah Nashwa Wasem,1 -1466,18,20,Four Thousand Three Hundred and Thirty One,4331,94.png,Agricole,Seymour Patenaude,1 -1467,19,41,Two Thousand Seven Hundred and Nine,2709,98.png,Agricole,Germa de Geus,1 -1468,18,43,Six Thousand Two Hundred and Twenty Three,6223,94.png,Agricole,Aruna Bekx,1 -1469,27,4,Three Thousand One Hundred and Seven,3107,138.png,Agricole,Wafiyah Nashwa Wasem,1 -1470,17,18,Eight Thousand Four Hundred and Seventy Seven,8477,86.png,Agricole,Edmee Pelletier,1 -1471,10,4,Nine Thousand Seven Hundred and Sixty Two,9762,51.png,Agricole,Wafiyah Nashwa Wasem,1 -1472,30,37,Seven Thousand Two Hundred and Thirty Two,7232,152.png,Agricole,Eva Davies,1 -1473,21,42,Six Thousand One Hundred and Forty Two,6142,109.png,Agricole,Brady Jamin,1 -1474,8,40,One Thousand Seven Hundred and Fifty One,1751,41.png,Agricole,David Howard,1 -1475,4,41,Three Thousand Seven Hundred and Ninety Four,3794,23.png,Agricole,Germa de Geus,1 -1476,18,1,Seven Thousand and Ten,7010,91.png,Agricole,Emily D. Short,1 -1477,24,41,Nine Thousand Two Hundred and Fifty Three,9253,124.png,Agricole,Germa de Geus,1 -1478,27,29,Nine Thousand and Forty Four,9044,138.png,Agricole,Hayden Bruce,1 -1479,39,24,Nine Thousand Five Hundred and Twenty Four,9524,195.png,Agricole,Clarice Blanc,1 -1480,10,43,Four Thousand Four Hundred and Sixty Nine,4469,51.png,Agricole,Aruna Bekx,1 -1481,5,16,Sixteen,16,28.png,Agricole,Searlas Grenier,1 -1482,36,29,Three Thousand Six Hundred and Eighty Two,3682,181.png,Agricole,Hayden Bruce,1 -1483,24,27,Four Thousand Six Hundred and Ninety Seven,4697,120.png,Agricole,Colette Monjeau,1 -1484,42,5,One Hundred and Nine,109,211.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1485,30,20,Seven Thousand and Ninety Seven,7097,152.png,Agricole,Seymour Patenaude,1 -1486,5,4,Five Thousand One Hundred and Seventy One,5171,27.png,Agricole,Wafiyah Nashwa Wasem,1 -1487,10,22,Four Hundred and Sixty Six,466,50.png,Agricole,Eglantine Forest,1 -1488,22,0,Three Thousand Three Hundred and Eighty Four,3384,112.png,Agricole,Ethel M. Bryson,1 -1489,16,14,Four Thousand Four Hundred and Twenty Three,4423,82.png,Agricole,Renata Lukic,1 -1490,14,28,Nine Thousand Four Hundred and Thirty Four,9434,72.png,Agricole,Chapin Auger,1 -1491,28,38,Two Thousand One Hundred and Eighty Eight,2188,143.png,Agricole,Freddie Reid,1 -1492,7,36,Nine Thousand and Forty Two,9042,36.png,Agricole,Thomas Chapman,1 -1493,43,34,Seven Thousand Eight Hundred and Twenty Nine,7829,218.png,Agricole,Holly Martin,1 -1494,31,23,One Thousand Nine Hundred and Forty,1940,158.png,Agricole,Thรฉrรจse Fortier,1 -1495,7,36,Nine Thousand Six Hundred and Ninety One,9691,39.png,Agricole,Thomas Chapman,1 -1496,28,32,Eight Hundred and Ninety Five,895,144.png,Agricole,Chelsea Watson,1 -1497,38,42,Nine Thousand One Hundred and Ten,9110,194.png,Agricole,Brady Jamin,1 -1498,16,25,One Thousand Nine Hundred and Thirty Eight,1938,80.png,Agricole,Fleurette Coudert,1 -1499,20,20,Two Hundred and Eighty Three,283,100.png,Agricole,Seymour Patenaude,1 -1500,34,25,Eight Thousand Eight Hundred and Six,8806,170.png,Agricole,Fleurette Coudert,1 -1501,2,10,Eight Hundred and Eighty Five,2500,Nan,Agricole,Stephan Schwab,0 -1502,34,33, ,3085,173.png,Agricole,Eleanor Freeman,0 -1503,24,9,Four Thousand One Hundred and Fifty, ,121.png,Agricole,Maria Kalb,0 -1504,29,20,Seven Hundred and Thirty Six,1852,Nan,Agricole,Seymour Patenaude,0 -1505,23,43,Three Hundred and Eighty Four,3843,Nan,Agricole,Aruna Bekx,0 -1506,40,18,Seven Hundred and Eighty Three, ,201.png,Agricole,Edmee Pelletier,0 -1507,27,5,One Thousand Six Hundred and Seventy Four, ,139.png,Agricole,Fawwaz Zuhayr Mustafa,0 -1508,15,11,Eight Hundred and Thirty Eight,9106,Nan,Agricole,Jens Egger,0 -1509,0,24,Six Hundred and Twelve,3104,Nan,Agricole,Clarice Blanc,0 -1510,41,24,Four Thousand Nine Hundred and Fifty One, ,208.png,Agricole,Clarice Blanc,0 -1511,42,3, ,7184,210.png,Agricole,Jiang Li Tao,0 -1512,10,22,Five Thousand Six Hundred and Twenty Four,5671,Nan,Agricole,Eglantine Forest,0 -1513,27,41, ,3211,137.png,Agricole,Germa de Geus,0 -1514,13,8, ,9299,66.png,Agricole,Steffen Krueger,0 -1515,5,18,Three Thousand Two Hundred and Eighty Three,3376,Nan,Agricole,Edmee Pelletier,0 -1516,33,26, ,7740,167.png,Agricole,Sidney Lapointe,0 -1517,12,28,One Thousand Six Hundred and Thirty Two,5828,Nan,Agricole,Chapin Auger,0 -1518,24,32,Two Thousand Nine Hundred and Thirty,3150,Nan,Agricole,Chelsea Watson,0 -1519,16,42,Seven Hundred and Four,6501,Nan,Agricole,Brady Jamin,0 -1520,40,35,Seven Thousand Two Hundred and Thirty Seven,8577,Nan,Agricole,Elliot Humphreys,0 -1521,15,20,Three Hundred and Fifty Five,1765,Nan,Agricole,Seymour Patenaude,0 -1522,14,21,Two Thousand Eight Hundred and Twenty, ,74.png,Agricole,David Corbeil,0 -1523,14,13, ,6193,71.png,Agricole,Petra Kovacic,0 -1524,0,8,Four Thousand Nine Hundred and Eighty One, ,3.png,Agricole,Steffen Krueger,0 -1525,8,0,Seven Thousand Seven Hundred and Seventy Seven, ,43.png,Agricole,Ethel M. Bryson,0 -1526,27,42, ,8991,135.png,Agricole,Brady Jamin,0 -1527,23,17,Eighty Eight,1713,Nan,Agricole,Yolette Cloutier,0 -1528,29,6,One Hundred and Thirty Seven,2325,Nan,Agricole,Abdul Qais Khouri,0 -1529,3,20,Three Thousand Four Hundred and Eighty Nine,7255,Nan,Agricole,Seymour Patenaude,0 -1530,15,20,Two Hundred and Seventy One,9428,Nan,Agricole,Seymour Patenaude,0 -1531,11,32,Three Thousand Five Hundred and Fifty One,4706,Nan,Agricole,Chelsea Watson,0 -1532,24,17,Three Hundred and Twenty One,687,Nan,Agricole,Yolette Cloutier,0 -1533,15,12,Two Hundred and Fourteen,464,Nan,Agricole,Marcel Achen,0 -1534,9,17, ,8748,47.png,Agricole,Yolette Cloutier,0 -1535,5,6, ,5058,25.png,Agricole,Abdul Qais Khouri,0 -1536,26,39, ,279,133.png,Agricole,Katie Connor,0 -1537,20,42,Four Thousand and Eighty Six, ,103.png,Agricole,Brady Jamin,0 -1538,16,14,Five Hundred and Twenty Three,646,Nan,Agricole,Renata Lukic,0 -1539,4,22, ,2486,20.png,Agricole,Eglantine Forest,0 -1540,11,11, ,131,56.png,Agricole,Jens Egger,0 -1541,42,3,Six Hundred and Twelve,1833,Nan,Agricole,Jiang Li Tao,0 -1542,19,26,One Thousand Eight Hundred and Seventy Three, ,95.png,Agricole,Sidney Lapointe,0 -1543,8,41, ,7242,43.png,Agricole,Germa de Geus,0 -1544,4,38,Six Hundred and Thirty Nine, ,22.png,Agricole,Freddie Reid,0 -1545,35,4,Seven Thousand Six Hundred and Seventy Seven, ,179.png,Agricole,Wafiyah Nashwa Wasem,0 -1546,4,11,Three Thousand Eight Hundred and Eighty Four,7024,Nan,Agricole,Jens Egger,0 -1547,27,26,Two Hundred and Sixteen,272,Nan,Agricole,Sidney Lapointe,0 -1548,20,3, ,9100,103.png,Agricole,Jiang Li Tao,0 -1549,7,1,One Thousand and Eighty Three,6681,Nan,Agricole,Emily D. Short,0 -1550,2,30,One Thousand One Hundred and Ninety Seven,4204,Nan,Agricole,Jodie Holden,0 -1551,18,13,One Thousand Nine Hundred and Thirteen, ,94.png,Agricole,Petra Kovacic,0 -1552,1,17, ,8991,6.png,Agricole,Yolette Cloutier,0 -1553,2,28,Two Thousand Seven Hundred and Forty Three,5971,Nan,Agricole,Chapin Auger,0 -1554,42,30,Seven,11,Nan,Agricole,Jodie Holden,0 -1555,17,11,Two Thousand Four Hundred and Forty Nine,7375,Nan,Agricole,Jens Egger,0 -1556,34,3,Five Thousand Nine Hundred and Seventy Eight,6981,Nan,Agricole,Jiang Li Tao,0 -1557,42,4,One Hundred and Eighty Three,1960,Nan,Agricole,Wafiyah Nashwa Wasem,0 -1558,0,22,Four Thousand Nine Hundred and Seventy Four,5912,Nan,Agricole,Eglantine Forest,0 -1559,20,34, ,8094,102.png,Agricole,Holly Martin,0 -1560,30,1,One Hundred and Three,4871,Nan,Agricole,Emily D. Short,0 -1561,31,34,One Thousand Three Hundred and Ninety One, ,156.png,Agricole,Holly Martin,0 -1562,31,12,Seven Hundred and Eighty Six,1322,Nan,Agricole,Marcel Achen,0 -1563,41,1,One Thousand Six Hundred and Sixty Two,2024,Nan,Agricole,Emily D. Short,0 -1564,34,39,Two Thousand Three Hundred and Thirty Four,3367,Nan,Agricole,Katie Connor,0 -1565,8,35,Three Thousand Five Hundred and Forty Eight, ,43.png,Agricole,Elliot Humphreys,0 -1566,40,43,Five Thousand Five Hundred and Eighty Two,6209,Nan,Agricole,Aruna Bekx,0 -1567,22,38, ,8993,110.png,Agricole,Freddie Reid,0 -1568,36,41,Two Thousand Three Hundred and Forty Three, ,180.png,Agricole,Germa de Geus,0 -1569,11,34,Four Thousand Seven Hundred and Ninety Four,5508,Nan,Agricole,Holly Martin,0 -1570,17,32,Seven Thousand Eight Hundred and Sixty,8416,Nan,Agricole,Chelsea Watson,0 -1571,24,11,Two Hundred and Eight,1689,Nan,Agricole,Jens Egger,0 -1572,26,5,Four Thousand and Eighty Four, ,132.png,Agricole,Fawwaz Zuhayr Mustafa,0 -1573,40,5,Two Hundred and Thirty Six,440,Nan,Agricole,Fawwaz Zuhayr Mustafa,0 -1574,27,30, ,8656,135.png,Agricole,Jodie Holden,0 -1575,40,15, ,606,201.png,Agricole,Milenko Tkalcic,0 -1576,34,39,Three Thousand Seven Hundred and Eighty Three, ,172.png,Agricole,Katie Connor,0 -1577,16,21, ,1161,80.png,Agricole,David Corbeil,0 -1578,40,31,One Thousand Six Hundred and Sixteen,3002,Nan,Agricole,Naomi Grant,0 -1579,12,29,Two Thousand Seven Hundred and Twenty Five,3267,Nan,Agricole,Hayden Bruce,0 -1580,12,36,Five Thousand and Fifty Two,7973,Nan,Agricole,Thomas Chapman,0 -1581,33,7, ,2145,168.png,Agricole,Hasna Bahiyaa Amari,0 -1582,14,7,One Thousand Four Hundred and Forty Three,3118,Nan,Agricole,Hasna Bahiyaa Amari,0 -1583,6,34,Six Thousand and Eighty,9753,Nan,Agricole,Holly Martin,0 -1584,9,40,Three Thousand Two Hundred and Thirty Three, ,45.png,Agricole,David Howard,0 -1585,29,26,Three Hundred and Thirty Nine,2532,Nan,Agricole,Sidney Lapointe,0 -1586,24,29,One Thousand Two Hundred and Thirty One,4522,Nan,Agricole,Hayden Bruce,0 -1587,15,6,Eight, ,78.png,Agricole,Abdul Qais Khouri,0 -1588,36,4,Five Thousand One Hundred and Twenty Five,8233,Nan,Agricole,Wafiyah Nashwa Wasem,0 -1589,5,43, ,3858,28.png,Agricole,Aruna Bekx,0 -1590,32,43,Two Hundred and Seventy Nine,4841,Nan,Agricole,Aruna Bekx,0 -1591,31,5,Eighty Three, ,157.png,Agricole,Fawwaz Zuhayr Mustafa,0 -1592,41,36,Four Thousand Four Hundred and Forty Two,9380,Nan,Agricole,Thomas Chapman,0 -1593,41,11,Four Hundred and Thirty Nine,3998,Nan,Agricole,Jens Egger,0 -1594,1,3,Sixteen,6135,Nan,Agricole,Jiang Li Tao,0 -1595,43,20,Two Hundred and Eight,5884,Nan,Agricole,Seymour Patenaude,0 -1596,11,6,Eight Hundred and Forty Four,7010,Nan,Agricole,Abdul Qais Khouri,0 -1597,11,15,One Hundred and Forty Five,267,Nan,Agricole,Milenko Tkalcic,0 -1598,28,22,One Thousand and Twenty Five, ,143.png,Agricole,Eglantine Forest,0 -1599,7,21, ,2258,38.png,Agricole,David Corbeil,0 -1600,23,33,Five Thousand Two Hundred and Sixty Three,7165,Nan,Agricole,Eleanor Freeman,0 -1601,33,23, ,5332,168.png,Agricole,Thรฉrรจse Fortier,0 -1602,18,2,One Hundred and Seven, ,94.png,Agricole,Chi Hsiao,0 -1603,7,25, ,599,39.png,Agricole,Fleurette Coudert,0 -1604,37,6, ,2484,189.png,Agricole,Abdul Qais Khouri,0 -1605,26,11, ,3540,131.png,Agricole,Jens Egger,0 -1606,43,37,Eight Thousand Four Hundred and Forty, ,215.png,Agricole,Eva Davies,0 -1607,9,15,One Thousand Nine Hundred and Forty Nine,7539,Nan,Agricole,Milenko Tkalcic,0 -1608,39,23,One Thousand Nine Hundred and Ninety Four, ,196.png,Agricole,Thรฉrรจse Fortier,0 -1609,4,10,Three Thousand Three Hundred and Forty Seven, ,21.png,Agricole,Stephan Schwab,0 -1610,12,22,One Thousand Three Hundred and Twenty Seven, ,62.png,Agricole,Eglantine Forest,0 -1611,31,32,One Thousand and Ninety Six,1541,Nan,Agricole,Chelsea Watson,0 -1612,32,26, ,836,163.png,Agricole,Sidney Lapointe,0 -1613,0,23,Eight Hundred and Ninety,5746,Nan,Agricole,Thรฉrรจse Fortier,0 -1614,2,21,Fifty Nine,8692,Nan,Agricole,David Corbeil,0 -1615,41,9, ,174,209.png,Agricole,Maria Kalb,0 -1616,36,32,Three Hundred and Thirty, ,183.png,Agricole,Chelsea Watson,0 -1617,12,29,Four Thousand Eight Hundred and Ninety Two, ,62.png,Agricole,Hayden Bruce,0 -1618,27,3,Three Thousand and Forty Eight, ,136.png,Agricole,Jiang Li Tao,0 -1619,40,33,Three Hundred and Twenty One, ,203.png,Agricole,Eleanor Freeman,0 -1620,32,17,Five Thousand One Hundred and Fifty Four, ,162.png,Agricole,Yolette Cloutier,0 -1621,32,43,One Thousand Nine Hundred and Forty,4376,Nan,Agricole,Aruna Bekx,0 -1622,9,16,Three Thousand and Eighty One,4953,Nan,Agricole,Searlas Grenier,0 -1623,36,6, ,6592,184.png,Agricole,Abdul Qais Khouri,0 -1624,2,1,One Thousand and Eighty Seven,6010,Nan,Agricole,Emily D. Short,0 -1625,10,12,One Hundred and Thirty Four,504,Nan,Agricole,Marcel Achen,0 -1626,35,28, ,8788,177.png,Agricole,Chapin Auger,0 -1627,43,27,Four Thousand Four Hundred and Fifty Seven,5614,Nan,Agricole,Colette Monjeau,0 -1628,9,21,Three Thousand Nine Hundred and Ninety Seven,4822,Nan,Agricole,David Corbeil,0 -1629,25,25,Three Thousand Eight Hundred and Eighty,6355,Nan,Agricole,Fleurette Coudert,0 -1630,31,35,One Thousand Eight Hundred and Sixty Six,5963,Nan,Agricole,Elliot Humphreys,0 -1631,10,38, ,2447,50.png,Agricole,Freddie Reid,0 -1632,21,10, ,9495,108.png,Agricole,Stephan Schwab,0 -1633,11,34,One Thousand Two Hundred and Thirty Eight, ,57.png,Agricole,Holly Martin,0 -1634,27,0,One Thousand One Hundred and Thirty,2214,Nan,Agricole,Ethel M. Bryson,0 -1635,9,5,Two Thousand Three Hundred and Thirty Nine, ,49.png,Agricole,Fawwaz Zuhayr Mustafa,0 -1636,36,29,Thirty Nine,1053,Nan,Agricole,Hayden Bruce,0 -1637,22,19,Two Thousand Four Hundred and Forty One,6214,Nan,Agricole,Franรงoise Lapierre,0 -1638,27,21,Eight Hundred and Sixty Five,2868,Nan,Agricole,David Corbeil,0 -1639,4,16,Two Thousand Three Hundred and Twenty Two,9863,Nan,Agricole,Searlas Grenier,0 -1640,12,2,Six Hundred and Thirty Nine,1554,Nan,Agricole,Chi Hsiao,0 -1641,21,30,One Thousand Three Hundred and Forty,2125,Nan,Agricole,Jodie Holden,0 -1642,13,28,Four Thousand Two Hundred and Sixty Five, ,65.png,Agricole,Chapin Auger,0 -1643,4,39,One Thousand Seven Hundred and Sixty Six,2314,Nan,Agricole,Katie Connor,0 -1644,41,35, ,8102,207.png,Agricole,Elliot Humphreys,0 -1645,23,16,Seven Thousand Three Hundred and Fifty Two,8277,Nan,Agricole,Searlas Grenier,0 -1646,3,0,Five Hundred and Eighty Three, ,16.png,Agricole,Ethel M. Bryson,0 -1647,14,2,Seventy Six,2974,Nan,Agricole,Chi Hsiao,0 -1648,23,1,Two Hundred and Thirty Nine,4011,Nan,Agricole,Emily D. Short,0 -1649,10,37, ,7798,54.png,Agricole,Eva Davies,0 -1650,40,14,Two Thousand Eight Hundred and Seventy Nine, ,203.png,Agricole,Renata Lukic,0 -1651,1,38,One Hundred and Forty Three, ,8.png,Agricole,Freddie Reid,0 -1652,23,13,Three Hundred and Fifty One, ,117.png,Agricole,Petra Kovacic,0 -1653,4,28,Two Hundred and Thirty Nine,811,Nan,Agricole,Chapin Auger,0 -1654,23,23,Five Thousand Eight Hundred and Thirteen, ,116.png,Agricole,Thรฉrรจse Fortier,0 -1655,3,11,Ninety One,561,Nan,Agricole,Jens Egger,0 -1656,41,12,Nine Thousand Two Hundred and Six, ,207.png,Agricole,Marcel Achen,0 -1657,15,14,Ninety Four, ,77.png,Agricole,Renata Lukic,0 -1658,22,7,Three Thousand Four Hundred and Eighty Four, ,112.png,Agricole,Hasna Bahiyaa Amari,0 -1659,39,24,Two Thousand Nine Hundred and Eight,3593,Nan,Agricole,Clarice Blanc,0 -1660,29,36,Nine Hundred and Sixty Two,1531,Nan,Agricole,Thomas Chapman,0 -1661,12,41, ,11,62.png,Agricole,Germa de Geus,0 -1662,11,29,One Thousand Five Hundred and Sixty Four, ,55.png,Agricole,Hayden Bruce,0 -1663,42,6, ,6008,213.png,Agricole,Abdul Qais Khouri,0 -1664,30,2,Three Hundred and Seven,717,Nan,Agricole,Chi Hsiao,0 -1665,15,12,Four Thousand Seven Hundred and Thirty Nine, ,77.png,Agricole,Marcel Achen,0 -1666,21,1,Four Hundred and Ninety Six,2008,Nan,Agricole,Emily D. Short,0 -1667,33,39,One Hundred and Ninety Three,973,Nan,Agricole,Katie Connor,0 -1668,35,18, ,1380,175.png,Agricole,Edmee Pelletier,0 -1669,4,23,Five Thousand Five Hundred and Eighty Five, ,20.png,Agricole,Thรฉrรจse Fortier,0 -1670,17,4,Three Thousand Five Hundred and Fifty One,7374,Nan,Agricole,Wafiyah Nashwa Wasem,0 -1671,18,29,Two Thousand Eight Hundred and Forty Five,3294,Nan,Agricole,Hayden Bruce,0 -1672,7,40,Five Thousand One Hundred and Seventy Two,6188,Nan,Agricole,David Howard,0 -1673,15,21,Two Thousand and Twenty Seven,5828,Nan,Agricole,David Corbeil,0 -1674,43,20, ,4463,217.png,Agricole,Seymour Patenaude,0 -1675,22,23,Nine Hundred and Eighty Eight, ,110.png,Agricole,Thรฉrรจse Fortier,0 -1676,31,16,Seven Hundred and Forty Nine, ,159.png,Agricole,Searlas Grenier,0 -1677,13,1,Six Hundred and Sixty Eight,1191,Nan,Agricole,Emily D. Short,0 -1678,20,12, ,5970,104.png,Agricole,Marcel Achen,0 -1679,5,25, ,7514,26.png,Agricole,Fleurette Coudert,0 -1680,0,36,Eight, ,3.png,Agricole,Thomas Chapman,0 -1681,37,13,One Thousand Eight Hundred and Sixty Two,5617,Nan,Agricole,Petra Kovacic,0 -1682,24,11,Fifty Four,6077,Nan,Agricole,Jens Egger,0 -1683,2,35,One Thousand and Three,9803,Nan,Agricole,Elliot Humphreys,0 -1684,24,43,Three Thousand Three Hundred and Nineteen,4257,Nan,Agricole,Aruna Bekx,0 -1685,20,31, ,8682,103.png,Agricole,Naomi Grant,0 -1686,25,12, ,4531,127.png,Agricole,Marcel Achen,0 -1687,29,3,One Thousand Nine Hundred and Twenty Nine,9441,Nan,Agricole,Jiang Li Tao,0 -1688,36,22,Three Thousand Five Hundred and Fifty One, ,181.png,Agricole,Eglantine Forest,0 -1689,25,7,One Thousand Five Hundred and Fifty Four,2124,Nan,Agricole,Hasna Bahiyaa Amari,0 -1690,20,23,Six Hundred and Forty Eight,8627,Nan,Agricole,Thรฉrรจse Fortier,0 -1691,6,7,Four Thousand Nine Hundred and Thirty Seven,8354,Nan,Agricole,Hasna Bahiyaa Amari,0 -1692,43,13,Six Hundred and Eighty Five, ,216.png,Agricole,Petra Kovacic,0 -1693,20,11,Forty Six, ,101.png,Agricole,Jens Egger,0 -1694,30,40,Eight Hundred and Twenty Three, ,150.png,Agricole,David Howard,0 -1695,39,37,Three Hundred and Sixty One, ,197.png,Agricole,Eva Davies,0 -1696,30,1,Two Thousand Nine Hundred and Seventy Seven,3506,Nan,Agricole,Emily D. Short,0 -1697,41,31, ,1277,206.png,Agricole,Naomi Grant,0 -1698,23,40, ,7738,117.png,Agricole,David Howard,0 -1699,30,0,One Hundred and Forty Eight, ,151.png,Agricole,Ethel M. Bryson,0 -1700,28,40, ,8099,141.png,Agricole,David Howard,0 -1701,5,30,On Thousand Two Hundred and Foty Nine,1249,27.png,Agricole,Jodie Holden,1 -1702,5,29,Five Thousand On Hundred and Sixt Thre,5163,25.png,Agricole,Hayden Bruce,1 -1703,33,40,Thre Thousand Nine Hundred and Sixt Five,3965,166.png,Agricole,David Howard,1 -1704,7,38,Seven Thousand Five Hundred and Seenty Seven,7577,37.png,Agricole,Freddie Reid,1 -1705,2,28,On Thousand Thre Hundred and Foty Seven,1347,10.png,Agricole,Chapin Auger,1 -1706,38,18,Eigt Thousand On Hundred and Seenty Eigt,8178,190.png,Agricole,Edmee Pelletier,1 -1707,40,18,On Thousand Eigt Hundred and Foty Five,1845,204.png,Agricole,Edmee Pelletier,1 -1708,23,27,Eigt Hundred and Foty On,841,119.png,Agricole,Colette Monjeau,1 -1709,27,37,Six Thousand On Hundred and Foty Thre,6143,136.png,Agricole,Eva Davies,1 -1710,18,2,Five Thousand Nine Hundred and Eihty Two,5982,90.png,Agricole,Chi Hsiao,1 -1711,38,14,Two Thousand Nine Hundred and Twenty Six,2926,190.png,Agricole,Renata Lukic,1 -1712,14,37,Thre Hundred and Eihty Thre,383,71.png,Agricole,Eva Davies,1 -1713,2,13,Five Thousand and Sixt Six,5066,12.png,Agricole,Petra Kovacic,1 -1714,41,34,On Thousand Six Hundred and Twenty Seven,1627,209.png,Agricole,Holly Martin,1 -1715,33,24,On Thousand Eigt Hundred and Seenty On,1871,167.png,Agricole,Clarice Blanc,1 -1716,20,26,Six Thousand Eigt Hundred and On,6801,104.png,Agricole,Sidney Lapointe,1 -1717,43,37,Six Thousand For Hundred and Foty Nine,6449,216.png,Agricole,Eva Davies,1 -1718,3,29,For Thousand Thre Hundred and Ninety Five,4395,19.png,Agricole,Hayden Bruce,1 -1719,14,28,Two Thousand Six Hundred and Eihty On,2681,73.png,Agricole,Chapin Auger,1 -1720,34,23,Nine Thousand Thre Hundred and Fifty Thre,9353,174.png,Agricole,Thรฉrรจse Fortier,1 -1721,17,20,Seven Thousand For Hundred and Thirty Two,7432,85.png,Agricole,Seymour Patenaude,1 -1722,28,38,On Thousand On Hundred and Seenty For,1174,141.png,Agricole,Freddie Reid,1 -1723,31,1,Six Thousand For Hundred and Twenty For,6424,158.png,Agricole,Emily D. Short,1 -1724,7,35,Six Thousand Seven Hundred and Seenty Seven,6777,39.png,Agricole,Elliot Humphreys,1 -1725,31,32,For Thousand and Sixt Eigt,4068,155.png,Agricole,Chelsea Watson,1 -1726,33,16,Seven,7,166.png,Agricole,Searlas Grenier,1 -1727,41,39,For Thousand Two Hundred and Twenty Two,4222,208.png,Agricole,Katie Connor,1 -1728,6,34,Thre Thousand Five Hundred and Ninety Five,3595,32.png,Agricole,Holly Martin,1 -1729,3,7,Eigt Hundred and Sxten,816,16.png,Agricole,Hasna Bahiyaa Amari,1 -1730,32,41,Eigt Thousand and Fifty Eigt,8058,161.png,Agricole,Germa de Geus,1 -1731,38,24,Nine Thousand and Seenty Nine,9079,194.png,Agricole,Clarice Blanc,1 -1732,25,32,Six Hundred and Ninety,690,126.png,Agricole,Chelsea Watson,1 -1733,21,37,Seven Thousand On Hundred and Sixt Nine,7169,106.png,Agricole,Eva Davies,1 -1734,20,20,Seven Thousand On Hundred and On,7101,101.png,Agricole,Seymour Patenaude,1 -1735,13,4,Thre Thousand Thre Hundred and Ten,3310,68.png,Agricole,Wafiyah Nashwa Wasem,1 -1736,25,13,Nine Thousand Six Hundred and Foty Seven,9647,125.png,Agricole,Petra Kovacic,1 -1737,15,7,Eigt Thousand Eigt Hundred and Seenty,8870,79.png,Agricole,Hasna Bahiyaa Amari,1 -1738,1,7,On Thousand Thre Hundred and Ninety Thre,1393,9.png,Agricole,Hasna Bahiyaa Amari,1 -1739,35,21,For Thousand and Sxten,4016,178.png,Agricole,David Corbeil,1 -1740,3,43,Five Thousand Five Hundred and Foty Eigt,5548,16.png,Agricole,Aruna Bekx,1 -1741,19,40,Six Thousand Six Hundred and Twenty Five,6625,98.png,Agricole,David Howard,1 -1742,31,9,Foty Five,45,159.png,Agricole,Maria Kalb,1 -1743,14,33,Two Thousand On Hundred and Seenty Seven,2177,73.png,Agricole,Eleanor Freeman,1 -1744,37,36,Six Thousand On Hundred and Seenty Five,6175,189.png,Agricole,Thomas Chapman,1 -1745,10,39,On Thousand For Hundred and Twlve,1412,54.png,Agricole,Katie Connor,1 -1746,36,0,Seven Thousand Thre Hundred and Eihty Six,7386,183.png,Agricole,Ethel M. Bryson,1 -1747,7,43,Seven Thousand Five Hundred and Twenty Thre,7523,39.png,Agricole,Aruna Bekx,1 -1748,25,30,For Thousand Eigt Hundred and Seenty Thre,4873,128.png,Agricole,Jodie Holden,1 -1749,34,5,For Thousand Five Hundred and Twenty Eigt,4528,173.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1750,4,29,Two Thousand and Foty Seven,2047,23.png,Agricole,Hayden Bruce,1 -1751,4,2,Seven Thousand For Hundred and Thirty Five,7435,24.png,Agricole,Chi Hsiao,1 -1752,30,32,Eigt Thousand Five Hundred and Five,8505,150.png,Agricole,Chelsea Watson,1 -1753,34,32,Six Thousand Seven Hundred and Eleven,6711,174.png,Agricole,Chelsea Watson,1 -1754,39,23,On Thousand Two Hundred and Five,1205,196.png,Agricole,Thรฉrรจse Fortier,1 -1755,33,42,Thre Thousand Thre Hundred and Ninety Five,3395,169.png,Agricole,Brady Jamin,1 -1756,35,28,Thre Hundred and On,301,175.png,Agricole,Chapin Auger,1 -1757,41,15,Five Thousand Seven Hundred and Foty For,5744,206.png,Agricole,Milenko Tkalcic,1 -1758,8,3,Nine Thousand On Hundred and Foty Seven,9147,44.png,Agricole,Jiang Li Tao,1 -1759,42,2,Eigt Thousand Seven Hundred and Seenty Thre,8773,212.png,Agricole,Chi Hsiao,1 -1760,32,42,Six Thousand Thre Hundred and Eihty Two,6382,162.png,Agricole,Brady Jamin,1 -1761,4,14,Nine Thousand For Hundred and Fifty Eigt,9458,23.png,Agricole,Renata Lukic,1 -1762,38,37,Eigt Thousand Thre Hundred and Thirteen,8313,190.png,Agricole,Eva Davies,1 -1763,34,6,Five Thousand Six Hundred and Fifty Nine,5659,172.png,Agricole,Abdul Qais Khouri,1 -1764,11,30,Seven Thousand Eigt Hundred and Fifty Eigt,7858,58.png,Agricole,Jodie Holden,1 -1765,25,9,Six Thousand Six Hundred and Sixt Seven,6667,126.png,Agricole,Maria Kalb,1 -1766,42,15,Seven Hundred and Seven,707,210.png,Agricole,Milenko Tkalcic,1 -1767,23,9,Six Thousand Five Hundred and Twenty Six,6526,117.png,Agricole,Maria Kalb,1 -1768,31,19,Six Thousand Eigt Hundred and Thirty Two,6832,156.png,Agricole,Franรงoise Lapierre,1 -1769,34,43,Nine Thousand Two Hundred and Twlve,9212,174.png,Agricole,Aruna Bekx,1 -1770,40,26,On Thousand Two Hundred and Twenty Eigt,1228,200.png,Agricole,Sidney Lapointe,1 -1771,26,33,For Hundred and Sixt Nine,469,130.png,Agricole,Eleanor Freeman,1 -1772,1,23,Five Thousand Five Hundred and Sixt For,5564,5.png,Agricole,Thรฉrรจse Fortier,1 -1773,4,23,Thre Thousand Nine Hundred and Twenty On,3921,24.png,Agricole,Thรฉrรจse Fortier,1 -1774,40,20,For Thousand Nine Hundred and Eihteen,4918,201.png,Agricole,Seymour Patenaude,1 -1775,10,24,Five Hundred and Fiteen,515,53.png,Agricole,Clarice Blanc,1 -1776,30,26,For Thousand For Hundred and Seventeen,4417,151.png,Agricole,Sidney Lapointe,1 -1777,39,27,Two Thousand For Hundred and Foty,2440,198.png,Agricole,Colette Monjeau,1 -1778,40,35,Two Thousand On Hundred and Fifty Two,2152,200.png,Agricole,Elliot Humphreys,1 -1779,2,31,Six Thousand On Hundred and Ninety Five,6195,12.png,Agricole,Naomi Grant,1 -1780,31,37,Seven Thousand Thre Hundred and Eigt,7308,158.png,Agricole,Eva Davies,1 -1781,23,5,Five Thousand and Seenty Eigt,5078,115.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1782,18,4,Eigt Thousand Two Hundred and Seenty Eigt,8278,90.png,Agricole,Wafiyah Nashwa Wasem,1 -1783,20,16,Thre Thousand Seven Hundred and Twenty,3720,101.png,Agricole,Searlas Grenier,1 -1784,32,36,Eigt Thousand For Hundred and Nine,8409,160.png,Agricole,Thomas Chapman,1 -1785,33,30,Seven Thousand Seven Hundred and Sxten,7716,168.png,Agricole,Jodie Holden,1 -1786,30,16,Seven Thousand and Seenty Six,7076,154.png,Agricole,Searlas Grenier,1 -1787,16,19,Seven Thousand On Hundred and Ten,7110,81.png,Agricole,Franรงoise Lapierre,1 -1788,0,19,For Hundred and Sixt On,461,1.png,Agricole,Franรงoise Lapierre,1 -1789,5,22,Six Thousand On Hundred and Ninety Eigt,6198,25.png,Agricole,Eglantine Forest,1 -1790,34,40,Thre Thousand Nine Hundred and Sixt Nine,3969,171.png,Agricole,David Howard,1 -1791,16,36,Seven Thousand On Hundred and Ninety Nine,7199,80.png,Agricole,Thomas Chapman,1 -1792,29,15,Two Thousand On Hundred and Eihty Five,2185,149.png,Agricole,Milenko Tkalcic,1 -1793,11,7,Five Hundred and Eihteen,518,55.png,Agricole,Hasna Bahiyaa Amari,1 -1794,15,13,Five Thousand Two Hundred and Fifty Seven,5257,78.png,Agricole,Petra Kovacic,1 -1795,33,32,On Thousand Nine Hundred and Sixt On,1961,167.png,Agricole,Chelsea Watson,1 -1796,16,1,For Thousand On Hundred and Fifty Nine,4159,81.png,Agricole,Emily D. Short,1 -1797,10,32,Seven Thousand Six Hundred and Ninety Thre,7693,53.png,Agricole,Chelsea Watson,1 -1798,12,26,For Thousand Six Hundred and Foty,4640,63.png,Agricole,Sidney Lapointe,1 -1799,30,23,Nine Thousand and Sixt Nine,9069,152.png,Agricole,Thรฉrรจse Fortier,1 -1800,38,34,On Thousand and Eihty,1080,193.png,Agricole,Holly Martin,1 -1801,38,24,Thre Thousand Seven Hundred and Thre,3703,190.png,Agricole,Clarice Blanc,1 -1802,10,38,Thre Thousand Seven Hundred and Thirty For,3734,51.png,Agricole,Freddie Reid,1 -1803,38,3,Seven Hundred and Fifty Five,755,190.png,Agricole,Jiang Li Tao,1 -1804,2,8,Two Thousand Two Hundred and Twenty,2220,11.png,Agricole,Steffen Krueger,1 -1805,34,25,Eigt Thousand Two Hundred and Eihty Five,8285,171.png,Agricole,Fleurette Coudert,1 -1806,23,17,Nine Thousand Six Hundred and Ninety Eigt,9698,119.png,Agricole,Yolette Cloutier,1 -1807,2,23,Thre Thousand Six Hundred and Fifty Five,3655,13.png,Agricole,Thรฉrรจse Fortier,1 -1808,34,27,Two Thousand Six Hundred and Fifty Six,2656,173.png,Agricole,Colette Monjeau,1 -1809,15,38,Thre Thousand Seven Hundred and Twenty Six,3726,78.png,Agricole,Freddie Reid,1 -1810,32,39,Two Thousand For Hundred and Seventeen,2417,160.png,Agricole,Katie Connor,1 -1811,1,37,Thre Thousand Two Hundred and Foty Five,3245,7.png,Agricole,Eva Davies,1 -1812,18,2,Five Hundred and Sixt For,564,90.png,Agricole,Chi Hsiao,1 -1813,11,38,Seven Hundred and Two,702,55.png,Agricole,Freddie Reid,1 -1814,7,2,Seven Thousand Five Hundred and Twenty Six,7526,39.png,Agricole,Chi Hsiao,1 -1815,39,22,Six Thousand Seven Hundred and Thirty Eigt,6738,196.png,Agricole,Eglantine Forest,1 -1816,13,8,For Thousand Two Hundred and Two,4202,65.png,Agricole,Steffen Krueger,1 -1817,14,22,For Thousand Thre Hundred and Eihty Five,4385,71.png,Agricole,Eglantine Forest,1 -1818,3,28,Thre Thousand On Hundred and Fifty Two,3152,15.png,Agricole,Chapin Auger,1 -1819,22,26,Five Thousand Eigt Hundred and Twenty Two,5822,113.png,Agricole,Sidney Lapointe,1 -1820,10,21,Nine Thousand Nine Hundred and Foty Nine,9949,52.png,Agricole,David Corbeil,1 -1821,11,3,Nine Thousand Six Hundred and Seenty Eigt,9678,58.png,Agricole,Jiang Li Tao,1 -1822,1,18,Two Thousand On Hundred and Fifty For,2154,7.png,Agricole,Edmee Pelletier,1 -1823,22,20,On Thousand For Hundred and Nine,1409,111.png,Agricole,Seymour Patenaude,1 -1824,2,38,For Thousand Seven Hundred and Ninety Five,4795,14.png,Agricole,Freddie Reid,1 -1825,38,33,Two Thousand Two Hundred and Fifty On,2251,193.png,Agricole,Eleanor Freeman,1 -1826,12,30,Thre Thousand and For,3004,63.png,Agricole,Jodie Holden,1 -1827,28,37,Seven Thousand On Hundred and Fifty,7150,140.png,Agricole,Eva Davies,1 -1828,43,31,On Thousand Nine Hundred and Eihteen,1918,218.png,Agricole,Naomi Grant,1 -1829,28,20,Five Thousand Two Hundred and Fiteen,5215,142.png,Agricole,Seymour Patenaude,1 -1830,20,17,Eigt Thousand Six Hundred and Twenty Seven,8627,102.png,Agricole,Yolette Cloutier,1 -1831,28,28,Two Thousand On Hundred and Fifty Thre,2153,144.png,Agricole,Chapin Auger,1 -1832,30,13,Thre Thousand Five Hundred and Seenty Eigt,3578,152.png,Agricole,Petra Kovacic,1 -1833,9,29,Thre Hundred and Seven,307,45.png,Agricole,Hayden Bruce,1 -1834,38,23,Two Thousand Five Hundred and Five,2505,191.png,Agricole,Thรฉrรจse Fortier,1 -1835,23,35,Eigt Hundred and Eihteen,818,116.png,Agricole,Elliot Humphreys,1 -1836,2,15,Six Thousand Nine Hundred and Seenty Nine,6979,10.png,Agricole,Milenko Tkalcic,1 -1837,5,5,On Thousand Eigt Hundred and Seenty Thre,1873,29.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1838,38,39,For Thousand Six Hundred and Seenty Two,4672,193.png,Agricole,Katie Connor,1 -1839,18,15,Eigt Thousand Five Hundred and Thirty Six,8536,94.png,Agricole,Milenko Tkalcic,1 -1840,15,4,Five Thousand On Hundred and Eihty Seven,5187,79.png,Agricole,Wafiyah Nashwa Wasem,1 -1841,34,8,For Thousand Eigt Hundred and Sixt Six,4866,173.png,Agricole,Steffen Krueger,1 -1842,22,25,Six Thousand Eigt Hundred and Eihty Five,6885,114.png,Agricole,Fleurette Coudert,1 -1843,29,37,Nine Thousand Eigt Hundred and Ten,9810,149.png,Agricole,Eva Davies,1 -1844,17,31,On Thousand Five Hundred and Ninety,1590,89.png,Agricole,Naomi Grant,1 -1845,15,14,On Thousand Six Hundred and Foty For,1644,78.png,Agricole,Renata Lukic,1 -1846,33,20,Nine Thousand For Hundred and Eigt,9408,167.png,Agricole,Seymour Patenaude,1 -1847,28,40,For Thousand Five Hundred and Two,4502,144.png,Agricole,David Howard,1 -1848,35,37,For Thousand Nine Hundred and Ninety On,4991,175.png,Agricole,Eva Davies,1 -1849,29,41,Five Thousand Thre Hundred and Foty For,5344,148.png,Agricole,Germa de Geus,1 -1850,10,29,Nine Thousand For Hundred and Ninety,9490,54.png,Agricole,Hayden Bruce,1 -1851,1,20,Eigt Thousand Thre Hundred and Sixt Thre,8363,9.png,Agricole,Seymour Patenaude,1 -1852,11,2,Nine Thousand Five Hundred and Twenty Nine,9529,59.png,Agricole,Chi Hsiao,1 -1853,25,6,For Thousand Thre Hundred and Thirty Thre,4333,125.png,Agricole,Abdul Qais Khouri,1 -1854,9,43,Five Thousand and Nine,5009,45.png,Agricole,Aruna Bekx,1 -1855,31,25,Seven Thousand Thre Hundred,7300,157.png,Agricole,Fleurette Coudert,1 -1856,43,4,Two Thousand and Eihty On,2081,219.png,Agricole,Wafiyah Nashwa Wasem,1 -1857,13,30,For Thousand Thre Hundred and Seenty For,4374,67.png,Agricole,Jodie Holden,1 -1858,9,36,Nine Hundred and Foty Eigt,948,45.png,Agricole,Thomas Chapman,1 -1859,0,15,Five Thousand Thre Hundred and Ninety Thre,5393,2.png,Agricole,Milenko Tkalcic,1 -1860,11,32,On Thousand Thre Hundred and Sxten,1316,58.png,Agricole,Chelsea Watson,1 -1861,25,33,Two Thousand Six Hundred and Thirty Thre,2633,125.png,Agricole,Eleanor Freeman,1 -1862,21,20,Five Thousand On Hundred and Twenty Two,5122,107.png,Agricole,Seymour Patenaude,1 -1863,21,13,Thre Hundred,300,109.png,Agricole,Petra Kovacic,1 -1864,35,32,Two Thousand Nine Hundred and Seenty Nine,2979,176.png,Agricole,Chelsea Watson,1 -1865,40,24,Two Thousand Seven Hundred and Eihty Eigt,2788,201.png,Agricole,Clarice Blanc,1 -1866,7,16,Nine Thousand For Hundred and Thirty Six,9436,39.png,Agricole,Searlas Grenier,1 -1867,39,13,Thre Thousand For Hundred,3400,197.png,Agricole,Petra Kovacic,1 -1868,10,12,Thre Thousand Six Hundred and Seenty Seven,3677,53.png,Agricole,Marcel Achen,1 -1869,33,36,Two Thousand Nine Hundred and Twenty Seven,2927,169.png,Agricole,Thomas Chapman,1 -1870,28,42,Eigt Thousand Thre Hundred and Sixt Two,8362,144.png,Agricole,Brady Jamin,1 -1871,26,9,Five Thousand For Hundred and Thirty Two,5432,134.png,Agricole,Maria Kalb,1 -1872,29,42,Eigt Thousand On Hundred and Sixt Five,8165,148.png,Agricole,Brady Jamin,1 -1873,29,10,On Thousand Six Hundred and Fifty For,1654,147.png,Agricole,Stephan Schwab,1 -1874,40,1,Thre Thousand On Hundred and Fifty Two,3152,200.png,Agricole,Emily D. Short,1 -1875,14,14,Eigt Thousand For Hundred and Foty Eigt,8448,72.png,Agricole,Renata Lukic,1 -1876,20,0,Eigt Thousand On Hundred and Sixt Eigt,8168,100.png,Agricole,Ethel M. Bryson,1 -1877,12,42,Seven Thousand Seven Hundred and Foty Seven,7747,62.png,Agricole,Brady Jamin,1 -1878,24,0,Two Thousand Six Hundred and Eihty On,2681,122.png,Agricole,Ethel M. Bryson,1 -1879,34,4,Thre Thousand Seven Hundred and Five,3705,171.png,Agricole,Wafiyah Nashwa Wasem,1 -1880,20,33,Thre Thousand Six Hundred and Eigt,3608,104.png,Agricole,Eleanor Freeman,1 -1881,25,3,For Thousand On Hundred and Thirty Nine,4139,128.png,Agricole,Jiang Li Tao,1 -1882,11,18,Nine Thousand and Twenty Two,9022,55.png,Agricole,Edmee Pelletier,1 -1883,2,35,Two Thousand Seven Hundred and Ninety Eigt,2798,14.png,Agricole,Elliot Humphreys,1 -1884,8,30,Nine Thousand Thre Hundred and Five,9305,40.png,Agricole,Jodie Holden,1 -1885,40,14,Seven Thousand and Fifty Two,7052,204.png,Agricole,Renata Lukic,1 -1886,34,3,On Thousand For Hundred and Foty Eigt,1448,173.png,Agricole,Jiang Li Tao,1 -1887,5,26,Twenty Nine,29,27.png,Agricole,Sidney Lapointe,1 -1888,27,4,Five Thousand Two Hundred and Ten,5210,135.png,Agricole,Wafiyah Nashwa Wasem,1 -1889,37,37,Two Thousand Two Hundred and Twenty Two,2222,189.png,Agricole,Eva Davies,1 -1890,5,39,Five Thousand For Hundred and Two,5402,28.png,Agricole,Katie Connor,1 -1891,21,3,Nine Thousand Five Hundred and Eihty Five,9585,105.png,Agricole,Jiang Li Tao,1 -1892,29,17,Thre Thousand For Hundred and Fiteen,3415,146.png,Agricole,Yolette Cloutier,1 -1893,18,38,Eigt Thousand Two Hundred and Twenty Five,8225,94.png,Agricole,Freddie Reid,1 -1894,16,20,Eigt Thousand Eigt Hundred and Seventeen,8817,80.png,Agricole,Seymour Patenaude,1 -1895,40,0,Seven Thousand Six Hundred and Twenty On,7621,201.png,Agricole,Ethel M. Bryson,1 -1896,42,6,Eigt Thousand Two Hundred and Seenty Six,8276,211.png,Agricole,Abdul Qais Khouri,1 -1897,4,31,Two Thousand Two Hundred and Seenty Seven,2277,22.png,Agricole,Naomi Grant,1 -1898,4,29,Seven Thousand Two Hundred and Nine,7209,20.png,Agricole,Hayden Bruce,1 -1899,9,13,Five Thousand For Hundred and Eleven,5411,45.png,Agricole,Petra Kovacic,1 -1900,25,24,Two Thousand For Hundred and Fiteen,2415,127.png,Agricole,Clarice Blanc,1 -1901,17,23,Nine Thousand Eigt Hundred and Fifty,9850,88.png,Agricole,Thรฉrรจse Fortier,1 -1902,13,26,Six Thousand On Hundred and Foty Thre,6143,67.png,Agricole,Sidney Lapointe,1 -1903,12,28,Five Thousand On Hundred and Sixt Six,5166,64.png,Agricole,Chapin Auger,1 -1904,18,24,On Thousand Thre Hundred and Sxten,1316,90.png,Agricole,Clarice Blanc,1 -1905,29,35,Five Thousand Two Hundred and Thirty Thre,5233,149.png,Agricole,Elliot Humphreys,1 -1906,42,42,For Thousand Thre Hundred and Twenty,4320,213.png,Agricole,Brady Jamin,1 -1907,16,4,On Thousand Five Hundred and Seenty On,1571,80.png,Agricole,Wafiyah Nashwa Wasem,1 -1908,16,20,On Thousand and Eleven,1011,80.png,Agricole,Seymour Patenaude,1 -1909,34,37,Six Thousand Six Hundred and Thirty For,6634,172.png,Agricole,Eva Davies,1 -1910,12,40,Two Thousand and Thirteen,2013,60.png,Agricole,David Howard,1 -1911,27,30,Eigt Thousand Thre Hundred and Sixt Five,8365,137.png,Agricole,Jodie Holden,1 -1912,11,32,For Thousand Thre Hundred and Thirty On,4331,57.png,Agricole,Chelsea Watson,1 -1913,37,1,Six Thousand Eigt Hundred and Ten,6810,189.png,Agricole,Emily D. Short,1 -1914,26,17,Two Thousand Eigt Hundred and Thre,2803,131.png,Agricole,Yolette Cloutier,1 -1915,26,19,Eigt Thousand On Hundred and Two,8102,134.png,Agricole,Franรงoise Lapierre,1 -1916,21,39,Eigt Thousand For Hundred and Fifty For,8454,108.png,Agricole,Katie Connor,1 -1917,19,31,Nine Thousand Two Hundred and Sixt On,9261,99.png,Agricole,Naomi Grant,1 -1918,22,15,Five Thousand Nine Hundred and Sixt For,5964,110.png,Agricole,Milenko Tkalcic,1 -1919,11,42,Thre Thousand Thre Hundred and Thirteen,3313,59.png,Agricole,Brady Jamin,1 -1920,16,20,Two Thousand On Hundred and Twlve,2112,84.png,Agricole,Seymour Patenaude,1 -1921,32,4,On Thousand Five Hundred and Seenty For,1574,161.png,Agricole,Wafiyah Nashwa Wasem,1 -1922,6,14,Two Thousand Seven Hundred and Foty Seven,2747,30.png,Agricole,Renata Lukic,1 -1923,32,1,For Thousand and Ninety Nine,4099,162.png,Agricole,Emily D. Short,1 -1924,26,19,Five Thousand Eigt Hundred and Seenty Eigt,5878,132.png,Agricole,Franรงoise Lapierre,1 -1925,43,16,Thre Thousand Seven Hundred and Seenty Seven,3777,216.png,Agricole,Searlas Grenier,1 -1926,14,33,Six Thousand Five Hundred and Fifty On,6551,70.png,Agricole,Eleanor Freeman,1 -1927,10,28,For Thousand Nine Hundred and Seenty Thre,4973,50.png,Agricole,Chapin Auger,1 -1928,20,3,Seven Thousand Seven Hundred and Fifty Five,7755,103.png,Agricole,Jiang Li Tao,1 -1929,18,4,Two Thousand and Ninety Two,2092,90.png,Agricole,Wafiyah Nashwa Wasem,1 -1930,34,43,Nine Thousand On Hundred and Ninety On,9191,172.png,Agricole,Aruna Bekx,1 -1931,37,0,For Thousand Seven Hundred and Thirty Nine,4739,186.png,Agricole,Ethel M. Bryson,1 -1932,16,22,On Thousand For Hundred and Foty Thre,1443,84.png,Agricole,Eglantine Forest,1 -1933,33,1,Seven Thousand and Two,7002,166.png,Agricole,Emily D. Short,1 -1934,3,38,Thre Thousand Two Hundred and Seenty On,3271,18.png,Agricole,Freddie Reid,1 -1935,17,7,For Thousand and Foty,4040,86.png,Agricole,Hasna Bahiyaa Amari,1 -1936,19,38,Six Thousand Nine Hundred and Ninety For,6994,95.png,Agricole,Freddie Reid,1 -1937,34,37,Two Thousand Two Hundred and Ninety On,2291,174.png,Agricole,Eva Davies,1 -1938,11,15,Seven Thousand Six Hundred and Seenty Two,7672,55.png,Agricole,Milenko Tkalcic,1 -1939,24,4,Two Thousand On Hundred and Fifty,2150,121.png,Agricole,Wafiyah Nashwa Wasem,1 -1940,41,29,Seven Thousand Six Hundred and Sixt For,7664,206.png,Agricole,Hayden Bruce,1 -1941,33,16,Thre Thousand On Hundred and Eihty Thre,3183,168.png,Agricole,Searlas Grenier,1 -1942,29,30,For Thousand Seven Hundred and Ninety Thre,4793,145.png,Agricole,Jodie Holden,1 -1943,14,16,Six Thousand Thre Hundred and Thirty Nine,6339,72.png,Agricole,Searlas Grenier,1 -1944,15,37,Thre Thousand Two Hundred and Seenty Eigt,3278,75.png,Agricole,Eva Davies,1 -1945,33,31,Two Thousand On Hundred and Fifty On,2151,169.png,Agricole,Naomi Grant,1 -1946,19,9,Seven Thousand For Hundred and Eihty Five,7485,99.png,Agricole,Maria Kalb,1 -1947,2,15,Nine Thousand Seven Hundred and Eihty Two,9782,10.png,Agricole,Milenko Tkalcic,1 -1948,28,42,Two Thousand Seven Hundred and Eihty On,2781,142.png,Agricole,Brady Jamin,1 -1949,14,24,For Thousand Thre Hundred and Fifty Thre,4353,72.png,Agricole,Clarice Blanc,1 -1950,5,41,Five Thousand Eigt Hundred and Ninety Five,5895,29.png,Agricole,Germa de Geus,1 -1951,26,11,Five Thousand Nine Hundred and Sixt Thre,5963,130.png,Agricole,Jens Egger,1 -1952,38,10,Nine Thousand Six Hundred and Ninety Eigt,9698,191.png,Agricole,Stephan Schwab,1 -1953,6,40,For Hundred and Foty Seven,447,32.png,Agricole,David Howard,1 -1954,33,19,Five Thousand and Eihty Seven,5087,166.png,Agricole,Franรงoise Lapierre,1 -1955,35,38,Six Hundred and Eihty Nine,689,175.png,Agricole,Freddie Reid,1 -1956,39,43,On Hundred and Twenty Six,126,197.png,Agricole,Aruna Bekx,1 -1957,17,20,Thre Thousand Seven Hundred and Twenty For,3724,86.png,Agricole,Seymour Patenaude,1 -1958,34,10,On Thousand On Hundred and Thirty Five,1135,173.png,Agricole,Stephan Schwab,1 -1959,12,35,Five Thousand Seven Hundred and Thirteen,5713,64.png,Agricole,Elliot Humphreys,1 -1960,20,40,Thre Thousand Thre Hundred and Thirty,3330,103.png,Agricole,David Howard,1 -1961,21,38,Nine Thousand Two Hundred and Eihty Eigt,9288,105.png,Agricole,Freddie Reid,1 -1962,27,7,On Thousand Two Hundred and Twenty Nine,1229,135.png,Agricole,Hasna Bahiyaa Amari,1 -1963,27,26,For Thousand Thre Hundred and Fifty Thre,4353,138.png,Agricole,Sidney Lapointe,1 -1964,16,15,Thre Thousand Eigt Hundred and Ninety On,3891,80.png,Agricole,Milenko Tkalcic,1 -1965,19,31,Six Thousand Seven Hundred and Foty Seven,6747,98.png,Agricole,Naomi Grant,1 -1966,14,43,Eigt Hundred and Eleven,811,72.png,Agricole,Aruna Bekx,1 -1967,37,28,Thre Thousand Eigt Hundred and Thirty Five,3835,185.png,Agricole,Chapin Auger,1 -1968,25,2,Thre Thousand Thre Hundred and Foty Thre,3343,125.png,Agricole,Chi Hsiao,1 -1969,12,27,Seven Thousand and On,7001,61.png,Agricole,Colette Monjeau,1 -1970,25,38,Seven Thousand Five Hundred and Seven,7507,125.png,Agricole,Freddie Reid,1 -1971,27,18,Six Thousand Two Hundred and Twenty Nine,6229,138.png,Agricole,Edmee Pelletier,1 -1972,35,38,Six Thousand Seven Hundred and Fifty Nine,6759,179.png,Agricole,Freddie Reid,1 -1973,8,10,Nine Thousand On Hundred and Seenty On,9171,44.png,Agricole,Stephan Schwab,1 -1974,34,17,On Thousand Thre Hundred and Ninety For,1394,170.png,Agricole,Yolette Cloutier,1 -1975,33,23,For Thousand Seven Hundred and Seenty Five,4775,168.png,Agricole,Thรฉrรจse Fortier,1 -1976,8,41,Seven Thousand Eigt Hundred and Forteen,7814,42.png,Agricole,Germa de Geus,1 -1977,4,34,Six Thousand Thre Hundred and Eleven,6311,24.png,Agricole,Holly Martin,1 -1978,10,36,Thre Hundred and Eihty Five,385,52.png,Agricole,Thomas Chapman,1 -1979,41,4,Six Thousand and Eihty Five,6085,205.png,Agricole,Wafiyah Nashwa Wasem,1 -1980,29,39,On Thousand Five Hundred and Fifty Nine,1559,147.png,Agricole,Katie Connor,1 -1981,36,24,Nine Thousand On Hundred and Foty Two,9142,182.png,Agricole,Clarice Blanc,1 -1982,37,36,Eigt Thousand Six Hundred and Twenty For,8624,188.png,Agricole,Thomas Chapman,1 -1983,29,32,Six Thousand Nine Hundred and Seenty Two,6972,145.png,Agricole,Chelsea Watson,1 -1984,25,34,Two Thousand Six Hundred and Sixt Thre,2663,126.png,Agricole,Holly Martin,1 -1985,43,15,For Thousand For Hundred and Seenty,4470,217.png,Agricole,Milenko Tkalcic,1 -1986,34,34,On Thousand Thre Hundred and Fifty Six,1356,174.png,Agricole,Holly Martin,1 -1987,5,16,Nine Thousand Nine Hundred and Thirty Six,9936,28.png,Agricole,Searlas Grenier,1 -1988,19,5,Seven Thousand and Seven,7007,96.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1989,40,42,Two Thousand Eigt Hundred and Eihty On,2881,202.png,Agricole,Brady Jamin,1 -1990,14,21,Six Thousand For Hundred and Sixt,6460,72.png,Agricole,David Corbeil,1 -1991,6,32,On Thousand For Hundred and Eleven,1411,31.png,Agricole,Chelsea Watson,1 -1992,23,35,Five Thousand On Hundred and Seven,5107,119.png,Agricole,Elliot Humphreys,1 -1993,15,5,Six Thousand Seven Hundred and Nine,6709,78.png,Agricole,Fawwaz Zuhayr Mustafa,1 -1994,28,41,Five Thousand Nine Hundred and Five,5905,141.png,Agricole,Germa de Geus,1 -1995,38,30,For Thousand Thre Hundred and Thirty For,4334,192.png,Agricole,Jodie Holden,1 -1996,35,35,Five Thousand On Hundred and Eihty Two,5182,178.png,Agricole,Elliot Humphreys,1 -1997,0,40,Two Thousand and Nine,2009,0.png,Agricole,David Howard,1 -1998,39,26,On Thousand and Fifty,1050,195.png,Agricole,Sidney Lapointe,1 -1999,8,15,Six Thousand Eigt Hundred and Nine,6809,40.png,Agricole,Milenko Tkalcic,1 -2000,23,35,Five Thousand and Fifty Six,5056,117.png,Agricole,Elliot Humphreys,1 -2001,5,1,Six Thousand and Seventy One,6071,29.png,Banque,Emily D. Short,1 -2002,0,40,Three Thousand Nine Hundred and Twenty Seven,3927,0.png,Banque,David Howard,1 -2003,32,5,Nine Thousand and Six,9006,164.png,Banque,Fawwaz Zuhayr Mustafa,1 -2004,37,28,Seven Thousand Eight Hundred and Forty Nine,7849,187.png,Banque,Chapin Auger,1 -2005,30,24,One Thousand Eight Hundred and Four,1804,152.png,Banque,Clarice Blanc,1 -2006,25,12,Three Thousand Eight Hundred and Seventy Nine,3879,125.png,Banque,Marcel Achen,1 -2007,33,10,Seven Thousand and Three,7003,165.png,Banque,Stephan Schwab,1 -2008,21,24,Eight Thousand Six Hundred and Twenty Three,8623,106.png,Banque,Clarice Blanc,1 -2009,19,5,Four Thousand Eight Hundred and Ninety Two,4892,98.png,Banque,Fawwaz Zuhayr Mustafa,1 -2010,9,25,Seven Thousand Four Hundred and Thirty One,7431,45.png,Banque,Fleurette Coudert,1 -2011,2,39,Nine Thousand Eight Hundred and Sixty Two,9862,10.png,Banque,Katie Connor,1 -2012,4,9,Nine Thousand Nine Hundred and Twelve,9912,21.png,Banque,Maria Kalb,1 -2013,5,6,Nine Thousand Nine Hundred and Sixteen,9916,28.png,Banque,Abdul Qais Khouri,1 -2014,30,2,One Thousand Nine Hundred and Seventy Four,1974,150.png,Banque,Chi Hsiao,1 -2015,1,41,Eight Thousand Four Hundred and Seventy,8470,5.png,Banque,Germa de Geus,1 -2016,22,26,Three Thousand Six Hundred and Thirty Three,3633,110.png,Banque,Sidney Lapointe,1 -2017,39,36,Five Hundred and Fifteen,515,197.png,Banque,Thomas Chapman,1 -2018,29,4,Four Thousand Five Hundred and Twenty Seven,4527,149.png,Banque,Wafiyah Nashwa Wasem,1 -2019,10,16,Five Thousand Nine Hundred and Seventy Six,5976,50.png,Banque,Searlas Grenier,1 -2020,1,0,Six Thousand and Ninety Two,6092,7.png,Banque,Ethel M. Bryson,1 -2021,1,29,Five Thousand Nine Hundred and Twenty,5920,6.png,Banque,Hayden Bruce,1 -2022,39,7,One Thousand Seven Hundred and Ninety Six,1796,196.png,Banque,Hasna Bahiyaa Amari,1 -2023,1,22,One Thousand One Hundred and Sixty Seven,1167,7.png,Banque,Eglantine Forest,1 -2024,11,41,Six Thousand Two Hundred and Thirty Seven,6237,55.png,Banque,Germa de Geus,1 -2025,21,21,One Thousand One Hundred and Seventy Nine,1179,109.png,Banque,David Corbeil,1 -2026,33,1,Two Thousand and Sixty Two,2062,166.png,Banque,Emily D. Short,1 -2027,1,42,Six Thousand Two Hundred and Forty Three,6243,6.png,Banque,Brady Jamin,1 -2028,35,33,Six Hundred and Seventy Nine,679,178.png,Banque,Eleanor Freeman,1 -2029,2,38,Two Thousand One Hundred,2100,13.png,Banque,Freddie Reid,1 -2030,10,17,Nine Thousand Three Hundred and Twenty Three,9323,54.png,Banque,Yolette Cloutier,1 -2031,12,1,One Thousand Nine Hundred and Ninety Nine,1999,63.png,Banque,Emily D. Short,1 -2032,32,2,Eight Thousand Three Hundred and Twenty Three,8323,161.png,Banque,Chi Hsiao,1 -2033,37,32,Three Thousand Two Hundred and Six,3206,187.png,Banque,Chelsea Watson,1 -2034,11,8,Two Thousand Five Hundred and Eighty Two,2582,55.png,Banque,Steffen Krueger,1 -2035,40,9,Six Thousand Seven Hundred and Three,6703,204.png,Banque,Maria Kalb,1 -2036,28,17,Two Thousand Five Hundred and Thirty Four,2534,144.png,Banque,Yolette Cloutier,1 -2037,6,25,Six Thousand Eight Hundred and Fifty Two,6852,34.png,Banque,Fleurette Coudert,1 -2038,13,6,Four Thousand Nine Hundred and Ninety Nine,4999,69.png,Banque,Abdul Qais Khouri,1 -2039,12,25,One Thousand Eight Hundred and Thirty Nine,1839,60.png,Banque,Fleurette Coudert,1 -2040,7,15,One Thousand Three Hundred and Sixty Nine,1369,37.png,Banque,Milenko Tkalcic,1 -2041,37,36,Eight Hundred and Seventy Seven,877,189.png,Banque,Thomas Chapman,1 -2042,2,20,Three Thousand Three Hundred and Thirty Eight,3338,10.png,Banque,Seymour Patenaude,1 -2043,30,26,Seven Thousand Eight Hundred and Sixty Nine,7869,154.png,Banque,Sidney Lapointe,1 -2044,33,40,Four Thousand Nine Hundred and Twenty Nine,4929,168.png,Banque,David Howard,1 -2045,25,16,Three Thousand Three Hundred and Eleven,3311,129.png,Banque,Searlas Grenier,1 -2046,10,27,Five Thousand and Ninety Five,5095,54.png,Banque,Colette Monjeau,1 -2047,38,28,Five Thousand Six Hundred and Thirty Three,5633,191.png,Banque,Chapin Auger,1 -2048,35,22,Seven Thousand Two Hundred and Thirteen,7213,178.png,Banque,Eglantine Forest,1 -2049,18,10,Six Thousand and Twenty Eight,6028,90.png,Banque,Stephan Schwab,1 -2050,32,21,Nine Thousand Six Hundred and Eighty Six,9686,160.png,Banque,David Corbeil,1 -2051,32,40,Eight Thousand One Hundred and Twenty Eight,8128,163.png,Banque,David Howard,1 -2052,14,8,Two Thousand Nine Hundred and Seventeen,2917,72.png,Banque,Steffen Krueger,1 -2053,31,38,Eight Thousand and Forty Six,8046,157.png,Banque,Freddie Reid,1 -2054,17,25,Nine Thousand Seven Hundred and Twenty Seven,9727,89.png,Banque,Fleurette Coudert,1 -2055,13,21,Three Thousand Nine Hundred and Thirty Nine,3939,66.png,Banque,David Corbeil,1 -2056,34,37,Five Thousand Four Hundred and Fifty Two,5452,173.png,Banque,Eva Davies,1 -2057,3,14,Five Thousand and Fifty Three,5053,18.png,Banque,Renata Lukic,1 -2058,35,32,Eight Hundred and Forty Two,842,175.png,Banque,Chelsea Watson,1 -2059,1,41,Five Hundred and Five,505,5.png,Banque,Germa de Geus,1 -2060,1,2,Five Thousand Five Hundred and Thirty Nine,5539,5.png,Banque,Chi Hsiao,1 -2061,14,23,One Thousand Seven Hundred and Eighty Seven,1787,73.png,Banque,Thรฉrรจse Fortier,1 -2062,25,15,Four Thousand Two Hundred and Two,4202,129.png,Banque,Milenko Tkalcic,1 -2063,19,7,Three Thousand Seven Hundred and Thirty,3730,96.png,Banque,Hasna Bahiyaa Amari,1 -2064,11,18,Five Thousand Four Hundred and Thirty Two,5432,59.png,Banque,Edmee Pelletier,1 -2065,42,35,Seven Thousand Five Hundred and Seventy,7570,210.png,Banque,Elliot Humphreys,1 -2066,0,33,Three Hundred and Eighty,380,1.png,Banque,Eleanor Freeman,1 -2067,33,8,Four Thousand and Eleven,4011,168.png,Banque,Steffen Krueger,1 -2068,26,37,Two Hundred and Thirty Three,233,134.png,Banque,Eva Davies,1 -2069,32,10,Three Thousand One Hundred and Ninety One,3191,160.png,Banque,Stephan Schwab,1 -2070,12,18,One Thousand and Ninety Two,1092,61.png,Banque,Edmee Pelletier,1 -2071,34,26,Four Thousand Six Hundred and Sixty,4660,174.png,Banque,Sidney Lapointe,1 -2072,8,16,Five Thousand Three Hundred and Twenty Seven,5327,42.png,Banque,Searlas Grenier,1 -2073,2,4,Six Thousand and Sixty One,6061,14.png,Banque,Wafiyah Nashwa Wasem,1 -2074,11,33,Six Thousand Four Hundred and Seventy Two,6472,57.png,Banque,Eleanor Freeman,1 -2075,32,17,One Thousand Eight Hundred and Fifty Seven,1857,164.png,Banque,Yolette Cloutier,1 -2076,39,8,Nine Thousand Five Hundred and Forty One,9541,195.png,Banque,Steffen Krueger,1 -2077,0,19,Eight Thousand Three Hundred and Eighty Nine,8389,1.png,Banque,Franรงoise Lapierre,1 -2078,36,21,Nine Hundred and Twenty Eight,928,180.png,Banque,David Corbeil,1 -2079,8,13,Eight Thousand One Hundred and Seventy Two,8172,41.png,Banque,Petra Kovacic,1 -2080,31,8,Three Thousand One Hundred and Forty Two,3142,155.png,Banque,Steffen Krueger,1 -2081,30,15,Four Thousand Six Hundred and Ninety,4690,152.png,Banque,Milenko Tkalcic,1 -2082,36,40,Two Thousand Nine Hundred and Eighty Seven,2987,181.png,Banque,David Howard,1 -2083,18,36,Nine Thousand Seven Hundred and Eighty Nine,9789,90.png,Banque,Thomas Chapman,1 -2084,9,40,Five Thousand Six Hundred and Twelve,5612,47.png,Banque,David Howard,1 -2085,39,36,Eight Thousand Nine Hundred and Sixty Two,8962,199.png,Banque,Thomas Chapman,1 -2086,4,33,Nine Thousand Two Hundred and Twenty Three,9223,24.png,Banque,Eleanor Freeman,1 -2087,32,10,Three Thousand Seven Hundred and Eighty Eight,3788,163.png,Banque,Stephan Schwab,1 -2088,12,22,Three Thousand One Hundred and Ninety Six,3196,63.png,Banque,Eglantine Forest,1 -2089,34,43,Seven Thousand Nine Hundred and Sixty Two,7962,173.png,Banque,Aruna Bekx,1 -2090,37,32,Two Thousand Seven Hundred and Forty Eight,2748,187.png,Banque,Chelsea Watson,1 -2091,25,6,Three Thousand Six Hundred and Forty One,3641,129.png,Banque,Abdul Qais Khouri,1 -2092,23,21,Seven Thousand Nine Hundred and Five,7905,118.png,Banque,David Corbeil,1 -2093,3,12,One Thousand Six Hundred and Ninety,1690,17.png,Banque,Marcel Achen,1 -2094,6,35,Three Thousand Six Hundred and Fifty Two,3652,31.png,Banque,Elliot Humphreys,1 -2095,32,1,Eight Thousand Three Hundred and Ninety Two,8392,161.png,Banque,Emily D. Short,1 -2096,26,1,Eight Thousand Six Hundred and Four,8604,134.png,Banque,Emily D. Short,1 -2097,21,40,Nine Thousand One Hundred and Forty One,9141,108.png,Banque,David Howard,1 -2098,7,36,Eight Thousand Two Hundred and Fifty Seven,8257,36.png,Banque,Thomas Chapman,1 -2099,31,28,Three Thousand Six Hundred and Sixty,3660,155.png,Banque,Chapin Auger,1 -2100,43,28,Five Thousand and Seventy Five,5075,216.png,Banque,Chapin Auger,1 -2101,0,29,Five Thousand Five Hundred and Thirty Four,5534,3.png,Banque,Hayden Bruce,1 -2102,10,34,Four Thousand Five Hundred and Sixty Eight,4568,53.png,Banque,Holly Martin,1 -2103,20,32,Eight Thousand Seven Hundred and Eighty Nine,8789,101.png,Banque,Chelsea Watson,1 -2104,16,16,Six Thousand One Hundred and Seventy,6170,82.png,Banque,Searlas Grenier,1 -2105,2,4,Three Thousand Three Hundred and Ninety Four,3394,12.png,Banque,Wafiyah Nashwa Wasem,1 -2106,3,23,Three Thousand Eight Hundred and Fourteen,3814,19.png,Banque,Thรฉrรจse Fortier,1 -2107,1,13,Two Thousand Nine Hundred and Ninety One,2991,9.png,Banque,Petra Kovacic,1 -2108,35,14,Six Thousand Eight Hundred and Five,6805,179.png,Banque,Renata Lukic,1 -2109,35,13,Two Thousand and Forty One,2041,176.png,Banque,Petra Kovacic,1 -2110,33,13,Six Thousand Seven Hundred and Fifty Nine,6759,165.png,Banque,Petra Kovacic,1 -2111,23,24,Seven Thousand and Thirty Nine,7039,116.png,Banque,Clarice Blanc,1 -2112,18,40,Nine Thousand and Six,9006,91.png,Banque,David Howard,1 -2113,2,3,Three Thousand Four Hundred and Two,3402,10.png,Banque,Jiang Li Tao,1 -2114,5,38,Nine Thousand Four Hundred and Fifty,9450,27.png,Banque,Freddie Reid,1 -2115,32,8,Nine Thousand Five Hundred and Eighty Seven,9587,162.png,Banque,Steffen Krueger,1 -2116,11,23,Eight Thousand Four Hundred and Twenty Two,8422,57.png,Banque,Thรฉrรจse Fortier,1 -2117,1,4,One Thousand Three Hundred and Seventy Two,1372,7.png,Banque,Wafiyah Nashwa Wasem,1 -2118,37,12,Seven Thousand One Hundred and Ninety Six,7196,187.png,Banque,Marcel Achen,1 -2119,3,30,Six Thousand Six Hundred and Twenty Two,6622,18.png,Banque,Jodie Holden,1 -2120,29,23,Three Thousand Four Hundred and Twenty Nine,3429,145.png,Banque,Thรฉrรจse Fortier,1 -2121,23,42,One Thousand Seven Hundred and Eighty One,1781,118.png,Banque,Brady Jamin,1 -2122,5,38,Nine Thousand Five Hundred and Thirty Four,9534,25.png,Banque,Freddie Reid,1 -2123,23,3,One Thousand Three Hundred and Seventy Eight,1378,118.png,Banque,Jiang Li Tao,1 -2124,38,26,Nine Thousand Five Hundred and Five,9505,191.png,Banque,Sidney Lapointe,1 -2125,23,19,Eight Thousand Five Hundred and Forty Six,8546,115.png,Banque,Franรงoise Lapierre,1 -2126,22,2,Five Thousand Three Hundred and Eight,5308,112.png,Banque,Chi Hsiao,1 -2127,3,39,Nine Thousand Nine Hundred and Thirty Eight,9938,17.png,Banque,Katie Connor,1 -2128,29,31,Six Thousand Seven Hundred and Four,6704,149.png,Banque,Naomi Grant,1 -2129,31,12,One Thousand Six Hundred and Ninety,1690,159.png,Banque,Marcel Achen,1 -2130,27,19,Eight Thousand Nine Hundred and Ninety,8990,135.png,Banque,Franรงoise Lapierre,1 -2131,24,7,Four Thousand Six Hundred and Nineteen,4619,124.png,Banque,Hasna Bahiyaa Amari,1 -2132,29,5,Six Thousand Four Hundred and Eighty,6480,145.png,Banque,Fawwaz Zuhayr Mustafa,1 -2133,36,37,Thirty Three,33,182.png,Banque,Eva Davies,1 -2134,28,30,Nine Thousand Seven Hundred and Fifty Nine,9759,141.png,Banque,Jodie Holden,1 -2135,12,4,Three Thousand Six Hundred and Forty Five,3645,64.png,Banque,Wafiyah Nashwa Wasem,1 -2136,25,20,Four Thousand One Hundred and Fifty One,4151,129.png,Banque,Seymour Patenaude,1 -2137,14,14,Four Thousand Four Hundred and Fifty Two,4452,70.png,Banque,Renata Lukic,1 -2138,22,13,One Thousand and Fifty Three,1053,112.png,Banque,Petra Kovacic,1 -2139,4,27,Four Thousand Eight Hundred and Four,4804,22.png,Banque,Colette Monjeau,1 -2140,37,7,Four Thousand and Ninety Two,4092,188.png,Banque,Hasna Bahiyaa Amari,1 -2141,4,41,Eight Thousand One Hundred and Sixty Two,8162,24.png,Banque,Germa de Geus,1 -2142,7,20,Seven Thousand Two Hundred and Eighty Six,7286,39.png,Banque,Seymour Patenaude,1 -2143,5,20,Six Thousand Nine Hundred and Thirty Seven,6937,26.png,Banque,Seymour Patenaude,1 -2144,9,7,Five Thousand Two Hundred and Sixty Eight,5268,47.png,Banque,Hasna Bahiyaa Amari,1 -2145,1,25,Five Thousand Seven Hundred and Forty,5740,9.png,Banque,Fleurette Coudert,1 -2146,38,29,Eight Hundred and Eleven,811,194.png,Banque,Hayden Bruce,1 -2147,26,43,Three Thousand Six Hundred and Seventy Five,3675,130.png,Banque,Aruna Bekx,1 -2148,25,38,Six Thousand Seven Hundred and Forty One,6741,126.png,Banque,Freddie Reid,1 -2149,19,0,Five Thousand Nine Hundred and One,5901,95.png,Banque,Ethel M. Bryson,1 -2150,24,4,Six Thousand Seven Hundred and Sixteen,6716,123.png,Banque,Wafiyah Nashwa Wasem,1 -2151,32,38,Seven Thousand Eight Hundred and Five,7805,161.png,Banque,Freddie Reid,1 -2152,31,6,Eight Thousand Five Hundred and Thirty One,8531,159.png,Banque,Abdul Qais Khouri,1 -2153,17,9,One Thousand Six Hundred and Seventy Eight,1678,89.png,Banque,Maria Kalb,1 -2154,2,26,One Thousand Five Hundred and Ninety Four,1594,10.png,Banque,Sidney Lapointe,1 -2155,12,17,Four Thousand One Hundred and Forty Five,4145,60.png,Banque,Yolette Cloutier,1 -2156,3,5,Nine Thousand Three Hundred and Ninety Five,9395,19.png,Banque,Fawwaz Zuhayr Mustafa,1 -2157,18,10,Three Thousand Eight Hundred and Forty,3840,91.png,Banque,Stephan Schwab,1 -2158,11,7,Three Thousand One Hundred and Seventy One,3171,56.png,Banque,Hasna Bahiyaa Amari,1 -2159,14,13,Seven Thousand Three Hundred and Seventy Two,7372,70.png,Banque,Petra Kovacic,1 -2160,40,15,Six Thousand Four Hundred and Sixty Four,6464,202.png,Banque,Milenko Tkalcic,1 -2161,15,29,Three Thousand and Twenty Eight,3028,75.png,Banque,Hayden Bruce,1 -2162,16,21,Six Thousand and Fifteen,6015,84.png,Banque,David Corbeil,1 -2163,33,2,Five Hundred and Ninety Nine,599,169.png,Banque,Chi Hsiao,1 -2164,14,26,Seven Thousand Five Hundred and Three,7503,74.png,Banque,Sidney Lapointe,1 -2165,2,31,Four Thousand Five Hundred and Thirty,4530,13.png,Banque,Naomi Grant,1 -2166,21,4,Nine Thousand Six Hundred and Fifty Six,9656,107.png,Banque,Wafiyah Nashwa Wasem,1 -2167,36,40,Two Thousand and Thirty Five,2035,183.png,Banque,David Howard,1 -2168,19,8,Eight Thousand Three Hundred and Fifty Eight,8358,95.png,Banque,Steffen Krueger,1 -2169,43,34,Two Thousand Nine Hundred and Fifty Seven,2957,215.png,Banque,Holly Martin,1 -2170,28,42,Six Thousand and Seventy Nine,6079,144.png,Banque,Brady Jamin,1 -2171,11,11,Five Thousand One Hundred and Seventeen,5117,55.png,Banque,Jens Egger,1 -2172,16,1,Five Thousand Seven Hundred and Six,5706,84.png,Banque,Emily D. Short,1 -2173,14,11,Four Thousand Nine Hundred and Fifty Seven,4957,72.png,Banque,Jens Egger,1 -2174,29,19,Two Thousand Six Hundred and Ninety Eight,2698,145.png,Banque,Franรงoise Lapierre,1 -2175,43,37,Eight Thousand and Twelve,8012,217.png,Banque,Eva Davies,1 -2176,13,20,Three Thousand Three Hundred and Eighty Three,3383,67.png,Banque,Seymour Patenaude,1 -2177,20,15,Six Thousand Nine Hundred and Sixty,6960,103.png,Banque,Milenko Tkalcic,1 -2178,30,11,One Hundred and Sixty Three,163,153.png,Banque,Jens Egger,1 -2179,29,29,Four Thousand Eight Hundred and Eighty,4880,149.png,Banque,Hayden Bruce,1 -2180,31,10,Eight Thousand Three Hundred and Eighteen,8318,158.png,Banque,Stephan Schwab,1 -2181,32,5,Three Thousand Seven Hundred and Fifty Two,3752,163.png,Banque,Fawwaz Zuhayr Mustafa,1 -2182,32,8,One Thousand Two Hundred and Eighty Five,1285,160.png,Banque,Steffen Krueger,1 -2183,5,12,Two Thousand Five Hundred and Ninety Four,2594,28.png,Banque,Marcel Achen,1 -2184,24,36,Eight Thousand Three Hundred and Eighteen,8318,122.png,Banque,Thomas Chapman,1 -2185,12,11,Eight Thousand Seven Hundred and Twenty Four,8724,61.png,Banque,Jens Egger,1 -2186,41,25,Two Thousand and Eighty,2080,206.png,Banque,Fleurette Coudert,1 -2187,38,0,Nine Thousand Six Hundred and Sixty Four,9664,192.png,Banque,Ethel M. Bryson,1 -2188,27,22,Nine Hundred and Eight,908,136.png,Banque,Eglantine Forest,1 -2189,8,18,Eight Thousand Six Hundred and Thirty,8630,43.png,Banque,Edmee Pelletier,1 -2190,5,7,Seven Thousand One Hundred and Forty Five,7145,26.png,Banque,Hasna Bahiyaa Amari,1 -2191,8,34,Six Thousand Seven Hundred and Ninety Seven,6797,41.png,Banque,Holly Martin,1 -2192,1,27,Five Thousand One Hundred and Fifty Five,5155,5.png,Banque,Colette Monjeau,1 -2193,2,21,Four Thousand Five Hundred and Eight,4508,12.png,Banque,David Corbeil,1 -2194,12,31,Four Thousand Seven Hundred and Eight,4708,61.png,Banque,Naomi Grant,1 -2195,8,42,Two Hundred and Three,203,41.png,Banque,Brady Jamin,1 -2196,17,40,Three Thousand and Thirty,3030,88.png,Banque,David Howard,1 -2197,34,19,Three Thousand Eight Hundred and Eighty Five,3885,170.png,Banque,Franรงoise Lapierre,1 -2198,10,4,Seven Thousand Seven Hundred and Fifty One,7751,52.png,Banque,Wafiyah Nashwa Wasem,1 -2199,26,23,One Thousand Five Hundred and Fifty Nine,1559,132.png,Banque,Thรฉrรจse Fortier,1 -2200,4,33,Five Thousand Seven Hundred and Thirteen,5713,24.png,Banque,Eleanor Freeman,1 -2201,15,18,Three Thousand Five Hundred and Fifty Six,3556,75.png,Banque,Edmee Pelletier,1 -2202,23,40,Eight Thousand Eight Hundred and Thirty One,8831,116.png,Banque,David Howard,1 -2203,8,0,Five Thousand Two Hundred,5200,42.png,Banque,Ethel M. Bryson,1 -2204,28,5,One Thousand Four Hundred and Fifty Seven,1457,142.png,Banque,Fawwaz Zuhayr Mustafa,1 -2205,16,39,Two Thousand Seven Hundred and Eighty Five,2785,80.png,Banque,Katie Connor,1 -2206,22,15,One Thousand Three Hundred and Forty Seven,1347,114.png,Banque,Milenko Tkalcic,1 -2207,42,34,Eight Thousand Seven Hundred and Twenty Nine,8729,214.png,Banque,Holly Martin,1 -2208,15,35,Seven Thousand Seven Hundred and Thirty Three,7733,78.png,Banque,Elliot Humphreys,1 -2209,30,12,Two Thousand Three Hundred and Fifty Two,2352,152.png,Banque,Marcel Achen,1 -2210,21,9,Seven Thousand Two Hundred and Eighty,7280,109.png,Banque,Maria Kalb,1 -2211,36,33,Three Thousand Eight Hundred and Sixty Eight,3868,180.png,Banque,Eleanor Freeman,1 -2212,4,3,Five Thousand Eight Hundred and Seventy Eight,5878,20.png,Banque,Jiang Li Tao,1 -2213,28,12,Six Thousand Nine Hundred and Sixteen,6916,144.png,Banque,Marcel Achen,1 -2214,37,34,One Thousand Eight Hundred and Sixty Five,1865,189.png,Banque,Holly Martin,1 -2215,19,13,One Thousand Six Hundred and Eight,1608,96.png,Banque,Petra Kovacic,1 -2216,23,11,Seven Thousand One Hundred and Eighty Nine,7189,117.png,Banque,Jens Egger,1 -2217,39,34,Nine Thousand Eight Hundred and Twenty Eight,9828,198.png,Banque,Holly Martin,1 -2218,3,29,One Thousand and Eight,1008,17.png,Banque,Hayden Bruce,1 -2219,40,17,Eight Thousand Five Hundred and Seventy Eight,8578,201.png,Banque,Yolette Cloutier,1 -2220,6,25,Four Thousand Seven Hundred and Thirty One,4731,33.png,Banque,Fleurette Coudert,1 -2221,5,33,Eight Thousand Two Hundred and Fifty Five,8255,27.png,Banque,Eleanor Freeman,1 -2222,22,39,Nine Thousand Four Hundred and Ten,9410,114.png,Banque,Katie Connor,1 -2223,38,9,Eight Thousand Three Hundred and Seventy One,8371,191.png,Banque,Maria Kalb,1 -2224,18,41,Seven Hundred and Eighty Six,786,91.png,Banque,Germa de Geus,1 -2225,43,11,Six Thousand Eight Hundred and Ninety Five,6895,217.png,Banque,Jens Egger,1 -2226,11,42,Seven Thousand and Seventy Five,7075,56.png,Banque,Brady Jamin,1 -2227,31,35,Five Thousand and Nine,5009,158.png,Banque,Elliot Humphreys,1 -2228,7,12,Three Thousand Eight Hundred and Fifty Six,3856,37.png,Banque,Marcel Achen,1 -2229,32,34,Eight Thousand Seven Hundred and Forty Five,8745,162.png,Banque,Holly Martin,1 -2230,31,31,Six Thousand Nine Hundred and Forty Nine,6949,158.png,Banque,Naomi Grant,1 -2231,30,23,Seven Thousand Two Hundred and Twenty Six,7226,150.png,Banque,Thรฉrรจse Fortier,1 -2232,7,9,Three Thousand Two Hundred and Seventy Three,3273,39.png,Banque,Maria Kalb,1 -2233,24,10,Eight Hundred and Eighty Eight,888,120.png,Banque,Stephan Schwab,1 -2234,43,11,Five Hundred and Eighty Eight,588,216.png,Banque,Jens Egger,1 -2235,21,16,One Thousand One Hundred and Seventy Seven,1177,107.png,Banque,Searlas Grenier,1 -2236,38,39,Three Thousand Two Hundred and Twenty Four,3224,191.png,Banque,Katie Connor,1 -2237,29,19,Three Thousand One Hundred and Sixteen,3116,145.png,Banque,Franรงoise Lapierre,1 -2238,21,36,Two Thousand and Sixty Six,2066,109.png,Banque,Thomas Chapman,1 -2239,17,3,Two Thousand Six Hundred and Ninety,2690,86.png,Banque,Jiang Li Tao,1 -2240,18,15,Nine Hundred and Twenty Seven,927,94.png,Banque,Milenko Tkalcic,1 -2241,12,18,Two Thousand Nine Hundred and Eleven,2911,60.png,Banque,Edmee Pelletier,1 -2242,24,27,Three Thousand Eight Hundred and Twenty Seven,3827,123.png,Banque,Colette Monjeau,1 -2243,11,40,Four Thousand Six Hundred and Ninety Seven,4697,57.png,Banque,David Howard,1 -2244,28,8,Two Thousand Two Hundred and Eight,2208,143.png,Banque,Steffen Krueger,1 -2245,40,22,Six Thousand Seven Hundred and Twenty One,6721,203.png,Banque,Eglantine Forest,1 -2246,40,7,Seven Thousand One Hundred and Fifty Three,7153,204.png,Banque,Hasna Bahiyaa Amari,1 -2247,18,4,Three Thousand Nine Hundred and Eighteen,3918,92.png,Banque,Wafiyah Nashwa Wasem,1 -2248,21,39,Five Thousand Six Hundred and Fourteen,5614,109.png,Banque,Katie Connor,1 -2249,29,10,Nine Thousand Two Hundred and Twenty,9220,145.png,Banque,Stephan Schwab,1 -2250,21,43,Three Hundred and Sixty Four,364,106.png,Banque,Aruna Bekx,1 -2251,41,33,Five Thousand One Hundred and Twenty Seven,5127,209.png,Banque,Eleanor Freeman,1 -2252,2,2,Three Thousand Eight Hundred and Seventy Eight,3878,12.png,Banque,Chi Hsiao,1 -2253,35,43,Eight Thousand One Hundred and Nine,8109,178.png,Banque,Aruna Bekx,1 -2254,15,43,Seven Hundred and Seventy Four,774,76.png,Banque,Aruna Bekx,1 -2255,42,13,Eight Thousand Two Hundred and Sixty Five,8265,210.png,Banque,Petra Kovacic,1 -2256,28,29,Three Thousand One Hundred and Ninety Two,3192,143.png,Banque,Hayden Bruce,1 -2257,26,18,Eight Thousand Four Hundred and Twenty Eight,8428,133.png,Banque,Edmee Pelletier,1 -2258,13,7,Nine Thousand Nine Hundred and Eighty Six,9986,69.png,Banque,Hasna Bahiyaa Amari,1 -2259,5,11,Nine Thousand Two Hundred and Forty Seven,9247,25.png,Banque,Jens Egger,1 -2260,43,13,Two Thousand One Hundred and Forty Nine,2149,219.png,Banque,Petra Kovacic,1 -2261,13,31,One Thousand One Hundred and Twenty,1120,67.png,Banque,Naomi Grant,1 -2262,3,19,Nine Thousand Four Hundred and Ninety Seven,9497,19.png,Banque,Franรงoise Lapierre,1 -2263,5,8,One Thousand Six Hundred and Fifty,1650,28.png,Banque,Steffen Krueger,1 -2264,30,38,Four Thousand Seven Hundred and Forty Eight,4748,154.png,Banque,Freddie Reid,1 -2265,37,30,Three Thousand Three Hundred and Seventy Five,3375,187.png,Banque,Jodie Holden,1 -2266,39,7,Two Thousand Three Hundred and Nine,2309,199.png,Banque,Hasna Bahiyaa Amari,1 -2267,39,21,Eight Thousand Four Hundred and Forty Five,8445,199.png,Banque,David Corbeil,1 -2268,11,29,Two Thousand and Fourteen,2014,56.png,Banque,Hayden Bruce,1 -2269,35,7,Six Thousand and Twenty Five,6025,178.png,Banque,Hasna Bahiyaa Amari,1 -2270,7,29,Seven Hundred and Thirty Four,734,38.png,Banque,Hayden Bruce,1 -2271,5,32,Five Thousand and Fifty Four,5054,27.png,Banque,Chelsea Watson,1 -2272,17,37,Four Thousand and Seven,4007,85.png,Banque,Eva Davies,1 -2273,29,27,Eight Thousand Eight Hundred and Seventy,8870,147.png,Banque,Colette Monjeau,1 -2274,39,36,Four Thousand One Hundred and Forty Two,4142,196.png,Banque,Thomas Chapman,1 -2275,20,9,Two Thousand Six Hundred and Fourteen,2614,104.png,Banque,Maria Kalb,1 -2276,41,40,Six Thousand Three Hundred and Seventy Five,6375,208.png,Banque,David Howard,1 -2277,38,35,Two Thousand Three Hundred and Thirty Eight,2338,190.png,Banque,Elliot Humphreys,1 -2278,8,42,Two Thousand Four Hundred and Ninety,2490,44.png,Banque,Brady Jamin,1 -2279,18,32,Nine Hundred and Twenty Five,925,92.png,Banque,Chelsea Watson,1 -2280,10,25,Thirty Two,32,51.png,Banque,Fleurette Coudert,1 -2281,42,12,Five Thousand and Forty Five,5045,214.png,Banque,Marcel Achen,1 -2282,39,17,Six Thousand Eight Hundred and Fifty Five,6855,195.png,Banque,Yolette Cloutier,1 -2283,15,8,Three Thousand Seven Hundred and Eighty,3780,79.png,Banque,Steffen Krueger,1 -2284,7,23,Nine Thousand Seven Hundred and Sixty Three,9763,39.png,Banque,Thรฉrรจse Fortier,1 -2285,13,8,Nine Thousand and Fifty Four,9054,69.png,Banque,Steffen Krueger,1 -2286,20,3,Four Thousand and Forty Eight,4048,100.png,Banque,Jiang Li Tao,1 -2287,43,9,Seven Thousand Eight Hundred and Thirteen,7813,216.png,Banque,Maria Kalb,1 -2288,35,9,Six Thousand Three Hundred and Ten,6310,179.png,Banque,Maria Kalb,1 -2289,0,18,Eight Thousand Three Hundred and Thirteen,8313,0.png,Banque,Edmee Pelletier,1 -2290,19,10,Two Hundred and Forty Six,246,98.png,Banque,Stephan Schwab,1 -2291,37,33,Seven Thousand Three Hundred and Eighty Five,7385,185.png,Banque,Eleanor Freeman,1 -2292,3,33,Nine Thousand Eight Hundred and Fifteen,9815,16.png,Banque,Eleanor Freeman,1 -2293,4,1,Two Thousand Six Hundred and Sixty Three,2663,23.png,Banque,Emily D. Short,1 -2294,2,29,Four Thousand Six Hundred and Sixty Nine,4669,11.png,Banque,Hayden Bruce,1 -2295,20,14,Seven Thousand Four Hundred and Thirteen,7413,100.png,Banque,Renata Lukic,1 -2296,22,31,Five Thousand Seven Hundred and Thirty Six,5736,110.png,Banque,Naomi Grant,1 -2297,20,9,Four Thousand Five Hundred and Ninety Eight,4598,103.png,Banque,Maria Kalb,1 -2298,39,19,One Hundred and Thirty Seven,137,197.png,Banque,Franรงoise Lapierre,1 -2299,10,28,Four Thousand Two Hundred and Twenty One,4221,50.png,Banque,Chapin Auger,1 -2300,24,4,Nine Thousand Six Hundred and Eighteen,9618,124.png,Banque,Wafiyah Nashwa Wasem,1 -2301,34,11,Six Thousand Nine Hundred and Seventy Seven,6977,173.png,Banque,Jens Egger,1 -2302,7,16,Nine Thousand Six Hundred and One,9601,36.png,Banque,Searlas Grenier,1 -2303,14,12,Five Thousand Two Hundred and Seventy Eight,5278,70.png,Banque,Marcel Achen,1 -2304,9,26,Three Thousand Four Hundred and Eight,3408,48.png,Banque,Sidney Lapointe,1 -2305,26,23,Two Thousand Three Hundred and Ninety,2390,131.png,Banque,Thรฉrรจse Fortier,1 -2306,7,25,Five Thousand Three Hundred and Forty Seven,5347,38.png,Banque,Fleurette Coudert,1 -2307,10,36,Five Thousand Nine Hundred and Fifty Seven,5957,50.png,Banque,Thomas Chapman,1 -2308,29,33,Seven Thousand One Hundred and Three,7103,145.png,Banque,Eleanor Freeman,1 -2309,23,10,Nine Thousand One Hundred and Twenty Seven,9127,115.png,Banque,Stephan Schwab,1 -2310,38,39,Two Thousand Six Hundred and Two,2602,191.png,Banque,Katie Connor,1 -2311,20,2,Three Thousand Four Hundred and Thirty,3430,100.png,Banque,Chi Hsiao,1 -2312,4,18,Eight Thousand Nine Hundred and Three,8903,20.png,Banque,Edmee Pelletier,1 -2313,27,13,Five Thousand Seven Hundred and Eighty One,5781,138.png,Banque,Petra Kovacic,1 -2314,27,25,Seven Thousand Three Hundred and Fifty Nine,7359,137.png,Banque,Fleurette Coudert,1 -2315,37,25,Nine Thousand Eight Hundred and Sixteen,9816,185.png,Banque,Fleurette Coudert,1 -2316,2,29,Six Thousand Six Hundred and Eighty One,6681,10.png,Banque,Hayden Bruce,1 -2317,38,21,Nine Hundred and Fifty Two,952,191.png,Banque,David Corbeil,1 -2318,34,12,Two Hundred and Seventy Eight,278,174.png,Banque,Marcel Achen,1 -2319,15,23,Nine Thousand One Hundred and Sixty Six,9166,75.png,Banque,Thรฉrรจse Fortier,1 -2320,43,21,Four Thousand Six Hundred and Seventy,4670,219.png,Banque,David Corbeil,1 -2321,15,24,Six Thousand Six Hundred,6600,76.png,Banque,Clarice Blanc,1 -2322,11,33,Six Thousand Four Hundred and Forty Five,6445,59.png,Banque,Eleanor Freeman,1 -2323,4,7,Two Thousand Two Hundred and Fifty Three,2253,24.png,Banque,Hasna Bahiyaa Amari,1 -2324,18,23,Four Thousand One Hundred and Nine,4109,91.png,Banque,Thรฉrรจse Fortier,1 -2325,18,19,Five Thousand Three Hundred and Twenty One,5321,90.png,Banque,Franรงoise Lapierre,1 -2326,1,11,Seven Thousand Six Hundred and Thirty One,7631,9.png,Banque,Jens Egger,1 -2327,41,15,Five Thousand Two Hundred and Forty One,5241,207.png,Banque,Milenko Tkalcic,1 -2328,0,38,One Thousand Four Hundred and Eighty Three,1483,2.png,Banque,Freddie Reid,1 -2329,14,27,Two Thousand Eight Hundred and Fifty Six,2856,73.png,Banque,Colette Monjeau,1 -2330,34,25,Four Thousand One Hundred and Sixty Five,4165,170.png,Banque,Fleurette Coudert,1 -2331,5,8,Three Thousand Three Hundred and Forty Three,3343,25.png,Banque,Steffen Krueger,1 -2332,18,4,Eight Hundred and Seventy Four,874,92.png,Banque,Wafiyah Nashwa Wasem,1 -2333,43,16,Two Thousand and Five,2005,216.png,Banque,Searlas Grenier,1 -2334,6,14,Two Thousand Four Hundred and Twenty Five,2425,31.png,Banque,Renata Lukic,1 -2335,13,21,Three Thousand One Hundred and Fifty Four,3154,67.png,Banque,David Corbeil,1 -2336,21,37,Three Hundred and Eighty One,381,107.png,Banque,Eva Davies,1 -2337,5,3,Six Thousand Eight Hundred and Three,6803,29.png,Banque,Jiang Li Tao,1 -2338,30,14,Three Thousand Two Hundred and Thirty Six,3236,150.png,Banque,Renata Lukic,1 -2339,12,33,Two Thousand One Hundred and Thirty Five,2135,60.png,Banque,Eleanor Freeman,1 -2340,29,0,Nine Thousand Eight Hundred and Twenty Three,9823,149.png,Banque,Ethel M. Bryson,1 -2341,17,14,Five Thousand Three Hundred and Thirty Three,5333,88.png,Banque,Renata Lukic,1 -2342,1,21,Three Thousand and Seventy Two,3072,8.png,Banque,David Corbeil,1 -2343,41,23,Four Thousand Four Hundred and Eighteen,4418,206.png,Banque,Thรฉrรจse Fortier,1 -2344,37,24,Six Thousand and Fourteen,6014,188.png,Banque,Clarice Blanc,1 -2345,40,22,Four Thousand Eight Hundred and Two,4802,200.png,Banque,Eglantine Forest,1 -2346,20,29,One Thousand Eight Hundred and Forty,1840,101.png,Banque,Hayden Bruce,1 -2347,42,1,Six Thousand Eight Hundred and Twenty One,6821,211.png,Banque,Emily D. Short,1 -2348,31,5,One Thousand Seven Hundred and Twenty Eight,1728,157.png,Banque,Fawwaz Zuhayr Mustafa,1 -2349,15,26,Five Thousand Two Hundred and Thirteen,5213,79.png,Banque,Sidney Lapointe,1 -2350,29,41,Seven Thousand Nine Hundred and Ninety Four,7994,149.png,Banque,Germa de Geus,1 -2351,11,41,Eight Thousand Seven Hundred and Ninety Eight,8798,55.png,Banque,Germa de Geus,1 -2352,40,43,One Thousand Five Hundred and Sixty Nine,1569,202.png,Banque,Aruna Bekx,1 -2353,27,10,Three Thousand Two Hundred and Eighty Four,3284,139.png,Banque,Stephan Schwab,1 -2354,30,5,Three Hundred and Twenty Four,324,154.png,Banque,Fawwaz Zuhayr Mustafa,1 -2355,9,20,One Thousand Six Hundred and Sixty Four,1664,49.png,Banque,Seymour Patenaude,1 -2356,6,32,Eight Hundred and Seventy Seven,877,30.png,Banque,Chelsea Watson,1 -2357,8,2,Five Thousand Eight Hundred and Forty Six,5846,44.png,Banque,Chi Hsiao,1 -2358,19,6,Nine Thousand Four Hundred and Fifty One,9451,95.png,Banque,Abdul Qais Khouri,1 -2359,10,2,Five Thousand Three Hundred and Twenty Three,5323,54.png,Banque,Chi Hsiao,1 -2360,20,13,Nine Thousand Eight Hundred and Thirty Eight,9838,102.png,Banque,Petra Kovacic,1 -2361,2,9,Eight Thousand Eight Hundred and Forty Eight,8848,13.png,Banque,Maria Kalb,1 -2362,31,35,Nine Thousand Five Hundred,9500,158.png,Banque,Elliot Humphreys,1 -2363,24,26,Eight Thousand Nine Hundred and Seventy Four,8974,120.png,Banque,Sidney Lapointe,1 -2364,37,26,Six Thousand Five Hundred and Forty Five,6545,189.png,Banque,Sidney Lapointe,1 -2365,36,15,Six Hundred and One,601,184.png,Banque,Milenko Tkalcic,1 -2366,43,4,Three Thousand One Hundred and Eighty Eight,3188,215.png,Banque,Wafiyah Nashwa Wasem,1 -2367,14,31,Three Thousand Four Hundred and One,3401,72.png,Banque,Naomi Grant,1 -2368,31,13,Seven Thousand Eight Hundred and Eighty Four,7884,158.png,Banque,Petra Kovacic,1 -2369,18,31,Eight Thousand Seven Hundred and Fifteen,8715,90.png,Banque,Naomi Grant,1 -2370,38,37,Nine Thousand Four Hundred and Sixty Three,9463,190.png,Banque,Eva Davies,1 -2371,12,14,One Thousand and Seven,1007,63.png,Banque,Renata Lukic,1 -2372,5,25,Five Thousand Nine Hundred and Fifty Six,5956,27.png,Banque,Fleurette Coudert,1 -2373,18,17,Eight Thousand Three Hundred and Ten,8310,90.png,Banque,Yolette Cloutier,1 -2374,3,24,Eight Thousand Four Hundred and Sixty Six,8466,19.png,Banque,Clarice Blanc,1 -2375,26,12,One Thousand Seven Hundred and Sixteen,1716,130.png,Banque,Marcel Achen,1 -2376,41,42,Two Thousand Eight Hundred and Five,2805,207.png,Banque,Brady Jamin,1 -2377,43,27,Nine Thousand and One,9001,215.png,Banque,Colette Monjeau,1 -2378,38,8,Seven Thousand Six Hundred and Twenty Three,7623,191.png,Banque,Steffen Krueger,1 -2379,37,39,Three Thousand Three Hundred and Twenty Eight,3328,188.png,Banque,Katie Connor,1 -2380,7,43,Five Thousand Four Hundred and Forty Nine,5449,39.png,Banque,Aruna Bekx,1 -2381,35,42,Three Thousand Five Hundred and Sixty Nine,3569,177.png,Banque,Brady Jamin,1 -2382,21,27,Seven Thousand One Hundred and Eighty Nine,7189,106.png,Banque,Colette Monjeau,1 -2383,1,22,Two Thousand Six Hundred and Thirty Four,2634,7.png,Banque,Eglantine Forest,1 -2384,9,29,Nine Hundred and Sixty Eight,968,46.png,Banque,Hayden Bruce,1 -2385,1,25,Eight Thousand Six Hundred and Forty Two,8642,7.png,Banque,Fleurette Coudert,1 -2386,35,35,Three Thousand Seven Hundred and Thirteen,3713,175.png,Banque,Elliot Humphreys,1 -2387,34,6,Six Thousand Four Hundred and Ninety Three,6493,173.png,Banque,Abdul Qais Khouri,1 -2388,19,30,Six Thousand Six Hundred and Forty Eight,6648,95.png,Banque,Jodie Holden,1 -2389,2,13,Seven Thousand Seven Hundred and Seven,7707,14.png,Banque,Petra Kovacic,1 -2390,39,28,Four Thousand Four Hundred and Thirty Two,4432,197.png,Banque,Chapin Auger,1 -2391,24,11,Four Thousand Eight Hundred and Fifty Five,4855,124.png,Banque,Jens Egger,1 -2392,21,25,Five Thousand Six Hundred and Twenty Three,5623,107.png,Banque,Fleurette Coudert,1 -2393,2,31,Six Hundred and Forty Three,643,13.png,Banque,Naomi Grant,1 -2394,32,20,Nine Thousand and Ninety Five,9095,161.png,Banque,Seymour Patenaude,1 -2395,22,7,Nine Thousand Three Hundred and Twenty Six,9326,110.png,Banque,Hasna Bahiyaa Amari,1 -2396,3,16,Five Thousand Nine Hundred and Thirty Two,5932,17.png,Banque,Searlas Grenier,1 -2397,20,9,One Thousand One Hundred and Sixty One,1161,101.png,Banque,Maria Kalb,1 -2398,8,39,Six Thousand Four Hundred and Fifty One,6451,44.png,Banque,Katie Connor,1 -2399,17,29,Two Thousand Five Hundred and Sixty One,2561,86.png,Banque,Hayden Bruce,1 -2400,4,41,Nine Hundred and Forty Two,942,21.png,Banque,Germa de Geus,1 -2401,13,35,Eight Thousand Seven Hundred and Seventy Seven,8777,66.png,Banque,Elliot Humphreys,1 -2402,30,4,Seven Thousand Five Hundred and Twenty Six,7526,152.png,Banque,Wafiyah Nashwa Wasem,1 -2403,15,10,One Thousand Seven Hundred and Thirty Eight,1738,76.png,Banque,Stephan Schwab,1 -2404,27,18,Five Thousand One Hundred and Fifty,5150,137.png,Banque,Edmee Pelletier,1 -2405,19,24,Three Thousand Four Hundred and Eighteen,3418,98.png,Banque,Clarice Blanc,1 -2406,11,22,Six Thousand Seven Hundred and Fifty Four,6754,58.png,Banque,Eglantine Forest,1 -2407,5,3,Eight Thousand Three Hundred and Fifty,8350,29.png,Banque,Jiang Li Tao,1 -2408,43,4,Two Thousand Eight Hundred and Sixty Four,2864,215.png,Banque,Wafiyah Nashwa Wasem,1 -2409,32,14,Eight Hundred and Seventy Six,876,162.png,Banque,Renata Lukic,1 -2410,36,41,Four Thousand One Hundred and Eight,4108,181.png,Banque,Germa de Geus,1 -2411,30,26,Eight Thousand Seven Hundred and Seventy Nine,8779,152.png,Banque,Sidney Lapointe,1 -2412,4,21,Four Thousand Six Hundred and Fifty Nine,4659,24.png,Banque,David Corbeil,1 -2413,33,36,Four Thousand Four Hundred and Twelve,4412,166.png,Banque,Thomas Chapman,1 -2414,9,10,Five Thousand Seven Hundred and Fifty Six,5756,45.png,Banque,Stephan Schwab,1 -2415,28,28,Eight Thousand One Hundred and Sixty Three,8163,141.png,Banque,Chapin Auger,1 -2416,26,1,One Thousand and Fifty,1050,131.png,Banque,Emily D. Short,1 -2417,0,26,Two Thousand Six Hundred and Five,2605,4.png,Banque,Sidney Lapointe,1 -2418,27,31,Eight Thousand Two Hundred and Seventy Four,8274,135.png,Banque,Naomi Grant,1 -2419,27,20,One Thousand Six Hundred and Eighty Nine,1689,136.png,Banque,Seymour Patenaude,1 -2420,15,5,One Thousand Seven Hundred and Seventy Nine,1779,78.png,Banque,Fawwaz Zuhayr Mustafa,1 -2421,14,17,Seven Thousand and Thirty Six,7036,74.png,Banque,Yolette Cloutier,1 -2422,21,15,Four Thousand Seven Hundred and Forty Three,4743,108.png,Banque,Milenko Tkalcic,1 -2423,19,4,Eighteen,18,97.png,Banque,Wafiyah Nashwa Wasem,1 -2424,36,21,Seven Hundred and Nine,709,180.png,Banque,David Corbeil,1 -2425,19,1,Seven Thousand Five Hundred and Fifty Four,7554,96.png,Banque,Emily D. Short,1 -2426,5,42,Three Thousand Three Hundred and Ninety One,3391,29.png,Banque,Brady Jamin,1 -2427,24,21,Two Thousand Five Hundred and Twenty Five,2525,120.png,Banque,David Corbeil,1 -2428,16,36,One Thousand One Hundred and Sixty Three,1163,82.png,Banque,Thomas Chapman,1 -2429,8,6,Five Thousand One Hundred and Eighty Six,5186,41.png,Banque,Abdul Qais Khouri,1 -2430,3,25,Nine Hundred and Seventy Four,974,15.png,Banque,Fleurette Coudert,1 -2431,41,20,Six Hundred and Forty Four,644,205.png,Banque,Seymour Patenaude,1 -2432,5,41,Three Thousand Seven Hundred and Forty Nine,3749,26.png,Banque,Germa de Geus,1 -2433,14,19,Three Hundred and Fifty Two,352,71.png,Banque,Franรงoise Lapierre,1 -2434,26,21,Two Thousand Six Hundred and Seventy Five,2675,133.png,Banque,David Corbeil,1 -2435,20,14,One Thousand Nine Hundred and One,1901,101.png,Banque,Renata Lukic,1 -2436,41,10,Three Thousand Six Hundred and Thirty Three,3633,209.png,Banque,Stephan Schwab,1 -2437,28,43,Six Thousand Nine Hundred and Ninety Four,6994,142.png,Banque,Aruna Bekx,1 -2438,0,28,Seven Thousand Seven Hundred and Eighty One,7781,4.png,Banque,Chapin Auger,1 -2439,1,33,Nine Thousand Two Hundred and Eighty Five,9285,7.png,Banque,Eleanor Freeman,1 -2440,2,13,Eight Thousand Six Hundred and Ninety Three,8693,12.png,Banque,Petra Kovacic,1 -2441,37,9,Five Thousand Two Hundred and Thirty Two,5232,186.png,Banque,Maria Kalb,1 -2442,13,17,Eight Thousand Nine Hundred and Twenty Six,8926,67.png,Banque,Yolette Cloutier,1 -2443,23,19,Three Thousand Three Hundred and Eighty Seven,3387,117.png,Banque,Franรงoise Lapierre,1 -2444,27,19,Seven Thousand Four Hundred and Forty,7440,139.png,Banque,Franรงoise Lapierre,1 -2445,6,26,Three Thousand Seven Hundred and Seventy Seven,3777,33.png,Banque,Sidney Lapointe,1 -2446,40,5,Seven Hundred and Seventy,770,203.png,Banque,Fawwaz Zuhayr Mustafa,1 -2447,14,5,Four Thousand Five Hundred and Sixty Eight,4568,74.png,Banque,Fawwaz Zuhayr Mustafa,1 -2448,43,29,Seven Thousand Two Hundred and Six,7206,219.png,Banque,Hayden Bruce,1 -2449,17,6,Nine Thousand Seven Hundred and Thirty Five,9735,87.png,Banque,Abdul Qais Khouri,1 -2450,10,42,Six Thousand Two Hundred and Two,6202,53.png,Banque,Brady Jamin,1 -2451,10,42,Nine Thousand and Ninety Nine,9099,51.png,Banque,Brady Jamin,1 -2452,12,14,Four Thousand Eight Hundred and Fifty Four,4854,62.png,Banque,Renata Lukic,1 -2453,14,5,Four Thousand Two Hundred and Seventy Six,4276,71.png,Banque,Fawwaz Zuhayr Mustafa,1 -2454,37,13,Six Thousand Two Hundred and Fifty Nine,6259,185.png,Banque,Petra Kovacic,1 -2455,41,37,Five Thousand Seven Hundred and Ninety Three,5793,205.png,Banque,Eva Davies,1 -2456,41,3,Two Thousand One Hundred and Sixty Two,2162,206.png,Banque,Jiang Li Tao,1 -2457,31,25,Three Thousand Four Hundred and Seventy Six,3476,158.png,Banque,Fleurette Coudert,1 -2458,14,21,One Thousand Four Hundred and Fifty Two,1452,71.png,Banque,David Corbeil,1 -2459,33,28,Eight Thousand and Nineteen,8019,166.png,Banque,Chapin Auger,1 -2460,39,19,Five Thousand Eight Hundred and Thirty,5830,197.png,Banque,Franรงoise Lapierre,1 -2461,3,12,Six Thousand and Sixty Nine,6069,17.png,Banque,Marcel Achen,1 -2462,26,4,Eight Thousand Nine Hundred and Nineteen,8919,131.png,Banque,Wafiyah Nashwa Wasem,1 -2463,32,41,Two Thousand Five Hundred and Fourteen,2514,160.png,Banque,Germa de Geus,1 -2464,7,39,One Thousand Six Hundred and Thirty Nine,1639,38.png,Banque,Katie Connor,1 -2465,19,23,One Thousand Six Hundred and Twelve,1612,99.png,Banque,Thรฉrรจse Fortier,1 -2466,26,10,Seven Thousand and Seventy Two,7072,134.png,Banque,Stephan Schwab,1 -2467,24,31,Three Thousand Seven Hundred and Twenty One,3721,124.png,Banque,Naomi Grant,1 -2468,23,11,Five Thousand Seven Hundred and Fifty Five,5755,115.png,Banque,Jens Egger,1 -2469,34,31,Three Thousand Three Hundred and Forty One,3341,170.png,Banque,Naomi Grant,1 -2470,24,36,Three Thousand Eight Hundred and Seventy Four,3874,121.png,Banque,Thomas Chapman,1 -2471,14,28,Two Thousand Six Hundred and Thirty Seven,2637,74.png,Banque,Chapin Auger,1 -2472,12,4,Six Thousand One Hundred and Twenty One,6121,61.png,Banque,Wafiyah Nashwa Wasem,1 -2473,10,31,Two Thousand and Sixty Four,2064,54.png,Banque,Naomi Grant,1 -2474,39,24,Two Thousand Three Hundred and Eight,2308,197.png,Banque,Clarice Blanc,1 -2475,26,39,Four Thousand Seven Hundred and Sixty Nine,4769,133.png,Banque,Katie Connor,1 -2476,11,9,Two Thousand Five Hundred and Sixty Two,2562,57.png,Banque,Maria Kalb,1 -2477,25,2,Six Thousand Eight Hundred and Fourteen,6814,128.png,Banque,Chi Hsiao,1 -2478,2,41,Seven Thousand Seven Hundred and Eight,7708,10.png,Banque,Germa de Geus,1 -2479,5,35,Four Hundred and Fifty Six,456,25.png,Banque,Elliot Humphreys,1 -2480,17,7,One Thousand Three Hundred and Two,1302,89.png,Banque,Hasna Bahiyaa Amari,1 -2481,14,33,Two Thousand Eight Hundred and Sixty Three,2863,70.png,Banque,Eleanor Freeman,1 -2482,23,39,Six Thousand One Hundred and Forty Two,6142,118.png,Banque,Katie Connor,1 -2483,20,22,Five Thousand Eight Hundred and Fifty Two,5852,100.png,Banque,Eglantine Forest,1 -2484,30,2,Nine Thousand One Hundred and Thirty One,9131,154.png,Banque,Chi Hsiao,1 -2485,43,7,Two Thousand Four Hundred and Sixty Two,2462,219.png,Banque,Hasna Bahiyaa Amari,1 -2486,10,28,Six Thousand and Seventy Eight,6078,51.png,Banque,Chapin Auger,1 -2487,33,36,One Thousand One Hundred and Nineteen,1119,166.png,Banque,Thomas Chapman,1 -2488,13,33,Seven Thousand and Forty,7040,66.png,Banque,Eleanor Freeman,1 -2489,31,20,Three Thousand One Hundred and Twenty Nine,3129,155.png,Banque,Seymour Patenaude,1 -2490,19,17,Two Thousand Seven Hundred and Thirty Five,2735,96.png,Banque,Yolette Cloutier,1 -2491,41,27,Six Thousand Nine Hundred and Thirty Four,6934,209.png,Banque,Colette Monjeau,1 -2492,10,19,Three Thousand One Hundred and Twenty,3120,50.png,Banque,Franรงoise Lapierre,1 -2493,32,11,One Thousand One Hundred and Thirty,1130,161.png,Banque,Jens Egger,1 -2494,7,30,Six Thousand Six Hundred and Ninety Two,6692,37.png,Banque,Jodie Holden,1 -2495,34,4,Seven Thousand Two Hundred and Seventy Two,7272,174.png,Banque,Wafiyah Nashwa Wasem,1 -2496,38,3,One Thousand Nine Hundred and Fourteen,1914,191.png,Banque,Jiang Li Tao,1 -2497,40,19,Eight Thousand Three Hundred and Ninety Nine,8399,203.png,Banque,Franรงoise Lapierre,1 -2498,30,26,Eight Thousand Eight Hundred and Eighty Two,8882,154.png,Banque,Sidney Lapointe,1 -2499,5,1,Nine Thousand Four Hundred and Thirty Seven,9437,26.png,Banque,Emily D. Short,1 -2500,14,28,Three Thousand Three Hundred and Eighteen,3318,72.png,Banque,Chapin Auger,1 -2501,33,28, ,21,165.png,Banque,Chapin Auger,0 -2502,23,12,Six Thousand Two Hundred and Thirty Four,9048,Nan,Banque,Marcel Achen,0 -2503,19,3,One Hundred and Ten,302,Nan,Banque,Jiang Li Tao,0 -2504,17,7,One Thousand One Hundred and Two,3660,Nan,Banque,Hasna Bahiyaa Amari,0 -2505,5,2,Four Thousand Seven Hundred and Sixty Two, ,29.png,Banque,Chi Hsiao,0 -2506,20,6, ,8732,101.png,Banque,Abdul Qais Khouri,0 -2507,7,2,Two Thousand Three Hundred and Seventy Four, ,36.png,Banque,Chi Hsiao,0 -2508,1,30,One Hundred and Six,124,Nan,Banque,Jodie Holden,0 -2509,34,2,Five Thousand Six Hundred and Sixty Two,6810,Nan,Banque,Chi Hsiao,0 -2510,41,21,Three Thousand Eight Hundred and Forty Nine,4160,Nan,Banque,David Corbeil,0 -2511,34,23,One Thousand One Hundred and Two,4403,Nan,Banque,Thรฉrรจse Fortier,0 -2512,3,2,Four Thousand One Hundred and Forty One, ,18.png,Banque,Chi Hsiao,0 -2513,16,17,One Hundred and Eighty Two,878,Nan,Banque,Yolette Cloutier,0 -2514,14,0,Seven Hundred and Eleven,2533,Nan,Banque,Ethel M. Bryson,0 -2515,22,36,Five Thousand Five Hundred and Thirteen,6532,Nan,Banque,Thomas Chapman,0 -2516,42,7,Four Hundred and Fifty Three,8401,Nan,Banque,Hasna Bahiyaa Amari,0 -2517,23,41, ,8285,117.png,Banque,Germa de Geus,0 -2518,19,37, ,9626,95.png,Banque,Eva Davies,0 -2519,12,28,Ten,1561,Nan,Banque,Chapin Auger,0 -2520,23,32,Three Thousand Seven Hundred and Sixty Eight,6242,Nan,Banque,Chelsea Watson,0 -2521,43,24,Three Thousand Five Hundred and Fifty Eight, ,219.png,Banque,Clarice Blanc,0 -2522,36,13,Three Hundred and Twenty One,1521,Nan,Banque,Petra Kovacic,0 -2523,35,43,Three Thousand Four Hundred and Thirty Eight,3570,Nan,Banque,Aruna Bekx,0 -2524,2,5, ,5787,11.png,Banque,Fawwaz Zuhayr Mustafa,0 -2525,43,0, ,7417,217.png,Banque,Ethel M. Bryson,0 -2526,16,33,Five Thousand and Forty Three, ,84.png,Banque,Eleanor Freeman,0 -2527,11,1, ,7504,56.png,Banque,Emily D. Short,0 -2528,32,39,One Thousand Four Hundred and Eight, ,163.png,Banque,Katie Connor,0 -2529,18,25,Two Hundred and Five,390,Nan,Banque,Fleurette Coudert,0 -2530,30,25, ,6641,150.png,Banque,Fleurette Coudert,0 -2531,25,43,One Thousand One Hundred and Sixty Seven, ,128.png,Banque,Aruna Bekx,0 -2532,24,13,One Thousand Nine Hundred and One, ,122.png,Banque,Petra Kovacic,0 -2533,21,0,Six Hundred and Thirty Three,9195,Nan,Banque,Ethel M. Bryson,0 -2534,7,19,Two Hundred and Eighty One,361,Nan,Banque,Franรงoise Lapierre,0 -2535,1,19,Two Thousand Seven Hundred and Seventy, ,5.png,Banque,Franรงoise Lapierre,0 -2536,40,33,Three,9902,Nan,Banque,Eleanor Freeman,0 -2537,26,8,Three Thousand Four Hundred and Thirteen,4108,Nan,Banque,Steffen Krueger,0 -2538,25,18,One Thousand Five Hundred and Sixteen,7759,Nan,Banque,Edmee Pelletier,0 -2539,42,6,Two Hundred and Twenty,1265,Nan,Banque,Abdul Qais Khouri,0 -2540,31,20, ,1642,156.png,Banque,Seymour Patenaude,0 -2541,21,2,One Thousand One Hundred and Forty Two,2312,Nan,Banque,Chi Hsiao,0 -2542,24,27,One Hundred and Seventeen,7206,Nan,Banque,Colette Monjeau,0 -2543,40,40,Two Thousand One Hundred and Twenty Nine,2361,Nan,Banque,David Howard,0 -2544,19,25,Three Hundred and Sixty Nine, ,99.png,Banque,Fleurette Coudert,0 -2545,4,39,Forty One,1071,Nan,Banque,Katie Connor,0 -2546,4,28,Eight Hundred and Forty Four, ,22.png,Banque,Chapin Auger,0 -2547,8,41,Four Thousand Four Hundred and Sixty, ,40.png,Banque,Germa de Geus,0 -2548,23,11, ,2942,115.png,Banque,Jens Egger,0 -2549,3,10,Eighty,213,Nan,Banque,Stephan Schwab,0 -2550,11,33,Five Thousand and Eighty Seven,5484,Nan,Banque,Eleanor Freeman,0 -2551,16,4, ,4323,82.png,Banque,Wafiyah Nashwa Wasem,0 -2552,14,0,Two Hundred and Seventy Two,2252,Nan,Banque,Ethel M. Bryson,0 -2553,39,25,Three Thousand Six Hundred and Seventy Seven,4160,Nan,Banque,Fleurette Coudert,0 -2554,25,15,Thirty Seven,6770,Nan,Banque,Milenko Tkalcic,0 -2555,8,3,Four Thousand Four Hundred and Fifty Four, ,44.png,Banque,Jiang Li Tao,0 -2556,3,18, ,4898,18.png,Banque,Edmee Pelletier,0 -2557,17,16,Five Thousand One Hundred and Nine,8024,Nan,Banque,Searlas Grenier,0 -2558,42,36,Six Thousand Seven Hundred and Sixteen,6792,Nan,Banque,Thomas Chapman,0 -2559,27,39,Four Thousand Five Hundred and Eighty Five,8715,Nan,Banque,Katie Connor,0 -2560,32,39,Four Thousand Six Hundred and Fifty Seven,7182,Nan,Banque,Katie Connor,0 -2561,5,7,Seven Thousand Four Hundred and Eighty Three,8298,Nan,Banque,Hasna Bahiyaa Amari,0 -2562,42,6,Two Thousand Five Hundred and Ninety Seven,5391,Nan,Banque,Abdul Qais Khouri,0 -2563,13,30,Three Hundred and Eighty Nine,1133,Nan,Banque,Jodie Holden,0 -2564,34,38, ,7947,170.png,Banque,Freddie Reid,0 -2565,23,21,Three Thousand Four Hundred and Sixty Three, ,116.png,Banque,David Corbeil,0 -2566,41,42,Twelve,103,Nan,Banque,Brady Jamin,0 -2567,7,21,Two Thousand Nine Hundred and Ninety One, ,35.png,Banque,David Corbeil,0 -2568,25,23,Six Thousand Nine Hundred and Eighty Four,9538,Nan,Banque,Thรฉrรจse Fortier,0 -2569,2,19,Four Thousand Five Hundred and Sixty Three, ,10.png,Banque,Franรงoise Lapierre,0 -2570,42,17,Three Thousand and Seventy One,4045,Nan,Banque,Yolette Cloutier,0 -2571,0,13, ,6189,1.png,Banque,Petra Kovacic,0 -2572,37,41,One Thousand Eight Hundred and Eight, ,189.png,Banque,Germa de Geus,0 -2573,20,14,Three Hundred and Eighty Five,2185,Nan,Banque,Renata Lukic,0 -2574,26,8,Eight Hundred and Eighteen,4910,Nan,Banque,Steffen Krueger,0 -2575,30,33, ,321,154.png,Banque,Eleanor Freeman,0 -2576,36,20,Ninety Seven, ,181.png,Banque,Seymour Patenaude,0 -2577,27,38,One Thousand Two Hundred and Ninety Four,5718,Nan,Banque,Freddie Reid,0 -2578,20,12,One Thousand Six Hundred and Seventy Three, ,102.png,Banque,Marcel Achen,0 -2579,0,16,Eight Thousand Three Hundred and Eighty Three,8980,Nan,Banque,Searlas Grenier,0 -2580,40,37,Three Thousand Two Hundred and Seventy Nine,7058,Nan,Banque,Eva Davies,0 -2581,17,10,Four Thousand Eight Hundred and Fifty Nine,6904,Nan,Banque,Stephan Schwab,0 -2582,27,1,Six Thousand and Sixty One,8357,Nan,Banque,Emily D. Short,0 -2583,24,42,One Thousand and Eleven, ,124.png,Banque,Brady Jamin,0 -2584,0,11,Four Thousand Two Hundred and Sixty Six,5408,Nan,Banque,Jens Egger,0 -2585,33,4,Three Hundred and Twenty Nine,1045,Nan,Banque,Wafiyah Nashwa Wasem,0 -2586,12,43,One Thousand Four Hundred and Sixty One,6885,Nan,Banque,Aruna Bekx,0 -2587,3,2,Six Thousand Two Hundred and Sixty Three,7957,Nan,Banque,Chi Hsiao,0 -2588,40,23,One Hundred and Forty Two, ,201.png,Banque,Thรฉrรจse Fortier,0 -2589,14,43, ,1994,72.png,Banque,Aruna Bekx,0 -2590,29,42,One Thousand Two Hundred and Forty Eight,8291,Nan,Banque,Brady Jamin,0 -2591,10,28,Seven Thousand Two Hundred and Thirteen,7376,Nan,Banque,Chapin Auger,0 -2592,40,21,One Thousand Four Hundred and Ninety Three,5964,Nan,Banque,David Corbeil,0 -2593,33,39,Four Thousand Nine Hundred and Thirty Five,5158,Nan,Banque,Katie Connor,0 -2594,30,36, ,6428,154.png,Banque,Thomas Chapman,0 -2595,38,4,Two Thousand Two Hundred and Sixty One,3737,Nan,Banque,Wafiyah Nashwa Wasem,0 -2596,30,43,Two Hundred and Eleven,865,Nan,Banque,Aruna Bekx,0 -2597,21,2,One Hundred and Fifty Three,558,Nan,Banque,Chi Hsiao,0 -2598,42,27,Four Thousand and Eight,4986,Nan,Banque,Colette Monjeau,0 -2599,24,33,Seven Hundred and Thirty, ,121.png,Banque,Eleanor Freeman,0 -2600,25,40, ,328,129.png,Banque,David Howard,0 -2601,23,18,One Hundred and Eighty Nine,3271,Nan,Banque,Edmee Pelletier,0 -2602,3,4,One Thousand Five Hundred and Thirty Seven, ,18.png,Banque,Wafiyah Nashwa Wasem,0 -2603,29,30,One Thousand Two Hundred and Eighty,4189,Nan,Banque,Jodie Holden,0 -2604,11,12, ,3969,59.png,Banque,Marcel Achen,0 -2605,42,17,Three Thousand Two Hundred and Ninety,4388,Nan,Banque,Yolette Cloutier,0 -2606,37,3,Three Thousand Nine Hundred and Fifty,6786,Nan,Banque,Jiang Li Tao,0 -2607,24,16,One Thousand One Hundred and Fourteen, ,122.png,Banque,Searlas Grenier,0 -2608,13,17,Five Thousand Eight Hundred and Forty One,7870,Nan,Banque,Yolette Cloutier,0 -2609,40,39,Five Thousand Two Hundred and Seventy Six, ,202.png,Banque,Katie Connor,0 -2610,33,12,Six Hundred and Eighty Two,1476,Nan,Banque,Marcel Achen,0 -2611,39,28,One Thousand Seven Hundred and Twenty One,4276,Nan,Banque,Chapin Auger,0 -2612,4,33,Five Thousand Two Hundred and Two,8801,Nan,Banque,Eleanor Freeman,0 -2613,12,12,One Thousand Nine Hundred and Eleven,9331,Nan,Banque,Marcel Achen,0 -2614,27,35,Five Thousand Six Hundred and Fifty,8817,Nan,Banque,Elliot Humphreys,0 -2615,9,6,One Thousand Two Hundred and Seventy Five, ,46.png,Banque,Abdul Qais Khouri,0 -2616,20,22,One Thousand One Hundred and Fifty Five,8231,Nan,Banque,Eglantine Forest,0 -2617,14,40,Five Hundred and Ninety Three,8859,Nan,Banque,David Howard,0 -2618,10,12,Eight Thousand Seven Hundred and Twelve,9594,Nan,Banque,Marcel Achen,0 -2619,22,40,Seventeen,503,Nan,Banque,David Howard,0 -2620,40,30,One Thousand Four Hundred and Eighty One, ,203.png,Banque,Jodie Holden,0 -2621,1,0,One Thousand Eight Hundred and Twenty Four, ,7.png,Banque,Ethel M. Bryson,0 -2622,23,16,Four Thousand Two Hundred and Twenty Five, ,118.png,Banque,Searlas Grenier,0 -2623,33,43,Five Thousand Two Hundred and Thirty,5439,Nan,Banque,Aruna Bekx,0 -2624,3,27,Three Thousand and Twelve, ,18.png,Banque,Colette Monjeau,0 -2625,28,38,Three Hundred and Ninety Nine,1058,Nan,Banque,Freddie Reid,0 -2626,16,5, ,7100,84.png,Banque,Fawwaz Zuhayr Mustafa,0 -2627,37,23,Two Hundred and Eighteen,770,Nan,Banque,Thรฉrรจse Fortier,0 -2628,14,18,Two Thousand Nine Hundred and Forty Three,2970,Nan,Banque,Edmee Pelletier,0 -2629,38,36,Four Thousand Four Hundred and Seventy One, ,194.png,Banque,Thomas Chapman,0 -2630,17,42,One Thousand Two Hundred and Eighty Eight,3677,Nan,Banque,Brady Jamin,0 -2631,18,9,Three Hundred and Ten, ,93.png,Banque,Maria Kalb,0 -2632,9,34,Two Thousand Two Hundred and One,5191,Nan,Banque,Holly Martin,0 -2633,28,15,Five Thousand Two Hundred and Sixty Two,9743,Nan,Banque,Milenko Tkalcic,0 -2634,10,34, ,5181,51.png,Banque,Holly Martin,0 -2635,35,4,Four Thousand Four Hundred and Ninety Six,5411,Nan,Banque,Wafiyah Nashwa Wasem,0 -2636,12,1,Four Thousand and Fifty Nine,7274,Nan,Banque,Emily D. Short,0 -2637,8,1,One Thousand and Eleven, ,42.png,Banque,Emily D. Short,0 -2638,8,30,Three Hundred and Seventy Three,3139,Nan,Banque,Jodie Holden,0 -2639,22,43,Two Hundred and Sixty Nine,734,Nan,Banque,Aruna Bekx,0 -2640,7,30,Two Thousand Nine Hundred and Ninety Four, ,39.png,Banque,Jodie Holden,0 -2641,25,9,Seven Hundred and Ninety Eight,2174,Nan,Banque,Maria Kalb,0 -2642,7,11, ,884,37.png,Banque,Jens Egger,0 -2643,16,32,Six Hundred and Nineteen,5349,Nan,Banque,Chelsea Watson,0 -2644,39,16, ,6222,199.png,Banque,Searlas Grenier,0 -2645,2,5,Two Thousand Five Hundred and Sixty Five, ,13.png,Banque,Fawwaz Zuhayr Mustafa,0 -2646,7,6,Forty Nine,1610,Nan,Banque,Abdul Qais Khouri,0 -2647,43,29,Thirty Eight,1175,Nan,Banque,Hayden Bruce,0 -2648,9,38,Four Thousand Three Hundred and Three,6148,Nan,Banque,Freddie Reid,0 -2649,5,6,Forty Five, ,27.png,Banque,Abdul Qais Khouri,0 -2650,11,30, ,7847,59.png,Banque,Jodie Holden,0 -2651,23,41,Six Thousand Two Hundred and Twenty One,6356,Nan,Banque,Germa de Geus,0 -2652,27,3,Six Thousand Seven Hundred and Twenty Five,8352,Nan,Banque,Jiang Li Tao,0 -2653,35,9,Three Thousand Nine Hundred and Forty Nine, ,179.png,Banque,Maria Kalb,0 -2654,40,14,One Hundred and Seven,8741,Nan,Banque,Renata Lukic,0 -2655,43,39,Nine Hundred and Sixty Nine, ,216.png,Banque,Katie Connor,0 -2656,40,35,Five Thousand Four Hundred and Ninety Eight,6979,Nan,Banque,Elliot Humphreys,0 -2657,1,31, ,659,6.png,Banque,Naomi Grant,0 -2658,10,17, ,9499,53.png,Banque,Yolette Cloutier,0 -2659,36,38,One Thousand Four Hundred and Thirty Four,9236,Nan,Banque,Freddie Reid,0 -2660,2,27,One Thousand Six Hundred and Thirty,4707,Nan,Banque,Colette Monjeau,0 -2661,7,31,Four Thousand and Thirteen,5405,Nan,Banque,Naomi Grant,0 -2662,33,22,Two Hundred and Eighty Two,1125,Nan,Banque,Eglantine Forest,0 -2663,8,29, ,8708,42.png,Banque,Hayden Bruce,0 -2664,10,12,Five Thousand Seven Hundred and Seventy Eight,6343,Nan,Banque,Marcel Achen,0 -2665,19,8, ,5486,97.png,Banque,Steffen Krueger,0 -2666,21,20, ,35,106.png,Banque,Seymour Patenaude,0 -2667,13,17,Four Thousand One Hundred and Thirty Nine,5146,Nan,Banque,Yolette Cloutier,0 -2668,34,2, ,4896,173.png,Banque,Chi Hsiao,0 -2669,27,16, ,2207,136.png,Banque,Searlas Grenier,0 -2670,29,19,Three Hundred and Ninety Five,3631,Nan,Banque,Franรงoise Lapierre,0 -2671,21,32, ,2788,105.png,Banque,Chelsea Watson,0 -2672,41,15,Seven Thousand Eight Hundred and Sixty Seven, ,209.png,Banque,Milenko Tkalcic,0 -2673,40,18,One Thousand Eight Hundred and Forty One, ,201.png,Banque,Edmee Pelletier,0 -2674,36,35, ,857,182.png,Banque,Elliot Humphreys,0 -2675,10,30,One Thousand One Hundred and Eighty Five,1278,Nan,Banque,Jodie Holden,0 -2676,2,14,Three Thousand Nine Hundred and Eighty Seven,5025,Nan,Banque,Renata Lukic,0 -2677,3,0,Thirty Four,598,Nan,Banque,Ethel M. Bryson,0 -2678,1,27, ,5845,5.png,Banque,Colette Monjeau,0 -2679,9,40, ,4449,48.png,Banque,David Howard,0 -2680,3,2,Four Thousand Three Hundred and Fifty Eight,9310,Nan,Banque,Chi Hsiao,0 -2681,17,28,Two Hundred and Thirty Five, ,88.png,Banque,Chapin Auger,0 -2682,30,17, ,1619,151.png,Banque,Yolette Cloutier,0 -2683,14,13,Six Hundred and Seventy Four, ,72.png,Banque,Petra Kovacic,0 -2684,1,29,Two Hundred and Forty,4459,Nan,Banque,Hayden Bruce,0 -2685,4,5, ,6276,23.png,Banque,Fawwaz Zuhayr Mustafa,0 -2686,20,0,Two Thousand Three Hundred,5221,Nan,Banque,Ethel M. Bryson,0 -2687,26,1,One Thousand One Hundred and Thirty Five, ,131.png,Banque,Emily D. Short,0 -2688,3,8,One Thousand Six Hundred and Fifty One, ,18.png,Banque,Steffen Krueger,0 -2689,16,26, ,7746,83.png,Banque,Sidney Lapointe,0 -2690,17,24, ,8865,88.png,Banque,Clarice Blanc,0 -2691,30,35,One Thousand Six Hundred and Twenty Seven, ,150.png,Banque,Elliot Humphreys,0 -2692,25,18,One Thousand Three Hundred and Fifty Four,7283,Nan,Banque,Edmee Pelletier,0 -2693,1,5, ,4277,9.png,Banque,Fawwaz Zuhayr Mustafa,0 -2694,40,3, ,2789,204.png,Banque,Jiang Li Tao,0 -2695,32,37, ,8906,161.png,Banque,Eva Davies,0 -2696,5,13,One Thousand Nine Hundred and Thirty,8282,Nan,Banque,Petra Kovacic,0 -2697,23,23,Four Thousand Nine Hundred and Fifty Three,9039,Nan,Banque,Thรฉrรจse Fortier,0 -2698,29,37, ,5760,148.png,Banque,Eva Davies,0 -2699,30,17, ,5123,153.png,Banque,Yolette Cloutier,0 -2700,9,17,Three Thousand Five Hundred and Sixty Six,9842,Nan,Banque,Yolette Cloutier,0 -2701,0,4,Five Thousand Eigt Hundred and Fifty,5850,4.png,Banque,Wafiyah Nashwa Wasem,1 -2702,39,7,Five Thousand For Hundred and Foty Two,5442,197.png,Banque,Hasna Bahiyaa Amari,1 -2703,32,41,Eigt Thousand Five Hundred and Foty Six,8546,163.png,Banque,Germa de Geus,1 -2704,43,25,Five Thousand and Eihty Seven,5087,215.png,Banque,Fleurette Coudert,1 -2705,37,26,Two Thousand Six Hundred and Seenty On,2671,185.png,Banque,Sidney Lapointe,1 -2706,29,0,Two Thousand For Hundred and Fifty Thre,2453,146.png,Banque,Ethel M. Bryson,1 -2707,18,3,For Thousand Nine Hundred and Ninety Nine,4999,93.png,Banque,Jiang Li Tao,1 -2708,22,38,Seven Thousand and Twenty,7020,110.png,Banque,Freddie Reid,1 -2709,16,39,Two Hundred and Foty For,244,84.png,Banque,Katie Connor,1 -2710,28,7,Two Thousand Six Hundred and Nine,2609,141.png,Banque,Hasna Bahiyaa Amari,1 -2711,35,23,Two Thousand Seven Hundred and Nine,2709,179.png,Banque,Thรฉrรจse Fortier,1 -2712,17,28,For Thousand and Sixt Seven,4067,85.png,Banque,Chapin Auger,1 -2713,34,6,Five Thousand Five Hundred and Twenty On,5521,171.png,Banque,Abdul Qais Khouri,1 -2714,15,38,Nine Thousand Two Hundred and Seenty Seven,9277,76.png,Banque,Freddie Reid,1 -2715,5,33,Nine Thousand Two Hundred and Fifty Nine,9259,26.png,Banque,Eleanor Freeman,1 -2716,41,37,Seven Thousand Eigt Hundred and Thirty Thre,7833,209.png,Banque,Eva Davies,1 -2717,13,39,Two Thousand Thre Hundred and Thirty Thre,2333,68.png,Banque,Katie Connor,1 -2718,12,23,Seven Thousand Eigt Hundred and Foty On,7841,63.png,Banque,Thรฉrรจse Fortier,1 -2719,14,33,For Thousand Thre Hundred and Nine,4309,74.png,Banque,Eleanor Freeman,1 -2720,12,21,Thre Thousand Two Hundred and Fifty Thre,3253,63.png,Banque,David Corbeil,1 -2721,22,19,On Thousand Six Hundred and Thirty Two,1632,113.png,Banque,Franรงoise Lapierre,1 -2722,39,27,On Thousand Eigt Hundred and Fiteen,1815,199.png,Banque,Colette Monjeau,1 -2723,40,16,Eigt Thousand Eigt Hundred and Thirteen,8813,204.png,Banque,Searlas Grenier,1 -2724,34,27,Six Hundred and Fifty Seven,657,171.png,Banque,Colette Monjeau,1 -2725,21,11,Eigt Thousand Two Hundred and Twenty On,8221,106.png,Banque,Jens Egger,1 -2726,10,14,Two Thousand Eigt Hundred and Ninety Seven,2897,52.png,Banque,Renata Lukic,1 -2727,14,0,On Thousand Six Hundred and Twlve,1612,73.png,Banque,Ethel M. Bryson,1 -2728,20,7,Six Thousand Six Hundred and Foty,6640,102.png,Banque,Hasna Bahiyaa Amari,1 -2729,13,7,On Thousand Eigt Hundred and Thirty Six,1836,69.png,Banque,Hasna Bahiyaa Amari,1 -2730,29,17,For Thousand Seven Hundred and Ninety Eigt,4798,145.png,Banque,Yolette Cloutier,1 -2731,36,39,Five Thousand and Eleven,5011,181.png,Banque,Katie Connor,1 -2732,25,20,Two Thousand and Seenty On,2071,129.png,Banque,Seymour Patenaude,1 -2733,16,2,Two Thousand Thre Hundred and Ninety For,2394,82.png,Banque,Chi Hsiao,1 -2734,32,5,For Thousand Eigt Hundred and Thirteen,4813,164.png,Banque,Fawwaz Zuhayr Mustafa,1 -2735,19,21,For Thousand Nine Hundred and Eihteen,4918,99.png,Banque,David Corbeil,1 -2736,26,3,Eigt Hundred and Foty Seven,847,131.png,Banque,Jiang Li Tao,1 -2737,7,33,Five Thousand Two Hundred and Seenty Six,5276,38.png,Banque,Eleanor Freeman,1 -2738,1,11,Five Thousand On Hundred and Fifty Seven,5157,8.png,Banque,Jens Egger,1 -2739,4,28,Seven Thousand Nine Hundred and Twenty Seven,7927,22.png,Banque,Chapin Auger,1 -2740,26,2,Two Thousand Nine Hundred and Foty Seven,2947,130.png,Banque,Chi Hsiao,1 -2741,33,37,Nine Thousand Two Hundred and Fifty Five,9255,169.png,Banque,Eva Davies,1 -2742,14,6,Eigt Thousand and Thirty Seven,8037,70.png,Banque,Abdul Qais Khouri,1 -2743,5,32,Two Hundred and Fifty Eigt,258,29.png,Banque,Chelsea Watson,1 -2744,34,34,Thre Thousand Six Hundred and Foty For,3644,174.png,Banque,Holly Martin,1 -2745,36,17,Seven Thousand Thre Hundred and Thirty On,7331,181.png,Banque,Yolette Cloutier,1 -2746,43,7,Eigt Thousand Eigt Hundred and Fifty Seven,8857,216.png,Banque,Hasna Bahiyaa Amari,1 -2747,4,6,Two Thousand On Hundred and Foty Eigt,2148,23.png,Banque,Abdul Qais Khouri,1 -2748,36,7,Nine Hundred and Eleven,911,180.png,Banque,Hasna Bahiyaa Amari,1 -2749,14,38,Six Thousand Eigt Hundred and Eihty For,6884,74.png,Banque,Freddie Reid,1 -2750,8,26,On Thousand Seven Hundred and Ninety Two,1792,44.png,Banque,Sidney Lapointe,1 -2751,35,3,On Thousand For Hundred and Eihty Two,1482,179.png,Banque,Jiang Li Tao,1 -2752,20,33,Thre Thousand Seven Hundred and Fifty Five,3755,101.png,Banque,Eleanor Freeman,1 -2753,35,36,Seven Thousand Two Hundred and Foty Six,7246,179.png,Banque,Thomas Chapman,1 -2754,9,40,Thre Thousand Six Hundred and Eihty Seven,3687,45.png,Banque,David Howard,1 -2755,18,24,Six Thousand Eigt Hundred and Ten,6810,93.png,Banque,Clarice Blanc,1 -2756,16,15,Nine Thousand and Seenty Thre,9073,83.png,Banque,Milenko Tkalcic,1 -2757,34,30,Five Thousand On Hundred,5100,173.png,Banque,Jodie Holden,1 -2758,12,1,Five Thousand On Hundred and Fifty Nine,5159,60.png,Banque,Emily D. Short,1 -2759,12,2,For Thousand Two Hundred and On,4201,63.png,Banque,Chi Hsiao,1 -2760,6,23,Thre Thousand Thre Hundred and Sixt Thre,3363,31.png,Banque,Thรฉrรจse Fortier,1 -2761,20,32,On Hundred and Ninety Five,195,101.png,Banque,Chelsea Watson,1 -2762,23,43,On Thousand and Seenty Nine,1079,115.png,Banque,Aruna Bekx,1 -2763,12,9,Seven Thousand Two Hundred and Thirteen,7213,62.png,Banque,Maria Kalb,1 -2764,4,42,Six Thousand For Hundred and Thirty,6430,22.png,Banque,Brady Jamin,1 -2765,5,1,Five Thousand For Hundred and Eihty Five,5485,26.png,Banque,Emily D. Short,1 -2766,3,5,Nine Hundred and Foty Six,946,15.png,Banque,Fawwaz Zuhayr Mustafa,1 -2767,16,32,Thre Thousand On Hundred and Sixt Seven,3167,83.png,Banque,Chelsea Watson,1 -2768,7,26,Thre Thousand Five Hundred and Ninety Nine,3599,37.png,Banque,Sidney Lapointe,1 -2769,21,32,Five Thousand Eigt Hundred and Foty Six,5846,109.png,Banque,Chelsea Watson,1 -2770,9,14,Nine Thousand Six Hundred and Thirty Five,9635,45.png,Banque,Renata Lukic,1 -2771,14,9,Thre Hundred and Seenty Seven,377,70.png,Banque,Maria Kalb,1 -2772,27,11,Eigt Thousand Eigt Hundred and Sixt Eigt,8868,137.png,Banque,Jens Egger,1 -2773,20,20,On Thousand On Hundred,1100,101.png,Banque,Seymour Patenaude,1 -2774,20,30,On Thousand Two Hundred and Thirty Six,1236,101.png,Banque,Jodie Holden,1 -2775,0,20,Seven Thousand Nine Hundred and Thirty Seven,7937,0.png,Banque,Seymour Patenaude,1 -2776,31,41,Thre Thousand Two Hundred and Twenty,3220,159.png,Banque,Germa de Geus,1 -2777,29,38,Two Thousand Seven Hundred and Eihty Six,2786,148.png,Banque,Freddie Reid,1 -2778,38,25,For Thousand Six Hundred and Seenty,4670,192.png,Banque,Fleurette Coudert,1 -2779,29,32,Eigt Thousand Five Hundred and Seenty Two,8572,145.png,Banque,Chelsea Watson,1 -2780,7,26,Two Thousand On Hundred and Seenty Five,2175,36.png,Banque,Sidney Lapointe,1 -2781,9,28,Five Thousand Seven Hundred and Twenty Two,5722,45.png,Banque,Chapin Auger,1 -2782,9,6,Five Hundred and Ninety Nine,599,49.png,Banque,Abdul Qais Khouri,1 -2783,14,30,On Thousand Eigt Hundred and Seventeen,1817,73.png,Banque,Jodie Holden,1 -2784,32,34,Five Thousand For Hundred and Fifty,5450,163.png,Banque,Holly Martin,1 -2785,22,11,Five Thousand Thre Hundred and Thirty Nine,5339,110.png,Banque,Jens Egger,1 -2786,10,26,Thre Thousand Nine Hundred and Ninety Eigt,3998,51.png,Banque,Sidney Lapointe,1 -2787,32,37,On Thousand Six Hundred and Foty Two,1642,163.png,Banque,Eva Davies,1 -2788,43,22,For Thousand Eigt Hundred and Fifty Nine,4859,216.png,Banque,Eglantine Forest,1 -2789,29,26,Two Thousand Eigt Hundred and Ninety Eigt,2898,147.png,Banque,Sidney Lapointe,1 -2790,13,42,On Thousand Seven Hundred and Fifty Five,1755,68.png,Banque,Brady Jamin,1 -2791,17,22,Two Thousand Six Hundred and Foty Six,2646,88.png,Banque,Eglantine Forest,1 -2792,18,5,Five Thousand On Hundred and Sixt Eigt,5168,93.png,Banque,Fawwaz Zuhayr Mustafa,1 -2793,3,39,Two Thousand Six Hundred and Foty Thre,2643,16.png,Banque,Katie Connor,1 -2794,27,24,Nine Thousand Five Hundred and Seenty On,9571,138.png,Banque,Clarice Blanc,1 -2795,4,42,For Thousand Five Hundred and Thirty For,4534,22.png,Banque,Brady Jamin,1 -2796,4,14,Eigt Thousand Eigt Hundred and Ninety Six,8896,23.png,Banque,Renata Lukic,1 -2797,18,28,Two Thousand Eigt Hundred and Sixt Seven,2867,94.png,Banque,Chapin Auger,1 -2798,26,25,Two Hundred and Foty,240,132.png,Banque,Fleurette Coudert,1 -2799,22,2,Seven Thousand For Hundred and Thirty Six,7436,112.png,Banque,Chi Hsiao,1 -2800,36,35,Seven Hundred and Eihty For,784,180.png,Banque,Elliot Humphreys,1 -2801,31,2,Nine Thousand For Hundred and Foty On,9441,156.png,Banque,Chi Hsiao,1 -2802,22,32,For Thousand On Hundred and Seenty On,4171,113.png,Banque,Chelsea Watson,1 -2803,0,39,Two Thousand Thre Hundred and Thirty Two,2332,3.png,Banque,Katie Connor,1 -2804,11,37,On Thousand Seven Hundred and Seenty Two,1772,58.png,Banque,Eva Davies,1 -2805,18,24,On Thousand Eigt Hundred and On,1801,90.png,Banque,Clarice Blanc,1 -2806,21,33,Seven Thousand Thre Hundred and Eihty Eigt,7388,108.png,Banque,Eleanor Freeman,1 -2807,4,1,Nine Thousand and Thirty,9030,20.png,Banque,Emily D. Short,1 -2808,12,22,Five Thousand Nine Hundred and Ninety Five,5995,62.png,Banque,Eglantine Forest,1 -2809,14,19,On Thousand Six Hundred and Fifty,1650,71.png,Banque,Franรงoise Lapierre,1 -2810,25,0,Five Thousand Six Hundred and Seenty Six,5676,125.png,Banque,Ethel M. Bryson,1 -2811,24,33,Seven Thousand Seven Hundred and Seenty Six,7776,124.png,Banque,Eleanor Freeman,1 -2812,8,36,Five Thousand Thre Hundred and Fiteen,5315,44.png,Banque,Thomas Chapman,1 -2813,15,10,Nine Thousand Two Hundred and Eihteen,9218,75.png,Banque,Stephan Schwab,1 -2814,19,42,Nine Thousand Two Hundred and Seventeen,9217,97.png,Banque,Brady Jamin,1 -2815,39,16,Eigt Thousand Seven Hundred and Thirty Five,8735,196.png,Banque,Searlas Grenier,1 -2816,29,20,Nine Thousand Seven Hundred and Eihty Seven,9787,145.png,Banque,Seymour Patenaude,1 -2817,33,12,Two Thousand and Fifty Eigt,2058,168.png,Banque,Marcel Achen,1 -2818,14,3,Seven Thousand and Seenty Eigt,7078,72.png,Banque,Jiang Li Tao,1 -2819,37,7,On Thousand Nine Hundred and Seenty Two,1972,186.png,Banque,Hasna Bahiyaa Amari,1 -2820,6,1,Two Thousand Six Hundred and Ninety,2690,30.png,Banque,Emily D. Short,1 -2821,20,41,On Thousand Nine Hundred and Sixt Nine,1969,103.png,Banque,Germa de Geus,1 -2822,31,4,Two Thousand Two Hundred and Nine,2209,157.png,Banque,Wafiyah Nashwa Wasem,1 -2823,18,4,Thre Thousand On Hundred and Seenty Thre,3173,93.png,Banque,Wafiyah Nashwa Wasem,1 -2824,10,3,Seven Thousand Two Hundred and Ninety On,7291,54.png,Banque,Jiang Li Tao,1 -2825,2,23,Two Thousand Five Hundred and Fifty For,2554,12.png,Banque,Thรฉrรจse Fortier,1 -2826,8,6,Fiteen,15,42.png,Banque,Abdul Qais Khouri,1 -2827,20,36,Eigt Hundred and Seenty Nine,879,104.png,Banque,Thomas Chapman,1 -2828,10,8,Thre Thousand Eigt Hundred and Thirty Nine,3839,53.png,Banque,Steffen Krueger,1 -2829,18,4,Thre Thousand Thre Hundred and Thirty Thre,3333,92.png,Banque,Wafiyah Nashwa Wasem,1 -2830,0,9,Two Thousand Thre Hundred and Twenty Six,2326,1.png,Banque,Maria Kalb,1 -2831,4,36,Eigt Thousand Six Hundred and Sixt Nine,8669,23.png,Banque,Thomas Chapman,1 -2832,12,26,Nine Thousand Two Hundred and Seenty Two,9272,60.png,Banque,Sidney Lapointe,1 -2833,8,43,Two Thousand and Thirty Seven,2037,40.png,Banque,Aruna Bekx,1 -2834,26,8,Five Thousand and Thirty For,5034,134.png,Banque,Steffen Krueger,1 -2835,24,15,Nine Thousand For Hundred and Twenty Two,9422,120.png,Banque,Milenko Tkalcic,1 -2836,14,34,Thre Thousand Five Hundred and Twenty Six,3526,71.png,Banque,Holly Martin,1 -2837,36,19,Eigt Thousand On Hundred and Foty,8140,183.png,Banque,Franรงoise Lapierre,1 -2838,1,17,Thre Thousand Thre Hundred and Sxten,3316,9.png,Banque,Yolette Cloutier,1 -2839,27,5,Seven Thousand Two Hundred and Sxten,7216,138.png,Banque,Fawwaz Zuhayr Mustafa,1 -2840,21,6,Thre Thousand Two Hundred and Eleven,3211,106.png,Banque,Abdul Qais Khouri,1 -2841,43,1,Six Thousand Eigt Hundred and Seenty On,6871,216.png,Banque,Emily D. Short,1 -2842,20,25,Two Thousand Thre Hundred and Fifty Nine,2359,104.png,Banque,Fleurette Coudert,1 -2843,9,8,Five Thousand Seven Hundred and Eihteen,5718,49.png,Banque,Steffen Krueger,1 -2844,43,6,For Thousand For Hundred and Sixt Nine,4469,219.png,Banque,Abdul Qais Khouri,1 -2845,39,33,Two Thousand On Hundred and Two,2102,197.png,Banque,Eleanor Freeman,1 -2846,37,14,For Thousand Five Hundred and Foty Nine,4549,185.png,Banque,Renata Lukic,1 -2847,11,15,For Thousand Two Hundred and For,4204,59.png,Banque,Milenko Tkalcic,1 -2848,35,18,Thre Thousand Two Hundred and Foty Six,3246,177.png,Banque,Edmee Pelletier,1 -2849,35,24,Five Thousand Six Hundred and Fifty Two,5652,176.png,Banque,Clarice Blanc,1 -2850,29,43,Seven Thousand and Twenty Six,7026,145.png,Banque,Aruna Bekx,1 -2851,8,38,Nine Thousand Five Hundred and Seven,9507,40.png,Banque,Freddie Reid,1 -2852,7,24,For Thousand On Hundred and Seventeen,4117,39.png,Banque,Clarice Blanc,1 -2853,23,26,Eigt Thousand On Hundred and Ninety Nine,8199,115.png,Banque,Sidney Lapointe,1 -2854,3,11,Two Thousand Eigt Hundred and Seventeen,2817,18.png,Banque,Jens Egger,1 -2855,18,16,For Thousand Six Hundred and Eihty Nine,4689,92.png,Banque,Searlas Grenier,1 -2856,29,16,Five Thousand Thre Hundred and Six,5306,145.png,Banque,Searlas Grenier,1 -2857,28,2,Nine Thousand Six Hundred and Twenty Seven,9627,144.png,Banque,Chi Hsiao,1 -2858,29,8,On Thousand Seven Hundred and Seenty Seven,1777,145.png,Banque,Steffen Krueger,1 -2859,4,22,Nine Thousand Seven Hundred and Fifty Eigt,9758,21.png,Banque,Eglantine Forest,1 -2860,20,41,Nine Thousand For Hundred and Sixt Two,9462,104.png,Banque,Germa de Geus,1 -2861,31,14,Eigt Thousand Eigt Hundred and Fifty Nine,8859,156.png,Banque,Renata Lukic,1 -2862,30,6,On Thousand Nine Hundred and Eihty,1980,151.png,Banque,Abdul Qais Khouri,1 -2863,28,4,Eigt Thousand On Hundred and Twenty Two,8122,140.png,Banque,Wafiyah Nashwa Wasem,1 -2864,28,31,On Thousand For Hundred and Foty,1440,142.png,Banque,Naomi Grant,1 -2865,42,15,Five Thousand Five Hundred and Thirty,5530,211.png,Banque,Milenko Tkalcic,1 -2866,12,10,On Thousand On Hundred and Fifty For,1154,62.png,Banque,Stephan Schwab,1 -2867,17,34,For Thousand Six Hundred and Twenty Five,4625,85.png,Banque,Holly Martin,1 -2868,24,41,Eigt Thousand Thre Hundred and Foty Two,8342,123.png,Banque,Germa de Geus,1 -2869,39,32,Two Thousand On Hundred and Sixt On,2161,195.png,Banque,Chelsea Watson,1 -2870,16,35,Two Thousand Thre Hundred and Eihty Six,2386,80.png,Banque,Elliot Humphreys,1 -2871,20,23,Six Thousand and Ninety Nine,6099,103.png,Banque,Thรฉrรจse Fortier,1 -2872,33,32,On Thousand On Hundred and Eihty,1180,167.png,Banque,Chelsea Watson,1 -2873,37,27,On Thousand and Seenty Six,1076,186.png,Banque,Colette Monjeau,1 -2874,34,19,Two Thousand Five Hundred and Fifty On,2551,173.png,Banque,Franรงoise Lapierre,1 -2875,34,40,Nine Thousand Thre Hundred and Nineten,9319,172.png,Banque,David Howard,1 -2876,30,18,Nine Thousand Thre Hundred and Eleven,9311,150.png,Banque,Edmee Pelletier,1 -2877,34,25,Five Thousand Two Hundred and Twenty Eigt,5228,171.png,Banque,Fleurette Coudert,1 -2878,0,26,Eigt Hundred and Twenty Eigt,828,2.png,Banque,Sidney Lapointe,1 -2879,10,16,Eigt Hundred and Seenty On,871,51.png,Banque,Searlas Grenier,1 -2880,17,38,Thre Thousand Eigt Hundred and Thirty For,3834,88.png,Banque,Freddie Reid,1 -2881,22,28,Eigt Hundred and Thirty For,834,113.png,Banque,Chapin Auger,1 -2882,5,9,Seven Thousand Thre Hundred and Foty Seven,7347,29.png,Banque,Maria Kalb,1 -2883,4,7,On Thousand Eigt Hundred and Twenty Nine,1829,24.png,Banque,Hasna Bahiyaa Amari,1 -2884,12,34,Five Thousand For Hundred and Fifty Five,5455,64.png,Banque,Holly Martin,1 -2885,17,33,Two Thousand Thre Hundred and Eigt,2308,85.png,Banque,Eleanor Freeman,1 -2886,2,33,Seven Thousand Seven Hundred and Seenty For,7774,13.png,Banque,Eleanor Freeman,1 -2887,5,27,Two Thousand Two Hundred and Ninety Five,2295,27.png,Banque,Colette Monjeau,1 -2888,29,1,For Thousand Eigt Hundred and Sxten,4816,147.png,Banque,Emily D. Short,1 -2889,19,28,Thre Thousand Thre Hundred and Ninety Thre,3393,96.png,Banque,Chapin Auger,1 -2890,21,33,Eigt Hundred and Twenty For,824,108.png,Banque,Eleanor Freeman,1 -2891,32,15,Thre Thousand Six Hundred and Fifty Nine,3659,161.png,Banque,Milenko Tkalcic,1 -2892,5,43,Nine Thousand Seven Hundred and Eihty,9780,25.png,Banque,Aruna Bekx,1 -2893,12,20,Eigt Thousand Six Hundred and Forteen,8614,64.png,Banque,Seymour Patenaude,1 -2894,37,40,Thre Thousand Eigt Hundred and Thirty For,3834,185.png,Banque,David Howard,1 -2895,11,30,Six Thousand Eigt Hundred and Fifty For,6854,59.png,Banque,Jodie Holden,1 -2896,3,34,On Thousand Nine Hundred and Foty Seven,1947,15.png,Banque,Holly Martin,1 -2897,41,34,Nine Thousand Six Hundred and Thirty Seven,9637,205.png,Banque,Holly Martin,1 -2898,1,10,Two Thousand Five Hundred and Foty Two,2542,9.png,Banque,Stephan Schwab,1 -2899,9,34,Eigt Thousand and Fifty On,8051,47.png,Banque,Holly Martin,1 -2900,2,12,Nine Thousand Six Hundred and Foty Six,9646,13.png,Banque,Marcel Achen,1 -2901,14,33,Five Thousand Six Hundred and Fifty For,5654,72.png,Banque,Eleanor Freeman,1 -2902,7,33,Eigt Thousand Five Hundred and Foty Seven,8547,35.png,Banque,Eleanor Freeman,1 -2903,0,17,Thre Thousand Five Hundred and Fifty Nine,3559,4.png,Banque,Yolette Cloutier,1 -2904,11,9,Six Thousand Nine Hundred and Sixt Eigt,6968,59.png,Banque,Maria Kalb,1 -2905,11,7,For Hundred and Seenty Seven,477,58.png,Banque,Hasna Bahiyaa Amari,1 -2906,41,25,Two Thousand Nine Hundred and Sixt For,2964,209.png,Banque,Fleurette Coudert,1 -2907,26,7,Six Thousand Seven Hundred and Ninety Two,6792,130.png,Banque,Hasna Bahiyaa Amari,1 -2908,26,40,Thre Thousand Nine Hundred and Sixt Two,3962,131.png,Banque,David Howard,1 -2909,38,21,On Thousand Two Hundred and Ninety Two,1292,191.png,Banque,David Corbeil,1 -2910,41,2,For Thousand Thre Hundred and Eihty,4380,209.png,Banque,Chi Hsiao,1 -2911,42,13,Six Thousand and Thirty Six,6036,212.png,Banque,Petra Kovacic,1 -2912,19,8,Eigt Thousand Seven Hundred and Foty Two,8742,99.png,Banque,Steffen Krueger,1 -2913,25,36,On Thousand and Two,1002,127.png,Banque,Thomas Chapman,1 -2914,5,19,Seven Thousand Nine Hundred and Foty Five,7945,26.png,Banque,Franรงoise Lapierre,1 -2915,28,13,Six Thousand Five Hundred and Thirty Thre,6533,140.png,Banque,Petra Kovacic,1 -2916,24,14,Two Thousand and Seenty Nine,2079,124.png,Banque,Renata Lukic,1 -2917,9,17,For Thousand For Hundred and Five,4405,49.png,Banque,Yolette Cloutier,1 -2918,36,43,Two Thousand Nine Hundred and Fifty On,2951,182.png,Banque,Aruna Bekx,1 -2919,35,35,Two Thousand Thre Hundred and Thirty Five,2335,176.png,Banque,Elliot Humphreys,1 -2920,12,8,Five Thousand Thre Hundred and Fifty Two,5352,62.png,Banque,Steffen Krueger,1 -2921,33,25,Two Thousand For Hundred and Seenty On,2471,168.png,Banque,Fleurette Coudert,1 -2922,22,27,Two Thousand Five Hundred and Twenty Six,2526,111.png,Banque,Colette Monjeau,1 -2923,32,6,Nine Thousand Eigt Hundred and Six,9806,162.png,Banque,Abdul Qais Khouri,1 -2924,20,33,Eigt Thousand Thre Hundred and Fifty Nine,8359,103.png,Banque,Eleanor Freeman,1 -2925,27,6,Five Thousand For Hundred and Eihty Six,5486,136.png,Banque,Abdul Qais Khouri,1 -2926,0,26,Five Thousand and Foty Eigt,5048,0.png,Banque,Sidney Lapointe,1 -2927,3,9,Nine Thousand Eigt Hundred and Fifty,9850,16.png,Banque,Maria Kalb,1 -2928,18,9,Five Hundred and Seenty Thre,573,94.png,Banque,Maria Kalb,1 -2929,29,0,For Thousand and Twlve,4012,145.png,Banque,Ethel M. Bryson,1 -2930,37,29,Thre Thousand Six Hundred and Seenty Six,3676,186.png,Banque,Hayden Bruce,1 -2931,3,34,On Thousand Thre Hundred and Seenty For,1374,19.png,Banque,Holly Martin,1 -2932,35,27,Eigt Thousand Nine Hundred and Seenty Seven,8977,179.png,Banque,Colette Monjeau,1 -2933,22,10,Nine Thousand Nine Hundred and Sxten,9916,110.png,Banque,Stephan Schwab,1 -2934,38,1,Nine Thousand Seven Hundred and Sixt For,9764,194.png,Banque,Emily D. Short,1 -2935,34,6,Six Thousand Nine Hundred and Eihty Five,6985,174.png,Banque,Abdul Qais Khouri,1 -2936,20,23,Six Thousand Seven Hundred and Fifty Nine,6759,104.png,Banque,Thรฉrรจse Fortier,1 -2937,15,3,Five Thousand Two Hundred and Thirty Thre,5233,79.png,Banque,Jiang Li Tao,1 -2938,9,7,Two Thousand Five Hundred and Foty Nine,2549,45.png,Banque,Hasna Bahiyaa Amari,1 -2939,24,6,Five Thousand Eigt Hundred and Eihty Two,5882,123.png,Banque,Abdul Qais Khouri,1 -2940,7,19,For Thousand and Foty On,4041,35.png,Banque,Franรงoise Lapierre,1 -2941,32,5,Five Thousand Seven Hundred and Twenty,5720,164.png,Banque,Fawwaz Zuhayr Mustafa,1 -2942,9,23,Nine Thousand Six Hundred and Fifty Eigt,9658,48.png,Banque,Thรฉrรจse Fortier,1 -2943,13,14,Five Thousand Eigt Hundred and Eihteen,5818,68.png,Banque,Renata Lukic,1 -2944,7,43,Five Thousand Eigt Hundred and Sixt Nine,5869,37.png,Banque,Aruna Bekx,1 -2945,39,17,Thre Thousand Two Hundred and Fiteen,3215,196.png,Banque,Yolette Cloutier,1 -2946,42,7,Five Thousand Five Hundred and Twenty Five,5525,211.png,Banque,Hasna Bahiyaa Amari,1 -2947,22,2,Six Hundred and Fifty Thre,653,114.png,Banque,Chi Hsiao,1 -2948,28,24,Six Thousand Five Hundred and Sixt On,6561,140.png,Banque,Clarice Blanc,1 -2949,34,11,Two Thousand Thre Hundred and Thirty Thre,2333,174.png,Banque,Jens Egger,1 -2950,39,10,Six Thousand and Fifty Eigt,6058,196.png,Banque,Stephan Schwab,1 -2951,7,5,Two Thousand Two Hundred and Fifty For,2254,37.png,Banque,Fawwaz Zuhayr Mustafa,1 -2952,33,11,Two Thousand Seven Hundred and Eigt,2708,165.png,Banque,Jens Egger,1 -2953,41,37,On Thousand Six Hundred and Thirty Thre,1633,205.png,Banque,Eva Davies,1 -2954,35,1,Thre Hundred and Fifty Six,356,179.png,Banque,Emily D. Short,1 -2955,37,41,On Thousand Five Hundred and Seenty Two,1572,189.png,Banque,Germa de Geus,1 -2956,18,5,Six Thousand Seven Hundred and Twenty On,6721,92.png,Banque,Fawwaz Zuhayr Mustafa,1 -2957,32,29,Six Thousand Eigt Hundred and Sixt Thre,6863,160.png,Banque,Hayden Bruce,1 -2958,29,17,Thre Thousand Two Hundred and Thirty,3230,147.png,Banque,Yolette Cloutier,1 -2959,18,7,Seven Thousand Eigt Hundred and Ninety,7890,91.png,Banque,Hasna Bahiyaa Amari,1 -2960,1,15,Two Thousand Thre Hundred and Seenty For,2374,6.png,Banque,Milenko Tkalcic,1 -2961,15,9,Thre Thousand Thre Hundred and Ninety Nine,3399,76.png,Banque,Maria Kalb,1 -2962,42,14,Nine Thousand For Hundred and Sixt Six,9466,213.png,Banque,Renata Lukic,1 -2963,24,34,Two Thousand and Ninety Nine,2099,122.png,Banque,Holly Martin,1 -2964,9,39,Nine Thousand Six Hundred and Ninety Nine,9699,46.png,Banque,Katie Connor,1 -2965,35,19,Eigt Thousand Two Hundred and Fifty,8250,175.png,Banque,Franรงoise Lapierre,1 -2966,42,25,Two Thousand Thre Hundred and Sixt Eigt,2368,212.png,Banque,Fleurette Coudert,1 -2967,31,3,Seven Thousand Six Hundred and Eihty Seven,7687,159.png,Banque,Jiang Li Tao,1 -2968,20,25,Five Thousand Eigt Hundred and Ninety Eigt,5898,103.png,Banque,Fleurette Coudert,1 -2969,16,25,Six Thousand and Fifty Nine,6059,81.png,Banque,Fleurette Coudert,1 -2970,11,35,Nine Thousand Six Hundred and Thirty For,9634,55.png,Banque,Elliot Humphreys,1 -2971,10,41,For Thousand and Thirty Five,4035,51.png,Banque,Germa de Geus,1 -2972,26,43,On Thousand Thre Hundred and Thirty Six,1336,131.png,Banque,Aruna Bekx,1 -2973,13,23,Thre Thousand Two Hundred and Sixt,3260,67.png,Banque,Thรฉrรจse Fortier,1 -2974,42,17,For Thousand Five Hundred and Ninety Eigt,4598,213.png,Banque,Yolette Cloutier,1 -2975,29,41,Seven Thousand Nine Hundred and Foty,7940,146.png,Banque,Germa de Geus,1 -2976,39,16,Thre Hundred and Eleven,311,198.png,Banque,Searlas Grenier,1 -2977,20,41,Six Hundred and Seenty Two,672,102.png,Banque,Germa de Geus,1 -2978,1,23,Two Thousand and Eihty Eigt,2088,8.png,Banque,Thรฉrรจse Fortier,1 -2979,14,3,Two Thousand Eigt Hundred and Ninety Thre,2893,73.png,Banque,Jiang Li Tao,1 -2980,27,23,Nine Thousand For Hundred and Eihty Seven,9487,137.png,Banque,Thรฉrรจse Fortier,1 -2981,1,28,For Hundred and Ninety Nine,499,6.png,Banque,Chapin Auger,1 -2982,6,28,Two Thousand Two Hundred and Eihty Seven,2287,31.png,Banque,Chapin Auger,1 -2983,22,1,Eigt Thousand Six Hundred and Foty Thre,8643,110.png,Banque,Emily D. Short,1 -2984,37,9,Thre Thousand Five Hundred and Foty Thre,3543,185.png,Banque,Maria Kalb,1 -2985,40,0,Seven Thousand Eigt Hundred and Eihty For,7884,203.png,Banque,Ethel M. Bryson,1 -2986,23,42,On Thousand On Hundred and Seenty Thre,1173,116.png,Banque,Brady Jamin,1 -2987,42,29,Two Thousand Six Hundred and Foty Nine,2649,210.png,Banque,Hayden Bruce,1 -2988,22,32,Thre Thousand Thre Hundred and Twenty Two,3322,113.png,Banque,Chelsea Watson,1 -2989,31,0,Five Thousand Nine Hundred and Thirty Seven,5937,158.png,Banque,Ethel M. Bryson,1 -2990,19,20,Two Thousand and Thirty Six,2036,96.png,Banque,Seymour Patenaude,1 -2991,13,24,On Thousand Eigt Hundred and Thirty,1830,66.png,Banque,Clarice Blanc,1 -2992,23,33,Eigt Thousand Eigt Hundred and Twenty Six,8826,115.png,Banque,Eleanor Freeman,1 -2993,26,8,Two Thousand and Ninety Thre,2093,134.png,Banque,Steffen Krueger,1 -2994,4,40,Eigt Thousand and Thirty Nine,8039,21.png,Banque,David Howard,1 -2995,27,3,Eigt Thousand Six Hundred and Ninety Eigt,8698,138.png,Banque,Jiang Li Tao,1 -2996,42,42,Five Thousand For Hundred and Foty,5440,214.png,Banque,Brady Jamin,1 -2997,15,29,On Thousand Two Hundred and Sixt Two,1262,79.png,Banque,Hayden Bruce,1 -2998,8,4,Five Thousand Five Hundred and Thirty Seven,5537,44.png,Banque,Wafiyah Nashwa Wasem,1 -2999,9,18,Thre Thousand Thre Hundred and Sixt Eigt,3368,49.png,Banque,Edmee Pelletier,1 -3000,39,11,Nine Hundred and Forteen,914,198.png,Banque,Jens Egger,1 -3001,13,22,Five Thousand Two Hundred and Three,5203,67.png,canara,Eglantine Forest,1 -3002,42,9,Nine Thousand Five Hundred and Twenty Five,9525,210.png,canara,Maria Kalb,1 -3003,16,36,Two Thousand Nine Hundred and Fifty Three,2953,82.png,canara,Thomas Chapman,1 -3004,8,21,Eight Thousand Eight Hundred and Twenty Seven,8827,41.png,canara,David Corbeil,1 -3005,31,26,Eight Thousand Four Hundred and Seventy Three,8473,158.png,canara,Sidney Lapointe,1 -3006,13,4,Three Hundred and Five,305,68.png,canara,Wafiyah Nashwa Wasem,1 -3007,29,32,One Thousand Eight Hundred and Ninety One,1891,148.png,canara,Chelsea Watson,1 -3008,6,11,Four Thousand Six Hundred and Fourteen,4614,32.png,canara,Jens Egger,1 -3009,25,13,Five Thousand Six Hundred and Five,5605,127.png,canara,Petra Kovacic,1 -3010,5,2,Five Thousand Nine Hundred and Thirty Seven,5937,27.png,canara,Chi Hsiao,1 -3011,36,12,Six Hundred and Thirty Four,634,181.png,canara,Marcel Achen,1 -3012,18,40,Two Thousand One Hundred and Fifty Five,2155,92.png,canara,David Howard,1 -3013,26,21,Eight Thousand Two Hundred and One,8201,132.png,canara,David Corbeil,1 -3014,1,3,Two Thousand One Hundred and Twenty One,2121,6.png,canara,Jiang Li Tao,1 -3015,38,0,Four Thousand Nine Hundred and Sixty Eight,4968,191.png,canara,Ethel M. Bryson,1 -3016,31,8,Nine Thousand Seven Hundred and Ninety Two,9792,158.png,canara,Steffen Krueger,1 -3017,23,17,Three Hundred and Forty Three,343,118.png,canara,Yolette Cloutier,1 -3018,35,26,Seven Thousand Nine Hundred and Fifty Nine,7959,177.png,canara,Sidney Lapointe,1 -3019,27,15,Five Thousand and Ninety One,5091,136.png,canara,Milenko Tkalcic,1 -3020,15,39,Six Thousand and Fifty Seven,6057,76.png,canara,Katie Connor,1 -3021,14,36,Five Thousand One Hundred and Ten,5110,70.png,canara,Thomas Chapman,1 -3022,31,26,Three Thousand Six Hundred and Six,3606,156.png,canara,Sidney Lapointe,1 -3023,21,16,Eight Thousand Three Hundred and Ninety Five,8395,106.png,canara,Searlas Grenier,1 -3024,29,38,Five Thousand Four Hundred and Forty One,5441,145.png,canara,Freddie Reid,1 -3025,13,27,Two Thousand and Forty Seven,2047,66.png,canara,Colette Monjeau,1 -3026,29,32,Six Thousand and Forty Nine,6049,146.png,canara,Chelsea Watson,1 -3027,31,39,Eight Thousand Six Hundred and Thirty Nine,8639,155.png,canara,Katie Connor,1 -3028,13,23,Three Thousand Four Hundred and Ninety Four,3494,67.png,canara,Thรฉrรจse Fortier,1 -3029,11,26,Nine Thousand Four Hundred and Ninety Five,9495,56.png,canara,Sidney Lapointe,1 -3030,21,18,Seven Thousand Eight Hundred and Seventy Two,7872,108.png,canara,Edmee Pelletier,1 -3031,42,41,Four Thousand Three Hundred and Eighty Nine,4389,212.png,canara,Germa de Geus,1 -3032,17,33,Nine Thousand Nine Hundred and Eighty One,9981,85.png,canara,Eleanor Freeman,1 -3033,35,22,Six Thousand Seven Hundred and Eighty Eight,6788,178.png,canara,Eglantine Forest,1 -3034,30,20,Nine Thousand and Seventy Three,9073,153.png,canara,Seymour Patenaude,1 -3035,10,13,Nine Thousand Four Hundred and Sixty Three,9463,54.png,canara,Petra Kovacic,1 -3036,7,16,One Thousand One Hundred and Seventy Three,1173,38.png,canara,Searlas Grenier,1 -3037,38,37,Nine Thousand Two Hundred and Thirty Three,9233,190.png,canara,Eva Davies,1 -3038,18,24,Seven Thousand Eight Hundred and Fifty Seven,7857,91.png,canara,Clarice Blanc,1 -3039,18,6,Eight Thousand Six Hundred and Eighty Five,8685,90.png,canara,Abdul Qais Khouri,1 -3040,43,13,Seven Thousand One Hundred and Thirty Two,7132,218.png,canara,Petra Kovacic,1 -3041,32,22,Five,5,162.png,canara,Eglantine Forest,1 -3042,43,41,Eight Thousand Seven Hundred and Ninety Six,8796,217.png,canara,Germa de Geus,1 -3043,42,37,Eight Thousand Three Hundred and Sixty Five,8365,212.png,canara,Eva Davies,1 -3044,41,20,Seven Thousand Three Hundred and Ninety Four,7394,205.png,canara,Seymour Patenaude,1 -3045,4,27,Five Thousand and Sixty Three,5063,22.png,canara,Colette Monjeau,1 -3046,5,5,Seven Thousand Three Hundred and Ninety Three,7393,25.png,canara,Fawwaz Zuhayr Mustafa,1 -3047,38,37,Four Thousand One Hundred and Thirty Nine,4139,190.png,canara,Eva Davies,1 -3048,36,13,One Hundred and Sixty Six,166,181.png,canara,Petra Kovacic,1 -3049,16,36,Seven Hundred and Forty Five,745,82.png,canara,Thomas Chapman,1 -3050,33,13,Nine Thousand Five Hundred and Sixty Three,9563,165.png,canara,Petra Kovacic,1 -3051,23,42,Four Thousand Eight Hundred and Four,4804,117.png,canara,Brady Jamin,1 -3052,13,36,Eight Thousand Three Hundred and Fifty One,8351,65.png,canara,Thomas Chapman,1 -3053,27,34,Four Thousand Four Hundred and Ninety Five,4495,138.png,canara,Holly Martin,1 -3054,34,28,One Thousand Nine Hundred and Sixty Eight,1968,171.png,canara,Chapin Auger,1 -3055,2,43,Seven Thousand Five Hundred and Eighty Six,7586,10.png,canara,Aruna Bekx,1 -3056,38,6,Six Thousand One Hundred and Sixty Four,6164,193.png,canara,Abdul Qais Khouri,1 -3057,40,27,Seven Thousand and Ninety Two,7092,201.png,canara,Colette Monjeau,1 -3058,4,25,Two Thousand Eight Hundred and Fifty Nine,2859,20.png,canara,Fleurette Coudert,1 -3059,23,32,Three Hundred and Eighty Nine,389,118.png,canara,Chelsea Watson,1 -3060,15,0,Five Thousand Three Hundred and Ninety Seven,5397,77.png,canara,Ethel M. Bryson,1 -3061,0,27,Three Thousand Nine Hundred and Forty,3940,2.png,canara,Colette Monjeau,1 -3062,6,10,One Thousand Five Hundred and Forty Seven,1547,34.png,canara,Stephan Schwab,1 -3063,2,5,Six Thousand Nine Hundred and Twenty Six,6926,11.png,canara,Fawwaz Zuhayr Mustafa,1 -3064,17,14,Five Thousand Four Hundred and Fifty Five,5455,86.png,canara,Renata Lukic,1 -3065,18,2,Eight Thousand One Hundred and Seventeen,8117,94.png,canara,Chi Hsiao,1 -3066,43,26,Nine Thousand Nine Hundred and Fifty Four,9954,217.png,canara,Sidney Lapointe,1 -3067,8,5,Three Hundred and Fifty One,351,42.png,canara,Fawwaz Zuhayr Mustafa,1 -3068,1,30,Three Thousand Four Hundred and Sixty Nine,3469,8.png,canara,Jodie Holden,1 -3069,18,31,Nine Thousand and Sixty Three,9063,91.png,canara,Naomi Grant,1 -3070,43,31,Four Thousand and Forty Six,4046,217.png,canara,Naomi Grant,1 -3071,25,23,Two Thousand One Hundred and Seventy Seven,2177,129.png,canara,Thรฉrรจse Fortier,1 -3072,33,6,Nine Thousand Two Hundred and Sixty Eight,9268,168.png,canara,Abdul Qais Khouri,1 -3073,1,22,Five Thousand Two Hundred and Fifty Nine,5259,9.png,canara,Eglantine Forest,1 -3074,25,19,Three Thousand One Hundred and Fifty One,3151,126.png,canara,Franรงoise Lapierre,1 -3075,18,13,Nine Thousand One Hundred and Forty One,9141,93.png,canara,Petra Kovacic,1 -3076,27,26,Three Hundred and Fifty,350,135.png,canara,Sidney Lapointe,1 -3077,10,10,Four Thousand Two Hundred and Two,4202,50.png,canara,Stephan Schwab,1 -3078,14,34,Eight Thousand Eight Hundred and Forty Three,8843,73.png,canara,Holly Martin,1 -3079,1,36,Six Thousand and Sixty One,6061,8.png,canara,Thomas Chapman,1 -3080,10,31,One Thousand Eight Hundred and Ninety Nine,1899,53.png,canara,Naomi Grant,1 -3081,15,25,Six Thousand Three Hundred and Thirty Three,6333,77.png,canara,Fleurette Coudert,1 -3082,22,2,One Thousand Six Hundred and Ninety One,1691,112.png,canara,Chi Hsiao,1 -3083,13,17,One Hundred and Eighty Eight,188,65.png,canara,Yolette Cloutier,1 -3084,25,26,Eight Thousand Five Hundred and Nine,8509,126.png,canara,Sidney Lapointe,1 -3085,1,6,One Thousand Six Hundred and Forty Five,1645,9.png,canara,Abdul Qais Khouri,1 -3086,23,35,Three Thousand Three Hundred and Fifty Six,3356,118.png,canara,Elliot Humphreys,1 -3087,13,21,Four Thousand One Hundred and Three,4103,67.png,canara,David Corbeil,1 -3088,5,8,One Thousand Seven Hundred and Forty,1740,29.png,canara,Steffen Krueger,1 -3089,41,10,Seven Thousand Nine Hundred and Forty Four,7944,205.png,canara,Stephan Schwab,1 -3090,6,8,One Thousand Three Hundred and Fifty Two,1352,34.png,canara,Steffen Krueger,1 -3091,14,40,One Thousand Four Hundred and Fifty Four,1454,74.png,canara,David Howard,1 -3092,37,3,Eight Thousand Seven Hundred and Fifty Nine,8759,186.png,canara,Jiang Li Tao,1 -3093,42,19,Six Thousand Six Hundred and Thirty One,6631,210.png,canara,Franรงoise Lapierre,1 -3094,27,38,Eight Thousand Four Hundred and Ninety Six,8496,137.png,canara,Freddie Reid,1 -3095,14,7,Three Thousand and Fifty Nine,3059,71.png,canara,Hasna Bahiyaa Amari,1 -3096,19,17,Six Thousand Four Hundred and Fifty,6450,97.png,canara,Yolette Cloutier,1 -3097,0,20,One Thousand One Hundred and Ninety One,1191,4.png,canara,Seymour Patenaude,1 -3098,32,13,Eight Thousand Three Hundred and Twelve,8312,164.png,canara,Petra Kovacic,1 -3099,39,33,Six Thousand Seven Hundred and Sixty Two,6762,199.png,canara,Eleanor Freeman,1 -3100,9,11,Six Thousand and Seventy Four,6074,47.png,canara,Jens Egger,1 -3101,7,39,Four Thousand Four Hundred and Fifty,4450,36.png,canara,Katie Connor,1 -3102,3,35,Eight Thousand One Hundred and Sixty,8160,16.png,canara,Elliot Humphreys,1 -3103,4,23,Three Thousand Five Hundred and One,3501,22.png,canara,Thรฉrรจse Fortier,1 -3104,27,2,Seven Thousand Five Hundred and Sixty Two,7562,135.png,canara,Chi Hsiao,1 -3105,40,15,Eight Thousand One Hundred and Thirty Two,8132,201.png,canara,Milenko Tkalcic,1 -3106,25,22,Two Hundred and Seventy One,271,125.png,canara,Eglantine Forest,1 -3107,20,34,Nine Thousand Nine Hundred and Twenty Five,9925,100.png,canara,Holly Martin,1 -3108,30,16,One Thousand Four Hundred and Forty Nine,1449,153.png,canara,Searlas Grenier,1 -3109,33,3,Seven Thousand Two Hundred and Eighty Three,7283,165.png,canara,Jiang Li Tao,1 -3110,23,30,Three Thousand Five Hundred and Ninety Five,3595,118.png,canara,Jodie Holden,1 -3111,12,8,Three Thousand and Twenty Two,3022,62.png,canara,Steffen Krueger,1 -3112,42,0,Seven Thousand Eight Hundred and Fifty Nine,7859,210.png,canara,Ethel M. Bryson,1 -3113,13,41,Six Thousand Seven Hundred and Twenty Six,6726,68.png,canara,Germa de Geus,1 -3114,7,7,Eight Thousand Eight Hundred and Fifteen,8815,36.png,canara,Hasna Bahiyaa Amari,1 -3115,19,19,One Thousand Two Hundred and Ninety Five,1295,98.png,canara,Franรงoise Lapierre,1 -3116,19,0,One Hundred and Nineteen,119,99.png,canara,Ethel M. Bryson,1 -3117,21,4,Seven Hundred and Twenty Seven,727,106.png,canara,Wafiyah Nashwa Wasem,1 -3118,1,36,Seven Thousand Eight Hundred and Sixty Eight,7868,9.png,canara,Thomas Chapman,1 -3119,33,3,Nine Thousand Seven Hundred and Twenty Nine,9729,166.png,canara,Jiang Li Tao,1 -3120,38,38,Three Hundred and Fifty Eight,358,192.png,canara,Freddie Reid,1 -3121,6,37,One Thousand Five Hundred and Fifty Five,1555,30.png,canara,Eva Davies,1 -3122,21,2,Two Thousand and Sixty Three,2063,105.png,canara,Chi Hsiao,1 -3123,24,1,Four Thousand Two Hundred and Fifty Eight,4258,122.png,canara,Emily D. Short,1 -3124,12,6,Sixty,60,61.png,canara,Abdul Qais Khouri,1 -3125,26,37,Eight Thousand One Hundred and Thirty Seven,8137,131.png,canara,Eva Davies,1 -3126,27,4,Eight Thousand Nine Hundred and Fourteen,8914,135.png,canara,Wafiyah Nashwa Wasem,1 -3127,3,28,One Thousand Two Hundred and Eighty Nine,1289,17.png,canara,Chapin Auger,1 -3128,3,37,Six Thousand Two Hundred and Forty Six,6246,18.png,canara,Eva Davies,1 -3129,36,18,Five Thousand and Fourteen,5014,180.png,canara,Edmee Pelletier,1 -3130,30,8,Seven Thousand Nine Hundred and Ninety Six,7996,152.png,canara,Steffen Krueger,1 -3131,21,32,Seven Thousand Seven Hundred and Seventy Three,7773,105.png,canara,Chelsea Watson,1 -3132,6,30,Four Thousand One Hundred and Ninety Five,4195,31.png,canara,Jodie Holden,1 -3133,4,16,Six Thousand and Eighty Five,6085,23.png,canara,Searlas Grenier,1 -3134,31,17,Six Thousand Eight Hundred and Eighty Nine,6889,158.png,canara,Yolette Cloutier,1 -3135,33,0,Eight Thousand One Hundred and Eighteen,8118,169.png,canara,Ethel M. Bryson,1 -3136,35,36,Three Thousand Seven Hundred and Sixteen,3716,176.png,canara,Thomas Chapman,1 -3137,41,32,Three Hundred and Seventy Seven,377,208.png,canara,Chelsea Watson,1 -3138,14,17,Five Thousand One Hundred and Fifty Five,5155,72.png,canara,Yolette Cloutier,1 -3139,28,16,One Thousand Three Hundred and Fourteen,1314,141.png,canara,Searlas Grenier,1 -3140,13,25,Six Thousand and Sixty Nine,6069,65.png,canara,Fleurette Coudert,1 -3141,11,12,Seven Thousand Nine Hundred and Ninety Three,7993,56.png,canara,Marcel Achen,1 -3142,5,40,Four Thousand Seven Hundred and Ninety Five,4795,25.png,canara,David Howard,1 -3143,4,4,Seven Hundred and Eighty Three,783,23.png,canara,Wafiyah Nashwa Wasem,1 -3144,14,7,Six Thousand Two Hundred and Sixty Nine,6269,73.png,canara,Hasna Bahiyaa Amari,1 -3145,29,22,Two Thousand Five Hundred and Forty One,2541,147.png,canara,Eglantine Forest,1 -3146,8,25,Two Thousand Five Hundred and Five,2505,43.png,canara,Fleurette Coudert,1 -3147,43,42,Eight Thousand Six Hundred and Seventy Four,8674,216.png,canara,Brady Jamin,1 -3148,31,42,Five Thousand Six Hundred and Fifty Nine,5659,157.png,canara,Brady Jamin,1 -3149,34,33,Seven Thousand Five Hundred and Forty Two,7542,170.png,canara,Eleanor Freeman,1 -3150,36,30,Six Thousand Two Hundred and Seventy Two,6272,182.png,canara,Jodie Holden,1 -3151,32,42,Two Thousand Six Hundred and Ninety Six,2696,161.png,canara,Brady Jamin,1 -3152,25,7,Eight Thousand Two Hundred and Twenty Seven,8227,126.png,canara,Hasna Bahiyaa Amari,1 -3153,34,8,Nine Thousand Four Hundred and Fourteen,9414,174.png,canara,Steffen Krueger,1 -3154,7,7,Eight Thousand Three Hundred and Fifty Two,8352,39.png,canara,Hasna Bahiyaa Amari,1 -3155,14,41,Seven Thousand Six Hundred and Forty Two,7642,72.png,canara,Germa de Geus,1 -3156,38,30,Seven Thousand Two Hundred and Forty Six,7246,191.png,canara,Jodie Holden,1 -3157,32,1,Eight Thousand and Sixty Seven,8067,163.png,canara,Emily D. Short,1 -3158,22,39,Six Thousand and Six,6006,110.png,canara,Katie Connor,1 -3159,39,19,Six Thousand and Eighty Seven,6087,195.png,canara,Franรงoise Lapierre,1 -3160,7,36,Five Thousand One Hundred and Seventy Eight,5178,36.png,canara,Thomas Chapman,1 -3161,2,4,Eight Thousand Eight Hundred and Two,8802,11.png,canara,Wafiyah Nashwa Wasem,1 -3162,40,34,One Thousand Eight Hundred and Sixty Five,1865,202.png,canara,Holly Martin,1 -3163,9,29,Seven Thousand One Hundred and Ninety Two,7192,49.png,canara,Hayden Bruce,1 -3164,37,8,Nine Thousand One Hundred and Seventy Two,9172,185.png,canara,Steffen Krueger,1 -3165,40,12,Eight Thousand Two Hundred and Seven,8207,201.png,canara,Marcel Achen,1 -3166,15,41,Three Thousand Five Hundred and Sixty,3560,79.png,canara,Germa de Geus,1 -3167,6,23,Six Thousand Three Hundred and Forty,6340,31.png,canara,Thรฉrรจse Fortier,1 -3168,32,26,Four Thousand Eight Hundred and Twenty Two,4822,162.png,canara,Sidney Lapointe,1 -3169,40,15,Nine Thousand Nine Hundred and Forty Eight,9948,202.png,canara,Milenko Tkalcic,1 -3170,14,25,One Thousand Four Hundred and Ninety One,1491,73.png,canara,Fleurette Coudert,1 -3171,15,26,Seven Thousand Five Hundred and Twelve,7512,76.png,canara,Sidney Lapointe,1 -3172,21,20,Seven Hundred and Eighty Four,784,108.png,canara,Seymour Patenaude,1 -3173,23,34,Four Thousand Nine Hundred and Eighty Two,4982,119.png,canara,Holly Martin,1 -3174,21,36,Six Thousand One Hundred and Sixty Nine,6169,109.png,canara,Thomas Chapman,1 -3175,0,18,Three Hundred and Thirty Two,332,4.png,canara,Edmee Pelletier,1 -3176,18,1,One Thousand Three Hundred and Forty Three,1343,91.png,canara,Emily D. Short,1 -3177,9,42,Seven Thousand Nine Hundred and Ninety One,7991,45.png,canara,Brady Jamin,1 -3178,4,20,One Thousand Six Hundred and Forty Two,1642,22.png,canara,Seymour Patenaude,1 -3179,39,13,Nine Thousand Eight Hundred and Thirty Four,9834,198.png,canara,Petra Kovacic,1 -3180,35,34,Four Thousand Three Hundred and Eighty Eight,4388,175.png,canara,Holly Martin,1 -3181,1,35,Seven Thousand Five Hundred and Ninety,7590,7.png,canara,Elliot Humphreys,1 -3182,6,40,Four Thousand One Hundred and Eight,4108,31.png,canara,David Howard,1 -3183,26,16,Five Thousand Five Hundred and Eighty Eight,5588,133.png,canara,Searlas Grenier,1 -3184,15,33,One Thousand Four Hundred and Thirty Five,1435,79.png,canara,Eleanor Freeman,1 -3185,14,17,Two Thousand One Hundred and Seventy Eight,2178,73.png,canara,Yolette Cloutier,1 -3186,41,20,Eight Thousand Four Hundred and Seventy,8470,207.png,canara,Seymour Patenaude,1 -3187,29,22,Four Hundred and Thirty,430,149.png,canara,Eglantine Forest,1 -3188,37,42,Nine Thousand Five Hundred and Thirty Eight,9538,186.png,canara,Brady Jamin,1 -3189,35,13,Eight Thousand and Thirty Two,8032,179.png,canara,Petra Kovacic,1 -3190,41,17,Seven Thousand Two Hundred and Forty,7240,209.png,canara,Yolette Cloutier,1 -3191,13,19,Six Thousand Four Hundred and Thirty Five,6435,69.png,canara,Franรงoise Lapierre,1 -3192,29,40,Five Thousand Five Hundred and Sixty Eight,5568,145.png,canara,David Howard,1 -3193,13,9,Eight Thousand Eight Hundred and Twelve,8812,66.png,canara,Maria Kalb,1 -3194,36,3,Five Thousand Six Hundred and Thirty Six,5636,182.png,canara,Jiang Li Tao,1 -3195,43,23,Two Thousand One Hundred and Fifty Two,2152,216.png,canara,Thรฉrรจse Fortier,1 -3196,2,18,Five Thousand Five Hundred and Eighty One,5581,11.png,canara,Edmee Pelletier,1 -3197,2,13,Eight Thousand Nine Hundred and Sixty Six,8966,10.png,canara,Petra Kovacic,1 -3198,13,41,Nine Thousand Nine Hundred and Twenty Nine,9929,66.png,canara,Germa de Geus,1 -3199,6,9,Five Hundred and Sixty Two,562,33.png,canara,Maria Kalb,1 -3200,42,27,One Thousand Six Hundred and Seventy Nine,1679,212.png,canara,Colette Monjeau,1 -3201,12,42,One Thousand Five Hundred and Ninety Five,1595,62.png,canara,Brady Jamin,1 -3202,0,39,Nine Thousand Five Hundred and Eighty One,9581,2.png,canara,Katie Connor,1 -3203,11,10,Three Thousand Two Hundred and Thirty One,3231,56.png,canara,Stephan Schwab,1 -3204,11,20,Eight Thousand Three Hundred and Seventy Nine,8379,58.png,canara,Seymour Patenaude,1 -3205,10,36,Seven Thousand Four Hundred and Sixty Three,7463,52.png,canara,Thomas Chapman,1 -3206,1,1,One Thousand One Hundred and Two,1102,9.png,canara,Emily D. Short,1 -3207,13,8,Five Thousand and Ninety Two,5092,67.png,canara,Steffen Krueger,1 -3208,7,14,Two Thousand Two Hundred and Fourteen,2214,38.png,canara,Renata Lukic,1 -3209,25,32,Two Thousand and Eighty Two,2082,126.png,canara,Chelsea Watson,1 -3210,0,30,Two Thousand Eight Hundred and Seventy Nine,2879,2.png,canara,Jodie Holden,1 -3211,32,24,Five Thousand One Hundred and Fifty One,5151,163.png,canara,Clarice Blanc,1 -3212,33,42,One Thousand Eight Hundred and Sixty Five,1865,165.png,canara,Brady Jamin,1 -3213,2,31,One Thousand Nine Hundred and Four,1904,10.png,canara,Naomi Grant,1 -3214,23,32,Four Thousand Five Hundred and Seventy Five,4575,116.png,canara,Chelsea Watson,1 -3215,28,36,Three Thousand Two Hundred and Ninety One,3291,142.png,canara,Thomas Chapman,1 -3216,39,26,Eight Thousand Seven Hundred and Fifty Nine,8759,198.png,canara,Sidney Lapointe,1 -3217,16,11,Six Thousand Five Hundred and Sixty Two,6562,81.png,canara,Jens Egger,1 -3218,33,22,One Thousand Six Hundred and Forty Four,1644,166.png,canara,Eglantine Forest,1 -3219,29,13,Four Thousand Six Hundred and Ninety Eight,4698,146.png,canara,Petra Kovacic,1 -3220,14,2,Six Hundred and Sixty Two,662,70.png,canara,Chi Hsiao,1 -3221,28,37,Six Thousand Two Hundred and Sixty One,6261,140.png,canara,Eva Davies,1 -3222,40,39,Six Thousand Two Hundred and Forty Six,6246,203.png,canara,Katie Connor,1 -3223,39,21,Four Thousand Nine Hundred,4900,196.png,canara,David Corbeil,1 -3224,2,19,One Thousand Two Hundred and Forty Nine,1249,11.png,canara,Franรงoise Lapierre,1 -3225,18,6,Five Thousand One Hundred and Seventy,5170,90.png,canara,Abdul Qais Khouri,1 -3226,9,18,Seven Thousand and Fifty Two,7052,47.png,canara,Edmee Pelletier,1 -3227,12,16,Nine Thousand Six Hundred and Twenty Five,9625,60.png,canara,Searlas Grenier,1 -3228,28,29,Eight Thousand One Hundred and Ninety Five,8195,141.png,canara,Hayden Bruce,1 -3229,30,24,Eight Thousand Four Hundred and Thirteen,8413,150.png,canara,Clarice Blanc,1 -3230,7,25,Four Thousand Three Hundred and Twenty Seven,4327,37.png,canara,Fleurette Coudert,1 -3231,13,20,Four Hundred and Seventy Eight,478,66.png,canara,Seymour Patenaude,1 -3232,15,10,Two Thousand One Hundred and Ninety One,2191,79.png,canara,Stephan Schwab,1 -3233,4,24,Nine Thousand Six Hundred and Fourteen,9614,24.png,canara,Clarice Blanc,1 -3234,26,35,Seven Thousand One Hundred and Forty Seven,7147,132.png,canara,Elliot Humphreys,1 -3235,33,17,Seven Thousand Five Hundred and Nineteen,7519,167.png,canara,Yolette Cloutier,1 -3236,33,32,Four Thousand Three Hundred and Fifty Three,4353,169.png,canara,Chelsea Watson,1 -3237,26,42,Six Hundred and Fifty Seven,657,133.png,canara,Brady Jamin,1 -3238,38,27,Two Thousand Nine Hundred and Sixty Seven,2967,192.png,canara,Colette Monjeau,1 -3239,33,5,Eight Thousand One Hundred and Fifteen,8115,166.png,canara,Fawwaz Zuhayr Mustafa,1 -3240,43,3,Nine Thousand and Fifty Nine,9059,216.png,canara,Jiang Li Tao,1 -3241,15,12,Seven Thousand and Forty Two,7042,75.png,canara,Marcel Achen,1 -3242,36,34,Three Thousand One Hundred and Ninety Nine,3199,181.png,canara,Holly Martin,1 -3243,7,37,Six Hundred and Eight,608,37.png,canara,Eva Davies,1 -3244,29,28,One Thousand Two Hundred and Fifty Two,1252,148.png,canara,Chapin Auger,1 -3245,4,13,Nine Thousand Three Hundred and Thirty Eight,9338,21.png,canara,Petra Kovacic,1 -3246,41,38,Six Thousand Six Hundred and Sixty Seven,6667,206.png,canara,Freddie Reid,1 -3247,39,0,Eight Thousand Seven Hundred and Twenty Three,8723,199.png,canara,Ethel M. Bryson,1 -3248,11,11,Four Thousand Two Hundred and Twenty Five,4225,57.png,canara,Jens Egger,1 -3249,25,40,Eight Thousand One Hundred and Thirty One,8131,127.png,canara,David Howard,1 -3250,18,4,Three Thousand Four Hundred and Seventy Three,3473,93.png,canara,Wafiyah Nashwa Wasem,1 -3251,34,19,Five Thousand Three Hundred and Thirty Four,5334,172.png,canara,Franรงoise Lapierre,1 -3252,5,9,Eight Thousand Six Hundred and Seventy Three,8673,25.png,canara,Maria Kalb,1 -3253,8,28,Five Thousand Three Hundred and Twelve,5312,42.png,canara,Chapin Auger,1 -3254,35,8,One Hundred and Forty Five,145,175.png,canara,Steffen Krueger,1 -3255,8,41,One Thousand Four Hundred and Sixty Two,1462,41.png,canara,Germa de Geus,1 -3256,33,36,Five Thousand Five Hundred and Thirty Nine,5539,167.png,canara,Thomas Chapman,1 -3257,27,27,Nine Thousand and Forty Three,9043,138.png,canara,Colette Monjeau,1 -3258,22,4,Four Thousand Two Hundred and Eighty Two,4282,111.png,canara,Wafiyah Nashwa Wasem,1 -3259,14,8,Three Thousand Six Hundred and One,3601,73.png,canara,Steffen Krueger,1 -3260,32,32,Four Thousand Two Hundred and Ninety One,4291,164.png,canara,Chelsea Watson,1 -3261,5,30,Eight Thousand Nine Hundred and Forty,8940,27.png,canara,Jodie Holden,1 -3262,35,11,One Thousand Two Hundred and Twenty One,1221,175.png,canara,Jens Egger,1 -3263,0,18,Six Thousand Five Hundred and Eighty Six,6586,0.png,canara,Edmee Pelletier,1 -3264,43,16,Six Thousand and Fifty Five,6055,219.png,canara,Searlas Grenier,1 -3265,0,22,One Thousand Five Hundred and Eighty Six,1586,4.png,canara,Eglantine Forest,1 -3266,23,0,Nine Thousand Nine Hundred and Fourteen,9914,119.png,canara,Ethel M. Bryson,1 -3267,42,42,One Thousand Four Hundred and Seventy Six,1476,211.png,canara,Brady Jamin,1 -3268,16,25,Three Thousand One Hundred and Sixty Two,3162,82.png,canara,Fleurette Coudert,1 -3269,13,22,Two Thousand Four Hundred and Ninety Four,2494,65.png,canara,Eglantine Forest,1 -3270,34,32,Two Thousand Eight Hundred and Fifteen,2815,170.png,canara,Chelsea Watson,1 -3271,42,0,Five Thousand Eight Hundred and Fifty One,5851,212.png,canara,Ethel M. Bryson,1 -3272,23,34,Eight Thousand One Hundred and Six,8106,119.png,canara,Holly Martin,1 -3273,7,23,Five Thousand Three Hundred and Thirty Four,5334,39.png,canara,Thรฉrรจse Fortier,1 -3274,23,38,Six Hundred and Forty One,641,119.png,canara,Freddie Reid,1 -3275,14,21,One Thousand One Hundred and Three,1103,73.png,canara,David Corbeil,1 -3276,4,29,Six Thousand One Hundred and One,6101,22.png,canara,Hayden Bruce,1 -3277,27,7,One Thousand Seven Hundred and Fifty Six,1756,137.png,canara,Hasna Bahiyaa Amari,1 -3278,26,10,Six Thousand Seven Hundred and Twenty,6720,134.png,canara,Stephan Schwab,1 -3279,34,17,Six Thousand Six Hundred and Thirty Seven,6637,172.png,canara,Yolette Cloutier,1 -3280,7,29,Six Thousand One Hundred and Seventeen,6117,35.png,canara,Hayden Bruce,1 -3281,31,30,One Thousand Four Hundred and Ninety Two,1492,156.png,canara,Jodie Holden,1 -3282,7,36,One Thousand Seven Hundred and Ninety Nine,1799,39.png,canara,Thomas Chapman,1 -3283,11,29,Seven Thousand Four Hundred and Five,7405,58.png,canara,Hayden Bruce,1 -3284,13,16,Eight Thousand Five Hundred and Five,8505,66.png,canara,Searlas Grenier,1 -3285,29,29,Two Thousand Eight Hundred and Eighty,2880,148.png,canara,Hayden Bruce,1 -3286,19,24,Nine Thousand Eight Hundred and Twelve,9812,99.png,canara,Clarice Blanc,1 -3287,14,23,One Thousand Two Hundred and Nineteen,1219,72.png,canara,Thรฉrรจse Fortier,1 -3288,35,38,Two Thousand Eight Hundred and Eighty Nine,2889,175.png,canara,Freddie Reid,1 -3289,12,19,Eight Thousand Six Hundred and Forty Six,8646,60.png,canara,Franรงoise Lapierre,1 -3290,15,25,Three Thousand and Fifty One,3051,76.png,canara,Fleurette Coudert,1 -3291,9,20,Three Thousand Four Hundred and Eighty Three,3483,47.png,canara,Seymour Patenaude,1 -3292,0,19,Six Thousand Three Hundred and Thirty Three,6333,3.png,canara,Franรงoise Lapierre,1 -3293,41,37,Seven Thousand One Hundred and Fifty,7150,208.png,canara,Eva Davies,1 -3294,14,29,Two Thousand One Hundred and Sixty Two,2162,74.png,canara,Hayden Bruce,1 -3295,21,29,Nine Thousand Three Hundred and Eighty,9380,108.png,canara,Hayden Bruce,1 -3296,0,13,Three Thousand One Hundred and Sixty One,3161,0.png,canara,Petra Kovacic,1 -3297,27,43,Nine Thousand One Hundred and Seventy Two,9172,139.png,canara,Aruna Bekx,1 -3298,25,15,Five Thousand Nine Hundred and Twenty Nine,5929,127.png,canara,Milenko Tkalcic,1 -3299,31,43,Two Thousand One Hundred and Thirty Four,2134,159.png,canara,Aruna Bekx,1 -3300,13,33,Seven Thousand Seven Hundred and Ninety Seven,7797,65.png,canara,Eleanor Freeman,1 -3301,17,36,Five Thousand Six Hundred and Fifty Five,5655,87.png,canara,Thomas Chapman,1 -3302,15,23,Two Thousand One Hundred and Eighty Nine,2189,79.png,canara,Thรฉrรจse Fortier,1 -3303,12,8,One Thousand Nine Hundred and Thirty Nine,1939,60.png,canara,Steffen Krueger,1 -3304,36,0,One Thousand Seven Hundred and Fifty Nine,1759,181.png,canara,Ethel M. Bryson,1 -3305,8,2,Five Thousand Nine Hundred and Eleven,5911,41.png,canara,Chi Hsiao,1 -3306,39,28,Four Thousand Seven Hundred and Eighty,4780,196.png,canara,Chapin Auger,1 -3307,12,25,One Thousand Eight Hundred and One,1801,60.png,canara,Fleurette Coudert,1 -3308,19,35,Eight Thousand One Hundred and Ninety Eight,8198,97.png,canara,Elliot Humphreys,1 -3309,4,13,Six Thousand Six Hundred and Forty Seven,6647,21.png,canara,Petra Kovacic,1 -3310,19,5,Five Thousand Seven Hundred and Twenty Five,5725,98.png,canara,Fawwaz Zuhayr Mustafa,1 -3311,25,33,Three Hundred and Forty One,341,128.png,canara,Eleanor Freeman,1 -3312,32,34,Eight Thousand Nine Hundred and Seventy Two,8972,164.png,canara,Holly Martin,1 -3313,24,10,Eight Hundred,800,121.png,canara,Stephan Schwab,1 -3314,41,28,Seven Thousand Three Hundred and Twenty Three,7323,205.png,canara,Chapin Auger,1 -3315,21,19,Seven Thousand Three Hundred and Fifty Two,7352,106.png,canara,Franรงoise Lapierre,1 -3316,4,6,Five Hundred and Seventy Two,572,24.png,canara,Abdul Qais Khouri,1 -3317,4,11,Two Thousand Eight Hundred and Ninety Nine,2899,21.png,canara,Jens Egger,1 -3318,8,13,Two Thousand Three Hundred and Twenty Seven,2327,44.png,canara,Petra Kovacic,1 -3319,32,6,One Thousand Six Hundred and Thirty Three,1633,161.png,canara,Abdul Qais Khouri,1 -3320,23,20,Nine Thousand and Sixty Nine,9069,117.png,canara,Seymour Patenaude,1 -3321,5,40,Nine Hundred and Sixty Two,962,29.png,canara,David Howard,1 -3322,37,43,Three Thousand Five Hundred and Five,3505,185.png,canara,Aruna Bekx,1 -3323,8,13,Five Thousand Five Hundred and Eighty Eight,5588,40.png,canara,Petra Kovacic,1 -3324,23,35,Three Thousand Four Hundred and Sixty Seven,3467,119.png,canara,Elliot Humphreys,1 -3325,8,40,Seven Hundred and Fifty Eight,758,44.png,canara,David Howard,1 -3326,15,9,Three Thousand One Hundred and Ninety Eight,3198,75.png,canara,Maria Kalb,1 -3327,19,20,Three Thousand Five Hundred and Twenty Nine,3529,99.png,canara,Seymour Patenaude,1 -3328,35,26,One Thousand Five Hundred and Sixty One,1561,175.png,canara,Sidney Lapointe,1 -3329,30,1,Two Thousand and Ninety Two,2092,150.png,canara,Emily D. Short,1 -3330,37,13,Three Hundred and Seventy Five,375,186.png,canara,Petra Kovacic,1 -3331,29,38,Eight Thousand One Hundred and Forty Eight,8148,148.png,canara,Freddie Reid,1 -3332,23,23,One Thousand Six Hundred and Twenty Six,1626,118.png,canara,Thรฉrรจse Fortier,1 -3333,3,31,Two Hundred and Thirty Three,233,18.png,canara,Naomi Grant,1 -3334,39,37,Two Thousand Nine Hundred and Eighty One,2981,198.png,canara,Eva Davies,1 -3335,26,0,Eight Thousand Seven Hundred and Thirteen,8713,132.png,canara,Ethel M. Bryson,1 -3336,42,6,Three Thousand Four Hundred and Forty Two,3442,211.png,canara,Abdul Qais Khouri,1 -3337,35,43,Five Thousand Four Hundred and Fifty Six,5456,176.png,canara,Aruna Bekx,1 -3338,16,24,Four Thousand Five Hundred and Sixteen,4516,84.png,canara,Clarice Blanc,1 -3339,42,41,Five Thousand Nine Hundred and Six,5906,210.png,canara,Germa de Geus,1 -3340,19,35,Seven Thousand One Hundred and Seventy Five,7175,95.png,canara,Elliot Humphreys,1 -3341,9,2,Seven Thousand Seven Hundred and Four,7704,48.png,canara,Chi Hsiao,1 -3342,33,15,Two Thousand Six Hundred and Fifty Seven,2657,169.png,canara,Milenko Tkalcic,1 -3343,2,0,Eight Thousand Seven Hundred and Fifty Seven,8757,10.png,canara,Ethel M. Bryson,1 -3344,7,35,Nine Hundred and Twenty Two,922,39.png,canara,Elliot Humphreys,1 -3345,3,20,Three Thousand Eight Hundred and Ninety Six,3896,16.png,canara,Seymour Patenaude,1 -3346,28,17,Seven Thousand Nine Hundred and Fourteen,7914,141.png,canara,Yolette Cloutier,1 -3347,42,14,Five Thousand Three Hundred and Eighteen,5318,214.png,canara,Renata Lukic,1 -3348,27,42,One Thousand Six Hundred and Thirty Two,1632,137.png,canara,Brady Jamin,1 -3349,28,30,Six Thousand Five Hundred and Fifty,6550,140.png,canara,Jodie Holden,1 -3350,19,6,Six Thousand Three Hundred and Ninety Six,6396,95.png,canara,Abdul Qais Khouri,1 -3351,42,37,Six Thousand and Forty Two,6042,211.png,canara,Eva Davies,1 -3352,43,42,Six Thousand and Thirty One,6031,215.png,canara,Brady Jamin,1 -3353,21,17,Five Thousand Six Hundred and Eighteen,5618,108.png,canara,Yolette Cloutier,1 -3354,12,12,Seven Thousand Two Hundred and Ninety Seven,7297,62.png,canara,Marcel Achen,1 -3355,35,37,Nine Hundred and Twenty Eight,928,177.png,canara,Eva Davies,1 -3356,21,29,Nine Thousand Four Hundred and Seventy One,9471,105.png,canara,Hayden Bruce,1 -3357,35,23,Two Thousand Three Hundred and Twelve,2312,175.png,canara,Thรฉrรจse Fortier,1 -3358,28,12,Two Thousand Nine Hundred and Forty Eight,2948,140.png,canara,Marcel Achen,1 -3359,17,5,Eight Thousand One Hundred and Forty Nine,8149,87.png,canara,Fawwaz Zuhayr Mustafa,1 -3360,35,15,One Thousand One Hundred and Fifty Four,1154,179.png,canara,Milenko Tkalcic,1 -3361,4,5,Five Thousand Six Hundred and Three,5603,24.png,canara,Fawwaz Zuhayr Mustafa,1 -3362,9,33,Six Thousand Two Hundred and Thirty Eight,6238,47.png,canara,Eleanor Freeman,1 -3363,43,24,Four Hundred and Thirty Six,436,218.png,canara,Clarice Blanc,1 -3364,4,11,Five Thousand Seven Hundred and Seventeen,5717,21.png,canara,Jens Egger,1 -3365,6,27,Five Thousand Eight Hundred and Thirty Eight,5838,31.png,canara,Colette Monjeau,1 -3366,26,28,Six Thousand Five Hundred and Sixty Seven,6567,133.png,canara,Chapin Auger,1 -3367,6,11,Five Thousand Two Hundred and Seventy,5270,30.png,canara,Jens Egger,1 -3368,41,14,Nine Thousand Seven Hundred and Twenty,9720,207.png,canara,Renata Lukic,1 -3369,39,2,One Thousand Four Hundred and Eighty Four,1484,197.png,canara,Chi Hsiao,1 -3370,18,8,Three Hundred and Fifty Six,356,93.png,canara,Steffen Krueger,1 -3371,12,26,Seven Thousand One Hundred and Thirty Four,7134,60.png,canara,Sidney Lapointe,1 -3372,7,18,Six Thousand Three Hundred and Eleven,6311,36.png,canara,Edmee Pelletier,1 -3373,38,5,Nine Thousand Five Hundred and Eighteen,9518,193.png,canara,Fawwaz Zuhayr Mustafa,1 -3374,26,7,Six Thousand Five Hundred and Fifty Five,6555,131.png,canara,Hasna Bahiyaa Amari,1 -3375,1,4,Two Hundred and Seventy Seven,277,8.png,canara,Wafiyah Nashwa Wasem,1 -3376,17,8,Eight Thousand Seven Hundred and Seventeen,8717,88.png,canara,Steffen Krueger,1 -3377,0,31,Eight Thousand One Hundred and Six,8106,4.png,canara,Naomi Grant,1 -3378,13,30,Six Thousand Five Hundred and Forty Eight,6548,65.png,canara,Jodie Holden,1 -3379,34,42,Nine Thousand One Hundred and Ten,9110,171.png,canara,Brady Jamin,1 -3380,42,8,Six Thousand Six Hundred and Twelve,6612,211.png,canara,Steffen Krueger,1 -3381,11,26,Four Thousand Two Hundred and Twenty Six,4226,58.png,canara,Sidney Lapointe,1 -3382,42,28,Seven Thousand Two Hundred and Sixty Eight,7268,214.png,canara,Chapin Auger,1 -3383,13,22,Four Thousand Three Hundred and Sixty Eight,4368,66.png,canara,Eglantine Forest,1 -3384,23,41,Six Thousand Four Hundred and Eighty,6480,117.png,canara,Germa de Geus,1 -3385,5,13,Six Thousand Nine Hundred and Seventy One,6971,29.png,canara,Petra Kovacic,1 -3386,19,15,Four Thousand One Hundred and Ninety,4190,99.png,canara,Milenko Tkalcic,1 -3387,26,40,One Thousand Six Hundred and Four,1604,134.png,canara,David Howard,1 -3388,19,30,Four Thousand Seven Hundred and Seventy Eight,4778,99.png,canara,Jodie Holden,1 -3389,32,37,Eight Thousand Nine Hundred and Ten,8910,160.png,canara,Eva Davies,1 -3390,1,26,Nine Thousand and Forty Five,9045,9.png,canara,Sidney Lapointe,1 -3391,39,22,Four Thousand Seven Hundred and Twenty Three,4723,196.png,canara,Eglantine Forest,1 -3392,42,43,Six Thousand Five Hundred and Twenty Eight,6528,210.png,canara,Aruna Bekx,1 -3393,27,18,Five Thousand One Hundred and Eighty Three,5183,135.png,canara,Edmee Pelletier,1 -3394,9,9,Five Thousand Two Hundred and Four,5204,48.png,canara,Maria Kalb,1 -3395,31,38,Forty Seven,47,157.png,canara,Freddie Reid,1 -3396,8,6,Three Thousand Nine Hundred and Forty Seven,3947,42.png,canara,Abdul Qais Khouri,1 -3397,23,3,Four Thousand Three Hundred and Seventy Six,4376,115.png,canara,Jiang Li Tao,1 -3398,7,29,Eight Thousand Nine Hundred and Fifty Seven,8957,39.png,canara,Hayden Bruce,1 -3399,21,35,Eight Thousand and Sixty Two,8062,109.png,canara,Elliot Humphreys,1 -3400,35,37,Six Thousand Nine Hundred and Twenty Eight,6928,175.png,canara,Eva Davies,1 -3401,37,22,Three Thousand Four Hundred and Sixty,3460,188.png,canara,Eglantine Forest,1 -3402,32,19,Seven Thousand and Five,7005,163.png,canara,Franรงoise Lapierre,1 -3403,41,1,Two Thousand One Hundred and Ninety Six,2196,209.png,canara,Emily D. Short,1 -3404,24,25,Three Thousand Four Hundred and Eighty Nine,3489,124.png,canara,Fleurette Coudert,1 -3405,32,13,Four Thousand Two Hundred and Seventy Three,4273,162.png,canara,Petra Kovacic,1 -3406,10,5,Six Thousand Six Hundred and Twenty One,6621,51.png,canara,Fawwaz Zuhayr Mustafa,1 -3407,2,31,Four Thousand Nine Hundred and Ninety Six,4996,14.png,canara,Naomi Grant,1 -3408,8,6,Six Hundred and Thirty Eight,638,40.png,canara,Abdul Qais Khouri,1 -3409,42,43,Three Thousand Five Hundred and Eighty Eight,3588,214.png,canara,Aruna Bekx,1 -3410,32,0,Nine Thousand Nine Hundred and Six,9906,160.png,canara,Ethel M. Bryson,1 -3411,31,31,Five Thousand and Four,5004,155.png,canara,Naomi Grant,1 -3412,5,35,Three Thousand Five Hundred and Fifty One,3551,27.png,canara,Elliot Humphreys,1 -3413,1,21,Nine Thousand Four Hundred and Ninety Seven,9497,6.png,canara,David Corbeil,1 -3414,16,24,Six Thousand Eight Hundred and Forty,6840,80.png,canara,Clarice Blanc,1 -3415,35,35,Eight Thousand Nine Hundred and Seventy Four,8974,177.png,canara,Elliot Humphreys,1 -3416,32,40,Six Thousand Seven Hundred and Thirty Nine,6739,162.png,canara,David Howard,1 -3417,28,26,Six Thousand Three Hundred,6300,141.png,canara,Sidney Lapointe,1 -3418,21,15,Two Thousand Six Hundred and Ten,2610,105.png,canara,Milenko Tkalcic,1 -3419,18,11,Five Thousand and Eighty Seven,5087,90.png,canara,Jens Egger,1 -3420,16,25,Nine Thousand Five Hundred and Fifty Five,9555,83.png,canara,Fleurette Coudert,1 -3421,6,10,Three Hundred and Sixty Five,365,32.png,canara,Stephan Schwab,1 -3422,36,39,One Thousand Nine Hundred and Twenty Eight,1928,180.png,canara,Katie Connor,1 -3423,32,9,Four Thousand and Eighty Three,4083,162.png,canara,Maria Kalb,1 -3424,17,4,Five Thousand Seven Hundred and Thirty Two,5732,85.png,canara,Wafiyah Nashwa Wasem,1 -3425,11,5,One Thousand and Ninety Nine,1099,55.png,canara,Fawwaz Zuhayr Mustafa,1 -3426,11,33,Three Thousand Eight Hundred and Eighteen,3818,56.png,canara,Eleanor Freeman,1 -3427,3,19,Nine Thousand Four Hundred and Fifty Three,9453,19.png,canara,Franรงoise Lapierre,1 -3428,7,12,One Thousand and Fifty Seven,1057,35.png,canara,Marcel Achen,1 -3429,34,12,Six Thousand Two Hundred and Thirty,6230,170.png,canara,Marcel Achen,1 -3430,3,2,One Thousand Two Hundred and Ninety Six,1296,19.png,canara,Chi Hsiao,1 -3431,43,10,Seven Thousand Nine Hundred and Ninety Seven,7997,219.png,canara,Stephan Schwab,1 -3432,18,7,Eight Thousand and Eighty Eight,8088,94.png,canara,Hasna Bahiyaa Amari,1 -3433,38,23,Six Hundred and Eighty Four,684,193.png,canara,Thรฉrรจse Fortier,1 -3434,3,0,Eight Thousand Two Hundred and Twenty Seven,8227,16.png,canara,Ethel M. Bryson,1 -3435,42,32,Three Thousand Four Hundred and Ninety,3490,213.png,canara,Chelsea Watson,1 -3436,24,29,Six Thousand Three Hundred and Forty Nine,6349,120.png,canara,Hayden Bruce,1 -3437,42,23,Eight Thousand Two Hundred and Fifteen,8215,214.png,canara,Thรฉrรจse Fortier,1 -3438,6,33,One Thousand and Sixty Six,1066,33.png,canara,Eleanor Freeman,1 -3439,16,12,One Hundred and Seventy,170,81.png,canara,Marcel Achen,1 -3440,11,42,Eight Thousand and Fifty Eight,8058,59.png,canara,Brady Jamin,1 -3441,9,25,Nine Thousand Five Hundred and Five,9505,46.png,canara,Fleurette Coudert,1 -3442,17,40,Four Thousand and Forty Five,4045,88.png,canara,David Howard,1 -3443,24,13,Two Thousand One Hundred and Eighteen,2118,122.png,canara,Petra Kovacic,1 -3444,9,24,Eight Thousand Five Hundred and Fifty Seven,8557,46.png,canara,Clarice Blanc,1 -3445,15,1,Nine Thousand Two Hundred and Eighty Two,9282,75.png,canara,Emily D. Short,1 -3446,13,38,Three Thousand One Hundred and Ninety Two,3192,68.png,canara,Freddie Reid,1 -3447,14,17,Five Thousand Five Hundred and Thirty Seven,5537,70.png,canara,Yolette Cloutier,1 -3448,7,28,Nine Thousand Three Hundred and Twelve,9312,37.png,canara,Chapin Auger,1 -3449,17,4,Six Thousand Three Hundred and Eighty Six,6386,87.png,canara,Wafiyah Nashwa Wasem,1 -3450,19,27,Eight Thousand and Fifty Nine,8059,98.png,canara,Colette Monjeau,1 -3451,23,42,One Thousand Nine Hundred and Ninety One,1991,118.png,canara,Brady Jamin,1 -3452,30,42,Eight Thousand Three Hundred and Ninety Three,8393,150.png,canara,Brady Jamin,1 -3453,27,43,Four Hundred and Twelve,412,139.png,canara,Aruna Bekx,1 -3454,26,9,One Thousand Five Hundred and Sixteen,1516,132.png,canara,Maria Kalb,1 -3455,43,6,Four Thousand One Hundred and Sixty Seven,4167,219.png,canara,Abdul Qais Khouri,1 -3456,8,32,Three Thousand Three Hundred and Sixty Six,3366,42.png,canara,Chelsea Watson,1 -3457,25,7,Four Thousand Three Hundred and Eighteen,4318,126.png,canara,Hasna Bahiyaa Amari,1 -3458,21,21,Seven Thousand Two Hundred and Thirty Eight,7238,109.png,canara,David Corbeil,1 -3459,20,21,One Thousand Seven Hundred and Twenty Two,1722,102.png,canara,David Corbeil,1 -3460,28,32,One Thousand Eight Hundred and Eight,1808,143.png,canara,Chelsea Watson,1 -3461,18,11,Four Thousand and Sixty Six,4066,94.png,canara,Jens Egger,1 -3462,43,4,Seven Thousand Six Hundred and Twenty Six,7626,217.png,canara,Wafiyah Nashwa Wasem,1 -3463,39,9,Four Thousand One Hundred and Ninety Five,4195,195.png,canara,Maria Kalb,1 -3464,32,10,Two Hundred and Seventeen,217,164.png,canara,Stephan Schwab,1 -3465,23,24,Seven Thousand Nine Hundred and Thirty Eight,7938,116.png,canara,Clarice Blanc,1 -3466,19,6,Nine Thousand Two Hundred and One,9201,97.png,canara,Abdul Qais Khouri,1 -3467,6,33,Three Thousand Seven Hundred and Forty Three,3743,33.png,canara,Eleanor Freeman,1 -3468,36,9,Four Thousand Eight Hundred and Twenty Six,4826,181.png,canara,Maria Kalb,1 -3469,41,7,Eight Thousand Nine Hundred and Fifty Five,8955,208.png,canara,Hasna Bahiyaa Amari,1 -3470,43,3,Two Hundred and Sixty Eight,268,216.png,canara,Jiang Li Tao,1 -3471,36,11,Six Thousand and Ninety Nine,6099,181.png,canara,Jens Egger,1 -3472,6,16,Two Thousand Five Hundred and Sixty Seven,2567,30.png,canara,Searlas Grenier,1 -3473,24,4,Three Thousand One Hundred and Twenty Three,3123,121.png,canara,Wafiyah Nashwa Wasem,1 -3474,6,24,One Thousand Eight Hundred and Fifteen,1815,33.png,canara,Clarice Blanc,1 -3475,42,21,One Thousand Six Hundred and Twenty Six,1626,214.png,canara,David Corbeil,1 -3476,10,21,Six Thousand Four Hundred and Thirty Six,6436,54.png,canara,David Corbeil,1 -3477,34,29,Seven Thousand Eight Hundred and Eighty Nine,7889,171.png,canara,Hayden Bruce,1 -3478,21,29,Nine Thousand Four Hundred and Thirty Three,9433,105.png,canara,Hayden Bruce,1 -3479,37,4,Six Thousand and Fifty Three,6053,187.png,canara,Wafiyah Nashwa Wasem,1 -3480,29,41,Four Thousand Five Hundred and Twenty Seven,4527,145.png,canara,Germa de Geus,1 -3481,18,24,Seven Thousand Three Hundred and Thirty Six,7336,94.png,canara,Clarice Blanc,1 -3482,7,13,Nine Thousand Seven Hundred and Ninety Five,9795,37.png,canara,Petra Kovacic,1 -3483,15,18,Two Thousand Six Hundred and Fifty,2650,75.png,canara,Edmee Pelletier,1 -3484,30,7,Five Thousand Five Hundred and Sixty Three,5563,150.png,canara,Hasna Bahiyaa Amari,1 -3485,15,32,Eight Thousand Five Hundred and Sixty Nine,8569,77.png,canara,Chelsea Watson,1 -3486,33,22,Six Thousand and Twenty Four,6024,169.png,canara,Eglantine Forest,1 -3487,13,7,One Thousand Five Hundred and Twenty,1520,67.png,canara,Hasna Bahiyaa Amari,1 -3488,34,27,Eight Thousand and Forty Two,8042,170.png,canara,Colette Monjeau,1 -3489,37,31,Four Thousand Four Hundred and Eighty Three,4483,186.png,canara,Naomi Grant,1 -3490,24,27,Eight Thousand Five Hundred and Fifty Two,8552,121.png,canara,Colette Monjeau,1 -3491,35,42,Six Thousand Five Hundred and Forty Nine,6549,175.png,canara,Brady Jamin,1 -3492,3,15,Six Thousand and Ninety Six,6096,17.png,canara,Milenko Tkalcic,1 -3493,26,19,Nine Thousand Two Hundred and Twenty,9220,130.png,canara,Franรงoise Lapierre,1 -3494,8,10,Five Thousand and Eighty Nine,5089,42.png,canara,Stephan Schwab,1 -3495,23,31,Nine Thousand Two Hundred and Seventy Seven,9277,119.png,canara,Naomi Grant,1 -3496,21,2,Three Thousand Four Hundred and Ninety Seven,3497,107.png,canara,Chi Hsiao,1 -3497,30,38,Seven Thousand Nine Hundred and Eighty Three,7983,151.png,canara,Freddie Reid,1 -3498,35,22,Three Thousand Five Hundred and Sixteen,3516,176.png,canara,Eglantine Forest,1 -3499,10,36,One Thousand Eight Hundred and Seven,1807,50.png,canara,Thomas Chapman,1 -3500,2,30,Nine Thousand Four Hundred and Forty Three,9443,12.png,canara,Jodie Holden,1 -3501,18,27,Five Thousand Three Hundred and Ninety Nine,6196,Nan,canara,Colette Monjeau,0 -3502,19,9, ,139,96.png,canara,Maria Kalb,0 -3503,12,17,One Thousand One Hundred and Thirty Eight,1647,Nan,canara,Yolette Cloutier,0 -3504,33,40, ,9518,165.png,canara,David Howard,0 -3505,7,27,Two Thousand Seven Hundred and Thirty Five, ,37.png,canara,Colette Monjeau,0 -3506,42,0,One Hundred and Thirteen, ,211.png,canara,Ethel M. Bryson,0 -3507,11,28, ,1372,55.png,canara,Chapin Auger,0 -3508,37,27,Four Thousand Two Hundred and Forty Five,5360,Nan,canara,Colette Monjeau,0 -3509,42,8, ,4486,211.png,canara,Steffen Krueger,0 -3510,38,25, ,7021,192.png,canara,Fleurette Coudert,0 -3511,14,29,Eight Hundred and Twenty Seven,8553,Nan,canara,Hayden Bruce,0 -3512,22,16,One Thousand Five Hundred and Twenty Six,1688,Nan,canara,Searlas Grenier,0 -3513,4,16,Seven Hundred and Ten,2745,Nan,canara,Searlas Grenier,0 -3514,1,28,One Thousand Two Hundred and Thirty Five,7792,Nan,canara,Chapin Auger,0 -3515,34,18,Two Thousand and Seventy Four,2325,Nan,canara,Edmee Pelletier,0 -3516,5,41,One Thousand Nine Hundred and Eighty Six,3904,Nan,canara,Germa de Geus,0 -3517,38,41,Two Hundred and Forty Eight,6957,Nan,canara,Germa de Geus,0 -3518,10,23,Six Thousand Eight Hundred and Three,7125,Nan,canara,Thรฉrรจse Fortier,0 -3519,28,36,Two Hundred and Seventy Six, ,141.png,canara,Thomas Chapman,0 -3520,38,16,Four Thousand Eight Hundred and Ninety Three, ,190.png,canara,Searlas Grenier,0 -3521,5,5,Five Thousand One Hundred and Three, ,29.png,canara,Fawwaz Zuhayr Mustafa,0 -3522,25,28,Two Thousand Four Hundred and Sixty One,3407,Nan,canara,Chapin Auger,0 -3523,33,18, ,4198,168.png,canara,Edmee Pelletier,0 -3524,36,30,Four Thousand One Hundred and Twenty Nine,7127,Nan,canara,Jodie Holden,0 -3525,13,24,Five Thousand Five Hundred and Sixty Eight,5886,Nan,canara,Clarice Blanc,0 -3526,19,32,Two Thousand One Hundred and Eighty,6006,Nan,canara,Chelsea Watson,0 -3527,20,14,Five Thousand Two Hundred, ,104.png,canara,Renata Lukic,0 -3528,16,39,Two Thousand Three Hundred and Three, ,81.png,canara,Katie Connor,0 -3529,36,32,Two Thousand Four Hundred and Sixty Eight,4179,Nan,canara,Chelsea Watson,0 -3530,17,7,One Thousand Two Hundred and Forty One,2896,Nan,canara,Hasna Bahiyaa Amari,0 -3531,11,0,Six Thousand One Hundred and Forty Eight,8827,Nan,canara,Ethel M. Bryson,0 -3532,13,21,Nine Hundred and Eighty Seven,6952,Nan,canara,David Corbeil,0 -3533,38,42,Three Thousand Two Hundred and Seventy Six,5435,Nan,canara,Brady Jamin,0 -3534,16,29,One Thousand Nine Hundred and Eighteen, ,81.png,canara,Hayden Bruce,0 -3535,13,25, ,6332,68.png,canara,Fleurette Coudert,0 -3536,24,42, ,1161,120.png,canara,Brady Jamin,0 -3537,12,19, ,8456,60.png,canara,Franรงoise Lapierre,0 -3538,6,28,Three Thousand Seven Hundred and Thirty,9799,Nan,canara,Chapin Auger,0 -3539,14,32, ,1707,73.png,canara,Chelsea Watson,0 -3540,21,38, ,8075,109.png,canara,Freddie Reid,0 -3541,21,21,Four Thousand Two Hundred and Thirty Four, ,107.png,canara,David Corbeil,0 -3542,13,6, ,2195,66.png,canara,Abdul Qais Khouri,0 -3543,13,21,Three Thousand and Ninety Four, ,67.png,canara,David Corbeil,0 -3544,26,16,Four Thousand Seven Hundred and Sixty Five, ,132.png,canara,Searlas Grenier,0 -3545,31,37,Eight Thousand Five Hundred and Eighty,8994,Nan,canara,Eva Davies,0 -3546,33,14,Two Thousand and Forty Four,4186,Nan,canara,Renata Lukic,0 -3547,18,37, ,167,94.png,canara,Eva Davies,0 -3548,38,41,Five Hundred and Thirty Six,1868,Nan,canara,Germa de Geus,0 -3549,31,28,Seven Hundred and Thirty Five, ,156.png,canara,Chapin Auger,0 -3550,0,27, ,5950,4.png,canara,Colette Monjeau,0 -3551,16,35,Three Thousand Three Hundred and Eighty Four, ,81.png,canara,Elliot Humphreys,0 -3552,14,29,Seven Thousand Eight Hundred and Sixty,8688,Nan,canara,Hayden Bruce,0 -3553,14,43,One Hundred, ,72.png,canara,Aruna Bekx,0 -3554,22,12, ,7047,113.png,canara,Marcel Achen,0 -3555,9,33,One Hundred and Ninety Eight, ,45.png,canara,Eleanor Freeman,0 -3556,25,38,Two Hundred and Fifty Eight, ,127.png,canara,Freddie Reid,0 -3557,42,20,Two Thousand Seven Hundred and Ninety Seven,5202,Nan,canara,Seymour Patenaude,0 -3558,40,30, ,7103,203.png,canara,Jodie Holden,0 -3559,20,27,One Thousand Seven Hundred and Seventeen, ,100.png,canara,Colette Monjeau,0 -3560,13,15, ,952,67.png,canara,Milenko Tkalcic,0 -3561,13,23,Ninety One,150,Nan,canara,Thรฉrรจse Fortier,0 -3562,38,38,Two Hundred and Eighty Six,7126,Nan,canara,Freddie Reid,0 -3563,17,25,Five Thousand One Hundred and Ninety Nine,8101,Nan,canara,Fleurette Coudert,0 -3564,37,25, ,2074,188.png,canara,Fleurette Coudert,0 -3565,25,34,Two Hundred and Seventy Five,884,Nan,canara,Holly Martin,0 -3566,42,37,Two Thousand Two Hundred and Ninety,6512,Nan,canara,Eva Davies,0 -3567,14,41, ,2053,70.png,canara,Germa de Geus,0 -3568,26,28, ,76,133.png,canara,Chapin Auger,0 -3569,29,11,Seven Thousand Two Hundred and Sixty Six,9907,Nan,canara,Jens Egger,0 -3570,22,10,One Hundred and Fifty One,1592,Nan,canara,Stephan Schwab,0 -3571,3,10,Seven Hundred and Sixty,1440,Nan,canara,Stephan Schwab,0 -3572,24,16,Four Thousand Two Hundred and Eighty Two,8952,Nan,canara,Searlas Grenier,0 -3573,14,31,Six Hundred and Eleven,1070,Nan,canara,Naomi Grant,0 -3574,22,38,Six Thousand One Hundred and Thirty Six, ,110.png,canara,Freddie Reid,0 -3575,3,26,Eight Hundred and Eighteen, ,15.png,canara,Sidney Lapointe,0 -3576,5,27,Three Thousand Three Hundred and Two, ,25.png,canara,Colette Monjeau,0 -3577,5,11,Three Thousand Five Hundred and Forty Seven,6226,Nan,canara,Jens Egger,0 -3578,5,9, ,9242,25.png,canara,Maria Kalb,0 -3579,2,35, ,7298,12.png,canara,Elliot Humphreys,0 -3580,23,42,Three Hundred and Sixteen, ,119.png,canara,Brady Jamin,0 -3581,41,32, ,4367,207.png,canara,Chelsea Watson,0 -3582,12,8,Three Thousand Six Hundred and Sixty Seven, ,61.png,canara,Steffen Krueger,0 -3583,40,7,Five Thousand Two Hundred and Six,8917,Nan,canara,Hasna Bahiyaa Amari,0 -3584,32,20, ,8206,164.png,canara,Seymour Patenaude,0 -3585,28,13, ,1883,144.png,canara,Petra Kovacic,0 -3586,38,26,Twelve,200,Nan,canara,Sidney Lapointe,0 -3587,25,5,Three Thousand Four Hundred and Twelve,4759,Nan,canara,Fawwaz Zuhayr Mustafa,0 -3588,3,1,Six Thousand Three Hundred and Ten, ,16.png,canara,Emily D. Short,0 -3589,1,11,One Thousand Four Hundred and Seventy,1775,Nan,canara,Jens Egger,0 -3590,19,32,Five Thousand Three Hundred and Eighty Four,5398,Nan,canara,Chelsea Watson,0 -3591,33,25,One Thousand Three Hundred and Eighty Five,2883,Nan,canara,Fleurette Coudert,0 -3592,6,11,Two Hundred and Three,7170,Nan,canara,Jens Egger,0 -3593,7,39,One Thousand Four Hundred and Eighty Six,3199,Nan,canara,Katie Connor,0 -3594,14,21,One Thousand Seven Hundred and Seventy One,7095,Nan,canara,David Corbeil,0 -3595,40,20,Two Thousand Two Hundred and Eighty,6262,Nan,canara,Seymour Patenaude,0 -3596,15,29,One Thousand Four Hundred and Two,1495,Nan,canara,Hayden Bruce,0 -3597,33,36,Five Thousand Seven Hundred and Nine, ,165.png,canara,Thomas Chapman,0 -3598,31,10,Eight Hundred and Eighty Two,2033,Nan,canara,Stephan Schwab,0 -3599,20,22,Three Thousand Eight Hundred and Thirty Three,6033,Nan,canara,Eglantine Forest,0 -3600,18,32, ,1373,92.png,canara,Chelsea Watson,0 -3601,5,10,Eight Hundred and Fifty One,1518,Nan,canara,Stephan Schwab,0 -3602,21,30,Four Hundred and Nineteen,1996,Nan,canara,Jodie Holden,0 -3603,39,7, ,5812,196.png,canara,Hasna Bahiyaa Amari,0 -3604,13,17,One Hundred and Fifty Nine, ,68.png,canara,Yolette Cloutier,0 -3605,16,3, ,3605,81.png,canara,Jiang Li Tao,0 -3606,19,2,Eight Thousand Six Hundred and Ninety Three, ,95.png,canara,Chi Hsiao,0 -3607,2,30,Five Thousand Four Hundred and Thirty Six,7519,Nan,canara,Jodie Holden,0 -3608,18,1,Two Hundred and Forty Five,1420,Nan,canara,Emily D. Short,0 -3609,41,10,Four Thousand Seven Hundred and Thirty Eight,7698,Nan,canara,Stephan Schwab,0 -3610,33,2, ,3245,165.png,canara,Chi Hsiao,0 -3611,21,6,Two Hundred and Eleven,450,Nan,canara,Abdul Qais Khouri,0 -3612,18,17,One Thousand and Ninety Seven, ,90.png,canara,Yolette Cloutier,0 -3613,12,17,Sixteen,460,Nan,canara,Yolette Cloutier,0 -3614,17,2,Four Thousand Three Hundred and Ninety Five,4945,Nan,canara,Chi Hsiao,0 -3615,11,15,One Thousand Three Hundred and Twenty Eight,1583,Nan,canara,Milenko Tkalcic,0 -3616,4,22,One Thousand Seven Hundred and Forty Eight,9754,Nan,canara,Eglantine Forest,0 -3617,33,16,Four Hundred and Seventy Nine, ,169.png,canara,Searlas Grenier,0 -3618,20,1, ,2583,103.png,canara,Emily D. Short,0 -3619,31,42, ,9028,159.png,canara,Brady Jamin,0 -3620,13,26,Five Thousand Six Hundred and Ninety Seven,7949,Nan,canara,Sidney Lapointe,0 -3621,42,28,Seven Hundred and Fifty Eight,1009,Nan,canara,Chapin Auger,0 -3622,13,6,Three Hundred and Forty Five, ,69.png,canara,Abdul Qais Khouri,0 -3623,11,20, ,6734,59.png,canara,Seymour Patenaude,0 -3624,33,42,Two Thousand Five Hundred and Seventy Four,6424,Nan,canara,Brady Jamin,0 -3625,7,14, ,29,37.png,canara,Renata Lukic,0 -3626,25,20,One Thousand Seven Hundred and Eleven,1758,Nan,canara,Seymour Patenaude,0 -3627,43,29,Nine Thousand Five Hundred and Eighty Six, ,219.png,canara,Hayden Bruce,0 -3628,30,3,One Thousand and Thirty Nine,1057,Nan,canara,Jiang Li Tao,0 -3629,7,17,Seven Hundred and Seventy Eight, ,39.png,canara,Yolette Cloutier,0 -3630,1,11,Two Thousand and Fifty Two,2858,Nan,canara,Jens Egger,0 -3631,6,40, ,3743,31.png,canara,David Howard,0 -3632,43,28,One Thousand Seven Hundred and Fifty Five,3274,Nan,canara,Chapin Auger,0 -3633,30,7,One Thousand Three Hundred, ,150.png,canara,Hasna Bahiyaa Amari,0 -3634,19,10,Fifty Six,80,Nan,canara,Stephan Schwab,0 -3635,5,16,Two Hundred and Six, ,25.png,canara,Searlas Grenier,0 -3636,40,31,One Thousand Four Hundred and Five,7373,Nan,canara,Naomi Grant,0 -3637,20,25,Six Hundred and Thirty Nine,1326,Nan,canara,Fleurette Coudert,0 -3638,8,25,Seven Thousand Seven Hundred and Eleven, ,41.png,canara,Fleurette Coudert,0 -3639,39,33,Three Hundred and Ninety Nine, ,198.png,canara,Eleanor Freeman,0 -3640,19,23,Five Thousand and Thirty Nine,5136,Nan,canara,Thรฉrรจse Fortier,0 -3641,25,12,Five Hundred and Ninety One,5830,Nan,canara,Marcel Achen,0 -3642,7,18,Seven Hundred and Eighty Six,2710,Nan,canara,Edmee Pelletier,0 -3643,8,24,Three Hundred and Forty Six, ,42.png,canara,Clarice Blanc,0 -3644,2,22,Nine Hundred and Forty,6171,Nan,canara,Eglantine Forest,0 -3645,15,42,Four Hundred and Seventy Nine,688,Nan,canara,Brady Jamin,0 -3646,11,14,Five Thousand Eight Hundred and Sixty Eight, ,57.png,canara,Renata Lukic,0 -3647,25,37,Nine Thousand Eight Hundred and Three,9975,Nan,canara,Eva Davies,0 -3648,12,25, ,967,64.png,canara,Fleurette Coudert,0 -3649,38,8,Six Thousand Eight Hundred and Sixty One,8096,Nan,canara,Steffen Krueger,0 -3650,37,34,One Thousand Nine Hundred and Ninety,5698,Nan,canara,Holly Martin,0 -3651,0,6, ,7048,3.png,canara,Abdul Qais Khouri,0 -3652,25,41,Four Thousand Eight Hundred and Twenty Five,7878,Nan,canara,Germa de Geus,0 -3653,4,31,Two Thousand Three Hundred and Sixty, ,22.png,canara,Naomi Grant,0 -3654,32,38,Four Thousand Four Hundred and Thirty Two, ,163.png,canara,Freddie Reid,0 -3655,39,21,Three Thousand and Sixty Five,4130,Nan,canara,David Corbeil,0 -3656,14,8,Two Thousand One Hundred,9996,Nan,canara,Steffen Krueger,0 -3657,24,28,Five Thousand and Eight, ,124.png,canara,Chapin Auger,0 -3658,27,19,Two Thousand Nine Hundred and Thirty, ,136.png,canara,Franรงoise Lapierre,0 -3659,40,34,Seven Thousand One Hundred and Forty One,9537,Nan,canara,Holly Martin,0 -3660,21,16,Three Thousand Three Hundred and Fifty Three, ,106.png,canara,Searlas Grenier,0 -3661,26,29,Three Thousand Nine Hundred and Twelve, ,132.png,canara,Hayden Bruce,0 -3662,40,35, ,3300,201.png,canara,Elliot Humphreys,0 -3663,8,4,Twenty Eight, ,43.png,canara,Wafiyah Nashwa Wasem,0 -3664,41,13, ,349,205.png,canara,Petra Kovacic,0 -3665,10,0,One Thousand Seven Hundred and Fifty Five, ,53.png,canara,Ethel M. Bryson,0 -3666,22,34,Six Thousand and Ninety Four,8719,Nan,canara,Holly Martin,0 -3667,34,39,One Thousand Two Hundred and Ten,2269,Nan,canara,Katie Connor,0 -3668,34,35, ,3598,174.png,canara,Elliot Humphreys,0 -3669,19,33,One Thousand Three Hundred and Seventy Four,7533,Nan,canara,Eleanor Freeman,0 -3670,27,33, ,6923,136.png,canara,Eleanor Freeman,0 -3671,39,16,Three Thousand Six Hundred and Forty Four, ,196.png,canara,Searlas Grenier,0 -3672,23,15,One Thousand Nine Hundred and Nine,2068,Nan,canara,Milenko Tkalcic,0 -3673,21,1,Three Thousand Five Hundred and Sixty Seven, ,108.png,canara,Emily D. Short,0 -3674,9,7, ,1286,48.png,canara,Hasna Bahiyaa Amari,0 -3675,32,40,Fifty Three,284,Nan,canara,David Howard,0 -3676,35,7,One Hundred and Ninety,826,Nan,canara,Hasna Bahiyaa Amari,0 -3677,26,39,Six Thousand One Hundred and Seventy Nine,8353,Nan,canara,Katie Connor,0 -3678,24,0,Seven Hundred and Eighty Six, ,124.png,canara,Ethel M. Bryson,0 -3679,24,11,Four Thousand Seven Hundred and Fifty Four, ,124.png,canara,Jens Egger,0 -3680,42,34, ,8429,212.png,canara,Holly Martin,0 -3681,32,2,Seven Hundred and Eighty Seven,4044,Nan,canara,Chi Hsiao,0 -3682,26,9, ,173,134.png,canara,Maria Kalb,0 -3683,8,32,Five Thousand Seven Hundred and Fifty Five, ,43.png,canara,Chelsea Watson,0 -3684,41,37, ,3878,206.png,canara,Eva Davies,0 -3685,15,25,Three Thousand Eight Hundred and Forty,3888,Nan,canara,Fleurette Coudert,0 -3686,41,12,One Thousand Eight Hundred and Ninety Three, ,205.png,canara,Marcel Achen,0 -3687,28,3,Two Hundred and Eighty Four, ,143.png,canara,Jiang Li Tao,0 -3688,39,6,Forty Four,320,Nan,canara,Abdul Qais Khouri,0 -3689,26,1,Two Thousand and Seven,3557,Nan,canara,Emily D. Short,0 -3690,24,23,Two Thousand Four Hundred and Ninety Eight, ,121.png,canara,Thรฉrรจse Fortier,0 -3691,32,37,One Hundred and Forty Eight,1605,Nan,canara,Eva Davies,0 -3692,31,36,Three Thousand Six Hundred and Twenty Three,9701,Nan,canara,Thomas Chapman,0 -3693,27,9,Fifteen,2721,Nan,canara,Maria Kalb,0 -3694,31,5,Two Hundred and Thirty Five, ,159.png,canara,Fawwaz Zuhayr Mustafa,0 -3695,43,27,Five Thousand Four Hundred and Seventy Three, ,217.png,canara,Colette Monjeau,0 -3696,6,0,One Thousand Seven Hundred and Fourteen,2523,Nan,canara,Ethel M. Bryson,0 -3697,15,23,Eight Hundred and Ninety Two, ,79.png,canara,Thรฉrรจse Fortier,0 -3698,30,18,Seven Hundred and Eighty Nine,7047,Nan,canara,Edmee Pelletier,0 -3699,13,42,Fifty Seven,8241,Nan,canara,Brady Jamin,0 -3700,28,30,Nine Hundred and Sixty Five,1716,Nan,canara,Jodie Holden,0 -3701,33,20,Two Thousand Thre Hundred and Twenty Two,2322,166.png,canara,Seymour Patenaude,1 -3702,24,42,Six Thousand Six Hundred and Eihty Five,6685,121.png,canara,Brady Jamin,1 -3703,25,2,Six Thousand For Hundred and Ninety Nine,6499,125.png,canara,Chi Hsiao,1 -3704,43,4,Seven Thousand Two Hundred and Twenty Eigt,7228,219.png,canara,Wafiyah Nashwa Wasem,1 -3705,10,37,Thre Thousand Two Hundred and Ninety On,3291,50.png,canara,Eva Davies,1 -3706,31,28,Eigt Hundred and Seventeen,817,155.png,canara,Chapin Auger,1 -3707,4,7,Six Thousand Six Hundred and Ninety,6690,21.png,canara,Hasna Bahiyaa Amari,1 -3708,2,9,For Thousand Two Hundred and Twenty Six,4226,12.png,canara,Maria Kalb,1 -3709,0,0,Two Thousand and Twenty Eigt,2028,2.png,canara,Ethel M. Bryson,1 -3710,43,11,Thre Thousand Six Hundred and Ninety Five,3695,217.png,canara,Jens Egger,1 -3711,23,36,Eihty On,81,116.png,canara,Thomas Chapman,1 -3712,16,9,Two Thousand For Hundred and Twenty Six,2426,84.png,canara,Maria Kalb,1 -3713,25,30,Thre Thousand and Ten,3010,125.png,canara,Jodie Holden,1 -3714,40,25,Thre Thousand Six Hundred and Sixt Five,3665,204.png,canara,Fleurette Coudert,1 -3715,2,42,Two Thousand On Hundred and Ten,2110,12.png,canara,Brady Jamin,1 -3716,36,40,Two Thousand Five Hundred and Seenty For,2574,183.png,canara,David Howard,1 -3717,23,31,Six Thousand Eigt Hundred and Foty Five,6845,115.png,canara,Naomi Grant,1 -3718,11,13,Seven Thousand On Hundred and Seenty Thre,7173,58.png,canara,Petra Kovacic,1 -3719,32,12,For Thousand Seven Hundred and Five,4705,161.png,canara,Marcel Achen,1 -3720,31,1,Five Thousand Nine Hundred and Eleven,5911,156.png,canara,Emily D. Short,1 -3721,30,27,Seven Thousand On Hundred and Ninety Thre,7193,151.png,canara,Colette Monjeau,1 -3722,28,13,For Thousand Six Hundred and Sixt Seven,4667,144.png,canara,Petra Kovacic,1 -3723,41,35,Five Thousand Five Hundred and Fifty Six,5556,208.png,canara,Elliot Humphreys,1 -3724,6,24,On Thousand Six Hundred and Fifty For,1654,31.png,canara,Clarice Blanc,1 -3725,2,35,Two Thousand Thre Hundred and Sixt Nine,2369,11.png,canara,Elliot Humphreys,1 -3726,28,34,Six Thousand On Hundred and Sxten,6116,144.png,canara,Holly Martin,1 -3727,35,26,Thre Thousand Two Hundred and Eihty On,3281,175.png,canara,Sidney Lapointe,1 -3728,28,28,Seven Thousand Seven Hundred and Foty Seven,7747,142.png,canara,Chapin Auger,1 -3729,0,41,Eigt Hundred and Sixt Six,866,1.png,canara,Germa de Geus,1 -3730,18,32,On Thousand Six Hundred and Sixt On,1661,94.png,canara,Chelsea Watson,1 -3731,7,25,For Thousand Five Hundred and Twenty For,4524,35.png,canara,Fleurette Coudert,1 -3732,37,33,Seven Thousand Eigt Hundred and Five,7805,187.png,canara,Eleanor Freeman,1 -3733,1,14,Thre Thousand Five Hundred and Eihteen,3518,5.png,canara,Renata Lukic,1 -3734,7,9,On Thousand Eigt Hundred and Fifty Nine,1859,38.png,canara,Maria Kalb,1 -3735,4,40,Eigt Thousand Nine Hundred and Ninety On,8991,22.png,canara,David Howard,1 -3736,13,4,For Thousand Six Hundred and Fifty Nine,4659,65.png,canara,Wafiyah Nashwa Wasem,1 -3737,34,40,Seven Thousand For Hundred and Eihty Five,7485,171.png,canara,David Howard,1 -3738,30,41,Nine Thousand For Hundred and Fifty On,9451,150.png,canara,Germa de Geus,1 -3739,39,0,Two Thousand and Nine,2009,196.png,canara,Ethel M. Bryson,1 -3740,39,18,Nine Hundred,900,195.png,canara,Edmee Pelletier,1 -3741,24,3,Seven Thousand Two Hundred and Fifty For,7254,124.png,canara,Jiang Li Tao,1 -3742,24,7,For Thousand Six Hundred and Thre,4603,122.png,canara,Hasna Bahiyaa Amari,1 -3743,15,16,Six Thousand Thre Hundred and Foty Thre,6343,78.png,canara,Searlas Grenier,1 -3744,7,13,Seven Thousand Nine Hundred and Thirty For,7934,35.png,canara,Petra Kovacic,1 -3745,6,25,Five Hundred and Twenty Six,526,33.png,canara,Fleurette Coudert,1 -3746,2,3,Six Thousand For Hundred and Eleven,6411,10.png,canara,Jiang Li Tao,1 -3747,14,14,Eigt Hundred and Seenty Five,875,74.png,canara,Renata Lukic,1 -3748,24,43,On Thousand Eigt Hundred and Seenty Seven,1877,122.png,canara,Aruna Bekx,1 -3749,5,18,Twenty Eigt,28,28.png,canara,Edmee Pelletier,1 -3750,41,20,Nine Thousand For Hundred and Seenty Five,9475,205.png,canara,Seymour Patenaude,1 -3751,25,9,Two Thousand Seven Hundred and Eihteen,2718,126.png,canara,Maria Kalb,1 -3752,31,5,Thre Thousand and Foty Six,3046,157.png,canara,Fawwaz Zuhayr Mustafa,1 -3753,20,32,Five Thousand Five Hundred and Sixt Five,5565,102.png,canara,Chelsea Watson,1 -3754,32,41,Nine Thousand Two Hundred and Sixt Seven,9267,163.png,canara,Germa de Geus,1 -3755,40,11,For Thousand Seven Hundred and Sixt Six,4766,201.png,canara,Jens Egger,1 -3756,27,7,Eigt Thousand For Hundred and Seenty Six,8476,138.png,canara,Hasna Bahiyaa Amari,1 -3757,25,42,Five Thousand For Hundred and Twenty On,5421,127.png,canara,Brady Jamin,1 -3758,22,24,Thre Thousand Six Hundred and Foty Two,3642,112.png,canara,Clarice Blanc,1 -3759,3,5,Six Thousand Two Hundred and Ninety Seven,6297,19.png,canara,Fawwaz Zuhayr Mustafa,1 -3760,33,20,Nine Thousand Thre Hundred and Foty Nine,9349,169.png,canara,Seymour Patenaude,1 -3761,19,18,Eigt Thousand Seven Hundred and Sixt Seven,8767,97.png,canara,Edmee Pelletier,1 -3762,5,2,Five Thousand Six Hundred and Sixt Six,5666,27.png,canara,Chi Hsiao,1 -3763,2,10,For Thousand Thre Hundred and Ninety,4390,10.png,canara,Stephan Schwab,1 -3764,20,19,On Thousand Five Hundred and Twenty Eigt,1528,100.png,canara,Franรงoise Lapierre,1 -3765,16,43,Two Thousand Eigt Hundred and Thirty Five,2835,81.png,canara,Aruna Bekx,1 -3766,16,38,Two Thousand and Ninety Thre,2093,84.png,canara,Freddie Reid,1 -3767,20,12,Six Thousand and Thirty Seven,6037,104.png,canara,Marcel Achen,1 -3768,36,0,Five Thousand Seven Hundred and Sixt Eigt,5768,181.png,canara,Ethel M. Bryson,1 -3769,15,27,Eigt Thousand Thre Hundred and Foty,8340,76.png,canara,Colette Monjeau,1 -3770,38,21,Five Hundred and Twenty Two,522,192.png,canara,David Corbeil,1 -3771,33,11,Five Thousand Seven Hundred and On,5701,166.png,canara,Jens Egger,1 -3772,37,18,For Thousand Eigt Hundred and Seenty Six,4876,186.png,canara,Edmee Pelletier,1 -3773,12,21,Seven Thousand For Hundred and Fifty On,7451,60.png,canara,David Corbeil,1 -3774,13,28,For Thousand Two Hundred and Twlve,4212,68.png,canara,Chapin Auger,1 -3775,39,11,Seven Thousand Six Hundred and Foty Eigt,7648,198.png,canara,Jens Egger,1 -3776,39,17,Nine Thousand Seven Hundred and Fifty For,9754,196.png,canara,Yolette Cloutier,1 -3777,2,24,Eigt Thousand Seven Hundred and Eihty,8780,12.png,canara,Clarice Blanc,1 -3778,23,35,Two Thousand Six Hundred and Nineten,2619,119.png,canara,Elliot Humphreys,1 -3779,5,2,Two Thousand Eigt Hundred and Fifty Seven,2857,29.png,canara,Chi Hsiao,1 -3780,1,27,Seven Thousand and Foty Eigt,7048,8.png,canara,Colette Monjeau,1 -3781,15,6,Two Thousand and Ninety Eigt,2098,76.png,canara,Abdul Qais Khouri,1 -3782,31,28,Two Thousand and Fifty Nine,2059,159.png,canara,Chapin Auger,1 -3783,38,36,Eigt Thousand On Hundred and Thirty Eigt,8138,193.png,canara,Thomas Chapman,1 -3784,38,19,Five Thousand On Hundred and Six,5106,192.png,canara,Franรงoise Lapierre,1 -3785,36,11,Five Hundred and Twenty Eigt,528,183.png,canara,Jens Egger,1 -3786,23,0,Two Thousand On Hundred and Ninety Six,2196,117.png,canara,Ethel M. Bryson,1 -3787,36,11,For Thousand Eigt Hundred and Seenty,4870,182.png,canara,Jens Egger,1 -3788,21,4,On Thousand On Hundred and Twenty Five,1125,107.png,canara,Wafiyah Nashwa Wasem,1 -3789,33,24,On Thousand Five Hundred and Seenty Eigt,1578,167.png,canara,Clarice Blanc,1 -3790,18,26,On Thousand Thre Hundred and Ninety On,1391,93.png,canara,Sidney Lapointe,1 -3791,43,3,Six Thousand Six Hundred and Twlve,6612,216.png,canara,Jiang Li Tao,1 -3792,8,8,Seven Thousand Seven Hundred and Thirty Two,7732,40.png,canara,Steffen Krueger,1 -3793,34,40,Six Thousand Six Hundred and Foty Eigt,6648,171.png,canara,David Howard,1 -3794,28,4,On Thousand Two Hundred and Thirty,1230,143.png,canara,Wafiyah Nashwa Wasem,1 -3795,4,11,On Thousand Eigt Hundred and Twenty Six,1826,22.png,canara,Jens Egger,1 -3796,10,12,Seven Thousand Thre Hundred and Ninety Five,7395,52.png,canara,Marcel Achen,1 -3797,5,3,On Hundred and Twenty Two,122,25.png,canara,Jiang Li Tao,1 -3798,39,12,Seven Thousand Eigt Hundred and Eihty Eigt,7888,196.png,canara,Marcel Achen,1 -3799,4,28,Nine Thousand Six Hundred and Fifty On,9651,23.png,canara,Chapin Auger,1 -3800,14,13,Five Thousand Seven Hundred,5700,71.png,canara,Petra Kovacic,1 -3801,14,33,Seven Thousand On Hundred and Fifty Six,7156,72.png,canara,Eleanor Freeman,1 -3802,16,21,Eigt Thousand Six Hundred and Sixt Thre,8663,84.png,canara,David Corbeil,1 -3803,31,42,For Thousand Six Hundred and Foty,4640,158.png,canara,Brady Jamin,1 -3804,17,2,On Thousand Two Hundred and Seenty Nine,1279,86.png,canara,Chi Hsiao,1 -3805,30,5,For Thousand Eigt Hundred and Thirty For,4834,153.png,canara,Fawwaz Zuhayr Mustafa,1 -3806,18,33,Five Thousand Thre Hundred and Sixt,5360,94.png,canara,Eleanor Freeman,1 -3807,15,39,Nine Hundred and Fifty On,951,78.png,canara,Katie Connor,1 -3808,12,15,Nine Hundred,900,62.png,canara,Milenko Tkalcic,1 -3809,22,11,Five Thousand Seven Hundred and Sixt Six,5766,114.png,canara,Jens Egger,1 -3810,6,5,Eigt Thousand Five Hundred and Eihty On,8581,32.png,canara,Fawwaz Zuhayr Mustafa,1 -3811,16,28,Nine Thousand Thre Hundred and Sixt For,9364,84.png,canara,Chapin Auger,1 -3812,28,3,Seven Thousand Thre Hundred and Thre,7303,142.png,canara,Jiang Li Tao,1 -3813,25,12,Five Hundred and Seenty Seven,577,127.png,canara,Marcel Achen,1 -3814,36,4,For Hundred and Thirty Thre,433,181.png,canara,Wafiyah Nashwa Wasem,1 -3815,41,8,For Thousand Seven Hundred and Ninety Seven,4797,208.png,canara,Steffen Krueger,1 -3816,15,7,Eigt Thousand Seven Hundred and Seenty Seven,8777,79.png,canara,Hasna Bahiyaa Amari,1 -3817,40,35,Eigt Thousand Two Hundred and Twenty Nine,8229,200.png,canara,Elliot Humphreys,1 -3818,5,15,Two Thousand Six Hundred and Thirty Nine,2639,25.png,canara,Milenko Tkalcic,1 -3819,4,6,Two Thousand Six Hundred and Ninety Seven,2697,24.png,canara,Abdul Qais Khouri,1 -3820,30,38,Seven Thousand Six Hundred and Eihty On,7681,152.png,canara,Freddie Reid,1 -3821,2,5,Two Hundred and Ninety Six,296,14.png,canara,Fawwaz Zuhayr Mustafa,1 -3822,20,28,For Thousand Six Hundred and Eihty Two,4682,101.png,canara,Chapin Auger,1 -3823,7,39,Seven Thousand Nine Hundred and Twenty Eigt,7928,35.png,canara,Katie Connor,1 -3824,31,2,Five Thousand On Hundred and Ninety Seven,5197,156.png,canara,Chi Hsiao,1 -3825,40,26,For Hundred and Seenty Seven,477,204.png,canara,Sidney Lapointe,1 -3826,0,14,Nine Thousand For Hundred and Twenty Five,9425,0.png,canara,Renata Lukic,1 -3827,13,11,For Thousand Two Hundred and Ninety Two,4292,68.png,canara,Jens Egger,1 -3828,5,30,Five Thousand On Hundred and Fifty Thre,5153,28.png,canara,Jodie Holden,1 -3829,2,11,For Thousand Seven Hundred and Five,4705,11.png,canara,Jens Egger,1 -3830,32,27,Seven Hundred and On,701,163.png,canara,Colette Monjeau,1 -3831,33,42,Two Hundred,200,169.png,canara,Brady Jamin,1 -3832,8,41,On Thousand Thre Hundred and Foty,1340,41.png,canara,Germa de Geus,1 -3833,42,22,Eigt Thousand and Nine,8009,212.png,canara,Eglantine Forest,1 -3834,18,42,Nine Thousand and Sixt For,9064,91.png,canara,Brady Jamin,1 -3835,36,32,Six Hundred and Sixt Nine,669,180.png,canara,Chelsea Watson,1 -3836,15,33,For Thousand Seven Hundred and Eihty On,4781,75.png,canara,Eleanor Freeman,1 -3837,19,29,Seven Thousand Six Hundred and Fifty Five,7655,95.png,canara,Hayden Bruce,1 -3838,16,36,Two Thousand Nine Hundred and Sixt Five,2965,83.png,canara,Thomas Chapman,1 -3839,19,35,Six Thousand Five Hundred and Twenty Six,6526,95.png,canara,Elliot Humphreys,1 -3840,14,16,Six Thousand Seven Hundred and Foty Eigt,6748,72.png,canara,Searlas Grenier,1 -3841,32,0,On Thousand and Two,1002,164.png,canara,Ethel M. Bryson,1 -3842,9,11,Thre Thousand Seven Hundred and Twenty On,3721,45.png,canara,Jens Egger,1 -3843,27,35,Eigt Thousand Thre Hundred and Thirty Seven,8337,137.png,canara,Elliot Humphreys,1 -3844,36,29,Six Thousand Two Hundred and On,6201,183.png,canara,Hayden Bruce,1 -3845,21,21,Nineten,19,109.png,canara,David Corbeil,1 -3846,32,19,Eigt Thousand Five Hundred and Foty Two,8542,161.png,canara,Franรงoise Lapierre,1 -3847,5,6,On Thousand Nine Hundred and Seenty Six,1976,25.png,canara,Abdul Qais Khouri,1 -3848,9,13,Five Thousand Five Hundred and Ninety Thre,5593,46.png,canara,Petra Kovacic,1 -3849,17,0,Six Thousand Seven Hundred and Twenty,6720,87.png,canara,Ethel M. Bryson,1 -3850,14,17,On Thousand Five Hundred and Foty Seven,1547,71.png,canara,Yolette Cloutier,1 -3851,6,20,For Thousand Thre Hundred and Ninety Six,4396,34.png,canara,Seymour Patenaude,1 -3852,29,39,Two Thousand Thre Hundred and Sixt Seven,2367,146.png,canara,Katie Connor,1 -3853,33,22,For Thousand Seven Hundred and Eihty Thre,4783,165.png,canara,Eglantine Forest,1 -3854,9,19,Nine Thousand Eigt Hundred and Thirty On,9831,45.png,canara,Franรงoise Lapierre,1 -3855,23,20,Two Thousand Two Hundred and Foty Five,2245,117.png,canara,Seymour Patenaude,1 -3856,36,15,Eigt Thousand Six Hundred and Sixt Seven,8667,184.png,canara,Milenko Tkalcic,1 -3857,38,33,Thre Thousand Nine Hundred and Sixt For,3964,193.png,canara,Eleanor Freeman,1 -3858,16,32,Seven Thousand Thre Hundred and Twenty Nine,7329,81.png,canara,Chelsea Watson,1 -3859,29,5,Two Hundred and Twlve,212,148.png,canara,Fawwaz Zuhayr Mustafa,1 -3860,23,35,Eigt Thousand Nine Hundred and Eihty Eigt,8988,117.png,canara,Elliot Humphreys,1 -3861,6,11,Two Thousand and Seenty Seven,2077,32.png,canara,Jens Egger,1 -3862,28,29,Seven Thousand On Hundred and Sixt Nine,7169,140.png,canara,Hayden Bruce,1 -3863,19,14,For Thousand Two Hundred and Fifty Five,4255,98.png,canara,Renata Lukic,1 -3864,4,37,Eigt Thousand Nine Hundred and Thirty Nine,8939,23.png,canara,Eva Davies,1 -3865,24,40,Thre Thousand and Eigt,3008,121.png,canara,David Howard,1 -3866,37,14,Eigt Thousand For Hundred and Twenty Five,8425,186.png,canara,Renata Lukic,1 -3867,14,2,Two Thousand Eigt Hundred and Ninety Eigt,2898,70.png,canara,Chi Hsiao,1 -3868,18,6,Thre Thousand Nine Hundred and Twenty Six,3926,92.png,canara,Abdul Qais Khouri,1 -3869,13,40,Five Thousand Nine Hundred and Foty Seven,5947,67.png,canara,David Howard,1 -3870,34,17,Thre Thousand Thre Hundred and Sixt Thre,3363,173.png,canara,Yolette Cloutier,1 -3871,43,41,Two Thousand Five Hundred and Ninety On,2591,217.png,canara,Germa de Geus,1 -3872,9,19,Thre Hundred and Eihty Eigt,388,45.png,canara,Franรงoise Lapierre,1 -3873,13,28,Eigt Thousand Thre Hundred and Foty Six,8346,68.png,canara,Chapin Auger,1 -3874,41,3,Eihty Nine,89,206.png,canara,Jiang Li Tao,1 -3875,5,27,On Thousand For Hundred and Ten,1410,27.png,canara,Colette Monjeau,1 -3876,29,37,Thre Thousand Eigt Hundred and Seenty Six,3876,146.png,canara,Eva Davies,1 -3877,40,0,Nine Thousand Five Hundred and Thirty Thre,9533,201.png,canara,Ethel M. Bryson,1 -3878,34,9,Seven Thousand Thre Hundred and Eihty Five,7385,170.png,canara,Maria Kalb,1 -3879,16,9,On Thousand For Hundred and Foty Thre,1443,82.png,canara,Maria Kalb,1 -3880,32,25,Thre Thousand Nine Hundred and Ninety Nine,3999,162.png,canara,Fleurette Coudert,1 -3881,18,16,Two Thousand Six Hundred and Sixt Nine,2669,91.png,canara,Searlas Grenier,1 -3882,34,24,Thre Thousand For Hundred and Sixt Nine,3469,172.png,canara,Clarice Blanc,1 -3883,31,26,Seven Thousand Eigt Hundred and Ten,7810,156.png,canara,Sidney Lapointe,1 -3884,3,40,Eigt Thousand and Ten,8010,17.png,canara,David Howard,1 -3885,28,33,Two Thousand Eigt Hundred and Thirty Five,2835,143.png,canara,Eleanor Freeman,1 -3886,6,5,Eigt Thousand Six Hundred and Seenty On,8671,34.png,canara,Fawwaz Zuhayr Mustafa,1 -3887,39,12,Eigt Thousand Eigt Hundred and Ninety Thre,8893,198.png,canara,Marcel Achen,1 -3888,36,2,Five Thousand Nine Hundred and Twenty Two,5922,184.png,canara,Chi Hsiao,1 -3889,24,33,Eigt Thousand and Eihty Two,8082,124.png,canara,Eleanor Freeman,1 -3890,26,4,On Thousand Seven Hundred and Ninety Thre,1793,130.png,canara,Wafiyah Nashwa Wasem,1 -3891,36,39,Two Thousand For Hundred and Twenty Eigt,2428,180.png,canara,Katie Connor,1 -3892,14,39,Eigt Thousand and Seenty Six,8076,71.png,canara,Katie Connor,1 -3893,11,4,Seven Thousand Nine Hundred and Ninety Two,7992,57.png,canara,Wafiyah Nashwa Wasem,1 -3894,13,2,Two Thousand Thre Hundred and Ninety Eigt,2398,65.png,canara,Chi Hsiao,1 -3895,33,35,Nine Thousand Five Hundred and Twenty,9520,169.png,canara,Elliot Humphreys,1 -3896,41,17,For Thousand Two Hundred and Foty,4240,208.png,canara,Yolette Cloutier,1 -3897,8,33,Six Thousand and Fifty For,6054,42.png,canara,Eleanor Freeman,1 -3898,38,18,Seven Thousand Six Hundred and Sixt,7660,194.png,canara,Edmee Pelletier,1 -3899,43,26,Seven Thousand Five Hundred and Foty Five,7545,219.png,canara,Sidney Lapointe,1 -3900,18,19,Eigt Thousand Nine Hundred and Ninety Two,8992,92.png,canara,Franรงoise Lapierre,1 -3901,30,40,Five Hundred and Five,505,152.png,canara,David Howard,1 -3902,19,21,Seven Thousand On Hundred and Sixt Eigt,7168,95.png,canara,David Corbeil,1 -3903,36,15,Thre Thousand Six Hundred and Twenty,3620,180.png,canara,Milenko Tkalcic,1 -3904,34,35,Seven Hundred and Eihteen,718,174.png,canara,Elliot Humphreys,1 -3905,15,31,Six Thousand Two Hundred and Sxten,6216,78.png,canara,Naomi Grant,1 -3906,23,29,On Thousand Seven Hundred and Seenty Nine,1779,116.png,canara,Hayden Bruce,1 -3907,33,26,For Thousand Nine Hundred and Fifty Six,4956,165.png,canara,Sidney Lapointe,1 -3908,18,14,Eigt Hundred and Eihty Five,885,91.png,canara,Renata Lukic,1 -3909,21,35,Five Thousand For Hundred and Foty For,5444,109.png,canara,Elliot Humphreys,1 -3910,8,7,Nine Thousand For Hundred and Thre,9403,44.png,canara,Hasna Bahiyaa Amari,1 -3911,28,11,Five Thousand Six Hundred and Eihty On,5681,140.png,canara,Jens Egger,1 -3912,4,25,Thre Thousand and Eihty,3080,23.png,canara,Fleurette Coudert,1 -3913,31,10,Eigt Thousand For Hundred and Forteen,8414,157.png,canara,Stephan Schwab,1 -3914,21,39,Six Thousand and Foty Six,6046,108.png,canara,Katie Connor,1 -3915,20,7,Five Thousand and Sixt Five,5065,103.png,canara,Hasna Bahiyaa Amari,1 -3916,3,32,Five Thousand and Eihty For,5084,16.png,canara,Chelsea Watson,1 -3917,24,2,Nine Thousand Nine Hundred and Thirty Nine,9939,122.png,canara,Chi Hsiao,1 -3918,32,22,Six Thousand Eigt Hundred and Fifty On,6851,164.png,canara,Eglantine Forest,1 -3919,34,22,Eigt Thousand Eigt Hundred and Thirty On,8831,172.png,canara,Eglantine Forest,1 -3920,25,10,Five Thousand Nine Hundred and Ninety Thre,5993,125.png,canara,Stephan Schwab,1 -3921,42,20,For Thousand Seven Hundred and Foty Five,4745,214.png,canara,Seymour Patenaude,1 -3922,39,31,Thre Thousand Nine Hundred and Fifty For,3954,199.png,canara,Naomi Grant,1 -3923,18,42,Two Thousand Five Hundred and Ninety For,2594,94.png,canara,Brady Jamin,1 -3924,3,10,Eigt Thousand Six Hundred and Thirty Nine,8639,18.png,canara,Stephan Schwab,1 -3925,4,29,Nine Thousand Nine Hundred and Ninety,9990,24.png,canara,Hayden Bruce,1 -3926,5,32,Thre Thousand Six Hundred and Eihty Seven,3687,25.png,canara,Chelsea Watson,1 -3927,13,36,Five Thousand Nine Hundred and Thirty For,5934,68.png,canara,Thomas Chapman,1 -3928,3,34,Nine Thousand Five Hundred and Twenty For,9524,17.png,canara,Holly Martin,1 -3929,1,41,Eigt Thousand Eigt Hundred and Foty Eigt,8848,8.png,canara,Germa de Geus,1 -3930,36,14,Eigt Hundred and Sixt Five,865,182.png,canara,Renata Lukic,1 -3931,6,15,Five Thousand Six Hundred and Seenty Eigt,5678,30.png,canara,Milenko Tkalcic,1 -3932,29,22,Six Thousand On Hundred and Seven,6107,146.png,canara,Eglantine Forest,1 -3933,37,19,Seven Thousand Nine Hundred and Ten,7910,186.png,canara,Franรงoise Lapierre,1 -3934,31,35,Thre Thousand and Sixt,3060,155.png,canara,Elliot Humphreys,1 -3935,22,0,Two Thousand Seven Hundred and Eleven,2711,110.png,canara,Ethel M. Bryson,1 -3936,8,4,Seven Hundred and Foty On,741,44.png,canara,Wafiyah Nashwa Wasem,1 -3937,20,10,For Thousand Six Hundred and Foty Two,4642,103.png,canara,Stephan Schwab,1 -3938,25,16,Two Thousand On Hundred and Seenty On,2171,125.png,canara,Searlas Grenier,1 -3939,13,27,Five Thousand For Hundred and Sixt,5460,67.png,canara,Colette Monjeau,1 -3940,21,24,Five Thousand On Hundred and Nine,5109,108.png,canara,Clarice Blanc,1 -3941,42,6,For Thousand Six Hundred and Eihty,4680,212.png,canara,Abdul Qais Khouri,1 -3942,41,25,Nine Thousand Two Hundred and Thirty Eigt,9238,205.png,canara,Fleurette Coudert,1 -3943,16,14,Nine Thousand Six Hundred and Seenty,9670,82.png,canara,Renata Lukic,1 -3944,6,4,Nine Thousand and Fifty Two,9052,34.png,canara,Wafiyah Nashwa Wasem,1 -3945,38,36,Five Thousand Seven Hundred and Foty Six,5746,193.png,canara,Thomas Chapman,1 -3946,35,22,Thre Hundred and Thirteen,313,178.png,canara,Eglantine Forest,1 -3947,39,6,On Thousand Five Hundred and Eihty Five,1585,196.png,canara,Abdul Qais Khouri,1 -3948,21,4,Five Hundred and Twenty Nine,529,106.png,canara,Wafiyah Nashwa Wasem,1 -3949,18,20,Six Hundred and Foty For,644,91.png,canara,Seymour Patenaude,1 -3950,38,39,Seven Thousand Six Hundred and Eihteen,7618,191.png,canara,Katie Connor,1 -3951,2,12,For Thousand On Hundred and Foty For,4144,14.png,canara,Marcel Achen,1 -3952,17,40,For Thousand Nine Hundred and Eihty Thre,4983,89.png,canara,David Howard,1 -3953,3,39,Five Thousand Eigt Hundred and Fifty Seven,5857,18.png,canara,Katie Connor,1 -3954,9,22,Thre Thousand Seven Hundred and Seenty On,3771,45.png,canara,Eglantine Forest,1 -3955,23,8,Nine Thousand For Hundred and Eihty On,9481,119.png,canara,Steffen Krueger,1 -3956,38,39,For Thousand Five Hundred and Seenty,4570,192.png,canara,Katie Connor,1 -3957,29,18,Nine Thousand Nine Hundred and Thirty Nine,9939,149.png,canara,Edmee Pelletier,1 -3958,5,12,For Thousand Eigt Hundred and Ten,4810,26.png,canara,Marcel Achen,1 -3959,4,19,Six Thousand On Hundred and Foty Eigt,6148,20.png,canara,Franรงoise Lapierre,1 -3960,33,9,For Hundred and Ninety Nine,499,167.png,canara,Maria Kalb,1 -3961,14,38,Five Thousand Nine Hundred and Ninety Five,5995,73.png,canara,Freddie Reid,1 -3962,29,2,Eigt Thousand For Hundred and Sixt Nine,8469,145.png,canara,Chi Hsiao,1 -3963,36,28,On Thousand and Foty On,1041,180.png,canara,Chapin Auger,1 -3964,26,18,Thre Thousand Eigt Hundred and Seenty Six,3876,133.png,canara,Edmee Pelletier,1 -3965,24,13,For Thousand Thre Hundred and Fifty Six,4356,124.png,canara,Petra Kovacic,1 -3966,26,39,Five Thousand On Hundred and Foty Seven,5147,133.png,canara,Katie Connor,1 -3967,33,24,Two Thousand Five Hundred and Twenty Seven,2527,166.png,canara,Clarice Blanc,1 -3968,21,40,Seven Thousand For Hundred and Sixt Five,7465,106.png,canara,David Howard,1 -3969,43,18,Five Thousand On Hundred and Foty Seven,5147,216.png,canara,Edmee Pelletier,1 -3970,23,28,Five Thousand On Hundred and Thirty Five,5135,117.png,canara,Chapin Auger,1 -3971,34,15,Thre Thousand Two Hundred and Seenty Six,3276,172.png,canara,Milenko Tkalcic,1 -3972,25,35,Eigt Thousand Thre Hundred and Eihty Nine,8389,129.png,canara,Elliot Humphreys,1 -3973,40,4,Thre Thousand Five Hundred and Foty Five,3545,200.png,canara,Wafiyah Nashwa Wasem,1 -3974,16,39,Two Thousand On Hundred and Twenty On,2121,81.png,canara,Katie Connor,1 -3975,13,11,For Thousand Nine Hundred and Ninety Nine,4999,69.png,canara,Jens Egger,1 -3976,30,15,Five Thousand Six Hundred and Twenty Thre,5623,152.png,canara,Milenko Tkalcic,1 -3977,12,31,Nine Thousand Seven Hundred and Fifty For,9754,64.png,canara,Naomi Grant,1 -3978,26,11,Nine Thousand Six Hundred and Nine,9609,130.png,canara,Jens Egger,1 -3979,40,2,Eigt Thousand Seven Hundred and Seenty Seven,8777,201.png,canara,Chi Hsiao,1 -3980,6,32,Thre Thousand On Hundred and Thirty For,3134,31.png,canara,Chelsea Watson,1 -3981,24,6,Seven Thousand and Thirty On,7031,122.png,canara,Abdul Qais Khouri,1 -3982,36,34,Seven Thousand Thre Hundred and Fifty,7350,181.png,canara,Holly Martin,1 -3983,18,24,Six Thousand Nine Hundred and Fifty Eigt,6958,94.png,canara,Clarice Blanc,1 -3984,8,37,Two Thousand Six Hundred and Fifty Seven,2657,42.png,canara,Eva Davies,1 -3985,0,28,Six Thousand Five Hundred and Eihty On,6581,0.png,canara,Chapin Auger,1 -3986,7,3,For Thousand On Hundred and Sixt Seven,4167,36.png,canara,Jiang Li Tao,1 -3987,6,4,Nine Thousand For Hundred and Twenty,9420,31.png,canara,Wafiyah Nashwa Wasem,1 -3988,14,19,Two Thousand On Hundred and Foty For,2144,72.png,canara,Franรงoise Lapierre,1 -3989,39,21,For Thousand Thre Hundred and On,4301,196.png,canara,David Corbeil,1 -3990,0,21,Thre Thousand Two Hundred and Eihty For,3284,1.png,canara,David Corbeil,1 -3991,31,21,Thre Thousand and Twlve,3012,158.png,canara,David Corbeil,1 -3992,8,41,Five Thousand Seven Hundred and Ninety On,5791,43.png,canara,Germa de Geus,1 -3993,30,9,Eigt Thousand On Hundred and Seenty Seven,8177,150.png,canara,Maria Kalb,1 -3994,19,10,Eigt Thousand Six Hundred and Fifty Seven,8657,98.png,canara,Stephan Schwab,1 -3995,8,5,Eigt Thousand Eigt Hundred and Fifty Seven,8857,43.png,canara,Fawwaz Zuhayr Mustafa,1 -3996,34,38,Six Thousand Nine Hundred and Ninety,6990,172.png,canara,Freddie Reid,1 -3997,36,11,Eigt Hundred and Sixt,860,184.png,canara,Jens Egger,1 -3998,14,15,Eigt Thousand For Hundred and Sixt Six,8466,73.png,canara,Milenko Tkalcic,1 -3999,19,15,Six Hundred and Ninety For,694,95.png,canara,Milenko Tkalcic,1 -4000,4,16,Five Thousand Five Hundred and Fifty Seven,5557,20.png,canara,Searlas Grenier,1 -4001,24,23,Four Thousand Nine Hundred and Fifty Five,4955,124.png,HSBC,Thรฉrรจse Fortier,1 -4002,31,35,Seven Thousand Seven Hundred and Five,7705,155.png,HSBC,Elliot Humphreys,1 -4003,8,31,Nine Thousand Five Hundred and Ninety Seven,9597,42.png,HSBC,Naomi Grant,1 -4004,11,39,One Thousand Six Hundred and Thirty Two,1632,55.png,HSBC,Katie Connor,1 -4005,35,36,Four Thousand and Thirty Six,4036,175.png,HSBC,Thomas Chapman,1 -4006,3,3,Nine Thousand Six Hundred and Sixty Eight,9668,19.png,HSBC,Jiang Li Tao,1 -4007,18,19,Seven Thousand Two Hundred and Seventy One,7271,92.png,HSBC,Franรงoise Lapierre,1 -4008,26,30,Six Thousand Three Hundred and Twenty,6320,132.png,HSBC,Jodie Holden,1 -4009,32,30,Five Thousand Three Hundred and Fifty Eight,5358,161.png,HSBC,Jodie Holden,1 -4010,43,40,Seven Thousand Six Hundred and Seventy One,7671,219.png,HSBC,David Howard,1 -4011,27,21,Seven Thousand Eight Hundred and Ninety Two,7892,137.png,HSBC,David Corbeil,1 -4012,9,34,Eight Thousand Four Hundred and Twenty Nine,8429,49.png,HSBC,Holly Martin,1 -4013,43,26,Two Thousand Five Hundred and Four,2504,219.png,HSBC,Sidney Lapointe,1 -4014,42,40,Two Thousand Four Hundred and Ninety Seven,2497,214.png,HSBC,David Howard,1 -4015,6,21,Two Thousand Two Hundred and Eighteen,2218,31.png,HSBC,David Corbeil,1 -4016,30,39,Seven Thousand Five Hundred and One,7501,154.png,HSBC,Katie Connor,1 -4017,5,38,Six Hundred and Sixty Two,662,28.png,HSBC,Freddie Reid,1 -4018,30,41,Three Thousand Five Hundred and Sixty Five,3565,153.png,HSBC,Germa de Geus,1 -4019,22,10,Two Thousand and Twenty Four,2024,111.png,HSBC,Stephan Schwab,1 -4020,21,9,Two Thousand Seven Hundred and Fifty Nine,2759,107.png,HSBC,Maria Kalb,1 -4021,11,29,Eight Thousand Seven Hundred and Forty One,8741,57.png,HSBC,Hayden Bruce,1 -4022,15,30,Eight Thousand One Hundred and Twenty Eight,8128,75.png,HSBC,Jodie Holden,1 -4023,1,43,Two Thousand Four Hundred and Sixty Nine,2469,7.png,HSBC,Aruna Bekx,1 -4024,26,6,Seven Thousand Eight Hundred and Ninety Seven,7897,131.png,HSBC,Abdul Qais Khouri,1 -4025,1,42,One Thousand Five Hundred and Sixty Seven,1567,8.png,HSBC,Brady Jamin,1 -4026,28,11,Three Thousand Eight Hundred and Forty Five,3845,142.png,HSBC,Jens Egger,1 -4027,3,2,Four Hundred and Six,406,18.png,HSBC,Chi Hsiao,1 -4028,39,20,One Thousand Three Hundred and Forty Three,1343,195.png,HSBC,Seymour Patenaude,1 -4029,8,25,Seven Thousand One Hundred and Fourteen,7114,44.png,HSBC,Fleurette Coudert,1 -4030,40,41,Six Thousand Two Hundred and Forty One,6241,204.png,HSBC,Germa de Geus,1 -4031,25,5,Nine Thousand Seven Hundred and Ninety One,9791,125.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4032,14,14,Five Hundred and Seventy Two,572,72.png,HSBC,Renata Lukic,1 -4033,27,20,Eight Thousand Seven Hundred and Eighty Four,8784,135.png,HSBC,Seymour Patenaude,1 -4034,35,1,Six Thousand Six Hundred and Eighteen,6618,176.png,HSBC,Emily D. Short,1 -4035,2,39,Six Hundred and Thirty Six,636,10.png,HSBC,Katie Connor,1 -4036,14,32,Five Thousand One Hundred and Ten,5110,72.png,HSBC,Chelsea Watson,1 -4037,41,18,Eight Hundred and Sixteen,816,209.png,HSBC,Edmee Pelletier,1 -4038,26,37,Nine Thousand Nine Hundred and Twenty Three,9923,133.png,HSBC,Eva Davies,1 -4039,2,19,Seven Thousand One Hundred and Forty Eight,7148,14.png,HSBC,Franรงoise Lapierre,1 -4040,43,30,Five Thousand Nine Hundred and Twenty One,5921,217.png,HSBC,Jodie Holden,1 -4041,25,33,Three Thousand Nine Hundred and Ninety Three,3993,129.png,HSBC,Eleanor Freeman,1 -4042,36,29,Three Thousand Two Hundred and Seventeen,3217,181.png,HSBC,Hayden Bruce,1 -4043,14,14,Four Thousand Three Hundred and Eighteen,4318,71.png,HSBC,Renata Lukic,1 -4044,35,24,Four Thousand Seven Hundred and Twenty,4720,175.png,HSBC,Clarice Blanc,1 -4045,28,40,Five Thousand and Ninety,5090,142.png,HSBC,David Howard,1 -4046,30,13,Three Hundred and Eighty Nine,389,150.png,HSBC,Petra Kovacic,1 -4047,15,12,Eight Thousand One Hundred and Sixty Eight,8168,78.png,HSBC,Marcel Achen,1 -4048,31,25,Seven Thousand Eight Hundred and Sixty Seven,7867,159.png,HSBC,Fleurette Coudert,1 -4049,25,21,Three Thousand Seven Hundred and Nine,3709,128.png,HSBC,David Corbeil,1 -4050,27,3,One Thousand Two Hundred and Ninety Three,1293,139.png,HSBC,Jiang Li Tao,1 -4051,24,4,One Thousand Four Hundred and Sixteen,1416,124.png,HSBC,Wafiyah Nashwa Wasem,1 -4052,1,13,Seven Thousand Nine Hundred and Thirty Three,7933,5.png,HSBC,Petra Kovacic,1 -4053,8,39,Four Thousand Nine Hundred and Thirty Seven,4937,41.png,HSBC,Katie Connor,1 -4054,15,30,One Thousand Seven Hundred and Ninety,1790,78.png,HSBC,Jodie Holden,1 -4055,14,3,Six Thousand Eight Hundred and Eighty Three,6883,73.png,HSBC,Jiang Li Tao,1 -4056,11,14,Seven Thousand One Hundred and Ninety Three,7193,58.png,HSBC,Renata Lukic,1 -4057,16,9,Seven Hundred and Fifty Two,752,81.png,HSBC,Maria Kalb,1 -4058,4,27,Eight Thousand and Seventy Two,8072,23.png,HSBC,Colette Monjeau,1 -4059,39,3,Three Thousand Two Hundred and Nine,3209,195.png,HSBC,Jiang Li Tao,1 -4060,6,6,Five Thousand Eight Hundred and Fifty Six,5856,32.png,HSBC,Abdul Qais Khouri,1 -4061,36,37,Five Thousand Five Hundred and Fifty Five,5555,182.png,HSBC,Eva Davies,1 -4062,41,39,Three Thousand Nine Hundred and Sixty Six,3966,208.png,HSBC,Katie Connor,1 -4063,36,38,Four Thousand Nine Hundred and Thirty Eight,4938,184.png,HSBC,Freddie Reid,1 -4064,39,29,Eight Thousand Four Hundred and Sixty Four,8464,199.png,HSBC,Hayden Bruce,1 -4065,30,7,Six Thousand Three Hundred and Fifty Six,6356,150.png,HSBC,Hasna Bahiyaa Amari,1 -4066,23,18,Three Thousand Nine Hundred and Four,3904,115.png,HSBC,Edmee Pelletier,1 -4067,29,9,Seven Thousand Five Hundred and Fifteen,7515,148.png,HSBC,Maria Kalb,1 -4068,23,34,Eight Thousand Nine Hundred and Ninety Seven,8997,117.png,HSBC,Holly Martin,1 -4069,32,35,Eight Thousand Nine Hundred and Four,8904,164.png,HSBC,Elliot Humphreys,1 -4070,29,22,Three Hundred and Twenty Five,325,149.png,HSBC,Eglantine Forest,1 -4071,26,35,Seven Thousand Nine Hundred and Twenty Nine,7929,134.png,HSBC,Elliot Humphreys,1 -4072,3,0,Seven Thousand One Hundred and Thirty One,7131,18.png,HSBC,Ethel M. Bryson,1 -4073,12,27,Nine Thousand Two Hundred and Seventy Seven,9277,61.png,HSBC,Colette Monjeau,1 -4074,7,38,Four Thousand Seven Hundred and Fifty Seven,4757,37.png,HSBC,Freddie Reid,1 -4075,28,19,Nine Thousand Five Hundred and Sixty Five,9565,141.png,HSBC,Franรงoise Lapierre,1 -4076,2,23,One Thousand Three Hundred and Ninety Nine,1399,14.png,HSBC,Thรฉrรจse Fortier,1 -4077,42,15,Six Thousand and Thirteen,6013,211.png,HSBC,Milenko Tkalcic,1 -4078,2,20,One Thousand Seven Hundred and Ninety Nine,1799,14.png,HSBC,Seymour Patenaude,1 -4079,26,14,Three Thousand Eight Hundred and Ninety Eight,3898,130.png,HSBC,Renata Lukic,1 -4080,34,4,Two Thousand Five Hundred and Eighty,2580,171.png,HSBC,Wafiyah Nashwa Wasem,1 -4081,1,41,Nine Thousand Three Hundred and Twenty,9320,5.png,HSBC,Germa de Geus,1 -4082,27,22,Eight Thousand One Hundred and Eighty Two,8182,139.png,HSBC,Eglantine Forest,1 -4083,31,34,Six Hundred and Fifty Two,652,155.png,HSBC,Holly Martin,1 -4084,10,5,Five Thousand Four Hundred and Eighty Three,5483,53.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4085,10,31,Seven Thousand Two Hundred and One,7201,52.png,HSBC,Naomi Grant,1 -4086,0,24,Nine Thousand and Seventy Two,9072,2.png,HSBC,Clarice Blanc,1 -4087,5,25,One Thousand Four Hundred and Sixty Six,1466,25.png,HSBC,Fleurette Coudert,1 -4088,24,31,Nine Hundred and Fifty Two,952,124.png,HSBC,Naomi Grant,1 -4089,40,7,Four Thousand Two Hundred and Ninety,4290,204.png,HSBC,Hasna Bahiyaa Amari,1 -4090,17,28,Eight Thousand One Hundred and Thirty,8130,88.png,HSBC,Chapin Auger,1 -4091,20,7,Two Thousand Six Hundred and Fifty Seven,2657,104.png,HSBC,Hasna Bahiyaa Amari,1 -4092,12,40,One Thousand Four Hundred and Ninety One,1491,61.png,HSBC,David Howard,1 -4093,12,12,Two Thousand Six Hundred and Fifty,2650,64.png,HSBC,Marcel Achen,1 -4094,8,42,One Hundred and Eighteen,118,40.png,HSBC,Brady Jamin,1 -4095,32,20,Nine Thousand Four Hundred and Fifty Four,9454,161.png,HSBC,Seymour Patenaude,1 -4096,12,6,Four Thousand Eight Hundred and Sixteen,4816,62.png,HSBC,Abdul Qais Khouri,1 -4097,23,34,Six Thousand Eight Hundred and Thirty Six,6836,118.png,HSBC,Holly Martin,1 -4098,43,33,Two Thousand Nine Hundred,2900,215.png,HSBC,Eleanor Freeman,1 -4099,19,16,Six Thousand Nine Hundred and Twenty Three,6923,99.png,HSBC,Searlas Grenier,1 -4100,15,17,Four Thousand Nine Hundred and Thirty Three,4933,76.png,HSBC,Yolette Cloutier,1 -4101,24,2,Nine Thousand Nine Hundred and Fifty Six,9956,124.png,HSBC,Chi Hsiao,1 -4102,11,23,One Thousand Four Hundred and Eighty Four,1484,57.png,HSBC,Thรฉrรจse Fortier,1 -4103,20,26,Nine Thousand Five Hundred and Fourteen,9514,101.png,HSBC,Sidney Lapointe,1 -4104,16,28,Five Thousand Nine Hundred and Thirty Five,5935,81.png,HSBC,Chapin Auger,1 -4105,7,20,Seven Thousand Three Hundred and Ten,7310,37.png,HSBC,Seymour Patenaude,1 -4106,17,28,Four Thousand Four Hundred and Twenty Three,4423,87.png,HSBC,Chapin Auger,1 -4107,1,19,Nine Thousand and Fifty Two,9052,9.png,HSBC,Franรงoise Lapierre,1 -4108,1,36,Nine Thousand One Hundred and Eighty,9180,5.png,HSBC,Thomas Chapman,1 -4109,23,15,Eight Thousand Six Hundred and Forty Nine,8649,119.png,HSBC,Milenko Tkalcic,1 -4110,34,11,Four Thousand One Hundred and Fifty Two,4152,174.png,HSBC,Jens Egger,1 -4111,31,34,Six Thousand Three Hundred and Ninety Eight,6398,157.png,HSBC,Holly Martin,1 -4112,14,1,Four Thousand Three Hundred and Twenty Two,4322,72.png,HSBC,Emily D. Short,1 -4113,0,17,Five Thousand Nine Hundred and Sixty Seven,5967,1.png,HSBC,Yolette Cloutier,1 -4114,42,12,Nine Thousand Seven Hundred and Twenty Seven,9727,212.png,HSBC,Marcel Achen,1 -4115,38,7,Nine Thousand Nine Hundred and Fifty Seven,9957,190.png,HSBC,Hasna Bahiyaa Amari,1 -4116,9,19,Six Thousand Four Hundred and Twenty Two,6422,48.png,HSBC,Franรงoise Lapierre,1 -4117,9,23,Eight Thousand One Hundred and Seventy Four,8174,45.png,HSBC,Thรฉrรจse Fortier,1 -4118,11,19,Four Thousand One Hundred and Fifty Two,4152,55.png,HSBC,Franรงoise Lapierre,1 -4119,10,30,Eight Hundred and Sixty Nine,869,53.png,HSBC,Jodie Holden,1 -4120,38,14,Two Hundred and Eighty One,281,192.png,HSBC,Renata Lukic,1 -4121,14,37,One Hundred and Eighty Two,182,72.png,HSBC,Eva Davies,1 -4122,21,25,Four Thousand Six Hundred and Thirty Nine,4639,109.png,HSBC,Fleurette Coudert,1 -4123,13,9,Three Thousand Seven Hundred and Ninety Seven,3797,65.png,HSBC,Maria Kalb,1 -4124,16,0,Four Thousand Seven Hundred and Thirty Eight,4738,83.png,HSBC,Ethel M. Bryson,1 -4125,1,13,Two Thousand Eight Hundred and Ninety Eight,2898,7.png,HSBC,Petra Kovacic,1 -4126,36,36,Nine Hundred and Eighty One,981,184.png,HSBC,Thomas Chapman,1 -4127,9,20,Seven Thousand Five Hundred and Ninety Seven,7597,45.png,HSBC,Seymour Patenaude,1 -4128,41,40,Seven Thousand Four Hundred and Eighty Seven,7487,209.png,HSBC,David Howard,1 -4129,41,34,Nine Thousand Six Hundred and Twenty One,9621,206.png,HSBC,Holly Martin,1 -4130,16,24,Nine Hundred and Seventeen,917,84.png,HSBC,Clarice Blanc,1 -4131,0,21,Six Hundred and Eighty Seven,687,3.png,HSBC,David Corbeil,1 -4132,13,6,Five Thousand Three Hundred and Seventy Two,5372,69.png,HSBC,Abdul Qais Khouri,1 -4133,15,17,Three Thousand Five Hundred and Fifty Three,3553,78.png,HSBC,Yolette Cloutier,1 -4134,16,15,Nine Thousand Six Hundred and Forty Seven,9647,81.png,HSBC,Milenko Tkalcic,1 -4135,29,31,Six Thousand Four Hundred and Twenty,6420,147.png,HSBC,Naomi Grant,1 -4136,7,36,Three Hundred and Seventy Seven,377,36.png,HSBC,Thomas Chapman,1 -4137,37,22,Five Thousand One Hundred and Twenty One,5121,187.png,HSBC,Eglantine Forest,1 -4138,38,28,Six Thousand Nine Hundred and Eighty,6980,194.png,HSBC,Chapin Auger,1 -4139,27,1,Three Thousand One Hundred and Seventy One,3171,136.png,HSBC,Emily D. Short,1 -4140,39,18,Seven Thousand Two Hundred and Thirty One,7231,197.png,HSBC,Edmee Pelletier,1 -4141,31,39,Seven Thousand Six Hundred and Forty Seven,7647,157.png,HSBC,Katie Connor,1 -4142,10,12,Nine Thousand and Twenty Two,9022,51.png,HSBC,Marcel Achen,1 -4143,9,23,Four Thousand Four Hundred and Sixty Five,4465,49.png,HSBC,Thรฉrรจse Fortier,1 -4144,32,1,Five Thousand Eight Hundred and Seventy One,5871,162.png,HSBC,Emily D. Short,1 -4145,42,21,Four Thousand Two Hundred and Forty,4240,211.png,HSBC,David Corbeil,1 -4146,26,26,Nine Thousand Seven Hundred and Fifty Five,9755,132.png,HSBC,Sidney Lapointe,1 -4147,25,5,Two Thousand Two Hundred and Forty Nine,2249,127.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4148,8,26,Seven Thousand Nine Hundred and Twenty Seven,7927,41.png,HSBC,Sidney Lapointe,1 -4149,2,14,Eight Thousand Two Hundred and Seventy Six,8276,10.png,HSBC,Renata Lukic,1 -4150,37,37,Five Thousand Five Hundred and Forty Six,5546,186.png,HSBC,Eva Davies,1 -4151,22,22,Three Thousand One Hundred and Forty Three,3143,114.png,HSBC,Eglantine Forest,1 -4152,43,27,Two Thousand One Hundred and Twenty Four,2124,216.png,HSBC,Colette Monjeau,1 -4153,22,15,Two Thousand Seven Hundred and Eighty,2780,114.png,HSBC,Milenko Tkalcic,1 -4154,3,6,Nine Hundred and Sixty Six,966,17.png,HSBC,Abdul Qais Khouri,1 -4155,7,32,Two Hundred and Eighty Six,286,39.png,HSBC,Chelsea Watson,1 -4156,32,24,One Thousand Seven Hundred and Ninety,1790,164.png,HSBC,Clarice Blanc,1 -4157,28,9,Seven Thousand Three Hundred and Five,7305,140.png,HSBC,Maria Kalb,1 -4158,11,26,Five Thousand Five Hundred and Sixty Two,5562,58.png,HSBC,Sidney Lapointe,1 -4159,24,27,Seven Thousand and Six,7006,123.png,HSBC,Colette Monjeau,1 -4160,19,11,Six Thousand Six Hundred and Seventy,6670,96.png,HSBC,Jens Egger,1 -4161,20,21,Six Thousand Three Hundred and Seven,6307,103.png,HSBC,David Corbeil,1 -4162,43,30,Three Thousand Six Hundred and Thirty Eight,3638,219.png,HSBC,Jodie Holden,1 -4163,20,38,Three Thousand Two Hundred and Thirty Four,3234,101.png,HSBC,Freddie Reid,1 -4164,25,19,Three Thousand Three Hundred and Seventy One,3371,126.png,HSBC,Franรงoise Lapierre,1 -4165,35,30,Eight Thousand and Sixty Four,8064,177.png,HSBC,Jodie Holden,1 -4166,36,15,Four Thousand Nine Hundred and Ninety Six,4996,181.png,HSBC,Milenko Tkalcic,1 -4167,25,36,Three Thousand Eight Hundred and Forty One,3841,128.png,HSBC,Thomas Chapman,1 -4168,13,30,Eight Thousand One Hundred and Nine,8109,68.png,HSBC,Jodie Holden,1 -4169,26,5,Eight Thousand Five Hundred and Forty Nine,8549,132.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4170,7,43,Six Thousand Eight Hundred and Forty Six,6846,39.png,HSBC,Aruna Bekx,1 -4171,43,39,Six Hundred and Eighteen,618,219.png,HSBC,Katie Connor,1 -4172,25,23,Two Thousand Eight Hundred and Fourteen,2814,127.png,HSBC,Thรฉrรจse Fortier,1 -4173,40,12,Two Thousand Two Hundred and Seventy Two,2272,204.png,HSBC,Marcel Achen,1 -4174,0,28,One Thousand Five Hundred and Nineteen,1519,3.png,HSBC,Chapin Auger,1 -4175,20,17,Five Thousand Three Hundred and One,5301,102.png,HSBC,Yolette Cloutier,1 -4176,40,4,Seven Thousand Three Hundred and Seventy Two,7372,203.png,HSBC,Wafiyah Nashwa Wasem,1 -4177,2,42,Three Thousand Two Hundred and Thirty Two,3232,12.png,HSBC,Brady Jamin,1 -4178,39,8,Seven Thousand Eight Hundred and Forty Four,7844,199.png,HSBC,Steffen Krueger,1 -4179,4,15,Four Thousand Six Hundred and Twenty,4620,24.png,HSBC,Milenko Tkalcic,1 -4180,39,19,Seven Thousand Eight Hundred and Five,7805,195.png,HSBC,Franรงoise Lapierre,1 -4181,7,20,Ninety One,91,39.png,HSBC,Seymour Patenaude,1 -4182,33,0,Six Thousand and Eleven,6011,167.png,HSBC,Ethel M. Bryson,1 -4183,42,24,Eight Thousand Nine Hundred and Thirty Nine,8939,214.png,HSBC,Clarice Blanc,1 -4184,43,4,Six Thousand One Hundred and Ninety Three,6193,219.png,HSBC,Wafiyah Nashwa Wasem,1 -4185,22,11,Two Thousand Five Hundred and Seventy Seven,2577,111.png,HSBC,Jens Egger,1 -4186,13,13,Four Thousand Eight Hundred and Sixty Five,4865,67.png,HSBC,Petra Kovacic,1 -4187,14,2,Six Thousand Five Hundred and Ninety Four,6594,71.png,HSBC,Chi Hsiao,1 -4188,30,27,Eight Thousand Nine Hundred and Eighty Seven,8987,152.png,HSBC,Colette Monjeau,1 -4189,31,12,One Thousand Five Hundred and Fifty,1550,157.png,HSBC,Marcel Achen,1 -4190,18,1,Four Thousand One Hundred and Seventy Eight,4178,91.png,HSBC,Emily D. Short,1 -4191,20,27,Three Thousand Two Hundred and Thirty Nine,3239,104.png,HSBC,Colette Monjeau,1 -4192,8,29,Six Thousand and Thirty Five,6035,41.png,HSBC,Hayden Bruce,1 -4193,19,26,Eight Thousand Nine Hundred and Eighty Two,8982,95.png,HSBC,Sidney Lapointe,1 -4194,34,39,Eight Thousand Eight Hundred and Forty,8840,174.png,HSBC,Katie Connor,1 -4195,40,36,Five Thousand One Hundred and Twenty,5120,200.png,HSBC,Thomas Chapman,1 -4196,39,10,Seven Thousand and Fifty,7050,195.png,HSBC,Stephan Schwab,1 -4197,12,23,Two Thousand Eight Hundred and Forty Nine,2849,61.png,HSBC,Thรฉrรจse Fortier,1 -4198,24,32,Seven Thousand Five Hundred and Sixty One,7561,121.png,HSBC,Chelsea Watson,1 -4199,14,21,Seven Thousand One Hundred and Seven,7107,70.png,HSBC,David Corbeil,1 -4200,40,0,Nine Thousand Five Hundred and Twenty One,9521,204.png,HSBC,Ethel M. Bryson,1 -4201,21,35,Three Thousand and Sixty Seven,3067,109.png,HSBC,Elliot Humphreys,1 -4202,38,9,Eight Thousand Two Hundred and Eleven,8211,194.png,HSBC,Maria Kalb,1 -4203,36,37,One Thousand One Hundred and Twenty Seven,1127,184.png,HSBC,Eva Davies,1 -4204,29,3,Five Thousand Five Hundred and Twenty Two,5522,147.png,HSBC,Jiang Li Tao,1 -4205,22,28,Three Thousand Five Hundred and Three,3503,114.png,HSBC,Chapin Auger,1 -4206,7,6,Five Thousand Two Hundred and Thirteen,5213,37.png,HSBC,Abdul Qais Khouri,1 -4207,2,15,Four Thousand Four Hundred and Fifty Two,4452,11.png,HSBC,Milenko Tkalcic,1 -4208,29,28,Eight Thousand Three Hundred and Fifteen,8315,148.png,HSBC,Chapin Auger,1 -4209,5,30,Six Thousand Seven Hundred and Eighty Nine,6789,25.png,HSBC,Jodie Holden,1 -4210,27,27,Seven Thousand Five Hundred and Twenty Nine,7529,139.png,HSBC,Colette Monjeau,1 -4211,1,37,Two Thousand Five Hundred and Eighty,2580,7.png,HSBC,Eva Davies,1 -4212,5,3,Four Thousand Four Hundred and Thirty One,4431,26.png,HSBC,Jiang Li Tao,1 -4213,6,28,Six Thousand Five Hundred and Four,6504,31.png,HSBC,Chapin Auger,1 -4214,2,6,Four Thousand Seven Hundred and Seventy One,4771,14.png,HSBC,Abdul Qais Khouri,1 -4215,21,35,Five Thousand Two Hundred and Eighty Five,5285,106.png,HSBC,Elliot Humphreys,1 -4216,35,29,Four Thousand Nine Hundred and Seventy Three,4973,179.png,HSBC,Hayden Bruce,1 -4217,38,9,Two Thousand Three Hundred and Twenty Two,2322,194.png,HSBC,Maria Kalb,1 -4218,26,27,Five Thousand Three Hundred and Fifteen,5315,132.png,HSBC,Colette Monjeau,1 -4219,7,9,Eight Thousand Four Hundred and Forty Two,8442,36.png,HSBC,Maria Kalb,1 -4220,30,12,Nine Thousand Seven Hundred and Sixty Four,9764,150.png,HSBC,Marcel Achen,1 -4221,38,41,One Thousand One Hundred and Ninety Two,1192,190.png,HSBC,Germa de Geus,1 -4222,12,17,Six Thousand Eight Hundred and Fifty One,6851,60.png,HSBC,Yolette Cloutier,1 -4223,25,14,Four Thousand Five Hundred and Sixty Three,4563,125.png,HSBC,Renata Lukic,1 -4224,32,2,Nine Thousand Eight Hundred and Eleven,9811,164.png,HSBC,Chi Hsiao,1 -4225,12,41,Nine Thousand Two Hundred and Sixty,9260,64.png,HSBC,Germa de Geus,1 -4226,23,35,Five Hundred and Fifty Four,554,116.png,HSBC,Elliot Humphreys,1 -4227,41,18,Six Thousand Four Hundred and Seventy Four,6474,207.png,HSBC,Edmee Pelletier,1 -4228,10,39,One Thousand Six Hundred and Fifty Three,1653,51.png,HSBC,Katie Connor,1 -4229,19,13,Six Thousand Three Hundred and Eighty Seven,6387,99.png,HSBC,Petra Kovacic,1 -4230,5,37,Six Thousand Three Hundred and Ninety Nine,6399,28.png,HSBC,Eva Davies,1 -4231,33,36,Five Thousand Four Hundred and Twenty,5420,168.png,HSBC,Thomas Chapman,1 -4232,11,11,Eight Thousand One Hundred and Twenty Two,8122,58.png,HSBC,Jens Egger,1 -4233,33,24,Three Thousand Eight Hundred and Thirty Five,3835,165.png,HSBC,Clarice Blanc,1 -4234,14,7,Three Thousand Six Hundred and Nine,3609,70.png,HSBC,Hasna Bahiyaa Amari,1 -4235,32,23,Seven Thousand Two Hundred and Forty Six,7246,162.png,HSBC,Thรฉrรจse Fortier,1 -4236,34,2,Nine Thousand Eight Hundred and Thirty Nine,9839,171.png,HSBC,Chi Hsiao,1 -4237,25,37,One Thousand Three Hundred and Fifty Four,1354,125.png,HSBC,Eva Davies,1 -4238,43,3,Six Thousand Two Hundred and Ten,6210,216.png,HSBC,Jiang Li Tao,1 -4239,9,10,Three Thousand Seven Hundred and Eighty Six,3786,45.png,HSBC,Stephan Schwab,1 -4240,28,8,Four Thousand Eight Hundred and Twenty,4820,141.png,HSBC,Steffen Krueger,1 -4241,9,2,Nine Thousand Five Hundred and Eighty Seven,9587,47.png,HSBC,Chi Hsiao,1 -4242,16,41,Two Thousand Five Hundred and Seven,2507,84.png,HSBC,Germa de Geus,1 -4243,41,13,One Thousand Nine Hundred and Forty Five,1945,206.png,HSBC,Petra Kovacic,1 -4244,41,41,Ten,10,207.png,HSBC,Germa de Geus,1 -4245,19,6,Five Hundred and Seven,507,99.png,HSBC,Abdul Qais Khouri,1 -4246,8,29,Five Thousand Seven Hundred and Ninety,5790,44.png,HSBC,Hayden Bruce,1 -4247,28,43,Eight Thousand Five Hundred and Fourteen,8514,141.png,HSBC,Aruna Bekx,1 -4248,5,19,Eight Thousand Nine Hundred and Seventy Four,8974,29.png,HSBC,Franรงoise Lapierre,1 -4249,14,40,Two Thousand Nine Hundred and Forty Seven,2947,70.png,HSBC,David Howard,1 -4250,31,39,Three Thousand and Eighty Three,3083,155.png,HSBC,Katie Connor,1 -4251,2,26,Five Thousand Three Hundred and Seventy Seven,5377,11.png,HSBC,Sidney Lapointe,1 -4252,35,3,Nine Thousand Two Hundred and Eighty Six,9286,179.png,HSBC,Jiang Li Tao,1 -4253,19,17,One Thousand Nine Hundred and Six,1906,98.png,HSBC,Yolette Cloutier,1 -4254,23,6,Four Thousand Nine Hundred and Eighty,4980,118.png,HSBC,Abdul Qais Khouri,1 -4255,25,25,One Thousand One Hundred,1100,129.png,HSBC,Fleurette Coudert,1 -4256,21,25,Six Thousand Six Hundred and Eighty Two,6682,109.png,HSBC,Fleurette Coudert,1 -4257,37,33,One Thousand Five Hundred and Seventy Nine,1579,187.png,HSBC,Eleanor Freeman,1 -4258,35,42,Five Thousand Eight Hundred and Thirty Nine,5839,178.png,HSBC,Brady Jamin,1 -4259,6,27,Three Thousand One Hundred and Fifty Six,3156,31.png,HSBC,Colette Monjeau,1 -4260,19,8,Three Thousand Five Hundred and Fourteen,3514,95.png,HSBC,Steffen Krueger,1 -4261,29,21,Five Thousand Five Hundred and Sixty Eight,5568,145.png,HSBC,David Corbeil,1 -4262,43,19,Eight Thousand Four Hundred and Sixty One,8461,218.png,HSBC,Franรงoise Lapierre,1 -4263,24,2,Four Thousand Nine Hundred and Seventy Eight,4978,121.png,HSBC,Chi Hsiao,1 -4264,35,9,Eight Thousand Three Hundred and Eighty Six,8386,176.png,HSBC,Maria Kalb,1 -4265,29,34,Three Hundred and Fifty Nine,359,145.png,HSBC,Holly Martin,1 -4266,37,20,Six Thousand One Hundred and Seventeen,6117,185.png,HSBC,Seymour Patenaude,1 -4267,27,14,Four Thousand One Hundred and Sixty Two,4162,136.png,HSBC,Renata Lukic,1 -4268,39,22,One Thousand Nine Hundred and Forty Four,1944,196.png,HSBC,Eglantine Forest,1 -4269,3,15,Two Thousand Five Hundred and Ten,2510,15.png,HSBC,Milenko Tkalcic,1 -4270,38,34,One Thousand Nine Hundred and Eighty,1980,190.png,HSBC,Holly Martin,1 -4271,0,7,Eight Thousand Three Hundred and Sixty Nine,8369,2.png,HSBC,Hasna Bahiyaa Amari,1 -4272,13,31,Seven Thousand Two Hundred and Five,7205,68.png,HSBC,Naomi Grant,1 -4273,21,4,Nine Thousand Seven Hundred and Eighty Eight,9788,105.png,HSBC,Wafiyah Nashwa Wasem,1 -4274,12,3,Nine Thousand Five Hundred and Forty Three,9543,64.png,HSBC,Jiang Li Tao,1 -4275,16,17,Four Thousand One Hundred and Ninety Five,4195,82.png,HSBC,Yolette Cloutier,1 -4276,39,8,Four Thousand Five Hundred and Eighty Two,4582,196.png,HSBC,Steffen Krueger,1 -4277,22,5,Eight Thousand One Hundred and Twenty Seven,8127,110.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4278,35,3,Eight Thousand Eight Hundred and Fifty Three,8853,175.png,HSBC,Jiang Li Tao,1 -4279,33,18,One Hundred and Fifty Five,155,167.png,HSBC,Edmee Pelletier,1 -4280,34,30,Three Thousand Four Hundred and Thirty One,3431,172.png,HSBC,Jodie Holden,1 -4281,19,13,Seven Thousand Four Hundred and Twenty Three,7423,98.png,HSBC,Petra Kovacic,1 -4282,39,42,Four Thousand Four Hundred and Twenty Nine,4429,195.png,HSBC,Brady Jamin,1 -4283,1,1,Five Thousand Five Hundred and Fifty Eight,5558,6.png,HSBC,Emily D. Short,1 -4284,6,32,Six Thousand Six Hundred and Sixty Three,6663,33.png,HSBC,Chelsea Watson,1 -4285,16,39,Two Thousand Five Hundred and Sixty Nine,2569,83.png,HSBC,Katie Connor,1 -4286,7,33,Nine Thousand Nine Hundred and Eighteen,9918,35.png,HSBC,Eleanor Freeman,1 -4287,23,20,Nine Thousand Six Hundred and Eighty Four,9684,115.png,HSBC,Seymour Patenaude,1 -4288,31,33,Four Thousand and Eighty Three,4083,156.png,HSBC,Eleanor Freeman,1 -4289,22,13,Two Thousand Two Hundred and Sixty Six,2266,111.png,HSBC,Petra Kovacic,1 -4290,31,28,Five Thousand Five Hundred and Forty Five,5545,159.png,HSBC,Chapin Auger,1 -4291,24,8,Three Thousand One Hundred and Ninety One,3191,120.png,HSBC,Steffen Krueger,1 -4292,2,2,Eight Thousand Two Hundred and Sixty Three,8263,11.png,HSBC,Chi Hsiao,1 -4293,26,3,Four Hundred and Twenty Three,423,134.png,HSBC,Jiang Li Tao,1 -4294,37,34,Four Thousand Four Hundred and Seventy Four,4474,185.png,HSBC,Holly Martin,1 -4295,32,34,Nine Thousand Two Hundred and Eighty Three,9283,164.png,HSBC,Holly Martin,1 -4296,1,2,Five Thousand Two Hundred and Twenty Eight,5228,5.png,HSBC,Chi Hsiao,1 -4297,31,17,Four Thousand Four Hundred and Ninety Eight,4498,159.png,HSBC,Yolette Cloutier,1 -4298,24,19,Nine Thousand Nine Hundred and Twenty Eight,9928,122.png,HSBC,Franรงoise Lapierre,1 -4299,2,18,One Thousand One Hundred and Ninety Three,1193,12.png,HSBC,Edmee Pelletier,1 -4300,26,21,Three Thousand Nine Hundred and Eighty Seven,3987,131.png,HSBC,David Corbeil,1 -4301,40,20,Nine Thousand Five Hundred and Fifty Six,9556,204.png,HSBC,Seymour Patenaude,1 -4302,34,20,Five Thousand Eight Hundred and Forty Eight,5848,171.png,HSBC,Seymour Patenaude,1 -4303,34,9,Two Thousand Four Hundred and Thirty Seven,2437,173.png,HSBC,Maria Kalb,1 -4304,6,8,Three Thousand Nine Hundred and Seventy Four,3974,34.png,HSBC,Steffen Krueger,1 -4305,3,7,Five Thousand Seven Hundred and Fifty Six,5756,16.png,HSBC,Hasna Bahiyaa Amari,1 -4306,25,7,Six Thousand Three Hundred and Eighteen,6318,127.png,HSBC,Hasna Bahiyaa Amari,1 -4307,31,29,Nine Thousand Eight Hundred and Seventy Seven,9877,159.png,HSBC,Hayden Bruce,1 -4308,25,37,Four Thousand and Twenty One,4021,128.png,HSBC,Eva Davies,1 -4309,16,13,Eight Thousand and Eight,8008,80.png,HSBC,Petra Kovacic,1 -4310,10,13,Six Thousand One Hundred and Eighty Seven,6187,51.png,HSBC,Petra Kovacic,1 -4311,27,3,Four Thousand Five Hundred and Ninety One,4591,138.png,HSBC,Jiang Li Tao,1 -4312,28,31,Four Thousand Three Hundred and Four,4304,142.png,HSBC,Naomi Grant,1 -4313,6,30,Six Thousand Seven Hundred and Thirty Two,6732,30.png,HSBC,Jodie Holden,1 -4314,6,16,Five Hundred and Forty Four,544,33.png,HSBC,Searlas Grenier,1 -4315,18,16,Nine Thousand Eight Hundred and Eleven,9811,93.png,HSBC,Searlas Grenier,1 -4316,36,18,Nine Thousand One Hundred and Sixty One,9161,180.png,HSBC,Edmee Pelletier,1 -4317,33,11,Three Thousand and Thirteen,3013,166.png,HSBC,Jens Egger,1 -4318,36,17,Three Thousand One Hundred and Thirty Five,3135,182.png,HSBC,Yolette Cloutier,1 -4319,18,24,Three Thousand Four Hundred and Seventy Four,3474,94.png,HSBC,Clarice Blanc,1 -4320,37,10,Three Thousand One Hundred and Thirty One,3131,186.png,HSBC,Stephan Schwab,1 -4321,21,10,Four Thousand Nine Hundred and Eighty One,4981,105.png,HSBC,Stephan Schwab,1 -4322,15,4,Four Thousand Seven Hundred and Forty Nine,4749,79.png,HSBC,Wafiyah Nashwa Wasem,1 -4323,9,4,Nine Hundred and Twenty One,921,47.png,HSBC,Wafiyah Nashwa Wasem,1 -4324,6,24,Three Thousand Six Hundred and Twelve,3612,34.png,HSBC,Clarice Blanc,1 -4325,32,18,Six Thousand Eight Hundred and Ninety Seven,6897,160.png,HSBC,Edmee Pelletier,1 -4326,39,41,Nine Thousand Six Hundred and Thirteen,9613,198.png,HSBC,Germa de Geus,1 -4327,8,15,One Thousand Three Hundred and Nineteen,1319,40.png,HSBC,Milenko Tkalcic,1 -4328,15,22,Nine Thousand Six Hundred and Eighteen,9618,76.png,HSBC,Eglantine Forest,1 -4329,10,0,Nine Thousand Four Hundred and Ninety Four,9494,52.png,HSBC,Ethel M. Bryson,1 -4330,32,34,Five Thousand Three Hundred and Eighty Three,5383,164.png,HSBC,Holly Martin,1 -4331,16,24,Two Thousand One Hundred and Sixty Seven,2167,83.png,HSBC,Clarice Blanc,1 -4332,38,23,Five Hundred and Seventy Four,574,191.png,HSBC,Thรฉrรจse Fortier,1 -4333,25,23,Seven Thousand One Hundred and Sixty Six,7166,129.png,HSBC,Thรฉrรจse Fortier,1 -4334,40,23,Two Thousand Nine Hundred and Fifty Three,2953,204.png,HSBC,Thรฉrรจse Fortier,1 -4335,27,40,Nine Thousand and Seventy Seven,9077,138.png,HSBC,David Howard,1 -4336,16,10,One Thousand Six Hundred and Eighty,1680,83.png,HSBC,Stephan Schwab,1 -4337,17,10,Five Thousand Two Hundred and Eighty One,5281,86.png,HSBC,Stephan Schwab,1 -4338,43,26,Two Thousand Seven Hundred and Eighty Seven,2787,216.png,HSBC,Sidney Lapointe,1 -4339,17,24,Eight Thousand Three Hundred and Sixteen,8316,89.png,HSBC,Clarice Blanc,1 -4340,29,29,Four Thousand Six Hundred and Five,4605,146.png,HSBC,Hayden Bruce,1 -4341,12,23,One Thousand Nine Hundred and Fifty,1950,64.png,HSBC,Thรฉrรจse Fortier,1 -4342,35,21,Six Hundred and Seventy Seven,677,179.png,HSBC,David Corbeil,1 -4343,27,0,One Hundred and Seventy Six,176,135.png,HSBC,Ethel M. Bryson,1 -4344,8,36,Four Thousand Four Hundred and Five,4405,40.png,HSBC,Thomas Chapman,1 -4345,16,29,Nine Thousand Four Hundred and Twenty Six,9426,82.png,HSBC,Hayden Bruce,1 -4346,33,4,Five Thousand Six Hundred and Twenty One,5621,169.png,HSBC,Wafiyah Nashwa Wasem,1 -4347,7,1,One Thousand Three Hundred and Seventy Four,1374,38.png,HSBC,Emily D. Short,1 -4348,8,23,Five Thousand Eight Hundred and Forty Four,5844,44.png,HSBC,Thรฉrรจse Fortier,1 -4349,18,9,Five Hundred and Sixty Five,565,91.png,HSBC,Maria Kalb,1 -4350,29,6,Six Thousand Five Hundred and Eighty Seven,6587,146.png,HSBC,Abdul Qais Khouri,1 -4351,24,1,Six Hundred and Fifty Three,653,122.png,HSBC,Emily D. Short,1 -4352,31,36,Eight Thousand Nine Hundred and Fifteen,8915,157.png,HSBC,Thomas Chapman,1 -4353,22,13,Nine Thousand Four Hundred and Thirty Eight,9438,110.png,HSBC,Petra Kovacic,1 -4354,19,35,Two Thousand Four Hundred and Six,2406,99.png,HSBC,Elliot Humphreys,1 -4355,14,1,Seven Thousand Four Hundred and Thirty Two,7432,71.png,HSBC,Emily D. Short,1 -4356,37,13,Five Thousand Four Hundred and Forty Two,5442,187.png,HSBC,Petra Kovacic,1 -4357,28,21,Five Thousand One Hundred and Eighteen,5118,142.png,HSBC,David Corbeil,1 -4358,21,27,Three Thousand Five Hundred and Seventeen,3517,105.png,HSBC,Colette Monjeau,1 -4359,8,25,Five Thousand Seven Hundred and Twenty Five,5725,44.png,HSBC,Fleurette Coudert,1 -4360,7,1,Nine Thousand Two Hundred and Sixty,9260,37.png,HSBC,Emily D. Short,1 -4361,42,27,Four Hundred and Fifty,450,212.png,HSBC,Colette Monjeau,1 -4362,30,33,Seven Thousand Eight Hundred and Thirty Three,7833,152.png,HSBC,Eleanor Freeman,1 -4363,24,18,Eight Thousand Five Hundred and Forty Nine,8549,121.png,HSBC,Edmee Pelletier,1 -4364,26,24,Three Thousand Seven Hundred and Forty Four,3744,132.png,HSBC,Clarice Blanc,1 -4365,28,26,Five Hundred and Twenty Nine,529,140.png,HSBC,Sidney Lapointe,1 -4366,11,10,Eight Thousand Six Hundred and Eighty Five,8685,55.png,HSBC,Stephan Schwab,1 -4367,31,25,Seven Thousand Three Hundred and Seventy Nine,7379,159.png,HSBC,Fleurette Coudert,1 -4368,9,31,Seven Hundred and Eighty,780,48.png,HSBC,Naomi Grant,1 -4369,5,28,Nine Thousand Six Hundred and Fifty Nine,9659,27.png,HSBC,Chapin Auger,1 -4370,18,28,Nine Thousand Four Hundred and Eight,9408,92.png,HSBC,Chapin Auger,1 -4371,1,43,Two Thousand Five Hundred and Seventeen,2517,9.png,HSBC,Aruna Bekx,1 -4372,15,17,Three Thousand Eight Hundred and Fifty Five,3855,75.png,HSBC,Yolette Cloutier,1 -4373,32,0,Four Thousand Eight Hundred and Eighty Six,4886,164.png,HSBC,Ethel M. Bryson,1 -4374,6,34,Four Thousand Three Hundred and Fifty Five,4355,33.png,HSBC,Holly Martin,1 -4375,29,15,Eight Thousand Two Hundred and Forty Seven,8247,147.png,HSBC,Milenko Tkalcic,1 -4376,33,7,One Thousand and Eight,1008,165.png,HSBC,Hasna Bahiyaa Amari,1 -4377,17,38,One Thousand Two Hundred and Thirty Three,1233,85.png,HSBC,Freddie Reid,1 -4378,12,27,One Hundred and Fourteen,114,62.png,HSBC,Colette Monjeau,1 -4379,39,10,Three Thousand Three Hundred and Forty One,3341,197.png,HSBC,Stephan Schwab,1 -4380,15,43,Seven Thousand Six Hundred and Eighty,7680,79.png,HSBC,Aruna Bekx,1 -4381,18,7,Two Thousand Eight Hundred and Twenty Eight,2828,93.png,HSBC,Hasna Bahiyaa Amari,1 -4382,38,4,Two Thousand Four Hundred and Twenty One,2421,193.png,HSBC,Wafiyah Nashwa Wasem,1 -4383,8,1,Four Thousand Two Hundred and Eighty Six,4286,41.png,HSBC,Emily D. Short,1 -4384,36,31,Six Thousand Seven Hundred and Seventy Two,6772,180.png,HSBC,Naomi Grant,1 -4385,35,36,Nine Thousand Six Hundred and Seventy Two,9672,178.png,HSBC,Thomas Chapman,1 -4386,35,41,Three Thousand Nine Hundred and Fifty Five,3955,179.png,HSBC,Germa de Geus,1 -4387,35,10,One Thousand Three Hundred and Fifty Six,1356,179.png,HSBC,Stephan Schwab,1 -4388,5,13,Six Thousand Two Hundred and Sixty,6260,28.png,HSBC,Petra Kovacic,1 -4389,35,18,Eight Thousand One Hundred and Sixty Eight,8168,176.png,HSBC,Edmee Pelletier,1 -4390,1,0,Nine Thousand Five Hundred and Six,9506,8.png,HSBC,Ethel M. Bryson,1 -4391,38,3,Nine Thousand One Hundred and Sixty Six,9166,193.png,HSBC,Jiang Li Tao,1 -4392,40,13,Eight Thousand Nine Hundred and Thirty Five,8935,200.png,HSBC,Petra Kovacic,1 -4393,13,43,Nine Thousand One Hundred and Eighteen,9118,66.png,HSBC,Aruna Bekx,1 -4394,14,26,Two Thousand Seven Hundred and Fifty Eight,2758,71.png,HSBC,Sidney Lapointe,1 -4395,11,5,Two Thousand Eight Hundred and Forty Seven,2847,58.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4396,24,4,Four Thousand Four Hundred and Three,4403,123.png,HSBC,Wafiyah Nashwa Wasem,1 -4397,15,32,One Thousand Seven Hundred and Five,1705,79.png,HSBC,Chelsea Watson,1 -4398,28,1,Six Thousand Six Hundred and Eighty Six,6686,142.png,HSBC,Emily D. Short,1 -4399,34,32,Four Thousand One Hundred and Thirty Five,4135,174.png,HSBC,Chelsea Watson,1 -4400,11,27,Five Hundred and Seventy Six,576,58.png,HSBC,Colette Monjeau,1 -4401,16,9,One Thousand Nine Hundred and Fifty Five,1955,81.png,HSBC,Maria Kalb,1 -4402,35,9,Nine Thousand One Hundred and Sixty Seven,9167,177.png,HSBC,Maria Kalb,1 -4403,43,26,One Thousand Nine Hundred and Eighty One,1981,215.png,HSBC,Sidney Lapointe,1 -4404,10,18,One Thousand Four Hundred and Eighty Eight,1488,52.png,HSBC,Edmee Pelletier,1 -4405,35,34,Five Hundred and Fifty Three,553,178.png,HSBC,Holly Martin,1 -4406,32,22,Six Thousand and Eighty Eight,6088,160.png,HSBC,Eglantine Forest,1 -4407,36,8,Six Thousand and Ninety,6090,181.png,HSBC,Steffen Krueger,1 -4408,20,39,Nine Thousand and Eighty One,9081,100.png,HSBC,Katie Connor,1 -4409,35,42,Six Thousand Nine Hundred and Twenty Seven,6927,178.png,HSBC,Brady Jamin,1 -4410,34,33,Five Thousand One Hundred and Sixty One,5161,171.png,HSBC,Eleanor Freeman,1 -4411,17,22,Thirty Six,36,89.png,HSBC,Eglantine Forest,1 -4412,12,33,Seven Thousand One Hundred and Forty Eight,7148,64.png,HSBC,Eleanor Freeman,1 -4413,28,10,Two Thousand Eight Hundred and Seventy Six,2876,143.png,HSBC,Stephan Schwab,1 -4414,29,26,One Thousand Seven Hundred and Twenty,1720,148.png,HSBC,Sidney Lapointe,1 -4415,11,30,Eight Thousand Nine Hundred and Eighty Nine,8989,55.png,HSBC,Jodie Holden,1 -4416,18,33,Nine Thousand and Eighteen,9018,94.png,HSBC,Eleanor Freeman,1 -4417,20,12,Seven Thousand One Hundred and Ninety Six,7196,104.png,HSBC,Marcel Achen,1 -4418,40,28,Four Thousand One Hundred and Eighty Nine,4189,200.png,HSBC,Chapin Auger,1 -4419,21,29,Eight Thousand Seven Hundred and Seventy Six,8776,107.png,HSBC,Hayden Bruce,1 -4420,32,15,Five Thousand Five Hundred and Fifty Six,5556,160.png,HSBC,Milenko Tkalcic,1 -4421,31,1,One Thousand Seven Hundred and Forty Four,1744,159.png,HSBC,Emily D. Short,1 -4422,34,14,Four Hundred and Sixty Two,462,172.png,HSBC,Renata Lukic,1 -4423,26,10,Seven Thousand Five Hundred and Fifty,7550,130.png,HSBC,Stephan Schwab,1 -4424,42,41,One Thousand One Hundred and Six,1106,213.png,HSBC,Germa de Geus,1 -4425,10,9,Six Thousand Six Hundred and Ninety Six,6696,51.png,HSBC,Maria Kalb,1 -4426,40,33,Three Thousand One Hundred and Eighty Seven,3187,203.png,HSBC,Eleanor Freeman,1 -4427,0,11,Six Thousand Seven Hundred and Five,6705,0.png,HSBC,Jens Egger,1 -4428,33,27,Nine Thousand One Hundred and Seventeen,9117,167.png,HSBC,Colette Monjeau,1 -4429,22,8,Seven Thousand and Ninety Four,7094,111.png,HSBC,Steffen Krueger,1 -4430,43,11,Four Thousand Eight Hundred and Twenty Eight,4828,217.png,HSBC,Jens Egger,1 -4431,23,43,Five Thousand Five Hundred and Forty Seven,5547,116.png,HSBC,Aruna Bekx,1 -4432,35,31,Two Thousand Seven Hundred and Sixty,2760,178.png,HSBC,Naomi Grant,1 -4433,41,0,Three Thousand and Fifty Six,3056,205.png,HSBC,Ethel M. Bryson,1 -4434,43,7,Four Thousand Three Hundred and Eighty Eight,4388,215.png,HSBC,Hasna Bahiyaa Amari,1 -4435,19,31,Three Thousand Six Hundred and Ninety,3690,95.png,HSBC,Naomi Grant,1 -4436,31,12,Nine Thousand and Fifty One,9051,157.png,HSBC,Marcel Achen,1 -4437,22,30,Four Thousand Five Hundred and Fifty Three,4553,111.png,HSBC,Jodie Holden,1 -4438,9,5,Three Thousand One Hundred and Ninety,3190,45.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4439,13,8,Seven Thousand One Hundred,7100,65.png,HSBC,Steffen Krueger,1 -4440,2,29,Four Hundred and Ninety Three,493,11.png,HSBC,Hayden Bruce,1 -4441,30,16,Eight Thousand and Eighty Seven,8087,150.png,HSBC,Searlas Grenier,1 -4442,29,27,Four Thousand Six Hundred and Ninety Six,4696,148.png,HSBC,Colette Monjeau,1 -4443,31,34,Six Thousand Three Hundred,6300,158.png,HSBC,Holly Martin,1 -4444,3,40,Five Thousand Two Hundred and Seventy Five,5275,15.png,HSBC,David Howard,1 -4445,5,7,Eight Thousand Two Hundred and Ninety One,8291,27.png,HSBC,Hasna Bahiyaa Amari,1 -4446,1,7,Two Hundred and Seventy Seven,277,7.png,HSBC,Hasna Bahiyaa Amari,1 -4447,2,22,Four Thousand Nine Hundred and Eighty Three,4983,11.png,HSBC,Eglantine Forest,1 -4448,5,9,Five Thousand Eight Hundred and Eighty Three,5883,29.png,HSBC,Maria Kalb,1 -4449,39,17,Three Thousand Three Hundred and Seven,3307,199.png,HSBC,Yolette Cloutier,1 -4450,1,7,Three Thousand and Five,3005,8.png,HSBC,Hasna Bahiyaa Amari,1 -4451,31,31,Six Thousand Seven Hundred and Twenty Two,6722,159.png,HSBC,Naomi Grant,1 -4452,14,41,Nine Hundred and Forty Two,942,72.png,HSBC,Germa de Geus,1 -4453,16,34,Four Thousand Two Hundred and Thirty One,4231,84.png,HSBC,Holly Martin,1 -4454,18,16,Two Thousand Five Hundred and Eighty Five,2585,91.png,HSBC,Searlas Grenier,1 -4455,11,13,Nine Thousand Five Hundred and Fifty Nine,9559,59.png,HSBC,Petra Kovacic,1 -4456,26,25,Fifty Nine,59,134.png,HSBC,Fleurette Coudert,1 -4457,5,9,Eight Thousand Four Hundred and Thirty One,8431,26.png,HSBC,Maria Kalb,1 -4458,30,35,Seven Thousand Nine Hundred and Twenty Four,7924,150.png,HSBC,Elliot Humphreys,1 -4459,41,10,Three Thousand Five Hundred and Seventy Two,3572,209.png,HSBC,Stephan Schwab,1 -4460,25,31,Seven Thousand Six Hundred and Seventy Nine,7679,129.png,HSBC,Naomi Grant,1 -4461,0,19,Three Thousand Four Hundred and Thirty Eight,3438,4.png,HSBC,Franรงoise Lapierre,1 -4462,41,41,Five Thousand Seven Hundred and Forty Four,5744,209.png,HSBC,Germa de Geus,1 -4463,20,35,Eight Thousand Eight Hundred and Ninety,8890,101.png,HSBC,Elliot Humphreys,1 -4464,24,20,Four Thousand Seven Hundred and Eighty,4780,124.png,HSBC,Seymour Patenaude,1 -4465,33,20,Four Thousand Three Hundred and Ninety Two,4392,166.png,HSBC,Seymour Patenaude,1 -4466,29,15,Six Thousand One Hundred and Fifty Eight,6158,147.png,HSBC,Milenko Tkalcic,1 -4467,7,32,One Thousand Four Hundred and Fifty Seven,1457,36.png,HSBC,Chelsea Watson,1 -4468,21,13,Nine Thousand Three Hundred and Thirty,9330,109.png,HSBC,Petra Kovacic,1 -4469,43,6,Nine Thousand and Sixty,9060,217.png,HSBC,Abdul Qais Khouri,1 -4470,32,24,Three Hundred and Forty Six,346,162.png,HSBC,Clarice Blanc,1 -4471,30,14,Four Thousand Six Hundred and Eighty Nine,4689,150.png,HSBC,Renata Lukic,1 -4472,18,40,Eight Thousand and Thirty Five,8035,91.png,HSBC,David Howard,1 -4473,38,0,Four Hundred and Ninety Three,493,193.png,HSBC,Ethel M. Bryson,1 -4474,40,11,Six Thousand Eight Hundred and Fifty,6850,202.png,HSBC,Jens Egger,1 -4475,37,37,Three Hundred and Seventy Three,373,186.png,HSBC,Eva Davies,1 -4476,10,32,Eight Thousand Two Hundred and Thirty,8230,51.png,HSBC,Chelsea Watson,1 -4477,29,29,Two Thousand Seven Hundred and Twelve,2712,147.png,HSBC,Hayden Bruce,1 -4478,34,22,Nine Thousand Two Hundred and Twenty Eight,9228,171.png,HSBC,Eglantine Forest,1 -4479,40,13,Seven Thousand Seven Hundred and Thirty One,7731,202.png,HSBC,Petra Kovacic,1 -4480,13,19,Seven Thousand Nine Hundred and One,7901,66.png,HSBC,Franรงoise Lapierre,1 -4481,40,6,Six Thousand Eight Hundred and Seventy Three,6873,203.png,HSBC,Abdul Qais Khouri,1 -4482,18,33,Seven Thousand Five Hundred and One,7501,91.png,HSBC,Eleanor Freeman,1 -4483,3,34,Two Thousand Three Hundred and Seventy,2370,18.png,HSBC,Holly Martin,1 -4484,37,35,Four Thousand One Hundred and Two,4102,187.png,HSBC,Elliot Humphreys,1 -4485,7,22,Eight Thousand Six Hundred and Seventy Four,8674,39.png,HSBC,Eglantine Forest,1 -4486,9,23,Six Thousand and Sixty,6060,49.png,HSBC,Thรฉrรจse Fortier,1 -4487,39,43,Three Thousand Eight Hundred and Seventy Nine,3879,195.png,HSBC,Aruna Bekx,1 -4488,22,17,Six Thousand and Fourteen,6014,111.png,HSBC,Yolette Cloutier,1 -4489,38,7,One Thousand Five Hundred and Fifty,1550,194.png,HSBC,Hasna Bahiyaa Amari,1 -4490,19,33,Eight Thousand and Forty Nine,8049,99.png,HSBC,Eleanor Freeman,1 -4491,29,20,Three Thousand Five Hundred and Thirty Five,3535,145.png,HSBC,Seymour Patenaude,1 -4492,37,37,Three Thousand Seven Hundred and Forty,3740,186.png,HSBC,Eva Davies,1 -4493,30,25,Seven Thousand Six Hundred and Sixty Nine,7669,154.png,HSBC,Fleurette Coudert,1 -4494,25,27,Two Thousand Seven Hundred and Eighty One,2781,127.png,HSBC,Colette Monjeau,1 -4495,28,5,Six Thousand Eight Hundred and Seventy Three,6873,144.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4496,9,13,Eight Thousand Seven Hundred and Fourteen,8714,46.png,HSBC,Petra Kovacic,1 -4497,17,29,Seven Thousand Seven Hundred and Forty Five,7745,88.png,HSBC,Hayden Bruce,1 -4498,12,12,Eight Thousand One Hundred and Nine,8109,63.png,HSBC,Marcel Achen,1 -4499,37,33,Three Thousand One Hundred and Seventy Two,3172,186.png,HSBC,Eleanor Freeman,1 -4500,31,3,Four Thousand Seven Hundred and Thirty Three,4733,157.png,HSBC,Jiang Li Tao,1 -4501,27,33,One Thousand and Seventy Five,1604,Nan,HSBC,Eleanor Freeman,0 -4502,21,12,Fifteen, ,108.png,HSBC,Marcel Achen,0 -4503,41,35,Two Thousand Six Hundred and Twenty Eight, ,205.png,HSBC,Elliot Humphreys,0 -4504,1,40,Thirty Nine,1016,Nan,HSBC,David Howard,0 -4505,25,2,Eight Thousand One Hundred and Twenty One,8745,Nan,HSBC,Chi Hsiao,0 -4506,8,15,Seven Thousand One Hundred and Eighty Four,8680,Nan,HSBC,Milenko Tkalcic,0 -4507,1,36, ,5159,7.png,HSBC,Thomas Chapman,0 -4508,0,0,Seven Hundred and Two, ,2.png,HSBC,Ethel M. Bryson,0 -4509,20,8, ,7629,100.png,HSBC,Steffen Krueger,0 -4510,30,22,Seven Thousand Six Hundred and Eight,8132,Nan,HSBC,Eglantine Forest,0 -4511,38,1, ,9357,192.png,HSBC,Emily D. Short,0 -4512,11,29,Five Hundred and Twenty One, ,59.png,HSBC,Hayden Bruce,0 -4513,25,14,Four Hundred, ,125.png,HSBC,Renata Lukic,0 -4514,30,33,Four Hundred and Thirty One,499,Nan,HSBC,Eleanor Freeman,0 -4515,37,17,Four Hundred and Thirty One,3120,Nan,HSBC,Yolette Cloutier,0 -4516,14,35,One Thousand Nine Hundred and Eighty Four,2314,Nan,HSBC,Elliot Humphreys,0 -4517,36,31, ,1392,183.png,HSBC,Naomi Grant,0 -4518,35,31,Two Thousand One Hundred and Sixty Eight, ,177.png,HSBC,Naomi Grant,0 -4519,23,5,Six, ,115.png,HSBC,Fawwaz Zuhayr Mustafa,0 -4520,12,12, ,1965,60.png,HSBC,Marcel Achen,0 -4521,43,41, ,6791,217.png,HSBC,Germa de Geus,0 -4522,27,14,Seven Thousand and Ninety Seven, ,139.png,HSBC,Renata Lukic,0 -4523,6,19,One Thousand Eight Hundred and Thirty Six,6830,Nan,HSBC,Franรงoise Lapierre,0 -4524,2,26,Three Thousand and Fifty, ,13.png,HSBC,Sidney Lapointe,0 -4525,29,10,One Thousand and Eighty One, ,146.png,HSBC,Stephan Schwab,0 -4526,15,37,Five Thousand Two Hundred and Twenty, ,79.png,HSBC,Eva Davies,0 -4527,0,43,Three Hundred and Twenty Seven,4461,Nan,HSBC,Aruna Bekx,0 -4528,27,20, ,7846,135.png,HSBC,Seymour Patenaude,0 -4529,27,3,Two Thousand Four Hundred and Sixty Six,8532,Nan,HSBC,Jiang Li Tao,0 -4530,9,3, ,6270,48.png,HSBC,Jiang Li Tao,0 -4531,27,18,One Hundred and Ninety Four, ,138.png,HSBC,Edmee Pelletier,0 -4532,17,10,One Thousand Eight Hundred and Fifty Eight,5518,Nan,HSBC,Stephan Schwab,0 -4533,27,38,Five Hundred and Nineteen,1916,Nan,HSBC,Freddie Reid,0 -4534,14,18,Four Thousand Two Hundred and Eighty Three,7147,Nan,HSBC,Edmee Pelletier,0 -4535,41,10,One Thousand Seven Hundred and Forty One,3763,Nan,HSBC,Stephan Schwab,0 -4536,36,13,Twenty Two, ,183.png,HSBC,Petra Kovacic,0 -4537,12,2,Eighty Nine, ,62.png,HSBC,Chi Hsiao,0 -4538,35,15,Eight Hundred and Sixteen,3041,Nan,HSBC,Milenko Tkalcic,0 -4539,31,15,Five Thousand and Thirty,9286,Nan,HSBC,Milenko Tkalcic,0 -4540,26,42,Six Hundred and Ten, ,133.png,HSBC,Brady Jamin,0 -4541,9,7,Seven Thousand Seven Hundred and Fifty Three,8561,Nan,HSBC,Hasna Bahiyaa Amari,0 -4542,23,15,Two Thousand Six Hundred and Sixty One,5658,Nan,HSBC,Milenko Tkalcic,0 -4543,7,34,Three Hundred and Forty Nine, ,36.png,HSBC,Holly Martin,0 -4544,0,1,One Thousand Eight Hundred and Seventy Seven, ,2.png,HSBC,Emily D. Short,0 -4545,21,32, ,402,108.png,HSBC,Chelsea Watson,0 -4546,39,27,Eight Hundred and Thirty Three, ,196.png,HSBC,Colette Monjeau,0 -4547,34,9,Three Thousand and Eighty Eight,3391,Nan,HSBC,Maria Kalb,0 -4548,9,9,Three Thousand Eight Hundred and Eighty Nine, ,46.png,HSBC,Maria Kalb,0 -4549,19,3,Three Hundred and Ninety Eight,1714,Nan,HSBC,Jiang Li Tao,0 -4550,13,0, ,3698,65.png,HSBC,Ethel M. Bryson,0 -4551,14,21,Five Thousand and Twenty One,6517,Nan,HSBC,David Corbeil,0 -4552,42,7,Eighty Seven,137,Nan,HSBC,Hasna Bahiyaa Amari,0 -4553,8,17, ,6255,41.png,HSBC,Yolette Cloutier,0 -4554,3,34, ,4012,19.png,HSBC,Holly Martin,0 -4555,14,13,Three Hundred and Eleven, ,74.png,HSBC,Petra Kovacic,0 -4556,27,22,Two Thousand Four Hundred and Eighty, ,136.png,HSBC,Eglantine Forest,0 -4557,11,34,One Thousand Seven Hundred and Twenty Three,2704,Nan,HSBC,Holly Martin,0 -4558,43,34,Two Thousand Seven Hundred and Sixty Nine, ,217.png,HSBC,Holly Martin,0 -4559,12,22,One Thousand Six Hundred and Seventy Nine,2772,Nan,HSBC,Eglantine Forest,0 -4560,23,3,One Thousand Four Hundred and Fifty One,4044,Nan,HSBC,Jiang Li Tao,0 -4561,14,40, ,7424,73.png,HSBC,David Howard,0 -4562,35,22,Two Hundred and Five,245,Nan,HSBC,Eglantine Forest,0 -4563,24,7,One Thousand and Ninety Six, ,124.png,HSBC,Hasna Bahiyaa Amari,0 -4564,27,13,One Thousand Four Hundred and Nineteen, ,137.png,HSBC,Petra Kovacic,0 -4565,7,22, ,3043,36.png,HSBC,Eglantine Forest,0 -4566,21,18,Four Thousand Seven Hundred and Eighty Two, ,106.png,HSBC,Edmee Pelletier,0 -4567,31,12,Five Thousand Seven Hundred and Eighty Seven, ,156.png,HSBC,Marcel Achen,0 -4568,18,32,Two Thousand Nine Hundred and Fifteen,4233,Nan,HSBC,Chelsea Watson,0 -4569,6,29, ,358,34.png,HSBC,Hayden Bruce,0 -4570,11,19,Five Hundred and Three, ,55.png,HSBC,Franรงoise Lapierre,0 -4571,9,40,Eight Thousand Eight Hundred and Eight, ,47.png,HSBC,David Howard,0 -4572,38,39, ,6920,194.png,HSBC,Katie Connor,0 -4573,39,40,Five Thousand Two Hundred and Seventy Nine,9310,Nan,HSBC,David Howard,0 -4574,31,16,Two Thousand Three Hundred and Eleven,7074,Nan,HSBC,Searlas Grenier,0 -4575,15,6,Two Thousand and Sixty Eight,6311,Nan,HSBC,Abdul Qais Khouri,0 -4576,43,17,Twenty Four,44,Nan,HSBC,Yolette Cloutier,0 -4577,32,27, ,9878,164.png,HSBC,Colette Monjeau,0 -4578,17,2,Thirty Five, ,86.png,HSBC,Chi Hsiao,0 -4579,6,27,Two Thousand Four Hundred and Thirty Five,5090,Nan,HSBC,Colette Monjeau,0 -4580,6,32, ,4889,30.png,HSBC,Chelsea Watson,0 -4581,15,4, ,421,79.png,HSBC,Wafiyah Nashwa Wasem,0 -4582,39,12,Two Hundred and Eighty Six, ,197.png,HSBC,Marcel Achen,0 -4583,30,28,Four Thousand Five Hundred and Ninety Two,5679,Nan,HSBC,Chapin Auger,0 -4584,38,15, ,4463,192.png,HSBC,Milenko Tkalcic,0 -4585,1,40,One Hundred and Ninety Two,2212,Nan,HSBC,David Howard,0 -4586,28,20, ,6787,143.png,HSBC,Seymour Patenaude,0 -4587,2,31,Four Thousand Four Hundred and Thirty One,7565,Nan,HSBC,Naomi Grant,0 -4588,33,35,Two Thousand Five Hundred and Sixty One, ,168.png,HSBC,Elliot Humphreys,0 -4589,10,21,Sixty Two,822,Nan,HSBC,David Corbeil,0 -4590,25,16,Nine Hundred and Forty Three,995,Nan,HSBC,Searlas Grenier,0 -4591,6,28, ,6522,31.png,HSBC,Chapin Auger,0 -4592,41,12, ,5059,207.png,HSBC,Marcel Achen,0 -4593,10,17,One Thousand Nine Hundred and Six,2722,Nan,HSBC,Yolette Cloutier,0 -4594,5,31,Three Hundred and Twelve, ,29.png,HSBC,Naomi Grant,0 -4595,33,2, ,2679,165.png,HSBC,Chi Hsiao,0 -4596,36,15,One Thousand One Hundred and Four,1559,Nan,HSBC,Milenko Tkalcic,0 -4597,9,25,One Hundred and Two,4518,Nan,HSBC,Fleurette Coudert,0 -4598,21,11, ,6067,108.png,HSBC,Jens Egger,0 -4599,33,10, ,9245,169.png,HSBC,Stephan Schwab,0 -4600,19,10,One Thousand Four Hundred and Fifty Seven,2404,Nan,HSBC,Stephan Schwab,0 -4601,3,15,Three Hundred and Thirty Four, ,16.png,HSBC,Milenko Tkalcic,0 -4602,17,24,Two Hundred and Seventy Two, ,87.png,HSBC,Clarice Blanc,0 -4603,33,18, ,2522,167.png,HSBC,Edmee Pelletier,0 -4604,14,26,Two Thousand Two Hundred and Ninety Six, ,72.png,HSBC,Sidney Lapointe,0 -4605,13,37,Four Hundred and Ninety,586,Nan,HSBC,Eva Davies,0 -4606,10,7,Four Thousand Four Hundred and Eighty Four,7239,Nan,HSBC,Hasna Bahiyaa Amari,0 -4607,3,36,Four Thousand One Hundred and Forty One, ,18.png,HSBC,Thomas Chapman,0 -4608,2,12,Three Hundred and Nine,2993,Nan,HSBC,Marcel Achen,0 -4609,21,15,Four Thousand Three Hundred and Eighty One,7520,Nan,HSBC,Milenko Tkalcic,0 -4610,41,26,One Thousand One Hundred and Fifty Two,1630,Nan,HSBC,Sidney Lapointe,0 -4611,4,27,Three Hundred and Eighty Eight, ,20.png,HSBC,Colette Monjeau,0 -4612,23,18,One Thousand Two Hundred and Ninety,3017,Nan,HSBC,Edmee Pelletier,0 -4613,19,33, ,8363,95.png,HSBC,Eleanor Freeman,0 -4614,22,29,One Hundred and Eighty One, ,110.png,HSBC,Hayden Bruce,0 -4615,43,16, ,5208,215.png,HSBC,Searlas Grenier,0 -4616,22,15,Eight Hundred and Fifty Six,1027,Nan,HSBC,Milenko Tkalcic,0 -4617,41,23,Four Thousand Four Hundred and Twenty Two,9928,Nan,HSBC,Thรฉrรจse Fortier,0 -4618,1,43,Thirty One,3602,Nan,HSBC,Aruna Bekx,0 -4619,29,25, ,1394,147.png,HSBC,Fleurette Coudert,0 -4620,21,29,Three Hundred and Sixty Three,5511,Nan,HSBC,Hayden Bruce,0 -4621,25,26,One Thousand Three Hundred and Thirty Four,3616,Nan,HSBC,Sidney Lapointe,0 -4622,30,0,One Thousand One Hundred and Eleven, ,151.png,HSBC,Ethel M. Bryson,0 -4623,17,14,Four Thousand Eight Hundred and Five, ,85.png,HSBC,Renata Lukic,0 -4624,21,37,One Thousand Nine Hundred and Ninety Eight,4618,Nan,HSBC,Eva Davies,0 -4625,18,28,Three Thousand Eight Hundred and Eighty Two,4515,Nan,HSBC,Chapin Auger,0 -4626,42,31,Twenty Nine,3509,Nan,HSBC,Naomi Grant,0 -4627,22,4,Two Thousand Four Hundred and Eighty Four,9782,Nan,HSBC,Wafiyah Nashwa Wasem,0 -4628,36,16,Three Thousand Two Hundred and Sixty Six, ,183.png,HSBC,Searlas Grenier,0 -4629,32,38,Two Thousand and Eighty,2244,Nan,HSBC,Freddie Reid,0 -4630,17,39,Two Hundred and Forty,527,Nan,HSBC,Katie Connor,0 -4631,15,25,Two Hundred and Ninety Three, ,75.png,HSBC,Fleurette Coudert,0 -4632,22,14, ,4529,110.png,HSBC,Renata Lukic,0 -4633,8,36,One Thousand Six Hundred and Forty Five, ,44.png,HSBC,Thomas Chapman,0 -4634,25,8,One Thousand Nine Hundred and Thirty Three, ,129.png,HSBC,Steffen Krueger,0 -4635,1,32, ,7058,6.png,HSBC,Chelsea Watson,0 -4636,7,10, ,980,37.png,HSBC,Stephan Schwab,0 -4637,1,29,Three Hundred and Sixty Eight,2260,Nan,HSBC,Hayden Bruce,0 -4638,27,31,Two Thousand Five Hundred and Eighteen,3925,Nan,HSBC,Naomi Grant,0 -4639,21,19,Six Thousand Four Hundred and One,8903,Nan,HSBC,Franรงoise Lapierre,0 -4640,0,26,One Thousand Five Hundred and Seventeen,4516,Nan,HSBC,Sidney Lapointe,0 -4641,38,12,Three Thousand Eight Hundred and Forty Eight,8966,Nan,HSBC,Marcel Achen,0 -4642,18,7,One Thousand Seven Hundred and Twenty Eight,7903,Nan,HSBC,Hasna Bahiyaa Amari,0 -4643,28,28,Four Thousand and Eighty Three, ,142.png,HSBC,Chapin Auger,0 -4644,19,36,Nine,21,Nan,HSBC,Thomas Chapman,0 -4645,1,9,Four Thousand Nine Hundred and Eighty Eight, ,8.png,HSBC,Maria Kalb,0 -4646,32,27,One Thousand Six Hundred and Seven, ,163.png,HSBC,Colette Monjeau,0 -4647,43,39, ,3983,218.png,HSBC,Katie Connor,0 -4648,8,32,One Thousand Six Hundred and Thirty Two,3460,Nan,HSBC,Chelsea Watson,0 -4649,35,15,Seven Thousand Four Hundred and Twenty Two,7581,Nan,HSBC,Milenko Tkalcic,0 -4650,38,30,Eight Hundred and Sixty Five,4461,Nan,HSBC,Jodie Holden,0 -4651,4,37,Five Thousand Eight Hundred and Eighty,7549,Nan,HSBC,Eva Davies,0 -4652,14,38,Two Thousand Three Hundred and Nine,7285,Nan,HSBC,Freddie Reid,0 -4653,24,35,Five Hundred and Twenty Nine,2054,Nan,HSBC,Elliot Humphreys,0 -4654,26,30,Eight Thousand Four Hundred and Fifty Seven,9995,Nan,HSBC,Jodie Holden,0 -4655,42,0, ,9694,210.png,HSBC,Ethel M. Bryson,0 -4656,43,0,Two Thousand Six Hundred and Fifty Eight,5501,Nan,HSBC,Ethel M. Bryson,0 -4657,41,19,Six Thousand Six Hundred and Ninety Three, ,207.png,HSBC,Franรงoise Lapierre,0 -4658,26,20, ,7913,132.png,HSBC,Seymour Patenaude,0 -4659,18,7,Four Hundred and Sixty Seven,1369,Nan,HSBC,Hasna Bahiyaa Amari,0 -4660,3,0,Seven Hundred and Thirty Three,1039,Nan,HSBC,Ethel M. Bryson,0 -4661,3,37,Eight Hundred and Ninety One, ,19.png,HSBC,Eva Davies,0 -4662,30,29,Four Thousand Two Hundred and Forty Four,5375,Nan,HSBC,Hayden Bruce,0 -4663,13,34, ,2158,65.png,HSBC,Holly Martin,0 -4664,6,6,Five Hundred and Forty Four, ,31.png,HSBC,Abdul Qais Khouri,0 -4665,0,37, ,1117,1.png,HSBC,Eva Davies,0 -4666,4,36,Three Thousand Four Hundred and Thirteen,5837,Nan,HSBC,Thomas Chapman,0 -4667,15,8,Thirty Two,36,Nan,HSBC,Steffen Krueger,0 -4668,0,42,Two Thousand Seven Hundred and Sixty Six, ,3.png,HSBC,Brady Jamin,0 -4669,4,7, ,2412,23.png,HSBC,Hasna Bahiyaa Amari,0 -4670,28,15,One Thousand Four Hundred,1631,Nan,HSBC,Milenko Tkalcic,0 -4671,38,7,One Thousand Seven Hundred and Eighty Four,4426,Nan,HSBC,Hasna Bahiyaa Amari,0 -4672,1,28,Eight Hundred and Ninety Five,1226,Nan,HSBC,Chapin Auger,0 -4673,22,27,One Thousand and Seventy Four, ,110.png,HSBC,Colette Monjeau,0 -4674,33,13,Five Thousand and Forty, ,168.png,HSBC,Petra Kovacic,0 -4675,6,37,One Hundred and Fifty Three,197,Nan,HSBC,Eva Davies,0 -4676,5,37,Two Thousand Nine Hundred and Sixty Eight, ,26.png,HSBC,Eva Davies,0 -4677,11,5,One Thousand Eight Hundred and Thirty Seven,6916,Nan,HSBC,Fawwaz Zuhayr Mustafa,0 -4678,19,6, ,7345,97.png,HSBC,Abdul Qais Khouri,0 -4679,1,6, ,5029,6.png,HSBC,Abdul Qais Khouri,0 -4680,6,14,One Hundred and Two,1001,Nan,HSBC,Renata Lukic,0 -4681,20,8,Nine Hundred and Thirty Two, ,100.png,HSBC,Steffen Krueger,0 -4682,40,35,Four Hundred and Fifty One,2729,Nan,HSBC,Elliot Humphreys,0 -4683,11,20,Two Thousand Two Hundred and Sixty One, ,57.png,HSBC,Seymour Patenaude,0 -4684,20,33,Four Hundred and Seventy Four,475,Nan,HSBC,Eleanor Freeman,0 -4685,40,1,One Hundred and Twenty Eight,269,Nan,HSBC,Emily D. Short,0 -4686,0,25, ,448,0.png,HSBC,Fleurette Coudert,0 -4687,43,18,Six Thousand Four Hundred and Eleven, ,219.png,HSBC,Edmee Pelletier,0 -4688,22,24,Nine Hundred and Ninety Five, ,112.png,HSBC,Clarice Blanc,0 -4689,15,33,Four Thousand Two Hundred and Eighty Six,5855,Nan,HSBC,Eleanor Freeman,0 -4690,29,17,Two Hundred and Ninety Four,4084,Nan,HSBC,Yolette Cloutier,0 -4691,30,11,Three Thousand Four Hundred and Sixteen, ,153.png,HSBC,Jens Egger,0 -4692,4,30,Two Thousand Two Hundred and Fifty Four, ,24.png,HSBC,Jodie Holden,0 -4693,11,28,One Thousand Eight Hundred and Sixty Three,2129,Nan,HSBC,Chapin Auger,0 -4694,16,19,Seven Hundred and Eighty Six,956,Nan,HSBC,Franรงoise Lapierre,0 -4695,28,12,Four Thousand Seven Hundred and Seventy Four,7335,Nan,HSBC,Marcel Achen,0 -4696,11,20, ,3327,56.png,HSBC,Seymour Patenaude,0 -4697,10,28,Twenty Four, ,50.png,HSBC,Chapin Auger,0 -4698,28,9, ,5653,140.png,HSBC,Maria Kalb,0 -4699,27,20,Two Thousand Eight Hundred and Seventy,5949,Nan,HSBC,Seymour Patenaude,0 -4700,11,27, ,7325,57.png,HSBC,Colette Monjeau,0 -4701,21,2,Six Thousand Thre Hundred and Eihty Eigt,6388,106.png,HSBC,Chi Hsiao,1 -4702,12,3,Two Thousand For Hundred and Foty Two,2442,60.png,HSBC,Jiang Li Tao,1 -4703,31,18,Eigt Thousand Nine Hundred and Six,8906,159.png,HSBC,Edmee Pelletier,1 -4704,38,30,Eigt Thousand Seven Hundred,8700,194.png,HSBC,Jodie Holden,1 -4705,27,1,Seven Thousand Seven Hundred and Ninety Eigt,7798,139.png,HSBC,Emily D. Short,1 -4706,19,14,Seven Thousand Thre Hundred and Thirty Five,7335,95.png,HSBC,Renata Lukic,1 -4707,43,34,Five Thousand On Hundred and Ten,5110,216.png,HSBC,Holly Martin,1 -4708,8,40,For Thousand Two Hundred and Thirty Five,4235,40.png,HSBC,David Howard,1 -4709,26,6,Five Thousand Eigt Hundred and Forteen,5814,132.png,HSBC,Abdul Qais Khouri,1 -4710,35,35,On Thousand and Fifty,1050,178.png,HSBC,Elliot Humphreys,1 -4711,3,28,Seven Thousand Six Hundred and Nineten,7619,18.png,HSBC,Chapin Auger,1 -4712,0,22,Two Thousand For Hundred and Sixt On,2461,4.png,HSBC,Eglantine Forest,1 -4713,30,4,On Thousand For Hundred and Seenty For,1474,154.png,HSBC,Wafiyah Nashwa Wasem,1 -4714,21,10,Five Thousand Seven Hundred and Six,5706,106.png,HSBC,Stephan Schwab,1 -4715,23,34,Five Hundred and For,504,118.png,HSBC,Holly Martin,1 -4716,28,37,For Thousand Five Hundred and Thirty Nine,4539,140.png,HSBC,Eva Davies,1 -4717,35,37,Nine Thousand Two Hundred and Eihty Five,9285,175.png,HSBC,Eva Davies,1 -4718,27,24,Nine Thousand Thre Hundred and Five,9305,139.png,HSBC,Clarice Blanc,1 -4719,17,41,Six Hundred and Thirty Nine,639,89.png,HSBC,Germa de Geus,1 -4720,26,35,Six Thousand Six Hundred and Fifty Eigt,6658,133.png,HSBC,Elliot Humphreys,1 -4721,4,43,Six Thousand Nine Hundred and Sixt Thre,6963,22.png,HSBC,Aruna Bekx,1 -4722,29,7,Five Thousand Two Hundred and Seenty On,5271,145.png,HSBC,Hasna Bahiyaa Amari,1 -4723,8,9,Nine Thousand Eigt Hundred and Seven,9807,42.png,HSBC,Maria Kalb,1 -4724,23,35,For Thousand On Hundred and Foty Eigt,4148,117.png,HSBC,Elliot Humphreys,1 -4725,19,13,On Thousand Six Hundred and Ninety Six,1696,95.png,HSBC,Petra Kovacic,1 -4726,31,28,Thre Thousand On Hundred and Fifty Five,3155,159.png,HSBC,Chapin Auger,1 -4727,35,34,Five Thousand For Hundred and Nine,5409,179.png,HSBC,Holly Martin,1 -4728,21,40,Eigt Thousand Nine Hundred and Ten,8910,108.png,HSBC,David Howard,1 -4729,27,9,Five Thousand Six Hundred and Thirty For,5634,138.png,HSBC,Maria Kalb,1 -4730,3,34,On Thousand Five Hundred and Seenty Five,1575,18.png,HSBC,Holly Martin,1 -4731,5,28,On Thousand Seven Hundred and Ninety Seven,1797,26.png,HSBC,Chapin Auger,1 -4732,10,4,Six Thousand Seven Hundred and Thirty On,6731,54.png,HSBC,Wafiyah Nashwa Wasem,1 -4733,40,12,On Thousand Eigt Hundred and Foty Eigt,1848,204.png,HSBC,Marcel Achen,1 -4734,0,1,Five Thousand Eigt Hundred and Nine,5809,4.png,HSBC,Emily D. Short,1 -4735,24,19,Six Thousand Eigt Hundred and Twenty Thre,6823,121.png,HSBC,Franรงoise Lapierre,1 -4736,3,23,Two Thousand Six Hundred and Foty Eigt,2648,17.png,HSBC,Thรฉrรจse Fortier,1 -4737,28,21,Eigt Thousand On Hundred and Foty Two,8142,140.png,HSBC,David Corbeil,1 -4738,9,4,Nine Thousand Seven Hundred and Eihty Eigt,9788,45.png,HSBC,Wafiyah Nashwa Wasem,1 -4739,33,24,Two Thousand Five Hundred and Sixt Eigt,2568,167.png,HSBC,Clarice Blanc,1 -4740,22,4,Six Thousand and Foty Five,6045,110.png,HSBC,Wafiyah Nashwa Wasem,1 -4741,16,38,Thre Thousand Nine Hundred and Thirty On,3931,82.png,HSBC,Freddie Reid,1 -4742,41,1,Eigt Thousand Six Hundred and For,8604,206.png,HSBC,Emily D. Short,1 -4743,11,0,Two Thousand For Hundred and Thirty Eigt,2438,59.png,HSBC,Ethel M. Bryson,1 -4744,8,24,Six Thousand Thre Hundred and Seenty Eigt,6378,41.png,HSBC,Clarice Blanc,1 -4745,35,2,Seven Hundred and Ninety Seven,797,175.png,HSBC,Chi Hsiao,1 -4746,0,20,Eigt Thousand and Thirty Two,8032,0.png,HSBC,Seymour Patenaude,1 -4747,37,11,Two Thousand For Hundred and Six,2406,186.png,HSBC,Jens Egger,1 -4748,16,22,On Thousand On Hundred and Foty Two,1142,82.png,HSBC,Eglantine Forest,1 -4749,10,1,Eigt Thousand Two Hundred and Six,8206,50.png,HSBC,Emily D. Short,1 -4750,39,19,Five Hundred and Thirty Seven,537,196.png,HSBC,Franรงoise Lapierre,1 -4751,16,11,Five Thousand and Thirty Thre,5033,81.png,HSBC,Jens Egger,1 -4752,28,31,Five Thousand Eigt Hundred and Twenty For,5824,140.png,HSBC,Naomi Grant,1 -4753,20,25,Six Thousand Eigt Hundred and Eihty Nine,6889,100.png,HSBC,Fleurette Coudert,1 -4754,31,33,Thre Thousand Two Hundred and Fifty Thre,3253,159.png,HSBC,Eleanor Freeman,1 -4755,6,25,Thre Thousand Nine Hundred and Fifty For,3954,34.png,HSBC,Fleurette Coudert,1 -4756,2,0,Five Thousand Eigt Hundred and Fifty Seven,5857,13.png,HSBC,Ethel M. Bryson,1 -4757,12,32,Six Thousand Thre Hundred and Five,6305,63.png,HSBC,Chelsea Watson,1 -4758,8,0,Seven Thousand Eigt Hundred and Thirty Eigt,7838,44.png,HSBC,Ethel M. Bryson,1 -4759,13,36,Eigt Thousand Eigt Hundred and Ninety Thre,8893,67.png,HSBC,Thomas Chapman,1 -4760,3,5,Thre Thousand For Hundred and Eihty Nine,3489,16.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4761,6,15,Six Thousand Six Hundred and Fifty On,6651,30.png,HSBC,Milenko Tkalcic,1 -4762,0,0,Five Thousand Nine Hundred and Twenty Eigt,5928,4.png,HSBC,Ethel M. Bryson,1 -4763,38,0,Nine Thousand For Hundred and Sixt,9460,191.png,HSBC,Ethel M. Bryson,1 -4764,32,34,On Thousand On Hundred and Fifty Eigt,1158,160.png,HSBC,Holly Martin,1 -4765,19,40,Seven Thousand On Hundred and Foty Nine,7149,97.png,HSBC,David Howard,1 -4766,28,27,On Thousand and Sixt Nine,1069,140.png,HSBC,Colette Monjeau,1 -4767,21,16,Six Hundred and Thirty Nine,639,108.png,HSBC,Searlas Grenier,1 -4768,31,28,Nine Thousand Five Hundred and Seenty Two,9572,158.png,HSBC,Chapin Auger,1 -4769,18,41,Nine Thousand Nine Hundred and Eihty Nine,9989,92.png,HSBC,Germa de Geus,1 -4770,12,18,Nine Thousand and Ninety Six,9096,61.png,HSBC,Edmee Pelletier,1 -4771,37,13,Five Thousand Two Hundred and Ninety Six,5296,186.png,HSBC,Petra Kovacic,1 -4772,31,26,Two Thousand On Hundred and Foty Six,2146,156.png,HSBC,Sidney Lapointe,1 -4773,19,23,Five Hundred and Sixt,560,96.png,HSBC,Thรฉrรจse Fortier,1 -4774,4,10,Two Thousand Six Hundred and Fifty Five,2655,20.png,HSBC,Stephan Schwab,1 -4775,33,41,Two Thousand On Hundred and Seenty Five,2175,169.png,HSBC,Germa de Geus,1 -4776,24,2,Thirty On,31,122.png,HSBC,Chi Hsiao,1 -4777,35,42,On Thousand On Hundred and Seven,1107,175.png,HSBC,Brady Jamin,1 -4778,21,1,Eigt Thousand Six Hundred and Ninety Two,8692,107.png,HSBC,Emily D. Short,1 -4779,13,23,For Thousand Seven Hundred and Sixt Seven,4767,68.png,HSBC,Thรฉrรจse Fortier,1 -4780,16,33,Eigt Thousand Thre Hundred and Eigt,8308,83.png,HSBC,Eleanor Freeman,1 -4781,15,16,Two Thousand Six Hundred and Sixt Eigt,2668,75.png,HSBC,Searlas Grenier,1 -4782,32,41,Five Thousand Nine Hundred and Fifty On,5951,160.png,HSBC,Germa de Geus,1 -4783,32,2,For Thousand Thre Hundred and Twenty Five,4325,161.png,HSBC,Chi Hsiao,1 -4784,8,23,On Thousand For Hundred and Eihty Thre,1483,44.png,HSBC,Thรฉrรจse Fortier,1 -4785,6,9,Sixt Five,65,30.png,HSBC,Maria Kalb,1 -4786,1,5,Nine Thousand For Hundred and Foty Two,9442,5.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4787,30,41,Six Thousand Seven Hundred and Sixt Two,6762,153.png,HSBC,Germa de Geus,1 -4788,29,28,Six Thousand Thre Hundred and Thirty Thre,6333,149.png,HSBC,Chapin Auger,1 -4789,8,9,Six Hundred and Sixt Nine,669,40.png,HSBC,Maria Kalb,1 -4790,43,5,For Thousand Thre Hundred and Foty For,4344,215.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4791,42,30,Six Thousand Nine Hundred and Eigt,6908,213.png,HSBC,Jodie Holden,1 -4792,34,36,On Hundred and Sxten,116,174.png,HSBC,Thomas Chapman,1 -4793,3,34,Nine Thousand Nine Hundred and Sixt Six,9966,17.png,HSBC,Holly Martin,1 -4794,27,20,Thre Thousand On Hundred and Eihteen,3118,136.png,HSBC,Seymour Patenaude,1 -4795,12,5,Thre Thousand Seven Hundred and Ten,3710,62.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4796,28,35,Two Thousand For Hundred and Two,2402,140.png,HSBC,Elliot Humphreys,1 -4797,18,27,Six Thousand Eigt Hundred and Seenty For,6874,90.png,HSBC,Colette Monjeau,1 -4798,43,27,Thre Thousand Six Hundred and Twenty,3620,219.png,HSBC,Colette Monjeau,1 -4799,41,11,Thre Thousand On Hundred and Thirty Seven,3137,209.png,HSBC,Jens Egger,1 -4800,9,15,Nine Thousand Six Hundred and Eihty Five,9685,48.png,HSBC,Milenko Tkalcic,1 -4801,43,26,Eigt Thousand Thre Hundred and Twenty On,8321,217.png,HSBC,Sidney Lapointe,1 -4802,4,8,On Thousand On Hundred and Seenty On,1171,24.png,HSBC,Steffen Krueger,1 -4803,17,0,Two Thousand For Hundred and Fifty On,2451,85.png,HSBC,Ethel M. Bryson,1 -4804,1,43,For Thousand Nine Hundred and Sixt Two,4962,5.png,HSBC,Aruna Bekx,1 -4805,1,9,Thre Thousand Eigt Hundred and Thirty On,3831,9.png,HSBC,Maria Kalb,1 -4806,18,18,Thre Thousand On Hundred and Sixt Thre,3163,90.png,HSBC,Edmee Pelletier,1 -4807,23,14,On Thousand and Eleven,1011,118.png,HSBC,Renata Lukic,1 -4808,30,1,For Thousand Six Hundred and Foty,4640,153.png,HSBC,Emily D. Short,1 -4809,26,1,Nine Thousand For Hundred and Twenty Seven,9427,130.png,HSBC,Emily D. Short,1 -4810,25,7,Two Thousand Six Hundred and Foty Nine,2649,129.png,HSBC,Hasna Bahiyaa Amari,1 -4811,20,1,Five Thousand Thre Hundred and Eihty For,5384,101.png,HSBC,Emily D. Short,1 -4812,12,27,Eigt Thousand and Foty On,8041,61.png,HSBC,Colette Monjeau,1 -4813,29,9,Nine Thousand Two Hundred and Fifty Thre,9253,145.png,HSBC,Maria Kalb,1 -4814,39,15,On Thousand Thre Hundred and Six,1306,199.png,HSBC,Milenko Tkalcic,1 -4815,2,30,Two Thousand Two Hundred and Fiteen,2215,11.png,HSBC,Jodie Holden,1 -4816,6,26,For Thousand Eigt Hundred and Eihty On,4881,32.png,HSBC,Sidney Lapointe,1 -4817,23,30,Five Thousand and Thirty For,5034,115.png,HSBC,Jodie Holden,1 -4818,35,3,For Thousand Thre Hundred and Foty,4340,176.png,HSBC,Jiang Li Tao,1 -4819,20,2,Eigt Thousand For Hundred and Eihty Five,8485,103.png,HSBC,Chi Hsiao,1 -4820,11,6,Nine Thousand Six Hundred and Seenty Two,9672,59.png,HSBC,Abdul Qais Khouri,1 -4821,26,6,Thre Thousand Nine Hundred and Fifty Five,3955,134.png,HSBC,Abdul Qais Khouri,1 -4822,3,6,Six Thousand Five Hundred and Fifty Six,6556,15.png,HSBC,Abdul Qais Khouri,1 -4823,22,25,Thre Hundred and Seenty Five,375,111.png,HSBC,Fleurette Coudert,1 -4824,9,24,Two Thousand Eigt Hundred and Foty For,2844,47.png,HSBC,Clarice Blanc,1 -4825,7,38,Thre Thousand On Hundred and Twlve,3112,39.png,HSBC,Freddie Reid,1 -4826,4,28,Eigt Hundred and Thirty Thre,833,21.png,HSBC,Chapin Auger,1 -4827,7,13,Two Thousand Seven Hundred and Fifty Seven,2757,39.png,HSBC,Petra Kovacic,1 -4828,14,8,Six Thousand and Sixt Thre,6063,74.png,HSBC,Steffen Krueger,1 -4829,43,41,Seven Thousand Eigt Hundred and Eihty Six,7886,219.png,HSBC,Germa de Geus,1 -4830,38,17,Seven Thousand Five Hundred and Twenty,7520,192.png,HSBC,Yolette Cloutier,1 -4831,28,36,Nine Thousand and Ninety Nine,9099,140.png,HSBC,Thomas Chapman,1 -4832,12,27,Seven Hundred and Seenty Thre,773,60.png,HSBC,Colette Monjeau,1 -4833,29,39,Five Thousand Five Hundred and Eihty Seven,5587,149.png,HSBC,Katie Connor,1 -4834,3,13,Seven Thousand Nine Hundred and Foty,7940,19.png,HSBC,Petra Kovacic,1 -4835,38,7,Seven Thousand Nine Hundred and Twenty Eigt,7928,192.png,HSBC,Hasna Bahiyaa Amari,1 -4836,37,25,On Thousand Six Hundred and Thirty Eigt,1638,187.png,HSBC,Fleurette Coudert,1 -4837,3,27,Two Thousand Thre Hundred and Sixt,2360,17.png,HSBC,Colette Monjeau,1 -4838,41,43,For Thousand On Hundred and Ninety On,4191,205.png,HSBC,Aruna Bekx,1 -4839,28,5,Two Thousand Nine Hundred and Twlve,2912,144.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4840,18,4,Thre Thousand Nine Hundred and Ninety Two,3992,94.png,HSBC,Wafiyah Nashwa Wasem,1 -4841,13,19,On Thousand For Hundred and Fifty Five,1455,65.png,HSBC,Franรงoise Lapierre,1 -4842,42,17,On Thousand and Foty On,1041,210.png,HSBC,Yolette Cloutier,1 -4843,35,3,For Thousand Eigt Hundred and Twenty Two,4822,177.png,HSBC,Jiang Li Tao,1 -4844,28,2,Seven Thousand Eigt Hundred and Eihty Nine,7889,143.png,HSBC,Chi Hsiao,1 -4845,1,25,Thre Thousand On Hundred and Foty,3140,5.png,HSBC,Fleurette Coudert,1 -4846,18,35,Six Thousand On Hundred and Ninety On,6191,93.png,HSBC,Elliot Humphreys,1 -4847,23,39,Seven Thousand For Hundred and Fifty Thre,7453,119.png,HSBC,Katie Connor,1 -4848,27,34,On Thousand Nine Hundred and Twenty Five,1925,135.png,HSBC,Holly Martin,1 -4849,16,35,Two Thousand and Sxten,2016,83.png,HSBC,Elliot Humphreys,1 -4850,8,40,On Thousand Two Hundred and Seenty,1270,40.png,HSBC,David Howard,1 -4851,23,17,For Thousand Five Hundred and Foty Two,4542,115.png,HSBC,Yolette Cloutier,1 -4852,43,28,Two Thousand Five Hundred and Thirty On,2531,217.png,HSBC,Chapin Auger,1 -4853,15,40,For Thousand Nine Hundred and Ninety Six,4996,76.png,HSBC,David Howard,1 -4854,5,28,Nine Thousand Thre Hundred and Sixt Seven,9367,27.png,HSBC,Chapin Auger,1 -4855,35,43,Thre Thousand Eigt Hundred and Seenty Two,3872,177.png,HSBC,Aruna Bekx,1 -4856,8,11,Six Thousand Two Hundred and Twenty Six,6226,41.png,HSBC,Jens Egger,1 -4857,36,42,Eigt Thousand and Ninety On,8091,181.png,HSBC,Brady Jamin,1 -4858,18,25,Nine Thousand For Hundred and Eihty On,9481,91.png,HSBC,Fleurette Coudert,1 -4859,41,10,Seven Thousand Five Hundred and Foty Eigt,7548,205.png,HSBC,Stephan Schwab,1 -4860,28,39,For Thousand Seven Hundred and Fifty,4750,143.png,HSBC,Katie Connor,1 -4861,21,20,Eigt Hundred and Seenty Six,876,109.png,HSBC,Seymour Patenaude,1 -4862,24,0,Two Thousand and Seenty Five,2075,120.png,HSBC,Ethel M. Bryson,1 -4863,25,33,Thre Thousand On Hundred and Forteen,3114,126.png,HSBC,Eleanor Freeman,1 -4864,40,20,Thre Hundred and Seven,307,202.png,HSBC,Seymour Patenaude,1 -4865,41,25,Two Thousand Thre Hundred and Foty Five,2345,205.png,HSBC,Fleurette Coudert,1 -4866,43,18,Five Thousand On Hundred and Seenty Six,5176,219.png,HSBC,Edmee Pelletier,1 -4867,3,36,On Hundred and Seenty Two,172,18.png,HSBC,Thomas Chapman,1 -4868,25,35,Five Thousand Five Hundred and Eihty Nine,5589,125.png,HSBC,Elliot Humphreys,1 -4869,26,38,Six Thousand On Hundred and Ninety Eigt,6198,133.png,HSBC,Freddie Reid,1 -4870,6,29,For Thousand Five Hundred and Foty Thre,4543,31.png,HSBC,Hayden Bruce,1 -4871,25,30,Eigt Thousand Five Hundred and Seenty On,8571,126.png,HSBC,Jodie Holden,1 -4872,41,43,Six Hundred and Twenty Nine,629,205.png,HSBC,Aruna Bekx,1 -4873,10,19,Two Thousand Eigt Hundred and Fifty Nine,2859,53.png,HSBC,Franรงoise Lapierre,1 -4874,32,41,Eigt Thousand and Sixt,8060,163.png,HSBC,Germa de Geus,1 -4875,17,30,For Hundred and Eihty For,484,89.png,HSBC,Jodie Holden,1 -4876,34,14,Eigt Thousand Two Hundred and Fifty Seven,8257,171.png,HSBC,Renata Lukic,1 -4877,32,5,On Thousand On Hundred and Fifty Five,1155,162.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4878,17,22,Two Thousand and Thirty Five,2035,89.png,HSBC,Eglantine Forest,1 -4879,31,1,Seven Thousand Five Hundred and Eihty Five,7585,158.png,HSBC,Emily D. Short,1 -4880,22,28,Five Thousand Eigt Hundred and Fifty Nine,5859,111.png,HSBC,Chapin Auger,1 -4881,16,33,Two Thousand Six Hundred and Two,2602,80.png,HSBC,Eleanor Freeman,1 -4882,31,4,On Thousand Seven Hundred and On,1701,159.png,HSBC,Wafiyah Nashwa Wasem,1 -4883,31,38,Six Thousand For Hundred and Fifty Two,6452,156.png,HSBC,Freddie Reid,1 -4884,13,5,Six Thousand Eigt Hundred and Seenty Six,6876,68.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4885,18,18,Thre Thousand Five Hundred and Sixt Seven,3567,91.png,HSBC,Edmee Pelletier,1 -4886,7,9,Thre Thousand and Eihty,3080,39.png,HSBC,Maria Kalb,1 -4887,40,8,For Hundred and Seventeen,417,200.png,HSBC,Steffen Krueger,1 -4888,17,2,Five Thousand Two Hundred and Eihty On,5281,88.png,HSBC,Chi Hsiao,1 -4889,37,1,Eigt Thousand Five Hundred and Ninety For,8594,187.png,HSBC,Emily D. Short,1 -4890,23,34,Five Thousand Nine Hundred and Foty Seven,5947,116.png,HSBC,Holly Martin,1 -4891,21,17,Two Thousand and Sxten,2016,109.png,HSBC,Yolette Cloutier,1 -4892,17,38,Two Thousand Seven Hundred and Ninety On,2791,88.png,HSBC,Freddie Reid,1 -4893,21,32,Five Thousand Eigt Hundred and Fifty For,5854,108.png,HSBC,Chelsea Watson,1 -4894,11,33,Two Thousand For Hundred and Sixt On,2461,58.png,HSBC,Eleanor Freeman,1 -4895,38,41,Six Thousand and Twenty For,6024,191.png,HSBC,Germa de Geus,1 -4896,18,5,For Thousand Five Hundred and Fifty Seven,4557,90.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4897,4,2,Six Thousand Six Hundred and Twenty Seven,6627,20.png,HSBC,Chi Hsiao,1 -4898,9,5,Two Thousand Thre Hundred and Seenty,2370,47.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4899,25,26,Nine Thousand Thre Hundred and Forteen,9314,126.png,HSBC,Sidney Lapointe,1 -4900,43,15,Seven Thousand Thre Hundred and Twenty Thre,7323,218.png,HSBC,Milenko Tkalcic,1 -4901,26,14,Nine Thousand and Eihty For,9084,133.png,HSBC,Renata Lukic,1 -4902,34,40,Eigt Thousand Nine Hundred and Sixt For,8964,171.png,HSBC,David Howard,1 -4903,21,30,Eigt Thousand Nine Hundred and Foty Eigt,8948,109.png,HSBC,Jodie Holden,1 -4904,36,0,Eigt Thousand Thre Hundred and Sixt Thre,8363,183.png,HSBC,Ethel M. Bryson,1 -4905,38,40,Eigt Thousand Nine Hundred and Ninety For,8994,191.png,HSBC,David Howard,1 -4906,8,14,On Thousand and Eihty On,1081,42.png,HSBC,Renata Lukic,1 -4907,14,34,Eigt Thousand Five Hundred and Eleven,8511,70.png,HSBC,Holly Martin,1 -4908,9,42,Eigt Hundred and Twenty Nine,829,46.png,HSBC,Brady Jamin,1 -4909,6,19,For Thousand Six Hundred and Eihty Two,4682,30.png,HSBC,Franรงoise Lapierre,1 -4910,32,41,For Thousand Two Hundred and Twenty Five,4225,161.png,HSBC,Germa de Geus,1 -4911,2,23,Five Thousand On Hundred and Sixt Thre,5163,10.png,HSBC,Thรฉrรจse Fortier,1 -4912,43,6,Six Hundred and Twenty Eigt,628,218.png,HSBC,Abdul Qais Khouri,1 -4913,36,14,Nine Thousand On Hundred and Fifty Six,9156,184.png,HSBC,Renata Lukic,1 -4914,39,27,On Thousand Six Hundred and Fiteen,1615,197.png,HSBC,Colette Monjeau,1 -4915,41,5,For Thousand and Eihty For,4084,206.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4916,17,41,Thre Thousand Eigt Hundred and Thirty Eigt,3838,85.png,HSBC,Germa de Geus,1 -4917,10,32,Thre Thousand Two Hundred and Fifty Eigt,3258,50.png,HSBC,Chelsea Watson,1 -4918,16,10,Two Hundred and Fifty Five,255,82.png,HSBC,Stephan Schwab,1 -4919,16,20,For Thousand For Hundred and Five,4405,84.png,HSBC,Seymour Patenaude,1 -4920,10,15,On Thousand Nine Hundred and Ninety Five,1995,52.png,HSBC,Milenko Tkalcic,1 -4921,31,37,Six Thousand Nine Hundred and Seventeen,6917,155.png,HSBC,Eva Davies,1 -4922,20,43,Eigt Thousand For Hundred and Seenty Thre,8473,103.png,HSBC,Aruna Bekx,1 -4923,32,24,Seven Thousand Six Hundred and Eihty Five,7685,160.png,HSBC,Clarice Blanc,1 -4924,43,1,Nine Thousand Nine Hundred and Six,9906,219.png,HSBC,Emily D. Short,1 -4925,12,37,Six Thousand Thre Hundred and Ninety Nine,6399,64.png,HSBC,Eva Davies,1 -4926,17,3,On Thousand Nine Hundred and Twenty Eigt,1928,86.png,HSBC,Jiang Li Tao,1 -4927,30,4,Seven Thousand Thre Hundred and Twlve,7312,153.png,HSBC,Wafiyah Nashwa Wasem,1 -4928,28,23,Eigt Hundred and Sixt,860,143.png,HSBC,Thรฉrรจse Fortier,1 -4929,1,8,Thre Thousand For Hundred and Twenty Two,3422,9.png,HSBC,Steffen Krueger,1 -4930,29,9,For Thousand For Hundred and Twenty Seven,4427,149.png,HSBC,Maria Kalb,1 -4931,5,15,For Thousand Seven Hundred and Sixt Six,4766,29.png,HSBC,Milenko Tkalcic,1 -4932,41,15,Five Thousand and Fifty For,5054,205.png,HSBC,Milenko Tkalcic,1 -4933,1,18,On Thousand Nine Hundred and Thirty Seven,1937,9.png,HSBC,Edmee Pelletier,1 -4934,11,10,Six Thousand Eigt Hundred and Foty Eigt,6848,57.png,HSBC,Stephan Schwab,1 -4935,43,22,Seven Hundred and Ninety For,794,217.png,HSBC,Eglantine Forest,1 -4936,12,38,Seven Thousand Eigt Hundred and Six,7806,62.png,HSBC,Freddie Reid,1 -4937,10,40,Five Thousand Nine Hundred and Thirty Thre,5933,50.png,HSBC,David Howard,1 -4938,8,0,On Thousand Five Hundred and Thirty On,1531,40.png,HSBC,Ethel M. Bryson,1 -4939,21,24,On Thousand Nine Hundred and Fifty Eigt,1958,109.png,HSBC,Clarice Blanc,1 -4940,6,1,Eigt Thousand and Fifty On,8051,31.png,HSBC,Emily D. Short,1 -4941,6,23,Two Thousand Thre Hundred and Thirteen,2313,34.png,HSBC,Thรฉrรจse Fortier,1 -4942,34,12,Two Thousand Nine Hundred and Seenty Seven,2977,174.png,HSBC,Marcel Achen,1 -4943,11,19,Eigt Thousand and Foty,8040,57.png,HSBC,Franรงoise Lapierre,1 -4944,5,15,Eigt Thousand For Hundred and Seenty Seven,8477,27.png,HSBC,Milenko Tkalcic,1 -4945,11,19,Eigt Thousand For Hundred and Foty Thre,8443,56.png,HSBC,Franรงoise Lapierre,1 -4946,26,26,Seven Thousand Five Hundred and Eihteen,7518,130.png,HSBC,Sidney Lapointe,1 -4947,0,22,On Thousand Six Hundred and Five,1605,0.png,HSBC,Eglantine Forest,1 -4948,29,33,Nine Thousand Eigt Hundred and Thirty Nine,9839,148.png,HSBC,Eleanor Freeman,1 -4949,42,2,Thre Thousand Five Hundred and Eigt,3508,211.png,HSBC,Chi Hsiao,1 -4950,14,5,Sixt Six,66,74.png,HSBC,Fawwaz Zuhayr Mustafa,1 -4951,35,26,Seven Thousand Seven Hundred and Foty For,7744,178.png,HSBC,Sidney Lapointe,1 -4952,35,22,Six Thousand Five Hundred and Sixt For,6564,175.png,HSBC,Eglantine Forest,1 -4953,33,27,Thre Thousand and Twenty Nine,3029,166.png,HSBC,Colette Monjeau,1 -4954,27,19,Seven Thousand and Foty On,7041,138.png,HSBC,Franรงoise Lapierre,1 -4955,28,26,Seven Thousand Seven Hundred and Seenty Two,7772,143.png,HSBC,Sidney Lapointe,1 -4956,33,43,Seven Thousand Eigt Hundred and Sixt Two,7862,166.png,HSBC,Aruna Bekx,1 -4957,32,7,For Thousand Thre Hundred and Ten,4310,161.png,HSBC,Hasna Bahiyaa Amari,1 -4958,14,19,Two Thousand and Seenty On,2071,74.png,HSBC,Franรงoise Lapierre,1 -4959,30,10,Eigt Thousand Thre Hundred and Seenty Eigt,8378,150.png,HSBC,Stephan Schwab,1 -4960,18,27,Two Thousand Nine Hundred and Fifty On,2951,90.png,HSBC,Colette Monjeau,1 -4961,12,12,Five Thousand Two Hundred and Fifty,5250,60.png,HSBC,Marcel Achen,1 -4962,33,35,Two Thousand Two Hundred and Twenty Six,2226,167.png,HSBC,Elliot Humphreys,1 -4963,3,24,On Thousand Two Hundred and Twenty,1220,18.png,HSBC,Clarice Blanc,1 -4964,21,0,Nine Hundred and Fifty Eigt,958,106.png,HSBC,Ethel M. Bryson,1 -4965,24,25,Seven Thousand and Thirty Thre,7033,122.png,HSBC,Fleurette Coudert,1 -4966,5,41,Thre Thousand Nine Hundred and Seenty Seven,3977,27.png,HSBC,Germa de Geus,1 -4967,12,28,Five Thousand For Hundred and Sxten,5416,60.png,HSBC,Chapin Auger,1 -4968,5,14,Six Thousand Two Hundred and Twlve,6212,26.png,HSBC,Renata Lukic,1 -4969,32,20,Thre Thousand Six Hundred and Thirty Two,3632,163.png,HSBC,Seymour Patenaude,1 -4970,15,10,For Thousand Seven Hundred and Eihty Six,4786,77.png,HSBC,Stephan Schwab,1 -4971,37,6,For Thousand Five Hundred and Thirty Two,4532,189.png,HSBC,Abdul Qais Khouri,1 -4972,0,41,Thre Thousand Nine Hundred and Foty Six,3946,2.png,HSBC,Germa de Geus,1 -4973,35,13,Six Thousand and Thirty Nine,6039,175.png,HSBC,Petra Kovacic,1 -4974,11,39,On Thousand For Hundred and Foty Eigt,1448,57.png,HSBC,Katie Connor,1 -4975,22,1,Six Thousand Six Hundred and Six,6606,112.png,HSBC,Emily D. Short,1 -4976,9,22,On Thousand Two Hundred and Foty For,1244,47.png,HSBC,Eglantine Forest,1 -4977,27,36,Seven Thousand Six Hundred and Fifty On,7651,138.png,HSBC,Thomas Chapman,1 -4978,2,2,Two Thousand Six Hundred and Ninety Eigt,2698,11.png,HSBC,Chi Hsiao,1 -4979,23,4,Six Thousand Thre Hundred and Ninety On,6391,117.png,HSBC,Wafiyah Nashwa Wasem,1 -4980,28,33,Thre Thousand Thre Hundred and Fifty,3350,141.png,HSBC,Eleanor Freeman,1 -4981,0,13,Thre Thousand Six Hundred and On,3601,4.png,HSBC,Petra Kovacic,1 -4982,6,13,Nine Thousand and Foty Five,9045,32.png,HSBC,Petra Kovacic,1 -4983,1,24,Six Thousand and Seenty Seven,6077,6.png,HSBC,Clarice Blanc,1 -4984,11,13,Nine Thousand Eigt Hundred and Ninety Nine,9899,57.png,HSBC,Petra Kovacic,1 -4985,37,1,Seven Thousand Eigt Hundred and Twenty Five,7825,186.png,HSBC,Emily D. Short,1 -4986,0,27,Six Thousand Eigt Hundred and For,6804,0.png,HSBC,Colette Monjeau,1 -4987,22,21,Six Thousand Two Hundred and Nine,6209,111.png,HSBC,David Corbeil,1 -4988,29,29,Seven Thousand On Hundred and Thirty On,7131,146.png,HSBC,Hayden Bruce,1 -4989,39,10,Two Thousand Eigt Hundred and Eihty Two,2882,195.png,HSBC,Stephan Schwab,1 -4990,2,41,Seven Thousand Eigt Hundred and Eihty Five,7885,12.png,HSBC,Germa de Geus,1 -4991,38,0,Nine Thousand Thre Hundred and Sixt Nine,9369,190.png,HSBC,Ethel M. Bryson,1 -4992,43,0,Thre Hundred and Sixt Five,365,215.png,HSBC,Ethel M. Bryson,1 -4993,4,3,Thre Thousand Nine Hundred and Sixt For,3964,20.png,HSBC,Jiang Li Tao,1 -4994,2,19,Eigt Thousand Eigt Hundred and Sixt Seven,8867,13.png,HSBC,Franรงoise Lapierre,1 -4995,28,39,Eigt Thousand Eigt Hundred and Eihteen,8818,144.png,HSBC,Katie Connor,1 -4996,13,7,Nine Thousand Six Hundred and Two,9602,67.png,HSBC,Hasna Bahiyaa Amari,1 -4997,24,30,Thre Thousand and Forteen,3014,123.png,HSBC,Jodie Holden,1 -4998,40,17,Eigt Thousand and Thirty,8030,202.png,HSBC,Yolette Cloutier,1 -4999,3,15,Eigt Thousand Seven Hundred and Sixt Eigt,8768,18.png,HSBC,Milenko Tkalcic,1 -5000,32,23,Two Thousand Eigt Hundred and Eleven,2811,164.png,HSBC,Thรฉrรจse Fortier,1 -5001,7,27,Nine Thousand and One,9001,38.png,ICICI,Colette Monjeau,1 -5002,32,0,Six Hundred and Eighty Three,683,161.png,ICICI,Ethel M. Bryson,1 -5003,17,18,Eight Hundred and Sixty,860,86.png,ICICI,Edmee Pelletier,1 -5004,39,19,Nine Thousand Nine Hundred and Ninety Eight,9998,198.png,ICICI,Franรงoise Lapierre,1 -5005,9,9,Four Thousand Eight Hundred and Eighty Five,4885,47.png,ICICI,Maria Kalb,1 -5006,30,41,Nine Thousand Seven Hundred and Ninety Nine,9799,151.png,ICICI,Germa de Geus,1 -5007,28,19,Six Thousand Four Hundred and Thirty,6430,141.png,ICICI,Franรงoise Lapierre,1 -5008,32,2,Three Thousand Six Hundred and Seventy Seven,3677,164.png,ICICI,Chi Hsiao,1 -5009,34,26,Five Thousand Six Hundred and Forty Six,5646,172.png,ICICI,Sidney Lapointe,1 -5010,8,11,Nine Thousand Seven Hundred and Thirty Two,9732,44.png,ICICI,Jens Egger,1 -5011,42,1,Five Thousand Four Hundred and Twenty Two,5422,212.png,ICICI,Emily D. Short,1 -5012,38,12,Six Thousand Nine Hundred and Thirty Nine,6939,191.png,ICICI,Marcel Achen,1 -5013,38,28,Four Thousand Eight Hundred and Nineteen,4819,194.png,ICICI,Chapin Auger,1 -5014,3,10,Four Thousand Seven Hundred and Fifty Three,4753,17.png,ICICI,Stephan Schwab,1 -5015,34,40,Two Thousand Two Hundred and Fifty One,2251,174.png,ICICI,David Howard,1 -5016,12,37,One Thousand Eight Hundred and Ninety Five,1895,64.png,ICICI,Eva Davies,1 -5017,24,20,Four Thousand Three Hundred and Twenty,4320,122.png,ICICI,Seymour Patenaude,1 -5018,30,18,Four Thousand Three Hundred and Ninety Seven,4397,152.png,ICICI,Edmee Pelletier,1 -5019,5,37,Five Hundred and Forty,540,26.png,ICICI,Eva Davies,1 -5020,6,40,Two Thousand Six Hundred and Seven,2607,33.png,ICICI,David Howard,1 -5021,15,20,One Hundred and Nineteen,119,77.png,ICICI,Seymour Patenaude,1 -5022,0,37,Five Thousand Five Hundred and Sixty,5560,0.png,ICICI,Eva Davies,1 -5023,37,18,Two Thousand Nine Hundred and Twenty,2920,188.png,ICICI,Edmee Pelletier,1 -5024,42,13,One Thousand Nine Hundred and Four,1904,213.png,ICICI,Petra Kovacic,1 -5025,26,1,Two Thousand One Hundred and Fifty Seven,2157,134.png,ICICI,Emily D. Short,1 -5026,3,13,Two Thousand and Sixty Six,2066,15.png,ICICI,Petra Kovacic,1 -5027,29,17,Seven Thousand One Hundred and Thirty Three,7133,148.png,ICICI,Yolette Cloutier,1 -5028,43,11,Seven Thousand Two Hundred and Sixty Three,7263,218.png,ICICI,Jens Egger,1 -5029,24,7,Nine Thousand Two Hundred,9200,124.png,ICICI,Hasna Bahiyaa Amari,1 -5030,13,16,Nine Thousand Five Hundred and Eighty Seven,9587,68.png,ICICI,Searlas Grenier,1 -5031,39,25,Three Thousand Two Hundred and Three,3203,197.png,ICICI,Fleurette Coudert,1 -5032,14,33,Two Thousand Eight Hundred and Eighteen,2818,71.png,ICICI,Eleanor Freeman,1 -5033,16,4,Two Thousand Five Hundred and Seventy One,2571,80.png,ICICI,Wafiyah Nashwa Wasem,1 -5034,12,40,Seven Thousand Two Hundred and Thirty Five,7235,61.png,ICICI,David Howard,1 -5035,28,19,Eight Thousand Six Hundred and Fifty Four,8654,143.png,ICICI,Franรงoise Lapierre,1 -5036,17,27,Eight Thousand Three Hundred and Fifty Four,8354,88.png,ICICI,Colette Monjeau,1 -5037,27,28,Five Thousand Five Hundred and Four,5504,137.png,ICICI,Chapin Auger,1 -5038,27,25,Six Thousand Nine Hundred and Three,6903,139.png,ICICI,Fleurette Coudert,1 -5039,6,31,Three Thousand Five Hundred and Fifty Nine,3559,33.png,ICICI,Naomi Grant,1 -5040,42,7,Six Thousand Five Hundred and One,6501,210.png,ICICI,Hasna Bahiyaa Amari,1 -5041,43,28,Five Thousand Three Hundred and Sixty Seven,5367,217.png,ICICI,Chapin Auger,1 -5042,24,0,Seven Thousand Three Hundred and Nineteen,7319,121.png,ICICI,Ethel M. Bryson,1 -5043,28,30,Eight Thousand Four Hundred and Seventy Nine,8479,143.png,ICICI,Jodie Holden,1 -5044,26,39,Three Thousand Eight Hundred and Thirty Five,3835,130.png,ICICI,Katie Connor,1 -5045,23,37,Four Thousand Two Hundred and Seventy Six,4276,117.png,ICICI,Eva Davies,1 -5046,9,22,One Hundred and Nineteen,119,46.png,ICICI,Eglantine Forest,1 -5047,16,43,Three Thousand Three Hundred and Sixty Three,3363,83.png,ICICI,Aruna Bekx,1 -5048,28,37,Four Thousand and Two,4002,144.png,ICICI,Eva Davies,1 -5049,15,19,Seven Thousand Two Hundred and Seventy Three,7273,76.png,ICICI,Franรงoise Lapierre,1 -5050,38,1,Seven Thousand Nine Hundred and Eighty Four,7984,193.png,ICICI,Emily D. Short,1 -5051,41,0,Seven Thousand,7000,205.png,ICICI,Ethel M. Bryson,1 -5052,16,18,One Thousand Eight Hundred and Twenty Five,1825,80.png,ICICI,Edmee Pelletier,1 -5053,2,34,Nine Thousand Nine Hundred and Fourteen,9914,10.png,ICICI,Holly Martin,1 -5054,15,39,Two Thousand Eight Hundred and Eighty Three,2883,76.png,ICICI,Katie Connor,1 -5055,43,3,Six Thousand Nine Hundred and Seventy Three,6973,218.png,ICICI,Jiang Li Tao,1 -5056,35,20,Five Thousand Five Hundred and Seventy Eight,5578,176.png,ICICI,Seymour Patenaude,1 -5057,43,43,Six Thousand Eight Hundred and Five,6805,216.png,ICICI,Aruna Bekx,1 -5058,13,40,Three Thousand and Eighty Three,3083,66.png,ICICI,David Howard,1 -5059,31,23,Four Thousand Five Hundred and Sixty,4560,155.png,ICICI,Thรฉrรจse Fortier,1 -5060,16,38,Five Thousand Nine Hundred and Fifty Three,5953,83.png,ICICI,Freddie Reid,1 -5061,21,35,Six Thousand Six Hundred and Ninety Five,6695,105.png,ICICI,Elliot Humphreys,1 -5062,18,37,One Thousand and Seventy One,1071,91.png,ICICI,Eva Davies,1 -5063,27,12,Six Thousand Two Hundred and Fifty,6250,137.png,ICICI,Marcel Achen,1 -5064,8,13,Two Hundred and Seventy Four,274,43.png,ICICI,Petra Kovacic,1 -5065,18,20,Five Thousand Nine Hundred and Seventeen,5917,93.png,ICICI,Seymour Patenaude,1 -5066,20,18,Five Hundred and Thirty Two,532,101.png,ICICI,Edmee Pelletier,1 -5067,23,39,Two Thousand Seven Hundred and Seventeen,2717,119.png,ICICI,Katie Connor,1 -5068,13,34,Three Thousand Three Hundred and Fifty Six,3356,69.png,ICICI,Holly Martin,1 -5069,13,23,Two Thousand Two Hundred and Fifty Eight,2258,67.png,ICICI,Thรฉrรจse Fortier,1 -5070,17,32,Seven Thousand Three Hundred and Seventy Six,7376,85.png,ICICI,Chelsea Watson,1 -5071,16,38,Five Hundred and Forty Three,543,84.png,ICICI,Freddie Reid,1 -5072,23,27,Four Thousand One Hundred and Thirty One,4131,116.png,ICICI,Colette Monjeau,1 -5073,2,38,Three Hundred and Eighty Two,382,14.png,ICICI,Freddie Reid,1 -5074,38,20,Eight Thousand Six Hundred and Thirty Two,8632,191.png,ICICI,Seymour Patenaude,1 -5075,10,43,Seven Thousand One Hundred and Twenty Six,7126,53.png,ICICI,Aruna Bekx,1 -5076,0,27,Three Hundred and Seventeen,317,2.png,ICICI,Colette Monjeau,1 -5077,9,28,Two Hundred and Five,205,49.png,ICICI,Chapin Auger,1 -5078,2,34,Five Thousand Eight Hundred and Ninety Eight,5898,12.png,ICICI,Holly Martin,1 -5079,10,3,Two Thousand Nine Hundred and Sixty Eight,2968,54.png,ICICI,Jiang Li Tao,1 -5080,18,4,Seven Thousand One Hundred and Ninety Two,7192,91.png,ICICI,Wafiyah Nashwa Wasem,1 -5081,33,13,Four Hundred and Eighty Six,486,165.png,ICICI,Petra Kovacic,1 -5082,0,43,Six Thousand One Hundred and Ninety Six,6196,2.png,ICICI,Aruna Bekx,1 -5083,19,28,Four Hundred and Five,405,97.png,ICICI,Chapin Auger,1 -5084,42,2,Six Thousand and Sixty,6060,211.png,ICICI,Chi Hsiao,1 -5085,13,28,Two Hundred and Twenty Three,223,69.png,ICICI,Chapin Auger,1 -5086,8,26,Six Thousand Four Hundred and Forty Eight,6448,43.png,ICICI,Sidney Lapointe,1 -5087,41,26,Four Thousand Eight Hundred and Forty,4840,209.png,ICICI,Sidney Lapointe,1 -5088,22,0,Four Thousand and Seventy Two,4072,111.png,ICICI,Ethel M. Bryson,1 -5089,20,10,Four Thousand Three Hundred and Seventy Four,4374,100.png,ICICI,Stephan Schwab,1 -5090,6,27,Four Thousand Five Hundred and Thirty Two,4532,30.png,ICICI,Colette Monjeau,1 -5091,15,24,Five Thousand and Thirty Nine,5039,76.png,ICICI,Clarice Blanc,1 -5092,23,27,Nine Thousand Nine Hundred and Fifty,9950,117.png,ICICI,Colette Monjeau,1 -5093,2,31,Two Thousand Five Hundred and Three,2503,10.png,ICICI,Naomi Grant,1 -5094,37,40,Six Thousand Six Hundred and Thirty Nine,6639,187.png,ICICI,David Howard,1 -5095,33,15,Five Hundred and Ninety Three,593,168.png,ICICI,Milenko Tkalcic,1 -5096,33,11,Seven Thousand Six Hundred and Fifty One,7651,169.png,ICICI,Jens Egger,1 -5097,29,29,Four Thousand and Eight,4008,148.png,ICICI,Hayden Bruce,1 -5098,30,7,Three Hundred and Nine,309,150.png,ICICI,Hasna Bahiyaa Amari,1 -5099,17,38,Two Thousand Six Hundred and Ninety Six,2696,89.png,ICICI,Freddie Reid,1 -5100,19,22,Nine Thousand Seven Hundred and Thirteen,9713,97.png,ICICI,Eglantine Forest,1 -5101,34,35,Five Thousand Nine Hundred and Fifty Two,5952,173.png,ICICI,Elliot Humphreys,1 -5102,42,30,Four Thousand One Hundred and Fifty One,4151,212.png,ICICI,Jodie Holden,1 -5103,1,27,Four Thousand One Hundred and Sixty One,4161,5.png,ICICI,Colette Monjeau,1 -5104,3,16,Nine Thousand and Fifty Nine,9059,19.png,ICICI,Searlas Grenier,1 -5105,17,40,Nine Hundred and Thirty Six,936,85.png,ICICI,David Howard,1 -5106,42,18,Six Thousand Seven Hundred and Fifty One,6751,210.png,ICICI,Edmee Pelletier,1 -5107,21,35,One Thousand Five Hundred and Seventy One,1571,105.png,ICICI,Elliot Humphreys,1 -5108,42,33,One Thousand Three Hundred and Fifty Two,1352,212.png,ICICI,Eleanor Freeman,1 -5109,34,19,Three Thousand Six Hundred and Forty Nine,3649,170.png,ICICI,Franรงoise Lapierre,1 -5110,25,23,Five Thousand and Ninety Three,5093,129.png,ICICI,Thรฉrรจse Fortier,1 -5111,17,2,Two Hundred and Sixty Six,266,85.png,ICICI,Chi Hsiao,1 -5112,18,5,Two Thousand One Hundred and Four,2104,94.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5113,35,3,Six Thousand Three Hundred and Two,6302,177.png,ICICI,Jiang Li Tao,1 -5114,38,29,Four Thousand Seven Hundred and Seventy Six,4776,191.png,ICICI,Hayden Bruce,1 -5115,33,13,Five Thousand One Hundred and Fifty Eight,5158,166.png,ICICI,Petra Kovacic,1 -5116,41,37,Eight Thousand Nine Hundred and Seventy Five,8975,206.png,ICICI,Eva Davies,1 -5117,32,12,One Thousand Eight Hundred and Seventy Three,1873,160.png,ICICI,Marcel Achen,1 -5118,8,6,Five Thousand Five Hundred and Twenty,5520,44.png,ICICI,Abdul Qais Khouri,1 -5119,4,9,Nine Thousand Seven Hundred and Twenty Eight,9728,22.png,ICICI,Maria Kalb,1 -5120,36,21,Twenty,20,181.png,ICICI,David Corbeil,1 -5121,22,20,Six Thousand Nine Hundred and Nineteen,6919,110.png,ICICI,Seymour Patenaude,1 -5122,0,36,Three Thousand Seven Hundred and Twenty Three,3723,2.png,ICICI,Thomas Chapman,1 -5123,34,0,Nine Thousand and Nineteen,9019,174.png,ICICI,Ethel M. Bryson,1 -5124,0,13,Six Thousand Four Hundred and Thirty Three,6433,3.png,ICICI,Petra Kovacic,1 -5125,25,41,Five Thousand Two Hundred and Thirty Five,5235,126.png,ICICI,Germa de Geus,1 -5126,42,12,Six Thousand Five Hundred and Sixty Four,6564,211.png,ICICI,Marcel Achen,1 -5127,6,33,Six Thousand Five Hundred and Seventy Five,6575,32.png,ICICI,Eleanor Freeman,1 -5128,11,27,Seven Thousand,7000,57.png,ICICI,Colette Monjeau,1 -5129,2,29,One Hundred and Thirty Two,132,14.png,ICICI,Hayden Bruce,1 -5130,6,2,Eight Thousand Two Hundred and Forty Five,8245,30.png,ICICI,Chi Hsiao,1 -5131,25,9,Eight Thousand Five Hundred and Seventy Three,8573,128.png,ICICI,Maria Kalb,1 -5132,19,15,Five Thousand One Hundred and Fifty Five,5155,99.png,ICICI,Milenko Tkalcic,1 -5133,22,3,Ninety Eight,98,113.png,ICICI,Jiang Li Tao,1 -5134,40,12,Nine Thousand Six Hundred and Ninety Eight,9698,200.png,ICICI,Marcel Achen,1 -5135,10,0,Seven Thousand Three Hundred and Fifty One,7351,53.png,ICICI,Ethel M. Bryson,1 -5136,17,37,Five Hundred and Two,502,89.png,ICICI,Eva Davies,1 -5137,21,29,Three Thousand Nine Hundred and Thirty Six,3936,106.png,ICICI,Hayden Bruce,1 -5138,22,13,Nine Thousand Three Hundred and Thirty Five,9335,113.png,ICICI,Petra Kovacic,1 -5139,24,43,One Thousand Eight Hundred and Seventy Eight,1878,123.png,ICICI,Aruna Bekx,1 -5140,26,19,Nine Thousand Five Hundred and Sixteen,9516,131.png,ICICI,Franรงoise Lapierre,1 -5141,36,23,Seven Thousand Nine Hundred and Forty Seven,7947,182.png,ICICI,Thรฉrรจse Fortier,1 -5142,23,3,Three Hundred and Eighty Eight,388,119.png,ICICI,Jiang Li Tao,1 -5143,42,31,Four Thousand Four Hundred and Forty Eight,4448,211.png,ICICI,Naomi Grant,1 -5144,5,40,Seven Thousand One Hundred and Sixty Three,7163,26.png,ICICI,David Howard,1 -5145,0,35,Five Thousand One Hundred and Thirty Four,5134,3.png,ICICI,Elliot Humphreys,1 -5146,33,39,Three Thousand Four Hundred and Ninety,3490,169.png,ICICI,Katie Connor,1 -5147,1,27,Seven Thousand One Hundred and Sixty Nine,7169,8.png,ICICI,Colette Monjeau,1 -5148,42,14,Nine Thousand Six Hundred and Eighty One,9681,212.png,ICICI,Renata Lukic,1 -5149,42,41,Two Thousand Four Hundred and Twelve,2412,212.png,ICICI,Germa de Geus,1 -5150,28,25,Two Thousand Six Hundred and Twenty,2620,143.png,ICICI,Fleurette Coudert,1 -5151,29,39,Six Thousand Four Hundred and Sixty Five,6465,149.png,ICICI,Katie Connor,1 -5152,40,27,One Thousand and Thirty One,1031,200.png,ICICI,Colette Monjeau,1 -5153,43,2,Six Thousand Nine Hundred and Thirty Six,6936,219.png,ICICI,Chi Hsiao,1 -5154,4,2,Seven Thousand Two Hundred and Fifty Nine,7259,23.png,ICICI,Chi Hsiao,1 -5155,1,36,Two Thousand One Hundred and Sixty Nine,2169,5.png,ICICI,Thomas Chapman,1 -5156,41,11,Nine Thousand Two Hundred and Ten,9210,205.png,ICICI,Jens Egger,1 -5157,1,41,Three Thousand Seven Hundred and Sixty Three,3763,7.png,ICICI,Germa de Geus,1 -5158,3,13,Nine Thousand Five Hundred and Sixty,9560,19.png,ICICI,Petra Kovacic,1 -5159,10,5,Four Thousand Six Hundred and Thirty Eight,4638,53.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5160,1,41,Two Thousand and Fifty One,2051,5.png,ICICI,Germa de Geus,1 -5161,35,25,Two Thousand Eight Hundred and Forty Two,2842,175.png,ICICI,Fleurette Coudert,1 -5162,30,41,Nine Thousand Seven Hundred and Seventy Seven,9777,152.png,ICICI,Germa de Geus,1 -5163,3,39,One Thousand Six Hundred and Fifty Five,1655,16.png,ICICI,Katie Connor,1 -5164,28,2,Seven Thousand Two Hundred and Twelve,7212,144.png,ICICI,Chi Hsiao,1 -5165,31,5,Six Thousand Eight Hundred and Nine,6809,157.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5166,31,43,Three Thousand Three Hundred and Nineteen,3319,159.png,ICICI,Aruna Bekx,1 -5167,32,33,One Thousand Eight Hundred and Ninety Three,1893,160.png,ICICI,Eleanor Freeman,1 -5168,26,4,Four Thousand Seven Hundred and Thirty One,4731,133.png,ICICI,Wafiyah Nashwa Wasem,1 -5169,18,40,Seven Hundred and Eighty Three,783,93.png,ICICI,David Howard,1 -5170,36,5,Four Thousand Nine Hundred and Twenty Seven,4927,184.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5171,15,42,Nine Thousand Two Hundred and Sixteen,9216,77.png,ICICI,Brady Jamin,1 -5172,36,22,Seven Thousand Seven Hundred and Ninety Six,7796,183.png,ICICI,Eglantine Forest,1 -5173,4,33,Five Thousand Three Hundred and Twenty Five,5325,21.png,ICICI,Eleanor Freeman,1 -5174,36,27,Four Thousand and Fifty Two,4052,183.png,ICICI,Colette Monjeau,1 -5175,32,15,Two Thousand Nine Hundred and Eighty Three,2983,163.png,ICICI,Milenko Tkalcic,1 -5176,29,31,Three Thousand Seven Hundred and Twenty Nine,3729,147.png,ICICI,Naomi Grant,1 -5177,41,40,Nine Thousand and Ninety Three,9093,207.png,ICICI,David Howard,1 -5178,35,16,One Thousand Two Hundred and Thirty Eight,1238,179.png,ICICI,Searlas Grenier,1 -5179,36,18,Five Thousand Four Hundred and Sixty Seven,5467,180.png,ICICI,Edmee Pelletier,1 -5180,11,36,Three Thousand One Hundred and Ninety Five,3195,57.png,ICICI,Thomas Chapman,1 -5181,28,30,Four Thousand One Hundred and Twenty Nine,4129,140.png,ICICI,Jodie Holden,1 -5182,2,35,One Thousand and Sixty Two,1062,12.png,ICICI,Elliot Humphreys,1 -5183,17,28,Seventy Three,73,87.png,ICICI,Chapin Auger,1 -5184,15,16,Six Thousand and Seventy Three,6073,79.png,ICICI,Searlas Grenier,1 -5185,39,15,One Thousand and Eighty Five,1085,198.png,ICICI,Milenko Tkalcic,1 -5186,41,22,Four Thousand Six Hundred and Ten,4610,209.png,ICICI,Eglantine Forest,1 -5187,29,2,Nine Thousand and Sixty Six,9066,149.png,ICICI,Chi Hsiao,1 -5188,35,19,Seven Thousand and Ninety Four,7094,178.png,ICICI,Franรงoise Lapierre,1 -5189,42,31,Three Thousand Three Hundred and Thirty Eight,3338,211.png,ICICI,Naomi Grant,1 -5190,18,38,Eight Thousand Eight Hundred and Fifty Four,8854,91.png,ICICI,Freddie Reid,1 -5191,34,27,Five Hundred and Five,505,173.png,ICICI,Colette Monjeau,1 -5192,23,29,Nine Thousand Three Hundred and Thirty Seven,9337,116.png,ICICI,Hayden Bruce,1 -5193,6,2,Seven Thousand One Hundred and Eighty One,7181,31.png,ICICI,Chi Hsiao,1 -5194,11,42,Eight Thousand and Seventy One,8071,56.png,ICICI,Brady Jamin,1 -5195,6,15,Nine Thousand Nine Hundred and Fifty Eight,9958,30.png,ICICI,Milenko Tkalcic,1 -5196,35,11,Seven Thousand Eight Hundred and Ninety Six,7896,178.png,ICICI,Jens Egger,1 -5197,26,17,Seven Thousand Three Hundred and Eighty Five,7385,131.png,ICICI,Yolette Cloutier,1 -5198,4,17,Three Thousand and Seventeen,3017,23.png,ICICI,Yolette Cloutier,1 -5199,40,39,Nine Thousand Four Hundred and Thirty One,9431,203.png,ICICI,Katie Connor,1 -5200,26,12,Eight Thousand Six Hundred and Eighteen,8618,132.png,ICICI,Marcel Achen,1 -5201,3,1,Eight Thousand Four Hundred and Thirty Five,8435,16.png,ICICI,Emily D. Short,1 -5202,18,8,Two Thousand Seven Hundred and Eighty Five,2785,90.png,ICICI,Steffen Krueger,1 -5203,4,32,Four Thousand Six Hundred and Twenty,4620,21.png,ICICI,Chelsea Watson,1 -5204,3,30,Nine Thousand Five Hundred and Six,9506,15.png,ICICI,Jodie Holden,1 -5205,20,40,Three Thousand Two Hundred and Forty One,3241,103.png,ICICI,David Howard,1 -5206,41,20,Six Thousand Four Hundred and Ninety Eight,6498,205.png,ICICI,Seymour Patenaude,1 -5207,15,11,Nine Thousand Two Hundred and Eighteen,9218,77.png,ICICI,Jens Egger,1 -5208,43,4,Three Hundred and Twenty Nine,329,218.png,ICICI,Wafiyah Nashwa Wasem,1 -5209,3,26,Five Thousand Three Hundred and Forty Six,5346,17.png,ICICI,Sidney Lapointe,1 -5210,31,29,Two Thousand Eight Hundred and Fifty Nine,2859,159.png,ICICI,Hayden Bruce,1 -5211,24,16,Three Thousand Eight Hundred and Sixty Three,3863,120.png,ICICI,Searlas Grenier,1 -5212,42,22,Eight Thousand Four Hundred and Fifty,8450,214.png,ICICI,Eglantine Forest,1 -5213,36,19,Three Thousand One Hundred,3100,180.png,ICICI,Franรงoise Lapierre,1 -5214,32,2,One Thousand Six Hundred and Forty Six,1646,164.png,ICICI,Chi Hsiao,1 -5215,30,39,Four Thousand Three Hundred and Fifty Two,4352,154.png,ICICI,Katie Connor,1 -5216,25,37,Three Thousand One Hundred and Fifty Nine,3159,125.png,ICICI,Eva Davies,1 -5217,23,19,One Thousand One Hundred and Fifty Two,1152,117.png,ICICI,Franรงoise Lapierre,1 -5218,17,9,Three Thousand One Hundred and Eighty Two,3182,89.png,ICICI,Maria Kalb,1 -5219,30,1,One Thousand One Hundred and Fifty One,1151,152.png,ICICI,Emily D. Short,1 -5220,18,34,Seven Thousand Seven Hundred and Eleven,7711,94.png,ICICI,Holly Martin,1 -5221,25,30,Nine Thousand Eight Hundred and Forty One,9841,128.png,ICICI,Jodie Holden,1 -5222,21,30,Nine Thousand Six Hundred and Twenty Six,9626,109.png,ICICI,Jodie Holden,1 -5223,41,43,Nine Hundred and Forty Three,943,205.png,ICICI,Aruna Bekx,1 -5224,16,22,Four Thousand Eight Hundred and Seventy Six,4876,83.png,ICICI,Eglantine Forest,1 -5225,8,5,Six Thousand Seven Hundred and Six,6706,44.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5226,33,20,One Thousand Eight Hundred and Seventy Three,1873,166.png,ICICI,Seymour Patenaude,1 -5227,16,22,Two Thousand and Seventy Seven,2077,84.png,ICICI,Eglantine Forest,1 -5228,13,26,Three Thousand Four Hundred and Eighty Eight,3488,67.png,ICICI,Sidney Lapointe,1 -5229,27,32,Six Thousand Two Hundred and Fifty Two,6252,135.png,ICICI,Chelsea Watson,1 -5230,19,0,One Thousand One Hundred and Forty Three,1143,99.png,ICICI,Ethel M. Bryson,1 -5231,34,4,Six Thousand and Fifty Six,6056,170.png,ICICI,Wafiyah Nashwa Wasem,1 -5232,30,11,Two Thousand Seven Hundred and Forty Two,2742,151.png,ICICI,Jens Egger,1 -5233,14,2,Six Thousand One Hundred and Twelve,6112,74.png,ICICI,Chi Hsiao,1 -5234,31,3,One Thousand Nine Hundred and Sixty Two,1962,157.png,ICICI,Jiang Li Tao,1 -5235,9,0,Eight Thousand Nine Hundred and Fifty Five,8955,46.png,ICICI,Ethel M. Bryson,1 -5236,8,26,Eight Thousand Nine Hundred and Six,8906,43.png,ICICI,Sidney Lapointe,1 -5237,29,14,Eight Thousand Three Hundred and Four,8304,148.png,ICICI,Renata Lukic,1 -5238,29,11,Seven Hundred and Forty Three,743,147.png,ICICI,Jens Egger,1 -5239,2,25,Five Thousand Six Hundred and Sixty Five,5665,12.png,ICICI,Fleurette Coudert,1 -5240,18,15,Two Thousand Eight Hundred and Ninety Six,2896,90.png,ICICI,Milenko Tkalcic,1 -5241,1,15,Nine Thousand Three Hundred and Fifty Five,9355,8.png,ICICI,Milenko Tkalcic,1 -5242,34,23,Six Thousand Three Hundred and Sixty Three,6363,174.png,ICICI,Thรฉrรจse Fortier,1 -5243,20,31,Two Thousand Three Hundred and Ninety Three,2393,101.png,ICICI,Naomi Grant,1 -5244,8,8,Four Thousand and Twenty Six,4026,42.png,ICICI,Steffen Krueger,1 -5245,0,11,Three Thousand Eight Hundred and Forty Five,3845,0.png,ICICI,Jens Egger,1 -5246,9,9,Nine,9,48.png,ICICI,Maria Kalb,1 -5247,15,21,Two Thousand Nine Hundred and Eighty,2980,79.png,ICICI,David Corbeil,1 -5248,29,16,One Thousand Four Hundred and One,1401,149.png,ICICI,Searlas Grenier,1 -5249,18,30,Seven Thousand Five Hundred and Seventy Seven,7577,93.png,ICICI,Jodie Holden,1 -5250,32,23,Four Thousand Three Hundred and Nineteen,4319,164.png,ICICI,Thรฉrรจse Fortier,1 -5251,16,17,Seven Thousand Eight Hundred and Four,7804,82.png,ICICI,Yolette Cloutier,1 -5252,5,4,Three Thousand Eight Hundred and Ninety Seven,3897,27.png,ICICI,Wafiyah Nashwa Wasem,1 -5253,9,10,Six Thousand and Thirty One,6031,47.png,ICICI,Stephan Schwab,1 -5254,31,41,One Thousand Five Hundred and Thirteen,1513,159.png,ICICI,Germa de Geus,1 -5255,41,14,Eight Thousand Nine Hundred and Seven,8907,207.png,ICICI,Renata Lukic,1 -5256,9,17,Six Hundred and Eighty Two,682,49.png,ICICI,Yolette Cloutier,1 -5257,22,23,Four Thousand Two Hundred and Forty,4240,110.png,ICICI,Thรฉrรจse Fortier,1 -5258,27,20,One Thousand Six Hundred and Sixty,1660,138.png,ICICI,Seymour Patenaude,1 -5259,5,1,Three Thousand Eight Hundred and Forty Nine,3849,29.png,ICICI,Emily D. Short,1 -5260,31,39,Five Thousand Three Hundred and Ten,5310,159.png,ICICI,Katie Connor,1 -5261,18,7,Three Thousand Eight Hundred and Fifty Two,3852,90.png,ICICI,Hasna Bahiyaa Amari,1 -5262,2,3,Two Thousand Two Hundred and Ninety Six,2296,10.png,ICICI,Jiang Li Tao,1 -5263,3,35,Eight Hundred and Eleven,811,17.png,ICICI,Elliot Humphreys,1 -5264,16,18,One Thousand Two Hundred and Eighty Four,1284,84.png,ICICI,Edmee Pelletier,1 -5265,18,33,One Thousand Nine Hundred and Ninety One,1991,91.png,ICICI,Eleanor Freeman,1 -5266,43,20,Two Thousand Eight Hundred and Five,2805,216.png,ICICI,Seymour Patenaude,1 -5267,1,6,Six Thousand Four Hundred and Twenty Three,6423,5.png,ICICI,Abdul Qais Khouri,1 -5268,21,35,Nine Thousand Four Hundred and Forty Seven,9447,106.png,ICICI,Elliot Humphreys,1 -5269,3,17,Two Thousand Two Hundred and Forty Five,2245,17.png,ICICI,Yolette Cloutier,1 -5270,35,25,Six Thousand Eight Hundred and Seventy Seven,6877,177.png,ICICI,Fleurette Coudert,1 -5271,12,6,Eight Thousand Nine Hundred and Sixty Four,8964,61.png,ICICI,Abdul Qais Khouri,1 -5272,26,4,One Thousand Three Hundred and Fifty,1350,130.png,ICICI,Wafiyah Nashwa Wasem,1 -5273,25,41,Eight Thousand Three Hundred and Forty Nine,8349,126.png,ICICI,Germa de Geus,1 -5274,2,1,Four Thousand Five Hundred and Sixty Eight,4568,10.png,ICICI,Emily D. Short,1 -5275,6,7,Two Thousand Six Hundred and Eighty Eight,2688,34.png,ICICI,Hasna Bahiyaa Amari,1 -5276,0,19,Six Thousand Five Hundred and Eleven,6511,4.png,ICICI,Franรงoise Lapierre,1 -5277,2,21,Seven Hundred and Seventeen,717,14.png,ICICI,David Corbeil,1 -5278,13,14,Four Thousand Four Hundred and Thirty Three,4433,65.png,ICICI,Renata Lukic,1 -5279,9,29,Two Thousand One Hundred and Fifty Six,2156,47.png,ICICI,Hayden Bruce,1 -5280,9,35,One Thousand Nine Hundred and Twenty Eight,1928,47.png,ICICI,Elliot Humphreys,1 -5281,33,31,Three Thousand Seven Hundred and Twenty Nine,3729,166.png,ICICI,Naomi Grant,1 -5282,38,14,Eight Thousand Three Hundred and Sixty Six,8366,191.png,ICICI,Renata Lukic,1 -5283,14,9,Four Thousand Nine Hundred and Seventy Eight,4978,72.png,ICICI,Maria Kalb,1 -5284,34,36,Five Hundred and Seventy Three,573,171.png,ICICI,Thomas Chapman,1 -5285,25,26,Six Thousand One Hundred and Eighty Seven,6187,127.png,ICICI,Sidney Lapointe,1 -5286,2,25,Five Thousand One Hundred and Sixty Eight,5168,14.png,ICICI,Fleurette Coudert,1 -5287,6,0,One Thousand Three Hundred and Nine,1309,31.png,ICICI,Ethel M. Bryson,1 -5288,23,9,Six Thousand Nine Hundred and Ninety Nine,6999,117.png,ICICI,Maria Kalb,1 -5289,38,39,Eight Thousand Nine Hundred and Four,8904,193.png,ICICI,Katie Connor,1 -5290,8,3,Three Thousand and Eighteen,3018,40.png,ICICI,Jiang Li Tao,1 -5291,26,21,One Thousand Four Hundred and Six,1406,134.png,ICICI,David Corbeil,1 -5292,9,5,Nine Thousand Six Hundred and Six,9606,47.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5293,16,21,Three Thousand Four Hundred and Sixty Three,3463,84.png,ICICI,David Corbeil,1 -5294,32,35,One Thousand Five Hundred and Ninety Three,1593,163.png,ICICI,Elliot Humphreys,1 -5295,7,26,Nine Thousand One Hundred and Thirteen,9113,36.png,ICICI,Sidney Lapointe,1 -5296,13,2,Two Thousand Two Hundred and Forty Nine,2249,68.png,ICICI,Chi Hsiao,1 -5297,39,40,Five Thousand Two Hundred and Ten,5210,196.png,ICICI,David Howard,1 -5298,6,5,Eight Thousand Three Hundred and Eighty Two,8382,33.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5299,4,13,Three Thousand Two Hundred and Eighty,3280,21.png,ICICI,Petra Kovacic,1 -5300,27,19,Five Thousand Eight Hundred and Thirty Five,5835,138.png,ICICI,Franรงoise Lapierre,1 -5301,42,5,Three Thousand Two Hundred and Fifty,3250,213.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5302,42,10,Four Thousand Nine Hundred and Fifty Two,4952,212.png,ICICI,Stephan Schwab,1 -5303,40,19,Two Thousand Eight Hundred and Thirty Eight,2838,201.png,ICICI,Franรงoise Lapierre,1 -5304,13,8,Five Thousand and Sixty Eight,5068,66.png,ICICI,Steffen Krueger,1 -5305,23,31,Eight Thousand Six Hundred and Eighty Four,8684,118.png,ICICI,Naomi Grant,1 -5306,33,11,Four Thousand Five Hundred and Seventy Seven,4577,169.png,ICICI,Jens Egger,1 -5307,16,39,One Thousand Two Hundred and Seventy,1270,82.png,ICICI,Katie Connor,1 -5308,20,42,Eight Thousand Seven Hundred and Three,8703,103.png,ICICI,Brady Jamin,1 -5309,31,18,Nine Thousand Eight Hundred and Forty Three,9843,155.png,ICICI,Edmee Pelletier,1 -5310,37,28,Five Thousand and Seventy Three,5073,189.png,ICICI,Chapin Auger,1 -5311,21,15,One Thousand Six Hundred and Seventy Seven,1677,108.png,ICICI,Milenko Tkalcic,1 -5312,5,19,Seven Thousand Seven Hundred and Seventy Four,7774,25.png,ICICI,Franรงoise Lapierre,1 -5313,12,13,Two Thousand Two Hundred and Twenty,2220,62.png,ICICI,Petra Kovacic,1 -5314,4,35,Three Thousand Five Hundred and Forty,3540,22.png,ICICI,Elliot Humphreys,1 -5315,15,18,Three Thousand Seven Hundred and Fifty Seven,3757,77.png,ICICI,Edmee Pelletier,1 -5316,42,15,Seven Hundred and Sixty Seven,767,214.png,ICICI,Milenko Tkalcic,1 -5317,32,27,Seven Thousand Seven Hundred and Twenty Two,7722,164.png,ICICI,Colette Monjeau,1 -5318,23,5,Nine Thousand Two Hundred and Ninety Two,9292,118.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5319,5,24,Seventeen,17,27.png,ICICI,Clarice Blanc,1 -5320,3,12,Six Thousand Nine Hundred and Sixty Nine,6969,16.png,ICICI,Marcel Achen,1 -5321,38,10,Eight Hundred and Forty Three,843,192.png,ICICI,Stephan Schwab,1 -5322,19,11,Eight Hundred and Ten,810,98.png,ICICI,Jens Egger,1 -5323,16,27,Five Thousand Two Hundred and Twenty,5220,83.png,ICICI,Colette Monjeau,1 -5324,4,1,Seven Thousand Five Hundred and Sixty Three,7563,24.png,ICICI,Emily D. Short,1 -5325,4,40,One Thousand and Six,1006,22.png,ICICI,David Howard,1 -5326,36,11,Six Thousand Four Hundred and Fifty,6450,183.png,ICICI,Jens Egger,1 -5327,10,14,One Thousand Two Hundred and Ninety Six,1296,53.png,ICICI,Renata Lukic,1 -5328,31,29,Three Thousand and Sixty Seven,3067,155.png,ICICI,Hayden Bruce,1 -5329,43,1,Seven Thousand Two Hundred and Twenty Five,7225,217.png,ICICI,Emily D. Short,1 -5330,31,23,Four Hundred and Thirty Six,436,155.png,ICICI,Thรฉrรจse Fortier,1 -5331,15,20,Four Hundred and Fifty Six,456,76.png,ICICI,Seymour Patenaude,1 -5332,19,15,Nine Thousand Seven Hundred and Twenty Three,9723,97.png,ICICI,Milenko Tkalcic,1 -5333,32,41,Four Thousand Nine Hundred and Twenty Four,4924,164.png,ICICI,Germa de Geus,1 -5334,17,43,One Thousand Six Hundred and Fifty Three,1653,88.png,ICICI,Aruna Bekx,1 -5335,32,32,Eight Thousand Eight Hundred and Twenty Eight,8828,163.png,ICICI,Chelsea Watson,1 -5336,43,6,Seven Thousand One Hundred and Seventy Two,7172,216.png,ICICI,Abdul Qais Khouri,1 -5337,36,41,Eight Thousand Seven Hundred and Fourteen,8714,181.png,ICICI,Germa de Geus,1 -5338,33,24,Seven Thousand Three Hundred and Ninety Two,7392,169.png,ICICI,Clarice Blanc,1 -5339,0,33,Six Thousand One Hundred and Thirty Two,6132,0.png,ICICI,Eleanor Freeman,1 -5340,20,1,Five Hundred and Eighty,580,102.png,ICICI,Emily D. Short,1 -5341,2,12,Three Thousand Four Hundred and Thirty Seven,3437,12.png,ICICI,Marcel Achen,1 -5342,39,38,Two Hundred and Twenty Two,222,198.png,ICICI,Freddie Reid,1 -5343,4,6,Three Hundred and Thirty Eight,338,23.png,ICICI,Abdul Qais Khouri,1 -5344,43,22,One Thousand Two Hundred and Ninety Three,1293,219.png,ICICI,Eglantine Forest,1 -5345,33,10,Two Thousand Three Hundred and Seventy One,2371,166.png,ICICI,Stephan Schwab,1 -5346,28,12,Four Thousand One Hundred and Sixty Eight,4168,144.png,ICICI,Marcel Achen,1 -5347,31,34,One Thousand Four Hundred and Ninety Eight,1498,156.png,ICICI,Holly Martin,1 -5348,14,22,Four Thousand Four Hundred and Ninety Two,4492,74.png,ICICI,Eglantine Forest,1 -5349,29,27,One Thousand Four Hundred and Twenty Eight,1428,148.png,ICICI,Colette Monjeau,1 -5350,14,32,One Thousand One Hundred and Eighty Nine,1189,70.png,ICICI,Chelsea Watson,1 -5351,39,36,Three Thousand Two Hundred and Sixty Six,3266,199.png,ICICI,Thomas Chapman,1 -5352,39,10,Seven Thousand One Hundred and Eight,7108,199.png,ICICI,Stephan Schwab,1 -5353,25,41,Seven Thousand Three Hundred and Ninety Three,7393,129.png,ICICI,Germa de Geus,1 -5354,28,8,Seven Thousand and Fifty One,7051,142.png,ICICI,Steffen Krueger,1 -5355,11,10,Seven Thousand Seven Hundred and Seventy Four,7774,55.png,ICICI,Stephan Schwab,1 -5356,7,26,Two Thousand Six Hundred and Fifty Eight,2658,38.png,ICICI,Sidney Lapointe,1 -5357,28,36,One Thousand Three Hundred and Forty,1340,144.png,ICICI,Thomas Chapman,1 -5358,23,27,Seven Thousand Seven Hundred and Eighty Three,7783,116.png,ICICI,Colette Monjeau,1 -5359,32,11,Eight Thousand One Hundred and Forty Eight,8148,161.png,ICICI,Jens Egger,1 -5360,15,28,Twenty Four,24,76.png,ICICI,Chapin Auger,1 -5361,15,6,Seven Thousand Nine Hundred and Ninety,7990,77.png,ICICI,Abdul Qais Khouri,1 -5362,18,4,Eight Thousand Four Hundred and Ninety Two,8492,90.png,ICICI,Wafiyah Nashwa Wasem,1 -5363,28,0,Seven Thousand One Hundred and Thirty Four,7134,141.png,ICICI,Ethel M. Bryson,1 -5364,30,26,Three Thousand Eight Hundred and Twenty,3820,150.png,ICICI,Sidney Lapointe,1 -5365,43,40,Eight Thousand Four Hundred and Seventy Five,8475,217.png,ICICI,David Howard,1 -5366,9,14,Five Thousand and Sixty Four,5064,49.png,ICICI,Renata Lukic,1 -5367,12,12,One Thousand Two Hundred and Forty Nine,1249,63.png,ICICI,Marcel Achen,1 -5368,13,19,Eight Thousand Eight Hundred and Ninety Five,8895,65.png,ICICI,Franรงoise Lapierre,1 -5369,12,5,Three Hundred and Seventy,370,62.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5370,7,19,Seven Thousand and Eighty One,7081,35.png,ICICI,Franรงoise Lapierre,1 -5371,8,17,Seven Thousand Two Hundred and Forty Four,7244,43.png,ICICI,Yolette Cloutier,1 -5372,38,8,Nine Thousand One Hundred and Eleven,9111,194.png,ICICI,Steffen Krueger,1 -5373,32,30,Six Thousand Three Hundred and Sixty Two,6362,162.png,ICICI,Jodie Holden,1 -5374,30,10,Three Thousand Four Hundred and Eighty Three,3483,151.png,ICICI,Stephan Schwab,1 -5375,13,38,Two Hundred and Fifteen,215,65.png,ICICI,Freddie Reid,1 -5376,38,38,Six Thousand Four Hundred and Two,6402,190.png,ICICI,Freddie Reid,1 -5377,15,33,One Thousand Seven Hundred and Ninety Two,1792,75.png,ICICI,Eleanor Freeman,1 -5378,36,20,Eight Thousand One Hundred and Seventy Three,8173,180.png,ICICI,Seymour Patenaude,1 -5379,42,26,Two Thousand and Five,2005,213.png,ICICI,Sidney Lapointe,1 -5380,33,26,Five Thousand Four Hundred and Eighty Seven,5487,167.png,ICICI,Sidney Lapointe,1 -5381,26,15,Five Thousand Nine Hundred and Twenty Two,5922,134.png,ICICI,Milenko Tkalcic,1 -5382,5,10,Eight Thousand Six Hundred and Thirty Seven,8637,27.png,ICICI,Stephan Schwab,1 -5383,29,13,Four Hundred and Seventy Six,476,147.png,ICICI,Petra Kovacic,1 -5384,1,40,Six Thousand Three Hundred and Nine,6309,9.png,ICICI,David Howard,1 -5385,14,27,Five Thousand Five Hundred and Sixteen,5516,73.png,ICICI,Colette Monjeau,1 -5386,42,4,Four Thousand One Hundred and Eighty Four,4184,211.png,ICICI,Wafiyah Nashwa Wasem,1 -5387,34,36,Six Thousand Two Hundred and Seventy Three,6273,171.png,ICICI,Thomas Chapman,1 -5388,33,19,Seven Thousand Six Hundred and Twenty One,7621,166.png,ICICI,Franรงoise Lapierre,1 -5389,28,4,Nine Thousand Three Hundred and Ninety Eight,9398,144.png,ICICI,Wafiyah Nashwa Wasem,1 -5390,35,0,Eight Thousand Six Hundred and Twenty Eight,8628,179.png,ICICI,Ethel M. Bryson,1 -5391,29,8,Two Thousand Six Hundred and Sixty Nine,2669,148.png,ICICI,Steffen Krueger,1 -5392,20,1,Nine Thousand Two Hundred and Forty Five,9245,102.png,ICICI,Emily D. Short,1 -5393,43,4,Seven Thousand Eight Hundred and Seventy Nine,7879,219.png,ICICI,Wafiyah Nashwa Wasem,1 -5394,13,6,Two Thousand Three Hundred and Eighty Two,2382,66.png,ICICI,Abdul Qais Khouri,1 -5395,22,37,One Thousand One Hundred and Fifty One,1151,114.png,ICICI,Eva Davies,1 -5396,7,16,Four Thousand One Hundred and Eighty Six,4186,36.png,ICICI,Searlas Grenier,1 -5397,30,29,Eight Thousand and Ninety Eight,8098,150.png,ICICI,Hayden Bruce,1 -5398,6,8,One Thousand Three Hundred and Eighty Eight,1388,31.png,ICICI,Steffen Krueger,1 -5399,6,36,Three Thousand Two Hundred and Five,3205,33.png,ICICI,Thomas Chapman,1 -5400,1,32,Five Thousand Nine Hundred and Seventy Seven,5977,7.png,ICICI,Chelsea Watson,1 -5401,10,11,Six Thousand and Fifteen,6015,54.png,ICICI,Jens Egger,1 -5402,43,10,Three Thousand Six Hundred and Forty,3640,218.png,ICICI,Stephan Schwab,1 -5403,6,3,Six Thousand One Hundred and Seven,6107,32.png,ICICI,Jiang Li Tao,1 -5404,33,1,Four Hundred and Fifty Nine,459,168.png,ICICI,Emily D. Short,1 -5405,2,30,Seven Thousand One Hundred and Twenty Five,7125,11.png,ICICI,Jodie Holden,1 -5406,4,34,Six Thousand Seven Hundred and Seven,6707,22.png,ICICI,Holly Martin,1 -5407,25,32,Seven Thousand One Hundred and Eighty Nine,7189,129.png,ICICI,Chelsea Watson,1 -5408,8,37,Three Thousand and Thirty,3030,41.png,ICICI,Eva Davies,1 -5409,27,5,Two Hundred and Twenty Two,222,137.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5410,2,14,Four Thousand Nine Hundred and Thirty Seven,4937,14.png,ICICI,Renata Lukic,1 -5411,27,28,Three Thousand One Hundred and Ninety Eight,3198,135.png,ICICI,Chapin Auger,1 -5412,23,42,Five Thousand One Hundred and Fifty,5150,117.png,ICICI,Brady Jamin,1 -5413,23,4,Eight Thousand Eight Hundred and Eleven,8811,118.png,ICICI,Wafiyah Nashwa Wasem,1 -5414,20,35,Two Thousand Nine Hundred and Twenty Five,2925,101.png,ICICI,Elliot Humphreys,1 -5415,28,6,One Thousand Nine Hundred and Sixty Five,1965,143.png,ICICI,Abdul Qais Khouri,1 -5416,29,39,Five Thousand Nine Hundred and Seventy Seven,5977,147.png,ICICI,Katie Connor,1 -5417,7,34,Six Thousand Seven Hundred and Two,6702,38.png,ICICI,Holly Martin,1 -5418,28,24,Nine Thousand Five Hundred and Thirty Nine,9539,143.png,ICICI,Clarice Blanc,1 -5419,26,0,Eight Thousand Nine Hundred and Eighty Three,8983,132.png,ICICI,Ethel M. Bryson,1 -5420,5,1,Eight Thousand and Thirty Four,8034,25.png,ICICI,Emily D. Short,1 -5421,6,27,Nine Thousand Nine Hundred and Fourteen,9914,33.png,ICICI,Colette Monjeau,1 -5422,16,14,One Thousand Seven Hundred and Seventy Two,1772,83.png,ICICI,Renata Lukic,1 -5423,18,17,Nine Thousand and Fifty Eight,9058,92.png,ICICI,Yolette Cloutier,1 -5424,43,41,Three Thousand Six Hundred and Fifteen,3615,218.png,ICICI,Germa de Geus,1 -5425,24,0,Six Thousand Eight Hundred and Forty Six,6846,124.png,ICICI,Ethel M. Bryson,1 -5426,5,0,Eight Thousand Four Hundred and Sixty Four,8464,29.png,ICICI,Ethel M. Bryson,1 -5427,8,43,Four Thousand Five Hundred and Seventy Nine,4579,43.png,ICICI,Aruna Bekx,1 -5428,41,41,Two Thousand Two Hundred and Thirty One,2231,209.png,ICICI,Germa de Geus,1 -5429,43,20,Three Thousand Five Hundred and Sixty Two,3562,218.png,ICICI,Seymour Patenaude,1 -5430,43,26,Nine Thousand Two Hundred and Ninety Six,9296,215.png,ICICI,Sidney Lapointe,1 -5431,26,20,Six Thousand Two Hundred and Thirty Three,6233,133.png,ICICI,Seymour Patenaude,1 -5432,12,32,Nine Thousand Two Hundred and Thirty Nine,9239,62.png,ICICI,Chelsea Watson,1 -5433,17,35,Three Thousand One Hundred and Sixty Six,3166,87.png,ICICI,Elliot Humphreys,1 -5434,0,40,Nine Thousand and Five,9005,0.png,ICICI,David Howard,1 -5435,27,4,Two Thousand Six Hundred and Four,2604,136.png,ICICI,Wafiyah Nashwa Wasem,1 -5436,14,33,Three Thousand Two Hundred and Eighty Seven,3287,72.png,ICICI,Eleanor Freeman,1 -5437,8,33,Four Thousand Seven Hundred and Forty Four,4744,41.png,ICICI,Eleanor Freeman,1 -5438,4,26,Four Thousand Seven Hundred and Thirty Three,4733,22.png,ICICI,Sidney Lapointe,1 -5439,38,23,One Thousand and Twenty Two,1022,192.png,ICICI,Thรฉrรจse Fortier,1 -5440,34,22,Two Thousand Three Hundred and Thirty Two,2332,174.png,ICICI,Eglantine Forest,1 -5441,30,32,Five Thousand Five Hundred and Ninety Three,5593,152.png,ICICI,Chelsea Watson,1 -5442,7,31,Three Thousand Eight Hundred and Seventy Nine,3879,36.png,ICICI,Naomi Grant,1 -5443,10,38,Four Thousand Two Hundred and Sixty Five,4265,53.png,ICICI,Freddie Reid,1 -5444,35,28,Three Thousand One Hundred and Forty One,3141,175.png,ICICI,Chapin Auger,1 -5445,40,11,Eight Thousand Seven Hundred and Ninety Two,8792,203.png,ICICI,Jens Egger,1 -5446,26,18,Two Thousand Four Hundred and Twenty Four,2424,133.png,ICICI,Edmee Pelletier,1 -5447,6,24,Seven Thousand Nine Hundred and Seventy,7970,32.png,ICICI,Clarice Blanc,1 -5448,29,8,Six Thousand Eight Hundred and Sixty One,6861,147.png,ICICI,Steffen Krueger,1 -5449,3,25,Eight Thousand Three Hundred and Seventy Nine,8379,16.png,ICICI,Fleurette Coudert,1 -5450,10,22,Seven Hundred and Seven,707,53.png,ICICI,Eglantine Forest,1 -5451,43,23,Four Thousand Seven Hundred and Forty Two,4742,219.png,ICICI,Thรฉrรจse Fortier,1 -5452,42,11,Three Thousand Nine Hundred and Forty Seven,3947,212.png,ICICI,Jens Egger,1 -5453,19,5,Two Thousand Five Hundred and Sixty Eight,2568,97.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5454,1,28,Nine Thousand Three Hundred and Eighty Eight,9388,5.png,ICICI,Chapin Auger,1 -5455,3,19,Six Thousand Four Hundred and Seventy Four,6474,19.png,ICICI,Franรงoise Lapierre,1 -5456,14,17,Five Hundred and Seventy Three,573,71.png,ICICI,Yolette Cloutier,1 -5457,14,20,Six Thousand Nine Hundred and Fifty,6950,73.png,ICICI,Seymour Patenaude,1 -5458,0,25,Two Thousand One Hundred and Twenty Four,2124,1.png,ICICI,Fleurette Coudert,1 -5459,32,26,Four Thousand Four Hundred and Twelve,4412,164.png,ICICI,Sidney Lapointe,1 -5460,21,35,Four Thousand Two Hundred and Thirty Six,4236,106.png,ICICI,Elliot Humphreys,1 -5461,40,39,Five Thousand and Fifty Seven,5057,202.png,ICICI,Katie Connor,1 -5462,11,25,Four Thousand Three Hundred and Seventy Six,4376,56.png,ICICI,Fleurette Coudert,1 -5463,41,14,One Thousand Eight Hundred and Eighty,1880,205.png,ICICI,Renata Lukic,1 -5464,17,2,Four Thousand Four Hundred and Twenty One,4421,88.png,ICICI,Chi Hsiao,1 -5465,14,6,Eight Thousand Eight Hundred and Eighty One,8881,70.png,ICICI,Abdul Qais Khouri,1 -5466,2,2,Two Thousand Nine Hundred and Sixty Six,2966,13.png,ICICI,Chi Hsiao,1 -5467,9,19,Nine Hundred and Fifty Seven,957,46.png,ICICI,Franรงoise Lapierre,1 -5468,30,40,Three Thousand Three Hundred and Forty Six,3346,154.png,ICICI,David Howard,1 -5469,3,38,Four Thousand Eight Hundred and Sixty Nine,4869,16.png,ICICI,Freddie Reid,1 -5470,26,3,Five Thousand Five Hundred and Fifteen,5515,130.png,ICICI,Jiang Li Tao,1 -5471,9,33,Four Thousand and Fifteen,4015,47.png,ICICI,Eleanor Freeman,1 -5472,25,15,Eight Thousand One Hundred and Nineteen,8119,127.png,ICICI,Milenko Tkalcic,1 -5473,11,24,One Thousand Three Hundred and Twelve,1312,57.png,ICICI,Clarice Blanc,1 -5474,24,38,Five Thousand and Ninety Seven,5097,122.png,ICICI,Freddie Reid,1 -5475,31,38,Six Thousand Seven Hundred and Seventy Three,6773,158.png,ICICI,Freddie Reid,1 -5476,31,25,Three Thousand Four Hundred and Eighty Five,3485,159.png,ICICI,Fleurette Coudert,1 -5477,35,10,Two Thousand Six Hundred and Twelve,2612,179.png,ICICI,Stephan Schwab,1 -5478,10,24,Two Thousand Nine Hundred and Seventy Nine,2979,54.png,ICICI,Clarice Blanc,1 -5479,13,3,Eight Thousand Eight Hundred and Forty Five,8845,67.png,ICICI,Jiang Li Tao,1 -5480,42,11,Three Thousand Two Hundred and Thirteen,3213,214.png,ICICI,Jens Egger,1 -5481,36,18,Seven Thousand Seven Hundred and Eighty Nine,7789,183.png,ICICI,Edmee Pelletier,1 -5482,0,6,One Thousand and One,1001,1.png,ICICI,Abdul Qais Khouri,1 -5483,27,9,Two Thousand Seven Hundred and Fifty Eight,2758,137.png,ICICI,Maria Kalb,1 -5484,3,4,Nine Thousand Two Hundred and Sixty Nine,9269,19.png,ICICI,Wafiyah Nashwa Wasem,1 -5485,43,0,Four Thousand Five Hundred and Sixty Eight,4568,219.png,ICICI,Ethel M. Bryson,1 -5486,13,8,One Thousand Two Hundred and Forty Seven,1247,67.png,ICICI,Steffen Krueger,1 -5487,35,4,Four Thousand and Twenty Six,4026,176.png,ICICI,Wafiyah Nashwa Wasem,1 -5488,19,22,One Hundred and Sixty Five,165,97.png,ICICI,Eglantine Forest,1 -5489,13,9,Five Thousand One Hundred and Twenty Nine,5129,67.png,ICICI,Maria Kalb,1 -5490,10,7,Six Thousand One Hundred and Thirty Eight,6138,53.png,ICICI,Hasna Bahiyaa Amari,1 -5491,3,41,Four Thousand Five Hundred and Twenty Nine,4529,17.png,ICICI,Germa de Geus,1 -5492,38,8,Six Thousand Six Hundred and Forty,6640,192.png,ICICI,Steffen Krueger,1 -5493,6,43,Seven Thousand Seven Hundred and Twenty One,7721,30.png,ICICI,Aruna Bekx,1 -5494,38,10,Eight Thousand and Ninety Six,8096,190.png,ICICI,Stephan Schwab,1 -5495,15,2,Eight Thousand One Hundred and Ninety Nine,8199,78.png,ICICI,Chi Hsiao,1 -5496,39,35,Seven Thousand Five Hundred,7500,198.png,ICICI,Elliot Humphreys,1 -5497,15,25,Two Thousand Nine Hundred and Seventy Five,2975,78.png,ICICI,Fleurette Coudert,1 -5498,17,24,Four Thousand Seven Hundred and Sixty Eight,4768,85.png,ICICI,Clarice Blanc,1 -5499,21,39,Two Thousand and Ninety Nine,2099,107.png,ICICI,Katie Connor,1 -5500,26,24,Nine Thousand Four Hundred and Ninety Six,9496,133.png,ICICI,Clarice Blanc,1 -5501,17,28,One Thousand Two Hundred and Sixty Two,5200,Nan,ICICI,Chapin Auger,0 -5502,7,6,One Thousand Three Hundred and Seventy Two, ,36.png,ICICI,Abdul Qais Khouri,0 -5503,0,39,Three Thousand Six Hundred and Forty Nine,7981,Nan,ICICI,Katie Connor,0 -5504,40,6,Fourteen,131,Nan,ICICI,Abdul Qais Khouri,0 -5505,24,25,Five Thousand Six Hundred and Twenty Two, ,122.png,ICICI,Fleurette Coudert,0 -5506,1,15,One Hundred and Thirty Eight, ,5.png,ICICI,Milenko Tkalcic,0 -5507,8,29,Six Thousand Six Hundred and Two,8157,Nan,ICICI,Hayden Bruce,0 -5508,37,41,Three Thousand Seven Hundred and Twenty Two, ,187.png,ICICI,Germa de Geus,0 -5509,7,39,Four Thousand and Sixty, ,37.png,ICICI,Katie Connor,0 -5510,11,32,Two Thousand Five Hundred and Seventy Three,7818,Nan,ICICI,Chelsea Watson,0 -5511,4,22,Four Thousand and Thirty,9624,Nan,ICICI,Eglantine Forest,0 -5512,5,24,Sixty Seven,2415,Nan,ICICI,Clarice Blanc,0 -5513,35,41,Eight Hundred and Sixty Nine, ,179.png,ICICI,Germa de Geus,0 -5514,16,40,Seven Hundred and Sixty Three, ,83.png,ICICI,David Howard,0 -5515,16,1,One Thousand Four Hundred and Forty Seven, ,84.png,ICICI,Emily D. Short,0 -5516,21,17,Six Thousand Eight Hundred and Fifteen,9931,Nan,ICICI,Yolette Cloutier,0 -5517,21,26,Four Hundred and Eighty Nine, ,108.png,ICICI,Sidney Lapointe,0 -5518,26,27, ,3965,133.png,ICICI,Colette Monjeau,0 -5519,42,19,Eight Thousand and Ten,9983,Nan,ICICI,Franรงoise Lapierre,0 -5520,20,14,Two Thousand Seven Hundred and Fifty,7049,Nan,ICICI,Renata Lukic,0 -5521,30,28,Three Thousand Five Hundred and Fifty One,7235,Nan,ICICI,Chapin Auger,0 -5522,38,14,Four Hundred and Seventy,2145,Nan,ICICI,Renata Lukic,0 -5523,38,32,One Thousand and Ninety Four,1503,Nan,ICICI,Chelsea Watson,0 -5524,21,4,Four Thousand Seven Hundred and Sixty Nine, ,109.png,ICICI,Wafiyah Nashwa Wasem,0 -5525,17,4,Nine Hundred and Thirty Seven,1955,Nan,ICICI,Wafiyah Nashwa Wasem,0 -5526,13,43, ,5967,66.png,ICICI,Aruna Bekx,0 -5527,26,22, ,5928,133.png,ICICI,Eglantine Forest,0 -5528,17,19,One Thousand Two Hundred and Ninety,1780,Nan,ICICI,Franรงoise Lapierre,0 -5529,24,8,Four Thousand and Eighty Three, ,123.png,ICICI,Steffen Krueger,0 -5530,18,16,Five Hundred and Thirty Nine,594,Nan,ICICI,Searlas Grenier,0 -5531,16,13,Seven Hundred and Eight,1311,Nan,ICICI,Petra Kovacic,0 -5532,10,4,One Thousand Three Hundred and Sixty,9559,Nan,ICICI,Wafiyah Nashwa Wasem,0 -5533,13,36,Four Thousand Two Hundred and Eighty Three,5243,Nan,ICICI,Thomas Chapman,0 -5534,27,25,Four Hundred and Seventy Six,7620,Nan,ICICI,Fleurette Coudert,0 -5535,35,3,Three Thousand One Hundred and Three,9304,Nan,ICICI,Jiang Li Tao,0 -5536,26,13,Four Thousand Seven Hundred and Eighty Five, ,130.png,ICICI,Petra Kovacic,0 -5537,18,28,Twenty One,1782,Nan,ICICI,Chapin Auger,0 -5538,34,2,Three Thousand Five Hundred and Seventeen, ,170.png,ICICI,Chi Hsiao,0 -5539,17,21,Five Thousand One Hundred and Twenty Five,5337,Nan,ICICI,David Corbeil,0 -5540,8,26,Four Hundred and Sixteen,9639,Nan,ICICI,Sidney Lapointe,0 -5541,37,15, ,6947,185.png,ICICI,Milenko Tkalcic,0 -5542,20,4,Twelve,35,Nan,ICICI,Wafiyah Nashwa Wasem,0 -5543,14,27,Four Thousand Four Hundred and Fifty Five,8886,Nan,ICICI,Colette Monjeau,0 -5544,19,5,Six Thousand Three Hundred and Ninety Six, ,97.png,ICICI,Fawwaz Zuhayr Mustafa,0 -5545,35,26,One Thousand Three Hundred and Twenty Three,1950,Nan,ICICI,Sidney Lapointe,0 -5546,43,19, ,2663,216.png,ICICI,Franรงoise Lapierre,0 -5547,6,11,Three Thousand Five Hundred and Ninety One,7373,Nan,ICICI,Jens Egger,0 -5548,38,34,One Thousand and Twenty Two,7284,Nan,ICICI,Holly Martin,0 -5549,24,35, ,3264,124.png,ICICI,Elliot Humphreys,0 -5550,20,20,One Thousand Eight Hundred and Forty Four, ,100.png,ICICI,Seymour Patenaude,0 -5551,3,21,Three Thousand One Hundred and Forty One,9430,Nan,ICICI,David Corbeil,0 -5552,21,27,One Thousand and Ninety Six, ,106.png,ICICI,Colette Monjeau,0 -5553,41,15,Two Thousand Seven Hundred and Twenty Two,8888,Nan,ICICI,Milenko Tkalcic,0 -5554,12,23,Six Thousand Nine Hundred and Thirty Seven,8864,Nan,ICICI,Thรฉrรจse Fortier,0 -5555,7,35,Seventy Eight,4793,Nan,ICICI,Elliot Humphreys,0 -5556,38,17,Five Thousand Three Hundred and Ninety One, ,193.png,ICICI,Yolette Cloutier,0 -5557,10,25, ,1426,53.png,ICICI,Fleurette Coudert,0 -5558,32,38,One Hundred and Forty Nine, ,160.png,ICICI,Freddie Reid,0 -5559,21,18,Three Hundred and Fifty, ,108.png,ICICI,Edmee Pelletier,0 -5560,30,38,Five Thousand Three Hundred and Forty Two, ,151.png,ICICI,Freddie Reid,0 -5561,8,43,Two Thousand Six Hundred and Twenty Three,2967,Nan,ICICI,Aruna Bekx,0 -5562,10,12, ,5505,50.png,ICICI,Marcel Achen,0 -5563,23,10,One Thousand Six Hundred and Seventy Nine,5436,Nan,ICICI,Stephan Schwab,0 -5564,27,16, ,1954,135.png,ICICI,Searlas Grenier,0 -5565,20,26,Four Thousand Seven Hundred and Forty Two,4946,Nan,ICICI,Sidney Lapointe,0 -5566,13,8,Six Hundred and Forty One, ,68.png,ICICI,Steffen Krueger,0 -5567,24,39,One Thousand Six Hundred and Thirty,2832,Nan,ICICI,Katie Connor,0 -5568,38,14,Two Thousand Five Hundred and Eighty Seven,2726,Nan,ICICI,Renata Lukic,0 -5569,11,14, ,2329,57.png,ICICI,Renata Lukic,0 -5570,11,12,Two Thousand Six Hundred and Eighty Three,7432,Nan,ICICI,Marcel Achen,0 -5571,31,37,One Hundred and Forty One,256,Nan,ICICI,Eva Davies,0 -5572,40,42,Four Thousand Two Hundred and Eighty Six,5850,Nan,ICICI,Brady Jamin,0 -5573,37,12,Four Thousand Five Hundred and Fifty Six,7263,Nan,ICICI,Marcel Achen,0 -5574,17,25,Seven Hundred and Ninety, ,85.png,ICICI,Fleurette Coudert,0 -5575,30,13,One Thousand Nine Hundred and Sixty Five,3112,Nan,ICICI,Petra Kovacic,0 -5576,29,42,Three Thousand Nine Hundred and Twenty Three, ,148.png,ICICI,Brady Jamin,0 -5577,24,36,Five Thousand One Hundred and Eighty Nine,6281,Nan,ICICI,Thomas Chapman,0 -5578,42,24, ,8873,210.png,ICICI,Clarice Blanc,0 -5579,25,20,One Hundred and Sixteen,364,Nan,ICICI,Seymour Patenaude,0 -5580,16,14,Four Thousand One Hundred and Thirty Four,5671,Nan,ICICI,Renata Lukic,0 -5581,27,26,Two Thousand Three Hundred and Fifteen,8674,Nan,ICICI,Sidney Lapointe,0 -5582,1,26,One Thousand and Sixty Eight,1859,Nan,ICICI,Sidney Lapointe,0 -5583,6,26,Two Hundred and Fourteen, ,34.png,ICICI,Sidney Lapointe,0 -5584,16,6, ,8606,82.png,ICICI,Abdul Qais Khouri,0 -5585,7,34, ,2181,37.png,ICICI,Holly Martin,0 -5586,23,38, ,2898,117.png,ICICI,Freddie Reid,0 -5587,11,24, ,1167,55.png,ICICI,Clarice Blanc,0 -5588,2,8,Eight Hundred and Ninety Three, ,12.png,ICICI,Steffen Krueger,0 -5589,35,31,Five Hundred and Five, ,179.png,ICICI,Naomi Grant,0 -5590,29,40,One Thousand Four Hundred and Eight,8918,Nan,ICICI,David Howard,0 -5591,15,14, ,8541,78.png,ICICI,Renata Lukic,0 -5592,16,22,One Thousand Nine Hundred and Thirty Seven,1993,Nan,ICICI,Eglantine Forest,0 -5593,32,22, ,8361,162.png,ICICI,Eglantine Forest,0 -5594,9,15,Two Thousand Two Hundred and Twenty,6792,Nan,ICICI,Milenko Tkalcic,0 -5595,32,16,Nine,40,Nan,ICICI,Searlas Grenier,0 -5596,37,41,Three Thousand Three Hundred and Eighty One,3699,Nan,ICICI,Germa de Geus,0 -5597,9,36, ,3933,49.png,ICICI,Thomas Chapman,0 -5598,4,4,One Thousand Three Hundred and Twenty Three, ,23.png,ICICI,Wafiyah Nashwa Wasem,0 -5599,0,1,Four Thousand Seven Hundred and Seven, ,2.png,ICICI,Emily D. Short,0 -5600,35,43,Five Thousand Two Hundred and Sixty,6034,Nan,ICICI,Aruna Bekx,0 -5601,33,28, ,6294,168.png,ICICI,Chapin Auger,0 -5602,3,19,Six Thousand Three Hundred and Fifty Eight, ,16.png,ICICI,Franรงoise Lapierre,0 -5603,35,28,Eight Hundred and Forty Seven,2618,Nan,ICICI,Chapin Auger,0 -5604,1,4,One Thousand One Hundred and Seventy Four, ,8.png,ICICI,Wafiyah Nashwa Wasem,0 -5605,31,34, ,2091,157.png,ICICI,Holly Martin,0 -5606,1,17,Three Thousand Eight Hundred and Eighty Three, ,9.png,ICICI,Yolette Cloutier,0 -5607,8,20,Three Thousand Four Hundred and Forty Six,7440,Nan,ICICI,Seymour Patenaude,0 -5608,40,22,Three Thousand Two Hundred and Seventeen, ,200.png,ICICI,Eglantine Forest,0 -5609,24,23,Nine Thousand Five Hundred and Fifty Eight,9986,Nan,ICICI,Thรฉrรจse Fortier,0 -5610,25,26,Five Thousand Nine Hundred and Ninety Eight,8433,Nan,ICICI,Sidney Lapointe,0 -5611,30,5,One Thousand One Hundred and Eighty Three, ,152.png,ICICI,Fawwaz Zuhayr Mustafa,0 -5612,33,5,Four Thousand Seven Hundred and Thirty One,7813,Nan,ICICI,Fawwaz Zuhayr Mustafa,0 -5613,16,5,One Thousand Seven Hundred and Seventy Nine, ,83.png,ICICI,Fawwaz Zuhayr Mustafa,0 -5614,38,28,Three Thousand Seven Hundred and Thirty Nine,6852,Nan,ICICI,Chapin Auger,0 -5615,11,10,Two Thousand Three Hundred and Thirty Five, ,56.png,ICICI,Stephan Schwab,0 -5616,2,0,Four Thousand One Hundred and Seventy Seven, ,13.png,ICICI,Ethel M. Bryson,0 -5617,5,13,Nine Hundred and Ninety Eight,2747,Nan,ICICI,Petra Kovacic,0 -5618,38,6,Two Thousand Nine Hundred and Thirty,3569,Nan,ICICI,Abdul Qais Khouri,0 -5619,28,41,Five Thousand Five Hundred and Forty Seven,6314,Nan,ICICI,Germa de Geus,0 -5620,42,37,Eight Hundred and Twenty Seven,855,Nan,ICICI,Eva Davies,0 -5621,4,23,Four Thousand and Forty Seven,7056,Nan,ICICI,Thรฉrรจse Fortier,0 -5622,30,0,One Thousand and Fifty Eight, ,151.png,ICICI,Ethel M. Bryson,0 -5623,27,14,Six Hundred and Seven,6353,Nan,ICICI,Renata Lukic,0 -5624,27,9,Two Thousand One Hundred and Seventy, ,139.png,ICICI,Maria Kalb,0 -5625,10,38,Three Hundred and Sixty Two,4220,Nan,ICICI,Freddie Reid,0 -5626,1,36,Seventy Four,4592,Nan,ICICI,Thomas Chapman,0 -5627,4,10, ,3586,22.png,ICICI,Stephan Schwab,0 -5628,27,1,Eight Hundred and Two,1633,Nan,ICICI,Emily D. Short,0 -5629,34,29,Four Hundred and Twenty Three,6276,Nan,ICICI,Hayden Bruce,0 -5630,22,7,Seven Hundred and Ninety, ,113.png,ICICI,Hasna Bahiyaa Amari,0 -5631,12,8,Two Thousand One Hundred and Eighty Three,2519,Nan,ICICI,Steffen Krueger,0 -5632,0,25,One Thousand Eight Hundred and Eighty Eight,1925,Nan,ICICI,Fleurette Coudert,0 -5633,28,28,Eight Thousand Eight Hundred and Fourteen,9332,Nan,ICICI,Chapin Auger,0 -5634,4,10,Two Hundred and Fifty Two, ,24.png,ICICI,Stephan Schwab,0 -5635,1,35,Nine Hundred and Sixty, ,6.png,ICICI,Elliot Humphreys,0 -5636,29,16,Six Thousand Four Hundred and Thirty One,8079,Nan,ICICI,Searlas Grenier,0 -5637,14,25,Two Thousand Two Hundred and Twenty,3013,Nan,ICICI,Fleurette Coudert,0 -5638,9,18, ,2979,47.png,ICICI,Edmee Pelletier,0 -5639,36,38, ,8948,181.png,ICICI,Freddie Reid,0 -5640,26,31, ,5930,133.png,ICICI,Naomi Grant,0 -5641,41,38,Two Thousand and Ninety Seven,9793,Nan,ICICI,Freddie Reid,0 -5642,38,18,Four Thousand Three Hundred and Twenty Seven, ,193.png,ICICI,Edmee Pelletier,0 -5643,37,12,Four Thousand Nine Hundred and Ninety Nine,6212,Nan,ICICI,Marcel Achen,0 -5644,17,27,Three Thousand Four Hundred and Seventeen, ,88.png,ICICI,Colette Monjeau,0 -5645,32,14, ,7013,161.png,ICICI,Renata Lukic,0 -5646,27,34, ,2353,136.png,ICICI,Holly Martin,0 -5647,13,3,Seven Hundred and Thirty Seven, ,66.png,ICICI,Jiang Li Tao,0 -5648,5,36,Three Thousand Five Hundred and Twenty Four,4229,Nan,ICICI,Thomas Chapman,0 -5649,7,32,Three Hundred and Eleven, ,38.png,ICICI,Chelsea Watson,0 -5650,16,34, ,5232,83.png,ICICI,Holly Martin,0 -5651,36,18,One Hundred and Forty Three,636,Nan,ICICI,Edmee Pelletier,0 -5652,26,23, ,1452,131.png,ICICI,Thรฉrรจse Fortier,0 -5653,19,6,One Thousand Eight Hundred and Thirty Four, ,99.png,ICICI,Abdul Qais Khouri,0 -5654,27,12,One Thousand Three Hundred and Sixty Three,5878,Nan,ICICI,Marcel Achen,0 -5655,34,12,Fifty,5598,Nan,ICICI,Marcel Achen,0 -5656,37,35,Two Hundred and Forty, ,187.png,ICICI,Elliot Humphreys,0 -5657,21,40,One Thousand Seven Hundred and Three,3224,Nan,ICICI,David Howard,0 -5658,29,38,Three Thousand One Hundred and Thirty,3494,Nan,ICICI,Freddie Reid,0 -5659,9,15,Two Thousand Eight Hundred and Twelve,5123,Nan,ICICI,Milenko Tkalcic,0 -5660,20,32,Seven Thousand One Hundred and Ninety Six,9326,Nan,ICICI,Chelsea Watson,0 -5661,30,11, ,2016,154.png,ICICI,Jens Egger,0 -5662,24,43,Five Thousand Nine Hundred and Twenty Two, ,121.png,ICICI,Aruna Bekx,0 -5663,13,3, ,5823,68.png,ICICI,Jiang Li Tao,0 -5664,36,27,Six Hundred and Twenty Three,637,Nan,ICICI,Colette Monjeau,0 -5665,2,43,One Thousand Five Hundred and Thirty, ,10.png,ICICI,Aruna Bekx,0 -5666,34,3,Four Hundred and Twenty One,554,Nan,ICICI,Jiang Li Tao,0 -5667,34,41,Four Thousand Six Hundred and Fourteen,5947,Nan,ICICI,Germa de Geus,0 -5668,17,28, ,2412,88.png,ICICI,Chapin Auger,0 -5669,8,40,One Thousand Seven Hundred and Seventy Three,2768,Nan,ICICI,David Howard,0 -5670,43,14,One Thousand One Hundred and Seventy Six, ,215.png,ICICI,Renata Lukic,0 -5671,2,33, ,7509,12.png,ICICI,Eleanor Freeman,0 -5672,23,15, ,5412,117.png,ICICI,Milenko Tkalcic,0 -5673,23,40, ,3554,116.png,ICICI,David Howard,0 -5674,11,20,Four Hundred and Nine,607,Nan,ICICI,Seymour Patenaude,0 -5675,18,33, ,6906,92.png,ICICI,Eleanor Freeman,0 -5676,36,40,One Thousand Two Hundred and Thirty One,1247,Nan,ICICI,David Howard,0 -5677,20,37,Six Thousand Three Hundred and Seventeen,8827,Nan,ICICI,Eva Davies,0 -5678,2,3, ,7130,11.png,ICICI,Jiang Li Tao,0 -5679,20,6,Five Thousand One Hundred and Twenty Three,5952,Nan,ICICI,Abdul Qais Khouri,0 -5680,31,21, ,6407,155.png,ICICI,David Corbeil,0 -5681,43,22, ,3713,216.png,ICICI,Eglantine Forest,0 -5682,10,7,One Hundred and Eight,375,Nan,ICICI,Hasna Bahiyaa Amari,0 -5683,5,3,Two Thousand Seven Hundred and Eighty Five, ,25.png,ICICI,Jiang Li Tao,0 -5684,7,7, ,4745,39.png,ICICI,Hasna Bahiyaa Amari,0 -5685,9,30, ,5214,46.png,ICICI,Jodie Holden,0 -5686,18,25,Two Thousand Five Hundred and Two,6825,Nan,ICICI,Fleurette Coudert,0 -5687,11,33,Two Thousand Six Hundred and Two, ,58.png,ICICI,Eleanor Freeman,0 -5688,5,22,Two Thousand Four Hundred and Thirty Three,4151,Nan,ICICI,Eglantine Forest,0 -5689,37,42,Five Hundred and Ninety Two, ,188.png,ICICI,Brady Jamin,0 -5690,14,15,Twenty Five,1764,Nan,ICICI,Milenko Tkalcic,0 -5691,0,27,Six Thousand Four Hundred and Ninety One,6869,Nan,ICICI,Colette Monjeau,0 -5692,11,15,Two Thousand Eight Hundred and Fifty Four,7419,Nan,ICICI,Milenko Tkalcic,0 -5693,37,31,Seven Hundred and Eighty Seven,1903,Nan,ICICI,Naomi Grant,0 -5694,28,32,Two Thousand Eight Hundred and Seventy Nine,5131,Nan,ICICI,Chelsea Watson,0 -5695,38,38, ,8109,191.png,ICICI,Freddie Reid,0 -5696,15,37,Five Thousand One Hundred and Seventy Three,7880,Nan,ICICI,Eva Davies,0 -5697,43,0,Two Thousand Six Hundred and Eighty One,9432,Nan,ICICI,Ethel M. Bryson,0 -5698,25,14,Five Thousand One Hundred and Twenty Four,9854,Nan,ICICI,Renata Lukic,0 -5699,31,1,Four Hundred and Twenty Nine, ,155.png,ICICI,Emily D. Short,0 -5700,14,15,Nine Hundred and Thirty One,2612,Nan,ICICI,Milenko Tkalcic,0 -5701,18,10,Eigt Thousand Five Hundred and Foty Five,8545,93.png,ICICI,Stephan Schwab,1 -5702,15,42,For Thousand Two Hundred and Eihty Five,4285,75.png,ICICI,Brady Jamin,1 -5703,18,36,On Hundred and Ninety Two,192,93.png,ICICI,Thomas Chapman,1 -5704,14,24,Eigt Thousand Two Hundred and Foty For,8244,71.png,ICICI,Clarice Blanc,1 -5705,33,1,On Thousand Seven Hundred and Thirteen,1713,165.png,ICICI,Emily D. Short,1 -5706,30,5,Five Thousand Six Hundred and Fifty Five,5655,154.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5707,9,23,For Thousand Thre Hundred and Forteen,4314,48.png,ICICI,Thรฉrรจse Fortier,1 -5708,20,22,Five Thousand For Hundred and Ninety Six,5496,104.png,ICICI,Eglantine Forest,1 -5709,39,30,Eigt Thousand Eigt Hundred and On,8801,196.png,ICICI,Jodie Holden,1 -5710,15,37,Thre Thousand Thre Hundred and Eihty Eigt,3388,79.png,ICICI,Eva Davies,1 -5711,26,1,Thre Thousand On Hundred and Ninety Seven,3197,130.png,ICICI,Emily D. Short,1 -5712,19,11,Thre Thousand and Twenty Seven,3027,96.png,ICICI,Jens Egger,1 -5713,4,31,Six Thousand Thre Hundred and Foty Nine,6349,21.png,ICICI,Naomi Grant,1 -5714,17,43,Nine Thousand Nine Hundred and Ninety Thre,9993,87.png,ICICI,Aruna Bekx,1 -5715,33,34,Thre Thousand Nine Hundred and Nine,3909,165.png,ICICI,Holly Martin,1 -5716,12,12,Thre Thousand Five Hundred and Fifty Thre,3553,60.png,ICICI,Marcel Achen,1 -5717,4,25,For Thousand and Seenty Five,4075,21.png,ICICI,Fleurette Coudert,1 -5718,8,3,Nine Thousand Seven Hundred and Fifty,9750,41.png,ICICI,Jiang Li Tao,1 -5719,5,6,Seven Thousand Five Hundred and Fiteen,7515,28.png,ICICI,Abdul Qais Khouri,1 -5720,21,23,Five Thousand Thre Hundred and Foty Two,5342,106.png,ICICI,Thรฉrรจse Fortier,1 -5721,6,31,On Thousand For Hundred and Seenty Eigt,1478,34.png,ICICI,Naomi Grant,1 -5722,0,16,Seven Thousand Seven Hundred and Sixt Seven,7767,4.png,ICICI,Searlas Grenier,1 -5723,11,23,On Thousand Thre Hundred and Fifty Seven,1357,55.png,ICICI,Thรฉrรจse Fortier,1 -5724,18,34,On Thousand Nine Hundred and Ninety Nine,1999,94.png,ICICI,Holly Martin,1 -5725,27,22,Thre Thousand and Twenty For,3024,137.png,ICICI,Eglantine Forest,1 -5726,27,8,Nine Thousand For Hundred and Foty Six,9446,135.png,ICICI,Steffen Krueger,1 -5727,4,12,For Thousand Seven Hundred and Twenty For,4724,20.png,ICICI,Marcel Achen,1 -5728,29,42,Eigt Thousand For Hundred and Ten,8410,146.png,ICICI,Brady Jamin,1 -5729,4,4,Seven Thousand Six Hundred and Foty Five,7645,20.png,ICICI,Wafiyah Nashwa Wasem,1 -5730,28,27,On Thousand Seven Hundred and Fifty For,1754,141.png,ICICI,Colette Monjeau,1 -5731,32,1,Eigt Thousand and Nineten,8019,163.png,ICICI,Emily D. Short,1 -5732,7,17,Six Thousand Six Hundred and Foty Two,6642,37.png,ICICI,Yolette Cloutier,1 -5733,21,27,Five Thousand Five Hundred and Twenty Six,5526,109.png,ICICI,Colette Monjeau,1 -5734,43,1,Seven Thousand Five Hundred and Five,7505,216.png,ICICI,Emily D. Short,1 -5735,29,1,Six Thousand Two Hundred and Twenty,6220,145.png,ICICI,Emily D. Short,1 -5736,28,33,Two Thousand Nine Hundred and Foty Two,2942,140.png,ICICI,Eleanor Freeman,1 -5737,22,42,For Thousand Nine Hundred and Two,4902,114.png,ICICI,Brady Jamin,1 -5738,7,29,Two Hundred and Sixt On,261,35.png,ICICI,Hayden Bruce,1 -5739,40,27,For Thousand Two Hundred and Eihteen,4218,203.png,ICICI,Colette Monjeau,1 -5740,16,16,Foty Seven,47,82.png,ICICI,Searlas Grenier,1 -5741,8,2,Five Thousand For Hundred and Seenty Five,5475,40.png,ICICI,Chi Hsiao,1 -5742,3,11,Two Thousand For Hundred and Thirty Two,2432,18.png,ICICI,Jens Egger,1 -5743,31,10,Six Thousand Seven Hundred and Fifty Thre,6753,156.png,ICICI,Stephan Schwab,1 -5744,43,16,Six Thousand On Hundred and Fiteen,6115,217.png,ICICI,Searlas Grenier,1 -5745,28,14,Sixt Seven,67,143.png,ICICI,Renata Lukic,1 -5746,14,36,Seven Thousand Nine Hundred and Seenty,7970,74.png,ICICI,Thomas Chapman,1 -5747,2,42,Nine Thousand Seven Hundred and Seenty Two,9772,14.png,ICICI,Brady Jamin,1 -5748,21,32,Five Thousand Two Hundred and Sxten,5216,107.png,ICICI,Chelsea Watson,1 -5749,10,43,For Thousand Two Hundred and Fiteen,4215,50.png,ICICI,Aruna Bekx,1 -5750,41,40,Six Thousand Thre Hundred and Forteen,6314,208.png,ICICI,David Howard,1 -5751,7,39,Eigt Thousand Thre Hundred and Twenty Thre,8323,36.png,ICICI,Katie Connor,1 -5752,34,20,Eigt Thousand Six Hundred and Foty Thre,8643,170.png,ICICI,Seymour Patenaude,1 -5753,19,36,Seven Thousand Nine Hundred and Seenty Nine,7979,95.png,ICICI,Thomas Chapman,1 -5754,19,7,Five Thousand On Hundred and Fifty Thre,5153,96.png,ICICI,Hasna Bahiyaa Amari,1 -5755,35,34,Seven Thousand and Eigt,7008,176.png,ICICI,Holly Martin,1 -5756,11,6,Six Thousand Six Hundred and For,6604,56.png,ICICI,Abdul Qais Khouri,1 -5757,3,42,For Hundred and Eihty Seven,487,17.png,ICICI,Brady Jamin,1 -5758,10,39,Six Thousand Two Hundred and Seventeen,6217,53.png,ICICI,Katie Connor,1 -5759,0,39,Nine Thousand Two Hundred and Ninety Thre,9293,0.png,ICICI,Katie Connor,1 -5760,32,22,Eigt Thousand On Hundred,8100,160.png,ICICI,Eglantine Forest,1 -5761,20,14,Thre Thousand Two Hundred and Thirty Two,3232,104.png,ICICI,Renata Lukic,1 -5762,30,42,Thre Thousand On Hundred and Seenty On,3171,152.png,ICICI,Brady Jamin,1 -5763,5,11,Two Thousand On Hundred and Eihty On,2181,29.png,ICICI,Jens Egger,1 -5764,24,11,For Thousand Two Hundred and Eleven,4211,120.png,ICICI,Jens Egger,1 -5765,11,40,For Thousand Eigt Hundred and Eleven,4811,59.png,ICICI,David Howard,1 -5766,35,25,Nine Thousand Nine Hundred and Sixt Two,9962,175.png,ICICI,Fleurette Coudert,1 -5767,42,17,On Thousand For Hundred and Ninety Five,1495,212.png,ICICI,Yolette Cloutier,1 -5768,17,25,Nine Thousand Thre Hundred and Foty Nine,9349,89.png,ICICI,Fleurette Coudert,1 -5769,9,18,Nine Thousand Seven Hundred and Sixt For,9764,47.png,ICICI,Edmee Pelletier,1 -5770,35,9,Nine Thousand Two Hundred and Thirty Five,9235,179.png,ICICI,Maria Kalb,1 -5771,20,12,Nine Hundred and Seenty Thre,973,100.png,ICICI,Marcel Achen,1 -5772,22,13,Thre Hundred and Seenty Six,376,112.png,ICICI,Petra Kovacic,1 -5773,14,2,Eigt Thousand Eigt Hundred and Eihty On,8881,73.png,ICICI,Chi Hsiao,1 -5774,12,42,Two Thousand Six Hundred and Ninety Six,2696,60.png,ICICI,Brady Jamin,1 -5775,27,3,Eigt Thousand On Hundred and Seenty Two,8172,136.png,ICICI,Jiang Li Tao,1 -5776,37,8,Thre Thousand Thre Hundred and Thirty Five,3335,185.png,ICICI,Steffen Krueger,1 -5777,17,20,Thre Thousand Six Hundred and Fifty For,3654,89.png,ICICI,Seymour Patenaude,1 -5778,3,37,Two Thousand Five Hundred and Twenty Six,2526,18.png,ICICI,Eva Davies,1 -5779,15,33,For Thousand Seven Hundred and Eihty Nine,4789,75.png,ICICI,Eleanor Freeman,1 -5780,27,23,Five Thousand Five Hundred and Seenty Six,5576,136.png,ICICI,Thรฉrรจse Fortier,1 -5781,29,9,Seven Thousand Seven Hundred and Seven,7707,147.png,ICICI,Maria Kalb,1 -5782,33,43,Thre Thousand Eigt Hundred and Ninety,3890,167.png,ICICI,Aruna Bekx,1 -5783,35,16,Two Thousand and Thirty On,2031,179.png,ICICI,Searlas Grenier,1 -5784,36,35,Two Thousand Six Hundred and Ninety,2690,183.png,ICICI,Elliot Humphreys,1 -5785,6,40,For Thousand Two Hundred and Ninety Thre,4293,33.png,ICICI,David Howard,1 -5786,30,26,Five Thousand Two Hundred and Fiteen,5215,151.png,ICICI,Sidney Lapointe,1 -5787,36,38,On Thousand Six Hundred and Eihty Six,1686,180.png,ICICI,Freddie Reid,1 -5788,27,38,Eigt Thousand Eigt Hundred and Sixt On,8861,136.png,ICICI,Freddie Reid,1 -5789,2,22,Nine Thousand Two Hundred and Seenty,9270,13.png,ICICI,Eglantine Forest,1 -5790,29,18,Six Thousand On Hundred and Eigt,6108,145.png,ICICI,Edmee Pelletier,1 -5791,12,21,Six Thousand Nine Hundred and Two,6902,64.png,ICICI,David Corbeil,1 -5792,43,12,Seven Thousand For Hundred and Twenty Two,7422,217.png,ICICI,Marcel Achen,1 -5793,38,12,Nine Thousand Nine Hundred and Ten,9910,194.png,ICICI,Marcel Achen,1 -5794,20,28,Five Thousand Thre Hundred and Eihty Five,5385,103.png,ICICI,Chapin Auger,1 -5795,35,30,Five Hundred and Twenty For,524,179.png,ICICI,Jodie Holden,1 -5796,21,17,Six Thousand and Foty Two,6042,106.png,ICICI,Yolette Cloutier,1 -5797,18,16,Five Thousand For Hundred and Fifty Nine,5459,91.png,ICICI,Searlas Grenier,1 -5798,3,38,Nine Thousand Two Hundred and Ninety Six,9296,16.png,ICICI,Freddie Reid,1 -5799,10,24,Two Thousand Six Hundred and Eihty Five,2685,54.png,ICICI,Clarice Blanc,1 -5800,3,39,Eigt Thousand Seven Hundred and Fiteen,8715,18.png,ICICI,Katie Connor,1 -5801,37,19,On Thousand Eigt Hundred and Seenty Thre,1873,185.png,ICICI,Franรงoise Lapierre,1 -5802,42,3,Eigt Thousand Nine Hundred and For,8904,210.png,ICICI,Jiang Li Tao,1 -5803,31,9,Six Thousand Eigt Hundred and Six,6806,157.png,ICICI,Maria Kalb,1 -5804,19,5,Seven Thousand Five Hundred and Twenty Five,7525,96.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5805,17,7,Nine Thousand Two Hundred and Thirty Eigt,9238,87.png,ICICI,Hasna Bahiyaa Amari,1 -5806,22,4,Thre Thousand Six Hundred and Eihty For,3684,112.png,ICICI,Wafiyah Nashwa Wasem,1 -5807,10,10,Thre Thousand Eigt Hundred and Fifty Seven,3857,51.png,ICICI,Stephan Schwab,1 -5808,27,39,For Thousand Seven Hundred and Eihty For,4784,136.png,ICICI,Katie Connor,1 -5809,6,4,Two Thousand Nine Hundred and Seenty Two,2972,30.png,ICICI,Wafiyah Nashwa Wasem,1 -5810,4,2,Eigt Thousand Six Hundred and Sixt For,8664,23.png,ICICI,Chi Hsiao,1 -5811,27,40,Seven Thousand Eigt Hundred and Foty Six,7846,136.png,ICICI,David Howard,1 -5812,41,42,Thre Thousand Thre Hundred and For,3304,205.png,ICICI,Brady Jamin,1 -5813,28,19,For Thousand For Hundred and Foty Five,4445,143.png,ICICI,Franรงoise Lapierre,1 -5814,34,33,On Thousand Two Hundred and Eihty Six,1286,170.png,ICICI,Eleanor Freeman,1 -5815,3,16,Six Thousand Two Hundred and Twenty Six,6226,15.png,ICICI,Searlas Grenier,1 -5816,6,15,Five Thousand For Hundred and Seenty Thre,5473,30.png,ICICI,Milenko Tkalcic,1 -5817,5,2,Two Thousand Two Hundred and Fifty Thre,2253,29.png,ICICI,Chi Hsiao,1 -5818,41,34,Six Thousand Two Hundred and Seenty Seven,6277,205.png,ICICI,Holly Martin,1 -5819,24,28,Nine Thousand Seven Hundred and Eigt,9708,123.png,ICICI,Chapin Auger,1 -5820,5,7,Two Thousand Two Hundred and Seven,2207,26.png,ICICI,Hasna Bahiyaa Amari,1 -5821,9,25,Five Thousand Six Hundred and Twenty Nine,5629,45.png,ICICI,Fleurette Coudert,1 -5822,2,40,Five Thousand Seven Hundred and Foty On,5741,10.png,ICICI,David Howard,1 -5823,3,40,Six Thousand Eigt Hundred and Thirty Seven,6837,17.png,ICICI,David Howard,1 -5824,15,28,For Thousand Nine Hundred and Sixt Eigt,4968,75.png,ICICI,Chapin Auger,1 -5825,3,1,Five Thousand Eigt Hundred and Foty Six,5846,18.png,ICICI,Emily D. Short,1 -5826,18,15,Five Hundred and Five,505,90.png,ICICI,Milenko Tkalcic,1 -5827,41,35,Six Thousand Two Hundred and Thirty Nine,6239,207.png,ICICI,Elliot Humphreys,1 -5828,32,42,Thre Thousand Five Hundred and Twenty On,3521,163.png,ICICI,Brady Jamin,1 -5829,8,39,Six Thousand On Hundred and Seventeen,6117,44.png,ICICI,Katie Connor,1 -5830,19,8,For Thousand and Twenty,4020,97.png,ICICI,Steffen Krueger,1 -5831,26,5,Nine Thousand and Foty Eigt,9048,132.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5832,28,34,For Thousand Thre Hundred and Ninety Seven,4397,144.png,ICICI,Holly Martin,1 -5833,35,7,Thre Thousand Five Hundred and Seenty For,3574,175.png,ICICI,Hasna Bahiyaa Amari,1 -5834,25,41,Five Thousand On Hundred and Fifty Eigt,5158,125.png,ICICI,Germa de Geus,1 -5835,13,12,Two Thousand Six Hundred and Sxten,2616,66.png,ICICI,Marcel Achen,1 -5836,27,24,Thre Thousand On Hundred and Thirty For,3134,136.png,ICICI,Clarice Blanc,1 -5837,21,9,Two Thousand For Hundred and Foty Seven,2447,107.png,ICICI,Maria Kalb,1 -5838,27,33,On Hundred and Thirty Six,136,135.png,ICICI,Eleanor Freeman,1 -5839,43,0,Five Thousand Five Hundred and Sixt Eigt,5568,215.png,ICICI,Ethel M. Bryson,1 -5840,36,14,Nine Thousand Seven Hundred and Thirteen,9713,184.png,ICICI,Renata Lukic,1 -5841,7,32,Five Thousand For Hundred and Fifty Five,5455,37.png,ICICI,Chelsea Watson,1 -5842,11,0,For Thousand Two Hundred and Fifty Seven,4257,59.png,ICICI,Ethel M. Bryson,1 -5843,3,13,For Thousand For Hundred and Foty,4440,16.png,ICICI,Petra Kovacic,1 -5844,38,40,For Thousand Thre Hundred and Fifty Five,4355,192.png,ICICI,David Howard,1 -5845,15,42,Five Thousand Nine Hundred and Seven,5907,77.png,ICICI,Brady Jamin,1 -5846,4,18,Six Thousand For Hundred and Ninety Thre,6493,22.png,ICICI,Edmee Pelletier,1 -5847,24,39,On Thousand Two Hundred and Sixt Nine,1269,122.png,ICICI,Katie Connor,1 -5848,22,28,On Thousand For Hundred and Ninety Six,1496,114.png,ICICI,Chapin Auger,1 -5849,9,26,On Thousand Nine Hundred and Foty For,1944,48.png,ICICI,Sidney Lapointe,1 -5850,21,43,Seven Thousand For Hundred and Foty Five,7445,106.png,ICICI,Aruna Bekx,1 -5851,27,29,For Thousand and Foty Seven,4047,139.png,ICICI,Hayden Bruce,1 -5852,38,5,Thre Thousand Two Hundred and Fifty Eigt,3258,194.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5853,0,21,Six Thousand For Hundred and Thirty For,6434,1.png,ICICI,David Corbeil,1 -5854,2,20,Two Thousand Seven Hundred and Ten,2710,14.png,ICICI,Seymour Patenaude,1 -5855,12,0,Six Hundred and Twenty Seven,627,63.png,ICICI,Ethel M. Bryson,1 -5856,17,1,Eigt Thousand Two Hundred and Thirty Seven,8237,89.png,ICICI,Emily D. Short,1 -5857,8,13,Nine Thousand Five Hundred and Eihty,9580,41.png,ICICI,Petra Kovacic,1 -5858,36,8,On Thousand Six Hundred and Thirty Eigt,1638,180.png,ICICI,Steffen Krueger,1 -5859,7,4,Seven Thousand Eigt Hundred and Seenty Eigt,7878,35.png,ICICI,Wafiyah Nashwa Wasem,1 -5860,25,43,Thre Thousand and Thirty Thre,3033,127.png,ICICI,Aruna Bekx,1 -5861,33,21,Five Thousand Eigt Hundred and Seenty Seven,5877,168.png,ICICI,David Corbeil,1 -5862,28,40,On Thousand Eigt Hundred and Thirty Nine,1839,144.png,ICICI,David Howard,1 -5863,43,1,Seven Thousand Thre Hundred and Seenty Nine,7379,216.png,ICICI,Emily D. Short,1 -5864,16,4,For Thousand Two Hundred and Sixt Thre,4263,81.png,ICICI,Wafiyah Nashwa Wasem,1 -5865,39,5,Eigt Thousand Six Hundred and Seenty Seven,8677,195.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5866,12,37,Five Thousand Six Hundred and Nineten,5619,61.png,ICICI,Eva Davies,1 -5867,0,33,Thre Thousand and Twenty For,3024,0.png,ICICI,Eleanor Freeman,1 -5868,32,26,For Hundred and Five,405,160.png,ICICI,Sidney Lapointe,1 -5869,11,6,For Thousand Seven Hundred and Twenty Two,4722,57.png,ICICI,Abdul Qais Khouri,1 -5870,37,30,Six Thousand and Foty Nine,6049,187.png,ICICI,Jodie Holden,1 -5871,29,2,Eigt Thousand Nine Hundred and Seenty Thre,8973,145.png,ICICI,Chi Hsiao,1 -5872,13,18,Eigt Thousand For Hundred and Sixt For,8464,65.png,ICICI,Edmee Pelletier,1 -5873,43,40,Two Thousand and Sixt For,2064,215.png,ICICI,David Howard,1 -5874,9,42,Five Hundred and Eleven,511,46.png,ICICI,Brady Jamin,1 -5875,36,34,Thre Hundred and Twenty Nine,329,180.png,ICICI,Holly Martin,1 -5876,14,18,Six Thousand Eigt Hundred and Sixt,6860,73.png,ICICI,Edmee Pelletier,1 -5877,20,27,Two Thousand Two Hundred and Foty Thre,2243,100.png,ICICI,Colette Monjeau,1 -5878,37,39,On Thousand and Seenty Two,1072,185.png,ICICI,Katie Connor,1 -5879,6,3,Seven Thousand Six Hundred and Ninety On,7691,32.png,ICICI,Jiang Li Tao,1 -5880,42,28,Eigt Thousand On Hundred and Foty Six,8146,214.png,ICICI,Chapin Auger,1 -5881,8,37,Seenty For,74,43.png,ICICI,Eva Davies,1 -5882,25,31,For Thousand Six Hundred and Ninety Seven,4697,125.png,ICICI,Naomi Grant,1 -5883,7,40,Nine Thousand Two Hundred and Sixt Seven,9267,35.png,ICICI,David Howard,1 -5884,9,17,Five Thousand Thre Hundred and Twenty For,5324,49.png,ICICI,Yolette Cloutier,1 -5885,2,41,Five Thousand Thre Hundred and Five,5305,13.png,ICICI,Germa de Geus,1 -5886,40,31,Six Thousand On Hundred and Eihty Two,6182,203.png,ICICI,Naomi Grant,1 -5887,2,29,For Thousand Seven Hundred and Sixt Two,4762,12.png,ICICI,Hayden Bruce,1 -5888,11,9,On Thousand Eigt Hundred and Sixt,1860,56.png,ICICI,Maria Kalb,1 -5889,41,2,Six Hundred and Ninety Six,696,208.png,ICICI,Chi Hsiao,1 -5890,42,43,Six Thousand Two Hundred and Seenty For,6274,210.png,ICICI,Aruna Bekx,1 -5891,18,25,Five Thousand and Ninety Five,5095,92.png,ICICI,Fleurette Coudert,1 -5892,18,41,Eigt Thousand Seven Hundred and Eihty Thre,8783,90.png,ICICI,Germa de Geus,1 -5893,22,37,Seven Thousand Eigt Hundred and Ninety Five,7895,114.png,ICICI,Eva Davies,1 -5894,15,12,Six Thousand Five Hundred and Fifty For,6554,79.png,ICICI,Marcel Achen,1 -5895,9,29,Two Thousand On Hundred and Eihty Thre,2183,46.png,ICICI,Hayden Bruce,1 -5896,16,6,Nine Thousand Two Hundred and Sxten,9216,80.png,ICICI,Abdul Qais Khouri,1 -5897,39,32,Two Hundred and Thirty For,234,196.png,ICICI,Chelsea Watson,1 -5898,17,1,Seven Thousand For Hundred and Seenty,7470,85.png,ICICI,Emily D. Short,1 -5899,24,6,Two Thousand Eigt Hundred and Seenty Six,2876,121.png,ICICI,Abdul Qais Khouri,1 -5900,2,30,Nine Thousand Six Hundred and Eihty Two,9682,14.png,ICICI,Jodie Holden,1 -5901,11,29,Five Thousand and Twenty Eigt,5028,55.png,ICICI,Hayden Bruce,1 -5902,34,40,Five Thousand Two Hundred and Five,5205,171.png,ICICI,David Howard,1 -5903,0,23,Five Thousand Six Hundred and Seenty Five,5675,4.png,ICICI,Thรฉrรจse Fortier,1 -5904,17,25,Nine Thousand Two Hundred and For,9204,88.png,ICICI,Fleurette Coudert,1 -5905,41,24,Eigt Thousand Nine Hundred and Foty Thre,8943,206.png,ICICI,Clarice Blanc,1 -5906,4,27,Nine Thousand On Hundred and Thirty Thre,9133,24.png,ICICI,Colette Monjeau,1 -5907,3,4,On Thousand Six Hundred and Ninety Two,1692,18.png,ICICI,Wafiyah Nashwa Wasem,1 -5908,36,5,On Thousand For Hundred and Eigt,1408,181.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5909,36,41,For Thousand Eigt Hundred and Sixt Thre,4863,180.png,ICICI,Germa de Geus,1 -5910,15,5,Nine Thousand For Hundred and Seenty Five,9475,78.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5911,41,25,Eigt Thousand Thre Hundred and Foty Thre,8343,207.png,ICICI,Fleurette Coudert,1 -5912,0,2,Thre Hundred and Foty Thre,343,4.png,ICICI,Chi Hsiao,1 -5913,8,23,Thre Thousand Thre Hundred and Fifty For,3354,41.png,ICICI,Thรฉrรจse Fortier,1 -5914,31,5,Thre Thousand Thre Hundred and Foty Thre,3343,157.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5915,38,39,For Thousand Two Hundred and Ninety Five,4295,191.png,ICICI,Katie Connor,1 -5916,5,17,Seven Thousand Five Hundred and Ninety Two,7592,26.png,ICICI,Yolette Cloutier,1 -5917,0,31,On Thousand Nine Hundred and Foty Seven,1947,0.png,ICICI,Naomi Grant,1 -5918,40,6,Five Thousand Five Hundred and Eihty Two,5582,201.png,ICICI,Abdul Qais Khouri,1 -5919,25,32,Eigt Thousand On Hundred and Thirty Nine,8139,125.png,ICICI,Chelsea Watson,1 -5920,31,19,Nine Hundred and Foty Nine,949,155.png,ICICI,Franรงoise Lapierre,1 -5921,21,25,Eigt Hundred and Foty On,841,109.png,ICICI,Fleurette Coudert,1 -5922,5,19,Eigt Thousand Six Hundred and Sixt Nine,8669,26.png,ICICI,Franรงoise Lapierre,1 -5923,33,29,Thre Thousand For Hundred and Eihty Five,3485,167.png,ICICI,Hayden Bruce,1 -5924,22,12,For Thousand Seven Hundred and Twenty Five,4725,113.png,ICICI,Marcel Achen,1 -5925,9,7,Five Thousand Two Hundred and Six,5206,48.png,ICICI,Hasna Bahiyaa Amari,1 -5926,12,40,Nine Thousand Seven Hundred and Foty Nine,9749,61.png,ICICI,David Howard,1 -5927,38,30,Five Thousand and Thirty Seven,5037,193.png,ICICI,Jodie Holden,1 -5928,15,10,Two Thousand Seven Hundred and Twenty Six,2726,76.png,ICICI,Stephan Schwab,1 -5929,35,39,Nine Thousand For Hundred and Sixt Six,9466,176.png,ICICI,Katie Connor,1 -5930,36,9,Five Thousand Two Hundred and Nine,5209,181.png,ICICI,Maria Kalb,1 -5931,18,7,Seven Thousand Six Hundred and Twenty,7620,90.png,ICICI,Hasna Bahiyaa Amari,1 -5932,41,43,Eigt Thousand On Hundred and Thirty Two,8132,207.png,ICICI,Aruna Bekx,1 -5933,29,15,Nine Thousand Nine Hundred and Fifty Eigt,9958,146.png,ICICI,Milenko Tkalcic,1 -5934,0,11,Six Thousand On Hundred and Twenty On,6121,1.png,ICICI,Jens Egger,1 -5935,0,25,Sixt On,61,3.png,ICICI,Fleurette Coudert,1 -5936,41,31,Eigt Hundred and Eleven,811,205.png,ICICI,Naomi Grant,1 -5937,1,29,Eigt Thousand Seven Hundred and Twlve,8712,5.png,ICICI,Hayden Bruce,1 -5938,29,18,Five Thousand Thre Hundred and Fiteen,5315,147.png,ICICI,Edmee Pelletier,1 -5939,35,29,Thre Thousand Two Hundred and Fiteen,3215,178.png,ICICI,Hayden Bruce,1 -5940,41,24,For Thousand Five Hundred and Six,4506,206.png,ICICI,Clarice Blanc,1 -5941,4,14,For Thousand Nine Hundred and Seventeen,4917,24.png,ICICI,Renata Lukic,1 -5942,26,25,Six Thousand Five Hundred and Thirty On,6531,130.png,ICICI,Fleurette Coudert,1 -5943,24,31,On Thousand Six Hundred and Sixt,1660,123.png,ICICI,Naomi Grant,1 -5944,11,5,Seven Thousand Nine Hundred and Seenty Eigt,7978,58.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5945,24,12,For Thousand and Nineten,4019,124.png,ICICI,Marcel Achen,1 -5946,18,5,For Thousand For Hundred and Fifty Seven,4457,93.png,ICICI,Fawwaz Zuhayr Mustafa,1 -5947,19,23,For Thousand Thre Hundred and Twenty Eigt,4328,98.png,ICICI,Thรฉrรจse Fortier,1 -5948,22,18,Seven Thousand On Hundred and Ninety Seven,7197,113.png,ICICI,Edmee Pelletier,1 -5949,42,15,Seven Thousand Eigt Hundred and Six,7806,210.png,ICICI,Milenko Tkalcic,1 -5950,17,10,On Thousand Two Hundred and Sixt Thre,1263,87.png,ICICI,Stephan Schwab,1 -5951,27,40,Two Thousand Six Hundred and Twenty Thre,2623,138.png,ICICI,David Howard,1 -5952,8,19,On Thousand Six Hundred and Eihteen,1618,43.png,ICICI,Franรงoise Lapierre,1 -5953,25,35,Nine Hundred and Twenty Two,922,126.png,ICICI,Elliot Humphreys,1 -5954,4,20,For Thousand On Hundred and Twenty Two,4122,20.png,ICICI,Seymour Patenaude,1 -5955,37,11,Thre Thousand and Ninety Seven,3097,185.png,ICICI,Jens Egger,1 -5956,40,20,For Thousand Nine Hundred and Ten,4910,203.png,ICICI,Seymour Patenaude,1 -5957,16,14,Nine Thousand Two Hundred and Ninety Thre,9293,84.png,ICICI,Renata Lukic,1 -5958,20,34,Six Thousand and Twenty For,6024,104.png,ICICI,Holly Martin,1 -5959,17,20,Nine Thousand Five Hundred and Eihteen,9518,85.png,ICICI,Seymour Patenaude,1 -5960,35,25,Six Thousand For Hundred and Sixt On,6461,176.png,ICICI,Fleurette Coudert,1 -5961,41,14,Six Thousand Seven Hundred and Ninety Nine,6799,209.png,ICICI,Renata Lukic,1 -5962,14,42,Seven Thousand and Twenty On,7021,72.png,ICICI,Brady Jamin,1 -5963,43,30,Thre Thousand Nine Hundred and Eihty Five,3985,217.png,ICICI,Jodie Holden,1 -5964,39,3,Six Hundred and Fifty Nine,659,196.png,ICICI,Jiang Li Tao,1 -5965,0,17,Five Thousand Six Hundred and Fifty Seven,5657,1.png,ICICI,Yolette Cloutier,1 -5966,17,28,Two Thousand Six Hundred and Fifty Seven,2657,87.png,ICICI,Chapin Auger,1 -5967,1,20,Five Thousand Five Hundred,5500,9.png,ICICI,Seymour Patenaude,1 -5968,20,7,Seven Thousand Seven Hundred and Fifty On,7751,103.png,ICICI,Hasna Bahiyaa Amari,1 -5969,36,41,Five Thousand Thre Hundred and Eihteen,5318,184.png,ICICI,Germa de Geus,1 -5970,2,10,Six Thousand Five Hundred and Thirty Seven,6537,12.png,ICICI,Stephan Schwab,1 -5971,5,42,Two Thousand and Eihteen,2018,26.png,ICICI,Brady Jamin,1 -5972,21,37,On Thousand Two Hundred and Eihty For,1284,108.png,ICICI,Eva Davies,1 -5973,8,15,Five Thousand Nine Hundred and Ninety Eigt,5998,43.png,ICICI,Milenko Tkalcic,1 -5974,31,42,Eigt Thousand Seven Hundred and Foty On,8741,156.png,ICICI,Brady Jamin,1 -5975,41,2,Seven Thousand Seven Hundred and Seenty Thre,7773,207.png,ICICI,Chi Hsiao,1 -5976,0,9,On Thousand For Hundred and Seenty Five,1475,0.png,ICICI,Maria Kalb,1 -5977,35,38,Thre Thousand Thre Hundred and Fifty Six,3356,177.png,ICICI,Freddie Reid,1 -5978,34,39,On Thousand Two Hundred and Ninety,1290,170.png,ICICI,Katie Connor,1 -5979,28,23,For Thousand Nine Hundred and Fifty On,4951,143.png,ICICI,Thรฉrรจse Fortier,1 -5980,36,4,Eigt Thousand Six Hundred and Sixt For,8664,183.png,ICICI,Wafiyah Nashwa Wasem,1 -5981,6,25,Thre Thousand Seven Hundred and Sixt On,3761,31.png,ICICI,Fleurette Coudert,1 -5982,20,2,Six Thousand Two Hundred and Eihty,6280,103.png,ICICI,Chi Hsiao,1 -5983,11,32,Thre Thousand Six Hundred and Twenty Thre,3623,56.png,ICICI,Chelsea Watson,1 -5984,15,28,For Thousand Six Hundred and Forteen,4614,76.png,ICICI,Chapin Auger,1 -5985,20,15,On Thousand Thre Hundred and Eihty Two,1382,100.png,ICICI,Milenko Tkalcic,1 -5986,34,23,Seven Thousand and Eigt,7008,173.png,ICICI,Thรฉrรจse Fortier,1 -5987,19,12,On Hundred and Fifty On,151,96.png,ICICI,Marcel Achen,1 -5988,37,33,Six Thousand Eigt Hundred and Six,6806,186.png,ICICI,Eleanor Freeman,1 -5989,37,43,Eigt Thousand For Hundred and Nineten,8419,189.png,ICICI,Aruna Bekx,1 -5990,2,10,Seven Thousand Thre Hundred and Fifty Thre,7353,12.png,ICICI,Stephan Schwab,1 -5991,21,25,Six Thousand On Hundred and Fifty For,6154,105.png,ICICI,Fleurette Coudert,1 -5992,7,10,Eigt Thousand On Hundred and Twenty On,8121,37.png,ICICI,Stephan Schwab,1 -5993,39,6,Six Thousand Five Hundred and Foty On,6541,196.png,ICICI,Abdul Qais Khouri,1 -5994,19,27,For Thousand Thre Hundred and Foty Eigt,4348,96.png,ICICI,Colette Monjeau,1 -5995,5,19,Seven Thousand Two Hundred and Seenty Five,7275,26.png,ICICI,Franรงoise Lapierre,1 -5996,27,40,Eigt Thousand Seven Hundred and Sixt Seven,8767,135.png,ICICI,David Howard,1 -5997,19,37,Eigt Thousand Seven Hundred and Fifty Five,8755,95.png,ICICI,Eva Davies,1 -5998,2,41,Nine Thousand On Hundred and Thre,9103,12.png,ICICI,Germa de Geus,1 -5999,16,40,Thre Thousand Six Hundred and Twenty Thre,3623,81.png,ICICI,David Howard,1 -6000,25,10,Five Thousand Seven Hundred and Ninety Five,5795,125.png,ICICI,Stephan Schwab,1 -6001,22,39,Three Thousand Seven Hundred and Twenty Nine,3729,114.png,Saudi,Katie Connor,1 -6002,10,14,Two Thousand Six Hundred and Fifty Nine,2659,52.png,Saudi,Renata Lukic,1 -6003,1,2,One Hundred and Sixty Two,162,5.png,Saudi,Chi Hsiao,1 -6004,18,1,Five Thousand Seven Hundred and Four,5704,94.png,Saudi,Emily D. Short,1 -6005,18,11,Six Thousand Five Hundred and Twenty One,6521,90.png,Saudi,Jens Egger,1 -6006,19,43,One Thousand and Sixteen,1016,97.png,Saudi,Aruna Bekx,1 -6007,13,10,Seven Thousand Seven Hundred and Eighty One,7781,66.png,Saudi,Stephan Schwab,1 -6008,38,41,Six Hundred and Forty,640,190.png,Saudi,Germa de Geus,1 -6009,5,15,Nine Thousand Five Hundred and Fifty Five,9555,27.png,Saudi,Milenko Tkalcic,1 -6010,7,0,Nine Hundred and Sixty One,961,37.png,Saudi,Ethel M. Bryson,1 -6011,24,21,Eight Thousand Six Hundred and Sixty Four,8664,120.png,Saudi,David Corbeil,1 -6012,12,38,Two Thousand One Hundred and Forty Six,2146,60.png,Saudi,Freddie Reid,1 -6013,38,38,Four Thousand Six Hundred and Fifty,4650,192.png,Saudi,Freddie Reid,1 -6014,32,38,Four Thousand Three Hundred and Seventy Two,4372,163.png,Saudi,Freddie Reid,1 -6015,33,38,Four Thousand Four Hundred and Twenty,4420,165.png,Saudi,Freddie Reid,1 -6016,0,31,Eight Thousand Six Hundred and Forty Two,8642,3.png,Saudi,Naomi Grant,1 -6017,37,8,Six Thousand Two Hundred and Fifteen,6215,187.png,Saudi,Steffen Krueger,1 -6018,19,22,Six Thousand One Hundred and Twenty Seven,6127,99.png,Saudi,Eglantine Forest,1 -6019,40,35,Eight Thousand Nine Hundred and Three,8903,203.png,Saudi,Elliot Humphreys,1 -6020,42,43,Three Thousand Six Hundred and Thirty Seven,3637,213.png,Saudi,Aruna Bekx,1 -6021,35,13,Five Thousand Seven Hundred and Thirteen,5713,176.png,Saudi,Petra Kovacic,1 -6022,10,7,Five Thousand Two Hundred and Ninety Four,5294,50.png,Saudi,Hasna Bahiyaa Amari,1 -6023,6,5,Two Thousand and Eighty Seven,2087,34.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6024,30,12,Six Thousand One Hundred and Ninety Two,6192,151.png,Saudi,Marcel Achen,1 -6025,40,21,Seven Thousand Five Hundred and Forty Four,7544,201.png,Saudi,David Corbeil,1 -6026,18,37,Four Thousand Seven Hundred and Fifty Six,4756,91.png,Saudi,Eva Davies,1 -6027,11,5,Seven Thousand Six Hundred and Two,7602,55.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6028,18,4,Five Thousand One Hundred and Four,5104,94.png,Saudi,Wafiyah Nashwa Wasem,1 -6029,22,19,Eight Hundred and Four,804,110.png,Saudi,Franรงoise Lapierre,1 -6030,2,14,Seven Thousand Eight Hundred and Fifty One,7851,13.png,Saudi,Renata Lukic,1 -6031,40,19,Eight Thousand Four Hundred and Ninety,8490,202.png,Saudi,Franรงoise Lapierre,1 -6032,23,22,Nine Thousand and Fifty Two,9052,119.png,Saudi,Eglantine Forest,1 -6033,20,40,Seven Thousand Two Hundred,7200,101.png,Saudi,David Howard,1 -6034,17,38,One Thousand Seven Hundred and Fifty Three,1753,86.png,Saudi,Freddie Reid,1 -6035,16,21,Three Thousand One Hundred and Twenty Eight,3128,82.png,Saudi,David Corbeil,1 -6036,15,10,Nine Hundred and Eighteen,918,78.png,Saudi,Stephan Schwab,1 -6037,22,37,Two Thousand Six Hundred and Seventy Four,2674,113.png,Saudi,Eva Davies,1 -6038,1,32,Eighty Five,85,5.png,Saudi,Chelsea Watson,1 -6039,16,10,Four Thousand Six Hundred and Three,4603,83.png,Saudi,Stephan Schwab,1 -6040,9,43,Three Thousand Two Hundred and Ninety Eight,3298,48.png,Saudi,Aruna Bekx,1 -6041,35,24,Four Thousand One Hundred and Seven,4107,179.png,Saudi,Clarice Blanc,1 -6042,39,28,Two Thousand Six Hundred and Twenty,2620,198.png,Saudi,Chapin Auger,1 -6043,17,36,Forty Four,44,89.png,Saudi,Thomas Chapman,1 -6044,31,34,One Thousand Seven Hundred and Fifty Four,1754,157.png,Saudi,Holly Martin,1 -6045,16,29,One Thousand Seven Hundred and Sixty Four,1764,81.png,Saudi,Hayden Bruce,1 -6046,30,31,Four Thousand Nine Hundred and Thirteen,4913,151.png,Saudi,Naomi Grant,1 -6047,14,12,One Thousand Six Hundred and Seventy One,1671,73.png,Saudi,Marcel Achen,1 -6048,42,27,Four Thousand Seven Hundred and Eighty Two,4782,214.png,Saudi,Colette Monjeau,1 -6049,5,12,Seven Thousand Four Hundred,7400,27.png,Saudi,Marcel Achen,1 -6050,19,6,Four Thousand Four Hundred and Thirteen,4413,96.png,Saudi,Abdul Qais Khouri,1 -6051,25,35,One Thousand Eight Hundred and Eighteen,1818,128.png,Saudi,Elliot Humphreys,1 -6052,19,5,Seven Thousand Six Hundred and Fifty Eight,7658,95.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6053,3,36,Nine Thousand Seven Hundred and Nine,9709,17.png,Saudi,Thomas Chapman,1 -6054,39,43,Two Thousand Six Hundred and Twenty Three,2623,195.png,Saudi,Aruna Bekx,1 -6055,22,1,One Thousand Five Hundred and Sixteen,1516,111.png,Saudi,Emily D. Short,1 -6056,2,40,Nine Thousand Nine Hundred and Thirty Three,9933,11.png,Saudi,David Howard,1 -6057,43,0,Eight Thousand Seven Hundred and Fifty,8750,217.png,Saudi,Ethel M. Bryson,1 -6058,26,4,Four Hundred and Eighty One,481,132.png,Saudi,Wafiyah Nashwa Wasem,1 -6059,1,24,One Thousand Four Hundred and Seventy Two,1472,5.png,Saudi,Clarice Blanc,1 -6060,14,3,Two Thousand Six Hundred and Forty Five,2645,71.png,Saudi,Jiang Li Tao,1 -6061,22,14,Five Thousand Seven Hundred and Seven,5707,113.png,Saudi,Renata Lukic,1 -6062,13,38,One Thousand One Hundred and Seventy Eight,1178,66.png,Saudi,Freddie Reid,1 -6063,14,36,Four Thousand Seven Hundred and Sixty Nine,4769,70.png,Saudi,Thomas Chapman,1 -6064,16,0,Nine Thousand Two Hundred and Nine,9209,83.png,Saudi,Ethel M. Bryson,1 -6065,24,21,Six Thousand Nine Hundred and Twenty Five,6925,122.png,Saudi,David Corbeil,1 -6066,6,30,Three Thousand and Seventy Nine,3079,31.png,Saudi,Jodie Holden,1 -6067,43,18,Two Thousand Six Hundred and Twenty Six,2626,217.png,Saudi,Edmee Pelletier,1 -6068,9,32,Nine Thousand Three Hundred and Sixty Six,9366,48.png,Saudi,Chelsea Watson,1 -6069,18,26,Three Thousand Two Hundred and Forty Four,3244,92.png,Saudi,Sidney Lapointe,1 -6070,9,8,Two Thousand and Sixty Seven,2067,47.png,Saudi,Steffen Krueger,1 -6071,30,38,Eight Thousand Eight Hundred and Ninety Seven,8897,154.png,Saudi,Freddie Reid,1 -6072,35,0,Five Thousand One Hundred and Two,5102,178.png,Saudi,Ethel M. Bryson,1 -6073,20,38,Five Thousand Six Hundred and Eighty Two,5682,102.png,Saudi,Freddie Reid,1 -6074,33,5,Seven Thousand Nine Hundred and Two,7902,169.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6075,5,1,Four Thousand Two Hundred and Eighty Three,4283,27.png,Saudi,Emily D. Short,1 -6076,20,30,Three Thousand Six Hundred and Ninety One,3691,103.png,Saudi,Jodie Holden,1 -6077,16,9,One Thousand Nine Hundred and Seventy Eight,1978,80.png,Saudi,Maria Kalb,1 -6078,16,32,Nine Thousand Four Hundred and Forty Four,9444,84.png,Saudi,Chelsea Watson,1 -6079,41,3,Five Thousand Three Hundred and Fifty Six,5356,207.png,Saudi,Jiang Li Tao,1 -6080,6,26,Five Thousand Five Hundred and Fifty Nine,5559,34.png,Saudi,Sidney Lapointe,1 -6081,20,20,Four Thousand Four Hundred and Seventy Eight,4478,103.png,Saudi,Seymour Patenaude,1 -6082,36,40,Seven Thousand Nine Hundred and Twenty Eight,7928,183.png,Saudi,David Howard,1 -6083,37,10,Two Thousand Five Hundred and Twelve,2512,186.png,Saudi,Stephan Schwab,1 -6084,9,2,One Thousand and Thirty Six,1036,47.png,Saudi,Chi Hsiao,1 -6085,24,31,Seven Thousand Seven Hundred and Eighty Five,7785,121.png,Saudi,Naomi Grant,1 -6086,11,14,Nine Thousand Eight Hundred and Forty Nine,9849,56.png,Saudi,Renata Lukic,1 -6087,2,5,One Hundred and Thirteen,113,10.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6088,20,30,Three Thousand Four Hundred and Thirty Three,3433,100.png,Saudi,Jodie Holden,1 -6089,36,41,Four Thousand Three Hundred and Ninety One,4391,180.png,Saudi,Germa de Geus,1 -6090,2,23,Ninety,90,10.png,Saudi,Thรฉrรจse Fortier,1 -6091,25,42,Three Thousand Nine Hundred and Eighty Two,3982,128.png,Saudi,Brady Jamin,1 -6092,43,7,Three Thousand Eight Hundred and Thirty Five,3835,218.png,Saudi,Hasna Bahiyaa Amari,1 -6093,30,1,Four Thousand Eight Hundred and Sixty Six,4866,151.png,Saudi,Emily D. Short,1 -6094,38,2,Seven Thousand Two Hundred and Twenty Six,7226,192.png,Saudi,Chi Hsiao,1 -6095,33,5,Eight Thousand One Hundred and Twenty Three,8123,168.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6096,41,43,One Thousand Five Hundred and Eight,1508,208.png,Saudi,Aruna Bekx,1 -6097,36,38,Eight Thousand One Hundred and Thirty Seven,8137,184.png,Saudi,Freddie Reid,1 -6098,17,29,Six Thousand and Twenty Eight,6028,85.png,Saudi,Hayden Bruce,1 -6099,1,35,Six Thousand Four Hundred and Thirty Four,6434,5.png,Saudi,Elliot Humphreys,1 -6100,8,2,Five Thousand Four Hundred and Sixty Five,5465,40.png,Saudi,Chi Hsiao,1 -6101,41,4,Five Thousand Two Hundred and Thirty Five,5235,206.png,Saudi,Wafiyah Nashwa Wasem,1 -6102,43,28,Four Thousand Three Hundred and Eighty Five,4385,216.png,Saudi,Chapin Auger,1 -6103,18,11,Two Thousand Three Hundred and Ninety Eight,2398,93.png,Saudi,Jens Egger,1 -6104,42,7,Five Thousand Eight Hundred and Fourteen,5814,212.png,Saudi,Hasna Bahiyaa Amari,1 -6105,10,27,Sixty Six,66,50.png,Saudi,Colette Monjeau,1 -6106,1,36,Eight Thousand Six Hundred and Ninety,8690,8.png,Saudi,Thomas Chapman,1 -6107,9,4,Four Thousand Six Hundred and Forty Six,4646,46.png,Saudi,Wafiyah Nashwa Wasem,1 -6108,35,32,Eight Thousand One Hundred and Sixty Four,8164,176.png,Saudi,Chelsea Watson,1 -6109,31,7,Nine Thousand Eight Hundred and Thirty Six,9836,157.png,Saudi,Hasna Bahiyaa Amari,1 -6110,38,17,Five Thousand Four Hundred and Eighty Eight,5488,193.png,Saudi,Yolette Cloutier,1 -6111,32,5,One Thousand and Ninety Four,1094,163.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6112,10,11,Four Thousand Six Hundred and Fourteen,4614,50.png,Saudi,Jens Egger,1 -6113,20,42,Nine Thousand Eight Hundred and Fifty One,9851,102.png,Saudi,Brady Jamin,1 -6114,2,11,Four Thousand Three Hundred and Ninety,4390,14.png,Saudi,Jens Egger,1 -6115,34,15,Three Thousand Five Hundred and Thirty Five,3535,174.png,Saudi,Milenko Tkalcic,1 -6116,42,34,One Thousand Four Hundred and Eighty Six,1486,213.png,Saudi,Holly Martin,1 -6117,7,39,Eight Thousand Seven Hundred and Fifty Five,8755,37.png,Saudi,Katie Connor,1 -6118,15,21,Four Thousand Four Hundred and Thirteen,4413,75.png,Saudi,David Corbeil,1 -6119,7,12,Four Thousand Nine Hundred and Seventy Two,4972,39.png,Saudi,Marcel Achen,1 -6120,23,39,Five Thousand Six Hundred and Seventy Two,5672,119.png,Saudi,Katie Connor,1 -6121,13,18,Nine Thousand Nine Hundred and Four,9904,68.png,Saudi,Edmee Pelletier,1 -6122,6,8,Five Thousand Four Hundred and Fifty Two,5452,34.png,Saudi,Steffen Krueger,1 -6123,31,2,Five Thousand and Five,5005,158.png,Saudi,Chi Hsiao,1 -6124,24,30,Eight Thousand Nine Hundred and One,8901,121.png,Saudi,Jodie Holden,1 -6125,2,30,Five Thousand One Hundred and Thirty Nine,5139,13.png,Saudi,Jodie Holden,1 -6126,17,8,Four Thousand Seven Hundred and Ten,4710,86.png,Saudi,Steffen Krueger,1 -6127,11,39,Eight Thousand Nine Hundred and Forty Four,8944,58.png,Saudi,Katie Connor,1 -6128,7,18,Two Thousand Five Hundred and Twenty One,2521,38.png,Saudi,Edmee Pelletier,1 -6129,16,38,Four Thousand Nine Hundred and Three,4903,84.png,Saudi,Freddie Reid,1 -6130,26,4,Five Thousand Four Hundred and Sixty Seven,5467,133.png,Saudi,Wafiyah Nashwa Wasem,1 -6131,19,32,Nine Thousand Eight Hundred and Seventy Two,9872,95.png,Saudi,Chelsea Watson,1 -6132,16,8,Eight Hundred and Twelve,812,82.png,Saudi,Steffen Krueger,1 -6133,22,11,Seven Thousand Eight Hundred and Sixty Six,7866,110.png,Saudi,Jens Egger,1 -6134,33,43,Four Thousand Two Hundred and Twenty Nine,4229,165.png,Saudi,Aruna Bekx,1 -6135,40,41,Nine Thousand Eight Hundred and Thirty Seven,9837,203.png,Saudi,Germa de Geus,1 -6136,33,20,Six Thousand Three Hundred and Twenty,6320,167.png,Saudi,Seymour Patenaude,1 -6137,31,29,One Thousand One Hundred and Eighteen,1118,159.png,Saudi,Hayden Bruce,1 -6138,23,27,Six Thousand Six Hundred and Twenty Three,6623,117.png,Saudi,Colette Monjeau,1 -6139,38,9,Three Thousand Three Hundred and Three,3303,194.png,Saudi,Maria Kalb,1 -6140,25,33,Three Thousand One Hundred and Ninety,3190,128.png,Saudi,Eleanor Freeman,1 -6141,28,25,Two Thousand Two Hundred and Thirty Five,2235,144.png,Saudi,Fleurette Coudert,1 -6142,31,24,Three Thousand Three Hundred and Thirty Two,3332,157.png,Saudi,Clarice Blanc,1 -6143,5,32,Two Thousand and Sixty Five,2065,26.png,Saudi,Chelsea Watson,1 -6144,9,41,Three Thousand Five Hundred and Eight,3508,48.png,Saudi,Germa de Geus,1 -6145,38,16,Five Thousand and Fifty One,5051,191.png,Saudi,Searlas Grenier,1 -6146,23,19,One Thousand Six Hundred and Seven,1607,116.png,Saudi,Franรงoise Lapierre,1 -6147,12,21,Two Thousand One Hundred and Fifty Two,2152,64.png,Saudi,David Corbeil,1 -6148,36,4,Three Thousand Nine Hundred and Eighty Two,3982,183.png,Saudi,Wafiyah Nashwa Wasem,1 -6149,5,32,Four Thousand Three Hundred and Forty,4340,29.png,Saudi,Chelsea Watson,1 -6150,35,38,Four Thousand Two Hundred and Seventeen,4217,175.png,Saudi,Freddie Reid,1 -6151,17,29,Three Thousand Two Hundred and Sixty Eight,3268,86.png,Saudi,Hayden Bruce,1 -6152,37,35,Six Thousand Six Hundred and Fifteen,6615,185.png,Saudi,Elliot Humphreys,1 -6153,0,4,Three Thousand Five Hundred and Three,3503,0.png,Saudi,Wafiyah Nashwa Wasem,1 -6154,16,42,Five Thousand Two Hundred and Ninety Six,5296,81.png,Saudi,Brady Jamin,1 -6155,42,8,Nine Thousand and Seventeen,9017,210.png,Saudi,Steffen Krueger,1 -6156,26,37,Four Thousand Four Hundred and Eighty Four,4484,134.png,Saudi,Eva Davies,1 -6157,42,34,One Thousand Nine Hundred and Eighty,1980,211.png,Saudi,Holly Martin,1 -6158,37,6,Two Thousand Two Hundred and Sixty Nine,2269,187.png,Saudi,Abdul Qais Khouri,1 -6159,31,39,Six Thousand Two Hundred and Twenty,6220,156.png,Saudi,Katie Connor,1 -6160,10,23,Five Thousand Five Hundred and Sixteen,5516,51.png,Saudi,Thรฉrรจse Fortier,1 -6161,28,34,Eight Hundred and Fifteen,815,140.png,Saudi,Holly Martin,1 -6162,3,31,Nine Thousand Three Hundred and Fifty,9350,19.png,Saudi,Naomi Grant,1 -6163,33,19,Three Thousand One Hundred and Fifty Five,3155,169.png,Saudi,Franรงoise Lapierre,1 -6164,17,3,Three Hundred and Fifty One,351,89.png,Saudi,Jiang Li Tao,1 -6165,28,19,Five Thousand and Fourteen,5014,141.png,Saudi,Franรงoise Lapierre,1 -6166,18,4,Nine Thousand One Hundred and Thirty Three,9133,92.png,Saudi,Wafiyah Nashwa Wasem,1 -6167,16,25,Three Thousand Nine Hundred and Sixty Eight,3968,82.png,Saudi,Fleurette Coudert,1 -6168,42,37,Six Thousand Eight Hundred and Seven,6807,210.png,Saudi,Eva Davies,1 -6169,1,7,Nine Thousand Three Hundred and Forty Three,9343,7.png,Saudi,Hasna Bahiyaa Amari,1 -6170,35,32,Two Thousand Four Hundred and Ninety Two,2492,179.png,Saudi,Chelsea Watson,1 -6171,0,37,Five Hundred and Ninety Two,592,0.png,Saudi,Eva Davies,1 -6172,8,22,One Thousand Five Hundred and Fifty,1550,42.png,Saudi,Eglantine Forest,1 -6173,31,14,One Thousand One Hundred and Ninety Five,1195,155.png,Saudi,Renata Lukic,1 -6174,34,18,Four Thousand Nine Hundred and Seventy One,4971,173.png,Saudi,Edmee Pelletier,1 -6175,12,8,One Thousand Five Hundred and Thirty Nine,1539,62.png,Saudi,Steffen Krueger,1 -6176,22,30,Two Thousand Six Hundred and Seventy Two,2672,110.png,Saudi,Jodie Holden,1 -6177,37,0,Five Thousand Six Hundred and Eight,5608,188.png,Saudi,Ethel M. Bryson,1 -6178,32,25,Five Thousand Five Hundred and Eleven,5511,162.png,Saudi,Fleurette Coudert,1 -6179,29,39,Four Thousand Three Hundred and Five,4305,146.png,Saudi,Katie Connor,1 -6180,14,40,Eight Thousand Eight Hundred and Thirteen,8813,71.png,Saudi,David Howard,1 -6181,42,14,Two Thousand Six Hundred and Sixty Eight,2668,213.png,Saudi,Renata Lukic,1 -6182,12,5,Two Thousand One Hundred and Eighty Four,2184,60.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6183,42,20,Six Thousand Three Hundred and Forty Four,6344,213.png,Saudi,Seymour Patenaude,1 -6184,25,8,Three Thousand Three Hundred and Sixty Five,3365,126.png,Saudi,Steffen Krueger,1 -6185,25,3,Three Hundred and Five,305,125.png,Saudi,Jiang Li Tao,1 -6186,0,14,Nine Thousand Eight Hundred and Sixty Three,9863,1.png,Saudi,Renata Lukic,1 -6187,43,32,Five Thousand Three Hundred and Sixteen,5316,215.png,Saudi,Chelsea Watson,1 -6188,12,3,Three Thousand One Hundred and Ninety Two,3192,60.png,Saudi,Jiang Li Tao,1 -6189,7,43,Six Thousand Seven Hundred and Seventy Seven,6777,37.png,Saudi,Aruna Bekx,1 -6190,14,13,One Thousand Three Hundred and Twenty Nine,1329,73.png,Saudi,Petra Kovacic,1 -6191,5,31,One Thousand Seven Hundred and Fifty One,1751,26.png,Saudi,Naomi Grant,1 -6192,1,1,Five Thousand Six Hundred and Nineteen,5619,5.png,Saudi,Emily D. Short,1 -6193,26,11,Seven Thousand Two Hundred and Forty One,7241,134.png,Saudi,Jens Egger,1 -6194,5,40,Nine Thousand Nine Hundred and Ninety Five,9995,25.png,Saudi,David Howard,1 -6195,2,38,Five Thousand Two Hundred and Twenty Three,5223,14.png,Saudi,Freddie Reid,1 -6196,29,23,Four Thousand Nine Hundred and Seventy,4970,145.png,Saudi,Thรฉrรจse Fortier,1 -6197,11,27,Four Thousand Two Hundred,4200,58.png,Saudi,Colette Monjeau,1 -6198,32,40,Four Thousand Seven Hundred and Ninety Two,4792,164.png,Saudi,David Howard,1 -6199,19,15,Five Thousand Two Hundred and Ninety One,5291,98.png,Saudi,Milenko Tkalcic,1 -6200,11,37,Eight Thousand Seven Hundred and Ninety Three,8793,55.png,Saudi,Eva Davies,1 -6201,40,8,Seven Thousand Two Hundred and Thirty Eight,7238,202.png,Saudi,Steffen Krueger,1 -6202,14,32,Eight Hundred and Three,803,72.png,Saudi,Chelsea Watson,1 -6203,41,20,Four Thousand Five Hundred and Sixteen,4516,208.png,Saudi,Seymour Patenaude,1 -6204,8,15,Three Thousand Five Hundred and Eighty Three,3583,40.png,Saudi,Milenko Tkalcic,1 -6205,0,40,Five Thousand and Thirty Nine,5039,0.png,Saudi,David Howard,1 -6206,43,2,Two Thousand Seven Hundred and Ninety Four,2794,219.png,Saudi,Chi Hsiao,1 -6207,13,39,Nine Thousand Five Hundred and Fifty Two,9552,66.png,Saudi,Katie Connor,1 -6208,7,26,Three Thousand Five Hundred and Fifty Four,3554,38.png,Saudi,Sidney Lapointe,1 -6209,20,5,Nine Thousand One Hundred and Eight,9108,100.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6210,30,26,Eight Thousand Three Hundred and Eighty Nine,8389,151.png,Saudi,Sidney Lapointe,1 -6211,32,6,Four Thousand Eight Hundred and Ten,4810,163.png,Saudi,Abdul Qais Khouri,1 -6212,22,18,Three Thousand Three Hundred and Ninety Nine,3399,110.png,Saudi,Edmee Pelletier,1 -6213,43,26,Four Thousand Six Hundred and Thirty Four,4634,216.png,Saudi,Sidney Lapointe,1 -6214,5,28,Two Thousand Nine Hundred and Twenty Three,2923,26.png,Saudi,Chapin Auger,1 -6215,2,20,Six Thousand Three Hundred and Sixty Nine,6369,13.png,Saudi,Seymour Patenaude,1 -6216,6,21,One Thousand Six Hundred and Sixty Nine,1669,34.png,Saudi,David Corbeil,1 -6217,23,17,Six Hundred and Twenty Eight,628,119.png,Saudi,Yolette Cloutier,1 -6218,23,23,Five Thousand Six Hundred and Fifty Seven,5657,116.png,Saudi,Thรฉrรจse Fortier,1 -6219,31,33,Two Thousand Nine Hundred and Fifty Seven,2957,156.png,Saudi,Eleanor Freeman,1 -6220,38,40,Three Thousand One Hundred and Seventy Five,3175,191.png,Saudi,David Howard,1 -6221,35,12,Two Thousand Nine Hundred and Thirty One,2931,176.png,Saudi,Marcel Achen,1 -6222,20,27,Six Thousand Seven Hundred and Eighty Six,6786,102.png,Saudi,Colette Monjeau,1 -6223,20,13,Five Thousand Seven Hundred and Four,5704,100.png,Saudi,Petra Kovacic,1 -6224,30,5,Six Thousand Seven Hundred and Sixty One,6761,152.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6225,24,17,Eight Thousand Six Hundred and Fifty,8650,124.png,Saudi,Yolette Cloutier,1 -6226,10,33,Seven Thousand One Hundred and Seventy Three,7173,50.png,Saudi,Eleanor Freeman,1 -6227,6,34,Three Thousand Four Hundred and Fifteen,3415,33.png,Saudi,Holly Martin,1 -6228,27,16,Two Thousand Eight Hundred and Seventy Three,2873,135.png,Saudi,Searlas Grenier,1 -6229,7,3,Six Thousand Eight Hundred and Thirty,6830,38.png,Saudi,Jiang Li Tao,1 -6230,23,3,Four Thousand Six Hundred and Forty Four,4644,117.png,Saudi,Jiang Li Tao,1 -6231,6,28,One Thousand Four Hundred and Twenty Four,1424,31.png,Saudi,Chapin Auger,1 -6232,8,42,Five Thousand and Fifty Two,5052,43.png,Saudi,Brady Jamin,1 -6233,36,12,Five Thousand Six Hundred and Thirty Nine,5639,182.png,Saudi,Marcel Achen,1 -6234,42,22,Eight Thousand Seven Hundred and Sixty Five,8765,214.png,Saudi,Eglantine Forest,1 -6235,37,30,Two Hundred and Seventy One,271,189.png,Saudi,Jodie Holden,1 -6236,5,16,Six Thousand Nine Hundred and Ninety Six,6996,25.png,Saudi,Searlas Grenier,1 -6237,5,1,Fifty One,51,25.png,Saudi,Emily D. Short,1 -6238,6,21,Four Hundred and Seventy One,471,32.png,Saudi,David Corbeil,1 -6239,5,1,Two Thousand and Thirty Two,2032,29.png,Saudi,Emily D. Short,1 -6240,42,13,Two Thousand Four Hundred and Six,2406,210.png,Saudi,Petra Kovacic,1 -6241,9,2,Eight Thousand and Eighty Eight,8088,45.png,Saudi,Chi Hsiao,1 -6242,15,34,Nine Thousand Two Hundred and Sixty Two,9262,79.png,Saudi,Holly Martin,1 -6243,14,2,Four Thousand Six Hundred and Thirty,4630,73.png,Saudi,Chi Hsiao,1 -6244,30,41,Four Thousand and Eleven,4011,153.png,Saudi,Germa de Geus,1 -6245,24,12,Two Thousand Six Hundred and Twenty Three,2623,124.png,Saudi,Marcel Achen,1 -6246,5,1,Seven Thousand Eight Hundred and Nine,7809,26.png,Saudi,Emily D. Short,1 -6247,21,29,Six Thousand and Twenty Five,6025,107.png,Saudi,Hayden Bruce,1 -6248,12,42,Eight Thousand Nine Hundred and Twelve,8912,63.png,Saudi,Brady Jamin,1 -6249,37,27,Five Thousand Seven Hundred and Eighty Three,5783,188.png,Saudi,Colette Monjeau,1 -6250,16,0,Two Thousand Five Hundred and Thirty Eight,2538,82.png,Saudi,Ethel M. Bryson,1 -6251,15,43,Eight Thousand Nine Hundred and Ninety One,8991,79.png,Saudi,Aruna Bekx,1 -6252,29,30,Two Thousand Two Hundred and Forty Two,2242,147.png,Saudi,Jodie Holden,1 -6253,2,32,One Thousand Eight Hundred and Fifty Eight,1858,13.png,Saudi,Chelsea Watson,1 -6254,29,5,Six Thousand Eight Hundred and Fourteen,6814,148.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6255,0,21,Five Hundred and Seventy,570,3.png,Saudi,David Corbeil,1 -6256,29,33,Six Thousand Three Hundred and Thirty Six,6336,147.png,Saudi,Eleanor Freeman,1 -6257,4,8,Eight Thousand One Hundred and Ninety Nine,8199,20.png,Saudi,Steffen Krueger,1 -6258,14,36,Seven Thousand and Fifty Two,7052,72.png,Saudi,Thomas Chapman,1 -6259,21,15,Seven Thousand Seven Hundred and Twenty Two,7722,106.png,Saudi,Milenko Tkalcic,1 -6260,41,21,One Thousand Nine Hundred and Seventy Eight,1978,206.png,Saudi,David Corbeil,1 -6261,14,43,Six Hundred and Fifty Nine,659,70.png,Saudi,Aruna Bekx,1 -6262,4,0,Three Hundred and Sixty Six,366,23.png,Saudi,Ethel M. Bryson,1 -6263,15,37,Nine Thousand Six Hundred and Ninety Six,9696,78.png,Saudi,Eva Davies,1 -6264,0,1,Seven Thousand Two Hundred and Fifty One,7251,2.png,Saudi,Emily D. Short,1 -6265,42,16,One Thousand and Ninety Seven,1097,212.png,Saudi,Searlas Grenier,1 -6266,27,40,Seven Thousand Seven Hundred and Eight,7708,139.png,Saudi,David Howard,1 -6267,16,2,Seven Thousand One Hundred and Nineteen,7119,83.png,Saudi,Chi Hsiao,1 -6268,23,14,Four Thousand Four Hundred and Seventy Seven,4477,119.png,Saudi,Renata Lukic,1 -6269,28,43,Three Thousand Four Hundred and Twenty Five,3425,144.png,Saudi,Aruna Bekx,1 -6270,26,13,Six Thousand and Seventy Nine,6079,131.png,Saudi,Petra Kovacic,1 -6271,22,25,Four Thousand Two Hundred and Fifty Three,4253,110.png,Saudi,Fleurette Coudert,1 -6272,31,11,Seven Hundred and Thirty Three,733,155.png,Saudi,Jens Egger,1 -6273,31,5,Two Thousand Eight Hundred and Sixty Three,2863,156.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6274,16,39,Five Thousand Eight Hundred and Sixty Two,5862,84.png,Saudi,Katie Connor,1 -6275,28,29,Six Thousand Four Hundred and Eighty Two,6482,141.png,Saudi,Hayden Bruce,1 -6276,1,24,Six Thousand Four Hundred and Forty Nine,6449,8.png,Saudi,Clarice Blanc,1 -6277,43,27,Nine Thousand Seven Hundred and Seventy,9770,216.png,Saudi,Colette Monjeau,1 -6278,41,21,Ninety Three,93,205.png,Saudi,David Corbeil,1 -6279,1,10,Four Thousand Three Hundred and Nineteen,4319,6.png,Saudi,Stephan Schwab,1 -6280,42,26,Three Thousand Four Hundred and Fifty Three,3453,214.png,Saudi,Sidney Lapointe,1 -6281,16,33,Five Thousand Six Hundred and Thirty Two,5632,84.png,Saudi,Eleanor Freeman,1 -6282,39,12,Nine Thousand Eight Hundred and Sixty Five,9865,196.png,Saudi,Marcel Achen,1 -6283,23,26,Six Hundred and Twenty Eight,628,115.png,Saudi,Sidney Lapointe,1 -6284,0,25,Three Thousand Seven Hundred and Ninety Five,3795,2.png,Saudi,Fleurette Coudert,1 -6285,2,18,Five Thousand Seven Hundred and Fifty,5750,14.png,Saudi,Edmee Pelletier,1 -6286,21,20,Nine Thousand Seven Hundred and Thirty,9730,109.png,Saudi,Seymour Patenaude,1 -6287,11,20,Two Thousand Two Hundred and Thirteen,2213,58.png,Saudi,Seymour Patenaude,1 -6288,16,37,Nine Thousand One Hundred and Twelve,9112,80.png,Saudi,Eva Davies,1 -6289,20,38,Three Thousand Nine Hundred and Forty,3940,102.png,Saudi,Freddie Reid,1 -6290,16,37,Seven Thousand Five Hundred and Twenty Three,7523,83.png,Saudi,Eva Davies,1 -6291,3,36,Six Thousand Seven Hundred and Twenty Eight,6728,15.png,Saudi,Thomas Chapman,1 -6292,43,0,Eight Thousand Five Hundred and Thirty One,8531,215.png,Saudi,Ethel M. Bryson,1 -6293,43,1,One Thousand Two Hundred and Four,1204,215.png,Saudi,Emily D. Short,1 -6294,11,9,Five Thousand Eight Hundred and Four,5804,56.png,Saudi,Maria Kalb,1 -6295,20,18,Nine Thousand Eight Hundred and Fifty Seven,9857,103.png,Saudi,Edmee Pelletier,1 -6296,34,27,Four Thousand Seven Hundred and Ninety,4790,170.png,Saudi,Colette Monjeau,1 -6297,25,40,One Thousand Nine Hundred and Twenty Eight,1928,126.png,Saudi,David Howard,1 -6298,24,36,Seven Thousand Two Hundred and Thirty Three,7233,120.png,Saudi,Thomas Chapman,1 -6299,43,38,Five Hundred and Seventy,570,217.png,Saudi,Freddie Reid,1 -6300,28,3,Five Thousand Seven Hundred and Thirty Three,5733,141.png,Saudi,Jiang Li Tao,1 -6301,14,35,Nine Hundred and Sixty One,961,73.png,Saudi,Elliot Humphreys,1 -6302,5,2,Two Thousand Two Hundred and Eighty Six,2286,25.png,Saudi,Chi Hsiao,1 -6303,32,12,Seven Thousand Four Hundred and Seventy Four,7474,162.png,Saudi,Marcel Achen,1 -6304,38,19,Nine Thousand Two Hundred and Forty Seven,9247,190.png,Saudi,Franรงoise Lapierre,1 -6305,4,3,Eight Thousand Three Hundred and Eighty Two,8382,24.png,Saudi,Jiang Li Tao,1 -6306,2,41,Seven Thousand Four Hundred and Ninety Six,7496,11.png,Saudi,Germa de Geus,1 -6307,37,20,Two Thousand One Hundred and Ninety Eight,2198,186.png,Saudi,Seymour Patenaude,1 -6308,15,7,Seven Thousand One Hundred and Eighty Seven,7187,76.png,Saudi,Hasna Bahiyaa Amari,1 -6309,37,16,Two Thousand Eight Hundred and Seventy Five,2875,185.png,Saudi,Searlas Grenier,1 -6310,36,18,Eight Hundred and Seventy Three,873,183.png,Saudi,Edmee Pelletier,1 -6311,39,27,Eight Thousand Nine Hundred and Fifty Six,8956,198.png,Saudi,Colette Monjeau,1 -6312,16,13,Two Thousand Five Hundred and Ninety,2590,82.png,Saudi,Petra Kovacic,1 -6313,23,19,One Thousand Six Hundred and Ninety,1690,115.png,Saudi,Franรงoise Lapierre,1 -6314,23,8,One Thousand Four Hundred and Seventy Nine,1479,115.png,Saudi,Steffen Krueger,1 -6315,5,12,Six Thousand Nine Hundred and Sixty Six,6966,26.png,Saudi,Marcel Achen,1 -6316,23,3,One Thousand Seven Hundred and Four,1704,116.png,Saudi,Jiang Li Tao,1 -6317,8,7,Three Thousand Two Hundred and Eighty,3280,40.png,Saudi,Hasna Bahiyaa Amari,1 -6318,21,28,Five Thousand Five Hundred and Ninety Nine,5599,108.png,Saudi,Chapin Auger,1 -6319,28,34,Five Thousand and Fifty One,5051,143.png,Saudi,Holly Martin,1 -6320,21,14,Eight Thousand and Twenty Seven,8027,107.png,Saudi,Renata Lukic,1 -6321,30,43,Nine Thousand Seven Hundred and Ninety Six,9796,150.png,Saudi,Aruna Bekx,1 -6322,38,23,Two Thousand Four Hundred and Seventy Three,2473,191.png,Saudi,Thรฉrรจse Fortier,1 -6323,21,42,Six Thousand and Five,6005,107.png,Saudi,Brady Jamin,1 -6324,11,30,Five Thousand Six Hundred and Ninety Five,5695,55.png,Saudi,Jodie Holden,1 -6325,5,35,Seven Thousand Eight Hundred and Fifty Seven,7857,28.png,Saudi,Elliot Humphreys,1 -6326,33,35,Nine Thousand Nine Hundred and Sixty Two,9962,168.png,Saudi,Elliot Humphreys,1 -6327,41,30,Two Thousand and Thirty Three,2033,207.png,Saudi,Jodie Holden,1 -6328,0,16,Five Thousand Two Hundred and Fifty Three,5253,0.png,Saudi,Searlas Grenier,1 -6329,38,29,Four Thousand Six Hundred and Forty Four,4644,194.png,Saudi,Hayden Bruce,1 -6330,38,9,Four Thousand Three Hundred and Thirty,4330,190.png,Saudi,Maria Kalb,1 -6331,43,19,Four Hundred and Ninety Four,494,215.png,Saudi,Franรงoise Lapierre,1 -6332,23,1,Three Thousand Four Hundred and Ninety Seven,3497,119.png,Saudi,Emily D. Short,1 -6333,19,29,Seven Thousand One Hundred and Twelve,7112,96.png,Saudi,Hayden Bruce,1 -6334,10,6,Eight Thousand Six Hundred and Eighty,8680,50.png,Saudi,Abdul Qais Khouri,1 -6335,24,16,Six Thousand and Fourteen,6014,123.png,Saudi,Searlas Grenier,1 -6336,17,20,Five Thousand Two Hundred and Eighty Four,5284,88.png,Saudi,Seymour Patenaude,1 -6337,37,32,Five Thousand One Hundred and Fifty Eight,5158,187.png,Saudi,Chelsea Watson,1 -6338,10,10,Seven Thousand Eight Hundred and Eleven,7811,54.png,Saudi,Stephan Schwab,1 -6339,1,28,Eight Thousand Eight Hundred and Thirty Nine,8839,5.png,Saudi,Chapin Auger,1 -6340,17,43,One Thousand One Hundred and Forty Seven,1147,88.png,Saudi,Aruna Bekx,1 -6341,20,16,Seven Thousand Five Hundred and Thirty One,7531,102.png,Saudi,Searlas Grenier,1 -6342,42,35,Nine Thousand Five Hundred and Ninety Two,9592,212.png,Saudi,Elliot Humphreys,1 -6343,10,23,Seven Thousand Six Hundred and Fifty Six,7656,54.png,Saudi,Thรฉrรจse Fortier,1 -6344,3,9,Four Thousand and Seventy One,4071,16.png,Saudi,Maria Kalb,1 -6345,30,16,Four Thousand Eight Hundred and Eighteen,4818,152.png,Saudi,Searlas Grenier,1 -6346,41,36,Three Thousand One Hundred and Fifteen,3115,207.png,Saudi,Thomas Chapman,1 -6347,38,34,Four Thousand Two Hundred and Two,4202,192.png,Saudi,Holly Martin,1 -6348,25,38,Seven Hundred and Thirty Nine,739,129.png,Saudi,Freddie Reid,1 -6349,6,31,Six Thousand Six Hundred and Sixty Four,6664,33.png,Saudi,Naomi Grant,1 -6350,39,3,One Thousand Six Hundred and Fifty Three,1653,198.png,Saudi,Jiang Li Tao,1 -6351,5,19,Seven Hundred and Fifty Five,755,28.png,Saudi,Franรงoise Lapierre,1 -6352,27,7,Nine Hundred and Sixty Four,964,138.png,Saudi,Hasna Bahiyaa Amari,1 -6353,39,7,Six Thousand Eight Hundred and Thirty Five,6835,199.png,Saudi,Hasna Bahiyaa Amari,1 -6354,1,7,Five Thousand Three Hundred and Twenty Six,5326,9.png,Saudi,Hasna Bahiyaa Amari,1 -6355,39,20,Nine Thousand Eight Hundred and Seventy,9870,195.png,Saudi,Seymour Patenaude,1 -6356,27,42,Nine Thousand Seven Hundred and Forty Nine,9749,135.png,Saudi,Brady Jamin,1 -6357,18,35,Fifty Six,56,92.png,Saudi,Elliot Humphreys,1 -6358,32,8,One Thousand and Seventy Five,1075,162.png,Saudi,Steffen Krueger,1 -6359,7,22,One Thousand Six Hundred and Twenty Five,1625,39.png,Saudi,Eglantine Forest,1 -6360,6,14,Six Thousand Six Hundred and Forty Eight,6648,30.png,Saudi,Renata Lukic,1 -6361,42,5,Six Hundred and Nine,609,211.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6362,23,20,One Hundred and Seventy Nine,179,116.png,Saudi,Seymour Patenaude,1 -6363,25,10,Nine Thousand Six Hundred and Fifty Two,9652,126.png,Saudi,Stephan Schwab,1 -6364,7,23,One Thousand Five Hundred and Six,1506,39.png,Saudi,Thรฉrรจse Fortier,1 -6365,15,18,Nine Thousand Six Hundred and Fifty Five,9655,78.png,Saudi,Edmee Pelletier,1 -6366,12,23,Four Thousand Eight Hundred and Sixty Three,4863,60.png,Saudi,Thรฉrรจse Fortier,1 -6367,19,29,Nine Thousand Five Hundred and Forty One,9541,98.png,Saudi,Hayden Bruce,1 -6368,41,4,Nine Thousand Two Hundred and Ninety Six,9296,207.png,Saudi,Wafiyah Nashwa Wasem,1 -6369,36,2,One Thousand Six Hundred and Six,1606,180.png,Saudi,Chi Hsiao,1 -6370,33,2,Nine Thousand Nine Hundred and Eleven,9911,169.png,Saudi,Chi Hsiao,1 -6371,21,26,Four Thousand Eight Hundred and Forty Nine,4849,109.png,Saudi,Sidney Lapointe,1 -6372,2,15,Four Thousand Nine Hundred and Four,4904,14.png,Saudi,Milenko Tkalcic,1 -6373,30,42,Five Thousand One Hundred and Forty One,5141,150.png,Saudi,Brady Jamin,1 -6374,36,5,Three Thousand and Seventy Six,3076,181.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6375,6,14,Five Thousand Seven Hundred and Sixty Two,5762,30.png,Saudi,Renata Lukic,1 -6376,40,2,One Thousand Six Hundred and Twenty,1620,201.png,Saudi,Chi Hsiao,1 -6377,29,43,Two Thousand and Sixty,2060,146.png,Saudi,Aruna Bekx,1 -6378,29,28,Five Thousand Seven Hundred and Forty Three,5743,145.png,Saudi,Chapin Auger,1 -6379,30,25,Five Thousand Three Hundred and Ninety Seven,5397,151.png,Saudi,Fleurette Coudert,1 -6380,12,20,Nine Thousand Four Hundred and Sixty Five,9465,61.png,Saudi,Seymour Patenaude,1 -6381,25,29,Nine Thousand Four Hundred and Eighty Three,9483,126.png,Saudi,Hayden Bruce,1 -6382,14,2,Four Thousand Seven Hundred and Forty,4740,73.png,Saudi,Chi Hsiao,1 -6383,30,31,Seven Thousand Six Hundred and Fifty Three,7653,152.png,Saudi,Naomi Grant,1 -6384,14,7,Eight Thousand Four Hundred,8400,73.png,Saudi,Hasna Bahiyaa Amari,1 -6385,20,36,One Thousand Six Hundred and Fifty,1650,104.png,Saudi,Thomas Chapman,1 -6386,27,40,Six Thousand Four Hundred and Seven,6407,136.png,Saudi,David Howard,1 -6387,22,30,Two Thousand Two Hundred and Twenty Seven,2227,112.png,Saudi,Jodie Holden,1 -6388,26,19,Four Thousand Three Hundred and Twenty Six,4326,133.png,Saudi,Franรงoise Lapierre,1 -6389,13,28,Six Thousand Six Hundred and Six,6606,66.png,Saudi,Chapin Auger,1 -6390,32,27,Eight Thousand Eight Hundred and Seventy Two,8872,160.png,Saudi,Colette Monjeau,1 -6391,7,39,Three Thousand Five Hundred and Forty,3540,38.png,Saudi,Katie Connor,1 -6392,35,0,Eight Thousand One Hundred and Ninety Four,8194,179.png,Saudi,Ethel M. Bryson,1 -6393,11,16,Four Thousand Seven Hundred and Eighty Four,4784,59.png,Saudi,Searlas Grenier,1 -6394,16,41,Eight Thousand Three Hundred and Twenty Eight,8328,84.png,Saudi,Germa de Geus,1 -6395,42,0,Eight Thousand Three Hundred and Ninety,8390,210.png,Saudi,Ethel M. Bryson,1 -6396,5,39,Nine Thousand Two Hundred and Seventy Three,9273,25.png,Saudi,Katie Connor,1 -6397,32,27,Two Thousand Six Hundred and Eighty Nine,2689,160.png,Saudi,Colette Monjeau,1 -6398,29,28,Nine Thousand One Hundred and Twenty Two,9122,149.png,Saudi,Chapin Auger,1 -6399,9,6,Eight Thousand Three Hundred and Seventy Seven,8377,49.png,Saudi,Abdul Qais Khouri,1 -6400,13,37,One Thousand Nine Hundred and Ninety Five,1995,69.png,Saudi,Eva Davies,1 -6401,41,9,Four Thousand and Sixty Two,4062,208.png,Saudi,Maria Kalb,1 -6402,4,26,Two Hundred and Forty Eight,248,22.png,Saudi,Sidney Lapointe,1 -6403,36,18,Three Hundred and Twenty Nine,329,182.png,Saudi,Edmee Pelletier,1 -6404,24,10,Five Thousand Seven Hundred and Twenty Three,5723,121.png,Saudi,Stephan Schwab,1 -6405,31,21,Six Thousand Two Hundred and Forty Six,6246,155.png,Saudi,David Corbeil,1 -6406,6,27,Seven Thousand and Nine,7009,32.png,Saudi,Colette Monjeau,1 -6407,10,14,Eight Thousand Eight Hundred and Eighty Five,8885,51.png,Saudi,Renata Lukic,1 -6408,14,28,Ninety Five,95,71.png,Saudi,Chapin Auger,1 -6409,4,36,Eight Thousand Five Hundred and Ninety,8590,24.png,Saudi,Thomas Chapman,1 -6410,33,32,Eight Thousand Nine Hundred and Three,8903,165.png,Saudi,Chelsea Watson,1 -6411,10,29,Five Thousand Eight Hundred and Seventy Five,5875,51.png,Saudi,Hayden Bruce,1 -6412,22,7,Seven Thousand Two Hundred and Ten,7210,113.png,Saudi,Hasna Bahiyaa Amari,1 -6413,3,19,Seven Thousand Seven Hundred and One,7701,18.png,Saudi,Franรงoise Lapierre,1 -6414,14,30,Two Hundred and Eight,208,74.png,Saudi,Jodie Holden,1 -6415,27,22,Two Thousand One Hundred and Thirty Two,2132,138.png,Saudi,Eglantine Forest,1 -6416,37,11,Nine Thousand Six Hundred and Sixty,9660,188.png,Saudi,Jens Egger,1 -6417,10,3,Five Thousand Four Hundred and Ninety,5490,54.png,Saudi,Jiang Li Tao,1 -6418,23,9,Eight Hundred and Twenty Three,823,115.png,Saudi,Maria Kalb,1 -6419,20,40,Seven Thousand and Thirteen,7013,101.png,Saudi,David Howard,1 -6420,28,19,One Thousand Three Hundred and Four,1304,143.png,Saudi,Franรงoise Lapierre,1 -6421,13,24,Nine Thousand Five Hundred and Fifty Two,9552,65.png,Saudi,Clarice Blanc,1 -6422,19,29,Three Thousand One Hundred and Thirty Four,3134,97.png,Saudi,Hayden Bruce,1 -6423,20,27,One Thousand Three Hundred and Seventy Nine,1379,101.png,Saudi,Colette Monjeau,1 -6424,41,32,Eight Thousand Six Hundred and Sixty Three,8663,207.png,Saudi,Chelsea Watson,1 -6425,38,26,Six Thousand Seven Hundred and Seventy Five,6775,191.png,Saudi,Sidney Lapointe,1 -6426,13,34,Six Thousand Six Hundred and Fifteen,6615,69.png,Saudi,Holly Martin,1 -6427,4,20,Six Thousand Eight Hundred and Twenty,6820,21.png,Saudi,Seymour Patenaude,1 -6428,3,15,Four Thousand Five Hundred and Seventeen,4517,17.png,Saudi,Milenko Tkalcic,1 -6429,9,19,Nine Thousand Seven Hundred and Twenty Three,9723,49.png,Saudi,Franรงoise Lapierre,1 -6430,12,40,Six Hundred and Ten,610,64.png,Saudi,David Howard,1 -6431,14,19,Four Thousand Nine Hundred and Ninety One,4991,74.png,Saudi,Franรงoise Lapierre,1 -6432,36,5,Four Thousand and Six,4006,182.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6433,9,28,One Thousand Nine Hundred and Three,1903,49.png,Saudi,Chapin Auger,1 -6434,33,18,Four Thousand and Ninety Two,4092,165.png,Saudi,Edmee Pelletier,1 -6435,17,35,Four Thousand Two Hundred and Fifty Five,4255,89.png,Saudi,Elliot Humphreys,1 -6436,0,24,Eight Thousand Nine Hundred and Eighty Seven,8987,1.png,Saudi,Clarice Blanc,1 -6437,20,39,Four Thousand One Hundred and Fifty Seven,4157,101.png,Saudi,Katie Connor,1 -6438,22,19,Four Thousand and Eighty Two,4082,112.png,Saudi,Franรงoise Lapierre,1 -6439,5,27,Nine Thousand Six Hundred and Seventeen,9617,29.png,Saudi,Colette Monjeau,1 -6440,27,41,One Thousand Three Hundred and Twenty Eight,1328,136.png,Saudi,Germa de Geus,1 -6441,6,5,Seven Thousand Four Hundred and Forty Two,7442,33.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6442,18,1,Seven Thousand Two Hundred and Seventy Eight,7278,92.png,Saudi,Emily D. Short,1 -6443,21,22,One Thousand Three Hundred and Fifty Two,1352,105.png,Saudi,Eglantine Forest,1 -6444,11,8,Two Hundred and Twenty Eight,228,59.png,Saudi,Steffen Krueger,1 -6445,25,20,Eight Thousand Seven Hundred and Sixty Five,8765,127.png,Saudi,Seymour Patenaude,1 -6446,35,18,Five Thousand Four Hundred and One,5401,175.png,Saudi,Edmee Pelletier,1 -6447,42,23,Two Thousand Five Hundred and Sixty Three,2563,212.png,Saudi,Thรฉrรจse Fortier,1 -6448,1,10,Nine Thousand and Twenty Three,9023,7.png,Saudi,Stephan Schwab,1 -6449,25,42,Nine Hundred and Thirteen,913,126.png,Saudi,Brady Jamin,1 -6450,6,33,Four Thousand One Hundred and Twenty Five,4125,32.png,Saudi,Eleanor Freeman,1 -6451,3,37,Six Thousand Eight Hundred and Seventy Four,6874,18.png,Saudi,Eva Davies,1 -6452,27,42,Eight Thousand Eight Hundred and Forty Three,8843,135.png,Saudi,Brady Jamin,1 -6453,5,29,Four Thousand and Thirty Four,4034,25.png,Saudi,Hayden Bruce,1 -6454,30,29,Three Thousand Three Hundred and Thirty Five,3335,152.png,Saudi,Hayden Bruce,1 -6455,15,43,Four Thousand Six Hundred and Thirty Seven,4637,78.png,Saudi,Aruna Bekx,1 -6456,5,35,Two Hundred,200,29.png,Saudi,Elliot Humphreys,1 -6457,36,22,Four Thousand Six Hundred and Fourteen,4614,181.png,Saudi,Eglantine Forest,1 -6458,26,15,Six Thousand Six Hundred and Sixty Two,6662,134.png,Saudi,Milenko Tkalcic,1 -6459,1,30,Six Thousand Six Hundred and Twenty Six,6626,9.png,Saudi,Jodie Holden,1 -6460,28,37,Four Hundred and Eighty Seven,487,140.png,Saudi,Eva Davies,1 -6461,42,8,Nine Thousand Eight Hundred and Twenty Seven,9827,214.png,Saudi,Steffen Krueger,1 -6462,37,12,Seven Thousand Six Hundred and Twenty Seven,7627,186.png,Saudi,Marcel Achen,1 -6463,18,20,Two Thousand and Nine,2009,91.png,Saudi,Seymour Patenaude,1 -6464,12,39,Six Thousand Two Hundred and Eighty Five,6285,64.png,Saudi,Katie Connor,1 -6465,19,13,Seven Thousand Five Hundred and Sixty Six,7566,95.png,Saudi,Petra Kovacic,1 -6466,36,23,Six Thousand Two Hundred and Twenty Two,6222,180.png,Saudi,Thรฉrรจse Fortier,1 -6467,7,27,Two Thousand Three Hundred and Forty Eight,2348,39.png,Saudi,Colette Monjeau,1 -6468,32,23,Three Thousand Seven Hundred and Sixty Four,3764,160.png,Saudi,Thรฉrรจse Fortier,1 -6469,1,5,Two Hundred and Eighty Five,285,6.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6470,6,17,Seven Thousand Five Hundred and Fourteen,7514,31.png,Saudi,Yolette Cloutier,1 -6471,1,29,Six Thousand Eight Hundred and Thirty Three,6833,6.png,Saudi,Hayden Bruce,1 -6472,30,10,Nine Hundred and Eighty,980,150.png,Saudi,Stephan Schwab,1 -6473,29,29,Five Thousand Six Hundred and Twenty,5620,145.png,Saudi,Hayden Bruce,1 -6474,30,29,Three Thousand Three Hundred and One,3301,154.png,Saudi,Hayden Bruce,1 -6475,0,21,One Hundred,100,0.png,Saudi,David Corbeil,1 -6476,38,9,Seven Thousand Three Hundred and Ninety Seven,7397,193.png,Saudi,Maria Kalb,1 -6477,2,12,Nine Thousand Three Hundred and Ninety Seven,9397,13.png,Saudi,Marcel Achen,1 -6478,37,33,Eight Hundred and Forty Nine,849,187.png,Saudi,Eleanor Freeman,1 -6479,1,35,Seven Thousand Seven Hundred and Forty Six,7746,7.png,Saudi,Elliot Humphreys,1 -6480,15,13,Six Thousand Five Hundred and Thirty Two,6532,76.png,Saudi,Petra Kovacic,1 -6481,6,21,Six Thousand Seven Hundred and Twenty Eight,6728,34.png,Saudi,David Corbeil,1 -6482,6,35,Four Hundred and Sixty Three,463,33.png,Saudi,Elliot Humphreys,1 -6483,41,42,Eight Thousand Nine Hundred and Sixty One,8961,208.png,Saudi,Brady Jamin,1 -6484,7,34,Thirty Three,33,36.png,Saudi,Holly Martin,1 -6485,29,9,One Thousand Six Hundred and Seventy Two,1672,148.png,Saudi,Maria Kalb,1 -6486,38,24,Four Thousand and Thirty Three,4033,192.png,Saudi,Clarice Blanc,1 -6487,23,34,Four Thousand Six Hundred and Twenty Six,4626,116.png,Saudi,Holly Martin,1 -6488,43,27,Three Thousand Nine Hundred and Fifteen,3915,217.png,Saudi,Colette Monjeau,1 -6489,13,5,Three Thousand Seven Hundred and Seventy Seven,3777,69.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6490,42,39,Nine Thousand and Seventy Six,9076,212.png,Saudi,Katie Connor,1 -6491,29,38,Nine Thousand Seven Hundred and Eighty Two,9782,149.png,Saudi,Freddie Reid,1 -6492,15,24,Six Thousand Nine Hundred and Thirty,6930,79.png,Saudi,Clarice Blanc,1 -6493,7,27,Three Thousand One Hundred and Seventy,3170,38.png,Saudi,Colette Monjeau,1 -6494,21,26,One Thousand Four Hundred and Eighty One,1481,105.png,Saudi,Sidney Lapointe,1 -6495,20,2,Nine Thousand Two Hundred and Sixty Nine,9269,102.png,Saudi,Chi Hsiao,1 -6496,32,2,Six Thousand Three Hundred and Seventy One,6371,163.png,Saudi,Chi Hsiao,1 -6497,21,34,Six Thousand Six Hundred and Sixty Two,6662,106.png,Saudi,Holly Martin,1 -6498,0,21,Six Hundred and Twenty One,621,3.png,Saudi,David Corbeil,1 -6499,34,29,Seven Thousand Three Hundred and Fifty Two,7352,170.png,Saudi,Hayden Bruce,1 -6500,20,41,One Thousand Four Hundred and Twenty Five,1425,104.png,Saudi,Germa de Geus,1 -6501,24,8, ,8388,123.png,Saudi,Steffen Krueger,0 -6502,21,16,Six Hundred and Fifty Eight, ,105.png,Saudi,Searlas Grenier,0 -6503,4,28,One Thousand Nine Hundred,3102,Nan,Saudi,Chapin Auger,0 -6504,11,0,Two Hundred and Forty,619,Nan,Saudi,Ethel M. Bryson,0 -6505,41,20,One Thousand Nine Hundred and Ninety Six,7984,Nan,Saudi,Seymour Patenaude,0 -6506,38,28,Five Thousand Nine Hundred and Seventy Two,7446,Nan,Saudi,Chapin Auger,0 -6507,42,22,One Thousand Nine Hundred and Eighty Four,4505,Nan,Saudi,Eglantine Forest,0 -6508,41,3,Three Thousand Eight Hundred and Seventy Nine,5705,Nan,Saudi,Jiang Li Tao,0 -6509,34,16,Three Thousand Six Hundred and Thirteen,5719,Nan,Saudi,Searlas Grenier,0 -6510,5,12,Two Thousand Five Hundred, ,28.png,Saudi,Marcel Achen,0 -6511,7,40,Three Thousand Two Hundred and Ninety,3809,Nan,Saudi,David Howard,0 -6512,35,1,Three Thousand Two Hundred and Ninety One, ,179.png,Saudi,Emily D. Short,0 -6513,25,15,Eight Hundred and Thirty Three,8934,Nan,Saudi,Milenko Tkalcic,0 -6514,23,21,Eight Hundred and Seventy Nine,1508,Nan,Saudi,David Corbeil,0 -6515,1,2,Six Thousand One Hundred and Forty Two,6662,Nan,Saudi,Chi Hsiao,0 -6516,30,17, ,2000,150.png,Saudi,Yolette Cloutier,0 -6517,42,7,Three Thousand Nine Hundred and Ninety One, ,211.png,Saudi,Hasna Bahiyaa Amari,0 -6518,26,27, ,3708,132.png,Saudi,Colette Monjeau,0 -6519,16,3,One Thousand Eight Hundred and Fifty Seven,7146,Nan,Saudi,Jiang Li Tao,0 -6520,2,21,Six Thousand Six Hundred and Eight,9040,Nan,Saudi,David Corbeil,0 -6521,37,28,Six, ,188.png,Saudi,Chapin Auger,0 -6522,37,8,Four Hundred and Twenty One,2196,Nan,Saudi,Steffen Krueger,0 -6523,7,22,Six Hundred and Ninety Seven,2717,Nan,Saudi,Eglantine Forest,0 -6524,1,13, ,9936,9.png,Saudi,Petra Kovacic,0 -6525,7,29,One Hundred and Seventy Nine,341,Nan,Saudi,Hayden Bruce,0 -6526,28,34,Two Thousand Three Hundred and One,3150,Nan,Saudi,Holly Martin,0 -6527,1,17,Seven Hundred and Seventy Three, ,8.png,Saudi,Yolette Cloutier,0 -6528,35,18, ,8174,179.png,Saudi,Edmee Pelletier,0 -6529,31,15,Six Hundred and Ninety Three, ,157.png,Saudi,Milenko Tkalcic,0 -6530,38,33, ,6827,192.png,Saudi,Eleanor Freeman,0 -6531,36,21,Seven Hundred and Eleven,6438,Nan,Saudi,David Corbeil,0 -6532,41,4,Sixty One,3787,Nan,Saudi,Wafiyah Nashwa Wasem,0 -6533,0,40,Two Thousand Seven Hundred and Twenty Two,5373,Nan,Saudi,David Howard,0 -6534,41,7,Three Thousand One Hundred and Eighty One, ,208.png,Saudi,Hasna Bahiyaa Amari,0 -6535,20,16,Ninety Seven,1287,Nan,Saudi,Searlas Grenier,0 -6536,35,30,Eight Thousand and Sixty Nine,8959,Nan,Saudi,Jodie Holden,0 -6537,6,12,Two Hundred and Forty Nine, ,34.png,Saudi,Marcel Achen,0 -6538,29,4, ,5683,147.png,Saudi,Wafiyah Nashwa Wasem,0 -6539,37,24, ,6709,185.png,Saudi,Clarice Blanc,0 -6540,3,15,One Thousand Four Hundred and Fifty Eight,1798,Nan,Saudi,Milenko Tkalcic,0 -6541,0,39,Six Thousand Five Hundred and Thirty Seven, ,0.png,Saudi,Katie Connor,0 -6542,34,41,Two Thousand and Seven,3366,Nan,Saudi,Germa de Geus,0 -6543,2,16, ,4140,14.png,Saudi,Searlas Grenier,0 -6544,18,25,Five Thousand One Hundred and Twenty Nine,8690,Nan,Saudi,Fleurette Coudert,0 -6545,25,28,Four Thousand One Hundred and Eight,8649,Nan,Saudi,Chapin Auger,0 -6546,39,36, ,6745,198.png,Saudi,Thomas Chapman,0 -6547,33,38,Two Thousand Three Hundred and Fifteen, ,168.png,Saudi,Freddie Reid,0 -6548,23,4,Two Hundred and Twenty Two,311,Nan,Saudi,Wafiyah Nashwa Wasem,0 -6549,5,33,Three Thousand and Forty Four,5651,Nan,Saudi,Eleanor Freeman,0 -6550,19,36,Two Thousand Nine Hundred and Eleven,5282,Nan,Saudi,Thomas Chapman,0 -6551,37,34,Three Thousand Six Hundred and Fifteen, ,188.png,Saudi,Holly Martin,0 -6552,30,38,Nine Hundred and Forty Six, ,150.png,Saudi,Freddie Reid,0 -6553,43,2, ,1566,219.png,Saudi,Chi Hsiao,0 -6554,38,8, ,2441,190.png,Saudi,Steffen Krueger,0 -6555,7,40,Six Thousand Nine Hundred and Seventeen,7091,Nan,Saudi,David Howard,0 -6556,23,35,Six Thousand and Fifty Three,9650,Nan,Saudi,Elliot Humphreys,0 -6557,42,14,Eight Hundred and Ninety Nine,5475,Nan,Saudi,Renata Lukic,0 -6558,23,24,Four Thousand One Hundred and Four,8149,Nan,Saudi,Clarice Blanc,0 -6559,14,43,Four Thousand Four Hundred and Seventy Two,5878,Nan,Saudi,Aruna Bekx,0 -6560,16,29,One Thousand Nine Hundred and Thirty Five,4494,Nan,Saudi,Hayden Bruce,0 -6561,20,27,One Hundred and Four,177,Nan,Saudi,Colette Monjeau,0 -6562,16,43,One Thousand Three Hundred and Eighty Eight, ,82.png,Saudi,Aruna Bekx,0 -6563,11,39, ,8518,59.png,Saudi,Katie Connor,0 -6564,26,17, ,2372,130.png,Saudi,Yolette Cloutier,0 -6565,17,41,One Thousand Three Hundred and Sixty,1657,Nan,Saudi,Germa de Geus,0 -6566,25,37, ,6495,128.png,Saudi,Eva Davies,0 -6567,15,42,Four Thousand Four Hundred and Twenty Three,7544,Nan,Saudi,Brady Jamin,0 -6568,28,39, ,6518,143.png,Saudi,Katie Connor,0 -6569,31,26,Four Thousand and Seventy Six,4647,Nan,Saudi,Sidney Lapointe,0 -6570,38,41,Five Thousand Five Hundred and Fifty Eight, ,192.png,Saudi,Germa de Geus,0 -6571,5,16,Three Thousand Nine Hundred and Sixty,7842,Nan,Saudi,Searlas Grenier,0 -6572,7,25,Five Thousand Seven Hundred and Eighty Two,7922,Nan,Saudi,Fleurette Coudert,0 -6573,14,37, ,3136,72.png,Saudi,Eva Davies,0 -6574,27,25, ,1362,136.png,Saudi,Fleurette Coudert,0 -6575,7,35,One Thousand Five Hundred and Thirty Nine,7736,Nan,Saudi,Elliot Humphreys,0 -6576,23,14,Five Hundred and Fifty Three,3591,Nan,Saudi,Renata Lukic,0 -6577,10,7,Two Hundred and Eighty Eight, ,50.png,Saudi,Hasna Bahiyaa Amari,0 -6578,38,27,Three Thousand Five Hundred and Seventy Six, ,192.png,Saudi,Colette Monjeau,0 -6579,0,29, ,808,2.png,Saudi,Hayden Bruce,0 -6580,40,40,Nine Hundred and Eighty Six, ,200.png,Saudi,David Howard,0 -6581,9,39, ,4234,47.png,Saudi,Katie Connor,0 -6582,39,8, ,9822,197.png,Saudi,Steffen Krueger,0 -6583,10,2, ,3423,52.png,Saudi,Chi Hsiao,0 -6584,38,32,Five Hundred and Twenty,6223,Nan,Saudi,Chelsea Watson,0 -6585,23,3, ,6810,117.png,Saudi,Jiang Li Tao,0 -6586,18,41,Three Thousand Nine Hundred and Twenty Three,4480,Nan,Saudi,Germa de Geus,0 -6587,18,5,One Hundred and Sixty Five,886,Nan,Saudi,Fawwaz Zuhayr Mustafa,0 -6588,1,32, ,7899,5.png,Saudi,Chelsea Watson,0 -6589,8,13,Six, ,44.png,Saudi,Petra Kovacic,0 -6590,9,16,Five Thousand and Seven,8857,Nan,Saudi,Searlas Grenier,0 -6591,31,10,Two Thousand Three Hundred and Ninety One,9399,Nan,Saudi,Stephan Schwab,0 -6592,35,5,Three Hundred and Seventy Five,1051,Nan,Saudi,Fawwaz Zuhayr Mustafa,0 -6593,30,5, ,9446,153.png,Saudi,Fawwaz Zuhayr Mustafa,0 -6594,40,17,Three Thousand Seven Hundred and Thirty Three,5481,Nan,Saudi,Yolette Cloutier,0 -6595,26,16,Two Thousand Four Hundred and Forty Eight,2482,Nan,Saudi,Searlas Grenier,0 -6596,13,32, ,9741,66.png,Saudi,Chelsea Watson,0 -6597,1,39, ,3740,9.png,Saudi,Katie Connor,0 -6598,34,31,Six Thousand Five Hundred and Five,9219,Nan,Saudi,Naomi Grant,0 -6599,24,39,Three Thousand and Thirty Five,8846,Nan,Saudi,Katie Connor,0 -6600,6,7,Seven Hundred and Seventy,785,Nan,Saudi,Hasna Bahiyaa Amari,0 -6601,34,6, ,1746,170.png,Saudi,Abdul Qais Khouri,0 -6602,33,10,One Hundred and Six,3830,Nan,Saudi,Stephan Schwab,0 -6603,40,1, ,332,200.png,Saudi,Emily D. Short,0 -6604,13,28,Four Thousand Seven Hundred and Thirty Five,5043,Nan,Saudi,Chapin Auger,0 -6605,31,26,Eight Hundred and Ninety Seven,4745,Nan,Saudi,Sidney Lapointe,0 -6606,18,13,One Hundred and Seventy Three,1064,Nan,Saudi,Petra Kovacic,0 -6607,10,43,Four Hundred and Forty Four,2093,Nan,Saudi,Aruna Bekx,0 -6608,1,7,Two Thousand One Hundred and Forty Nine,4792,Nan,Saudi,Hasna Bahiyaa Amari,0 -6609,38,40,One Thousand Five Hundred,6525,Nan,Saudi,David Howard,0 -6610,25,21,Two Thousand Three Hundred and Eighty One,8208,Nan,Saudi,David Corbeil,0 -6611,33,13, ,6965,166.png,Saudi,Petra Kovacic,0 -6612,38,2, ,6716,190.png,Saudi,Chi Hsiao,0 -6613,40,29,Four Thousand Seven Hundred and Twenty Three, ,203.png,Saudi,Hayden Bruce,0 -6614,33,40,Three Hundred and Fifty Four,2092,Nan,Saudi,David Howard,0 -6615,5,28,Five Thousand Four Hundred and Nineteen,6414,Nan,Saudi,Chapin Auger,0 -6616,43,26,Two Thousand Four Hundred and Twenty Seven, ,217.png,Saudi,Sidney Lapointe,0 -6617,29,12, ,6055,147.png,Saudi,Marcel Achen,0 -6618,10,23,One Thousand One Hundred and Forty Seven,4429,Nan,Saudi,Thรฉrรจse Fortier,0 -6619,37,33,Five Thousand Five Hundred and Two,8904,Nan,Saudi,Eleanor Freeman,0 -6620,1,30,Nine Hundred and Fourteen,1520,Nan,Saudi,Jodie Holden,0 -6621,40,18,One Thousand Nine Hundred and Eighty Six,3876,Nan,Saudi,Edmee Pelletier,0 -6622,14,37,Two Thousand Two Hundred and Eighty Four,2890,Nan,Saudi,Eva Davies,0 -6623,10,15,One Thousand One Hundred and Thirty Nine,3087,Nan,Saudi,Milenko Tkalcic,0 -6624,25,29, ,4347,126.png,Saudi,Hayden Bruce,0 -6625,23,17, ,1859,117.png,Saudi,Yolette Cloutier,0 -6626,16,6, ,3972,84.png,Saudi,Abdul Qais Khouri,0 -6627,36,32,Two Hundred and Sixty Six,1591,Nan,Saudi,Chelsea Watson,0 -6628,34,5,One Thousand Three Hundred and Forty Four,1860,Nan,Saudi,Fawwaz Zuhayr Mustafa,0 -6629,32,13,Seven Thousand Four Hundred and Ninety Seven,7569,Nan,Saudi,Petra Kovacic,0 -6630,42,6,Two Thousand and Fifty Six,4155,Nan,Saudi,Abdul Qais Khouri,0 -6631,31,22,Six Thousand Three Hundred and Fifty Two,9176,Nan,Saudi,Eglantine Forest,0 -6632,12,7,One Thousand Six Hundred and Forty Five,2748,Nan,Saudi,Hasna Bahiyaa Amari,0 -6633,43,9,Eight Hundred and Thirty, ,216.png,Saudi,Maria Kalb,0 -6634,26,38,Nine Hundred and Seventy Seven,5428,Nan,Saudi,Freddie Reid,0 -6635,31,16,Five Thousand Nine Hundred and Eighty,6376,Nan,Saudi,Searlas Grenier,0 -6636,30,13,Four Hundred and Twelve,1273,Nan,Saudi,Petra Kovacic,0 -6637,13,14,One Thousand One Hundred and Ninety Five,1682,Nan,Saudi,Renata Lukic,0 -6638,24,27, ,9474,122.png,Saudi,Colette Monjeau,0 -6639,17,23,Two Thousand Six Hundred and Thirty Seven,6112,Nan,Saudi,Thรฉrรจse Fortier,0 -6640,39,21,Two Hundred and Eighteen, ,198.png,Saudi,David Corbeil,0 -6641,3,23,Two Thousand Two Hundred and Ninety Six,9527,Nan,Saudi,Thรฉrรจse Fortier,0 -6642,43,2,Three Thousand Six Hundred and Forty Six,6616,Nan,Saudi,Chi Hsiao,0 -6643,19,7,Nine Hundred and Twenty Seven, ,99.png,Saudi,Hasna Bahiyaa Amari,0 -6644,38,18,One Thousand Five Hundred and Eighty One,4190,Nan,Saudi,Edmee Pelletier,0 -6645,10,31,Six Hundred and Thirty Five,1837,Nan,Saudi,Naomi Grant,0 -6646,13,24,Two Thousand Nine Hundred and Sixty Six,9585,Nan,Saudi,Clarice Blanc,0 -6647,6,39,Four Thousand Seven Hundred and Ninety,5483,Nan,Saudi,Katie Connor,0 -6648,14,3,Seven Thousand Three Hundred and Thirty Three,9569,Nan,Saudi,Jiang Li Tao,0 -6649,41,11,Three Thousand Seven Hundred and Eighty Eight,4765,Nan,Saudi,Jens Egger,0 -6650,19,43,Two Thousand Seven Hundred,3322,Nan,Saudi,Aruna Bekx,0 -6651,0,9, ,8169,4.png,Saudi,Maria Kalb,0 -6652,14,17,Two Thousand Five Hundred and Seventy Two,8203,Nan,Saudi,Yolette Cloutier,0 -6653,27,21,One Thousand One Hundred and Twenty Five, ,138.png,Saudi,David Corbeil,0 -6654,24,14,Nine Thousand One Hundred and Forty Five,9752,Nan,Saudi,Renata Lukic,0 -6655,25,6,One Thousand Four Hundred and Seventy Eight, ,129.png,Saudi,Abdul Qais Khouri,0 -6656,6,25,Two Thousand One Hundred and Seventy One,8845,Nan,Saudi,Fleurette Coudert,0 -6657,21,41,Four Thousand Two Hundred and Sixty Five,7542,Nan,Saudi,Germa de Geus,0 -6658,43,9,Ninety Five,649,Nan,Saudi,Maria Kalb,0 -6659,2,7, ,4112,10.png,Saudi,Hasna Bahiyaa Amari,0 -6660,2,3,Three Thousand One Hundred and Nineteen,3433,Nan,Saudi,Jiang Li Tao,0 -6661,42,23,One Thousand Three Hundred and Sixty Eight,8382,Nan,Saudi,Thรฉrรจse Fortier,0 -6662,37,4,Three Hundred,2667,Nan,Saudi,Wafiyah Nashwa Wasem,0 -6663,36,27, ,8425,184.png,Saudi,Colette Monjeau,0 -6664,20,10,Two Thousand Seven Hundred and Sixty One,7875,Nan,Saudi,Stephan Schwab,0 -6665,0,22,One Thousand Eight Hundred and Twenty Three,3881,Nan,Saudi,Eglantine Forest,0 -6666,42,12, ,1784,212.png,Saudi,Marcel Achen,0 -6667,38,28,Two Thousand Eight Hundred and Ninety Two,9380,Nan,Saudi,Chapin Auger,0 -6668,40,10, ,6572,201.png,Saudi,Stephan Schwab,0 -6669,27,5,Two Thousand Nine Hundred and Seventy Eight,7510,Nan,Saudi,Fawwaz Zuhayr Mustafa,0 -6670,35,31,Six Thousand and Ninety Seven,8475,Nan,Saudi,Naomi Grant,0 -6671,34,25, ,9469,174.png,Saudi,Fleurette Coudert,0 -6672,27,9,Two Thousand Two Hundred and Seventy Four, ,139.png,Saudi,Maria Kalb,0 -6673,2,25,Two Thousand Six Hundred and Eighty Seven, ,14.png,Saudi,Fleurette Coudert,0 -6674,1,13,Five Thousand Three Hundred and Ten,9508,Nan,Saudi,Petra Kovacic,0 -6675,16,32,Six Hundred and Thirty Two,8474,Nan,Saudi,Chelsea Watson,0 -6676,22,2,One Thousand Eight Hundred and Thirty Five,4561,Nan,Saudi,Chi Hsiao,0 -6677,10,42,One Thousand and Eighty Three,9420,Nan,Saudi,Brady Jamin,0 -6678,2,40,Three Thousand Two Hundred and Ninety One,9903,Nan,Saudi,David Howard,0 -6679,13,24,One Thousand Seven Hundred and Thirteen, ,65.png,Saudi,Clarice Blanc,0 -6680,16,12,Three Thousand Five Hundred and Thirty Three, ,82.png,Saudi,Marcel Achen,0 -6681,9,33, ,3269,47.png,Saudi,Eleanor Freeman,0 -6682,12,35, ,7689,63.png,Saudi,Elliot Humphreys,0 -6683,11,19,One Thousand Five Hundred and Seventy, ,58.png,Saudi,Franรงoise Lapierre,0 -6684,27,32, ,3088,136.png,Saudi,Chelsea Watson,0 -6685,19,26, ,6543,97.png,Saudi,Sidney Lapointe,0 -6686,20,20, ,5851,102.png,Saudi,Seymour Patenaude,0 -6687,27,25,Two Hundred and Thirty Four,1057,Nan,Saudi,Fleurette Coudert,0 -6688,34,1, ,6981,174.png,Saudi,Emily D. Short,0 -6689,5,38,One Thousand Four Hundred and Three,5375,Nan,Saudi,Freddie Reid,0 -6690,5,42,One Thousand Six Hundred and Sixty One,2843,Nan,Saudi,Brady Jamin,0 -6691,20,40, ,7849,100.png,Saudi,David Howard,0 -6692,37,28,One Thousand and Eighty Two,1274,Nan,Saudi,Chapin Auger,0 -6693,29,22,Six Thousand Four Hundred and Fifty Two,8184,Nan,Saudi,Eglantine Forest,0 -6694,4,4,One Thousand Four Hundred and Sixty Three,2178,Nan,Saudi,Wafiyah Nashwa Wasem,0 -6695,3,18, ,4324,19.png,Saudi,Edmee Pelletier,0 -6696,2,38,Two Hundred and Sixty Five,3865,Nan,Saudi,Freddie Reid,0 -6697,38,43, ,1207,192.png,Saudi,Aruna Bekx,0 -6698,9,12,Six Hundred and Seventy Three, ,47.png,Saudi,Marcel Achen,0 -6699,4,12,One Thousand Two Hundred and Eighty Three,3460,Nan,Saudi,Marcel Achen,0 -6700,15,21,Four Thousand Eight Hundred and Twenty Five, ,75.png,Saudi,David Corbeil,0 -6701,15,39,Five Thousand Six Hundred and Foty Seven,5647,76.png,Saudi,Katie Connor,1 -6702,0,9,Seven Thousand Six Hundred and Sxten,7616,3.png,Saudi,Maria Kalb,1 -6703,27,35,Seven Thousand Seven Hundred and Seenty Five,7775,135.png,Saudi,Elliot Humphreys,1 -6704,13,36,Nine Thousand Five Hundred and Ninety On,9591,69.png,Saudi,Thomas Chapman,1 -6705,8,9,Two Thousand Six Hundred and Foty Six,2646,42.png,Saudi,Maria Kalb,1 -6706,32,27,For Thousand Two Hundred and Fifty,4250,163.png,Saudi,Colette Monjeau,1 -6707,8,39,On Hundred and Thirty On,131,43.png,Saudi,Katie Connor,1 -6708,28,19,Thre Thousand Six Hundred and Foty On,3641,142.png,Saudi,Franรงoise Lapierre,1 -6709,4,16,Nine Thousand For Hundred and Eihty Seven,9487,21.png,Saudi,Searlas Grenier,1 -6710,34,26,Six Thousand Two Hundred and Eihty Thre,6283,170.png,Saudi,Sidney Lapointe,1 -6711,22,22,For Thousand For Hundred and Twenty Two,4422,110.png,Saudi,Eglantine Forest,1 -6712,28,16,Twenty Six,26,144.png,Saudi,Searlas Grenier,1 -6713,20,21,Five Thousand and Twenty,5020,100.png,Saudi,David Corbeil,1 -6714,18,12,Nine Thousand On Hundred and Thirty Seven,9137,90.png,Saudi,Marcel Achen,1 -6715,42,4,Six Thousand On Hundred and Thre,6103,212.png,Saudi,Wafiyah Nashwa Wasem,1 -6716,27,29,For Thousand On Hundred and Sixt Two,4162,135.png,Saudi,Hayden Bruce,1 -6717,36,2,Eigt Thousand Nine Hundred and Eihty,8980,180.png,Saudi,Chi Hsiao,1 -6718,33,16,Eigt Hundred and Ten,810,168.png,Saudi,Searlas Grenier,1 -6719,8,41,Two Thousand Six Hundred and Fifty On,2651,40.png,Saudi,Germa de Geus,1 -6720,9,31,Nine Hundred and Eihty Thre,983,48.png,Saudi,Naomi Grant,1 -6721,39,27,Eigt Thousand Thre Hundred and Two,8302,199.png,Saudi,Colette Monjeau,1 -6722,12,7,On Hundred and Eihty Thre,183,60.png,Saudi,Hasna Bahiyaa Amari,1 -6723,27,28,On Thousand Seven Hundred and Thirteen,1713,135.png,Saudi,Chapin Auger,1 -6724,13,21,Seven Thousand Nine Hundred and Thirty On,7931,68.png,Saudi,David Corbeil,1 -6725,39,25,Two Thousand Six Hundred and Fifty On,2651,199.png,Saudi,Fleurette Coudert,1 -6726,40,39,Seven Hundred and Ninety Nine,799,203.png,Saudi,Katie Connor,1 -6727,23,35,Six Thousand Two Hundred and Ninety Six,6296,117.png,Saudi,Elliot Humphreys,1 -6728,18,18,Thre Thousand Nine Hundred and Seenty Six,3976,91.png,Saudi,Edmee Pelletier,1 -6729,5,4,Eigt Thousand and Eihty Six,8086,29.png,Saudi,Wafiyah Nashwa Wasem,1 -6730,20,13,Five Thousand Seven Hundred and Ninety Seven,5797,101.png,Saudi,Petra Kovacic,1 -6731,16,21,Two Thousand Seven Hundred and Eihty Seven,2787,80.png,Saudi,David Corbeil,1 -6732,24,25,Nine Thousand On Hundred and For,9104,124.png,Saudi,Fleurette Coudert,1 -6733,7,14,For Thousand and Seenty Eigt,4078,38.png,Saudi,Renata Lukic,1 -6734,20,23,Six Thousand For Hundred and Fifty For,6454,104.png,Saudi,Thรฉrรจse Fortier,1 -6735,5,16,For Thousand Five Hundred and Six,4506,26.png,Saudi,Searlas Grenier,1 -6736,15,38,Eigt Thousand For Hundred and Thirty Two,8432,77.png,Saudi,Freddie Reid,1 -6737,37,11,Two Thousand Seven Hundred and Sixt Five,2765,186.png,Saudi,Jens Egger,1 -6738,35,1,Six Thousand Seven Hundred and Thirty,6730,175.png,Saudi,Emily D. Short,1 -6739,1,19,On Thousand Thre Hundred and Sxten,1316,7.png,Saudi,Franรงoise Lapierre,1 -6740,26,38,Thre Thousand and Sixt On,3061,133.png,Saudi,Freddie Reid,1 -6741,35,12,On Thousand For Hundred and Seenty Thre,1473,177.png,Saudi,Marcel Achen,1 -6742,36,39,For Thousand Nine Hundred and Foty For,4944,181.png,Saudi,Katie Connor,1 -6743,30,13,Eigt Thousand For Hundred and Thirty Six,8436,153.png,Saudi,Petra Kovacic,1 -6744,23,29,Seven Thousand and Foty Two,7042,119.png,Saudi,Hayden Bruce,1 -6745,16,36,Six Thousand and Five,6005,83.png,Saudi,Thomas Chapman,1 -6746,7,36,Seven Hundred and Fifty Thre,753,38.png,Saudi,Thomas Chapman,1 -6747,38,43,Six Thousand Six Hundred and Eihty Five,6685,192.png,Saudi,Aruna Bekx,1 -6748,3,42,Nine Hundred and Thirty For,934,15.png,Saudi,Brady Jamin,1 -6749,5,3,Nine Thousand Seven Hundred and Twenty Nine,9729,28.png,Saudi,Jiang Li Tao,1 -6750,42,23,Two Hundred and On,201,214.png,Saudi,Thรฉrรจse Fortier,1 -6751,33,30,Nine Thousand On Hundred and Seventeen,9117,166.png,Saudi,Jodie Holden,1 -6752,3,1,Two Thousand Two Hundred and Forteen,2214,17.png,Saudi,Emily D. Short,1 -6753,22,22,Nine Thousand Eigt Hundred and Twenty Seven,9827,110.png,Saudi,Eglantine Forest,1 -6754,36,21,Two Thousand Eigt Hundred and Eihty Nine,2889,184.png,Saudi,David Corbeil,1 -6755,11,0,Nine Thousand Six Hundred and Sixt Thre,9663,59.png,Saudi,Ethel M. Bryson,1 -6756,30,2,Eigt Thousand and Nineten,8019,154.png,Saudi,Chi Hsiao,1 -6757,26,32,Nine Thousand On Hundred and Foty Two,9142,134.png,Saudi,Chelsea Watson,1 -6758,31,12,Seven Thousand Two Hundred and For,7204,158.png,Saudi,Marcel Achen,1 -6759,39,20,Two Thousand On Hundred and Ninety On,2191,199.png,Saudi,Seymour Patenaude,1 -6760,9,15,For Thousand On Hundred and Twenty,4120,47.png,Saudi,Milenko Tkalcic,1 -6761,3,10,Nine Thousand Seven Hundred and Seenty On,9771,15.png,Saudi,Stephan Schwab,1 -6762,0,7,For Thousand On Hundred and Seenty Nine,4179,4.png,Saudi,Hasna Bahiyaa Amari,1 -6763,7,22,Thre Thousand Nine Hundred and Seenty Nine,3979,39.png,Saudi,Eglantine Forest,1 -6764,8,16,Seven Thousand On Hundred and For,7104,42.png,Saudi,Searlas Grenier,1 -6765,5,25,On Thousand For Hundred and For,1404,29.png,Saudi,Fleurette Coudert,1 -6766,41,24,On Thousand Eigt Hundred and Seventeen,1817,205.png,Saudi,Clarice Blanc,1 -6767,3,28,Nine Hundred and Eihty Five,985,17.png,Saudi,Chapin Auger,1 -6768,31,43,Thre Thousand Two Hundred and Seenty Five,3275,156.png,Saudi,Aruna Bekx,1 -6769,23,15,Seven Thousand Five Hundred and Ninety On,7591,116.png,Saudi,Milenko Tkalcic,1 -6770,5,30,For Thousand Six Hundred and Seenty Nine,4679,27.png,Saudi,Jodie Holden,1 -6771,12,0,Thre Thousand For Hundred and Eigt,3408,64.png,Saudi,Ethel M. Bryson,1 -6772,39,21,Eigt Thousand Five Hundred and Sxten,8516,198.png,Saudi,David Corbeil,1 -6773,34,9,On Thousand Two Hundred and Seenty Nine,1279,171.png,Saudi,Maria Kalb,1 -6774,25,13,Five Thousand Five Hundred and Eihty Two,5582,128.png,Saudi,Petra Kovacic,1 -6775,31,28,On Hundred and Sixt Seven,167,156.png,Saudi,Chapin Auger,1 -6776,28,32,Eigt Thousand For Hundred and Fifty Nine,8459,140.png,Saudi,Chelsea Watson,1 -6777,21,7,For Thousand Five Hundred and Fifty Five,4555,105.png,Saudi,Hasna Bahiyaa Amari,1 -6778,41,26,Five Thousand Five Hundred and Eihty Six,5586,205.png,Saudi,Sidney Lapointe,1 -6779,8,0,Thre Thousand Seven Hundred and Eihteen,3718,44.png,Saudi,Ethel M. Bryson,1 -6780,25,3,On Thousand Eigt Hundred and Two,1802,129.png,Saudi,Jiang Li Tao,1 -6781,17,11,Seven Thousand Nine Hundred and Thre,7903,85.png,Saudi,Jens Egger,1 -6782,13,0,Seven Thousand Two Hundred and Foty On,7241,68.png,Saudi,Ethel M. Bryson,1 -6783,14,39,On Thousand Eigt Hundred and Sixt,1860,73.png,Saudi,Katie Connor,1 -6784,28,32,Nine Hundred and Foty Thre,943,140.png,Saudi,Chelsea Watson,1 -6785,12,24,Nine Thousand Thre Hundred and Fifty For,9354,61.png,Saudi,Clarice Blanc,1 -6786,25,41,On Thousand Thre Hundred and Twenty Six,1326,127.png,Saudi,Germa de Geus,1 -6787,32,26,Two Thousand Thre Hundred and Thirty Five,2335,162.png,Saudi,Sidney Lapointe,1 -6788,37,20,Six Thousand and Ninety Eigt,6098,189.png,Saudi,Seymour Patenaude,1 -6789,5,24,Seven Thousand Eigt Hundred and Forteen,7814,29.png,Saudi,Clarice Blanc,1 -6790,10,41,Two Thousand Thre Hundred and Sixt Nine,2369,53.png,Saudi,Germa de Geus,1 -6791,9,35,Six Thousand Eigt Hundred and Thirty Eigt,6838,48.png,Saudi,Elliot Humphreys,1 -6792,23,21,Eigt Thousand Six Hundred and Thirty On,8631,117.png,Saudi,David Corbeil,1 -6793,41,19,Nine Thousand On Hundred and Eleven,9111,208.png,Saudi,Franรงoise Lapierre,1 -6794,8,10,Eigt Thousand Seven Hundred and Foty Seven,8747,42.png,Saudi,Stephan Schwab,1 -6795,17,6,On Thousand For Hundred and Foty Thre,1443,86.png,Saudi,Abdul Qais Khouri,1 -6796,27,41,Two Thousand Thre Hundred,2300,137.png,Saudi,Germa de Geus,1 -6797,10,15,Six Thousand For Hundred and Twenty,6420,53.png,Saudi,Milenko Tkalcic,1 -6798,9,0,Eigt Thousand Eigt Hundred and Fiteen,8815,48.png,Saudi,Ethel M. Bryson,1 -6799,27,31,Two Thousand Seven Hundred and Eihteen,2718,139.png,Saudi,Naomi Grant,1 -6800,19,26,Five Thousand Eigt Hundred and Foty Six,5846,97.png,Saudi,Sidney Lapointe,1 -6801,8,27,Nine Thousand Nine Hundred and Thirty Five,9935,40.png,Saudi,Colette Monjeau,1 -6802,19,29,On Thousand Five Hundred and Eihty Five,1585,99.png,Saudi,Hayden Bruce,1 -6803,4,29,Six Hundred and Twenty Five,625,22.png,Saudi,Hayden Bruce,1 -6804,6,30,Seven Thousand Nine Hundred and Twenty Two,7922,32.png,Saudi,Jodie Holden,1 -6805,5,17,Nine Thousand Thre Hundred and Sixt On,9361,26.png,Saudi,Yolette Cloutier,1 -6806,19,15,Nine Thousand Seven Hundred and Eihteen,9718,97.png,Saudi,Milenko Tkalcic,1 -6807,19,9,Nine Thousand Six Hundred and Eihty Nine,9689,98.png,Saudi,Maria Kalb,1 -6808,19,20,Six Thousand Eigt Hundred and Seven,6807,95.png,Saudi,Seymour Patenaude,1 -6809,18,22,On Thousand and Eihty For,1084,94.png,Saudi,Eglantine Forest,1 -6810,31,40,Seven Thousand and Sixt Six,7066,157.png,Saudi,David Howard,1 -6811,7,11,For Thousand Nine Hundred and Ten,4910,35.png,Saudi,Jens Egger,1 -6812,1,11,Two Thousand Thre Hundred and For,2304,7.png,Saudi,Jens Egger,1 -6813,40,28,Six Thousand On Hundred and Five,6105,200.png,Saudi,Chapin Auger,1 -6814,34,16,Six Thousand For Hundred and Thirty Two,6432,171.png,Saudi,Searlas Grenier,1 -6815,26,24,For Thousand Thre Hundred and Sixt Five,4365,133.png,Saudi,Clarice Blanc,1 -6816,43,20,Nine Hundred and Fifty,950,219.png,Saudi,Seymour Patenaude,1 -6817,2,17,Six Hundred and Seenty Six,676,13.png,Saudi,Yolette Cloutier,1 -6818,36,17,Five Thousand Thre Hundred and Twenty Six,5326,181.png,Saudi,Yolette Cloutier,1 -6819,39,5,For Thousand On Hundred and Seenty For,4174,195.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6820,26,14,Two Thousand On Hundred and Seven,2107,131.png,Saudi,Renata Lukic,1 -6821,22,14,Seven Thousand Seven Hundred and Thirty Six,7736,110.png,Saudi,Renata Lukic,1 -6822,33,13,Two Thousand Five Hundred and Thirty For,2534,169.png,Saudi,Petra Kovacic,1 -6823,41,39,Five Thousand For Hundred and Thirty Eigt,5438,209.png,Saudi,Katie Connor,1 -6824,43,25,Five Hundred and Foty Thre,543,215.png,Saudi,Fleurette Coudert,1 -6825,4,7,Two Thousand Two Hundred and Eihty Six,2286,20.png,Saudi,Hasna Bahiyaa Amari,1 -6826,28,43,Nine Thousand Nine Hundred and Ninety Five,9995,144.png,Saudi,Aruna Bekx,1 -6827,30,7,Six Thousand Nine Hundred and Foty Eigt,6948,150.png,Saudi,Hasna Bahiyaa Amari,1 -6828,28,20,For Hundred and Fifty,450,143.png,Saudi,Seymour Patenaude,1 -6829,19,9,Eigt Thousand Seven Hundred and Eihty Five,8785,98.png,Saudi,Maria Kalb,1 -6830,41,20,For Thousand Six Hundred and Sixt,4660,207.png,Saudi,Seymour Patenaude,1 -6831,18,37,Seven Thousand For Hundred and Ninety Two,7492,91.png,Saudi,Eva Davies,1 -6832,11,27,Two Hundred and Sixt Six,266,56.png,Saudi,Colette Monjeau,1 -6833,33,16,Five Thousand Thre Hundred and Foty On,5341,169.png,Saudi,Searlas Grenier,1 -6834,29,3,Six Thousand and Sixt Nine,6069,147.png,Saudi,Jiang Li Tao,1 -6835,35,0,On Thousand Nine Hundred and Seenty Eigt,1978,179.png,Saudi,Ethel M. Bryson,1 -6836,24,2,Seven Thousand Thre Hundred and Twenty Six,7326,124.png,Saudi,Chi Hsiao,1 -6837,27,6,Eigt Thousand Two Hundred and Thre,8203,137.png,Saudi,Abdul Qais Khouri,1 -6838,32,41,For Thousand Six Hundred and Thirteen,4613,161.png,Saudi,Germa de Geus,1 -6839,26,10,Nine Thousand Six Hundred and Sixt Two,9662,134.png,Saudi,Stephan Schwab,1 -6840,30,28,Six Thousand Six Hundred and Fifty Nine,6659,153.png,Saudi,Chapin Auger,1 -6841,28,12,On Thousand Two Hundred and Eigt,1208,140.png,Saudi,Marcel Achen,1 -6842,4,0,Two Thousand For Hundred and Ninety Five,2495,24.png,Saudi,Ethel M. Bryson,1 -6843,5,29,For Thousand On Hundred and Thirty Five,4135,25.png,Saudi,Hayden Bruce,1 -6844,15,35,Sixt Eigt,68,79.png,Saudi,Elliot Humphreys,1 -6845,35,40,For Thousand Thre Hundred and Eihty Seven,4387,175.png,Saudi,David Howard,1 -6846,25,23,Five Thousand On Hundred and Ten,5110,128.png,Saudi,Thรฉrรจse Fortier,1 -6847,19,4,Nine Thousand On Hundred and On,9101,96.png,Saudi,Wafiyah Nashwa Wasem,1 -6848,13,23,Two Thousand Five Hundred and Twenty Two,2522,68.png,Saudi,Thรฉrรจse Fortier,1 -6849,2,18,Seven Thousand Six Hundred and Foty Thre,7643,12.png,Saudi,Edmee Pelletier,1 -6850,20,36,On Thousand Seven Hundred and Sixt On,1761,103.png,Saudi,Thomas Chapman,1 -6851,39,24,Five Thousand Six Hundred and Seenty Five,5675,199.png,Saudi,Clarice Blanc,1 -6852,5,29,Nine Thousand and Seenty Nine,9079,25.png,Saudi,Hayden Bruce,1 -6853,18,21,Two Thousand For Hundred and Foty Six,2446,94.png,Saudi,David Corbeil,1 -6854,24,39,Two Thousand Two Hundred and Six,2206,123.png,Saudi,Katie Connor,1 -6855,28,43,For Thousand Nine Hundred and Twenty Five,4925,141.png,Saudi,Aruna Bekx,1 -6856,38,28,Six Thousand Eigt Hundred and Twenty Seven,6827,190.png,Saudi,Chapin Auger,1 -6857,10,26,Thre Thousand Nine Hundred and On,3901,54.png,Saudi,Sidney Lapointe,1 -6858,27,33,Nine Thousand On Hundred and Foty Seven,9147,138.png,Saudi,Eleanor Freeman,1 -6859,30,2,Six Thousand Seven Hundred and Foty Seven,6747,151.png,Saudi,Chi Hsiao,1 -6860,33,18,On Thousand Two Hundred and Seenty Six,1276,167.png,Saudi,Edmee Pelletier,1 -6861,2,11,Thre Thousand Eigt Hundred and Thirty Thre,3833,11.png,Saudi,Jens Egger,1 -6862,21,16,Eigt Thousand Thre Hundred and Sixt Thre,8363,109.png,Saudi,Searlas Grenier,1 -6863,42,41,Eigt Thousand Nine Hundred and Foty Thre,8943,214.png,Saudi,Germa de Geus,1 -6864,25,19,On Thousand For Hundred and Eihty Two,1482,127.png,Saudi,Franรงoise Lapierre,1 -6865,15,9,Five Thousand On Hundred and Sixt Six,5166,75.png,Saudi,Maria Kalb,1 -6866,31,27,Six Thousand and Sixt Eigt,6068,158.png,Saudi,Colette Monjeau,1 -6867,13,23,Seven Hundred and Foty Six,746,69.png,Saudi,Thรฉrรจse Fortier,1 -6868,19,41,Seven Thousand Thre Hundred and Foty Six,7346,97.png,Saudi,Germa de Geus,1 -6869,32,38,Six Thousand and Eihty Thre,6083,163.png,Saudi,Freddie Reid,1 -6870,14,19,Five Thousand Five Hundred and Thre,5503,73.png,Saudi,Franรงoise Lapierre,1 -6871,32,13,On Thousand For Hundred and Ninety Five,1495,160.png,Saudi,Petra Kovacic,1 -6872,29,28,Five Thousand Thre Hundred and Seenty Eigt,5378,148.png,Saudi,Chapin Auger,1 -6873,14,7,For Thousand Thre Hundred and Fifty,4350,73.png,Saudi,Hasna Bahiyaa Amari,1 -6874,2,34,On Thousand and Eihty Two,1082,12.png,Saudi,Holly Martin,1 -6875,3,2,Nine Thousand and Eihty Nine,9089,19.png,Saudi,Chi Hsiao,1 -6876,23,8,On Hundred and Foty Eigt,148,119.png,Saudi,Steffen Krueger,1 -6877,23,21,Six Thousand Two Hundred and Sixt Two,6262,116.png,Saudi,David Corbeil,1 -6878,1,15,Nine Hundred and Seenty Thre,973,9.png,Saudi,Milenko Tkalcic,1 -6879,5,7,Seven Thousand On Hundred and Sixt,7160,27.png,Saudi,Hasna Bahiyaa Amari,1 -6880,20,6,Eigt Thousand Nine Hundred and Eihty Two,8982,104.png,Saudi,Abdul Qais Khouri,1 -6881,28,21,Six Thousand For Hundred and Sixt Two,6462,140.png,Saudi,David Corbeil,1 -6882,39,17,Five Hundred and Nine,509,198.png,Saudi,Yolette Cloutier,1 -6883,30,32,For Thousand Nine Hundred and Thre,4903,152.png,Saudi,Chelsea Watson,1 -6884,34,3,Seven Thousand Thre Hundred and Fifty Seven,7357,172.png,Saudi,Jiang Li Tao,1 -6885,0,7,On Thousand Two Hundred and Sixt For,1264,3.png,Saudi,Hasna Bahiyaa Amari,1 -6886,19,29,For Thousand On Hundred and Eihty Thre,4183,97.png,Saudi,Hayden Bruce,1 -6887,40,2,Six Thousand On Hundred and Ninety Two,6192,202.png,Saudi,Chi Hsiao,1 -6888,24,6,For Thousand Two Hundred and Fifty Eigt,4258,120.png,Saudi,Abdul Qais Khouri,1 -6889,10,8,Eigt Thousand Six Hundred and Eihty Nine,8689,54.png,Saudi,Steffen Krueger,1 -6890,3,31,Eigt Thousand Five Hundred and Twenty On,8521,17.png,Saudi,Naomi Grant,1 -6891,0,9,Seven Thousand On Hundred and Eihty Five,7185,2.png,Saudi,Maria Kalb,1 -6892,30,33,Five Thousand and Sixt On,5061,151.png,Saudi,Eleanor Freeman,1 -6893,6,9,Eigt Thousand and Fifty Five,8055,34.png,Saudi,Maria Kalb,1 -6894,12,6,Nine Thousand Eigt Hundred and Ninety Seven,9897,60.png,Saudi,Abdul Qais Khouri,1 -6895,21,20,Seven Thousand Eigt Hundred and Seventeen,7817,106.png,Saudi,Seymour Patenaude,1 -6896,21,22,Nine Thousand Six Hundred and Ninety For,9694,107.png,Saudi,Eglantine Forest,1 -6897,33,9,Five Thousand Two Hundred and Seenty Nine,5279,167.png,Saudi,Maria Kalb,1 -6898,42,16,Six Thousand On Hundred and Ninety On,6191,212.png,Saudi,Searlas Grenier,1 -6899,41,7,Eigt Thousand and Fifty On,8051,205.png,Saudi,Hasna Bahiyaa Amari,1 -6900,28,30,For Thousand Thre Hundred and Thirty,4330,140.png,Saudi,Jodie Holden,1 -6901,34,30,Thre Thousand Thre Hundred and Twenty On,3321,173.png,Saudi,Jodie Holden,1 -6902,40,37,Eigt Thousand Five Hundred and Twenty Two,8522,204.png,Saudi,Eva Davies,1 -6903,25,25,Nine Thousand Nine Hundred and Ninety Six,9996,129.png,Saudi,Fleurette Coudert,1 -6904,36,16,Seven Hundred and Sixt Six,766,183.png,Saudi,Searlas Grenier,1 -6905,33,12,Seven Hundred and Forteen,714,169.png,Saudi,Marcel Achen,1 -6906,15,42,Seven Thousand For Hundred and Thirty Seven,7437,75.png,Saudi,Brady Jamin,1 -6907,1,32,Thre Thousand Nine Hundred and Sixt Six,3966,9.png,Saudi,Chelsea Watson,1 -6908,34,25,For Thousand Nine Hundred and Thirty Thre,4933,172.png,Saudi,Fleurette Coudert,1 -6909,16,32,Five Thousand Nine Hundred and Eigt,5908,83.png,Saudi,Chelsea Watson,1 -6910,22,43,Five Thousand Five Hundred and Eihty Seven,5587,114.png,Saudi,Aruna Bekx,1 -6911,39,4,Five Thousand Nine Hundred and Foty Seven,5947,196.png,Saudi,Wafiyah Nashwa Wasem,1 -6912,12,27,Six Hundred and Foty For,644,63.png,Saudi,Colette Monjeau,1 -6913,2,40,Nine Hundred and Sixt Six,966,14.png,Saudi,David Howard,1 -6914,2,38,Five Thousand Eigt Hundred and Foty Six,5846,11.png,Saudi,Freddie Reid,1 -6915,29,22,Seenty Two,72,145.png,Saudi,Eglantine Forest,1 -6916,39,34,Seven Hundred and Fifty Thre,753,198.png,Saudi,Holly Martin,1 -6917,5,12,Nine Thousand For Hundred and Sixt On,9461,25.png,Saudi,Marcel Achen,1 -6918,9,8,For Hundred and Eihty Seven,487,46.png,Saudi,Steffen Krueger,1 -6919,27,33,On Hundred and Ten,110,138.png,Saudi,Eleanor Freeman,1 -6920,10,40,Seven Thousand Five Hundred and Ninety Nine,7599,52.png,Saudi,David Howard,1 -6921,14,31,On Thousand Five Hundred and Fifty Thre,1553,72.png,Saudi,Naomi Grant,1 -6922,29,7,Two Thousand On Hundred and Sixt Six,2166,148.png,Saudi,Hasna Bahiyaa Amari,1 -6923,37,30,Six Thousand and Sixt Nine,6069,185.png,Saudi,Jodie Holden,1 -6924,10,35,On Thousand For Hundred and Fifty Seven,1457,51.png,Saudi,Elliot Humphreys,1 -6925,1,16,Thre Thousand Nine Hundred and Thirty Two,3932,5.png,Saudi,Searlas Grenier,1 -6926,8,38,Two Thousand On Hundred and Five,2105,40.png,Saudi,Freddie Reid,1 -6927,15,15,Nine Thousand On Hundred and Eihty Eigt,9188,75.png,Saudi,Milenko Tkalcic,1 -6928,10,9,On Thousand Five Hundred and Fifty Nine,1559,53.png,Saudi,Maria Kalb,1 -6929,6,36,Thre Thousand Five Hundred and For,3504,32.png,Saudi,Thomas Chapman,1 -6930,17,32,Thre Thousand For Hundred and Fifty Two,3452,85.png,Saudi,Chelsea Watson,1 -6931,1,38,Nine Thousand Two Hundred and Foty Seven,9247,9.png,Saudi,Freddie Reid,1 -6932,40,27,Thre Thousand For Hundred and Eihty Five,3485,203.png,Saudi,Colette Monjeau,1 -6933,19,40,Two Thousand and Foty Thre,2043,99.png,Saudi,David Howard,1 -6934,8,20,Thre Hundred and Five,305,41.png,Saudi,Seymour Patenaude,1 -6935,29,43,For Thousand and Sixt On,4061,149.png,Saudi,Aruna Bekx,1 -6936,41,1,Two Thousand Two Hundred and Thirty Seven,2237,207.png,Saudi,Emily D. Short,1 -6937,25,7,Seven Thousand For Hundred and Seven,7407,127.png,Saudi,Hasna Bahiyaa Amari,1 -6938,23,4,On Thousand For Hundred and Fifty Seven,1457,116.png,Saudi,Wafiyah Nashwa Wasem,1 -6939,41,20,Two Thousand Six Hundred and Seenty Two,2672,205.png,Saudi,Seymour Patenaude,1 -6940,27,16,Five Thousand Two Hundred and Ninety Thre,5293,137.png,Saudi,Searlas Grenier,1 -6941,1,37,Eigt Thousand and Twenty Nine,8029,8.png,Saudi,Eva Davies,1 -6942,20,40,Seven Thousand Seven Hundred and Thirteen,7713,101.png,Saudi,David Howard,1 -6943,9,26,Five Thousand Six Hundred and Ninety Thre,5693,45.png,Saudi,Sidney Lapointe,1 -6944,41,5,Six Thousand Five Hundred and Fifty On,6551,208.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6945,16,29,Two Thousand For Hundred and Ninety Two,2492,80.png,Saudi,Hayden Bruce,1 -6946,28,10,Two Hundred and Foty Thre,243,140.png,Saudi,Stephan Schwab,1 -6947,5,18,Two Thousand Thre Hundred and Eleven,2311,27.png,Saudi,Edmee Pelletier,1 -6948,5,27,Seven Thousand Eigt Hundred and Sixt On,7861,26.png,Saudi,Colette Monjeau,1 -6949,20,12,Eigt Thousand Five Hundred and Seenty Nine,8579,102.png,Saudi,Marcel Achen,1 -6950,12,9,For Thousand Thre Hundred and Seven,4307,63.png,Saudi,Maria Kalb,1 -6951,42,30,Two Thousand Eigt Hundred and Foty Thre,2843,212.png,Saudi,Jodie Holden,1 -6952,21,15,Two Thousand Seven Hundred and Twenty For,2724,107.png,Saudi,Milenko Tkalcic,1 -6953,27,32,Nine Hundred and Fifty Thre,953,136.png,Saudi,Chelsea Watson,1 -6954,36,5,Six Thousand Nine Hundred and Thirty Six,6936,181.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6955,30,39,Thre Thousand Two Hundred and Fifty Eigt,3258,151.png,Saudi,Katie Connor,1 -6956,38,21,Six Thousand and Ninety Nine,6099,192.png,Saudi,David Corbeil,1 -6957,42,17,On Thousand Seven Hundred and Foty On,1741,214.png,Saudi,Yolette Cloutier,1 -6958,19,23,Two Hundred and Seenty Six,276,98.png,Saudi,Thรฉrรจse Fortier,1 -6959,9,21,Nine Thousand Eigt Hundred and Fifty Thre,9853,49.png,Saudi,David Corbeil,1 -6960,31,31,On Thousand For Hundred and Six,1406,157.png,Saudi,Naomi Grant,1 -6961,12,4,Nine Thousand Eigt Hundred and Ninety Eigt,9898,62.png,Saudi,Wafiyah Nashwa Wasem,1 -6962,40,21,On Thousand Nine Hundred and Sxten,1916,201.png,Saudi,David Corbeil,1 -6963,37,34,Eigt Thousand Six Hundred and Fifty Two,8652,188.png,Saudi,Holly Martin,1 -6964,28,21,Seven Thousand Eigt Hundred and Sixt On,7861,142.png,Saudi,David Corbeil,1 -6965,24,31,For Thousand On Hundred and Foty Thre,4143,120.png,Saudi,Naomi Grant,1 -6966,26,43,On Thousand Two Hundred and Foty Seven,1247,131.png,Saudi,Aruna Bekx,1 -6967,13,3,Five Thousand Six Hundred and Twenty Thre,5623,66.png,Saudi,Jiang Li Tao,1 -6968,40,16,For Thousand Eigt Hundred and Thre,4803,203.png,Saudi,Searlas Grenier,1 -6969,4,25,Seven Hundred and Seenty On,771,22.png,Saudi,Fleurette Coudert,1 -6970,2,12,Eigt Thousand and Twenty Five,8025,11.png,Saudi,Marcel Achen,1 -6971,29,24,Two Hundred and On,201,149.png,Saudi,Clarice Blanc,1 -6972,40,19,Five Thousand On Hundred and Eleven,5111,200.png,Saudi,Franรงoise Lapierre,1 -6973,24,39,Seven Thousand On Hundred and Foty Nine,7149,124.png,Saudi,Katie Connor,1 -6974,27,9,On Thousand Eigt Hundred and Ninety,1890,137.png,Saudi,Maria Kalb,1 -6975,28,7,Nine Thousand For Hundred and Fifty Thre,9453,141.png,Saudi,Hasna Bahiyaa Amari,1 -6976,38,9,Thre Hundred and Eihty Two,382,193.png,Saudi,Maria Kalb,1 -6977,32,5,Thre Thousand and Seenty Five,3075,162.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6978,34,5,Nine Thousand Thre Hundred and Ten,9310,172.png,Saudi,Fawwaz Zuhayr Mustafa,1 -6979,19,10,For Thousand and Fifty Nine,4059,97.png,Saudi,Stephan Schwab,1 -6980,18,26,Eigt Thousand Six Hundred and Seenty On,8671,92.png,Saudi,Sidney Lapointe,1 -6981,25,9,Five Thousand Two Hundred and Thirty Six,5236,129.png,Saudi,Maria Kalb,1 -6982,5,17,On Thousand Nine Hundred and Eihty Seven,1987,26.png,Saudi,Yolette Cloutier,1 -6983,6,24,For Thousand Nine Hundred and Ninety,4990,30.png,Saudi,Clarice Blanc,1 -6984,19,24,Seven Thousand Eigt Hundred and Fifty Eigt,7858,99.png,Saudi,Clarice Blanc,1 -6985,34,1,On Thousand For Hundred and Thirty,1430,173.png,Saudi,Emily D. Short,1 -6986,16,25,Thre Thousand Nine Hundred and Thirty Six,3936,82.png,Saudi,Fleurette Coudert,1 -6987,21,39,For Thousand Two Hundred and Thirty Six,4236,106.png,Saudi,Katie Connor,1 -6988,1,36,For Thousand Six Hundred and Eihty Six,4686,5.png,Saudi,Thomas Chapman,1 -6989,41,0,Five Thousand and Thirteen,5013,209.png,Saudi,Ethel M. Bryson,1 -6990,2,32,Two Thousand For Hundred and Ten,2410,12.png,Saudi,Chelsea Watson,1 -6991,6,26,Thre Thousand Eigt Hundred and Ninety Eigt,3898,32.png,Saudi,Sidney Lapointe,1 -6992,10,38,Six Thousand For Hundred and Thirty Thre,6433,50.png,Saudi,Freddie Reid,1 -6993,6,19,On Thousand Two Hundred and Fifty Eigt,1258,32.png,Saudi,Franรงoise Lapierre,1 -6994,17,20,For Thousand Eigt Hundred and Eihty Five,4885,85.png,Saudi,Seymour Patenaude,1 -6995,38,36,Thre Thousand On Hundred and Twenty On,3121,190.png,Saudi,Thomas Chapman,1 -6996,34,35,Two Thousand Seven Hundred and Twenty,2720,173.png,Saudi,Elliot Humphreys,1 -6997,40,25,Eigt Thousand Six Hundred and Thirty Two,8632,202.png,Saudi,Fleurette Coudert,1 -6998,31,27,Thre Thousand Nine Hundred and Twenty Eigt,3928,155.png,Saudi,Colette Monjeau,1 -6999,11,40,Six Thousand Seven Hundred and Ninety For,6794,58.png,Saudi,David Howard,1 -7000,0,26,Nine Thousand Thre Hundred and Eigt,9308,1.png,Saudi,Sidney Lapointe,1 -7001,7,35,Eight Thousand Eight Hundred and Eighty Eight,8888,38.png,Attejari,Elliot Humphreys,1 -7002,8,43,Two Thousand One Hundred and Six,2106,44.png,Attejari,Aruna Bekx,1 -7003,6,9,Eight Thousand Three Hundred and Ninety Four,8394,31.png,Attejari,Maria Kalb,1 -7004,13,14,Five Thousand Six Hundred and Seventy One,5671,66.png,Attejari,Renata Lukic,1 -7005,43,6,One Thousand Eight Hundred and Twenty Five,1825,215.png,Attejari,Abdul Qais Khouri,1 -7006,7,14,One Thousand One Hundred and Forty Nine,1149,35.png,Attejari,Renata Lukic,1 -7007,38,24,Four Thousand One Hundred and Thirteen,4113,194.png,Attejari,Clarice Blanc,1 -7008,27,16,Two Hundred and Seven,207,136.png,Attejari,Searlas Grenier,1 -7009,34,23,Two Thousand Nine Hundred and Fifty Three,2953,173.png,Attejari,Thรฉrรจse Fortier,1 -7010,23,43,Eight Thousand Nine Hundred and Forty Nine,8949,116.png,Attejari,Aruna Bekx,1 -7011,39,28,Six Thousand Two Hundred and Ninety Eight,6298,195.png,Attejari,Chapin Auger,1 -7012,42,40,Thirty Eight,38,211.png,Attejari,David Howard,1 -7013,9,27,Five Thousand Six Hundred and Eighty,5680,46.png,Attejari,Colette Monjeau,1 -7014,25,5,Eight Thousand Eight Hundred and Sixty,8860,129.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7015,3,9,One Thousand Three Hundred and Fifty,1350,18.png,Attejari,Maria Kalb,1 -7016,23,1,Four Thousand Seven Hundred and Thirty Four,4734,116.png,Attejari,Emily D. Short,1 -7017,37,21,Eight Thousand Seven Hundred and Twenty Four,8724,189.png,Attejari,David Corbeil,1 -7018,27,20,Five Thousand Six Hundred and Twelve,5612,138.png,Attejari,Seymour Patenaude,1 -7019,27,1,Four Thousand Nine Hundred and Fifty Four,4954,135.png,Attejari,Emily D. Short,1 -7020,9,18,Seven,7,46.png,Attejari,Edmee Pelletier,1 -7021,7,42,Nine Thousand One Hundred and Seventy Five,9175,38.png,Attejari,Brady Jamin,1 -7022,8,17,Four Thousand Seven Hundred and Forty Four,4744,42.png,Attejari,Yolette Cloutier,1 -7023,14,20,Five Thousand Four Hundred and Thirty,5430,73.png,Attejari,Seymour Patenaude,1 -7024,11,2,Four Thousand Seven Hundred and Twenty One,4721,55.png,Attejari,Chi Hsiao,1 -7025,3,24,One Thousand Nine Hundred and Thirty Two,1932,15.png,Attejari,Clarice Blanc,1 -7026,24,0,Two Hundred and Thirty Nine,239,122.png,Attejari,Ethel M. Bryson,1 -7027,32,27,Seven Thousand One Hundred and Eight,7108,161.png,Attejari,Colette Monjeau,1 -7028,31,37,Three Thousand and Ten,3010,158.png,Attejari,Eva Davies,1 -7029,18,14,Five Thousand Nine Hundred and Seventy Five,5975,91.png,Attejari,Renata Lukic,1 -7030,2,9,Three Thousand Eight Hundred and Ninety,3890,14.png,Attejari,Maria Kalb,1 -7031,22,11,Four Hundred and Seven,407,110.png,Attejari,Jens Egger,1 -7032,1,13,Two Thousand One Hundred and Sixty Seven,2167,7.png,Attejari,Petra Kovacic,1 -7033,30,19,Two Thousand Six Hundred and Fifty Nine,2659,151.png,Attejari,Franรงoise Lapierre,1 -7034,23,41,Five Thousand Two Hundred and Sixty Three,5263,119.png,Attejari,Germa de Geus,1 -7035,19,27,One Thousand Five Hundred and Fifty Four,1554,95.png,Attejari,Colette Monjeau,1 -7036,2,36,One Thousand and Seventy Eight,1078,12.png,Attejari,Thomas Chapman,1 -7037,36,34,Eight Thousand Eight Hundred and Sixty,8860,182.png,Attejari,Holly Martin,1 -7038,35,15,Six Hundred and Fifty Nine,659,178.png,Attejari,Milenko Tkalcic,1 -7039,25,25,Four Thousand and Thirty Five,4035,125.png,Attejari,Fleurette Coudert,1 -7040,39,28,Five Hundred and Seventy Two,572,199.png,Attejari,Chapin Auger,1 -7041,27,13,Two Thousand Six Hundred and Ninety Two,2692,138.png,Attejari,Petra Kovacic,1 -7042,1,33,Six Thousand One Hundred and Twenty Six,6126,5.png,Attejari,Eleanor Freeman,1 -7043,9,24,Four Thousand Four Hundred and Twenty Four,4424,49.png,Attejari,Clarice Blanc,1 -7044,35,29,Seven Thousand Six Hundred and Sixty Three,7663,177.png,Attejari,Hayden Bruce,1 -7045,42,35,Three Thousand and Fifteen,3015,210.png,Attejari,Elliot Humphreys,1 -7046,33,41,One Thousand Three Hundred and Fifty Three,1353,167.png,Attejari,Germa de Geus,1 -7047,36,42,Six Thousand Four Hundred and Sixty One,6461,183.png,Attejari,Brady Jamin,1 -7048,7,9,Two Thousand Five Hundred and Fourteen,2514,37.png,Attejari,Maria Kalb,1 -7049,7,34,Four Thousand One Hundred and Fifty Six,4156,37.png,Attejari,Holly Martin,1 -7050,17,12,Five Hundred and Twenty One,521,88.png,Attejari,Marcel Achen,1 -7051,38,10,Three Thousand Six Hundred and Fifty,3650,193.png,Attejari,Stephan Schwab,1 -7052,35,11,Four Thousand Four Hundred and Twelve,4412,177.png,Attejari,Jens Egger,1 -7053,3,25,Two Thousand and Seven,2007,17.png,Attejari,Fleurette Coudert,1 -7054,30,8,One Thousand One Hundred and Ten,1110,151.png,Attejari,Steffen Krueger,1 -7055,15,39,Three Thousand Nine Hundred and Ninety,3990,75.png,Attejari,Katie Connor,1 -7056,0,42,Two Thousand and Eleven,2011,1.png,Attejari,Brady Jamin,1 -7057,26,24,One Thousand Six Hundred and Sixty Nine,1669,131.png,Attejari,Clarice Blanc,1 -7058,17,43,Five Thousand and One,5001,87.png,Attejari,Aruna Bekx,1 -7059,19,31,Five Thousand One Hundred and One,5101,99.png,Attejari,Naomi Grant,1 -7060,38,33,Nine Hundred and Ninety Eight,998,191.png,Attejari,Eleanor Freeman,1 -7061,2,39,One Thousand Six Hundred and Thirty Four,1634,11.png,Attejari,Katie Connor,1 -7062,13,3,Three Thousand and Thirty Four,3034,66.png,Attejari,Jiang Li Tao,1 -7063,40,14,Three Thousand and Forty Three,3043,200.png,Attejari,Renata Lukic,1 -7064,13,3,Forty Three,43,67.png,Attejari,Jiang Li Tao,1 -7065,21,3,One Thousand Seven Hundred and Fifteen,1715,106.png,Attejari,Jiang Li Tao,1 -7066,43,39,Six Thousand Six Hundred and Sixty Two,6662,219.png,Attejari,Katie Connor,1 -7067,8,31,Seven Thousand Two Hundred and Seventy Three,7273,40.png,Attejari,Naomi Grant,1 -7068,16,36,Two Thousand and Thirty Nine,2039,81.png,Attejari,Thomas Chapman,1 -7069,3,42,Two Thousand Three Hundred and Fifty One,2351,17.png,Attejari,Brady Jamin,1 -7070,35,10,Seven Thousand Seven Hundred and Ninety Six,7796,177.png,Attejari,Stephan Schwab,1 -7071,8,18,Five Hundred and Sixty Four,564,42.png,Attejari,Edmee Pelletier,1 -7072,34,19,Three Thousand Four Hundred and Eighty Five,3485,174.png,Attejari,Franรงoise Lapierre,1 -7073,5,6,Four Thousand Seven Hundred and Forty One,4741,29.png,Attejari,Abdul Qais Khouri,1 -7074,10,18,Seven Thousand Eight Hundred and Twenty Five,7825,51.png,Attejari,Edmee Pelletier,1 -7075,35,10,Four Thousand Three Hundred and Sixty Three,4363,177.png,Attejari,Stephan Schwab,1 -7076,9,17,Eight Thousand Four Hundred and Nine,8409,46.png,Attejari,Yolette Cloutier,1 -7077,32,33,Three Thousand Eight Hundred and Forty Six,3846,161.png,Attejari,Eleanor Freeman,1 -7078,9,24,Three Thousand and Ninety,3090,48.png,Attejari,Clarice Blanc,1 -7079,5,3,Five Thousand Nine Hundred and Sixty,5960,26.png,Attejari,Jiang Li Tao,1 -7080,6,3,Five Thousand Six Hundred and Sixty Six,5666,34.png,Attejari,Jiang Li Tao,1 -7081,5,27,One Thousand Six Hundred and Forty Four,1644,28.png,Attejari,Colette Monjeau,1 -7082,19,23,Eight Thousand Two Hundred and Thirty Two,8232,98.png,Attejari,Thรฉrรจse Fortier,1 -7083,31,18,Five Thousand Four Hundred and Eighty,5480,156.png,Attejari,Edmee Pelletier,1 -7084,39,41,Two Thousand Six Hundred and Thirty Nine,2639,196.png,Attejari,Germa de Geus,1 -7085,25,25,Seven Thousand Five Hundred and Seven,7507,127.png,Attejari,Fleurette Coudert,1 -7086,36,33,One Thousand Six Hundred and Forty One,1641,183.png,Attejari,Eleanor Freeman,1 -7087,29,8,Nine Thousand Two Hundred and Thirty Seven,9237,145.png,Attejari,Steffen Krueger,1 -7088,35,13,One Thousand Nine Hundred and Eighty Seven,1987,178.png,Attejari,Petra Kovacic,1 -7089,16,39,Two Thousand Six Hundred and Ninety,2690,80.png,Attejari,Katie Connor,1 -7090,36,40,Nine Thousand Seven Hundred and Sixty Four,9764,180.png,Attejari,David Howard,1 -7091,39,24,One Thousand Seven Hundred and Eighty Seven,1787,198.png,Attejari,Clarice Blanc,1 -7092,39,43,Two Thousand Six Hundred and Ninety Nine,2699,197.png,Attejari,Aruna Bekx,1 -7093,13,27,Nine Thousand Five Hundred and Ninety Six,9596,69.png,Attejari,Colette Monjeau,1 -7094,39,2,Six Thousand Four Hundred and Seventy Two,6472,197.png,Attejari,Chi Hsiao,1 -7095,34,13,Three Thousand Three Hundred and Eighty Nine,3389,170.png,Attejari,Petra Kovacic,1 -7096,21,39,Four Thousand and Six,4006,106.png,Attejari,Katie Connor,1 -7097,34,6,Eight Thousand Seven Hundred and Seventy Eight,8778,173.png,Attejari,Abdul Qais Khouri,1 -7098,38,9,Two Thousand Five Hundred and Thirty Six,2536,192.png,Attejari,Maria Kalb,1 -7099,8,26,Six Thousand Five Hundred and Sixty Three,6563,43.png,Attejari,Sidney Lapointe,1 -7100,15,30,Seven Thousand Nine Hundred and Twenty,7920,79.png,Attejari,Jodie Holden,1 -7101,41,9,Eight Thousand Six Hundred and Eighty,8680,207.png,Attejari,Maria Kalb,1 -7102,33,16,Four Thousand Two Hundred and Seventy Two,4272,165.png,Attejari,Searlas Grenier,1 -7103,34,7,Eight Thousand Four Hundred and Seventy One,8471,172.png,Attejari,Hasna Bahiyaa Amari,1 -7104,37,34,Seven Thousand Eight Hundred and Seventy Seven,7877,185.png,Attejari,Holly Martin,1 -7105,37,13,Six Thousand Nine Hundred and Twenty Four,6924,189.png,Attejari,Petra Kovacic,1 -7106,33,19,Two Thousand Five Hundred and Forty Two,2542,167.png,Attejari,Franรงoise Lapierre,1 -7107,0,25,Four Thousand Nine Hundred and One,4901,4.png,Attejari,Fleurette Coudert,1 -7108,39,38,Seven Thousand Seven Hundred and Eighty,7780,199.png,Attejari,Freddie Reid,1 -7109,28,14,Two Thousand and Forty Four,2044,140.png,Attejari,Renata Lukic,1 -7110,17,24,Nine Thousand Three Hundred and Nineteen,9319,88.png,Attejari,Clarice Blanc,1 -7111,24,39,Nine Thousand Six Hundred and Seventy Nine,9679,121.png,Attejari,Katie Connor,1 -7112,21,9,Six Thousand One Hundred and Sixty Four,6164,107.png,Attejari,Maria Kalb,1 -7113,15,42,Nine Thousand Five Hundred and Twenty Four,9524,75.png,Attejari,Brady Jamin,1 -7114,1,30,Four Thousand Two Hundred and Eighty One,4281,5.png,Attejari,Jodie Holden,1 -7115,12,9,Seven Thousand Two Hundred and Forty Two,7242,62.png,Attejari,Maria Kalb,1 -7116,28,42,Four Thousand Six Hundred and Nineteen,4619,143.png,Attejari,Brady Jamin,1 -7117,19,26,Eight Thousand Nine Hundred and Ninety One,8991,95.png,Attejari,Sidney Lapointe,1 -7118,18,32,Seven Thousand Four Hundred and Two,7402,94.png,Attejari,Chelsea Watson,1 -7119,20,5,Eight Thousand One Hundred and Thirty,8130,101.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7120,9,35,Nine Thousand One Hundred and Sixteen,9116,47.png,Attejari,Elliot Humphreys,1 -7121,0,22,One Thousand Eight Hundred and Thirty Eight,1838,4.png,Attejari,Eglantine Forest,1 -7122,28,37,Eight Thousand Eight Hundred and Sixteen,8816,143.png,Attejari,Eva Davies,1 -7123,22,6,Six Thousand Six Hundred and Seven,6607,114.png,Attejari,Abdul Qais Khouri,1 -7124,1,24,Six Thousand Seven Hundred and Three,6703,7.png,Attejari,Clarice Blanc,1 -7125,37,7,Four Thousand and Eighty Seven,4087,189.png,Attejari,Hasna Bahiyaa Amari,1 -7126,30,16,Two Hundred and Six,206,152.png,Attejari,Searlas Grenier,1 -7127,30,0,One Thousand Two Hundred and Seventy Nine,1279,152.png,Attejari,Ethel M. Bryson,1 -7128,34,5,Seven Thousand and Nineteen,7019,172.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7129,20,20,Four Thousand Six Hundred and Twenty Three,4623,100.png,Attejari,Seymour Patenaude,1 -7130,32,33,One Thousand Two Hundred and Ninety Three,1293,161.png,Attejari,Eleanor Freeman,1 -7131,25,36,Five Thousand Four Hundred and Twenty Four,5424,126.png,Attejari,Thomas Chapman,1 -7132,27,6,Six Thousand Four Hundred and Six,6406,139.png,Attejari,Abdul Qais Khouri,1 -7133,9,27,One Thousand and Seventy Two,1072,46.png,Attejari,Colette Monjeau,1 -7134,5,29,Eight Thousand Three Hundred and Twenty Eight,8328,25.png,Attejari,Hayden Bruce,1 -7135,41,14,Eight Thousand Five Hundred and Four,8504,207.png,Attejari,Renata Lukic,1 -7136,16,34,Five Hundred and Sixty Five,565,81.png,Attejari,Holly Martin,1 -7137,26,2,Four Thousand Three Hundred and Sixty Six,4366,133.png,Attejari,Chi Hsiao,1 -7138,32,27,Four Thousand Three Hundred and Thirty Seven,4337,162.png,Attejari,Colette Monjeau,1 -7139,9,8,Two Thousand Seven Hundred and Thirty Six,2736,45.png,Attejari,Steffen Krueger,1 -7140,40,23,Four Thousand Three Hundred and Eleven,4311,200.png,Attejari,Thรฉrรจse Fortier,1 -7141,23,39,Three Thousand Five Hundred and Ninety Three,3593,115.png,Attejari,Katie Connor,1 -7142,27,16,Three Thousand Five Hundred and Ninety,3590,138.png,Attejari,Searlas Grenier,1 -7143,13,14,Nine Thousand Five Hundred and Fifty Seven,9557,65.png,Attejari,Renata Lukic,1 -7144,6,32,Three Thousand and Thirty Nine,3039,31.png,Attejari,Chelsea Watson,1 -7145,34,3,Three Thousand Three Hundred and Twelve,3312,172.png,Attejari,Jiang Li Tao,1 -7146,11,6,Five Hundred and Thirty Five,535,59.png,Attejari,Abdul Qais Khouri,1 -7147,15,42,Three Thousand Six Hundred and Sixty Three,3663,79.png,Attejari,Brady Jamin,1 -7148,24,24,Four Thousand Five Hundred and Ninety Six,4596,124.png,Attejari,Clarice Blanc,1 -7149,33,4,Eight Thousand Four Hundred and Twenty One,8421,169.png,Attejari,Wafiyah Nashwa Wasem,1 -7150,27,8,One Thousand Nine Hundred and Eighteen,1918,136.png,Attejari,Steffen Krueger,1 -7151,7,28,Four Thousand and Ninety Nine,4099,35.png,Attejari,Chapin Auger,1 -7152,23,36,One Hundred and Sixteen,116,116.png,Attejari,Thomas Chapman,1 -7153,0,27,Three Thousand Seven Hundred and Ninety Five,3795,2.png,Attejari,Colette Monjeau,1 -7154,19,13,Nine Hundred and Thirty One,931,97.png,Attejari,Petra Kovacic,1 -7155,13,16,One Hundred and Fifty Two,152,65.png,Attejari,Searlas Grenier,1 -7156,32,25,Seven Thousand Nine Hundred and Ninety Six,7996,161.png,Attejari,Fleurette Coudert,1 -7157,36,27,Eight Thousand and Seventy Eight,8078,180.png,Attejari,Colette Monjeau,1 -7158,24,30,Five Thousand and Sixty Eight,5068,121.png,Attejari,Jodie Holden,1 -7159,42,31,Nine Thousand Two Hundred and Twenty Three,9223,211.png,Attejari,Naomi Grant,1 -7160,38,27,Three Thousand Four Hundred and Seventy Three,3473,191.png,Attejari,Colette Monjeau,1 -7161,20,43,Forty Six,46,104.png,Attejari,Aruna Bekx,1 -7162,16,20,One Thousand One Hundred and Two,1102,84.png,Attejari,Seymour Patenaude,1 -7163,3,13,Five Thousand Three Hundred and Ninety Six,5396,19.png,Attejari,Petra Kovacic,1 -7164,9,11,Nine Thousand Five Hundred and Eighty Seven,9587,48.png,Attejari,Jens Egger,1 -7165,28,7,Four Thousand Two Hundred and Forty One,4241,142.png,Attejari,Hasna Bahiyaa Amari,1 -7166,20,32,Two Thousand Four Hundred and Seventeen,2417,103.png,Attejari,Chelsea Watson,1 -7167,24,25,One Thousand Six Hundred and Forty Five,1645,124.png,Attejari,Fleurette Coudert,1 -7168,11,43,Three Thousand Eight Hundred and Twenty One,3821,58.png,Attejari,Aruna Bekx,1 -7169,40,34,Five Thousand Four Hundred and Twelve,5412,203.png,Attejari,Holly Martin,1 -7170,10,36,One Thousand and Thirty One,1031,50.png,Attejari,Thomas Chapman,1 -7171,13,11,Eight Thousand Seven Hundred and Twenty Eight,8728,67.png,Attejari,Jens Egger,1 -7172,36,38,Nine Thousand One Hundred and Forty One,9141,181.png,Attejari,Freddie Reid,1 -7173,39,28,Four Thousand Two Hundred and Ninety Six,4296,197.png,Attejari,Chapin Auger,1 -7174,43,23,Four Thousand Nine Hundred and Ninety,4990,218.png,Attejari,Thรฉrรจse Fortier,1 -7175,40,6,Three Thousand Seven Hundred and Eighty Three,3783,203.png,Attejari,Abdul Qais Khouri,1 -7176,15,41,Five Thousand Four Hundred and Forty Eight,5448,78.png,Attejari,Germa de Geus,1 -7177,6,36,Seven Thousand Four Hundred and Twelve,7412,30.png,Attejari,Thomas Chapman,1 -7178,31,9,Four Thousand Seven Hundred and Forty Six,4746,158.png,Attejari,Maria Kalb,1 -7179,25,38,Seven Thousand Four Hundred,7400,129.png,Attejari,Freddie Reid,1 -7180,41,10,Six Thousand One Hundred and Twenty Eight,6128,207.png,Attejari,Stephan Schwab,1 -7181,26,25,Seven Thousand Two Hundred and Sixty Seven,7267,134.png,Attejari,Fleurette Coudert,1 -7182,10,8,Four Hundred and Forty Six,446,52.png,Attejari,Steffen Krueger,1 -7183,25,13,Three Thousand and Thirty,3030,128.png,Attejari,Petra Kovacic,1 -7184,34,0,Eight Thousand Nine Hundred and Eighty Two,8982,171.png,Attejari,Ethel M. Bryson,1 -7185,17,14,Nine Thousand One Hundred and Three,9103,89.png,Attejari,Renata Lukic,1 -7186,41,11,Eight Thousand Five Hundred and Fifty Seven,8557,206.png,Attejari,Jens Egger,1 -7187,8,0,Seven Thousand Three Hundred and Forty Two,7342,42.png,Attejari,Ethel M. Bryson,1 -7188,16,30,Two Thousand Two Hundred and Thirty,2230,84.png,Attejari,Jodie Holden,1 -7189,2,5,Seven Thousand One Hundred and Fifty Six,7156,13.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7190,3,26,Seven Thousand One Hundred,7100,18.png,Attejari,Sidney Lapointe,1 -7191,13,42,Seven Thousand Three Hundred and Seventeen,7317,69.png,Attejari,Brady Jamin,1 -7192,0,41,Nine Thousand Nine Hundred and Fifty Six,9956,1.png,Attejari,Germa de Geus,1 -7193,25,4,Nine Thousand Seven Hundred and Sixty One,9761,127.png,Attejari,Wafiyah Nashwa Wasem,1 -7194,30,34,Nine Thousand Eight Hundred and Six,9806,151.png,Attejari,Holly Martin,1 -7195,33,35,Eight Thousand Eight Hundred and Sixty Six,8866,168.png,Attejari,Elliot Humphreys,1 -7196,2,33,Five Thousand Seven Hundred and Seventy,5770,11.png,Attejari,Eleanor Freeman,1 -7197,42,9,Eight Thousand and Forty Seven,8047,213.png,Attejari,Maria Kalb,1 -7198,39,40,Three Thousand Five Hundred and Seventy Three,3573,199.png,Attejari,David Howard,1 -7199,17,41,Six Thousand Six Hundred and Ninety Seven,6697,86.png,Attejari,Germa de Geus,1 -7200,35,19,Three Hundred and Ninety One,391,176.png,Attejari,Franรงoise Lapierre,1 -7201,30,19,One Thousand Six Hundred and Seventy One,1671,154.png,Attejari,Franรงoise Lapierre,1 -7202,42,8,Nine Thousand Six Hundred and Seventy Eight,9678,214.png,Attejari,Steffen Krueger,1 -7203,41,2,Nine Hundred and Eight,908,205.png,Attejari,Chi Hsiao,1 -7204,37,1,Eight Thousand Four Hundred and Nineteen,8419,188.png,Attejari,Emily D. Short,1 -7205,0,15,Seven Thousand Seven Hundred and Ninety Five,7795,0.png,Attejari,Milenko Tkalcic,1 -7206,27,1,Seven Thousand One Hundred and Ninety Two,7192,138.png,Attejari,Emily D. Short,1 -7207,13,16,Six Thousand and Eighty Six,6086,68.png,Attejari,Searlas Grenier,1 -7208,15,27,Six Thousand One Hundred and One,6101,76.png,Attejari,Colette Monjeau,1 -7209,13,23,Eight Thousand Nine Hundred and Seventy Two,8972,68.png,Attejari,Thรฉrรจse Fortier,1 -7210,4,12,Four Thousand Nine Hundred and Thirty Six,4936,24.png,Attejari,Marcel Achen,1 -7211,20,13,Eight Thousand Nine Hundred and Seventy Eight,8978,101.png,Attejari,Petra Kovacic,1 -7212,35,32,Five Thousand Six Hundred and Eighty Seven,5687,176.png,Attejari,Chelsea Watson,1 -7213,28,15,Five Thousand Seven Hundred and Forty,5740,143.png,Attejari,Milenko Tkalcic,1 -7214,20,19,One Thousand Nine Hundred and Eight,1908,103.png,Attejari,Franรงoise Lapierre,1 -7215,34,7,Nine Hundred and Twenty Three,923,170.png,Attejari,Hasna Bahiyaa Amari,1 -7216,20,3,Four Thousand Nine Hundred and Eighty Nine,4989,101.png,Attejari,Jiang Li Tao,1 -7217,2,23,Six Hundred and Fifty Three,653,10.png,Attejari,Thรฉrรจse Fortier,1 -7218,12,16,Seven Thousand Two Hundred and Eighty One,7281,63.png,Attejari,Searlas Grenier,1 -7219,19,39,Four Hundred and Ninety Four,494,95.png,Attejari,Katie Connor,1 -7220,29,10,Six Thousand Three Hundred and Eighty Five,6385,148.png,Attejari,Stephan Schwab,1 -7221,34,33,Nine Thousand Four Hundred and Thirty Four,9434,173.png,Attejari,Eleanor Freeman,1 -7222,10,15,Three Thousand and Thirty Five,3035,53.png,Attejari,Milenko Tkalcic,1 -7223,32,5,One Thousand and Seventy One,1071,162.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7224,36,2,Three Thousand Four Hundred and Thirty Five,3435,181.png,Attejari,Chi Hsiao,1 -7225,30,9,Nine Thousand One Hundred and Forty Eight,9148,154.png,Attejari,Maria Kalb,1 -7226,11,43,Six Thousand and Sixty One,6061,55.png,Attejari,Aruna Bekx,1 -7227,37,32,Six Thousand Six Hundred and Eighty Two,6682,185.png,Attejari,Chelsea Watson,1 -7228,34,22,Five Thousand Four Hundred and Ninety Six,5496,171.png,Attejari,Eglantine Forest,1 -7229,40,3,Four Thousand Two Hundred and Forty Five,4245,202.png,Attejari,Jiang Li Tao,1 -7230,27,4,One Thousand and Twenty Nine,1029,138.png,Attejari,Wafiyah Nashwa Wasem,1 -7231,35,21,Two Thousand and Thirty,2030,178.png,Attejari,David Corbeil,1 -7232,24,6,Five Thousand and Ten,5010,121.png,Attejari,Abdul Qais Khouri,1 -7233,38,18,Seven Thousand Six Hundred and Thirty Four,7634,192.png,Attejari,Edmee Pelletier,1 -7234,5,27,Four Thousand Four Hundred and Eighteen,4418,25.png,Attejari,Colette Monjeau,1 -7235,28,33,Three Thousand Eight Hundred and Forty Two,3842,144.png,Attejari,Eleanor Freeman,1 -7236,29,14,Two Thousand and Fifty Three,2053,149.png,Attejari,Renata Lukic,1 -7237,16,11,Five Thousand and Eighty Five,5085,83.png,Attejari,Jens Egger,1 -7238,26,7,Four Hundred and Thirty One,431,132.png,Attejari,Hasna Bahiyaa Amari,1 -7239,8,6,Five Thousand Five Hundred and Sixty Three,5563,43.png,Attejari,Abdul Qais Khouri,1 -7240,38,34,Nine Thousand Seven Hundred and Thirty Seven,9737,193.png,Attejari,Holly Martin,1 -7241,33,42,Eight Thousand Three Hundred and Eighty Five,8385,169.png,Attejari,Brady Jamin,1 -7242,36,22,One Thousand Three Hundred and Ninety Six,1396,180.png,Attejari,Eglantine Forest,1 -7243,3,38,Six Thousand Five Hundred and Ninety Four,6594,18.png,Attejari,Freddie Reid,1 -7244,16,26,Six Hundred and Seventy Five,675,83.png,Attejari,Sidney Lapointe,1 -7245,40,5,Three Thousand Three Hundred and Seventy Three,3373,201.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7246,29,40,Six Thousand Four Hundred and Ten,6410,145.png,Attejari,David Howard,1 -7247,21,28,Eight Thousand Five Hundred and Sixty Seven,8567,108.png,Attejari,Chapin Auger,1 -7248,40,19,Seven Thousand and One,7001,204.png,Attejari,Franรงoise Lapierre,1 -7249,14,5,Six Thousand Eight Hundred and Thirty Seven,6837,74.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7250,8,37,Four Thousand Eight Hundred and One,4801,44.png,Attejari,Eva Davies,1 -7251,17,23,Four Thousand and Eighty One,4081,86.png,Attejari,Thรฉrรจse Fortier,1 -7252,0,21,Two Thousand and Three,2003,3.png,Attejari,David Corbeil,1 -7253,11,6,Nine Thousand and Forty Three,9043,59.png,Attejari,Abdul Qais Khouri,1 -7254,11,7,Six Thousand One Hundred and Eight,6108,55.png,Attejari,Hasna Bahiyaa Amari,1 -7255,2,15,Three Thousand Two Hundred and Seven,3207,10.png,Attejari,Milenko Tkalcic,1 -7256,19,27,Five Thousand Nine Hundred and Sixty Seven,5967,95.png,Attejari,Colette Monjeau,1 -7257,15,11,Two Thousand Eight Hundred and Eighty Five,2885,79.png,Attejari,Jens Egger,1 -7258,30,23,Six Thousand Two Hundred and Ninety Seven,6297,153.png,Attejari,Thรฉrรจse Fortier,1 -7259,13,3,Eight Thousand Eight Hundred and Sixty Six,8866,66.png,Attejari,Jiang Li Tao,1 -7260,30,41,Three Thousand Eight Hundred and Five,3805,154.png,Attejari,Germa de Geus,1 -7261,43,5,Five Thousand Six Hundred and Seventy Three,5673,217.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7262,32,1,Two Thousand Nine Hundred and Six,2906,160.png,Attejari,Emily D. Short,1 -7263,10,3,Five Thousand and Eighteen,5018,54.png,Attejari,Jiang Li Tao,1 -7264,6,19,Six Thousand Four Hundred and Eighty Four,6484,32.png,Attejari,Franรงoise Lapierre,1 -7265,35,18,Four Thousand Seven Hundred and Ninety Six,4796,177.png,Attejari,Edmee Pelletier,1 -7266,10,9,Six Thousand Two Hundred and Ninety Four,6294,54.png,Attejari,Maria Kalb,1 -7267,23,33,Seven Thousand One Hundred and Ninety Seven,7197,118.png,Attejari,Eleanor Freeman,1 -7268,5,24,Nine Thousand Seven Hundred and Three,9703,28.png,Attejari,Clarice Blanc,1 -7269,22,11,Seventy Six,76,112.png,Attejari,Jens Egger,1 -7270,38,38,Three Thousand One Hundred and Forty Five,3145,192.png,Attejari,Freddie Reid,1 -7271,11,16,Nineteen,19,55.png,Attejari,Searlas Grenier,1 -7272,14,27,Five Thousand and Seventy One,5071,73.png,Attejari,Colette Monjeau,1 -7273,19,4,Nine Thousand Four Hundred and Twenty Six,9426,96.png,Attejari,Wafiyah Nashwa Wasem,1 -7274,6,17,Five Thousand Eight Hundred and Three,5803,30.png,Attejari,Yolette Cloutier,1 -7275,2,28,Seven Thousand and Ninety Seven,7097,14.png,Attejari,Chapin Auger,1 -7276,29,43,Two Thousand Three Hundred and Fifty,2350,145.png,Attejari,Aruna Bekx,1 -7277,7,20,One Thousand Five Hundred and Thirty Five,1535,36.png,Attejari,Seymour Patenaude,1 -7278,29,0,Four Thousand Six Hundred and Sixty Eight,4668,149.png,Attejari,Ethel M. Bryson,1 -7279,5,38,Three Thousand Eight Hundred and Fourteen,3814,29.png,Attejari,Freddie Reid,1 -7280,15,26,Three Hundred and Three,303,75.png,Attejari,Sidney Lapointe,1 -7281,35,11,Five Thousand Two Hundred and Ninety Five,5295,178.png,Attejari,Jens Egger,1 -7282,14,27,Nine Thousand Nine Hundred and Sixty Nine,9969,74.png,Attejari,Colette Monjeau,1 -7283,33,20,One Thousand Two Hundred and Twenty,1220,169.png,Attejari,Seymour Patenaude,1 -7284,40,1,Three Thousand Three Hundred,3300,203.png,Attejari,Emily D. Short,1 -7285,7,10,Five Hundred and Fifty Nine,559,37.png,Attejari,Stephan Schwab,1 -7286,39,23,Three Thousand Seven Hundred and Forty One,3741,197.png,Attejari,Thรฉrรจse Fortier,1 -7287,4,23,Four Thousand and Ninety Eight,4098,23.png,Attejari,Thรฉrรจse Fortier,1 -7288,18,29,Four Thousand Nine Hundred and Twenty One,4921,90.png,Attejari,Hayden Bruce,1 -7289,18,35,Five Thousand Seven Hundred and Seventy Seven,5777,94.png,Attejari,Elliot Humphreys,1 -7290,2,21,Five Thousand Eight Hundred and Ninety Eight,5898,12.png,Attejari,David Corbeil,1 -7291,36,40,Seven Thousand Eight Hundred and Fifty Two,7852,183.png,Attejari,David Howard,1 -7292,3,19,One Thousand and Fifty Five,1055,15.png,Attejari,Franรงoise Lapierre,1 -7293,14,17,Two Thousand Three Hundred and Sixty Seven,2367,71.png,Attejari,Yolette Cloutier,1 -7294,39,24,Seven Thousand Six Hundred and Thirty Eight,7638,197.png,Attejari,Clarice Blanc,1 -7295,28,18,Three Thousand Nine Hundred and Forty,3940,142.png,Attejari,Edmee Pelletier,1 -7296,31,1,Six Thousand Five Hundred and Thirty Six,6536,155.png,Attejari,Emily D. Short,1 -7297,23,37,Four Thousand and Thirty Nine,4039,115.png,Attejari,Eva Davies,1 -7298,7,27,Seventy Two,72,38.png,Attejari,Colette Monjeau,1 -7299,37,3,Nine Hundred and Twelve,912,187.png,Attejari,Jiang Li Tao,1 -7300,14,11,Nine Thousand One Hundred and Thirty Two,9132,70.png,Attejari,Jens Egger,1 -7301,5,21,Seven Thousand Nine Hundred and Forty Nine,7949,26.png,Attejari,David Corbeil,1 -7302,37,17,One Thousand Eight Hundred and Ninety Seven,1897,189.png,Attejari,Yolette Cloutier,1 -7303,29,19,Four Thousand One Hundred and Nine,4109,147.png,Attejari,Franรงoise Lapierre,1 -7304,31,16,Four Thousand and Eleven,4011,156.png,Attejari,Searlas Grenier,1 -7305,15,0,Nine Thousand Six Hundred and Forty Five,9645,77.png,Attejari,Ethel M. Bryson,1 -7306,43,22,Six Thousand Five Hundred and Ninety Six,6596,216.png,Attejari,Eglantine Forest,1 -7307,10,32,Eight Thousand Four Hundred and Ninety Nine,8499,53.png,Attejari,Chelsea Watson,1 -7308,43,29,Eight Thousand Nine Hundred and Eighty Seven,8987,216.png,Attejari,Hayden Bruce,1 -7309,33,13,Nine Thousand One Hundred and Seventy,9170,166.png,Attejari,Petra Kovacic,1 -7310,4,11,Three Thousand and Ninety Two,3092,23.png,Attejari,Jens Egger,1 -7311,7,28,Four Thousand Six Hundred and Seventy Seven,4677,35.png,Attejari,Chapin Auger,1 -7312,37,34,Seven Thousand Two Hundred and Ninety Three,7293,185.png,Attejari,Holly Martin,1 -7313,43,22,Three Thousand One Hundred and Forty Two,3142,219.png,Attejari,Eglantine Forest,1 -7314,25,16,Nine Thousand and Fifteen,9015,126.png,Attejari,Searlas Grenier,1 -7315,38,18,Three Thousand Four Hundred,3400,191.png,Attejari,Edmee Pelletier,1 -7316,12,19,Two Hundred and Seven,207,64.png,Attejari,Franรงoise Lapierre,1 -7317,8,43,Eight Thousand Three Hundred and Thirty Eight,8338,44.png,Attejari,Aruna Bekx,1 -7318,5,6,Eight Thousand One Hundred and Forty One,8141,27.png,Attejari,Abdul Qais Khouri,1 -7319,7,6,Six Thousand Five Hundred and Twenty Three,6523,38.png,Attejari,Abdul Qais Khouri,1 -7320,1,10,One Thousand Four Hundred and Ten,1410,7.png,Attejari,Stephan Schwab,1 -7321,6,33,Nine Hundred and Twenty Five,925,30.png,Attejari,Eleanor Freeman,1 -7322,6,4,Five Thousand Five Hundred and Ten,5510,31.png,Attejari,Wafiyah Nashwa Wasem,1 -7323,10,29,Nine Thousand Five Hundred and Three,9503,50.png,Attejari,Hayden Bruce,1 -7324,7,3,Two Thousand Two Hundred and Forty Four,2244,39.png,Attejari,Jiang Li Tao,1 -7325,29,43,One Thousand Five Hundred and Six,1506,148.png,Attejari,Aruna Bekx,1 -7326,15,38,Seven Thousand and Twenty One,7021,79.png,Attejari,Freddie Reid,1 -7327,0,3,Eight Thousand Two Hundred and Eighty Nine,8289,0.png,Attejari,Jiang Li Tao,1 -7328,30,9,Seven Thousand Nine Hundred and Fifty Seven,7957,150.png,Attejari,Maria Kalb,1 -7329,41,2,Eight Thousand Six Hundred and Forty Five,8645,206.png,Attejari,Chi Hsiao,1 -7330,38,17,Six Thousand Nine Hundred and Seventeen,6917,192.png,Attejari,Yolette Cloutier,1 -7331,23,25,Eight Thousand Six Hundred and Seventy Four,8674,116.png,Attejari,Fleurette Coudert,1 -7332,8,35,Six Hundred and Sixty Seven,667,40.png,Attejari,Elliot Humphreys,1 -7333,0,43,Six Thousand Eight Hundred and Eighty Eight,6888,2.png,Attejari,Aruna Bekx,1 -7334,24,25,Five Thousand Eight Hundred and Thirty Seven,5837,124.png,Attejari,Fleurette Coudert,1 -7335,40,42,Five Thousand Four Hundred and Eighty Two,5482,204.png,Attejari,Brady Jamin,1 -7336,27,2,Nine Hundred and Eighty Eight,988,136.png,Attejari,Chi Hsiao,1 -7337,6,18,Six Thousand Eight Hundred and Ten,6810,30.png,Attejari,Edmee Pelletier,1 -7338,37,16,Six Thousand and Seventeen,6017,189.png,Attejari,Searlas Grenier,1 -7339,30,37,Five Thousand Nine Hundred and Forty Five,5945,153.png,Attejari,Eva Davies,1 -7340,30,20,Six Thousand One Hundred and Ninety Two,6192,150.png,Attejari,Seymour Patenaude,1 -7341,39,6,Eight Thousand Two Hundred and Sixty Six,8266,197.png,Attejari,Abdul Qais Khouri,1 -7342,6,15,One Thousand and Ninety Six,1096,33.png,Attejari,Milenko Tkalcic,1 -7343,31,18,Six Thousand One Hundred and Five,6105,158.png,Attejari,Edmee Pelletier,1 -7344,9,7,Two Thousand Two Hundred and Forty Seven,2247,46.png,Attejari,Hasna Bahiyaa Amari,1 -7345,41,27,Eight Thousand Four Hundred and Twenty Four,8424,208.png,Attejari,Colette Monjeau,1 -7346,8,12,Six Thousand Five Hundred and Eighty Eight,6588,44.png,Attejari,Marcel Achen,1 -7347,30,9,Seven Thousand Eight Hundred and Seventy Five,7875,150.png,Attejari,Maria Kalb,1 -7348,10,35,Four Thousand Five Hundred and Sixty Five,4565,52.png,Attejari,Elliot Humphreys,1 -7349,24,19,Nine Thousand Three Hundred and Ninety Four,9394,122.png,Attejari,Franรงoise Lapierre,1 -7350,22,22,Three Thousand Six Hundred and Eighty Four,3684,111.png,Attejari,Eglantine Forest,1 -7351,13,12,Two Thousand Three Hundred and Eleven,2311,66.png,Attejari,Marcel Achen,1 -7352,32,14,Three Thousand Nine Hundred and Fifty Six,3956,160.png,Attejari,Renata Lukic,1 -7353,1,11,Three Thousand Two Hundred and Five,3205,9.png,Attejari,Jens Egger,1 -7354,6,40,Four Thousand Seven Hundred and Eighty One,4781,30.png,Attejari,David Howard,1 -7355,19,20,One Thousand One Hundred and Thirty Two,1132,96.png,Attejari,Seymour Patenaude,1 -7356,33,37,Eight Thousand Three Hundred and Sixty Five,8365,165.png,Attejari,Eva Davies,1 -7357,18,35,One Thousand Five Hundred and Five,1505,93.png,Attejari,Elliot Humphreys,1 -7358,35,31,Five Thousand One Hundred and Sixty Nine,5169,175.png,Attejari,Naomi Grant,1 -7359,25,43,Six Thousand Two Hundred and Twenty Four,6224,128.png,Attejari,Aruna Bekx,1 -7360,19,33,Two Thousand Seven Hundred and Fifty One,2751,99.png,Attejari,Eleanor Freeman,1 -7361,23,4,Five Thousand Eight Hundred and Thirty,5830,119.png,Attejari,Wafiyah Nashwa Wasem,1 -7362,13,5,Seven Thousand Five Hundred and Seventy Nine,7579,68.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7363,0,4,Five Thousand Nine Hundred and Seventy Eight,5978,2.png,Attejari,Wafiyah Nashwa Wasem,1 -7364,34,23,Four Thousand Seven Hundred and Twenty One,4721,170.png,Attejari,Thรฉrรจse Fortier,1 -7365,40,23,Three Thousand Nine Hundred and Ninety One,3991,203.png,Attejari,Thรฉrรจse Fortier,1 -7366,12,29,Seven Thousand One Hundred and Sixty Eight,7168,63.png,Attejari,Hayden Bruce,1 -7367,22,14,Three Thousand Nine Hundred and Sixty,3960,113.png,Attejari,Renata Lukic,1 -7368,29,1,Eight Thousand Seven Hundred and Ninety Nine,8799,146.png,Attejari,Emily D. Short,1 -7369,37,42,Two Thousand Four Hundred and Eighty Seven,2487,185.png,Attejari,Brady Jamin,1 -7370,24,2,Six Thousand Nine Hundred and Seventy Three,6973,122.png,Attejari,Chi Hsiao,1 -7371,18,2,Two Thousand Eight Hundred and Three,2803,90.png,Attejari,Chi Hsiao,1 -7372,1,6,Six Thousand Seven Hundred and Thirty Three,6733,7.png,Attejari,Abdul Qais Khouri,1 -7373,14,13,Eight Thousand Nine Hundred and Seventy Two,8972,72.png,Attejari,Petra Kovacic,1 -7374,16,20,Four Thousand and Ninety Nine,4099,83.png,Attejari,Seymour Patenaude,1 -7375,15,35,Six Thousand Five Hundred and Ninety Six,6596,77.png,Attejari,Elliot Humphreys,1 -7376,23,5,Nine Thousand One Hundred and Eighty,9180,116.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7377,1,39,Nine Hundred and Eighty Four,984,6.png,Attejari,Katie Connor,1 -7378,14,24,Nine Thousand and Twenty Six,9026,71.png,Attejari,Clarice Blanc,1 -7379,38,12,Seven Hundred and Forty Seven,747,194.png,Attejari,Marcel Achen,1 -7380,37,39,Eight Thousand One Hundred and Seventy Three,8173,189.png,Attejari,Katie Connor,1 -7381,40,23,Nine Thousand and Seventy One,9071,200.png,Attejari,Thรฉrรจse Fortier,1 -7382,0,4,Eight Thousand Two Hundred and Thirteen,8213,0.png,Attejari,Wafiyah Nashwa Wasem,1 -7383,30,27,Four Thousand Eight Hundred and Ninety,4890,152.png,Attejari,Colette Monjeau,1 -7384,39,9,Six Thousand Five Hundred and Ninety One,6591,195.png,Attejari,Maria Kalb,1 -7385,21,24,Two Thousand and Fifteen,2015,109.png,Attejari,Clarice Blanc,1 -7386,6,17,Six Thousand Five Hundred and Five,6505,32.png,Attejari,Yolette Cloutier,1 -7387,32,18,One Thousand Eight Hundred and Three,1803,160.png,Attejari,Edmee Pelletier,1 -7388,6,22,Six Thousand Nine Hundred and Fifty Nine,6959,34.png,Attejari,Eglantine Forest,1 -7389,43,31,Six Thousand Three Hundred and Forty One,6341,215.png,Attejari,Naomi Grant,1 -7390,23,38,Four Thousand Nine Hundred and Seventy Seven,4977,117.png,Attejari,Freddie Reid,1 -7391,28,40,Four Thousand Eight Hundred and Seventy Three,4873,144.png,Attejari,David Howard,1 -7392,32,24,Four Thousand Two Hundred and Eighty Eight,4288,161.png,Attejari,Clarice Blanc,1 -7393,6,1,Eight Thousand Three Hundred and Seventy One,8371,32.png,Attejari,Emily D. Short,1 -7394,16,22,One Thousand Two Hundred and Sixty Nine,1269,82.png,Attejari,Eglantine Forest,1 -7395,12,6,Eight Thousand One Hundred and Fifty Seven,8157,64.png,Attejari,Abdul Qais Khouri,1 -7396,38,29,Three Thousand Nine Hundred and Forty,3940,190.png,Attejari,Hayden Bruce,1 -7397,38,0,Seven Hundred and Fifteen,715,193.png,Attejari,Ethel M. Bryson,1 -7398,40,27,Five Thousand One Hundred and Forty Three,5143,200.png,Attejari,Colette Monjeau,1 -7399,42,3,Seven Hundred and Sixty,760,212.png,Attejari,Jiang Li Tao,1 -7400,12,37,Four Thousand Eight Hundred and Five,4805,60.png,Attejari,Eva Davies,1 -7401,2,28,Eight Thousand One Hundred and Forty Four,8144,11.png,Attejari,Chapin Auger,1 -7402,19,15,Four Thousand One Hundred and Sixteen,4116,99.png,Attejari,Milenko Tkalcic,1 -7403,34,40,One Thousand and Seventy Six,1076,172.png,Attejari,David Howard,1 -7404,1,40,One Thousand Nine Hundred and Thirty,1930,8.png,Attejari,David Howard,1 -7405,16,34,Four Thousand Eight Hundred and Four,4804,84.png,Attejari,Holly Martin,1 -7406,36,37,Six Thousand Eight Hundred and Eleven,6811,180.png,Attejari,Eva Davies,1 -7407,13,15,Two Thousand One Hundred and Forty Nine,2149,67.png,Attejari,Milenko Tkalcic,1 -7408,42,15,One Thousand Nine Hundred and Ten,1910,211.png,Attejari,Milenko Tkalcic,1 -7409,38,38,Eight Thousand Nine Hundred and Eighteen,8918,190.png,Attejari,Freddie Reid,1 -7410,12,39,Nine Thousand Five Hundred and Thirteen,9513,63.png,Attejari,Katie Connor,1 -7411,10,38,One Thousand Nine Hundred and Fifty Eight,1958,53.png,Attejari,Freddie Reid,1 -7412,34,42,One Thousand Nine Hundred and Forty One,1941,174.png,Attejari,Brady Jamin,1 -7413,10,8,Five Thousand Nine Hundred and Forty One,5941,50.png,Attejari,Steffen Krueger,1 -7414,33,13,Four Thousand Six Hundred and Thirty Five,4635,169.png,Attejari,Petra Kovacic,1 -7415,1,4,One Hundred and Eighty Seven,187,6.png,Attejari,Wafiyah Nashwa Wasem,1 -7416,17,18,Seven Thousand Five Hundred and Eleven,7511,85.png,Attejari,Edmee Pelletier,1 -7417,6,4,Eight Thousand Nine Hundred and Two,8902,33.png,Attejari,Wafiyah Nashwa Wasem,1 -7418,19,6,Eight Thousand Three Hundred and Ninety Eight,8398,98.png,Attejari,Abdul Qais Khouri,1 -7419,32,8,Two Thousand Five Hundred and Twenty Seven,2527,161.png,Attejari,Steffen Krueger,1 -7420,12,9,Nine Thousand Three Hundred,9300,60.png,Attejari,Maria Kalb,1 -7421,32,3,Nine Thousand Three Hundred and Fifty Five,9355,161.png,Attejari,Jiang Li Tao,1 -7422,40,41,Eight Thousand Nine Hundred and Sixty Four,8964,203.png,Attejari,Germa de Geus,1 -7423,36,20,Four Thousand Five Hundred and Seventy Five,4575,182.png,Attejari,Seymour Patenaude,1 -7424,20,5,Four Thousand Eight Hundred and Thirty Seven,4837,103.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7425,24,42,Four Thousand Four Hundred and Ninety Four,4494,120.png,Attejari,Brady Jamin,1 -7426,37,32,Three Thousand Three Hundred and Sixty One,3361,187.png,Attejari,Chelsea Watson,1 -7427,21,20,Three Thousand Four Hundred and Fifty Six,3456,108.png,Attejari,Seymour Patenaude,1 -7428,28,33,Nine Thousand Two Hundred and Ninety Eight,9298,144.png,Attejari,Eleanor Freeman,1 -7429,41,29,Three Thousand and Fifty Eight,3058,208.png,Attejari,Hayden Bruce,1 -7430,32,7,Seven Thousand Four Hundred and Thirty Five,7435,161.png,Attejari,Hasna Bahiyaa Amari,1 -7431,16,37,Seven Thousand Nine Hundred and Seventy Four,7974,80.png,Attejari,Eva Davies,1 -7432,30,42,Six Thousand and Eighty,6080,153.png,Attejari,Brady Jamin,1 -7433,11,26,One Hundred and Sixty Four,164,55.png,Attejari,Sidney Lapointe,1 -7434,10,19,Two Hundred and Six,206,51.png,Attejari,Franรงoise Lapierre,1 -7435,8,15,Seven Thousand Eight Hundred and Twenty Nine,7829,42.png,Attejari,Milenko Tkalcic,1 -7436,0,28,Eight Thousand and Twenty Seven,8027,3.png,Attejari,Chapin Auger,1 -7437,41,2,Five Thousand and Eighty Eight,5088,208.png,Attejari,Chi Hsiao,1 -7438,18,20,Seven Hundred and Twenty Five,725,93.png,Attejari,Seymour Patenaude,1 -7439,30,4,Six Thousand Five Hundred and Fifteen,6515,153.png,Attejari,Wafiyah Nashwa Wasem,1 -7440,15,19,Six Thousand Three Hundred and Twenty Six,6326,78.png,Attejari,Franรงoise Lapierre,1 -7441,34,31,Nine Hundred and Ninety One,991,173.png,Attejari,Naomi Grant,1 -7442,33,2,Three Thousand Seven Hundred and Nine,3709,168.png,Attejari,Chi Hsiao,1 -7443,14,16,Seven Thousand Three Hundred and Sixty Nine,7369,72.png,Attejari,Searlas Grenier,1 -7444,11,5,Seven Thousand Five Hundred and One,7501,59.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7445,31,5,Two Thousand and One,2001,158.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7446,25,30,Five Thousand Six Hundred and Twenty Five,5625,125.png,Attejari,Jodie Holden,1 -7447,12,9,Nine Thousand Two Hundred and Thirty Nine,9239,64.png,Attejari,Maria Kalb,1 -7448,0,40,Five Thousand One Hundred and Ninety Two,5192,1.png,Attejari,David Howard,1 -7449,36,19,Four Thousand One Hundred and Seven,4107,184.png,Attejari,Franรงoise Lapierre,1 -7450,34,17,Eight Hundred and Three,803,174.png,Attejari,Yolette Cloutier,1 -7451,31,9,Seven Thousand and Seventy Five,7075,158.png,Attejari,Maria Kalb,1 -7452,22,9,Seven Thousand and Twenty One,7021,114.png,Attejari,Maria Kalb,1 -7453,12,30,One Thousand Nine Hundred and Eighty Six,1986,61.png,Attejari,Jodie Holden,1 -7454,41,22,Eight Thousand Seven Hundred and Ninety Five,8795,208.png,Attejari,Eglantine Forest,1 -7455,5,42,Seven Thousand Three Hundred and Seventy Five,7375,25.png,Attejari,Brady Jamin,1 -7456,36,16,Seven Thousand and Twelve,7012,183.png,Attejari,Searlas Grenier,1 -7457,32,13,Nine Thousand and Fifty Nine,9059,161.png,Attejari,Petra Kovacic,1 -7458,4,37,Eight Thousand Six Hundred and Sixty One,8661,20.png,Attejari,Eva Davies,1 -7459,25,42,Four Thousand Five Hundred and Ninety Three,4593,125.png,Attejari,Brady Jamin,1 -7460,11,33,Five Thousand Two Hundred and Eighty Six,5286,58.png,Attejari,Eleanor Freeman,1 -7461,40,38,Five Thousand Four Hundred and Thirty Three,5433,203.png,Attejari,Freddie Reid,1 -7462,0,13,Seven Thousand and Fifty Three,7053,1.png,Attejari,Petra Kovacic,1 -7463,43,21,Seven Thousand Two Hundred and Eighty Six,7286,217.png,Attejari,David Corbeil,1 -7464,10,15,Two Thousand Nine Hundred and Sixty Eight,2968,51.png,Attejari,Milenko Tkalcic,1 -7465,13,9,Eight Thousand Six Hundred and Six,8606,66.png,Attejari,Maria Kalb,1 -7466,36,19,Nine Hundred and Sixty Four,964,181.png,Attejari,Franรงoise Lapierre,1 -7467,17,42,Six Thousand Three Hundred and Seventy Three,6373,87.png,Attejari,Brady Jamin,1 -7468,3,39,Eight Thousand Six Hundred and Twenty One,8621,15.png,Attejari,Katie Connor,1 -7469,16,21,Five Thousand Two Hundred and Sixty Nine,5269,84.png,Attejari,David Corbeil,1 -7470,36,42,Five Thousand Six Hundred and Forty Seven,5647,182.png,Attejari,Brady Jamin,1 -7471,15,34,Two Thousand and Fifty Nine,2059,77.png,Attejari,Holly Martin,1 -7472,17,21,Four Thousand Two Hundred and Forty Four,4244,88.png,Attejari,David Corbeil,1 -7473,0,23,Seven Thousand Two Hundred and Fifty Eight,7258,3.png,Attejari,Thรฉrรจse Fortier,1 -7474,21,38,Nine Hundred and Twenty Four,924,107.png,Attejari,Freddie Reid,1 -7475,9,23,Four Thousand One Hundred and Twenty Eight,4128,49.png,Attejari,Thรฉrรจse Fortier,1 -7476,28,41,Five Thousand and Four,5004,144.png,Attejari,Germa de Geus,1 -7477,38,14,Seven Thousand Five Hundred and Six,7506,190.png,Attejari,Renata Lukic,1 -7478,37,38,Five Hundred and Ninety Five,595,185.png,Attejari,Freddie Reid,1 -7479,35,16,Eight Thousand and Thirty Eight,8038,175.png,Attejari,Searlas Grenier,1 -7480,12,31,One Thousand Nine Hundred and Seventy Eight,1978,60.png,Attejari,Naomi Grant,1 -7481,11,10,One Thousand Six Hundred and Nineteen,1619,55.png,Attejari,Stephan Schwab,1 -7482,22,34,Seven Thousand Six Hundred and Thirty One,7631,113.png,Attejari,Holly Martin,1 -7483,22,10,Eight Thousand Eight Hundred and Fifty Three,8853,112.png,Attejari,Stephan Schwab,1 -7484,23,23,One Thousand Seven Hundred and Thirty Six,1736,117.png,Attejari,Thรฉrรจse Fortier,1 -7485,40,11,Two Thousand Eight Hundred and Ninety Two,2892,204.png,Attejari,Jens Egger,1 -7486,26,16,Three Thousand Five Hundred and Sixteen,3516,130.png,Attejari,Searlas Grenier,1 -7487,27,30,One Thousand and Sixty,1060,139.png,Attejari,Jodie Holden,1 -7488,0,38,Six Thousand Nine Hundred and Twenty Two,6922,4.png,Attejari,Freddie Reid,1 -7489,35,5,Seven Thousand Nine Hundred and Eighteen,7918,179.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7490,5,41,Five Thousand Two Hundred and Twenty Nine,5229,27.png,Attejari,Germa de Geus,1 -7491,25,19,Five Thousand One Hundred and Eighty Eight,5188,125.png,Attejari,Franรงoise Lapierre,1 -7492,34,29,Three Thousand One Hundred and Twenty Two,3122,172.png,Attejari,Hayden Bruce,1 -7493,4,33,Three Thousand Nine Hundred and Eighty Seven,3987,21.png,Attejari,Eleanor Freeman,1 -7494,41,37,Six Thousand Nine Hundred and Ninety Five,6995,208.png,Attejari,Eva Davies,1 -7495,33,10,Seven Thousand Six Hundred and Ninety Four,7694,167.png,Attejari,Stephan Schwab,1 -7496,40,2,Nine Thousand and Forty Four,9044,201.png,Attejari,Chi Hsiao,1 -7497,33,12,Two Hundred and Eighty Nine,289,168.png,Attejari,Marcel Achen,1 -7498,13,42,Five Thousand Five Hundred and Seventy Five,5575,66.png,Attejari,Brady Jamin,1 -7499,8,28,Four Thousand Five Hundred and Thirty One,4531,42.png,Attejari,Chapin Auger,1 -7500,9,37,Six Hundred and Eight,608,49.png,Attejari,Eva Davies,1 -7501,27,8,One Hundred and Four, ,137.png,Attejari,Steffen Krueger,0 -7502,14,15,Four Thousand Three Hundred and Thirty One, ,72.png,Attejari,Milenko Tkalcic,0 -7503,33,26,Six Thousand Eight Hundred and Ninety One, ,167.png,Attejari,Sidney Lapointe,0 -7504,30,36,Three Thousand Eight Hundred and Eleven, ,154.png,Attejari,Thomas Chapman,0 -7505,6,33, ,8709,32.png,Attejari,Eleanor Freeman,0 -7506,25,4,Three Thousand Two Hundred and Twenty Seven,5173,Nan,Attejari,Wafiyah Nashwa Wasem,0 -7507,10,36,Six Thousand One Hundred and Sixty Nine,8825,Nan,Attejari,Thomas Chapman,0 -7508,0,4,Five Hundred and Eight,3410,Nan,Attejari,Wafiyah Nashwa Wasem,0 -7509,15,42, ,3955,77.png,Attejari,Brady Jamin,0 -7510,10,7, ,3845,54.png,Attejari,Hasna Bahiyaa Amari,0 -7511,15,10,Six Thousand Four Hundred and Two,9011,Nan,Attejari,Stephan Schwab,0 -7512,38,11,One Thousand Six Hundred and Thirty, ,191.png,Attejari,Jens Egger,0 -7513,6,26,Four,34,Nan,Attejari,Sidney Lapointe,0 -7514,35,38,Two Thousand Nine Hundred and Forty Five,9119,Nan,Attejari,Freddie Reid,0 -7515,10,14,Two Hundred and Fifty,674,Nan,Attejari,Renata Lukic,0 -7516,16,16,One Thousand Nine Hundred and Twenty Seven,7960,Nan,Attejari,Searlas Grenier,0 -7517,31,12,Four Thousand Seven Hundred and Seventy Two,9533,Nan,Attejari,Marcel Achen,0 -7518,12,9,Three Hundred and Sixty Seven,1210,Nan,Attejari,Maria Kalb,0 -7519,8,29, ,6934,44.png,Attejari,Hayden Bruce,0 -7520,11,23,Two Thousand Nine Hundred and Eighty Nine, ,58.png,Attejari,Thรฉrรจse Fortier,0 -7521,43,10,Five Thousand Six Hundred and Sixty Two, ,217.png,Attejari,Stephan Schwab,0 -7522,21,43,Three Thousand and Ninety Three, ,108.png,Attejari,Aruna Bekx,0 -7523,25,3,Four Thousand Two Hundred and Forty One,8520,Nan,Attejari,Jiang Li Tao,0 -7524,37,4,Two Thousand Nine Hundred and Sixty Three,7738,Nan,Attejari,Wafiyah Nashwa Wasem,0 -7525,36,5,Six Hundred and Eighty Two,3149,Nan,Attejari,Fawwaz Zuhayr Mustafa,0 -7526,35,17, ,7474,177.png,Attejari,Yolette Cloutier,0 -7527,36,18,Five Hundred and Eleven,3127,Nan,Attejari,Edmee Pelletier,0 -7528,12,4,One Thousand Six Hundred and Eight, ,63.png,Attejari,Wafiyah Nashwa Wasem,0 -7529,9,2,Three Thousand Three Hundred and Thirty Six,3423,Nan,Attejari,Chi Hsiao,0 -7530,4,28,One Hundred and Eight,4166,Nan,Attejari,Chapin Auger,0 -7531,2,5,Three Thousand Three Hundred and Eighty Two,4975,Nan,Attejari,Fawwaz Zuhayr Mustafa,0 -7532,17,37,One Thousand Nine Hundred and Forty Four, ,88.png,Attejari,Eva Davies,0 -7533,6,30, ,3312,31.png,Attejari,Jodie Holden,0 -7534,32,3,Two Thousand Seven Hundred and Sixty Six,9583,Nan,Attejari,Jiang Li Tao,0 -7535,41,18,Nine Thousand Four Hundred and Eighty Four, ,209.png,Attejari,Edmee Pelletier,0 -7536,5,42, ,42,25.png,Attejari,Brady Jamin,0 -7537,40,12,Ninety Three, ,201.png,Attejari,Marcel Achen,0 -7538,42,31,One Thousand Eight Hundred and Fifty Eight, ,211.png,Attejari,Naomi Grant,0 -7539,19,41,Seven Thousand Nine Hundred and Sixty Seven,8084,Nan,Attejari,Germa de Geus,0 -7540,10,28,One Thousand One Hundred and Ninety One,6615,Nan,Attejari,Chapin Auger,0 -7541,34,6,Four Hundred and Seventy Two,1814,Nan,Attejari,Abdul Qais Khouri,0 -7542,0,19, ,3962,3.png,Attejari,Franรงoise Lapierre,0 -7543,16,13, ,3431,81.png,Attejari,Petra Kovacic,0 -7544,32,30, ,9060,164.png,Attejari,Jodie Holden,0 -7545,22,1,Three Thousand Nine Hundred and Forty Five,5548,Nan,Attejari,Emily D. Short,0 -7546,13,34,Four Hundred and Thirty Three, ,67.png,Attejari,Holly Martin,0 -7547,34,0,One Thousand Six Hundred and Fifty Eight,6969,Nan,Attejari,Ethel M. Bryson,0 -7548,38,5,One Thousand Nine Hundred and Ninety,2835,Nan,Attejari,Fawwaz Zuhayr Mustafa,0 -7549,38,31,Three Thousand Five Hundred and Eighty Two, ,193.png,Attejari,Naomi Grant,0 -7550,30,2,Eight Hundred and Seventy Two, ,153.png,Attejari,Chi Hsiao,0 -7551,27,27,Five Thousand Eight Hundred and Fifty Six, ,135.png,Attejari,Colette Monjeau,0 -7552,6,29,Seven Thousand Four Hundred and Eighty Six,7973,Nan,Attejari,Hayden Bruce,0 -7553,12,10,Three Hundred and Sixty Six,9969,Nan,Attejari,Stephan Schwab,0 -7554,1,27,One Thousand Three Hundred and Eighty Three,3799,Nan,Attejari,Colette Monjeau,0 -7555,23,32,Two Thousand Seven Hundred and Nineteen, ,116.png,Attejari,Chelsea Watson,0 -7556,31,7, ,1247,158.png,Attejari,Hasna Bahiyaa Amari,0 -7557,27,8,Three Hundred and Twenty Four,3215,Nan,Attejari,Steffen Krueger,0 -7558,35,37,Five Thousand Two Hundred and Twenty Seven,5572,Nan,Attejari,Eva Davies,0 -7559,16,20,One Thousand One Hundred and Four, ,83.png,Attejari,Seymour Patenaude,0 -7560,18,15,Two Thousand Four Hundred and Seventy Three,6377,Nan,Attejari,Milenko Tkalcic,0 -7561,5,24,Seven Thousand Seven Hundred and Fifty Two, ,29.png,Attejari,Clarice Blanc,0 -7562,13,3, ,4476,65.png,Attejari,Jiang Li Tao,0 -7563,33,5,Three Thousand Nine Hundred and Thirty Three,4205,Nan,Attejari,Fawwaz Zuhayr Mustafa,0 -7564,12,0, ,894,60.png,Attejari,Ethel M. Bryson,0 -7565,14,24, ,1099,71.png,Attejari,Clarice Blanc,0 -7566,39,42,One Thousand Seven Hundred and Eighty Nine,7317,Nan,Attejari,Brady Jamin,0 -7567,16,22,Two Thousand Six Hundred and Thirty One, ,82.png,Attejari,Eglantine Forest,0 -7568,6,27,One Thousand Nine Hundred and Fifty One,2391,Nan,Attejari,Colette Monjeau,0 -7569,10,23, ,3669,52.png,Attejari,Thรฉrรจse Fortier,0 -7570,9,19,Three Thousand Three Hundred and Seventy Nine,3890,Nan,Attejari,Franรงoise Lapierre,0 -7571,27,7,Seven Hundred and Forty Eight,4796,Nan,Attejari,Hasna Bahiyaa Amari,0 -7572,40,5,Twenty Eight,97,Nan,Attejari,Fawwaz Zuhayr Mustafa,0 -7573,15,3,One Thousand and Thirty Nine,1340,Nan,Attejari,Jiang Li Tao,0 -7574,22,32,Two Thousand Two Hundred and Forty Three, ,110.png,Attejari,Chelsea Watson,0 -7575,25,19,Six Thousand One Hundred and Thirty Seven,7311,Nan,Attejari,Franรงoise Lapierre,0 -7576,24,24, ,1927,121.png,Attejari,Clarice Blanc,0 -7577,17,28, ,8872,88.png,Attejari,Chapin Auger,0 -7578,26,11,Four Thousand Three Hundred and Sixty Three,5631,Nan,Attejari,Jens Egger,0 -7579,41,37,One Thousand and Nine, ,208.png,Attejari,Eva Davies,0 -7580,21,41,One Thousand Two Hundred and Fourteen,4384,Nan,Attejari,Germa de Geus,0 -7581,29,8,One Thousand Eight Hundred and Seventeen,2038,Nan,Attejari,Steffen Krueger,0 -7582,29,41,Three Hundred and Thirty Five, ,145.png,Attejari,Germa de Geus,0 -7583,13,20,Nine Hundred and Thirty Six,1925,Nan,Attejari,Seymour Patenaude,0 -7584,40,16,Seven Thousand Two Hundred and Thirty Seven,9311,Nan,Attejari,Searlas Grenier,0 -7585,22,25,Six Thousand Seven Hundred and Eighty One, ,114.png,Attejari,Fleurette Coudert,0 -7586,16,10, ,7392,84.png,Attejari,Stephan Schwab,0 -7587,29,21,Five Thousand Five Hundred and Sixty Eight,6444,Nan,Attejari,David Corbeil,0 -7588,19,6,Two Thousand Three Hundred and Thirty Seven,2708,Nan,Attejari,Abdul Qais Khouri,0 -7589,34,23,One Thousand Four Hundred and Forty Six,5581,Nan,Attejari,Thรฉrรจse Fortier,0 -7590,24,15,Four Hundred and Twenty,466,Nan,Attejari,Milenko Tkalcic,0 -7591,27,27,One Hundred and Sixty Two, ,138.png,Attejari,Colette Monjeau,0 -7592,23,38,Eight Hundred and Twenty Six,6192,Nan,Attejari,Freddie Reid,0 -7593,42,34,One Thousand Four Hundred and Forty Nine,1735,Nan,Attejari,Holly Martin,0 -7594,8,2,Eight Thousand Two Hundred and Two, ,43.png,Attejari,Chi Hsiao,0 -7595,22,29,One Thousand Five Hundred and Eighty Four,2012,Nan,Attejari,Hayden Bruce,0 -7596,15,33,Eight Thousand Two Hundred and Sixty Six,9793,Nan,Attejari,Eleanor Freeman,0 -7597,38,39,Nine Hundred and Forty Four,4831,Nan,Attejari,Katie Connor,0 -7598,39,35,Three Thousand Two Hundred and Seventy Four, ,196.png,Attejari,Elliot Humphreys,0 -7599,33,21, ,6885,168.png,Attejari,David Corbeil,0 -7600,40,40,Two Thousand and Fourteen, ,201.png,Attejari,David Howard,0 -7601,42,17,Two Thousand Four Hundred and Seventy Seven,6440,Nan,Attejari,Yolette Cloutier,0 -7602,43,13,One Thousand One Hundred and Ten,1138,Nan,Attejari,Petra Kovacic,0 -7603,32,19,Three Thousand Three Hundred and Forty,4708,Nan,Attejari,Franรงoise Lapierre,0 -7604,28,35,Five Hundred and Twenty Six,7408,Nan,Attejari,Elliot Humphreys,0 -7605,1,38,Three Thousand Six Hundred and Ninety Five,8826,Nan,Attejari,Freddie Reid,0 -7606,6,43,Two Thousand Seven Hundred and Eighty Eight, ,34.png,Attejari,Aruna Bekx,0 -7607,11,10,Six Hundred and Eleven,2308,Nan,Attejari,Stephan Schwab,0 -7608,15,6, ,1279,76.png,Attejari,Abdul Qais Khouri,0 -7609,21,8,Four Thousand One Hundred and Seventy Three, ,105.png,Attejari,Steffen Krueger,0 -7610,29,18, ,8939,148.png,Attejari,Edmee Pelletier,0 -7611,6,7,Nine Hundred and Ninety Eight,8066,Nan,Attejari,Hasna Bahiyaa Amari,0 -7612,11,4,Five Thousand Five Hundred and Ninety Nine,8211,Nan,Attejari,Wafiyah Nashwa Wasem,0 -7613,34,33,Three Thousand Six Hundred and Twenty,8014,Nan,Attejari,Eleanor Freeman,0 -7614,29,1, ,4167,147.png,Attejari,Emily D. Short,0 -7615,42,36,One Thousand One Hundred and Thirty Five,1159,Nan,Attejari,Thomas Chapman,0 -7616,40,29,Three Thousand and Five,3237,Nan,Attejari,Hayden Bruce,0 -7617,14,19,One Hundred and Fifty Five,920,Nan,Attejari,Franรงoise Lapierre,0 -7618,8,37,Three Thousand Four Hundred and Forty Seven, ,43.png,Attejari,Eva Davies,0 -7619,35,1, ,8471,176.png,Attejari,Emily D. Short,0 -7620,2,32,Three Thousand Two Hundred and Thirty Three,3499,Nan,Attejari,Chelsea Watson,0 -7621,42,11,Two Thousand Nine Hundred and Seventy Seven, ,210.png,Attejari,Jens Egger,0 -7622,31,6, ,7440,155.png,Attejari,Abdul Qais Khouri,0 -7623,41,11,Two Thousand One Hundred and Fifty Eight, ,209.png,Attejari,Jens Egger,0 -7624,29,27,Three Thousand Three Hundred and Ninety Seven, ,149.png,Attejari,Colette Monjeau,0 -7625,7,34,Three Thousand One Hundred and Forty,5785,Nan,Attejari,Holly Martin,0 -7626,4,23, ,6741,22.png,Attejari,Thรฉrรจse Fortier,0 -7627,5,40,One Hundred and Twelve,252,Nan,Attejari,David Howard,0 -7628,10,9, ,1746,51.png,Attejari,Maria Kalb,0 -7629,35,22,Three Thousand and Seventy Eight, ,177.png,Attejari,Eglantine Forest,0 -7630,28,7,Three Thousand Four Hundred and Fifty Four,6080,Nan,Attejari,Hasna Bahiyaa Amari,0 -7631,0,32,One Thousand Three Hundred and Ninety Six, ,0.png,Attejari,Chelsea Watson,0 -7632,29,37, ,5950,149.png,Attejari,Eva Davies,0 -7633,19,21,Two Thousand Four Hundred and Twenty Two, ,99.png,Attejari,David Corbeil,0 -7634,35,30,Two Thousand Six Hundred and Ninety Four, ,179.png,Attejari,Jodie Holden,0 -7635,24,27,Four Thousand Five Hundred and Two,9048,Nan,Attejari,Colette Monjeau,0 -7636,7,41,Five Thousand Two Hundred and Eighty Two,6935,Nan,Attejari,Germa de Geus,0 -7637,11,42,Six Thousand Two Hundred and Forty Five, ,55.png,Attejari,Brady Jamin,0 -7638,6,3,Four Thousand Four Hundred and One, ,34.png,Attejari,Jiang Li Tao,0 -7639,16,13,Six Thousand Nine Hundred and Fifty,8981,Nan,Attejari,Petra Kovacic,0 -7640,38,38, ,8640,194.png,Attejari,Freddie Reid,0 -7641,39,31,One Thousand Three Hundred and Thirty Two, ,199.png,Attejari,Naomi Grant,0 -7642,5,37,One Thousand One Hundred and Nineteen, ,26.png,Attejari,Eva Davies,0 -7643,20,35,Five Hundred and Fifty Three,568,Nan,Attejari,Elliot Humphreys,0 -7644,10,10,One Thousand Three Hundred and Thirty Four,3578,Nan,Attejari,Stephan Schwab,0 -7645,19,25,Three Hundred and Eighty Five,788,Nan,Attejari,Fleurette Coudert,0 -7646,22,10,Three Hundred and Fifty Five,1061,Nan,Attejari,Stephan Schwab,0 -7647,16,35, ,145,80.png,Attejari,Elliot Humphreys,0 -7648,17,37,Five Hundred and Twenty Nine,3248,Nan,Attejari,Eva Davies,0 -7649,27,3, ,9652,139.png,Attejari,Jiang Li Tao,0 -7650,18,36,One Thousand Two Hundred and Eighty Eight, ,91.png,Attejari,Thomas Chapman,0 -7651,12,4, ,7651,64.png,Attejari,Wafiyah Nashwa Wasem,0 -7652,31,28,Six Thousand Three Hundred and Seventy Seven, ,157.png,Attejari,Chapin Auger,0 -7653,41,12,Seventy Eight,2000,Nan,Attejari,Marcel Achen,0 -7654,30,11,Two Hundred and Seventy Five,7882,Nan,Attejari,Jens Egger,0 -7655,19,17,Two Thousand Five Hundred and Fifty Three,3359,Nan,Attejari,Yolette Cloutier,0 -7656,31,34,Three Thousand Seven Hundred and Seventy Four,5453,Nan,Attejari,Holly Martin,0 -7657,40,7,Three Thousand Three Hundred and Ninety Nine, ,200.png,Attejari,Hasna Bahiyaa Amari,0 -7658,32,20, ,2881,160.png,Attejari,Seymour Patenaude,0 -7659,5,20,Six Thousand One Hundred and Thirty Two,9789,Nan,Attejari,Seymour Patenaude,0 -7660,11,33,One Thousand One Hundred and Seventy,4497,Nan,Attejari,Eleanor Freeman,0 -7661,2,42,Three Hundred and Thirty Three,352,Nan,Attejari,Brady Jamin,0 -7662,29,31, ,2493,148.png,Attejari,Naomi Grant,0 -7663,40,42,Nine Hundred and Sixty Eight,1390,Nan,Attejari,Brady Jamin,0 -7664,13,36,Eight Hundred and Twelve,4055,Nan,Attejari,Thomas Chapman,0 -7665,34,9,Three Thousand Five Hundred and Sixty Four,3973,Nan,Attejari,Maria Kalb,0 -7666,35,43,Four Thousand Two Hundred and Thirty One,7274,Nan,Attejari,Aruna Bekx,0 -7667,42,9,Six Hundred and Ninety Eight, ,214.png,Attejari,Maria Kalb,0 -7668,31,9,One Thousand Two Hundred and Twenty Four,4000,Nan,Attejari,Maria Kalb,0 -7669,4,19,Six Thousand One Hundred and Five, ,20.png,Attejari,Franรงoise Lapierre,0 -7670,24,43,Three Thousand Seven Hundred and Thirty Four,4727,Nan,Attejari,Aruna Bekx,0 -7671,0,30,One Thousand and Ninety Three,2178,Nan,Attejari,Jodie Holden,0 -7672,35,2, ,853,177.png,Attejari,Chi Hsiao,0 -7673,39,14, ,1136,196.png,Attejari,Renata Lukic,0 -7674,0,24,One Thousand Five Hundred and Twenty, ,1.png,Attejari,Clarice Blanc,0 -7675,16,38,Nine Thousand Three Hundred and Forty Six,9941,Nan,Attejari,Freddie Reid,0 -7676,4,8,Five Thousand Nine Hundred and Eighty Two,7264,Nan,Attejari,Steffen Krueger,0 -7677,28,24,Two Thousand Nine Hundred and Thirty Two, ,143.png,Attejari,Clarice Blanc,0 -7678,11,34, ,9425,58.png,Attejari,Holly Martin,0 -7679,39,18,One Thousand Five Hundred and Ninety Nine,7463,Nan,Attejari,Edmee Pelletier,0 -7680,25,43, ,2453,129.png,Attejari,Aruna Bekx,0 -7681,15,32,Four Thousand Six Hundred and Forty Three,5119,Nan,Attejari,Chelsea Watson,0 -7682,12,30, ,6281,60.png,Attejari,Jodie Holden,0 -7683,43,13,Forty Two,47,Nan,Attejari,Petra Kovacic,0 -7684,5,39,Five Thousand Two Hundred and Forty Nine, ,29.png,Attejari,Katie Connor,0 -7685,27,21,One Thousand Five Hundred and Ninety,8855,Nan,Attejari,David Corbeil,0 -7686,14,21, ,2648,73.png,Attejari,David Corbeil,0 -7687,42,23,Six Thousand Two Hundred and Sixty Nine,6442,Nan,Attejari,Thรฉrรจse Fortier,0 -7688,9,36,Four Hundred and Eighty Two,611,Nan,Attejari,Thomas Chapman,0 -7689,31,20, ,9639,156.png,Attejari,Seymour Patenaude,0 -7690,28,33, ,8505,144.png,Attejari,Eleanor Freeman,0 -7691,10,27,Six Hundred and Twenty Eight, ,50.png,Attejari,Colette Monjeau,0 -7692,42,29,Three Thousand Five Hundred and Thirty Six, ,211.png,Attejari,Hayden Bruce,0 -7693,8,23,Seven Hundred and Ninety Two,5701,Nan,Attejari,Thรฉrรจse Fortier,0 -7694,28,2,One Thousand Nine Hundred and Forty One, ,142.png,Attejari,Chi Hsiao,0 -7695,7,3,One Thousand Seven Hundred and Fifty Five,5645,Nan,Attejari,Jiang Li Tao,0 -7696,35,4,Seven Hundred and Twenty One, ,176.png,Attejari,Wafiyah Nashwa Wasem,0 -7697,37,17,Three Thousand and Thirty Six,3922,Nan,Attejari,Yolette Cloutier,0 -7698,29,32,Two Thousand One Hundred and Eighty Five,3853,Nan,Attejari,Chelsea Watson,0 -7699,14,15,Two Thousand Six Hundred and Eighty Four, ,71.png,Attejari,Milenko Tkalcic,0 -7700,26,37,Two Thousand Six Hundred, ,133.png,Attejari,Eva Davies,0 -7701,2,20,Thre Thousand Nine Hundred and Twenty,3920,14.png,Attejari,Seymour Patenaude,1 -7702,12,6,Nine Thousand On Hundred and Ninety Six,9196,64.png,Attejari,Abdul Qais Khouri,1 -7703,29,29,Nine Thousand Six Hundred and Eihty Five,9685,147.png,Attejari,Hayden Bruce,1 -7704,14,0,Six Thousand and Thirty On,6031,73.png,Attejari,Ethel M. Bryson,1 -7705,36,33,For Thousand and Ninety Eigt,4098,183.png,Attejari,Eleanor Freeman,1 -7706,9,23,On Thousand Eigt Hundred and Twenty On,1821,49.png,Attejari,Thรฉrรจse Fortier,1 -7707,35,9,Five Thousand Seven Hundred and Thirty For,5734,178.png,Attejari,Maria Kalb,1 -7708,30,22,Nine Hundred and Eihty For,984,152.png,Attejari,Eglantine Forest,1 -7709,27,36,For Thousand Six Hundred and Fifty Six,4656,137.png,Attejari,Thomas Chapman,1 -7710,2,0,Thre Thousand Eigt Hundred and Eihty For,3884,14.png,Attejari,Ethel M. Bryson,1 -7711,18,8,Eigt Thousand Two Hundred and Foty On,8241,94.png,Attejari,Steffen Krueger,1 -7712,35,31,Five Thousand Six Hundred and Fifty,5650,177.png,Attejari,Naomi Grant,1 -7713,23,43,Seven Thousand Nine Hundred and Fifty Nine,7959,119.png,Attejari,Aruna Bekx,1 -7714,37,19,Seven Thousand On Hundred and Sixt Nine,7169,186.png,Attejari,Franรงoise Lapierre,1 -7715,21,11,Seven Thousand and Two,7002,108.png,Attejari,Jens Egger,1 -7716,40,5,Nine Thousand and Fiteen,9015,203.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7717,16,23,Five Thousand Two Hundred and Fifty Seven,5257,83.png,Attejari,Thรฉrรจse Fortier,1 -7718,14,37,Five Thousand Six Hundred and Eihty For,5684,72.png,Attejari,Eva Davies,1 -7719,42,33,Five Thousand Thre Hundred and Fifty Nine,5359,210.png,Attejari,Eleanor Freeman,1 -7720,41,10,Two Thousand Eigt Hundred and Foty On,2841,205.png,Attejari,Stephan Schwab,1 -7721,24,28,Five Thousand Thre Hundred and Fifty Eigt,5358,121.png,Attejari,Chapin Auger,1 -7722,35,34,Two Thousand For Hundred and Sixt For,2464,178.png,Attejari,Holly Martin,1 -7723,33,4,For Thousand Six Hundred and Seenty Six,4676,168.png,Attejari,Wafiyah Nashwa Wasem,1 -7724,25,20,On Thousand Six Hundred and Seenty On,1671,127.png,Attejari,Seymour Patenaude,1 -7725,36,19,Seven Thousand Seven Hundred and Thirty Five,7735,183.png,Attejari,Franรงoise Lapierre,1 -7726,29,6,Nine Thousand Five Hundred and Twenty On,9521,148.png,Attejari,Abdul Qais Khouri,1 -7727,14,38,For Thousand Six Hundred and Ninety Five,4695,71.png,Attejari,Freddie Reid,1 -7728,25,39,On Thousand Thre Hundred and Eihty Eigt,1388,128.png,Attejari,Katie Connor,1 -7729,18,12,Six Thousand Eigt Hundred and Thirty On,6831,91.png,Attejari,Marcel Achen,1 -7730,22,17,For Thousand Six Hundred and Twenty Five,4625,111.png,Attejari,Yolette Cloutier,1 -7731,27,9,On Thousand Two Hundred and Foty Two,1242,138.png,Attejari,Maria Kalb,1 -7732,25,43,Five Thousand On Hundred and Fifty,5150,126.png,Attejari,Aruna Bekx,1 -7733,32,4,Thre Thousand Eigt Hundred and Twenty,3820,164.png,Attejari,Wafiyah Nashwa Wasem,1 -7734,4,31,For Thousand Five Hundred and Sixt Nine,4569,24.png,Attejari,Naomi Grant,1 -7735,41,32,On Thousand Eigt Hundred and Fifty Eigt,1858,209.png,Attejari,Chelsea Watson,1 -7736,15,29,Two Thousand For Hundred and Fifty Five,2455,75.png,Attejari,Hayden Bruce,1 -7737,29,17,Nine Thousand Two Hundred and Eihty,9280,147.png,Attejari,Yolette Cloutier,1 -7738,23,21,Nine Thousand Eigt Hundred and Ninety Two,9892,116.png,Attejari,David Corbeil,1 -7739,32,14,Two Thousand Five Hundred and Eihteen,2518,164.png,Attejari,Renata Lukic,1 -7740,15,4,On Thousand For Hundred and Seenty Two,1472,76.png,Attejari,Wafiyah Nashwa Wasem,1 -7741,19,19,Seven Thousand For Hundred and Thre,7403,97.png,Attejari,Franรงoise Lapierre,1 -7742,3,11,Six Thousand and Eihteen,6018,15.png,Attejari,Jens Egger,1 -7743,29,43,On Thousand Nine Hundred and Seenty On,1971,145.png,Attejari,Aruna Bekx,1 -7744,20,23,Seven Thousand Nine Hundred and Fifty Six,7956,104.png,Attejari,Thรฉrรจse Fortier,1 -7745,36,6,Seven Thousand Two Hundred and Foty For,7244,182.png,Attejari,Abdul Qais Khouri,1 -7746,19,14,Eigt Thousand Eigt Hundred and Fifty Two,8852,97.png,Attejari,Renata Lukic,1 -7747,18,28,On Thousand Eigt Hundred and Ninety On,1891,90.png,Attejari,Chapin Auger,1 -7748,5,10,Six Thousand Five Hundred and Twenty Thre,6523,28.png,Attejari,Stephan Schwab,1 -7749,42,22,Two Thousand Seven Hundred and Seven,2707,214.png,Attejari,Eglantine Forest,1 -7750,20,21,Seven Thousand Nine Hundred,7900,102.png,Attejari,David Corbeil,1 -7751,25,2,Nine Hundred and Ninety On,991,128.png,Attejari,Chi Hsiao,1 -7752,8,23,Six Thousand Nine Hundred and Fifty Eigt,6958,43.png,Attejari,Thรฉrรจse Fortier,1 -7753,33,3,Seven Hundred and Eihty On,781,166.png,Attejari,Jiang Li Tao,1 -7754,40,34,Nine Hundred and Twenty,920,204.png,Attejari,Holly Martin,1 -7755,41,17,For Thousand On Hundred and Foty On,4141,208.png,Attejari,Yolette Cloutier,1 -7756,39,26,Thre Thousand On Hundred and Twenty Eigt,3128,197.png,Attejari,Sidney Lapointe,1 -7757,23,35,On Thousand Eigt Hundred and Ten,1810,115.png,Attejari,Elliot Humphreys,1 -7758,34,21,Two Thousand and Thirty Six,2036,174.png,Attejari,David Corbeil,1 -7759,40,9,Thre Thousand Five Hundred and Fifty Nine,3559,201.png,Attejari,Maria Kalb,1 -7760,8,38,Five Hundred and Eihteen,518,43.png,Attejari,Freddie Reid,1 -7761,30,39,Seven Thousand Seven Hundred and Thre,7703,153.png,Attejari,Katie Connor,1 -7762,38,31,For Thousand and Sixt Nine,4069,193.png,Attejari,Naomi Grant,1 -7763,41,33,Five Thousand Nine Hundred and Fifty Six,5956,209.png,Attejari,Eleanor Freeman,1 -7764,32,13,For Thousand Thre Hundred and On,4301,160.png,Attejari,Petra Kovacic,1 -7765,1,7,Thre Thousand For Hundred and Eihty,3480,8.png,Attejari,Hasna Bahiyaa Amari,1 -7766,15,18,Nine Thousand For Hundred and Fifty Eigt,9458,76.png,Attejari,Edmee Pelletier,1 -7767,1,24,Nine Thousand Eigt Hundred and Fifty Eigt,9858,9.png,Attejari,Clarice Blanc,1 -7768,32,29,Two Thousand and Eihty Seven,2087,164.png,Attejari,Hayden Bruce,1 -7769,36,22,Nine Hundred and Twenty Five,925,182.png,Attejari,Eglantine Forest,1 -7770,42,30,For Thousand Thre Hundred and Eihty For,4384,214.png,Attejari,Jodie Holden,1 -7771,12,19,Ninety Two,92,62.png,Attejari,Franรงoise Lapierre,1 -7772,11,32,Nine Thousand Thre Hundred and Twenty Eigt,9328,56.png,Attejari,Chelsea Watson,1 -7773,34,18,Thre Thousand Thre Hundred and Thirty Seven,3337,174.png,Attejari,Edmee Pelletier,1 -7774,21,16,On Thousand Five Hundred and Forteen,1514,109.png,Attejari,Searlas Grenier,1 -7775,17,15,Six Thousand Eigt Hundred and Seenty On,6871,86.png,Attejari,Milenko Tkalcic,1 -7776,13,23,Nine Thousand Two Hundred and Seenty Five,9275,65.png,Attejari,Thรฉrรจse Fortier,1 -7777,24,5,Eigt Thousand Nine Hundred and Sixt Eigt,8968,123.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7778,5,28,Nine Thousand,9000,28.png,Attejari,Chapin Auger,1 -7779,35,18,Nine Thousand Thre Hundred and Twenty Nine,9329,179.png,Attejari,Edmee Pelletier,1 -7780,15,43,Thre Thousand For Hundred and Eihty On,3481,79.png,Attejari,Aruna Bekx,1 -7781,13,3,Thre Hundred and Twenty For,324,68.png,Attejari,Jiang Li Tao,1 -7782,15,36,Five Thousand Six Hundred and Twenty For,5624,76.png,Attejari,Thomas Chapman,1 -7783,40,1,Six Thousand Five Hundred and Fifty Two,6552,201.png,Attejari,Emily D. Short,1 -7784,19,31,Eigt Thousand Thre Hundred and Eihty On,8381,96.png,Attejari,Naomi Grant,1 -7785,3,37,Eigt Hundred and Eihty Thre,883,18.png,Attejari,Eva Davies,1 -7786,32,35,Nine Thousand Five Hundred and Eihteen,9518,163.png,Attejari,Elliot Humphreys,1 -7787,1,29,Seven Thousand Seven Hundred and Ten,7710,9.png,Attejari,Hayden Bruce,1 -7788,22,7,Thre Thousand and Sixt Seven,3067,110.png,Attejari,Hasna Bahiyaa Amari,1 -7789,36,24,Thre Thousand On Hundred and Eihty Five,3185,184.png,Attejari,Clarice Blanc,1 -7790,4,18,Seven Hundred and Ninety Six,796,22.png,Attejari,Edmee Pelletier,1 -7791,13,7,Two Thousand and Sixt On,2061,67.png,Attejari,Hasna Bahiyaa Amari,1 -7792,13,12,Six Thousand Eigt Hundred and Seventeen,6817,69.png,Attejari,Marcel Achen,1 -7793,5,5,Six Thousand On Hundred and Fifty Two,6152,28.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7794,40,18,Eigt Thousand Six Hundred and Seenty,8670,204.png,Attejari,Edmee Pelletier,1 -7795,28,20,Nine Thousand On Hundred and Twenty For,9124,140.png,Attejari,Seymour Patenaude,1 -7796,30,7,Six Thousand On Hundred and Foty Eigt,6148,150.png,Attejari,Hasna Bahiyaa Amari,1 -7797,28,1,Eigt Thousand On Hundred and Twenty Nine,8129,140.png,Attejari,Emily D. Short,1 -7798,27,18,Thre Thousand and Foty Eigt,3048,136.png,Attejari,Edmee Pelletier,1 -7799,36,32,Eigt Thousand Five Hundred and Five,8505,180.png,Attejari,Chelsea Watson,1 -7800,11,3,Two Thousand Five Hundred and Seenty For,2574,56.png,Attejari,Jiang Li Tao,1 -7801,13,28,Seven Thousand Seven Hundred and Twenty For,7724,68.png,Attejari,Chapin Auger,1 -7802,27,13,Seven Thousand For Hundred and Foty,7440,138.png,Attejari,Petra Kovacic,1 -7803,2,2,Two Thousand On Hundred and Foty Thre,2143,13.png,Attejari,Chi Hsiao,1 -7804,18,32,Five Hundred and Fifty,550,94.png,Attejari,Chelsea Watson,1 -7805,11,30,On Thousand On Hundred and Seenty Five,1175,58.png,Attejari,Jodie Holden,1 -7806,17,13,Thre Thousand Five Hundred,3500,88.png,Attejari,Petra Kovacic,1 -7807,29,31,Six Thousand Eigt Hundred and Eihty,6880,148.png,Attejari,Naomi Grant,1 -7808,27,34,On Hundred and Fiteen,115,136.png,Attejari,Holly Martin,1 -7809,36,42,Seven Thousand Seven Hundred and Ninety Six,7796,184.png,Attejari,Brady Jamin,1 -7810,10,33,On Thousand On Hundred and Seventeen,1117,50.png,Attejari,Eleanor Freeman,1 -7811,4,20,For Thousand and Foty Thre,4043,23.png,Attejari,Seymour Patenaude,1 -7812,18,8,For Thousand On Hundred and Eleven,4111,91.png,Attejari,Steffen Krueger,1 -7813,4,16,Six Thousand Five Hundred and Fifty,6550,20.png,Attejari,Searlas Grenier,1 -7814,7,10,Thre Thousand Seven Hundred and Thre,3703,38.png,Attejari,Stephan Schwab,1 -7815,7,40,Five Thousand Six Hundred and Ninety Eigt,5698,35.png,Attejari,David Howard,1 -7816,19,35,Six Thousand Thre Hundred and Eigt,6308,99.png,Attejari,Elliot Humphreys,1 -7817,5,27,For Thousand For Hundred and Foty On,4441,28.png,Attejari,Colette Monjeau,1 -7818,1,3,For Thousand Thre Hundred and Thirty Thre,4333,6.png,Attejari,Jiang Li Tao,1 -7819,2,39,Five Thousand Five Hundred and Foty Thre,5543,11.png,Attejari,Katie Connor,1 -7820,4,30,Eigt Thousand Two Hundred and Thirty Eigt,8238,21.png,Attejari,Jodie Holden,1 -7821,28,22,Seven Thousand Eigt Hundred and Twenty Two,7822,140.png,Attejari,Eglantine Forest,1 -7822,1,29,Seven Thousand and Ten,7010,5.png,Attejari,Hayden Bruce,1 -7823,41,8,On Thousand Eigt Hundred and Ninety Eigt,1898,205.png,Attejari,Steffen Krueger,1 -7824,34,30,For Thousand Nine Hundred and Seenty Seven,4977,170.png,Attejari,Jodie Holden,1 -7825,16,19,Thre Thousand Six Hundred and For,3604,81.png,Attejari,Franรงoise Lapierre,1 -7826,43,6,On Thousand Two Hundred and Sxten,1216,216.png,Attejari,Abdul Qais Khouri,1 -7827,28,7,On Thousand Seven Hundred and Eihty Seven,1787,140.png,Attejari,Hasna Bahiyaa Amari,1 -7828,5,15,Five Thousand Thre Hundred and Ninety On,5391,25.png,Attejari,Milenko Tkalcic,1 -7829,32,4,Seven Thousand Eigt Hundred and Foty Eigt,7848,163.png,Attejari,Wafiyah Nashwa Wasem,1 -7830,34,13,Eigt Thousand Seven Hundred and Fifty Five,8755,171.png,Attejari,Petra Kovacic,1 -7831,8,35,Eigt Thousand On Hundred and Seenty Five,8175,44.png,Attejari,Elliot Humphreys,1 -7832,21,16,Six Thousand and Fifty Thre,6053,108.png,Attejari,Searlas Grenier,1 -7833,0,5,Nine Thousand Two Hundred and Eihty Thre,9283,3.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7834,3,25,Eigt Thousand and Fifty Thre,8053,16.png,Attejari,Fleurette Coudert,1 -7835,39,10,Six Thousand Seven Hundred and Eihty On,6781,199.png,Attejari,Stephan Schwab,1 -7836,26,9,Six Thousand On Hundred and Ninety Seven,6197,133.png,Attejari,Maria Kalb,1 -7837,21,2,Nine Thousand Five Hundred and Eihty Thre,9583,107.png,Attejari,Chi Hsiao,1 -7838,42,32,Eigt Thousand Two Hundred and Seenty,8270,212.png,Attejari,Chelsea Watson,1 -7839,13,29,Six Thousand Seven Hundred and Foty Five,6745,68.png,Attejari,Hayden Bruce,1 -7840,32,20,Five Thousand Seven Hundred and Ninety Six,5796,163.png,Attejari,Seymour Patenaude,1 -7841,5,11,On Thousand Two Hundred and Ninety Seven,1297,27.png,Attejari,Jens Egger,1 -7842,16,43,Five Thousand Seven Hundred and Fifty Six,5756,80.png,Attejari,Aruna Bekx,1 -7843,20,20,Nine Thousand and Thirty Six,9036,103.png,Attejari,Seymour Patenaude,1 -7844,7,25,On Thousand Nine Hundred and Eihty Five,1985,35.png,Attejari,Fleurette Coudert,1 -7845,10,11,Eigt Thousand and Sxten,8016,54.png,Attejari,Jens Egger,1 -7846,28,36,For Thousand Thre Hundred and Eleven,4311,142.png,Attejari,Thomas Chapman,1 -7847,33,3,Six Thousand Two Hundred and Twenty Five,6225,167.png,Attejari,Jiang Li Tao,1 -7848,9,39,Two Thousand Thre Hundred and Foty For,2344,47.png,Attejari,Katie Connor,1 -7849,35,16,Five Thousand Six Hundred and Thre,5603,178.png,Attejari,Searlas Grenier,1 -7850,0,9,Seven Thousand On Hundred and Nineten,7119,1.png,Attejari,Maria Kalb,1 -7851,20,22,Nine Thousand Eigt Hundred and Ninety Six,9896,103.png,Attejari,Eglantine Forest,1 -7852,12,26,Seven Thousand For Hundred and Ninety Eigt,7498,60.png,Attejari,Sidney Lapointe,1 -7853,30,3,Seven Thousand Two Hundred and Twenty Seven,7227,151.png,Attejari,Jiang Li Tao,1 -7854,10,7,Nine Thousand For Hundred and Ninety Two,9492,51.png,Attejari,Hasna Bahiyaa Amari,1 -7855,31,4,Eigt Thousand Eigt Hundred and Twenty Five,8825,158.png,Attejari,Wafiyah Nashwa Wasem,1 -7856,24,15,Thre Thousand and Sixt Seven,3067,122.png,Attejari,Milenko Tkalcic,1 -7857,18,38,On Thousand For Hundred and Eihty Five,1485,91.png,Attejari,Freddie Reid,1 -7858,9,13,Seven Hundred and Seenty Seven,777,47.png,Attejari,Petra Kovacic,1 -7859,42,19,For Thousand Seven Hundred and Fiteen,4715,213.png,Attejari,Franรงoise Lapierre,1 -7860,0,13,Thre Thousand On Hundred and Eihty Thre,3183,4.png,Attejari,Petra Kovacic,1 -7861,9,24,Six Thousand Thre Hundred and Twenty Nine,6329,46.png,Attejari,Clarice Blanc,1 -7862,34,11,Six Thousand and Ninety Six,6096,170.png,Attejari,Jens Egger,1 -7863,14,35,Seven Thousand Seven Hundred and Sixt Two,7762,71.png,Attejari,Elliot Humphreys,1 -7864,8,1,Seven Thousand Nine Hundred and Twenty On,7921,41.png,Attejari,Emily D. Short,1 -7865,39,5,On,1,195.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7866,13,18,Seven Thousand For Hundred and Two,7402,67.png,Attejari,Edmee Pelletier,1 -7867,14,19,Six Thousand Two Hundred and Sxten,6216,72.png,Attejari,Franรงoise Lapierre,1 -7868,13,14,Two Hundred,200,67.png,Attejari,Renata Lukic,1 -7869,38,39,Two Thousand On Hundred and Sxten,2116,190.png,Attejari,Katie Connor,1 -7870,35,21,Seven Thousand Two Hundred and Eihty Nine,7289,176.png,Attejari,David Corbeil,1 -7871,30,26,Thre Thousand For Hundred and Ninety,3490,154.png,Attejari,Sidney Lapointe,1 -7872,26,27,Thre Thousand and Ninety Six,3096,130.png,Attejari,Colette Monjeau,1 -7873,35,18,Two Thousand Eigt Hundred and Fifty Eigt,2858,176.png,Attejari,Edmee Pelletier,1 -7874,4,26,Nine Hundred and Two,902,22.png,Attejari,Sidney Lapointe,1 -7875,23,36,Thre Hundred and Two,302,119.png,Attejari,Thomas Chapman,1 -7876,24,28,Eigt Thousand Two Hundred and Sixt,8260,121.png,Attejari,Chapin Auger,1 -7877,17,3,On Thousand Five Hundred and Twenty Six,1526,85.png,Attejari,Jiang Li Tao,1 -7878,21,34,For Thousand and Ten,4010,108.png,Attejari,Holly Martin,1 -7879,32,21,Six Thousand Seven Hundred and Fifty For,6754,162.png,Attejari,David Corbeil,1 -7880,42,29,Seven Thousand For Hundred and Fifty Eigt,7458,210.png,Attejari,Hayden Bruce,1 -7881,22,27,Two Thousand Two Hundred and Seenty Thre,2273,111.png,Attejari,Colette Monjeau,1 -7882,40,35,Six Thousand Eigt Hundred and For,6804,201.png,Attejari,Elliot Humphreys,1 -7883,4,15,Five Thousand For Hundred and Ninety Eigt,5498,24.png,Attejari,Milenko Tkalcic,1 -7884,23,17,On Thousand Five Hundred and Thirty Eigt,1538,118.png,Attejari,Yolette Cloutier,1 -7885,33,30,Seven Thousand and Fifty Nine,7059,168.png,Attejari,Jodie Holden,1 -7886,17,21,On Thousand Eigt Hundred and Seenty,1870,87.png,Attejari,David Corbeil,1 -7887,36,5,For Thousand Eigt Hundred and Twenty Two,4822,180.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7888,2,37,Two Thousand Nine Hundred and Fifty Eigt,2958,12.png,Attejari,Eva Davies,1 -7889,25,0,Eigt Thousand Seven Hundred and Foty Nine,8749,128.png,Attejari,Ethel M. Bryson,1 -7890,17,41,Thre Thousand Seven Hundred and Eihty Nine,3789,87.png,Attejari,Germa de Geus,1 -7891,29,10,Six Thousand and Ninety Two,6092,147.png,Attejari,Stephan Schwab,1 -7892,26,24,Thre Thousand Seven Hundred and Seenty For,3774,130.png,Attejari,Clarice Blanc,1 -7893,12,43,Thre Thousand Five Hundred and Two,3502,61.png,Attejari,Aruna Bekx,1 -7894,8,32,Nine Thousand Six Hundred and Thirty Five,9635,43.png,Attejari,Chelsea Watson,1 -7895,29,35,For Thousand and Seenty Thre,4073,146.png,Attejari,Elliot Humphreys,1 -7896,9,17,Two Hundred and Six,206,46.png,Attejari,Yolette Cloutier,1 -7897,43,1,Seven Thousand Nine Hundred and Sxten,7916,219.png,Attejari,Emily D. Short,1 -7898,10,36,Thre Thousand Eigt Hundred and Sixt On,3861,51.png,Attejari,Thomas Chapman,1 -7899,24,39,Six Thousand Two Hundred and Seenty On,6271,124.png,Attejari,Katie Connor,1 -7900,20,0,Six Thousand Eigt Hundred and Foty Nine,6849,101.png,Attejari,Ethel M. Bryson,1 -7901,28,31,On Thousand For Hundred and Thre,1403,143.png,Attejari,Naomi Grant,1 -7902,23,2,Six Thousand Eigt Hundred and For,6804,118.png,Attejari,Chi Hsiao,1 -7903,34,19,Six Thousand Six Hundred and Foty,6640,172.png,Attejari,Franรงoise Lapierre,1 -7904,41,27,Five Thousand Eigt Hundred and Sixt On,5861,205.png,Attejari,Colette Monjeau,1 -7905,12,14,Two Thousand Five Hundred and Foty Thre,2543,63.png,Attejari,Renata Lukic,1 -7906,34,7,Six Thousand Two Hundred and Thirty On,6231,173.png,Attejari,Hasna Bahiyaa Amari,1 -7907,38,4,Two Thousand Six Hundred and Foty Nine,2649,190.png,Attejari,Wafiyah Nashwa Wasem,1 -7908,22,1,Seven Thousand and Eihty Five,7085,111.png,Attejari,Emily D. Short,1 -7909,20,40,On Thousand On Hundred and Fifty Eigt,1158,101.png,Attejari,David Howard,1 -7910,38,19,On Thousand On Hundred and Twenty Five,1125,193.png,Attejari,Franรงoise Lapierre,1 -7911,14,28,Seven Thousand On Hundred and Fifty Nine,7159,74.png,Attejari,Chapin Auger,1 -7912,6,0,On Thousand Nine Hundred and Ninety,1990,31.png,Attejari,Ethel M. Bryson,1 -7913,26,40,Thre Thousand Five Hundred and Twenty For,3524,133.png,Attejari,David Howard,1 -7914,25,13,Seven Thousand Seven Hundred and Sixt Five,7765,127.png,Attejari,Petra Kovacic,1 -7915,25,8,Two Thousand For Hundred and For,2404,125.png,Attejari,Steffen Krueger,1 -7916,13,24,Nine Thousand Five Hundred and Foty Thre,9543,68.png,Attejari,Clarice Blanc,1 -7917,37,10,Seven Thousand Seven Hundred and Sixt On,7761,185.png,Attejari,Stephan Schwab,1 -7918,26,20,Nine Thousand Nine Hundred and Sixt Nine,9969,132.png,Attejari,Seymour Patenaude,1 -7919,29,21,For Thousand Thre Hundred and Nine,4309,146.png,Attejari,David Corbeil,1 -7920,32,4,Six Thousand Six Hundred and Seenty Six,6676,160.png,Attejari,Wafiyah Nashwa Wasem,1 -7921,30,19,On Thousand On Hundred and Twenty For,1124,153.png,Attejari,Franรงoise Lapierre,1 -7922,9,0,Seven Thousand Thre Hundred and Fifty Eigt,7358,47.png,Attejari,Ethel M. Bryson,1 -7923,42,4,For Thousand Five Hundred and Seventeen,4517,210.png,Attejari,Wafiyah Nashwa Wasem,1 -7924,21,4,Two Thousand Seven Hundred and Ninety Nine,2799,105.png,Attejari,Wafiyah Nashwa Wasem,1 -7925,35,5,Nine Thousand Thre Hundred and Twenty Thre,9323,177.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7926,12,33,Six Thousand Nine Hundred and Eihty Nine,6989,63.png,Attejari,Eleanor Freeman,1 -7927,9,21,Six Thousand Six Hundred and Twenty Seven,6627,48.png,Attejari,David Corbeil,1 -7928,32,26,Seven Thousand On Hundred and Fiteen,7115,162.png,Attejari,Sidney Lapointe,1 -7929,43,11,Six Thousand Nine Hundred and Seenty Two,6972,215.png,Attejari,Jens Egger,1 -7930,21,29,Eigt Thousand Six Hundred and For,8604,107.png,Attejari,Hayden Bruce,1 -7931,36,5,Thre Thousand For Hundred and Thirty On,3431,180.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7932,41,17,Nine Thousand and Twenty Eigt,9028,207.png,Attejari,Yolette Cloutier,1 -7933,32,3,Nine Thousand For Hundred and Twenty Eigt,9428,162.png,Attejari,Jiang Li Tao,1 -7934,34,16,For Thousand On Hundred and Thirty Six,4136,171.png,Attejari,Searlas Grenier,1 -7935,37,39,Thre Thousand For Hundred and Thirty For,3434,189.png,Attejari,Katie Connor,1 -7936,34,14,Six Hundred and Thirty For,634,172.png,Attejari,Renata Lukic,1 -7937,43,33,On Thousand Thre Hundred and Foty Eigt,1348,217.png,Attejari,Eleanor Freeman,1 -7938,10,2,Thre Thousand On Hundred,3100,53.png,Attejari,Chi Hsiao,1 -7939,28,36,Six Hundred and Foty Nine,649,143.png,Attejari,Thomas Chapman,1 -7940,34,24,Two Thousand Seven Hundred and Seenty For,2774,174.png,Attejari,Clarice Blanc,1 -7941,7,18,Five Thousand Nine Hundred and For,5904,36.png,Attejari,Edmee Pelletier,1 -7942,13,36,Nine Thousand Five Hundred and Two,9502,69.png,Attejari,Thomas Chapman,1 -7943,11,37,Seven Thousand On Hundred and Seventeen,7117,55.png,Attejari,Eva Davies,1 -7944,28,18,For Thousand Five Hundred and Twenty Six,4526,140.png,Attejari,Edmee Pelletier,1 -7945,13,21,Nine Thousand On Hundred and Twenty Nine,9129,66.png,Attejari,David Corbeil,1 -7946,5,31,Five Thousand Nine Hundred and Seenty For,5974,27.png,Attejari,Naomi Grant,1 -7947,42,15,Two Thousand Seven Hundred and Foty Nine,2749,210.png,Attejari,Milenko Tkalcic,1 -7948,25,43,Seven Thousand and Thirty On,7031,126.png,Attejari,Aruna Bekx,1 -7949,27,13,Seven Thousand Five Hundred and Eigt,7508,135.png,Attejari,Petra Kovacic,1 -7950,21,2,For Thousand Nine Hundred and Eihteen,4918,109.png,Attejari,Chi Hsiao,1 -7951,2,30,Two Thousand Seven Hundred and Five,2705,11.png,Attejari,Jodie Holden,1 -7952,3,33,Thre Thousand Nine Hundred and Fifty Nine,3959,19.png,Attejari,Eleanor Freeman,1 -7953,12,5,Eigt Thousand Six Hundred and Nineten,8619,64.png,Attejari,Fawwaz Zuhayr Mustafa,1 -7954,31,0,Eihty Seven,87,155.png,Attejari,Ethel M. Bryson,1 -7955,10,23,Thre Thousand Six Hundred and Seenty Eigt,3678,54.png,Attejari,Thรฉrรจse Fortier,1 -7956,10,27,Eigt Thousand On Hundred and Seenty Eigt,8178,52.png,Attejari,Colette Monjeau,1 -7957,30,41,Seven Thousand Nine Hundred and Sixt Five,7965,151.png,Attejari,Germa de Geus,1 -7958,32,19,Eigt Thousand Five Hundred and Thirty Five,8535,162.png,Attejari,Franรงoise Lapierre,1 -7959,23,22,Eigt Thousand Five Hundred and Twenty,8520,115.png,Attejari,Eglantine Forest,1 -7960,34,2,On Thousand Seven Hundred and Thirty,1730,172.png,Attejari,Chi Hsiao,1 -7961,18,19,Five Thousand Two Hundred and Sixt Nine,5269,91.png,Attejari,Franรงoise Lapierre,1 -7962,6,31,Eigt Thousand Thre Hundred and Ten,8310,31.png,Attejari,Naomi Grant,1 -7963,9,28,Nine Thousand Nine Hundred and Seenty Seven,9977,49.png,Attejari,Chapin Auger,1 -7964,14,26,Five Thousand Thre Hundred and Foty,5340,74.png,Attejari,Sidney Lapointe,1 -7965,20,29,Seven Thousand Eigt Hundred and Twenty For,7824,104.png,Attejari,Hayden Bruce,1 -7966,29,27,Seven Thousand Seven Hundred and Thirteen,7713,148.png,Attejari,Colette Monjeau,1 -7967,37,41,Six Thousand Five Hundred and Eihty,6580,185.png,Attejari,Germa de Geus,1 -7968,21,17,Eigt Thousand Nine Hundred and Thirty On,8931,107.png,Attejari,Yolette Cloutier,1 -7969,6,9,Six Thousand On Hundred and Eihty Two,6182,30.png,Attejari,Maria Kalb,1 -7970,24,4,Six Thousand Thre Hundred and Fifty Eigt,6358,120.png,Attejari,Wafiyah Nashwa Wasem,1 -7971,0,2,Nine Thousand Nine Hundred and Forteen,9914,2.png,Attejari,Chi Hsiao,1 -7972,16,32,Five Thousand Thre Hundred and Fifty On,5351,80.png,Attejari,Chelsea Watson,1 -7973,20,36,For Thousand Nine Hundred and Eleven,4911,104.png,Attejari,Thomas Chapman,1 -7974,9,39,Six Thousand Two Hundred and Six,6206,49.png,Attejari,Katie Connor,1 -7975,40,21,Eigt Thousand and Foty Thre,8043,202.png,Attejari,David Corbeil,1 -7976,39,2,For Thousand Six Hundred and Two,4602,195.png,Attejari,Chi Hsiao,1 -7977,28,9,On Thousand Seven Hundred,1700,142.png,Attejari,Maria Kalb,1 -7978,3,43,Five Thousand For Hundred and Eihty Five,5485,19.png,Attejari,Aruna Bekx,1 -7979,2,37,Sixt Two,62,10.png,Attejari,Eva Davies,1 -7980,23,25,For Thousand Five Hundred and Foty Eigt,4548,118.png,Attejari,Fleurette Coudert,1 -7981,23,23,Eigt Hundred and Seventeen,817,115.png,Attejari,Thรฉrรจse Fortier,1 -7982,14,22,Six Hundred and Seenty On,671,74.png,Attejari,Eglantine Forest,1 -7983,31,21,Thre Hundred and Nine,309,156.png,Attejari,David Corbeil,1 -7984,14,41,Six Thousand Nine Hundred and Seenty For,6974,71.png,Attejari,Germa de Geus,1 -7985,23,20,Six Thousand and Eigt,6008,118.png,Attejari,Seymour Patenaude,1 -7986,1,15,Six Thousand Thre Hundred and Seenty Five,6375,9.png,Attejari,Milenko Tkalcic,1 -7987,24,19,Seven Thousand For Hundred and Seenty Two,7472,122.png,Attejari,Franรงoise Lapierre,1 -7988,34,23,Two Thousand Thre Hundred,2300,170.png,Attejari,Thรฉrรจse Fortier,1 -7989,34,34,On Thousand For Hundred and Seenty Thre,1473,173.png,Attejari,Holly Martin,1 -7990,33,10,On Thousand Six Hundred and Eihty For,1684,165.png,Attejari,Stephan Schwab,1 -7991,42,29,Eigt Thousand Nine Hundred and Thirty On,8931,211.png,Attejari,Hayden Bruce,1 -7992,33,1,Two Thousand Seven Hundred and Thre,2703,165.png,Attejari,Emily D. Short,1 -7993,33,19,Thre Hundred and Twenty Two,322,165.png,Attejari,Franรงoise Lapierre,1 -7994,42,12,Six Thousand For Hundred and Sixt Six,6466,212.png,Attejari,Marcel Achen,1 -7995,35,17,For Thousand Nine Hundred and Foty Two,4942,176.png,Attejari,Yolette Cloutier,1 -7996,40,2,For Thousand On Hundred and Sixt Six,4166,201.png,Attejari,Chi Hsiao,1 -7997,24,29,For Thousand Nine Hundred and Five,4905,121.png,Attejari,Hayden Bruce,1 -7998,22,33,Thre Thousand Thre Hundred and Seenty Thre,3373,111.png,Attejari,Eleanor Freeman,1 -7999,3,29,Six Thousand Two Hundred and Foty Eigt,6248,16.png,Attejari,Hayden Bruce,1 -8000,15,29,Thre Thousand Five Hundred and Seenty For,3574,75.png,Attejari,Hayden Bruce,1 -8001,10,7,Nine Thousand Five Hundred and Thirty Four,9534,53.png,Biat,Hasna Bahiyaa Amari,1 -8002,15,41,Seven Thousand Four Hundred and Sixty One,7461,78.png,Biat,Germa de Geus,1 -8003,23,20,Five Thousand Five Hundred and Twenty Four,5524,119.png,Biat,Seymour Patenaude,1 -8004,24,43,One Thousand Eight Hundred and Eighty Two,1882,120.png,Biat,Aruna Bekx,1 -8005,19,1,Fifty Three,53,96.png,Biat,Emily D. Short,1 -8006,29,0,Eight Thousand Eight Hundred and Fourteen,8814,149.png,Biat,Ethel M. Bryson,1 -8007,41,32,One Thousand Seven Hundred and Sixty,1760,207.png,Biat,Chelsea Watson,1 -8008,41,36,Eight Thousand Six Hundred and Fifty Five,8655,206.png,Biat,Thomas Chapman,1 -8009,21,38,Three Thousand Five Hundred and Twenty Two,3522,107.png,Biat,Freddie Reid,1 -8010,13,24,Three Thousand Nine Hundred and Eighty Five,3985,69.png,Biat,Clarice Blanc,1 -8011,30,5,Eight Thousand Nine Hundred and Sixty Four,8964,154.png,Biat,Fawwaz Zuhayr Mustafa,1 -8012,43,36,Three Thousand Four Hundred and Thirty Eight,3438,218.png,Biat,Thomas Chapman,1 -8013,13,1,Five Thousand Two Hundred and Six,5206,66.png,Biat,Emily D. Short,1 -8014,4,41,Two Thousand Four Hundred and Twenty One,2421,23.png,Biat,Germa de Geus,1 -8015,20,43,Six Thousand Five Hundred and Eighty,6580,102.png,Biat,Aruna Bekx,1 -8016,0,40,Five Thousand Eight Hundred and Fifty Five,5855,1.png,Biat,David Howard,1 -8017,4,10,Four Thousand Four Hundred and Fourteen,4414,24.png,Biat,Stephan Schwab,1 -8018,20,37,Six Thousand Seven Hundred and Sixty Eight,6768,104.png,Biat,Eva Davies,1 -8019,36,42,Five Thousand One Hundred and Thirty Seven,5137,180.png,Biat,Brady Jamin,1 -8020,38,38,Two Thousand Three Hundred and Thirty Seven,2337,190.png,Biat,Freddie Reid,1 -8021,9,37,Six Thousand Five Hundred and Sixty Nine,6569,46.png,Biat,Eva Davies,1 -8022,3,9,Six Thousand Three Hundred and Fourteen,6314,15.png,Biat,Maria Kalb,1 -8023,32,11,Eight Thousand Five Hundred and Three,8503,160.png,Biat,Jens Egger,1 -8024,11,7,Three Hundred and Thirty Nine,339,59.png,Biat,Hasna Bahiyaa Amari,1 -8025,7,6,Two Thousand Six Hundred and Forty Two,2642,38.png,Biat,Abdul Qais Khouri,1 -8026,5,9,Nine Thousand Four Hundred and Fifty,9450,29.png,Biat,Maria Kalb,1 -8027,3,23,Two Thousand and Twenty Eight,2028,19.png,Biat,Thรฉrรจse Fortier,1 -8028,39,21,Three Thousand and Forty Seven,3047,198.png,Biat,David Corbeil,1 -8029,11,24,Two Hundred and Ninety Seven,297,55.png,Biat,Clarice Blanc,1 -8030,11,43,Nine Thousand Two Hundred and Thirty Eight,9238,58.png,Biat,Aruna Bekx,1 -8031,36,43,Nine Thousand Nine Hundred and Twenty Seven,9927,181.png,Biat,Aruna Bekx,1 -8032,27,24,Nine Thousand Seven Hundred and Forty Four,9744,136.png,Biat,Clarice Blanc,1 -8033,0,1,Eight Thousand Two Hundred and Thirty Two,8232,3.png,Biat,Emily D. Short,1 -8034,19,14,One Thousand Seven Hundred and Eighty Four,1784,98.png,Biat,Renata Lukic,1 -8035,4,16,Seven Thousand Eight Hundred and Sixty Six,7866,22.png,Biat,Searlas Grenier,1 -8036,20,4,Two Thousand Two Hundred and Sixty Four,2264,101.png,Biat,Wafiyah Nashwa Wasem,1 -8037,21,39,Two Thousand Five Hundred and Fourteen,2514,107.png,Biat,Katie Connor,1 -8038,3,1,Three Thousand One Hundred and Six,3106,16.png,Biat,Emily D. Short,1 -8039,29,17,Four Thousand Two Hundred and Twenty Eight,4228,146.png,Biat,Yolette Cloutier,1 -8040,3,30,Two Thousand Six Hundred and Seventy Two,2672,15.png,Biat,Jodie Holden,1 -8041,25,29,Seven Thousand Two Hundred and Forty Eight,7248,128.png,Biat,Hayden Bruce,1 -8042,11,17,One Thousand and Ninety Nine,1099,59.png,Biat,Yolette Cloutier,1 -8043,2,27,One Hundred and Fifty Four,154,13.png,Biat,Colette Monjeau,1 -8044,32,30,Four Thousand Six Hundred and Forty,4640,164.png,Biat,Jodie Holden,1 -8045,5,36,Three Thousand and Forty Four,3044,28.png,Biat,Thomas Chapman,1 -8046,34,43,Four Thousand One Hundred and Ninety Four,4194,173.png,Biat,Aruna Bekx,1 -8047,33,32,Eight Thousand Two Hundred and Seventy Five,8275,169.png,Biat,Chelsea Watson,1 -8048,20,19,Eight Thousand Three Hundred and Twelve,8312,102.png,Biat,Franรงoise Lapierre,1 -8049,18,11,Six Thousand Three Hundred and Three,6303,94.png,Biat,Jens Egger,1 -8050,20,42,Two Thousand Eight Hundred and Eighty Five,2885,102.png,Biat,Brady Jamin,1 -8051,14,43,Six Thousand and Ninety,6090,71.png,Biat,Aruna Bekx,1 -8052,16,17,Nine Thousand Three Hundred and Sixteen,9316,82.png,Biat,Yolette Cloutier,1 -8053,8,19,Eight Thousand Three Hundred and Eighty Eight,8388,42.png,Biat,Franรงoise Lapierre,1 -8054,36,25,Two Thousand Nine Hundred and Thirty Nine,2939,181.png,Biat,Fleurette Coudert,1 -8055,31,25,One Thousand Three Hundred and Fifty Eight,1358,155.png,Biat,Fleurette Coudert,1 -8056,6,21,Four Thousand Four Hundred and Fifty Seven,4457,32.png,Biat,David Corbeil,1 -8057,2,12,Three Thousand One Hundred and Ninety One,3191,11.png,Biat,Marcel Achen,1 -8058,11,26,Seven Thousand and Eighty Six,7086,58.png,Biat,Sidney Lapointe,1 -8059,25,39,One Thousand Two Hundred and Thirty,1230,127.png,Biat,Katie Connor,1 -8060,25,43,Eight Hundred and Ninety Seven,897,125.png,Biat,Aruna Bekx,1 -8061,5,34,Five Thousand Nine Hundred and Forty One,5941,28.png,Biat,Holly Martin,1 -8062,32,28,Five Thousand Two Hundred and Eighty Two,5282,164.png,Biat,Chapin Auger,1 -8063,32,30,Eight Thousand Eight Hundred and Eight,8808,160.png,Biat,Jodie Holden,1 -8064,11,23,Three Thousand Five Hundred and Ninety Three,3593,55.png,Biat,Thรฉrรจse Fortier,1 -8065,25,0,Five Thousand Two Hundred and Twenty Five,5225,128.png,Biat,Ethel M. Bryson,1 -8066,9,9,One Thousand and One,1001,47.png,Biat,Maria Kalb,1 -8067,27,41,One Thousand One Hundred and Six,1106,138.png,Biat,Germa de Geus,1 -8068,2,8,One Thousand Seven Hundred and Ten,1710,11.png,Biat,Steffen Krueger,1 -8069,28,25,One Thousand Nine Hundred and Twenty One,1921,144.png,Biat,Fleurette Coudert,1 -8070,2,24,Seven Thousand Two Hundred and Eleven,7211,14.png,Biat,Clarice Blanc,1 -8071,15,2,Four Thousand Five Hundred and Three,4503,77.png,Biat,Chi Hsiao,1 -8072,13,3,One Thousand One Hundred and Thirteen,1113,69.png,Biat,Jiang Li Tao,1 -8073,23,2,One Thousand Three Hundred and Thirty Four,1334,119.png,Biat,Chi Hsiao,1 -8074,4,5,Eight Thousand Five Hundred and Thirty Seven,8537,23.png,Biat,Fawwaz Zuhayr Mustafa,1 -8075,35,35,Eighty Nine,89,179.png,Biat,Elliot Humphreys,1 -8076,4,22,Four Thousand One Hundred and Seventy Three,4173,23.png,Biat,Eglantine Forest,1 -8077,6,27,Four Thousand Six Hundred and Seventy Four,4674,30.png,Biat,Colette Monjeau,1 -8078,12,39,Five Hundred and Seven,507,63.png,Biat,Katie Connor,1 -8079,16,10,Four Thousand Five Hundred and Sixty One,4561,82.png,Biat,Stephan Schwab,1 -8080,13,24,Eight Thousand Three Hundred and Thirty Nine,8339,69.png,Biat,Clarice Blanc,1 -8081,13,17,Five Thousand Six Hundred and Sixty Two,5662,68.png,Biat,Yolette Cloutier,1 -8082,14,28,Two Thousand and Fifty Two,2052,73.png,Biat,Chapin Auger,1 -8083,19,13,One Thousand Eight Hundred and Seventy,1870,98.png,Biat,Petra Kovacic,1 -8084,28,31,Nine Thousand and Fifty Eight,9058,140.png,Biat,Naomi Grant,1 -8085,31,28,Five Thousand Four Hundred and Eighty Five,5485,156.png,Biat,Chapin Auger,1 -8086,15,18,Seven Thousand Nine Hundred and Twenty Four,7924,75.png,Biat,Edmee Pelletier,1 -8087,43,16,Four Thousand Eight Hundred and Forty Nine,4849,215.png,Biat,Searlas Grenier,1 -8088,35,30,Nine Hundred and Seventy,970,175.png,Biat,Jodie Holden,1 -8089,22,25,Nine Thousand One Hundred and Fifteen,9115,112.png,Biat,Fleurette Coudert,1 -8090,30,21,Four Hundred and Seventy Seven,477,153.png,Biat,David Corbeil,1 -8091,34,20,Four Thousand Six Hundred and Fifty Five,4655,171.png,Biat,Seymour Patenaude,1 -8092,8,26,Six Thousand Two Hundred and Eighty,6280,43.png,Biat,Sidney Lapointe,1 -8093,42,41,One Thousand Two Hundred and Seventy Eight,1278,214.png,Biat,Germa de Geus,1 -8094,18,15,Seven Thousand Seven Hundred and Twelve,7712,91.png,Biat,Milenko Tkalcic,1 -8095,36,38,Seven Thousand Four Hundred and Seven,7407,182.png,Biat,Freddie Reid,1 -8096,3,34,Nine Thousand Two Hundred and Fifty Eight,9258,15.png,Biat,Holly Martin,1 -8097,11,41,Four Thousand Nine Hundred and Eighty,4980,55.png,Biat,Germa de Geus,1 -8098,0,4,Nine Thousand Five Hundred and Eighty Six,9586,0.png,Biat,Wafiyah Nashwa Wasem,1 -8099,4,15,Three Thousand Five Hundred and Six,3506,20.png,Biat,Milenko Tkalcic,1 -8100,11,5,Seven Thousand Four Hundred and Thirty Six,7436,56.png,Biat,Fawwaz Zuhayr Mustafa,1 -8101,20,7,Six Thousand One Hundred and Twelve,6112,103.png,Biat,Hasna Bahiyaa Amari,1 -8102,43,10,Seven Thousand Seven Hundred and Thirty Seven,7737,217.png,Biat,Stephan Schwab,1 -8103,12,19,Nine Thousand Eight Hundred and Sixty Five,9865,64.png,Biat,Franรงoise Lapierre,1 -8104,43,4,Five Thousand One Hundred and Eleven,5111,216.png,Biat,Wafiyah Nashwa Wasem,1 -8105,24,35,Nine Thousand Eight Hundred and Twenty Seven,9827,123.png,Biat,Elliot Humphreys,1 -8106,29,8,Nine Thousand Four Hundred and Seventy Five,9475,149.png,Biat,Steffen Krueger,1 -8107,40,29,One Thousand Four Hundred and Ninety Two,1492,200.png,Biat,Hayden Bruce,1 -8108,16,15,Five Thousand Four Hundred and Forty,5440,83.png,Biat,Milenko Tkalcic,1 -8109,12,3,One Thousand Seven Hundred and Eighty Four,1784,63.png,Biat,Jiang Li Tao,1 -8110,28,15,One Thousand Two Hundred and Eighty Seven,1287,143.png,Biat,Milenko Tkalcic,1 -8111,22,43,Six Thousand Eight Hundred and Sixty Nine,6869,112.png,Biat,Aruna Bekx,1 -8112,13,23,Eight Thousand Five Hundred and Thirty Five,8535,67.png,Biat,Thรฉrรจse Fortier,1 -8113,1,19,Two Thousand Four Hundred and Forty One,2441,8.png,Biat,Franรงoise Lapierre,1 -8114,34,4,Six Thousand Two Hundred and Thirty Two,6232,170.png,Biat,Wafiyah Nashwa Wasem,1 -8115,36,27,Eight Thousand One Hundred and Sixty Four,8164,182.png,Biat,Colette Monjeau,1 -8116,35,34,Six Thousand Three Hundred and Twenty Nine,6329,179.png,Biat,Holly Martin,1 -8117,29,29,Nine Hundred and Seventy,970,146.png,Biat,Hayden Bruce,1 -8118,33,14,One Thousand Nine Hundred and Seventy Four,1974,165.png,Biat,Renata Lukic,1 -8119,37,35,Six Thousand One Hundred and Forty,6140,189.png,Biat,Elliot Humphreys,1 -8120,32,21,Three Thousand Three Hundred and Forty Five,3345,162.png,Biat,David Corbeil,1 -8121,2,5,Five Thousand Five Hundred and Ninety,5590,14.png,Biat,Fawwaz Zuhayr Mustafa,1 -8122,22,43,Four Thousand Five Hundred and Seventy Three,4573,113.png,Biat,Aruna Bekx,1 -8123,37,5,Five Thousand and Seventy Two,5072,187.png,Biat,Fawwaz Zuhayr Mustafa,1 -8124,5,30,Six Thousand Six Hundred and Thirty Seven,6637,28.png,Biat,Jodie Holden,1 -8125,3,13,Four Thousand Five Hundred and Eighty,4580,19.png,Biat,Petra Kovacic,1 -8126,10,5,Nine Thousand and Sixty Eight,9068,51.png,Biat,Fawwaz Zuhayr Mustafa,1 -8127,7,19,Five Thousand Nine Hundred and Thirty Eight,5938,35.png,Biat,Franรงoise Lapierre,1 -8128,3,37,Eight Thousand Nine Hundred and Two,8902,15.png,Biat,Eva Davies,1 -8129,25,4,One Thousand Five Hundred and Forty Nine,1549,126.png,Biat,Wafiyah Nashwa Wasem,1 -8130,1,17,One Thousand One Hundred and Eighty Seven,1187,6.png,Biat,Yolette Cloutier,1 -8131,36,13,One Thousand Eight Hundred and Fifty Seven,1857,181.png,Biat,Petra Kovacic,1 -8132,40,5,Nine Thousand Four Hundred and Seventy Three,9473,204.png,Biat,Fawwaz Zuhayr Mustafa,1 -8133,31,41,One Thousand Five Hundred and Eighty Eight,1588,158.png,Biat,Germa de Geus,1 -8134,33,20,Five Thousand Four Hundred and Eleven,5411,169.png,Biat,Seymour Patenaude,1 -8135,31,35,Seven Thousand Seven Hundred and Thirty Three,7733,155.png,Biat,Elliot Humphreys,1 -8136,32,16,Three Thousand Nine Hundred and Forty Eight,3948,162.png,Biat,Searlas Grenier,1 -8137,31,30,Two Thousand Four Hundred and Three,2403,155.png,Biat,Jodie Holden,1 -8138,11,6,Seven Hundred and Thirty Two,732,59.png,Biat,Abdul Qais Khouri,1 -8139,39,26,Four Thousand Nine Hundred and Eighty Eight,4988,196.png,Biat,Sidney Lapointe,1 -8140,43,18,Two Thousand Seven Hundred and Seventy,2770,218.png,Biat,Edmee Pelletier,1 -8141,25,21,Three Thousand Eight Hundred and Sixty,3860,125.png,Biat,David Corbeil,1 -8142,14,13,Five Thousand Nine Hundred and Forty Two,5942,70.png,Biat,Petra Kovacic,1 -8143,32,42,Nine Thousand Three Hundred and Thirty Nine,9339,163.png,Biat,Brady Jamin,1 -8144,5,28,Eight Thousand Nine Hundred and Fourteen,8914,27.png,Biat,Chapin Auger,1 -8145,31,17,One Thousand Three Hundred and Eighty Nine,1389,155.png,Biat,Yolette Cloutier,1 -8146,37,35,Four Thousand Four Hundred and Seven,4407,187.png,Biat,Elliot Humphreys,1 -8147,10,40,Two Thousand Seven Hundred and Sixty Six,2766,53.png,Biat,David Howard,1 -8148,38,7,Eight Thousand Three Hundred and Eighty One,8381,193.png,Biat,Hasna Bahiyaa Amari,1 -8149,13,3,Six Thousand Five Hundred and Thirty,6530,65.png,Biat,Jiang Li Tao,1 -8150,37,3,Eight Thousand Six Hundred and Fifty Five,8655,189.png,Biat,Jiang Li Tao,1 -8151,30,39,Five Thousand Eight Hundred and Thirty Six,5836,152.png,Biat,Katie Connor,1 -8152,23,23,Seven Thousand Seven Hundred and Twelve,7712,118.png,Biat,Thรฉrรจse Fortier,1 -8153,23,36,Three Thousand Two Hundred and Nineteen,3219,116.png,Biat,Thomas Chapman,1 -8154,0,14,One Thousand One Hundred and Sixty,1160,4.png,Biat,Renata Lukic,1 -8155,41,41,Eight Thousand Eight Hundred and Seven,8807,205.png,Biat,Germa de Geus,1 -8156,1,31,Three Thousand and Forty Eight,3048,5.png,Biat,Naomi Grant,1 -8157,40,17,Five Thousand Four Hundred and Eighty Seven,5487,201.png,Biat,Yolette Cloutier,1 -8158,36,25,Seven Thousand and Forty Four,7044,181.png,Biat,Fleurette Coudert,1 -8159,14,33,Six Thousand Nine Hundred and Seventy Four,6974,72.png,Biat,Eleanor Freeman,1 -8160,43,1,Six Thousand Three Hundred and Thirty Eight,6338,217.png,Biat,Emily D. Short,1 -8161,1,0,Six Thousand Nine Hundred and Sixty Nine,6969,7.png,Biat,Ethel M. Bryson,1 -8162,40,9,Seven Thousand Eight Hundred and Sixty Six,7866,203.png,Biat,Maria Kalb,1 -8163,7,9,One Thousand and Eighty,1080,39.png,Biat,Maria Kalb,1 -8164,23,12,Four Thousand Nine Hundred and Fifty Three,4953,115.png,Biat,Marcel Achen,1 -8165,20,30,Four Thousand Three Hundred and Thirty Four,4334,102.png,Biat,Jodie Holden,1 -8166,2,5,Seven Thousand Nine Hundred and Fifty Nine,7959,14.png,Biat,Fawwaz Zuhayr Mustafa,1 -8167,34,31,Eight Thousand Two Hundred and Twelve,8212,173.png,Biat,Naomi Grant,1 -8168,8,8,One Hundred and Forty Six,146,40.png,Biat,Steffen Krueger,1 -8169,36,17,Two Thousand Nine Hundred and Twenty Four,2924,180.png,Biat,Yolette Cloutier,1 -8170,6,8,Eight Thousand Three Hundred and Fifteen,8315,33.png,Biat,Steffen Krueger,1 -8171,33,33,Five Hundred and Eleven,511,165.png,Biat,Eleanor Freeman,1 -8172,35,18,Four Thousand Two Hundred and Sixty Three,4263,175.png,Biat,Edmee Pelletier,1 -8173,43,39,Three Thousand Two Hundred and Seventy Nine,3279,215.png,Biat,Katie Connor,1 -8174,30,24,One Hundred and Seventy,170,154.png,Biat,Clarice Blanc,1 -8175,15,3,Three Thousand Nine Hundred and Ninety Nine,3999,79.png,Biat,Jiang Li Tao,1 -8176,32,38,Five Thousand One Hundred and Ninety Eight,5198,161.png,Biat,Freddie Reid,1 -8177,26,10,Five Thousand Five Hundred and Ninety One,5591,131.png,Biat,Stephan Schwab,1 -8178,34,20,Four Thousand Three Hundred and Four,4304,172.png,Biat,Seymour Patenaude,1 -8179,23,9,Seven Thousand Four Hundred and Forty Two,7442,118.png,Biat,Maria Kalb,1 -8180,34,3,Two Thousand Three Hundred and Sixty Five,2365,171.png,Biat,Jiang Li Tao,1 -8181,25,30,Eight Thousand Nine Hundred and Ninety,8990,129.png,Biat,Jodie Holden,1 -8182,2,3,Six Thousand and Sixty Nine,6069,13.png,Biat,Jiang Li Tao,1 -8183,35,6,Three Thousand Eight Hundred and Ninety Four,3894,177.png,Biat,Abdul Qais Khouri,1 -8184,14,16,One Hundred and Fifty Eight,158,72.png,Biat,Searlas Grenier,1 -8185,31,37,Eight Thousand Three Hundred and Forty One,8341,159.png,Biat,Eva Davies,1 -8186,35,16,Four Thousand Three Hundred and Fifty Six,4356,179.png,Biat,Searlas Grenier,1 -8187,15,28,Nine Thousand Six Hundred and Seventy Three,9673,75.png,Biat,Chapin Auger,1 -8188,20,41,Seven Thousand Nine Hundred and Nineteen,7919,102.png,Biat,Germa de Geus,1 -8189,33,5,Seven Thousand Four Hundred and Eighty Seven,7487,169.png,Biat,Fawwaz Zuhayr Mustafa,1 -8190,29,28,Five Thousand Six Hundred and Ninety Two,5692,147.png,Biat,Chapin Auger,1 -8191,28,0,Eight Thousand Four Hundred and Sixty,8460,141.png,Biat,Ethel M. Bryson,1 -8192,0,25,Three Thousand Four Hundred and Seven,3407,2.png,Biat,Fleurette Coudert,1 -8193,1,38,Two Thousand One Hundred and Thirty Eight,2138,6.png,Biat,Freddie Reid,1 -8194,35,0,Two Thousand Seven Hundred and Eighty Six,2786,175.png,Biat,Ethel M. Bryson,1 -8195,5,23,Six Thousand Two Hundred and Ninety Two,6292,28.png,Biat,Thรฉrรจse Fortier,1 -8196,17,9,Six Thousand and Forty Six,6046,89.png,Biat,Maria Kalb,1 -8197,39,0,Seven Thousand Seven Hundred and Seventy Nine,7779,197.png,Biat,Ethel M. Bryson,1 -8198,3,31,Seven Thousand Two Hundred and Fifty Seven,7257,18.png,Biat,Naomi Grant,1 -8199,39,43,Three Thousand Seven Hundred and Forty Eight,3748,197.png,Biat,Aruna Bekx,1 -8200,35,41,One Thousand and Seventy Eight,1078,178.png,Biat,Germa de Geus,1 -8201,7,34,Five Thousand and Sixty,5060,37.png,Biat,Holly Martin,1 -8202,41,38,One Thousand and Sixty Six,1066,208.png,Biat,Freddie Reid,1 -8203,23,39,Nine Thousand Eight Hundred and Twenty One,9821,118.png,Biat,Katie Connor,1 -8204,7,39,Nine Thousand Six Hundred and Forty Seven,9647,38.png,Biat,Katie Connor,1 -8205,4,28,Two Thousand Eight Hundred and Six,2806,20.png,Biat,Chapin Auger,1 -8206,8,40,Four Thousand One Hundred and Six,4106,40.png,Biat,David Howard,1 -8207,41,16,Eight Thousand Four Hundred and Eighteen,8418,207.png,Biat,Searlas Grenier,1 -8208,12,24,Nine Thousand Three Hundred and Fifty One,9351,64.png,Biat,Clarice Blanc,1 -8209,3,40,Nine Thousand Three Hundred and Sixty Three,9363,17.png,Biat,David Howard,1 -8210,26,20,Five Thousand Eight Hundred and Twenty Eight,5828,134.png,Biat,Seymour Patenaude,1 -8211,37,18,Three Thousand Seven Hundred and Thirty One,3731,189.png,Biat,Edmee Pelletier,1 -8212,9,38,Three Thousand and Sixty Eight,3068,49.png,Biat,Freddie Reid,1 -8213,28,11,Three Hundred and Sixty Three,363,141.png,Biat,Jens Egger,1 -8214,38,6,Seven Thousand and Eighty Five,7085,192.png,Biat,Abdul Qais Khouri,1 -8215,33,17,Nine Thousand Six Hundred and Seventy,9670,167.png,Biat,Yolette Cloutier,1 -8216,35,28,Three Thousand Four Hundred and Thirty Four,3434,177.png,Biat,Chapin Auger,1 -8217,33,31,Seven Hundred and Forty Nine,749,169.png,Biat,Naomi Grant,1 -8218,12,43,Eight Thousand Six Hundred and Forty Nine,8649,64.png,Biat,Aruna Bekx,1 -8219,41,20,Nine Thousand Four Hundred and Fifty Three,9453,207.png,Biat,Seymour Patenaude,1 -8220,40,19,Four Thousand Seven Hundred and Sixty Five,4765,201.png,Biat,Franรงoise Lapierre,1 -8221,4,29,Two Thousand Four Hundred and Sixty Seven,2467,20.png,Biat,Hayden Bruce,1 -8222,14,25,Three Thousand Six Hundred and Fifty Seven,3657,73.png,Biat,Fleurette Coudert,1 -8223,16,32,Three Thousand Four Hundred and Ten,3410,81.png,Biat,Chelsea Watson,1 -8224,23,14,Three Hundred and Sixty Five,365,119.png,Biat,Renata Lukic,1 -8225,30,14,Two Thousand Eight Hundred and Twenty One,2821,153.png,Biat,Renata Lukic,1 -8226,9,1,Three Thousand Seven Hundred and Ninety Four,3794,49.png,Biat,Emily D. Short,1 -8227,30,35,Three Thousand Four Hundred and Thirty Four,3434,154.png,Biat,Elliot Humphreys,1 -8228,30,9,Four Thousand Five Hundred and Seven,4507,151.png,Biat,Maria Kalb,1 -8229,43,41,One Thousand Four Hundred and Seventy,1470,215.png,Biat,Germa de Geus,1 -8230,25,30,Three Thousand Seven Hundred and Eighty,3780,129.png,Biat,Jodie Holden,1 -8231,9,37,Six Thousand and Sixty Four,6064,46.png,Biat,Eva Davies,1 -8232,40,28,Five Thousand One Hundred and Twenty Eight,5128,200.png,Biat,Chapin Auger,1 -8233,8,12,Seven Thousand One Hundred and Forty One,7141,40.png,Biat,Marcel Achen,1 -8234,30,17,Three Thousand Five Hundred and Fifty Six,3556,150.png,Biat,Yolette Cloutier,1 -8235,14,0,Two Thousand Four Hundred and Thirty Six,2436,73.png,Biat,Ethel M. Bryson,1 -8236,24,16,Nine Thousand Five Hundred and Forty Eight,9548,124.png,Biat,Searlas Grenier,1 -8237,5,20,Four Thousand Three Hundred and Seventy Four,4374,27.png,Biat,Seymour Patenaude,1 -8238,24,21,Six Thousand Nine Hundred,6900,122.png,Biat,David Corbeil,1 -8239,21,33,Seven Thousand and Fifty Five,7055,106.png,Biat,Eleanor Freeman,1 -8240,33,26,Four Thousand Seven Hundred and Sixteen,4716,167.png,Biat,Sidney Lapointe,1 -8241,10,37,Five Thousand and Ninety Two,5092,53.png,Biat,Eva Davies,1 -8242,34,0,Four Thousand Four Hundred and Sixty Seven,4467,171.png,Biat,Ethel M. Bryson,1 -8243,21,14,Three Thousand Two Hundred and Sixty Seven,3267,106.png,Biat,Renata Lukic,1 -8244,29,38,Eight Thousand Three Hundred,8300,148.png,Biat,Freddie Reid,1 -8245,15,25,Seven Thousand and Fifty One,7051,77.png,Biat,Fleurette Coudert,1 -8246,27,5,Seven Thousand Three Hundred and Twenty Six,7326,135.png,Biat,Fawwaz Zuhayr Mustafa,1 -8247,35,6,Two Thousand One Hundred and Thirty Two,2132,176.png,Biat,Abdul Qais Khouri,1 -8248,37,25,One Thousand Nine Hundred and Eighty,1980,187.png,Biat,Fleurette Coudert,1 -8249,15,17,Eight Thousand Eight Hundred and Ninety Two,8892,79.png,Biat,Yolette Cloutier,1 -8250,38,36,Eight Thousand Seven Hundred and Fifty One,8751,194.png,Biat,Thomas Chapman,1 -8251,20,30,Five Thousand Five Hundred and Seventy Nine,5579,100.png,Biat,Jodie Holden,1 -8252,11,3,Two Thousand Nine Hundred and Forty Three,2943,59.png,Biat,Jiang Li Tao,1 -8253,17,27,Six Thousand Nine Hundred and Ninety Six,6996,86.png,Biat,Colette Monjeau,1 -8254,2,41,Seven Thousand Five Hundred and Seventy Six,7576,11.png,Biat,Germa de Geus,1 -8255,35,17,Nine Thousand Nine Hundred and Eighty One,9981,178.png,Biat,Yolette Cloutier,1 -8256,36,43,Four Thousand Nine Hundred and Nine,4909,181.png,Biat,Aruna Bekx,1 -8257,11,26,Four Thousand Four Hundred and Twenty Five,4425,59.png,Biat,Sidney Lapointe,1 -8258,1,19,Six Thousand Seven Hundred and Fifty Seven,6757,9.png,Biat,Franรงoise Lapierre,1 -8259,35,21,Six Thousand One Hundred and Sixty Three,6163,177.png,Biat,David Corbeil,1 -8260,23,40,Six Thousand Nine Hundred and Thirty,6930,115.png,Biat,David Howard,1 -8261,21,36,Eight Thousand Eight Hundred and Fifty Five,8855,108.png,Biat,Thomas Chapman,1 -8262,38,17,Four Thousand Five Hundred and Twenty Six,4526,194.png,Biat,Yolette Cloutier,1 -8263,17,11,Nine Thousand Three Hundred and Ninety One,9391,86.png,Biat,Jens Egger,1 -8264,32,19,Four Hundred and Eighty Eight,488,164.png,Biat,Franรงoise Lapierre,1 -8265,13,2,Five Thousand Eight Hundred and Forty,5840,68.png,Biat,Chi Hsiao,1 -8266,19,40,Five Thousand Seven Hundred and Ninety Eight,5798,98.png,Biat,David Howard,1 -8267,43,26,Five Thousand Two Hundred and Seventy One,5271,217.png,Biat,Sidney Lapointe,1 -8268,36,27,Four Thousand One Hundred and Eighty Five,4185,180.png,Biat,Colette Monjeau,1 -8269,18,15,Two Thousand Two Hundred and Seventy One,2271,92.png,Biat,Milenko Tkalcic,1 -8270,16,34,Five Thousand Nine Hundred and Fifty Two,5952,82.png,Biat,Holly Martin,1 -8271,4,35,Four Thousand Six Hundred and Forty One,4641,22.png,Biat,Elliot Humphreys,1 -8272,14,7,Eight Thousand Nine Hundred and Eighty Six,8986,73.png,Biat,Hasna Bahiyaa Amari,1 -8273,12,25,Nine Thousand Two Hundred and Seven,9207,61.png,Biat,Fleurette Coudert,1 -8274,16,12,Four Thousand Five Hundred and Forty Eight,4548,82.png,Biat,Marcel Achen,1 -8275,16,15,Nine Thousand Six Hundred and Sixty Seven,9667,80.png,Biat,Milenko Tkalcic,1 -8276,22,9,One Thousand Three Hundred and Eighty One,1381,110.png,Biat,Maria Kalb,1 -8277,8,27,Eight Thousand One Hundred and Ninety Five,8195,40.png,Biat,Colette Monjeau,1 -8278,31,30,Six Thousand Seven Hundred and Twenty One,6721,159.png,Biat,Jodie Holden,1 -8279,3,32,Seven Thousand Five Hundred and Eighty Two,7582,17.png,Biat,Chelsea Watson,1 -8280,12,42,Three Thousand Three Hundred and Ninety Two,3392,60.png,Biat,Brady Jamin,1 -8281,1,35,Seven Thousand Five Hundred and Twenty Three,7523,6.png,Biat,Elliot Humphreys,1 -8282,42,24,Eight Thousand Two Hundred and Fifteen,8215,212.png,Biat,Clarice Blanc,1 -8283,16,7,Three Thousand Three Hundred and Twenty Nine,3329,82.png,Biat,Hasna Bahiyaa Amari,1 -8284,9,20,Four Thousand Eight Hundred and Thirteen,4813,49.png,Biat,Seymour Patenaude,1 -8285,3,2,Two Thousand Five Hundred and Ninety Nine,2599,19.png,Biat,Chi Hsiao,1 -8286,32,10,Four Thousand Four Hundred and Fifty Seven,4457,161.png,Biat,Stephan Schwab,1 -8287,21,30,Eight Thousand Three Hundred and Six,8306,109.png,Biat,Jodie Holden,1 -8288,32,11,Four Thousand Four Hundred and Ninety,4490,164.png,Biat,Jens Egger,1 -8289,14,14,Three Thousand Nine Hundred and Seventy One,3971,73.png,Biat,Renata Lukic,1 -8290,0,19,Two Thousand Four Hundred and One,2401,0.png,Biat,Franรงoise Lapierre,1 -8291,37,0,Three Thousand Eight Hundred and Sixty,3860,186.png,Biat,Ethel M. Bryson,1 -8292,8,27,Eight Thousand Nine Hundred and Sixty Four,8964,42.png,Biat,Colette Monjeau,1 -8293,2,6,One Thousand Eight Hundred and Forty Six,1846,11.png,Biat,Abdul Qais Khouri,1 -8294,30,17,One Thousand and Seventy Three,1073,153.png,Biat,Yolette Cloutier,1 -8295,21,2,Six Thousand Seven Hundred and Ninety Two,6792,105.png,Biat,Chi Hsiao,1 -8296,37,37,Two Thousand Three Hundred and Eighty Nine,2389,189.png,Biat,Eva Davies,1 -8297,23,34,Eight Thousand Two Hundred and Forty Six,8246,119.png,Biat,Holly Martin,1 -8298,19,9,Two Thousand Six Hundred and Fourteen,2614,98.png,Biat,Maria Kalb,1 -8299,42,17,Seven Thousand Six Hundred and Thirty One,7631,214.png,Biat,Yolette Cloutier,1 -8300,34,34,Six Thousand Nine Hundred and Ten,6910,173.png,Biat,Holly Martin,1 -8301,30,18,Five Thousand Three Hundred and Eighty Two,5382,152.png,Biat,Edmee Pelletier,1 -8302,4,14,Three Thousand Five Hundred and Twenty Six,3526,22.png,Biat,Renata Lukic,1 -8303,37,3,Six Thousand Nine Hundred and Twenty Eight,6928,185.png,Biat,Jiang Li Tao,1 -8304,18,7,Four Thousand One Hundred and Fifteen,4115,91.png,Biat,Hasna Bahiyaa Amari,1 -8305,29,22,Four Thousand Nine Hundred and Ninety Seven,4997,147.png,Biat,Eglantine Forest,1 -8306,21,43,Four Thousand Six Hundred and Twenty Eight,4628,106.png,Biat,Aruna Bekx,1 -8307,6,7,Seven Hundred and Ninety Five,795,34.png,Biat,Hasna Bahiyaa Amari,1 -8308,30,20,Four Hundred and Seventy Seven,477,154.png,Biat,Seymour Patenaude,1 -8309,35,34,Eight Thousand Three Hundred and Sixteen,8316,177.png,Biat,Holly Martin,1 -8310,15,14,Nine Thousand Four Hundred and Sixty One,9461,79.png,Biat,Renata Lukic,1 -8311,3,42,Five Thousand Six Hundred and Fifty One,5651,16.png,Biat,Brady Jamin,1 -8312,42,26,Nine Thousand Eight Hundred and Ten,9810,211.png,Biat,Sidney Lapointe,1 -8313,7,9,Four Thousand Two Hundred and Thirty Eight,4238,38.png,Biat,Maria Kalb,1 -8314,16,17,Four Hundred and Seventy Nine,479,83.png,Biat,Yolette Cloutier,1 -8315,21,11,Three Thousand Nine Hundred and Seventy Six,3976,107.png,Biat,Jens Egger,1 -8316,38,33,One Thousand Nine Hundred and Sixty Nine,1969,193.png,Biat,Eleanor Freeman,1 -8317,41,1,Seven Thousand Six Hundred and Seventy Six,7676,207.png,Biat,Emily D. Short,1 -8318,33,36,Five Thousand and Thirty Nine,5039,166.png,Biat,Thomas Chapman,1 -8319,24,6,Five Thousand Three Hundred and Eight,5308,121.png,Biat,Abdul Qais Khouri,1 -8320,14,5,Six Thousand One Hundred and Eighty Eight,6188,70.png,Biat,Fawwaz Zuhayr Mustafa,1 -8321,1,29,Six Thousand Two Hundred and Three,6203,7.png,Biat,Hayden Bruce,1 -8322,43,25,Nine Thousand Five Hundred and Eighty Six,9586,218.png,Biat,Fleurette Coudert,1 -8323,39,17,Three Thousand Three Hundred and Fifteen,3315,198.png,Biat,Yolette Cloutier,1 -8324,32,26,Three Thousand Two Hundred and Thirty Three,3233,164.png,Biat,Sidney Lapointe,1 -8325,33,17,Two Thousand Eight Hundred and Twenty One,2821,165.png,Biat,Yolette Cloutier,1 -8326,31,36,Nine Thousand One Hundred and Thirty Six,9136,155.png,Biat,Thomas Chapman,1 -8327,23,12,Five Hundred and Fourteen,514,115.png,Biat,Marcel Achen,1 -8328,38,43,Three Thousand Five Hundred and Fifteen,3515,190.png,Biat,Aruna Bekx,1 -8329,27,30,Three Thousand Six Hundred and Fifty Seven,3657,136.png,Biat,Jodie Holden,1 -8330,40,33,One Thousand One Hundred and Fifty Eight,1158,204.png,Biat,Eleanor Freeman,1 -8331,23,5,One Thousand and Twenty Nine,1029,116.png,Biat,Fawwaz Zuhayr Mustafa,1 -8332,35,32,Nine Thousand Eight Hundred and Fifty Nine,9859,175.png,Biat,Chelsea Watson,1 -8333,20,4,Two Thousand Six Hundred and Ninety Seven,2697,104.png,Biat,Wafiyah Nashwa Wasem,1 -8334,4,9,Two Thousand Seven Hundred and Seventy Seven,2777,22.png,Biat,Maria Kalb,1 -8335,32,27,Eight Thousand Three Hundred and Forty,8340,164.png,Biat,Colette Monjeau,1 -8336,16,42,Seven Thousand Three Hundred and Forty,7340,83.png,Biat,Brady Jamin,1 -8337,6,32,Six Thousand Nine Hundred and Sixty Nine,6969,30.png,Biat,Chelsea Watson,1 -8338,23,20,Nine Thousand and Ninety Three,9093,118.png,Biat,Seymour Patenaude,1 -8339,24,34,Nine Thousand Seven Hundred and Fifty Three,9753,120.png,Biat,Holly Martin,1 -8340,8,30,Eight Thousand Three Hundred and Seventy Two,8372,41.png,Biat,Jodie Holden,1 -8341,43,18,Eight Thousand and Twenty Seven,8027,217.png,Biat,Edmee Pelletier,1 -8342,12,1,One Thousand Five Hundred and Thirty Three,1533,61.png,Biat,Emily D. Short,1 -8343,6,37,Seven Thousand One Hundred and Forty One,7141,33.png,Biat,Eva Davies,1 -8344,24,3,Four Hundred and Seventy Four,474,123.png,Biat,Jiang Li Tao,1 -8345,36,0,Six Thousand Nine Hundred and Seventy Five,6975,181.png,Biat,Ethel M. Bryson,1 -8346,33,0,Nine Thousand Nine Hundred and Forty Five,9945,166.png,Biat,Ethel M. Bryson,1 -8347,22,39,Three Thousand Seven Hundred and Thirty Two,3732,113.png,Biat,Katie Connor,1 -8348,27,41,Nine Thousand Nine Hundred,9900,139.png,Biat,Germa de Geus,1 -8349,4,42,Nine Thousand and Five,9005,24.png,Biat,Brady Jamin,1 -8350,24,28,Five Thousand Six Hundred and Sixty Two,5662,122.png,Biat,Chapin Auger,1 -8351,33,28,One Thousand Five Hundred and Fifty Seven,1557,168.png,Biat,Chapin Auger,1 -8352,35,25,Eight Thousand Five Hundred and Eleven,8511,176.png,Biat,Fleurette Coudert,1 -8353,20,32,Four Thousand Eight Hundred and Fifty One,4851,104.png,Biat,Chelsea Watson,1 -8354,34,29,One Thousand Seven Hundred and Fifty Three,1753,171.png,Biat,Hayden Bruce,1 -8355,39,6,Eight Thousand Seven Hundred and Seventy Six,8776,199.png,Biat,Abdul Qais Khouri,1 -8356,2,13,Nine Hundred and Twenty Two,922,12.png,Biat,Petra Kovacic,1 -8357,21,38,Six Thousand Five Hundred and Thirty Five,6535,108.png,Biat,Freddie Reid,1 -8358,30,25,Two Thousand and Seventy Three,2073,153.png,Biat,Fleurette Coudert,1 -8359,9,6,One Thousand One Hundred and Fifty Three,1153,49.png,Biat,Abdul Qais Khouri,1 -8360,28,38,Five Thousand One Hundred and Fifty Two,5152,141.png,Biat,Freddie Reid,1 -8361,4,20,Seven Thousand Four Hundred and Sixty One,7461,20.png,Biat,Seymour Patenaude,1 -8362,38,10,Four Hundred and Eighty Eight,488,192.png,Biat,Stephan Schwab,1 -8363,23,19,One Thousand Four Hundred and Forty Six,1446,116.png,Biat,Franรงoise Lapierre,1 -8364,25,16,Six Thousand Seven Hundred and Four,6704,125.png,Biat,Searlas Grenier,1 -8365,31,17,One Thousand Six Hundred and Eight,1608,158.png,Biat,Yolette Cloutier,1 -8366,38,10,Six Thousand and Seventy,6070,192.png,Biat,Stephan Schwab,1 -8367,3,32,One Thousand Eight Hundred and Twenty One,1821,18.png,Biat,Chelsea Watson,1 -8368,6,37,Eight Thousand and Eighteen,8018,30.png,Biat,Eva Davies,1 -8369,33,14,Sixty Eight,68,169.png,Biat,Renata Lukic,1 -8370,43,38,Four Thousand Six Hundred and Sixty Nine,4669,218.png,Biat,Freddie Reid,1 -8371,37,0,One Thousand One Hundred and Thirty,1130,189.png,Biat,Ethel M. Bryson,1 -8372,7,4,Five Hundred and Eighty Four,584,37.png,Biat,Wafiyah Nashwa Wasem,1 -8373,3,17,Four Thousand Six Hundred and Sixty Three,4663,16.png,Biat,Yolette Cloutier,1 -8374,18,39,Three Thousand Nine Hundred and Forty Four,3944,91.png,Biat,Katie Connor,1 -8375,29,36,Nine Thousand Eight Hundred and Ninety Eight,9898,148.png,Biat,Thomas Chapman,1 -8376,30,26,Two Thousand Nine Hundred and Ninety,2990,153.png,Biat,Sidney Lapointe,1 -8377,41,8,Four Thousand Seven Hundred and Ninety One,4791,207.png,Biat,Steffen Krueger,1 -8378,30,29,Three Thousand Six Hundred and Fifteen,3615,153.png,Biat,Hayden Bruce,1 -8379,36,36,Eight Thousand One Hundred and Thirty Two,8132,184.png,Biat,Thomas Chapman,1 -8380,35,24,Six Thousand Two Hundred and Forty Five,6245,177.png,Biat,Clarice Blanc,1 -8381,26,22,Five Thousand Seven Hundred and Forty One,5741,131.png,Biat,Eglantine Forest,1 -8382,17,35,Seven Thousand One Hundred and Thirty Nine,7139,88.png,Biat,Elliot Humphreys,1 -8383,29,25,Seven Thousand Four Hundred and Nine,7409,148.png,Biat,Fleurette Coudert,1 -8384,28,13,Three Thousand Three Hundred and Ninety Five,3395,142.png,Biat,Petra Kovacic,1 -8385,18,12,One Thousand Nine Hundred and Seventy Four,1974,94.png,Biat,Marcel Achen,1 -8386,10,39,Three Thousand Two Hundred and Thirty Two,3232,51.png,Biat,Katie Connor,1 -8387,42,14,Five Thousand Seven Hundred and Sixty Nine,5769,211.png,Biat,Renata Lukic,1 -8388,23,36,Five Thousand Three Hundred and Seventeen,5317,117.png,Biat,Thomas Chapman,1 -8389,24,31,Eight Thousand Seven Hundred and Ninety Seven,8797,123.png,Biat,Naomi Grant,1 -8390,23,38,Four Thousand Six Hundred and Thirty,4630,116.png,Biat,Freddie Reid,1 -8391,1,37,Seven Thousand Five Hundred and Seventy Nine,7579,5.png,Biat,Eva Davies,1 -8392,24,11,Nine Thousand Four Hundred and Twelve,9412,120.png,Biat,Jens Egger,1 -8393,41,9,Four Thousand Four Hundred and Sixty Six,4466,209.png,Biat,Maria Kalb,1 -8394,21,19,Two Thousand Nine Hundred and Twenty One,2921,106.png,Biat,Franรงoise Lapierre,1 -8395,34,1,Nine Thousand Four Hundred and Thirteen,9413,171.png,Biat,Emily D. Short,1 -8396,5,4,Eight Thousand Five Hundred and Thirty,8530,29.png,Biat,Wafiyah Nashwa Wasem,1 -8397,8,36,Eight Thousand Nine Hundred and Fifty Four,8954,40.png,Biat,Thomas Chapman,1 -8398,27,28,Two Thousand Two Hundred and Fifty,2250,137.png,Biat,Chapin Auger,1 -8399,3,41,Three Thousand Nine Hundred and Forty Two,3942,16.png,Biat,Germa de Geus,1 -8400,36,6,Eight Thousand Nine Hundred and Forty Eight,8948,184.png,Biat,Abdul Qais Khouri,1 -8401,17,6,Eight Thousand Six Hundred and Sixty Four,8664,86.png,Biat,Abdul Qais Khouri,1 -8402,23,30,Three Thousand Two Hundred and Sixty Five,3265,119.png,Biat,Jodie Holden,1 -8403,1,38,Five Thousand Two Hundred and Twenty Nine,5229,7.png,Biat,Freddie Reid,1 -8404,26,32,Six Thousand and Two,6002,134.png,Biat,Chelsea Watson,1 -8405,6,16,Seven Thousand Two Hundred and Forty Four,7244,30.png,Biat,Searlas Grenier,1 -8406,24,8,One Thousand One Hundred and Forty,1140,124.png,Biat,Steffen Krueger,1 -8407,42,42,Seven Thousand Three Hundred and Sixty Five,7365,214.png,Biat,Brady Jamin,1 -8408,38,43,Two Thousand Nine Hundred and Fifty Four,2954,194.png,Biat,Aruna Bekx,1 -8409,24,22,Six Thousand Four Hundred and Seventy Four,6474,120.png,Biat,Eglantine Forest,1 -8410,29,0,Four Thousand Four Hundred and Thirty Eight,4438,147.png,Biat,Ethel M. Bryson,1 -8411,3,40,Three Thousand Eight Hundred and Eighty Six,3886,15.png,Biat,David Howard,1 -8412,34,4,Three Thousand and Eighteen,3018,172.png,Biat,Wafiyah Nashwa Wasem,1 -8413,12,28,Seven Thousand Four Hundred and Ninety Five,7495,64.png,Biat,Chapin Auger,1 -8414,3,38,Nine Thousand and Ninety Four,9094,15.png,Biat,Freddie Reid,1 -8415,3,37,Six Thousand Four Hundred and Seven,6407,19.png,Biat,Eva Davies,1 -8416,2,36,Two Thousand Nine Hundred and Seventy Five,2975,10.png,Biat,Thomas Chapman,1 -8417,24,32,Five Thousand Three Hundred and Fifty Nine,5359,124.png,Biat,Chelsea Watson,1 -8418,16,24,Seven Thousand Seven Hundred and Sixteen,7716,84.png,Biat,Clarice Blanc,1 -8419,8,17,Four Thousand One Hundred and Ninety Six,4196,41.png,Biat,Yolette Cloutier,1 -8420,40,10,Nine Thousand One Hundred and Thirty Eight,9138,202.png,Biat,Stephan Schwab,1 -8421,0,16,Eight Thousand Four Hundred and Eighty Two,8482,1.png,Biat,Searlas Grenier,1 -8422,42,9,One Thousand Eight Hundred and Ninety Three,1893,210.png,Biat,Maria Kalb,1 -8423,15,37,Four Thousand Six Hundred and Forty Eight,4648,76.png,Biat,Eva Davies,1 -8424,15,28,Two Thousand Eight Hundred and Seventy Five,2875,78.png,Biat,Chapin Auger,1 -8425,39,19,Four Thousand Seven Hundred and Nine,4709,199.png,Biat,Franรงoise Lapierre,1 -8426,12,23,Five Thousand and Ninety Eight,5098,61.png,Biat,Thรฉrรจse Fortier,1 -8427,22,16,Nine Thousand Four Hundred and Ninety Four,9494,111.png,Biat,Searlas Grenier,1 -8428,2,20,One Thousand Four Hundred and Eighty Seven,1487,12.png,Biat,Seymour Patenaude,1 -8429,16,18,Nine Thousand Five Hundred and Eight,9508,81.png,Biat,Edmee Pelletier,1 -8430,35,18,Seventy Five,75,177.png,Biat,Edmee Pelletier,1 -8431,6,25,Nine Hundred and Thirteen,913,30.png,Biat,Fleurette Coudert,1 -8432,18,41,Nine Thousand Nine Hundred and Forty Three,9943,90.png,Biat,Germa de Geus,1 -8433,23,32,Two Thousand Six Hundred and Forty Nine,2649,116.png,Biat,Chelsea Watson,1 -8434,21,43,Two Thousand Five Hundred and Sixty Nine,2569,108.png,Biat,Aruna Bekx,1 -8435,2,43,One Hundred and Ninety Two,192,11.png,Biat,Aruna Bekx,1 -8436,4,9,One Thousand Nine Hundred and Fifteen,1915,22.png,Biat,Maria Kalb,1 -8437,35,24,Two Thousand and Eighteen,2018,175.png,Biat,Clarice Blanc,1 -8438,15,17,Four Thousand Seven Hundred and Fifty Eight,4758,77.png,Biat,Yolette Cloutier,1 -8439,15,0,Four Thousand Six Hundred and One,4601,78.png,Biat,Ethel M. Bryson,1 -8440,8,2,Five Thousand Seven Hundred and Seventy Five,5775,40.png,Biat,Chi Hsiao,1 -8441,18,0,Two Thousand Three Hundred and Twenty Five,2325,92.png,Biat,Ethel M. Bryson,1 -8442,26,13,One Thousand Three Hundred and Fifty One,1351,130.png,Biat,Petra Kovacic,1 -8443,34,42,Five Thousand Three Hundred and Eighty,5380,172.png,Biat,Brady Jamin,1 -8444,6,1,Five Thousand and Ninety Four,5094,30.png,Biat,Emily D. Short,1 -8445,1,16,Seven Thousand Four Hundred and Seventy Six,7476,6.png,Biat,Searlas Grenier,1 -8446,0,14,Seven Thousand Six Hundred and Seventy Three,7673,4.png,Biat,Renata Lukic,1 -8447,14,1,Five Thousand One Hundred and Fifty Four,5154,74.png,Biat,Emily D. Short,1 -8448,27,27,Eight Thousand Three Hundred and Sixty Five,8365,135.png,Biat,Colette Monjeau,1 -8449,18,11,Four Thousand Nine Hundred and Thirty Seven,4937,91.png,Biat,Jens Egger,1 -8450,24,33,Five Thousand and Thirty Two,5032,122.png,Biat,Eleanor Freeman,1 -8451,1,33,Seven Thousand Four Hundred and Nineteen,7419,7.png,Biat,Eleanor Freeman,1 -8452,5,25,Eight Thousand Five Hundred and Eighty Eight,8588,29.png,Biat,Fleurette Coudert,1 -8453,25,26,Three Thousand Five Hundred and Fifty One,3551,126.png,Biat,Sidney Lapointe,1 -8454,9,36,Five Thousand Five Hundred and Ninety,5590,49.png,Biat,Thomas Chapman,1 -8455,23,36,Nine Hundred and Fifty,950,119.png,Biat,Thomas Chapman,1 -8456,28,31,Three Thousand Three Hundred and Twenty Seven,3327,141.png,Biat,Naomi Grant,1 -8457,32,6,Seven Thousand Seven Hundred and Fifteen,7715,163.png,Biat,Abdul Qais Khouri,1 -8458,2,13,Eight Thousand Seven Hundred and Eighty Five,8785,14.png,Biat,Petra Kovacic,1 -8459,35,20,Two Thousand Five Hundred and Eighty Eight,2588,176.png,Biat,Seymour Patenaude,1 -8460,17,4,Eight Hundred and Sixty Five,865,89.png,Biat,Wafiyah Nashwa Wasem,1 -8461,17,2,One Thousand Four Hundred and Ninety Six,1496,87.png,Biat,Chi Hsiao,1 -8462,22,26,Nine Thousand and Nineteen,9019,114.png,Biat,Sidney Lapointe,1 -8463,11,16,Two Thousand Seven Hundred and Sixty Three,2763,57.png,Biat,Searlas Grenier,1 -8464,19,29,Eight Thousand Nine Hundred and Seventy Nine,8979,97.png,Biat,Hayden Bruce,1 -8465,20,14,Four Thousand Five Hundred and Ninety Five,4595,102.png,Biat,Renata Lukic,1 -8466,31,24,One Thousand Five Hundred and Sixty Seven,1567,156.png,Biat,Clarice Blanc,1 -8467,3,7,Six Thousand Seven Hundred and Thirteen,6713,19.png,Biat,Hasna Bahiyaa Amari,1 -8468,30,36,Two Thousand Seven Hundred and Seven,2707,150.png,Biat,Thomas Chapman,1 -8469,14,5,Four Thousand One Hundred and Eighty Five,4185,71.png,Biat,Fawwaz Zuhayr Mustafa,1 -8470,41,41,Three Thousand Two Hundred and Fifty Five,3255,206.png,Biat,Germa de Geus,1 -8471,4,6,Five Hundred and Twenty Eight,528,24.png,Biat,Abdul Qais Khouri,1 -8472,25,42,Two Thousand Two Hundred and Thirty Nine,2239,127.png,Biat,Brady Jamin,1 -8473,19,30,Eight Thousand and Ninety Two,8092,98.png,Biat,Jodie Holden,1 -8474,32,36,Six Thousand Four Hundred and Thirty,6430,160.png,Biat,Thomas Chapman,1 -8475,1,18,Seven Thousand Four Hundred and Four,7404,9.png,Biat,Edmee Pelletier,1 -8476,43,18,Eight Thousand Six Hundred and Seventy One,8671,217.png,Biat,Edmee Pelletier,1 -8477,13,5,Six Thousand and Eighty Two,6082,69.png,Biat,Fawwaz Zuhayr Mustafa,1 -8478,17,0,Eight Thousand and Ninety Eight,8098,89.png,Biat,Ethel M. Bryson,1 -8479,32,9,Six Hundred and Thirty Nine,639,163.png,Biat,Maria Kalb,1 -8480,28,26,Seven Thousand Four Hundred and Forty One,7441,143.png,Biat,Sidney Lapointe,1 -8481,30,11,One Thousand Six Hundred and Ninety Three,1693,154.png,Biat,Jens Egger,1 -8482,41,17,Two Thousand Three Hundred and Thirty Two,2332,209.png,Biat,Yolette Cloutier,1 -8483,43,2,Nine Thousand Three Hundred and Eighty Nine,9389,218.png,Biat,Chi Hsiao,1 -8484,26,2,Five Thousand Nine Hundred and Seventy Eight,5978,131.png,Biat,Chi Hsiao,1 -8485,9,15,One Thousand Two Hundred and Five,1205,45.png,Biat,Milenko Tkalcic,1 -8486,2,43,Four Thousand Eight Hundred and Forty Six,4846,13.png,Biat,Aruna Bekx,1 -8487,26,20,Eight Thousand Eight Hundred and Forty One,8841,131.png,Biat,Seymour Patenaude,1 -8488,41,35,Twenty,20,207.png,Biat,Elliot Humphreys,1 -8489,29,17,Eight Thousand One Hundred and Forty Five,8145,146.png,Biat,Yolette Cloutier,1 -8490,33,13,Seven Thousand Nine Hundred and Ninety Eight,7998,167.png,Biat,Petra Kovacic,1 -8491,2,22,Four Thousand Six Hundred and Eighty,4680,12.png,Biat,Eglantine Forest,1 -8492,9,26,One Thousand Three Hundred and Sixty Eight,1368,45.png,Biat,Sidney Lapointe,1 -8493,15,24,Two Thousand One Hundred and Twenty Four,2124,78.png,Biat,Clarice Blanc,1 -8494,36,17,Three Hundred and Ninety Four,394,183.png,Biat,Yolette Cloutier,1 -8495,17,12,Four Thousand Three Hundred and Sixty Four,4364,86.png,Biat,Marcel Achen,1 -8496,6,38,Nine Thousand Eight Hundred and Forty Seven,9847,30.png,Biat,Freddie Reid,1 -8497,1,5,Three Thousand Three Hundred and Eighty One,3381,7.png,Biat,Fawwaz Zuhayr Mustafa,1 -8498,14,27,Two Thousand Seven Hundred and Sixty Six,2766,73.png,Biat,Colette Monjeau,1 -8499,11,34,Three Thousand One Hundred and Twenty Two,3122,55.png,Biat,Holly Martin,1 -8500,16,13,Six Thousand Three Hundred and Ninety Two,6392,83.png,Biat,Petra Kovacic,1 -8501,39,36,Four Thousand Six Hundred and Forty Eight,4976,Nan,Biat,Thomas Chapman,0 -8502,27,31,Two Thousand Three Hundred and Seventy Seven,2497,Nan,Biat,Naomi Grant,0 -8503,9,22,One Thousand Seven Hundred and Seventy Eight,3848,Nan,Biat,Eglantine Forest,0 -8504,14,9,Seven Thousand and Forty,8327,Nan,Biat,Maria Kalb,0 -8505,24,22,Five Thousand and Sixty Nine,8924,Nan,Biat,Eglantine Forest,0 -8506,21,32,Three Thousand Three Hundred and Eighty Five,8056,Nan,Biat,Chelsea Watson,0 -8507,37,14, ,7960,186.png,Biat,Renata Lukic,0 -8508,6,19, ,8620,34.png,Biat,Franรงoise Lapierre,0 -8509,6,16,Five Thousand Seven Hundred and Twenty Three,8313,Nan,Biat,Searlas Grenier,0 -8510,14,14,Eight,285,Nan,Biat,Renata Lukic,0 -8511,37,41,Two Hundred and Eighty Nine, ,187.png,Biat,Germa de Geus,0 -8512,30,30, ,3744,153.png,Biat,Jodie Holden,0 -8513,9,39,One Thousand Four Hundred and Seventy Nine, ,47.png,Biat,Katie Connor,0 -8514,37,8,Six Hundred and Ninety Six,6880,Nan,Biat,Steffen Krueger,0 -8515,30,36,Three Thousand Three Hundred and Twenty Five,5487,Nan,Biat,Thomas Chapman,0 -8516,22,13,Two Hundred and Forty Six,5722,Nan,Biat,Petra Kovacic,0 -8517,24,37, ,2943,123.png,Biat,Eva Davies,0 -8518,42,2,One Hundred and Twenty Eight,3456,Nan,Biat,Chi Hsiao,0 -8519,31,29, ,9889,156.png,Biat,Hayden Bruce,0 -8520,24,35, ,8977,120.png,Biat,Elliot Humphreys,0 -8521,35,15, ,3503,179.png,Biat,Milenko Tkalcic,0 -8522,24,7,Five Thousand Six Hundred and Sixty Four, ,124.png,Biat,Hasna Bahiyaa Amari,0 -8523,3,29,Four Thousand Seven Hundred and Nineteen,5672,Nan,Biat,Hayden Bruce,0 -8524,41,29,Two Thousand Seven Hundred and Twenty Nine,3939,Nan,Biat,Hayden Bruce,0 -8525,11,20,Five Hundred and Two,630,Nan,Biat,Seymour Patenaude,0 -8526,24,1, ,5976,123.png,Biat,Emily D. Short,0 -8527,10,2,Four Thousand Six Hundred and Forty Four, ,52.png,Biat,Chi Hsiao,0 -8528,14,9,Thirty Seven, ,70.png,Biat,Maria Kalb,0 -8529,0,35,Seven Thousand Four Hundred and Sixty Nine,9725,Nan,Biat,Elliot Humphreys,0 -8530,5,38, ,2824,25.png,Biat,Freddie Reid,0 -8531,3,15,One Thousand Eight Hundred and Twenty Eight,2755,Nan,Biat,Milenko Tkalcic,0 -8532,6,2, ,3460,30.png,Biat,Chi Hsiao,0 -8533,40,12,Three Hundred and Twenty Eight,803,Nan,Biat,Marcel Achen,0 -8534,35,15,Six Thousand One Hundred and Forty Six,9155,Nan,Biat,Milenko Tkalcic,0 -8535,29,9,Six Thousand Three Hundred and Eighty Eight, ,149.png,Biat,Maria Kalb,0 -8536,19,9,Four Thousand Nine Hundred and Forty Eight,7224,Nan,Biat,Maria Kalb,0 -8537,32,14,One Thousand Five Hundred and Seventy Seven, ,163.png,Biat,Renata Lukic,0 -8538,14,0,Five Thousand Three Hundred and Twenty, ,74.png,Biat,Ethel M. Bryson,0 -8539,22,23, ,5225,112.png,Biat,Thรฉrรจse Fortier,0 -8540,25,5,One Thousand Seven Hundred and Eighty Three, ,128.png,Biat,Fawwaz Zuhayr Mustafa,0 -8541,17,4,Eighty Seven,862,Nan,Biat,Wafiyah Nashwa Wasem,0 -8542,14,30,One Hundred and Twenty One, ,71.png,Biat,Jodie Holden,0 -8543,31,25,Two Thousand Seven Hundred and Seventy Nine,7552,Nan,Biat,Fleurette Coudert,0 -8544,14,24,One Thousand Six Hundred and Eighty Nine,4652,Nan,Biat,Clarice Blanc,0 -8545,23,7,Nine Hundred and Seventy Eight,2408,Nan,Biat,Hasna Bahiyaa Amari,0 -8546,42,27,Seven Thousand Four Hundred and Ninety Two,7627,Nan,Biat,Colette Monjeau,0 -8547,15,39, ,9760,75.png,Biat,Katie Connor,0 -8548,8,19, ,7713,43.png,Biat,Franรงoise Lapierre,0 -8549,23,10,One Thousand Five Hundred and Forty Nine,6857,Nan,Biat,Stephan Schwab,0 -8550,10,18,Six Hundred and Ninety Six,7800,Nan,Biat,Edmee Pelletier,0 -8551,16,43,Four Hundred and Fourteen,1148,Nan,Biat,Aruna Bekx,0 -8552,43,11,Eight Thousand and Ninety One,9288,Nan,Biat,Jens Egger,0 -8553,31,2,Two Hundred and Fifty Three,4009,Nan,Biat,Chi Hsiao,0 -8554,10,22,Two Thousand Five Hundred and Fifty Seven,6176,Nan,Biat,Eglantine Forest,0 -8555,10,27, ,8805,52.png,Biat,Colette Monjeau,0 -8556,35,24,Forty Two,628,Nan,Biat,Clarice Blanc,0 -8557,7,6,One Thousand Nine Hundred and Ninety Six, ,38.png,Biat,Abdul Qais Khouri,0 -8558,18,8,One Thousand Three Hundred and Fifty Seven,8276,Nan,Biat,Steffen Krueger,0 -8559,37,17, ,9743,185.png,Biat,Yolette Cloutier,0 -8560,18,11,Three Thousand and Eighty Two,7438,Nan,Biat,Jens Egger,0 -8561,1,17, ,6083,6.png,Biat,Yolette Cloutier,0 -8562,11,39,Five Thousand Nine Hundred and Thirty Nine,7887,Nan,Biat,Katie Connor,0 -8563,24,39,Two Hundred and Twenty Five,310,Nan,Biat,Katie Connor,0 -8564,5,0,Five Thousand Seven Hundred and Two, ,27.png,Biat,Ethel M. Bryson,0 -8565,25,11,Five Thousand and Eighty One,5436,Nan,Biat,Jens Egger,0 -8566,33,10,Seven Hundred and Forty Five,3947,Nan,Biat,Stephan Schwab,0 -8567,36,41,One Thousand Six Hundred and Eighty Nine, ,184.png,Biat,Germa de Geus,0 -8568,2,36, ,4086,10.png,Biat,Thomas Chapman,0 -8569,5,6, ,4400,29.png,Biat,Abdul Qais Khouri,0 -8570,19,34,One Thousand Five Hundred and Nineteen, ,96.png,Biat,Holly Martin,0 -8571,23,8, ,9808,117.png,Biat,Steffen Krueger,0 -8572,38,25,Four Thousand Seven Hundred and Forty, ,194.png,Biat,Fleurette Coudert,0 -8573,21,24,One Thousand Two Hundred and Sixty Three,1564,Nan,Biat,Clarice Blanc,0 -8574,34,12,Six Thousand Two Hundred and Forty Eight,7672,Nan,Biat,Marcel Achen,0 -8575,0,24,Seventy Four, ,0.png,Biat,Clarice Blanc,0 -8576,17,0,One Thousand Seven Hundred and Ninety Nine,1908,Nan,Biat,Ethel M. Bryson,0 -8577,4,30,One Hundred and Thirty Three,207,Nan,Biat,Jodie Holden,0 -8578,43,20,Six Thousand One Hundred and Thirty Two,6163,Nan,Biat,Seymour Patenaude,0 -8579,40,7,Eight Thousand and Forty Three,8538,Nan,Biat,Hasna Bahiyaa Amari,0 -8580,21,29, ,9702,108.png,Biat,Hayden Bruce,0 -8581,22,4,One Thousand and Seventeen, ,110.png,Biat,Wafiyah Nashwa Wasem,0 -8582,43,4,Two Thousand One Hundred and Sixty, ,215.png,Biat,Wafiyah Nashwa Wasem,0 -8583,17,39,Thirty Six, ,88.png,Biat,Katie Connor,0 -8584,23,36,One Hundred and Seven,2334,Nan,Biat,Thomas Chapman,0 -8585,18,35,Five Thousand One Hundred and Ninety One, ,90.png,Biat,Elliot Humphreys,0 -8586,17,32,Two Hundred and Sixteen,460,Nan,Biat,Chelsea Watson,0 -8587,8,9,Five Hundred and Forty One,1971,Nan,Biat,Maria Kalb,0 -8588,12,27,Two Thousand Four Hundred and Ninety Six,5058,Nan,Biat,Colette Monjeau,0 -8589,24,10,Five Hundred and Forty Eight,700,Nan,Biat,Stephan Schwab,0 -8590,31,6,Three Thousand Six Hundred and Sixty Four,4163,Nan,Biat,Abdul Qais Khouri,0 -8591,39,15,Six Thousand Two Hundred and Nine, ,198.png,Biat,Milenko Tkalcic,0 -8592,38,43, ,2410,190.png,Biat,Aruna Bekx,0 -8593,19,9,Three Thousand Four Hundred and Eighty Nine,3696,Nan,Biat,Maria Kalb,0 -8594,7,30,One Thousand Two Hundred and Eighty Three,5949,Nan,Biat,Jodie Holden,0 -8595,25,38,Three Thousand Seven Hundred and Twenty Eight,8451,Nan,Biat,Freddie Reid,0 -8596,38,42,One Thousand Three Hundred and Ninety Two, ,194.png,Biat,Brady Jamin,0 -8597,41,24,Eight Thousand Nine Hundred and Seventy, ,207.png,Biat,Clarice Blanc,0 -8598,13,0, ,8676,66.png,Biat,Ethel M. Bryson,0 -8599,17,39,Five Thousand Eight Hundred,9988,Nan,Biat,Katie Connor,0 -8600,15,37,Two Thousand Two Hundred and Twenty Eight, ,77.png,Biat,Eva Davies,0 -8601,9,9,One Thousand One Hundred and Sixteen,5941,Nan,Biat,Maria Kalb,0 -8602,40,9,Two Thousand Six Hundred and Fifty Three, ,200.png,Biat,Maria Kalb,0 -8603,34,32,Seven Hundred and Forty One,8290,Nan,Biat,Chelsea Watson,0 -8604,20,4, ,7334,104.png,Biat,Wafiyah Nashwa Wasem,0 -8605,18,17,Two Hundred and Fifty Six, ,90.png,Biat,Yolette Cloutier,0 -8606,12,23,Four Thousand Six Hundred and Thirty Six, ,61.png,Biat,Thรฉrรจse Fortier,0 -8607,18,35,Three Thousand and Ninety Four, ,94.png,Biat,Elliot Humphreys,0 -8608,11,18, ,8953,59.png,Biat,Edmee Pelletier,0 -8609,26,38,Four Thousand Two Hundred and Thirty Three,5803,Nan,Biat,Freddie Reid,0 -8610,11,28,Three Thousand Eight Hundred and Eighty Eight,8394,Nan,Biat,Chapin Auger,0 -8611,0,15, ,1358,3.png,Biat,Milenko Tkalcic,0 -8612,21,6,Three Thousand Nine Hundred and Ninety Seven,7269,Nan,Biat,Abdul Qais Khouri,0 -8613,21,28, ,664,106.png,Biat,Chapin Auger,0 -8614,18,0, ,3455,92.png,Biat,Ethel M. Bryson,0 -8615,32,0,Seven Hundred and Twenty Three, ,163.png,Biat,Ethel M. Bryson,0 -8616,39,34, ,4903,196.png,Biat,Holly Martin,0 -8617,0,34,Two Thousand One Hundred and Seventy Two,4432,Nan,Biat,Holly Martin,0 -8618,23,25, ,7214,117.png,Biat,Fleurette Coudert,0 -8619,10,1,Two Thousand Four Hundred and Six,2790,Nan,Biat,Emily D. Short,0 -8620,29,30, ,9983,146.png,Biat,Jodie Holden,0 -8621,1,23,Four Thousand Six Hundred and Nineteen, ,6.png,Biat,Thรฉrรจse Fortier,0 -8622,12,7,One Thousand Five Hundred and Eighty Two,3480,Nan,Biat,Hasna Bahiyaa Amari,0 -8623,27,22,Seven Thousand and Seventy Four,7773,Nan,Biat,Eglantine Forest,0 -8624,41,22, ,6770,209.png,Biat,Eglantine Forest,0 -8625,13,36,Four Thousand Five Hundred,5334,Nan,Biat,Thomas Chapman,0 -8626,41,27,Four Thousand Nine Hundred and Sixty Two,8655,Nan,Biat,Colette Monjeau,0 -8627,42,12,Four Thousand and Forty,9802,Nan,Biat,Marcel Achen,0 -8628,39,12,Four Thousand One Hundred and Six,7971,Nan,Biat,Marcel Achen,0 -8629,30,8,One Thousand Eight Hundred and Fifty Two, ,151.png,Biat,Steffen Krueger,0 -8630,21,23,One Thousand Eight Hundred and Thirty One, ,107.png,Biat,Thรฉrรจse Fortier,0 -8631,13,37, ,3596,69.png,Biat,Eva Davies,0 -8632,15,10,Two Thousand Seven Hundred and Sixty Eight, ,78.png,Biat,Stephan Schwab,0 -8633,13,3,Four Thousand and Thirty Two,8246,Nan,Biat,Jiang Li Tao,0 -8634,36,16,Thirty Four,255,Nan,Biat,Searlas Grenier,0 -8635,40,1,Five Hundred and Twenty Eight,9285,Nan,Biat,Emily D. Short,0 -8636,18,34,One Thousand Four Hundred and Ninety Eight,3419,Nan,Biat,Holly Martin,0 -8637,28,8,One Thousand Eight Hundred and Eighty Nine,2318,Nan,Biat,Steffen Krueger,0 -8638,23,38,Three Thousand Five Hundred and Seventy,5214,Nan,Biat,Freddie Reid,0 -8639,24,16,One Hundred and Fifty Two,1507,Nan,Biat,Searlas Grenier,0 -8640,37,31,Five Hundred and Ninety Nine,4717,Nan,Biat,Naomi Grant,0 -8641,8,27,Six Hundred and Twenty One,948,Nan,Biat,Colette Monjeau,0 -8642,41,34,Six, ,205.png,Biat,Holly Martin,0 -8643,3,8,Seven Hundred and Twenty Four, ,18.png,Biat,Steffen Krueger,0 -8644,14,10,Ninety Seven,478,Nan,Biat,Stephan Schwab,0 -8645,12,0, ,5086,64.png,Biat,Ethel M. Bryson,0 -8646,30,3,Three Hundred and Eighteen,2969,Nan,Biat,Jiang Li Tao,0 -8647,25,4,Fifty Two, ,126.png,Biat,Wafiyah Nashwa Wasem,0 -8648,24,12,Two Thousand Six Hundred and Thirty Nine,8482,Nan,Biat,Marcel Achen,0 -8649,5,11,Four Hundred and Forty Two,2876,Nan,Biat,Jens Egger,0 -8650,42,42,Four Thousand Two Hundred and Twenty Eight, ,212.png,Biat,Brady Jamin,0 -8651,10,41,Four Hundred and Five,7473,Nan,Biat,Germa de Geus,0 -8652,40,7,Two Thousand Eight Hundred and Ninety Eight,5236,Nan,Biat,Hasna Bahiyaa Amari,0 -8653,15,18,Five Hundred and Fifty Five,3377,Nan,Biat,Edmee Pelletier,0 -8654,4,15,Four Thousand Two Hundred and Seventy Three, ,23.png,Biat,Milenko Tkalcic,0 -8655,42,10,Sixty Two,1035,Nan,Biat,Stephan Schwab,0 -8656,41,34,One Thousand Three Hundred and Eighty Nine,1787,Nan,Biat,Holly Martin,0 -8657,14,23,One Thousand Five Hundred and Eighty Four,4959,Nan,Biat,Thรฉrรจse Fortier,0 -8658,6,30,Three Thousand Two Hundred and Twenty One,6677,Nan,Biat,Jodie Holden,0 -8659,1,10, ,8455,6.png,Biat,Stephan Schwab,0 -8660,14,14, ,1153,70.png,Biat,Renata Lukic,0 -8661,6,27, ,6336,30.png,Biat,Colette Monjeau,0 -8662,23,16,Two Thousand One Hundred and Forty Five,2533,Nan,Biat,Searlas Grenier,0 -8663,7,23,Seven Thousand Four Hundred and Eighty Six,7684,Nan,Biat,Thรฉrรจse Fortier,0 -8664,7,12,Five Thousand Five Hundred and Ninety,6514,Nan,Biat,Marcel Achen,0 -8665,31,32,One Thousand Nine Hundred and Forty Four, ,157.png,Biat,Chelsea Watson,0 -8666,0,29,Four Hundred and Ninety Nine,3944,Nan,Biat,Hayden Bruce,0 -8667,37,40,Two Thousand Four Hundred and Ninety Five,8720,Nan,Biat,David Howard,0 -8668,6,0,Eight Hundred and Sixty Seven,3128,Nan,Biat,Ethel M. Bryson,0 -8669,28,21,Four Thousand Nine Hundred and Fifteen,5378,Nan,Biat,David Corbeil,0 -8670,36,32,One Thousand Seven Hundred and Three,9030,Nan,Biat,Chelsea Watson,0 -8671,8,27, ,2941,43.png,Biat,Colette Monjeau,0 -8672,8,2,Two Thousand Six Hundred and Thirty Seven, ,40.png,Biat,Chi Hsiao,0 -8673,26,31,Eight Hundred and Fifteen,3658,Nan,Biat,Naomi Grant,0 -8674,39,31,Four Thousand Eight Hundred and Eighty Three,7843,Nan,Biat,Naomi Grant,0 -8675,38,7,One Hundred and Eighty Two, ,193.png,Biat,Hasna Bahiyaa Amari,0 -8676,2,43, ,9093,11.png,Biat,Aruna Bekx,0 -8677,30,6,One Hundred and Twenty Five, ,150.png,Biat,Abdul Qais Khouri,0 -8678,22,28,Six Hundred and Nine, ,113.png,Biat,Chapin Auger,0 -8679,22,2,Two Thousand Three Hundred and Twenty, ,113.png,Biat,Chi Hsiao,0 -8680,25,6, ,6433,127.png,Biat,Abdul Qais Khouri,0 -8681,43,4, ,4504,219.png,Biat,Wafiyah Nashwa Wasem,0 -8682,28,31, ,6228,140.png,Biat,Naomi Grant,0 -8683,11,38, ,1887,55.png,Biat,Freddie Reid,0 -8684,36,0,Six Thousand One Hundred and Twenty Six,7373,Nan,Biat,Ethel M. Bryson,0 -8685,35,36,Four Thousand Three Hundred and Ninety Three,6076,Nan,Biat,Thomas Chapman,0 -8686,36,36,Five Hundred and Fifty Five, ,182.png,Biat,Thomas Chapman,0 -8687,13,29,Two Thousand Eight Hundred and Sixty One,4898,Nan,Biat,Hayden Bruce,0 -8688,38,12,Five Hundred and Eighty Nine, ,190.png,Biat,Marcel Achen,0 -8689,20,15,Nine Thousand and Sixty Two, ,101.png,Biat,Milenko Tkalcic,0 -8690,36,41,Five Thousand Three Hundred and Twelve,9699,Nan,Biat,Germa de Geus,0 -8691,27,8,Four Thousand Nine Hundred and Ninety Nine, ,135.png,Biat,Steffen Krueger,0 -8692,20,41,Two Thousand Three Hundred and Eight,6951,Nan,Biat,Germa de Geus,0 -8693,31,29,Five Thousand Two Hundred and Sixty Five, ,158.png,Biat,Hayden Bruce,0 -8694,9,41,One Thousand Eight Hundred and Eighty One, ,45.png,Biat,Germa de Geus,0 -8695,25,20,Six Hundred and Thirty Four,3834,Nan,Biat,Seymour Patenaude,0 -8696,16,16,Four Thousand One Hundred and Twelve, ,80.png,Biat,Searlas Grenier,0 -8697,24,43, ,8645,124.png,Biat,Aruna Bekx,0 -8698,42,29,Three Thousand Two Hundred and Seventy Seven,7691,Nan,Biat,Hayden Bruce,0 -8699,14,36,Six Hundred and Twelve,1065,Nan,Biat,Thomas Chapman,0 -8700,31,19,Six Thousand Nine Hundred and Forty Seven,8822,Nan,Biat,Franรงoise Lapierre,0 -8701,7,36,Six Thousand Six Hundred and Fity For,6654,39.png,Biat,Thomas Chapman,1 -8702,0,37,Thre Thousand Two Hundred and Sixt Six,3266,2.png,Biat,Eva Davies,1 -8703,41,43,Thre Thousand Six Hundred and Thirteen,3613,209.png,Biat,Aruna Bekx,1 -8704,19,4,Six Thousand On Hundred and On,6101,97.png,Biat,Wafiyah Nashwa Wasem,1 -8705,37,19,On Hundred and Foty For,144,188.png,Biat,Franรงoise Lapierre,1 -8706,17,39,Nine Thousand and Twenty Five,9025,87.png,Biat,Katie Connor,1 -8707,19,7,Eigt Thousand Two Hundred and Twenty Six,8226,97.png,Biat,Hasna Bahiyaa Amari,1 -8708,15,39,Five Thousand Two Hundred and Sixt For,5264,78.png,Biat,Katie Connor,1 -8709,2,30,Six Hundred and Sixt Two,662,10.png,Biat,Jodie Holden,1 -8710,25,31,Six Thousand Two Hundred and Thirty Eigt,6238,129.png,Biat,Naomi Grant,1 -8711,35,12,Five Hundred and Foty Thre,543,179.png,Biat,Marcel Achen,1 -8712,10,23,Seven Thousand Eigt Hundred and Fity Two,7852,53.png,Biat,Thรฉrรจse Fortier,1 -8713,28,20,Thre Thousand Six Hundred and Twenty Five,3625,142.png,Biat,Seymour Patenaude,1 -8714,22,35,Nine Thousand Thre Hundred and Twenty Six,9326,110.png,Biat,Elliot Humphreys,1 -8715,26,4,Two Thousand and Nineten,2019,130.png,Biat,Wafiyah Nashwa Wasem,1 -8716,29,11,Five Thousand Eigt Hundred and Ninety Thre,5893,145.png,Biat,Jens Egger,1 -8717,2,25,Two Thousand and Thirty Two,2032,10.png,Biat,Fleurette Coudert,1 -8718,8,39,Thre Thousand and Seventeen,3017,44.png,Biat,Katie Connor,1 -8719,12,4,On Thousand Eigt Hundred and Eihty For,1884,62.png,Biat,Wafiyah Nashwa Wasem,1 -8720,35,33,Nine Thousand Eigt Hundred and Ninety Five,9895,175.png,Biat,Eleanor Freeman,1 -8721,32,11,Eigt Thousand Eigt Hundred and Foty Thre,8843,160.png,Biat,Jens Egger,1 -8722,37,24,Nine Hundred and Eihty Seven,987,187.png,Biat,Clarice Blanc,1 -8723,22,23,Nine Thousand Five Hundred and Six,9506,114.png,Biat,Thรฉrรจse Fortier,1 -8724,33,18,On Thousand and Fity Six,1056,165.png,Biat,Edmee Pelletier,1 -8725,4,33,Nine Thousand Seven Hundred and Seenty Seven,9777,21.png,Biat,Eleanor Freeman,1 -8726,4,14,Two Hundred and Twenty For,224,22.png,Biat,Renata Lukic,1 -8727,28,33,Six Hundred and Fity Two,652,144.png,Biat,Eleanor Freeman,1 -8728,0,0,Eigt Thousand and Foty Six,8046,4.png,Biat,Ethel M. Bryson,1 -8729,2,16,Thre Thousand Two Hundred and Eihty Six,3286,13.png,Biat,Searlas Grenier,1 -8730,40,17,Seven Hundred and Seventeen,717,200.png,Biat,Yolette Cloutier,1 -8731,14,16,Two Thousand Thre Hundred and Sixt Nine,2369,70.png,Biat,Searlas Grenier,1 -8732,28,8,For Thousand On Hundred and Foty Five,4145,144.png,Biat,Steffen Krueger,1 -8733,37,28,Five Thousand and Eihteen,5018,186.png,Biat,Chapin Auger,1 -8734,41,34,On Thousand and Thirty Five,1035,208.png,Biat,Holly Martin,1 -8735,21,14,Six Thousand On Hundred and Foty Six,6146,107.png,Biat,Renata Lukic,1 -8736,23,22,Five Thousand Thre Hundred and Seenty Nine,5379,119.png,Biat,Eglantine Forest,1 -8737,35,31,Eigt Thousand On Hundred and Thirty Seven,8137,179.png,Biat,Naomi Grant,1 -8738,40,36,Five Thousand Seven Hundred and Ten,5710,204.png,Biat,Thomas Chapman,1 -8739,11,1,Thre Thousand On Hundred and Ninety,3190,55.png,Biat,Emily D. Short,1 -8740,19,27,Thre Thousand Thre Hundred,3300,96.png,Biat,Colette Monjeau,1 -8741,34,32,Five Thousand Eigt Hundred and Sixt Nine,5869,171.png,Biat,Chelsea Watson,1 -8742,26,12,Eigt Thousand Eigt Hundred and Foty On,8841,131.png,Biat,Marcel Achen,1 -8743,15,9,Two Thousand Seven Hundred and Seven,2707,76.png,Biat,Maria Kalb,1 -8744,11,39,Five Thousand Seven Hundred and Twenty,5720,58.png,Biat,Katie Connor,1 -8745,30,24,Eigt Hundred and Seenty Eigt,878,154.png,Biat,Clarice Blanc,1 -8746,18,11,Six Thousand Six Hundred and Seenty,6670,92.png,Biat,Jens Egger,1 -8747,30,0,Two Thousand On Hundred and Ten,2110,153.png,Biat,Ethel M. Bryson,1 -8748,25,4,Thre Thousand On Hundred and On,3101,129.png,Biat,Wafiyah Nashwa Wasem,1 -8749,26,0,Two Thousand Five Hundred,2500,133.png,Biat,Ethel M. Bryson,1 -8750,0,6,Five Thousand For Hundred and Sxten,5416,4.png,Biat,Abdul Qais Khouri,1 -8751,8,22,Eigt Thousand Nine Hundred and Ninety Eigt,8998,40.png,Biat,Eglantine Forest,1 -8752,38,13,Eigt Thousand Nine Hundred and Forteen,8914,191.png,Biat,Petra Kovacic,1 -8753,31,35,Nine Thousand Seven Hundred and Seenty Nine,9779,159.png,Biat,Elliot Humphreys,1 -8754,2,32,On Thousand Five Hundred and Two,1502,12.png,Biat,Chelsea Watson,1 -8755,2,38,Eigt Thousand Eigt Hundred and For,8804,10.png,Biat,Freddie Reid,1 -8756,1,4,Seven Thousand and Twenty Nine,7029,5.png,Biat,Wafiyah Nashwa Wasem,1 -8757,22,32,Nine Thousand On Hundred and Seenty Five,9175,110.png,Biat,Chelsea Watson,1 -8758,19,3,On Thousand Seven Hundred and Thirty For,1734,96.png,Biat,Jiang Li Tao,1 -8759,40,19,For Thousand Thre Hundred and Ninety Six,4396,201.png,Biat,Franรงoise Lapierre,1 -8760,27,36,Two Thousand Five Hundred and Thirty On,2531,135.png,Biat,Thomas Chapman,1 -8761,11,15,On Thousand Nine Hundred and Eihty Five,1985,59.png,Biat,Milenko Tkalcic,1 -8762,40,36,Thre Thousand For Hundred and Fity Nine,3459,203.png,Biat,Thomas Chapman,1 -8763,18,17,Two Thousand Two Hundred and Foty Five,2245,92.png,Biat,Yolette Cloutier,1 -8764,38,11,Eigt Thousand Thre Hundred and Sixt For,8364,193.png,Biat,Jens Egger,1 -8765,8,26,Two Thousand Eigt Hundred and Six,2806,43.png,Biat,Sidney Lapointe,1 -8766,31,34,Five Thousand Thre Hundred and Thre,5303,155.png,Biat,Holly Martin,1 -8767,10,11,Nine Thousand Five Hundred and Fiteen,9515,53.png,Biat,Jens Egger,1 -8768,7,32,Seven Thousand Nine Hundred and Seenty Seven,7977,37.png,Biat,Chelsea Watson,1 -8769,2,17,On Thousand Five Hundred and Fity,1550,14.png,Biat,Yolette Cloutier,1 -8770,22,20,Eigt Thousand For Hundred and Fity,8450,114.png,Biat,Seymour Patenaude,1 -8771,6,40,Thre Thousand Thre Hundred and Fity Nine,3359,31.png,Biat,David Howard,1 -8772,3,7,Six Thousand Seven Hundred and Thirty Thre,6733,15.png,Biat,Hasna Bahiyaa Amari,1 -8773,24,41,Six Thousand Five Hundred and Foty Eigt,6548,124.png,Biat,Germa de Geus,1 -8774,7,42,Five Thousand Nine Hundred and Fity Two,5952,37.png,Biat,Brady Jamin,1 -8775,11,43,On Thousand Five Hundred and Forteen,1514,59.png,Biat,Aruna Bekx,1 -8776,12,22,Five Thousand Six Hundred and Eihty On,5681,62.png,Biat,Eglantine Forest,1 -8777,24,16,Nine Thousand Two Hundred and Eigt,9208,120.png,Biat,Searlas Grenier,1 -8778,34,1,Six Thousand and Seven,6007,172.png,Biat,Emily D. Short,1 -8779,14,15,Nine Thousand Nine Hundred and Thirty Two,9932,70.png,Biat,Milenko Tkalcic,1 -8780,15,7,On Thousand Nine Hundred and Sixt Nine,1969,78.png,Biat,Hasna Bahiyaa Amari,1 -8781,2,3,Seven Thousand For Hundred and Two,7402,11.png,Biat,Jiang Li Tao,1 -8782,14,34,Six Thousand Thre Hundred and Seenty Two,6372,74.png,Biat,Holly Martin,1 -8783,7,14,Five Thousand and Twenty Five,5025,36.png,Biat,Renata Lukic,1 -8784,0,10,Nine Thousand Thre Hundred and Fity On,9351,3.png,Biat,Stephan Schwab,1 -8785,40,24,Nine Thousand Nine Hundred and Eihty Five,9985,204.png,Biat,Clarice Blanc,1 -8786,11,12,Nine Thousand Six Hundred and Sixt For,9664,58.png,Biat,Marcel Achen,1 -8787,21,33,Eigt Thousand and Seenty Two,8072,109.png,Biat,Eleanor Freeman,1 -8788,6,4,Thre Thousand On Hundred and Eihty Eigt,3188,33.png,Biat,Wafiyah Nashwa Wasem,1 -8789,40,31,Eigt Thousand Six Hundred and Foty Thre,8643,200.png,Biat,Naomi Grant,1 -8790,42,13,Five Thousand and Ninety For,5094,213.png,Biat,Petra Kovacic,1 -8791,39,0,On Thousand On Hundred and Seenty Thre,1173,195.png,Biat,Ethel M. Bryson,1 -8792,34,5,Eigt Hundred and Seenty Nine,879,173.png,Biat,Fawwaz Zuhayr Mustafa,1 -8793,28,7,Seven Thousand Six Hundred and Nine,7609,143.png,Biat,Hasna Bahiyaa Amari,1 -8794,30,23,For Hundred and Twenty Eigt,428,150.png,Biat,Thรฉrรจse Fortier,1 -8795,7,36,Six Thousand Seven Hundred and Foty Seven,6747,36.png,Biat,Thomas Chapman,1 -8796,35,23,Six Thousand Five Hundred and Thirteen,6513,175.png,Biat,Thรฉrรจse Fortier,1 -8797,22,23,Nine Thousand Nine Hundred and Thre,9903,112.png,Biat,Thรฉrรจse Fortier,1 -8798,8,41,Two Thousand Seven Hundred and Nine,2709,40.png,Biat,Germa de Geus,1 -8799,4,14,For Thousand Seven Hundred and Thirty Nine,4739,21.png,Biat,Renata Lukic,1 -8800,33,40,Seven Thousand On Hundred and Eleven,7111,165.png,Biat,David Howard,1 -8801,35,36,On Thousand For Hundred and Foty Two,1442,179.png,Biat,Thomas Chapman,1 -8802,16,30,Thre Thousand Six Hundred and For,3604,81.png,Biat,Jodie Holden,1 -8803,34,18,Six Thousand On Hundred and Ninety On,6191,173.png,Biat,Edmee Pelletier,1 -8804,35,42,Seven Thousand Two Hundred and Five,7205,176.png,Biat,Brady Jamin,1 -8805,35,4,Six Hundred and Twlve,612,177.png,Biat,Wafiyah Nashwa Wasem,1 -8806,14,33,On Thousand and Twenty For,1024,73.png,Biat,Eleanor Freeman,1 -8807,1,39,For Thousand Six Hundred and Thre,4603,9.png,Biat,Katie Connor,1 -8808,23,36,Five Thousand and Ninety Thre,5093,116.png,Biat,Thomas Chapman,1 -8809,26,33,Thre Hundred and Fity,350,130.png,Biat,Eleanor Freeman,1 -8810,29,15,Nine Thousand On Hundred and Twenty Thre,9123,148.png,Biat,Milenko Tkalcic,1 -8811,18,16,Nine Thousand Seven Hundred and Fity For,9754,92.png,Biat,Searlas Grenier,1 -8812,24,4,On Thousand Two Hundred and Eihty Thre,1283,124.png,Biat,Wafiyah Nashwa Wasem,1 -8813,5,1,Thre Thousand On Hundred and Foty For,3144,28.png,Biat,Emily D. Short,1 -8814,26,7,Nine Thousand Eigt Hundred and Thirty Six,9836,132.png,Biat,Hasna Bahiyaa Amari,1 -8815,19,29,Eigt Thousand Five Hundred and Eihty For,8584,98.png,Biat,Hayden Bruce,1 -8816,16,10,For Thousand Five Hundred and Thirty Seven,4537,81.png,Biat,Stephan Schwab,1 -8817,9,29,For Thousand For Hundred and Five,4405,48.png,Biat,Hayden Bruce,1 -8818,31,36,Eigt Thousand Nine Hundred and Ninety Seven,8997,157.png,Biat,Thomas Chapman,1 -8819,7,17,For Thousand For Hundred and Fity For,4454,36.png,Biat,Yolette Cloutier,1 -8820,5,40,Seven Thousand Nine Hundred and Thre,7903,28.png,Biat,David Howard,1 -8821,43,12,Nine Thousand Two Hundred and Thirty Two,9232,218.png,Biat,Marcel Achen,1 -8822,24,34,Nine Thousand Six Hundred and Twenty For,9624,120.png,Biat,Holly Martin,1 -8823,31,2,Nine Hundred and Foty For,944,158.png,Biat,Chi Hsiao,1 -8824,2,3,On Thousand On Hundred and Seven,1107,12.png,Biat,Jiang Li Tao,1 -8825,8,21,For Thousand Five Hundred and Eihty Seven,4587,42.png,Biat,David Corbeil,1 -8826,1,43,Five Thousand Seven Hundred and Thirty For,5734,9.png,Biat,Aruna Bekx,1 -8827,42,37,Two Thousand Thre Hundred and Seenty For,2374,213.png,Biat,Eva Davies,1 -8828,32,7,Two Thousand and Eihty Seven,2087,163.png,Biat,Hasna Bahiyaa Amari,1 -8829,20,16,Six Thousand Five Hundred and Seenty Nine,6579,104.png,Biat,Searlas Grenier,1 -8830,22,14,Eigt Thousand Six Hundred and Seven,8607,112.png,Biat,Renata Lukic,1 -8831,6,12,For Hundred and Sixt Eigt,468,30.png,Biat,Marcel Achen,1 -8832,15,33,Six Thousand For Hundred and Seenty Nine,6479,78.png,Biat,Eleanor Freeman,1 -8833,36,24,Thre Thousand Eigt Hundred and Seenty Two,3872,184.png,Biat,Clarice Blanc,1 -8834,34,15,Seven Thousand Five Hundred and Eihty On,7581,173.png,Biat,Milenko Tkalcic,1 -8835,31,32,Nine Thousand Eigt Hundred and Seenty Five,9875,157.png,Biat,Chelsea Watson,1 -8836,6,21,On Thousand Five Hundred and Foty Six,1546,34.png,Biat,David Corbeil,1 -8837,11,28,Eigt Thousand Two Hundred and Sixt Five,8265,59.png,Biat,Chapin Auger,1 -8838,2,42,On Thousand Nine Hundred and Ninety Two,1992,11.png,Biat,Brady Jamin,1 -8839,43,15,For Thousand Eigt Hundred and Eihty On,4881,217.png,Biat,Milenko Tkalcic,1 -8840,18,13,Two Thousand Thre Hundred and Eihty Six,2386,92.png,Biat,Petra Kovacic,1 -8841,16,34,Six Thousand On Hundred and Sixt Thre,6163,80.png,Biat,Holly Martin,1 -8842,2,13,Two Thousand Nine Hundred and Sixt,2960,13.png,Biat,Petra Kovacic,1 -8843,17,30,Five Thousand Five Hundred and Seenty Nine,5579,89.png,Biat,Jodie Holden,1 -8844,38,30,For Thousand Seven Hundred and Fity For,4754,190.png,Biat,Jodie Holden,1 -8845,9,25,Thre Hundred and Ninety Two,392,47.png,Biat,Fleurette Coudert,1 -8846,18,1,Six Thousand Six Hundred and Ten,6610,93.png,Biat,Emily D. Short,1 -8847,1,9,Two Thousand For Hundred and Sixt Two,2462,6.png,Biat,Maria Kalb,1 -8848,36,8,Thre Thousand Seven Hundred and Seenty Thre,3773,181.png,Biat,Steffen Krueger,1 -8849,34,12,Two Thousand,2000,172.png,Biat,Marcel Achen,1 -8850,0,30,For Thousand Seven Hundred and On,4701,2.png,Biat,Jodie Holden,1 -8851,41,17,Six Hundred and Sixt On,661,207.png,Biat,Yolette Cloutier,1 -8852,42,23,Two Thousand Five Hundred and Seenty For,2574,211.png,Biat,Thรฉrรจse Fortier,1 -8853,35,21,Five Thousand Two Hundred and Fity,5250,178.png,Biat,David Corbeil,1 -8854,13,6,Five Thousand For Hundred and Foty,5440,68.png,Biat,Abdul Qais Khouri,1 -8855,20,21,For Thousand Thre Hundred and Fity Thre,4353,103.png,Biat,David Corbeil,1 -8856,31,6,Eigt Thousand Seven Hundred and Foty Five,8745,159.png,Biat,Abdul Qais Khouri,1 -8857,8,7,Six Thousand and Thirty On,6031,44.png,Biat,Hasna Bahiyaa Amari,1 -8858,18,42,Eigt Thousand Eigt Hundred and Seenty Nine,8879,93.png,Biat,Brady Jamin,1 -8859,11,0,Nine Thousand Seven Hundred and Ninety Thre,9793,59.png,Biat,Ethel M. Bryson,1 -8860,4,4,Seven Thousand Nine Hundred and Twenty Thre,7923,24.png,Biat,Wafiyah Nashwa Wasem,1 -8861,19,3,Eigt Thousand On Hundred and Sixt Eigt,8168,98.png,Biat,Jiang Li Tao,1 -8862,9,20,Five Thousand For Hundred and Sixt On,5461,48.png,Biat,Seymour Patenaude,1 -8863,28,19,Two Hundred and Twenty Six,226,142.png,Biat,Franรงoise Lapierre,1 -8864,30,19,Five Thousand Five Hundred and Eihty Nine,5589,153.png,Biat,Franรงoise Lapierre,1 -8865,39,20,Two Thousand Thre Hundred and Seenty,2370,197.png,Biat,Seymour Patenaude,1 -8866,16,9,On Hundred and Foty Five,145,81.png,Biat,Maria Kalb,1 -8867,14,34,Five Hundred and Eihty Six,586,70.png,Biat,Holly Martin,1 -8868,28,5,Two Thousand and Fity,2050,142.png,Biat,Fawwaz Zuhayr Mustafa,1 -8869,0,22,Thre Thousand Nine Hundred and Eihty Thre,3983,1.png,Biat,Eglantine Forest,1 -8870,16,17,On Thousand Thre Hundred and Ninety Thre,1393,84.png,Biat,Yolette Cloutier,1 -8871,12,14,Eigt Thousand Five Hundred and Seenty Eigt,8578,62.png,Biat,Renata Lukic,1 -8872,14,9,Two Thousand For Hundred and Ninety Five,2495,74.png,Biat,Maria Kalb,1 -8873,27,41,Five Thousand Eigt Hundred and Seenty Six,5876,137.png,Biat,Germa de Geus,1 -8874,8,35,Thre Thousand Six Hundred and Twenty Nine,3629,41.png,Biat,Elliot Humphreys,1 -8875,10,6,Nine Thousand Nine Hundred and Eihty Five,9985,54.png,Biat,Abdul Qais Khouri,1 -8876,41,17,Five Thousand Nine Hundred and Twenty Two,5922,206.png,Biat,Yolette Cloutier,1 -8877,39,1,Six Thousand On Hundred and Foty Five,6145,197.png,Biat,Emily D. Short,1 -8878,13,31,Two Thousand Nine Hundred and Thirty Two,2932,69.png,Biat,Naomi Grant,1 -8879,1,4,Seven Thousand For Hundred and Thirty,7430,9.png,Biat,Wafiyah Nashwa Wasem,1 -8880,7,35,Seven Hundred and Seenty For,774,38.png,Biat,Elliot Humphreys,1 -8881,11,27,Five Thousand For Hundred and Twenty On,5421,58.png,Biat,Colette Monjeau,1 -8882,43,30,Nine Thousand Thre Hundred and Twenty Seven,9327,216.png,Biat,Jodie Holden,1 -8883,15,40,Six Thousand Two Hundred and Twenty For,6224,78.png,Biat,David Howard,1 -8884,36,2,Six Thousand Seven Hundred and Sxten,6716,182.png,Biat,Chi Hsiao,1 -8885,4,24,Six Thousand Thre Hundred and Twenty Six,6326,24.png,Biat,Clarice Blanc,1 -8886,23,38,Seven Thousand For Hundred and Eihty,7480,116.png,Biat,Freddie Reid,1 -8887,9,33,Five Thousand For Hundred and Thirty,5430,48.png,Biat,Eleanor Freeman,1 -8888,37,15,Five Hundred and Seenty Eigt,578,187.png,Biat,Milenko Tkalcic,1 -8889,31,36,Thre Thousand Five Hundred and Twenty Seven,3527,155.png,Biat,Thomas Chapman,1 -8890,20,33,Two Thousand Thre Hundred and Ninety,2390,100.png,Biat,Eleanor Freeman,1 -8891,8,38,On Thousand Nine Hundred and Eihty Two,1982,44.png,Biat,Freddie Reid,1 -8892,17,12,On Thousand Two Hundred and Ninety,1290,89.png,Biat,Marcel Achen,1 -8893,6,26,Thre Thousand On Hundred and Fity Thre,3153,30.png,Biat,Sidney Lapointe,1 -8894,9,29,Two Thousand Six Hundred and Thirty For,2634,45.png,Biat,Hayden Bruce,1 -8895,12,28,Two Thousand Two Hundred and Sixt Seven,2267,62.png,Biat,Chapin Auger,1 -8896,8,6,Two Thousand and Foty Six,2046,40.png,Biat,Abdul Qais Khouri,1 -8897,16,34,Six Thousand Seven Hundred and Twenty Six,6726,81.png,Biat,Holly Martin,1 -8898,29,21,Nine Thousand For Hundred and Twenty Nine,9429,148.png,Biat,David Corbeil,1 -8899,26,0,Seven Thousand Seven Hundred and Eihty Nine,7789,133.png,Biat,Ethel M. Bryson,1 -8900,41,17,Seven Thousand Eigt Hundred and Sixt Eigt,7868,209.png,Biat,Yolette Cloutier,1 -8901,18,10,Two Thousand Eigt Hundred and Twenty Five,2825,92.png,Biat,Stephan Schwab,1 -8902,6,43,Seven Thousand On Hundred and Ninety Thre,7193,34.png,Biat,Aruna Bekx,1 -8903,15,12,Nine Thousand For Hundred and Twenty Nine,9429,77.png,Biat,Marcel Achen,1 -8904,4,9,Eigt Thousand Six Hundred and Ten,8610,20.png,Biat,Maria Kalb,1 -8905,41,7,Thre Thousand Seven Hundred and Sixt Thre,3763,206.png,Biat,Hasna Bahiyaa Amari,1 -8906,15,38,Two Thousand For Hundred and Foty Nine,2449,78.png,Biat,Freddie Reid,1 -8907,40,16,Two Thousand Seven Hundred and Foty Two,2742,203.png,Biat,Searlas Grenier,1 -8908,15,26,Two Thousand Nine Hundred and Fity Six,2956,79.png,Biat,Sidney Lapointe,1 -8909,0,11,Seven Thousand On Hundred and Eihty On,7181,3.png,Biat,Jens Egger,1 -8910,16,39,On Hundred and Thirty Five,135,84.png,Biat,Katie Connor,1 -8911,23,25,Eigt Thousand For Hundred and Seven,8407,115.png,Biat,Fleurette Coudert,1 -8912,43,29,Two Thousand Six Hundred and Fiteen,2615,216.png,Biat,Hayden Bruce,1 -8913,23,25,Six Thousand Nine Hundred and Fity On,6951,119.png,Biat,Fleurette Coudert,1 -8914,34,39,Five Thousand On Hundred and Thirty Eigt,5138,174.png,Biat,Katie Connor,1 -8915,43,24,Two Thousand Six Hundred and Fiteen,2615,219.png,Biat,Clarice Blanc,1 -8916,19,23,Eigt Thousand Eigt Hundred and Seventeen,8817,97.png,Biat,Thรฉrรจse Fortier,1 -8917,37,21,Two Thousand and Thirty Eigt,2038,186.png,Biat,David Corbeil,1 -8918,11,29,Five Thousand Nine Hundred and Sixt Seven,5967,58.png,Biat,Hayden Bruce,1 -8919,31,14,On Thousand On Hundred and Foty Six,1146,159.png,Biat,Renata Lukic,1 -8920,2,1,Nine Thousand Seven Hundred and Foty Two,9742,11.png,Biat,Emily D. Short,1 -8921,6,30,Five Thousand On Hundred and Twenty Six,5126,30.png,Biat,Jodie Holden,1 -8922,15,22,Nine Thousand For Hundred and Ninety Six,9496,77.png,Biat,Eglantine Forest,1 -8923,35,40,On Thousand On Hundred and Eihty Seven,1187,177.png,Biat,David Howard,1 -8924,13,22,Six Thousand For Hundred and Eleven,6411,66.png,Biat,Eglantine Forest,1 -8925,4,27,Five Thousand Five Hundred and Fity Nine,5559,23.png,Biat,Colette Monjeau,1 -8926,38,14,Thre Thousand Nine Hundred and Thirty For,3934,191.png,Biat,Renata Lukic,1 -8927,8,5,For Thousand Eigt Hundred and Thirty Seven,4837,44.png,Biat,Fawwaz Zuhayr Mustafa,1 -8928,24,9,Five Thousand On Hundred and Nine,5109,123.png,Biat,Maria Kalb,1 -8929,27,36,For Thousand Two Hundred and Thirty Nine,4239,137.png,Biat,Thomas Chapman,1 -8930,19,2,Thre Thousand For Hundred and Ninety Thre,3493,97.png,Biat,Chi Hsiao,1 -8931,0,16,On Thousand Five Hundred and Thre,1503,2.png,Biat,Searlas Grenier,1 -8932,18,14,Six Thousand Six Hundred and Fity On,6651,91.png,Biat,Renata Lukic,1 -8933,36,26,For Thousand On Hundred and Forteen,4114,184.png,Biat,Sidney Lapointe,1 -8934,0,26,For Hundred and Twenty Thre,423,3.png,Biat,Sidney Lapointe,1 -8935,15,21,Thre Thousand Thre Hundred and Thirty Nine,3339,78.png,Biat,David Corbeil,1 -8936,32,9,Seven Thousand Five Hundred and Ninety Six,7596,164.png,Biat,Maria Kalb,1 -8937,40,23,On Thousand Six Hundred and Seenty Eigt,1678,204.png,Biat,Thรฉrรจse Fortier,1 -8938,24,8,Six Thousand and Nineten,6019,123.png,Biat,Steffen Krueger,1 -8939,38,23,Thre Thousand On Hundred and Nineten,3119,191.png,Biat,Thรฉrรจse Fortier,1 -8940,19,11,Nine Thousand For Hundred and Sixt Nine,9469,97.png,Biat,Jens Egger,1 -8941,21,23,Two Thousand Six Hundred and Ninety Nine,2699,108.png,Biat,Thรฉrรจse Fortier,1 -8942,38,21,Thre Thousand Eigt Hundred and Eleven,3811,190.png,Biat,David Corbeil,1 -8943,22,20,Six Thousand Nine Hundred and Foty Seven,6947,114.png,Biat,Seymour Patenaude,1 -8944,1,17,Nine Thousand and Fity Seven,9057,6.png,Biat,Yolette Cloutier,1 -8945,42,15,Thre Thousand For Hundred and Sxten,3416,211.png,Biat,Milenko Tkalcic,1 -8946,37,11,Six Thousand Five Hundred and Sixt Thre,6563,185.png,Biat,Jens Egger,1 -8947,43,30,Nine Thousand Nine Hundred and Seven,9907,219.png,Biat,Jodie Holden,1 -8948,19,14,Two Thousand Five Hundred and Foty Thre,2543,97.png,Biat,Renata Lukic,1 -8949,15,7,Thre Thousand Thre Hundred and Seenty Thre,3373,79.png,Biat,Hasna Bahiyaa Amari,1 -8950,34,43,Eigt Thousand Nine Hundred and Thirty Five,8935,174.png,Biat,Aruna Bekx,1 -8951,36,10,For Thousand Two Hundred and Foty For,4244,181.png,Biat,Stephan Schwab,1 -8952,12,43,Seven Thousand and Sxten,7016,60.png,Biat,Aruna Bekx,1 -8953,39,34,Thre Hundred and Ninety,390,197.png,Biat,Holly Martin,1 -8954,10,29,Eigt Thousand For Hundred and Foty Seven,8447,50.png,Biat,Hayden Bruce,1 -8955,11,2,On Thousand Seven Hundred and Thirty Five,1735,55.png,Biat,Chi Hsiao,1 -8956,24,29,Nine Thousand Eigt Hundred and Ninety For,9894,121.png,Biat,Hayden Bruce,1 -8957,15,28,On Thousand and Ninety Five,1095,79.png,Biat,Chapin Auger,1 -8958,41,15,For Hundred and Eihty Thre,483,205.png,Biat,Milenko Tkalcic,1 -8959,32,31,On Thousand Eigt Hundred and Eihty Two,1882,163.png,Biat,Naomi Grant,1 -8960,29,32,Two Hundred and Thirty Thre,233,147.png,Biat,Chelsea Watson,1 -8961,10,5,Six Thousand Two Hundred and Thirty Nine,6239,50.png,Biat,Fawwaz Zuhayr Mustafa,1 -8962,26,42,Two Thousand On Hundred and Seenty On,2171,130.png,Biat,Brady Jamin,1 -8963,2,35,On Thousand and Fiteen,1015,14.png,Biat,Elliot Humphreys,1 -8964,21,36,For Thousand and Ninety On,4091,108.png,Biat,Thomas Chapman,1 -8965,32,29,Thre Thousand Six Hundred and Fity,3650,163.png,Biat,Hayden Bruce,1 -8966,6,29,Seven Thousand Seven Hundred and Sixt,7760,30.png,Biat,Hayden Bruce,1 -8967,19,5,Seven Thousand Seven Hundred and Thirty Eigt,7738,97.png,Biat,Fawwaz Zuhayr Mustafa,1 -8968,34,37,Five Thousand and Twenty Eigt,5028,171.png,Biat,Eva Davies,1 -8969,5,6,Two Thousand Two Hundred and Seenty For,2274,26.png,Biat,Abdul Qais Khouri,1 -8970,21,13,Six Thousand Six Hundred and Twenty Eigt,6628,107.png,Biat,Petra Kovacic,1 -8971,26,11,Six Thousand Five Hundred and Ninety On,6591,131.png,Biat,Jens Egger,1 -8972,13,41,Two Thousand For Hundred and Seenty On,2471,69.png,Biat,Germa de Geus,1 -8973,12,13,Eigt Thousand Thre Hundred and Seenty Thre,8373,63.png,Biat,Petra Kovacic,1 -8974,28,7,Five Thousand Seven Hundred and Six,5706,144.png,Biat,Hasna Bahiyaa Amari,1 -8975,19,33,For Thousand Six Hundred and Eihty Two,4682,99.png,Biat,Eleanor Freeman,1 -8976,6,9,Eigt Thousand Eigt Hundred and Eihteen,8818,31.png,Biat,Maria Kalb,1 -8977,21,30,Eigt Thousand Two Hundred and Sixt For,8264,106.png,Biat,Jodie Holden,1 -8978,8,8,Nine Thousand Nine Hundred and Fity Five,9955,41.png,Biat,Steffen Krueger,1 -8979,4,3,Seven Thousand Six Hundred and Foty On,7641,22.png,Biat,Jiang Li Tao,1 -8980,19,24,Six Thousand On Hundred and Sixt,6160,96.png,Biat,Clarice Blanc,1 -8981,13,0,Two Thousand Six Hundred and Sixt Six,2666,67.png,Biat,Ethel M. Bryson,1 -8982,1,16,Five Hundred and Eleven,511,8.png,Biat,Searlas Grenier,1 -8983,18,27,Six Thousand Seven Hundred and Twenty On,6721,92.png,Biat,Colette Monjeau,1 -8984,19,29,Six Thousand Nine Hundred and Twenty Two,6922,95.png,Biat,Hayden Bruce,1 -8985,18,33,Five Hundred and Fity Thre,553,91.png,Biat,Eleanor Freeman,1 -8986,43,0,For Thousand On Hundred and Seenty,4170,216.png,Biat,Ethel M. Bryson,1 -8987,26,20,Eigt Thousand Thre Hundred and Nine,8309,133.png,Biat,Seymour Patenaude,1 -8988,6,23,On Thousand Nine Hundred and Five,1905,33.png,Biat,Thรฉrรจse Fortier,1 -8989,9,10,Eigt Thousand Six Hundred and Twenty Eigt,8628,47.png,Biat,Stephan Schwab,1 -8990,5,29,Eigt Thousand Nine Hundred and Sixt Eigt,8968,28.png,Biat,Hayden Bruce,1 -8991,41,19,Seven Thousand Thre Hundred and Eihty Two,7382,205.png,Biat,Franรงoise Lapierre,1 -8992,12,35,Five Thousand Thre Hundred and Thirteen,5313,62.png,Biat,Elliot Humphreys,1 -8993,25,8,On Thousand Seven Hundred and Foty Seven,1747,126.png,Biat,Steffen Krueger,1 -8994,37,5,Thirty Five,35,185.png,Biat,Fawwaz Zuhayr Mustafa,1 -8995,11,7,Seven Thousand On Hundred and Foty,7140,57.png,Biat,Hasna Bahiyaa Amari,1 -8996,2,16,Eigt Thousand Two Hundred and Fity Two,8252,14.png,Biat,Searlas Grenier,1 -8997,9,13,Nine Thousand For Hundred and Thirteen,9413,45.png,Biat,Petra Kovacic,1 -8998,39,25,Two Thousand For Hundred and Eleven,2411,197.png,Biat,Fleurette Coudert,1 -8999,38,9,Eigt Thousand Two Hundred and Foty Two,8242,191.png,Biat,Maria Kalb,1 -9000,6,41,Five Thousand Nine Hundred and Fity Six,5956,34.png,Biat,Germa de Geus,1 -9001,24,38,Five Thousand Three Hundred and Eighty Three,5383,120.png,Universelle,Freddie Reid,1 -9002,32,20,Five Hundred and Forty Four,544,163.png,Universelle,Seymour Patenaude,1 -9003,28,13,Nine Thousand Five Hundred and Eighty Three,9583,144.png,Universelle,Petra Kovacic,1 -9004,40,1,Nine Thousand Four Hundred and Forty,9440,203.png,Universelle,Emily D. Short,1 -9005,28,43,One Thousand Five Hundred and Thirty Seven,1537,140.png,Universelle,Aruna Bekx,1 -9006,26,20,Eight Thousand Eight Hundred and Twenty One,8821,130.png,Universelle,Seymour Patenaude,1 -9007,20,8,Nine Thousand One Hundred and Eighteen,9118,103.png,Universelle,Steffen Krueger,1 -9008,0,10,Six Thousand Four Hundred and Thirty Two,6432,2.png,Universelle,Stephan Schwab,1 -9009,14,32,Seven Thousand Five Hundred and Thirty Two,7532,72.png,Universelle,Chelsea Watson,1 -9010,35,32,Eight Thousand Six Hundred and Ninety Two,8692,178.png,Universelle,Chelsea Watson,1 -9011,1,25,Eight Thousand Seven Hundred and Thirty Three,8733,6.png,Universelle,Fleurette Coudert,1 -9012,39,30,Three Thousand and Five,3005,195.png,Universelle,Jodie Holden,1 -9013,30,14,One Thousand Six Hundred and Ninety,1690,150.png,Universelle,Renata Lukic,1 -9014,41,7,Six Thousand Six Hundred and Thirty Five,6635,205.png,Universelle,Hasna Bahiyaa Amari,1 -9015,22,4,Seven Thousand Three Hundred and Fifty Two,7352,112.png,Universelle,Wafiyah Nashwa Wasem,1 -9016,1,23,Six Thousand Eight Hundred and Fifty Five,6855,5.png,Universelle,Thรฉrรจse Fortier,1 -9017,43,24,Two Thousand Four Hundred and Forty Three,2443,217.png,Universelle,Clarice Blanc,1 -9018,7,37,Four Thousand Two Hundred and Thirty,4230,37.png,Universelle,Eva Davies,1 -9019,35,25,Three Thousand and Twenty Five,3025,179.png,Universelle,Fleurette Coudert,1 -9020,26,34,Three Thousand Three Hundred and Eighty Two,3382,130.png,Universelle,Holly Martin,1 -9021,9,21,Seven Thousand Nine Hundred and Eighty Six,7986,46.png,Universelle,David Corbeil,1 -9022,43,33,Seven Thousand Five Hundred and Twenty,7520,215.png,Universelle,Eleanor Freeman,1 -9023,36,2,Eight Thousand Three Hundred and Twenty Three,8323,183.png,Universelle,Chi Hsiao,1 -9024,13,33,Seven Thousand Three Hundred and Forty Two,7342,67.png,Universelle,Eleanor Freeman,1 -9025,16,40,Nine Thousand Seven Hundred and Ten,9710,81.png,Universelle,David Howard,1 -9026,26,6,Two Hundred and Forty Four,244,131.png,Universelle,Abdul Qais Khouri,1 -9027,18,9,Six Thousand and Twenty Seven,6027,92.png,Universelle,Maria Kalb,1 -9028,13,7,Seven Thousand Three Hundred and Ninety,7390,66.png,Universelle,Hasna Bahiyaa Amari,1 -9029,42,10,One Thousand Three Hundred and Twenty Seven,1327,210.png,Universelle,Stephan Schwab,1 -9030,43,31,Six Thousand Five Hundred and Eighty Six,6586,216.png,Universelle,Naomi Grant,1 -9031,40,36,Four Hundred and Ninety Seven,497,203.png,Universelle,Thomas Chapman,1 -9032,28,12,Six Thousand Three Hundred and Seventy Five,6375,144.png,Universelle,Marcel Achen,1 -9033,21,3,One Thousand One Hundred and Sixty Two,1162,108.png,Universelle,Jiang Li Tao,1 -9034,42,26,Two Thousand One Hundred and Twenty Seven,2127,214.png,Universelle,Sidney Lapointe,1 -9035,41,3,Two Thousand Nine Hundred and Twenty Six,2926,209.png,Universelle,Jiang Li Tao,1 -9036,2,22,Four Thousand Three Hundred and Eight,4308,14.png,Universelle,Eglantine Forest,1 -9037,1,28,Four Thousand One Hundred,4100,8.png,Universelle,Chapin Auger,1 -9038,40,1,Nine Thousand One Hundred and Forty Six,9146,203.png,Universelle,Emily D. Short,1 -9039,32,38,One Hundred and Seventy One,171,160.png,Universelle,Freddie Reid,1 -9040,16,21,Two Thousand Nine Hundred and Twenty Five,2925,80.png,Universelle,David Corbeil,1 -9041,32,37,Seven Thousand Seven Hundred and Twenty Two,7722,160.png,Universelle,Eva Davies,1 -9042,4,23,One Thousand Four Hundred and Forty Six,1446,22.png,Universelle,Thรฉrรจse Fortier,1 -9043,35,39,Six Thousand One Hundred and Eighty Five,6185,179.png,Universelle,Katie Connor,1 -9044,40,22,Seven Thousand Six Hundred,7600,200.png,Universelle,Eglantine Forest,1 -9045,20,1,Nine Thousand One Hundred and Two,9102,100.png,Universelle,Emily D. Short,1 -9046,35,16,Five Thousand Three Hundred and Ninety Four,5394,179.png,Universelle,Searlas Grenier,1 -9047,3,15,Seven Thousand Five Hundred and Sixty Seven,7567,17.png,Universelle,Milenko Tkalcic,1 -9048,7,39,Two Thousand Eight Hundred and Twenty Seven,2827,39.png,Universelle,Katie Connor,1 -9049,32,38,Eight Thousand Two Hundred and Forty Nine,8249,162.png,Universelle,Freddie Reid,1 -9050,22,17,Eight Thousand and Sixty Seven,8067,114.png,Universelle,Yolette Cloutier,1 -9051,17,17,Three Thousand One Hundred and Seventeen,3117,89.png,Universelle,Yolette Cloutier,1 -9052,5,32,Two Thousand One Hundred and Twenty Four,2124,25.png,Universelle,Chelsea Watson,1 -9053,36,16,Five Thousand Three Hundred and Thirty One,5331,181.png,Universelle,Searlas Grenier,1 -9054,16,12,Three Thousand Three Hundred and Ninety Five,3395,82.png,Universelle,Marcel Achen,1 -9055,36,1,Eighty Five,85,183.png,Universelle,Emily D. Short,1 -9056,17,22,Seven Thousand Nine Hundred and Twenty One,7921,88.png,Universelle,Eglantine Forest,1 -9057,41,29,Three Thousand Seven Hundred and Fifty Two,3752,207.png,Universelle,Hayden Bruce,1 -9058,14,40,Six Thousand Seven Hundred and Fifty Four,6754,73.png,Universelle,David Howard,1 -9059,7,43,One Thousand Seven Hundred and Eighty Eight,1788,36.png,Universelle,Aruna Bekx,1 -9060,6,2,Seven Thousand One Hundred and Seventy Two,7172,34.png,Universelle,Chi Hsiao,1 -9061,43,31,One Thousand Two Hundred and Ninety Nine,1299,216.png,Universelle,Naomi Grant,1 -9062,19,5,Seven Thousand Six Hundred and Twenty Seven,7627,96.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9063,28,43,Four Thousand and Seventy Two,4072,143.png,Universelle,Aruna Bekx,1 -9064,20,39,Eight Thousand Seven Hundred and Thirty Seven,8737,104.png,Universelle,Katie Connor,1 -9065,34,19,Seven Thousand Nine Hundred and Fifty Eight,7958,171.png,Universelle,Franรงoise Lapierre,1 -9066,8,11,Four Thousand Five Hundred and Twenty Seven,4527,44.png,Universelle,Jens Egger,1 -9067,9,8,Eight Thousand Two Hundred and Seventy Four,8274,46.png,Universelle,Steffen Krueger,1 -9068,38,40,One Thousand Eight Hundred and Ninety Eight,1898,190.png,Universelle,David Howard,1 -9069,6,34,Two Thousand One Hundred and Twenty Seven,2127,31.png,Universelle,Holly Martin,1 -9070,34,17,Two Thousand Six Hundred and Three,2603,172.png,Universelle,Yolette Cloutier,1 -9071,3,43,Four Thousand One Hundred and Eighty One,4181,15.png,Universelle,Aruna Bekx,1 -9072,0,4,Seven Thousand Five Hundred and Sixty Four,7564,2.png,Universelle,Wafiyah Nashwa Wasem,1 -9073,5,43,Two Thousand Four Hundred and Thirty Nine,2439,28.png,Universelle,Aruna Bekx,1 -9074,19,15,Two Thousand Four Hundred and Thirty Four,2434,98.png,Universelle,Milenko Tkalcic,1 -9075,11,7,Five Thousand Seven Hundred and Fifty One,5751,58.png,Universelle,Hasna Bahiyaa Amari,1 -9076,12,34,Four Thousand Seven Hundred and Thirty Three,4733,62.png,Universelle,Holly Martin,1 -9077,0,15,Eight Thousand Two Hundred and Ninety Five,8295,3.png,Universelle,Milenko Tkalcic,1 -9078,12,39,Two Thousand and Fifty Nine,2059,62.png,Universelle,Katie Connor,1 -9079,33,13,Three Thousand Five Hundred and Seventy,3570,168.png,Universelle,Petra Kovacic,1 -9080,3,25,Four Thousand Seven Hundred and Forty Eight,4748,18.png,Universelle,Fleurette Coudert,1 -9081,19,23,Five Thousand Eight Hundred and Sixty Four,5864,99.png,Universelle,Thรฉrรจse Fortier,1 -9082,12,25,One Thousand One Hundred and Ninety Five,1195,60.png,Universelle,Fleurette Coudert,1 -9083,23,30,Eight Thousand Eight Hundred and Fifteen,8815,115.png,Universelle,Jodie Holden,1 -9084,28,28,Three Thousand Four Hundred and Eighty One,3481,143.png,Universelle,Chapin Auger,1 -9085,32,3,Five Hundred and Thirty Six,536,162.png,Universelle,Jiang Li Tao,1 -9086,11,24,Two Thousand Three Hundred and Ninety Four,2394,57.png,Universelle,Clarice Blanc,1 -9087,5,27,Eight Thousand Two Hundred and Seventy,8270,25.png,Universelle,Colette Monjeau,1 -9088,5,25,Four Thousand Three Hundred and Fifty Four,4354,29.png,Universelle,Fleurette Coudert,1 -9089,41,18,Eight Thousand One Hundred and Thirty Three,8133,209.png,Universelle,Edmee Pelletier,1 -9090,30,20,Six Thousand Three Hundred and Forty Two,6342,151.png,Universelle,Seymour Patenaude,1 -9091,38,42,One Thousand Two Hundred and Twenty Five,1225,194.png,Universelle,Brady Jamin,1 -9092,39,12,Three Thousand Two Hundred and Thirty,3230,195.png,Universelle,Marcel Achen,1 -9093,32,41,Nine Thousand Four Hundred and Fifty Three,9453,160.png,Universelle,Germa de Geus,1 -9094,25,43,Three Hundred and Sixty Eight,368,129.png,Universelle,Aruna Bekx,1 -9095,22,7,Three Thousand Seven Hundred and Twenty Nine,3729,111.png,Universelle,Hasna Bahiyaa Amari,1 -9096,42,27,Two Hundred and Nine,209,211.png,Universelle,Colette Monjeau,1 -9097,24,12,Seven Thousand Seven Hundred,7700,120.png,Universelle,Marcel Achen,1 -9098,28,35,One Thousand and Forty Seven,1047,140.png,Universelle,Elliot Humphreys,1 -9099,3,23,Five Thousand Five Hundred and Sixty Five,5565,15.png,Universelle,Thรฉrรจse Fortier,1 -9100,25,21,Eight Thousand One Hundred and Sixty Two,8162,128.png,Universelle,David Corbeil,1 -9101,29,12,One Thousand Nine Hundred and Seventy Nine,1979,145.png,Universelle,Marcel Achen,1 -9102,32,6,Eight Thousand Three Hundred and Twenty Three,8323,162.png,Universelle,Abdul Qais Khouri,1 -9103,40,21,Three Thousand Seven Hundred and Seven,3707,202.png,Universelle,David Corbeil,1 -9104,40,16,Nine Thousand Six Hundred and Twenty Eight,9628,200.png,Universelle,Searlas Grenier,1 -9105,31,4,Six Thousand and Sixty Nine,6069,157.png,Universelle,Wafiyah Nashwa Wasem,1 -9106,33,31,One Thousand Seven Hundred and Ninety,1790,167.png,Universelle,Naomi Grant,1 -9107,41,12,Eight Thousand and Ninety Seven,8097,207.png,Universelle,Marcel Achen,1 -9108,12,20,Nine Thousand Two Hundred and Ninety Three,9293,60.png,Universelle,Seymour Patenaude,1 -9109,33,0,Nine Thousand Five Hundred and Ninety Seven,9597,169.png,Universelle,Ethel M. Bryson,1 -9110,1,17,Seven Thousand Nine Hundred and Eighteen,7918,6.png,Universelle,Yolette Cloutier,1 -9111,7,34,Nine Thousand and Five,9005,35.png,Universelle,Holly Martin,1 -9112,43,6,Seven Thousand Eight Hundred and Sixty One,7861,217.png,Universelle,Abdul Qais Khouri,1 -9113,24,6,Five Thousand Eight Hundred and Eighty One,5881,121.png,Universelle,Abdul Qais Khouri,1 -9114,43,22,Six Thousand Five Hundred and Sixty Eight,6568,217.png,Universelle,Eglantine Forest,1 -9115,7,13,Eight Thousand Seven Hundred and Fifty Eight,8758,35.png,Universelle,Petra Kovacic,1 -9116,14,43,Five Thousand Eight Hundred and Forty Seven,5847,73.png,Universelle,Aruna Bekx,1 -9117,14,42,One Thousand Six Hundred and Eighty,1680,74.png,Universelle,Brady Jamin,1 -9118,25,6,Five Thousand Seven Hundred and Eighty Four,5784,125.png,Universelle,Abdul Qais Khouri,1 -9119,19,9,Three Thousand Eight Hundred and Thirty Seven,3837,99.png,Universelle,Maria Kalb,1 -9120,22,9,Three Thousand Seven Hundred and Thirty Seven,3737,111.png,Universelle,Maria Kalb,1 -9121,0,10,Four Thousand Eight Hundred and Eighty Five,4885,0.png,Universelle,Stephan Schwab,1 -9122,39,28,Seven Hundred and Ninety,790,199.png,Universelle,Chapin Auger,1 -9123,23,39,Five Thousand One Hundred and Forty Three,5143,115.png,Universelle,Katie Connor,1 -9124,28,3,Two Thousand Five Hundred and Seven,2507,140.png,Universelle,Jiang Li Tao,1 -9125,43,40,Two Thousand Four Hundred and Sixty Four,2464,215.png,Universelle,David Howard,1 -9126,39,11,Four Thousand Seven Hundred and Sixty Eight,4768,196.png,Universelle,Jens Egger,1 -9127,6,8,Three Thousand Two Hundred and Thirty Four,3234,32.png,Universelle,Steffen Krueger,1 -9128,27,32,Two Thousand Five Hundred and Forty Nine,2549,139.png,Universelle,Chelsea Watson,1 -9129,3,8,Four Hundred and Eighty Seven,487,18.png,Universelle,Steffen Krueger,1 -9130,27,0,Eight Thousand Four Hundred and Seventy Seven,8477,139.png,Universelle,Ethel M. Bryson,1 -9131,31,20,Seven Thousand Nine Hundred and Forty Seven,7947,155.png,Universelle,Seymour Patenaude,1 -9132,14,5,Nine Thousand Three Hundred and Fifteen,9315,70.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9133,42,18,Six Hundred,600,210.png,Universelle,Edmee Pelletier,1 -9134,22,4,Nine Thousand Three Hundred and Twenty Nine,9329,112.png,Universelle,Wafiyah Nashwa Wasem,1 -9135,41,40,Nine Thousand Eight Hundred and Six,9806,206.png,Universelle,David Howard,1 -9136,26,42,Two Thousand One Hundred and Forty Nine,2149,130.png,Universelle,Brady Jamin,1 -9137,33,11,Seven Thousand Five Hundred and Forty Six,7546,167.png,Universelle,Jens Egger,1 -9138,2,40,Four Thousand Nine Hundred and Fifty Six,4956,13.png,Universelle,David Howard,1 -9139,16,41,Five Thousand One Hundred and Ninety One,5191,82.png,Universelle,Germa de Geus,1 -9140,32,2,Eight Thousand and Thirty,8030,161.png,Universelle,Chi Hsiao,1 -9141,36,24,Eight Thousand Two Hundred and Three,8203,181.png,Universelle,Clarice Blanc,1 -9142,28,24,Five Thousand Nine Hundred and Ninety,5990,142.png,Universelle,Clarice Blanc,1 -9143,10,13,Three Thousand Four Hundred and Two,3402,54.png,Universelle,Petra Kovacic,1 -9144,28,32,Two Thousand Seven Hundred and Sixty Seven,2767,143.png,Universelle,Chelsea Watson,1 -9145,9,29,Six Thousand Four Hundred and Seven,6407,47.png,Universelle,Hayden Bruce,1 -9146,25,31,Seven Thousand Seven Hundred and Forty Five,7745,128.png,Universelle,Naomi Grant,1 -9147,4,30,Seven Thousand Three Hundred and Thirty,7330,21.png,Universelle,Jodie Holden,1 -9148,14,12,Five Thousand Six Hundred and Ninety Eight,5698,71.png,Universelle,Marcel Achen,1 -9149,14,8,Six Thousand Eight Hundred and Seventy Six,6876,72.png,Universelle,Steffen Krueger,1 -9150,17,27,Five Thousand Two Hundred and Ten,5210,85.png,Universelle,Colette Monjeau,1 -9151,31,9,Nine Thousand Four Hundred and Seventy Six,9476,155.png,Universelle,Maria Kalb,1 -9152,6,12,Five Thousand Seven Hundred and Seventy Two,5772,33.png,Universelle,Marcel Achen,1 -9153,27,1,Six Thousand Six Hundred and Forty Three,6643,138.png,Universelle,Emily D. Short,1 -9154,23,9,Eight Thousand Five Hundred and Sixty Four,8564,117.png,Universelle,Maria Kalb,1 -9155,27,28,Six Thousand Three Hundred and Sixty Two,6362,136.png,Universelle,Chapin Auger,1 -9156,41,19,Nine Thousand Five Hundred and Sixty Two,9562,205.png,Universelle,Franรงoise Lapierre,1 -9157,39,29,Eight Thousand Six Hundred and Seventy Two,8672,198.png,Universelle,Hayden Bruce,1 -9158,6,9,Eight Thousand Two Hundred and Thirty One,8231,33.png,Universelle,Maria Kalb,1 -9159,2,10,Eight Thousand Two Hundred and Fourteen,8214,14.png,Universelle,Stephan Schwab,1 -9160,1,10,Seven Thousand Four Hundred and Sixteen,7416,7.png,Universelle,Stephan Schwab,1 -9161,2,42,Eight Thousand Nine Hundred and Three,8903,12.png,Universelle,Brady Jamin,1 -9162,32,43,Three Thousand Three Hundred and Ninety One,3391,161.png,Universelle,Aruna Bekx,1 -9163,17,40,Seven Hundred and Twenty,720,88.png,Universelle,David Howard,1 -9164,6,4,Eight Thousand Eight Hundred and Seventy Two,8872,31.png,Universelle,Wafiyah Nashwa Wasem,1 -9165,0,30,Eight Thousand Seven Hundred and Eighty Eight,8788,3.png,Universelle,Jodie Holden,1 -9166,29,43,Five Thousand Nine Hundred and Ninety,5990,147.png,Universelle,Aruna Bekx,1 -9167,15,38,Three Thousand Six Hundred and Fifty Seven,3657,79.png,Universelle,Freddie Reid,1 -9168,9,0,Nine Thousand Four Hundred and Thirty Seven,9437,45.png,Universelle,Ethel M. Bryson,1 -9169,20,36,Seven Thousand Three Hundred and Three,7303,104.png,Universelle,Thomas Chapman,1 -9170,5,39,Five Thousand Two Hundred and Thirty Seven,5237,28.png,Universelle,Katie Connor,1 -9171,9,23,Two Thousand Eight Hundred and Ninety Six,2896,47.png,Universelle,Thรฉrรจse Fortier,1 -9172,17,21,Nine Hundred and Thirteen,913,87.png,Universelle,David Corbeil,1 -9173,37,32,Two Thousand Two Hundred and Fifty Seven,2257,188.png,Universelle,Chelsea Watson,1 -9174,40,40,Three Hundred and Fifty Four,354,204.png,Universelle,David Howard,1 -9175,33,38,Four Thousand and Ten,4010,169.png,Universelle,Freddie Reid,1 -9176,37,34,Six Thousand Five Hundred and Ninety Eight,6598,185.png,Universelle,Holly Martin,1 -9177,10,39,Seven Thousand Six Hundred and Twenty Six,7626,53.png,Universelle,Katie Connor,1 -9178,25,4,Eight Thousand Two Hundred and Forty,8240,125.png,Universelle,Wafiyah Nashwa Wasem,1 -9179,16,18,Six Thousand Four Hundred and Fifteen,6415,82.png,Universelle,Edmee Pelletier,1 -9180,37,33,Five Thousand Nine Hundred and Twenty Two,5922,189.png,Universelle,Eleanor Freeman,1 -9181,6,40,Five Thousand Six Hundred and Sixty Three,5663,32.png,Universelle,David Howard,1 -9182,37,23,Nine Thousand One Hundred and Fifteen,9115,189.png,Universelle,Thรฉrรจse Fortier,1 -9183,3,13,One Thousand Six Hundred and Six,1606,17.png,Universelle,Petra Kovacic,1 -9184,22,26,Eight Thousand Four Hundred and Thirty Two,8432,112.png,Universelle,Sidney Lapointe,1 -9185,28,12,Nine Thousand and Eighty Eight,9088,140.png,Universelle,Marcel Achen,1 -9186,0,7,Five Thousand Seven Hundred and Fifty Eight,5758,2.png,Universelle,Hasna Bahiyaa Amari,1 -9187,41,5,Seven Hundred,700,207.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9188,2,20,Five Thousand One Hundred and Twenty Five,5125,10.png,Universelle,Seymour Patenaude,1 -9189,9,29,One Hundred and Seventy Four,174,45.png,Universelle,Hayden Bruce,1 -9190,13,3,Eight Thousand Three Hundred and Fifty Five,8355,67.png,Universelle,Jiang Li Tao,1 -9191,21,6,Seven Thousand Three Hundred and Twenty Eight,7328,107.png,Universelle,Abdul Qais Khouri,1 -9192,3,17,Four Thousand and Seventy Five,4075,18.png,Universelle,Yolette Cloutier,1 -9193,31,10,Two Thousand Two Hundred and Nine,2209,156.png,Universelle,Stephan Schwab,1 -9194,30,28,Four Thousand One Hundred and Ninety Two,4192,154.png,Universelle,Chapin Auger,1 -9195,20,12,Three Thousand Nine Hundred and Forty Five,3945,100.png,Universelle,Marcel Achen,1 -9196,5,22,Five Thousand Six Hundred and Thirty Five,5635,28.png,Universelle,Eglantine Forest,1 -9197,7,17,Nine Thousand Five Hundred and Ninety Seven,9597,39.png,Universelle,Yolette Cloutier,1 -9198,5,34,Two Thousand One Hundred and Twenty One,2121,29.png,Universelle,Holly Martin,1 -9199,16,35,Five Thousand Four Hundred and Sixty Six,5466,80.png,Universelle,Elliot Humphreys,1 -9200,7,28,Four Thousand Six Hundred and Fifty One,4651,35.png,Universelle,Chapin Auger,1 -9201,33,38,Eight Thousand One Hundred and Ninety Seven,8197,169.png,Universelle,Freddie Reid,1 -9202,39,1,One Thousand Two Hundred and Thirty Two,1232,199.png,Universelle,Emily D. Short,1 -9203,3,3,Four Thousand Three Hundred and Ninety Six,4396,15.png,Universelle,Jiang Li Tao,1 -9204,17,15,Three Thousand Seven Hundred and Seventy Two,3772,88.png,Universelle,Milenko Tkalcic,1 -9205,0,25,Three Thousand Five Hundred and Forty Three,3543,0.png,Universelle,Fleurette Coudert,1 -9206,5,35,Four Thousand Nine Hundred and Thirty Five,4935,25.png,Universelle,Elliot Humphreys,1 -9207,5,15,Four Thousand Two Hundred and Eighty Five,4285,26.png,Universelle,Milenko Tkalcic,1 -9208,12,5,Eight Hundred and Sixty,860,61.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9209,7,1,Nine Thousand Nine Hundred and Five,9905,39.png,Universelle,Emily D. Short,1 -9210,36,10,Three Thousand and Sixty Four,3064,184.png,Universelle,Stephan Schwab,1 -9211,21,31,Seven Hundred and Sixty Seven,767,109.png,Universelle,Naomi Grant,1 -9212,43,16,Three Thousand Three Hundred and Eighty Eight,3388,219.png,Universelle,Searlas Grenier,1 -9213,38,13,Two Thousand Six Hundred and Seventy One,2671,192.png,Universelle,Petra Kovacic,1 -9214,32,35,Five Thousand Seven Hundred and Ninety Eight,5798,161.png,Universelle,Elliot Humphreys,1 -9215,34,5,One Thousand Six Hundred and Eighty Six,1686,171.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9216,10,30,Four Thousand Eight Hundred and Ninety,4890,53.png,Universelle,Jodie Holden,1 -9217,42,21,Six Hundred and Seventy,670,213.png,Universelle,David Corbeil,1 -9218,19,15,Three Thousand Nine Hundred and Sixty Five,3965,98.png,Universelle,Milenko Tkalcic,1 -9219,24,9,Five Thousand Eight Hundred and Nine,5809,123.png,Universelle,Maria Kalb,1 -9220,36,40,Eight Thousand Six Hundred and Ninety Seven,8697,180.png,Universelle,David Howard,1 -9221,14,43,Five Thousand Eight Hundred and Forty Six,5846,73.png,Universelle,Aruna Bekx,1 -9222,42,11,Six Thousand One Hundred and Sixty Three,6163,212.png,Universelle,Jens Egger,1 -9223,10,39,Six Thousand Eight Hundred and Seventy Eight,6878,54.png,Universelle,Katie Connor,1 -9224,28,3,Four Thousand and Forty One,4041,141.png,Universelle,Jiang Li Tao,1 -9225,7,32,One Thousand Two Hundred and Forty Four,1244,39.png,Universelle,Chelsea Watson,1 -9226,34,41,Two Thousand and Forty One,2041,173.png,Universelle,Germa de Geus,1 -9227,1,18,Four Thousand Six Hundred and Eighty Seven,4687,5.png,Universelle,Edmee Pelletier,1 -9228,20,24,Four Thousand Two Hundred and Seventy Nine,4279,102.png,Universelle,Clarice Blanc,1 -9229,12,42,Four Thousand One Hundred and Fifty,4150,62.png,Universelle,Brady Jamin,1 -9230,10,1,Two Thousand Six Hundred and Thirty Eight,2638,54.png,Universelle,Emily D. Short,1 -9231,22,19,Seven Thousand One Hundred and Six,7106,114.png,Universelle,Franรงoise Lapierre,1 -9232,1,6,Three Thousand Six Hundred and Seventy Nine,3679,6.png,Universelle,Abdul Qais Khouri,1 -9233,42,14,Two Hundred and Sixty Four,264,213.png,Universelle,Renata Lukic,1 -9234,17,36,Nine Thousand and Seventy Three,9073,85.png,Universelle,Thomas Chapman,1 -9235,3,8,Two Thousand One Hundred and Forty Seven,2147,19.png,Universelle,Steffen Krueger,1 -9236,29,10,One Thousand Nine Hundred and Fifty Seven,1957,148.png,Universelle,Stephan Schwab,1 -9237,19,0,Five Thousand Eight Hundred and Forty Five,5845,96.png,Universelle,Ethel M. Bryson,1 -9238,27,27,Nine Thousand Nine Hundred and Sixty Five,9965,138.png,Universelle,Colette Monjeau,1 -9239,25,18,Three Thousand Six Hundred and Sixty Nine,3669,126.png,Universelle,Edmee Pelletier,1 -9240,12,22,Three Thousand Five Hundred and Eighty Five,3585,61.png,Universelle,Eglantine Forest,1 -9241,30,34,Eight Thousand Four Hundred and Ninety Two,8492,152.png,Universelle,Holly Martin,1 -9242,34,0,One Thousand Nine Hundred and Sixty Two,1962,171.png,Universelle,Ethel M. Bryson,1 -9243,27,25,Two Thousand One Hundred and Ninety One,2191,136.png,Universelle,Fleurette Coudert,1 -9244,13,16,Two Thousand Two Hundred and Thirty Four,2234,67.png,Universelle,Searlas Grenier,1 -9245,8,36,Five Hundred and Ninety,590,41.png,Universelle,Thomas Chapman,1 -9246,2,28,Two Thousand One Hundred and Fifty Five,2155,11.png,Universelle,Chapin Auger,1 -9247,32,1,Eighty Eight,88,161.png,Universelle,Emily D. Short,1 -9248,19,40,Six Thousand Nine Hundred and Seventy Four,6974,97.png,Universelle,David Howard,1 -9249,23,40,Three Thousand Nine Hundred and Ninety Eight,3998,118.png,Universelle,David Howard,1 -9250,30,21,Three Thousand Four Hundred and Forty Eight,3448,154.png,Universelle,David Corbeil,1 -9251,13,37,One Thousand Four Hundred and Ninety Three,1493,67.png,Universelle,Eva Davies,1 -9252,33,31,Four Thousand Nine Hundred and Fifty,4950,167.png,Universelle,Naomi Grant,1 -9253,27,13,Seven Thousand Five Hundred and Fifty Two,7552,136.png,Universelle,Petra Kovacic,1 -9254,42,42,Six Thousand One Hundred and Thirty Two,6132,212.png,Universelle,Brady Jamin,1 -9255,40,30,One Thousand and Forty Eight,1048,202.png,Universelle,Jodie Holden,1 -9256,34,29,Nine Thousand and Sixteen,9016,174.png,Universelle,Hayden Bruce,1 -9257,30,24,Four Thousand Four Hundred and Sixty Six,4466,151.png,Universelle,Clarice Blanc,1 -9258,39,34,Six Thousand Five Hundred and Twenty Seven,6527,199.png,Universelle,Holly Martin,1 -9259,20,40,One Thousand One Hundred and Eighty,1180,103.png,Universelle,David Howard,1 -9260,24,39,Nine Thousand Three Hundred and Fifty Two,9352,121.png,Universelle,Katie Connor,1 -9261,40,11,Two Thousand Four Hundred and Thirty One,2431,200.png,Universelle,Jens Egger,1 -9262,5,16,Four Thousand Six Hundred and Seventeen,4617,29.png,Universelle,Searlas Grenier,1 -9263,26,16,Six Thousand Nine Hundred and Fifty Six,6956,134.png,Universelle,Searlas Grenier,1 -9264,8,9,Seven Thousand Nine Hundred and Eighty,7980,43.png,Universelle,Maria Kalb,1 -9265,36,12,Nine Thousand Two Hundred and Seventy Five,9275,183.png,Universelle,Marcel Achen,1 -9266,7,12,Six Thousand Two Hundred and Fifty,6250,35.png,Universelle,Marcel Achen,1 -9267,11,37,Seven Thousand Four Hundred and Eight,7408,57.png,Universelle,Eva Davies,1 -9268,2,23,Seven Thousand Eight Hundred and Seven,7807,12.png,Universelle,Thรฉrรจse Fortier,1 -9269,41,18,Nine Thousand Six Hundred and Forty Nine,9649,208.png,Universelle,Edmee Pelletier,1 -9270,16,17,Six Thousand Nine Hundred and Seventy Seven,6977,82.png,Universelle,Yolette Cloutier,1 -9271,0,18,One Thousand Two Hundred and Sixteen,1216,0.png,Universelle,Edmee Pelletier,1 -9272,15,14,Seven Hundred and Four,704,76.png,Universelle,Renata Lukic,1 -9273,39,14,Sixty Six,66,195.png,Universelle,Renata Lukic,1 -9274,8,5,One Thousand Six Hundred and Eleven,1611,43.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9275,9,29,Eight Thousand Three Hundred and Forty Nine,8349,46.png,Universelle,Hayden Bruce,1 -9276,29,20,One Thousand Three Hundred and Eighty Eight,1388,147.png,Universelle,Seymour Patenaude,1 -9277,8,14,Eight Hundred and Six,806,44.png,Universelle,Renata Lukic,1 -9278,33,18,One Thousand One Hundred and Eighty Nine,1189,165.png,Universelle,Edmee Pelletier,1 -9279,3,3,One Thousand Six Hundred and Eighty Nine,1689,15.png,Universelle,Jiang Li Tao,1 -9280,22,17,Five Thousand Four Hundred and Four,5404,112.png,Universelle,Yolette Cloutier,1 -9281,8,11,Two Thousand Five Hundred and Seventy Five,2575,41.png,Universelle,Jens Egger,1 -9282,9,4,One Thousand Two Hundred and Forty,1240,49.png,Universelle,Wafiyah Nashwa Wasem,1 -9283,1,29,Two Thousand Eight Hundred and Thirty Six,2836,6.png,Universelle,Hayden Bruce,1 -9284,15,25,Two Thousand Two Hundred and Fifty Eight,2258,77.png,Universelle,Fleurette Coudert,1 -9285,17,38,Two Thousand Two Hundred and Thirty One,2231,87.png,Universelle,Freddie Reid,1 -9286,6,6,One Thousand Eight Hundred and Seventy Two,1872,34.png,Universelle,Abdul Qais Khouri,1 -9287,9,13,Eight Thousand One Hundred and Seventy Six,8176,48.png,Universelle,Petra Kovacic,1 -9288,7,43,Three Thousand One Hundred and Twelve,3112,37.png,Universelle,Aruna Bekx,1 -9289,39,36,Eight Thousand and One,8001,198.png,Universelle,Thomas Chapman,1 -9290,23,16,Two Thousand Five Hundred and Three,2503,118.png,Universelle,Searlas Grenier,1 -9291,20,1,Five Hundred and Eighteen,518,102.png,Universelle,Emily D. Short,1 -9292,33,17,Five Thousand One Hundred and Forty Two,5142,167.png,Universelle,Yolette Cloutier,1 -9293,2,25,Five Thousand One Hundred and Twenty Two,5122,10.png,Universelle,Fleurette Coudert,1 -9294,35,35,Four Thousand Four Hundred and Thirty,4430,175.png,Universelle,Elliot Humphreys,1 -9295,19,30,Five Thousand Seven Hundred and Eighty Four,5784,95.png,Universelle,Jodie Holden,1 -9296,8,11,Two Thousand One Hundred and Thirty Five,2135,41.png,Universelle,Jens Egger,1 -9297,40,28,Seven Thousand Five Hundred and Eighty Nine,7589,201.png,Universelle,Chapin Auger,1 -9298,18,19,Eight Thousand Six Hundred and Thirty Nine,8639,92.png,Universelle,Franรงoise Lapierre,1 -9299,2,17,Two Thousand Six Hundred,2600,10.png,Universelle,Yolette Cloutier,1 -9300,20,41,Seven Thousand Four Hundred and Eleven,7411,100.png,Universelle,Germa de Geus,1 -9301,29,33,Eight Thousand Nine Hundred and Ninety,8990,149.png,Universelle,Eleanor Freeman,1 -9302,23,38,Three Hundred and Seven,307,116.png,Universelle,Freddie Reid,1 -9303,3,19,Eight Thousand Four Hundred and Nine,8409,16.png,Universelle,Franรงoise Lapierre,1 -9304,19,15,Six Thousand Two Hundred and Eighty Six,6286,98.png,Universelle,Milenko Tkalcic,1 -9305,9,30,Two Thousand Three Hundred and Six,2306,48.png,Universelle,Jodie Holden,1 -9306,23,39,Six Thousand and Ninety Two,6092,115.png,Universelle,Katie Connor,1 -9307,41,38,One Thousand and Eighty Seven,1087,208.png,Universelle,Freddie Reid,1 -9308,3,42,Two Hundred and Twenty Seven,227,16.png,Universelle,Brady Jamin,1 -9309,20,6,Five Thousand Eight Hundred and Three,5803,103.png,Universelle,Abdul Qais Khouri,1 -9310,17,4,Eight Thousand Seven Hundred and Sixty Six,8766,86.png,Universelle,Wafiyah Nashwa Wasem,1 -9311,17,9,One Thousand Nine Hundred and Thirty Four,1934,85.png,Universelle,Maria Kalb,1 -9312,27,26,Three Thousand Seven Hundred and Thirty Two,3732,135.png,Universelle,Sidney Lapointe,1 -9313,24,19,Six Hundred and Twenty Eight,628,123.png,Universelle,Franรงoise Lapierre,1 -9314,39,34,Four Thousand Two Hundred and Fifty Nine,4259,195.png,Universelle,Holly Martin,1 -9315,24,2,Five Thousand Five Hundred and Eighty,5580,121.png,Universelle,Chi Hsiao,1 -9316,22,22,Six Thousand One Hundred and Twenty Seven,6127,114.png,Universelle,Eglantine Forest,1 -9317,36,1,Five Thousand Five Hundred and Eighty Six,5586,180.png,Universelle,Emily D. Short,1 -9318,30,4,Five Thousand Eight Hundred and Five,5805,154.png,Universelle,Wafiyah Nashwa Wasem,1 -9319,32,27,One Thousand Three Hundred and Twenty Eight,1328,164.png,Universelle,Colette Monjeau,1 -9320,2,19,Three Thousand Three Hundred and Sixteen,3316,10.png,Universelle,Franรงoise Lapierre,1 -9321,38,30,Two Thousand Four Hundred and Eleven,2411,193.png,Universelle,Jodie Holden,1 -9322,35,2,Five Thousand Nine Hundred and Twenty,5920,176.png,Universelle,Chi Hsiao,1 -9323,19,16,Six Thousand Two Hundred and Eleven,6211,96.png,Universelle,Searlas Grenier,1 -9324,14,8,Five Hundred and Thirty Six,536,70.png,Universelle,Steffen Krueger,1 -9325,11,26,Seven Thousand One Hundred and Ninety One,7191,58.png,Universelle,Sidney Lapointe,1 -9326,10,14,Two Hundred and Eighty Six,286,50.png,Universelle,Renata Lukic,1 -9327,17,1,Seven Thousand One Hundred and Twenty Five,7125,88.png,Universelle,Emily D. Short,1 -9328,13,37,Seven Thousand Four Hundred and Fifty Five,7455,67.png,Universelle,Eva Davies,1 -9329,29,34,Seven Thousand One Hundred and Ninety Seven,7197,146.png,Universelle,Holly Martin,1 -9330,3,21,Three Thousand Six Hundred and Ninety Two,3692,17.png,Universelle,David Corbeil,1 -9331,26,30,Six Thousand and Ninety Four,6094,133.png,Universelle,Jodie Holden,1 -9332,10,43,Four Hundred and Fifty Four,454,54.png,Universelle,Aruna Bekx,1 -9333,1,16,Six Thousand Three Hundred and Fourteen,6314,8.png,Universelle,Searlas Grenier,1 -9334,32,43,Seven Thousand Seven Hundred and Thirty Six,7736,164.png,Universelle,Aruna Bekx,1 -9335,40,24,One Thousand and Twenty Two,1022,200.png,Universelle,Clarice Blanc,1 -9336,33,8,Two Thousand Five Hundred and Ninety,2590,168.png,Universelle,Steffen Krueger,1 -9337,37,7,Five Thousand Eight Hundred and Sixty Seven,5867,186.png,Universelle,Hasna Bahiyaa Amari,1 -9338,17,29,Eight Thousand Four Hundred and Sixty Seven,8467,86.png,Universelle,Hayden Bruce,1 -9339,7,2,Three Thousand Seven Hundred and Fifty Eight,3758,38.png,Universelle,Chi Hsiao,1 -9340,39,21,Six Thousand Five Hundred and Twenty Five,6525,197.png,Universelle,David Corbeil,1 -9341,19,7,Seven Thousand One Hundred and Thirty,7130,96.png,Universelle,Hasna Bahiyaa Amari,1 -9342,40,11,Eight Thousand Six Hundred and Thirty Three,8633,204.png,Universelle,Jens Egger,1 -9343,37,34,Eight Thousand Five Hundred and Ninety Four,8594,186.png,Universelle,Holly Martin,1 -9344,36,4,Eight Hundred and Sixty Six,866,183.png,Universelle,Wafiyah Nashwa Wasem,1 -9345,37,14,One Thousand Nine Hundred and Sixty Seven,1967,187.png,Universelle,Renata Lukic,1 -9346,7,13,Nine Thousand Three Hundred and Thirty,9330,37.png,Universelle,Petra Kovacic,1 -9347,31,23,Nine Thousand and Six,9006,156.png,Universelle,Thรฉrรจse Fortier,1 -9348,0,14,Four Thousand One Hundred and Ninety Three,4193,0.png,Universelle,Renata Lukic,1 -9349,12,34,Nine Thousand Eight Hundred and Fifty,9850,62.png,Universelle,Holly Martin,1 -9350,5,39,Eight Thousand Eight Hundred and Seventy Six,8876,26.png,Universelle,Katie Connor,1 -9351,25,33,Seven Thousand and Seventy Three,7073,127.png,Universelle,Eleanor Freeman,1 -9352,34,39,Four Thousand Six Hundred and Seventeen,4617,171.png,Universelle,Katie Connor,1 -9353,18,21,Six Thousand Six Hundred and Thirty Nine,6639,91.png,Universelle,David Corbeil,1 -9354,1,36,Five Thousand Six Hundred and Ninety Two,5692,8.png,Universelle,Thomas Chapman,1 -9355,6,17,Nine Thousand Seven Hundred and Thirty Two,9732,34.png,Universelle,Yolette Cloutier,1 -9356,28,8,Three Thousand Six Hundred and Nineteen,3619,141.png,Universelle,Steffen Krueger,1 -9357,18,7,Four Thousand Eight Hundred and Seventy Two,4872,94.png,Universelle,Hasna Bahiyaa Amari,1 -9358,27,36,Nine Thousand Four Hundred and Two,9402,136.png,Universelle,Thomas Chapman,1 -9359,41,36,Two Hundred and Sixteen,216,206.png,Universelle,Thomas Chapman,1 -9360,36,20,Three Thousand Seven Hundred and Fifty Five,3755,183.png,Universelle,Seymour Patenaude,1 -9361,29,37,Nine Hundred and Three,903,147.png,Universelle,Eva Davies,1 -9362,33,0,One Thousand Four Hundred and Ninety Six,1496,166.png,Universelle,Ethel M. Bryson,1 -9363,12,38,Nine Thousand Three Hundred and Seventy Four,9374,63.png,Universelle,Freddie Reid,1 -9364,13,43,Six Thousand Five Hundred and Thirty One,6531,67.png,Universelle,Aruna Bekx,1 -9365,42,12,Eight Thousand and Seventy Six,8076,213.png,Universelle,Marcel Achen,1 -9366,10,17,Nine Thousand Six Hundred and Ninety Six,9696,54.png,Universelle,Yolette Cloutier,1 -9367,27,5,Five Thousand Eight Hundred and Ninety,5890,138.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9368,39,33,Five Thousand Six Hundred and Twenty Three,5623,197.png,Universelle,Eleanor Freeman,1 -9369,43,26,Eight Thousand Eight Hundred and Thirteen,8813,217.png,Universelle,Sidney Lapointe,1 -9370,35,27,Five Thousand Three Hundred and Sixty Three,5363,177.png,Universelle,Colette Monjeau,1 -9371,36,3,One Thousand Four Hundred and Three,1403,181.png,Universelle,Jiang Li Tao,1 -9372,43,9,One Thousand Six Hundred and One,1601,218.png,Universelle,Maria Kalb,1 -9373,36,7,Four Thousand Two Hundred and Eighty Seven,4287,181.png,Universelle,Hasna Bahiyaa Amari,1 -9374,14,6,One Thousand One Hundred and Seventeen,1117,74.png,Universelle,Abdul Qais Khouri,1 -9375,25,19,Two Thousand One Hundred and Sixty Four,2164,129.png,Universelle,Franรงoise Lapierre,1 -9376,8,11,One Thousand Eight Hundred and Forty Three,1843,41.png,Universelle,Jens Egger,1 -9377,26,7,Three Thousand Two Hundred and Twenty Nine,3229,132.png,Universelle,Hasna Bahiyaa Amari,1 -9378,16,7,One Thousand and Thirty Six,1036,83.png,Universelle,Hasna Bahiyaa Amari,1 -9379,33,42,Eight Thousand Three Hundred and Eighteen,8318,168.png,Universelle,Brady Jamin,1 -9380,0,3,Eight Thousand Five Hundred and Sixteen,8516,1.png,Universelle,Jiang Li Tao,1 -9381,36,12,Nine Thousand Two Hundred and Five,9205,180.png,Universelle,Marcel Achen,1 -9382,14,20,Five Thousand and Twenty Four,5024,74.png,Universelle,Seymour Patenaude,1 -9383,35,7,Two Thousand Six Hundred and Seventy Eight,2678,179.png,Universelle,Hasna Bahiyaa Amari,1 -9384,38,10,Three Hundred and Twenty Four,324,192.png,Universelle,Stephan Schwab,1 -9385,19,0,Five Thousand One Hundred and Twenty Nine,5129,96.png,Universelle,Ethel M. Bryson,1 -9386,2,35,Five Thousand Eight Hundred and Fifty Five,5855,14.png,Universelle,Elliot Humphreys,1 -9387,1,18,Five Thousand Two Hundred and Ninety,5290,9.png,Universelle,Edmee Pelletier,1 -9388,34,23,One Thousand and Ninety Three,1093,174.png,Universelle,Thรฉrรจse Fortier,1 -9389,36,28,Six Thousand One Hundred and Fifty One,6151,184.png,Universelle,Chapin Auger,1 -9390,25,32,Three Thousand Four Hundred and Twenty Nine,3429,129.png,Universelle,Chelsea Watson,1 -9391,16,12,One Hundred and Ninety Seven,197,82.png,Universelle,Marcel Achen,1 -9392,16,7,Seven Thousand Three Hundred and Seventy Five,7375,81.png,Universelle,Hasna Bahiyaa Amari,1 -9393,42,14,Seven Thousand Eight Hundred and Ninety,7890,211.png,Universelle,Renata Lukic,1 -9394,32,5,One Hundred and Sixty Eight,168,162.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9395,22,5,Five Thousand Six Hundred and Twelve,5612,114.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9396,35,4,Seven Hundred and Seventy Two,772,179.png,Universelle,Wafiyah Nashwa Wasem,1 -9397,5,39,Seven Thousand Two Hundred and Twenty Seven,7227,27.png,Universelle,Katie Connor,1 -9398,14,10,Nine Thousand Five Hundred and Eighteen,9518,70.png,Universelle,Stephan Schwab,1 -9399,21,7,Six Thousand Four Hundred and Fifteen,6415,105.png,Universelle,Hasna Bahiyaa Amari,1 -9400,38,32,Eight Thousand Five Hundred and Eighty Five,8585,192.png,Universelle,Chelsea Watson,1 -9401,26,3,Two Thousand One Hundred and Eighty Nine,2189,134.png,Universelle,Jiang Li Tao,1 -9402,19,12,Eight Thousand Two Hundred and Seventy Three,8273,97.png,Universelle,Marcel Achen,1 -9403,34,2,Seven Thousand Nine Hundred and Seven,7907,174.png,Universelle,Chi Hsiao,1 -9404,37,26,Nineteen,19,188.png,Universelle,Sidney Lapointe,1 -9405,30,12,Eight Thousand Four Hundred and Seventy,8470,153.png,Universelle,Marcel Achen,1 -9406,14,9,Eight Thousand One Hundred and Ninety One,8191,73.png,Universelle,Maria Kalb,1 -9407,39,25,Nine Thousand One Hundred and Twenty One,9121,197.png,Universelle,Fleurette Coudert,1 -9408,21,34,Six Thousand Nine Hundred and Sixty Two,6962,106.png,Universelle,Holly Martin,1 -9409,20,1,Two Thousand Six Hundred and Twenty Two,2622,103.png,Universelle,Emily D. Short,1 -9410,13,2,Seven Thousand One Hundred and Thirty Eight,7138,65.png,Universelle,Chi Hsiao,1 -9411,15,40,Two Thousand Nine Hundred and Seventy Eight,2978,78.png,Universelle,David Howard,1 -9412,8,18,Eight Hundred and Ninety Five,895,40.png,Universelle,Edmee Pelletier,1 -9413,3,14,Five Thousand Eight Hundred and Fifty Six,5856,15.png,Universelle,Renata Lukic,1 -9414,27,4,Eight Thousand Four Hundred and Ninety,8490,137.png,Universelle,Wafiyah Nashwa Wasem,1 -9415,0,6,Nine Thousand One Hundred and Ninety Five,9195,3.png,Universelle,Abdul Qais Khouri,1 -9416,15,9,Seven Thousand and Ninety Five,7095,75.png,Universelle,Maria Kalb,1 -9417,9,40,Two Thousand and Forty Two,2042,49.png,Universelle,David Howard,1 -9418,26,6,Eight Thousand One Hundred and Forty Six,8146,134.png,Universelle,Abdul Qais Khouri,1 -9419,16,28,Four Thousand Two Hundred and Thirty Six,4236,84.png,Universelle,Chapin Auger,1 -9420,16,24,Five Thousand Five Hundred and Sixty,5560,80.png,Universelle,Clarice Blanc,1 -9421,27,31,Five Thousand Eight Hundred and Sixty Two,5862,136.png,Universelle,Naomi Grant,1 -9422,42,13,Three Thousand Six Hundred and Ninety Nine,3699,210.png,Universelle,Petra Kovacic,1 -9423,0,17,Five Thousand Five Hundred and Forty Eight,5548,0.png,Universelle,Yolette Cloutier,1 -9424,22,7,Eight Thousand Seven Hundred and Eighty One,8781,111.png,Universelle,Hasna Bahiyaa Amari,1 -9425,36,30,Two Thousand Seven Hundred and Three,2703,183.png,Universelle,Jodie Holden,1 -9426,29,31,Seven Thousand Eight Hundred and Fifty Five,7855,149.png,Universelle,Naomi Grant,1 -9427,30,27,Nine Thousand Eight Hundred and Thirteen,9813,152.png,Universelle,Colette Monjeau,1 -9428,5,41,Four Thousand Five Hundred and Thirty Two,4532,26.png,Universelle,Germa de Geus,1 -9429,21,4,Seven Thousand Four Hundred and Forty Seven,7447,106.png,Universelle,Wafiyah Nashwa Wasem,1 -9430,5,2,Four Thousand and Ninety Nine,4099,28.png,Universelle,Chi Hsiao,1 -9431,38,12,Three Thousand Eight Hundred and Seventy Six,3876,190.png,Universelle,Marcel Achen,1 -9432,11,20,Eight Thousand Five Hundred and Five,8505,57.png,Universelle,Seymour Patenaude,1 -9433,16,32,Four Thousand Eight Hundred and Eighteen,4818,84.png,Universelle,Chelsea Watson,1 -9434,3,42,One Thousand Three Hundred and Five,1305,17.png,Universelle,Brady Jamin,1 -9435,40,12,Eight Thousand Two Hundred and Four,8204,203.png,Universelle,Marcel Achen,1 -9436,28,27,Seven Thousand Five Hundred and Eight,7508,144.png,Universelle,Colette Monjeau,1 -9437,21,2,Three Thousand Five Hundred and Thirty Nine,3539,105.png,Universelle,Chi Hsiao,1 -9438,2,31,Seven Thousand and Sixteen,7016,10.png,Universelle,Naomi Grant,1 -9439,40,39,Five Thousand Five Hundred and Twenty Three,5523,202.png,Universelle,Katie Connor,1 -9440,9,34,Five Thousand Five Hundred and Ninety One,5591,47.png,Universelle,Holly Martin,1 -9441,9,0,One Hundred and Fifty Eight,158,45.png,Universelle,Ethel M. Bryson,1 -9442,19,32,Three Thousand Two Hundred and Thirty Five,3235,98.png,Universelle,Chelsea Watson,1 -9443,13,39,Two Hundred,200,66.png,Universelle,Katie Connor,1 -9444,10,8,Six Thousand Five Hundred and Fifty Two,6552,54.png,Universelle,Steffen Krueger,1 -9445,26,3,Eight Thousand and Sixty,8060,131.png,Universelle,Jiang Li Tao,1 -9446,37,0,Eight Thousand Eight Hundred and Fifty Seven,8857,187.png,Universelle,Ethel M. Bryson,1 -9447,27,30,Eight Hundred and Forty Seven,847,136.png,Universelle,Jodie Holden,1 -9448,30,22,Eight Thousand Three Hundred and Twenty Two,8322,154.png,Universelle,Eglantine Forest,1 -9449,24,1,Five Thousand Three Hundred and Ninety Five,5395,124.png,Universelle,Emily D. Short,1 -9450,41,21,Seven Hundred and Ninety Two,792,205.png,Universelle,David Corbeil,1 -9451,39,4,Four Thousand Nine Hundred and Seventy Eight,4978,196.png,Universelle,Wafiyah Nashwa Wasem,1 -9452,29,19,One Thousand and Seventy Seven,1077,145.png,Universelle,Franรงoise Lapierre,1 -9453,16,15,Five Thousand Six Hundred and Twenty Eight,5628,81.png,Universelle,Milenko Tkalcic,1 -9454,12,5,Nine Thousand Three Hundred and Forty One,9341,62.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9455,11,22,Two Hundred and Twenty,220,58.png,Universelle,Eglantine Forest,1 -9456,4,30,Five Thousand Three Hundred and Thirty Four,5334,21.png,Universelle,Jodie Holden,1 -9457,34,5,Six Thousand Eight Hundred and Nineteen,6819,171.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9458,41,42,Three Thousand Six Hundred and Thirty Three,3633,205.png,Universelle,Brady Jamin,1 -9459,24,28,Eight Thousand One Hundred and Ninety Two,8192,120.png,Universelle,Chapin Auger,1 -9460,10,5,Three Thousand Three Hundred and Sixty Two,3362,51.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9461,20,4,Four Thousand One Hundred and Thirty One,4131,101.png,Universelle,Wafiyah Nashwa Wasem,1 -9462,32,35,Nine Hundred and Forty Seven,947,164.png,Universelle,Elliot Humphreys,1 -9463,40,18,Nine Thousand and Seventy Six,9076,201.png,Universelle,Edmee Pelletier,1 -9464,20,4,Three Thousand Nine Hundred and Sixty,3960,101.png,Universelle,Wafiyah Nashwa Wasem,1 -9465,3,29,Three Thousand Five Hundred and Eighteen,3518,18.png,Universelle,Hayden Bruce,1 -9466,1,41,Seven Thousand and Seventy Four,7074,9.png,Universelle,Germa de Geus,1 -9467,13,19,Seven Thousand Three Hundred and Fifty Five,7355,66.png,Universelle,Franรงoise Lapierre,1 -9468,22,25,Seven Hundred and Twenty Seven,727,113.png,Universelle,Fleurette Coudert,1 -9469,13,25,Three Thousand Five Hundred and Eighty One,3581,68.png,Universelle,Fleurette Coudert,1 -9470,38,34,Six Thousand Three Hundred and Thirty One,6331,194.png,Universelle,Holly Martin,1 -9471,16,26,Eight Thousand Two Hundred and Four,8204,82.png,Universelle,Sidney Lapointe,1 -9472,1,7,Four Thousand Seven Hundred and One,4701,9.png,Universelle,Hasna Bahiyaa Amari,1 -9473,11,21,Two Thousand Eight Hundred and Forty One,2841,58.png,Universelle,David Corbeil,1 -9474,9,24,Eight Thousand One Hundred and Twenty Eight,8128,48.png,Universelle,Clarice Blanc,1 -9475,22,41,Eight Thousand Three Hundred and Forty Seven,8347,111.png,Universelle,Germa de Geus,1 -9476,22,20,Five Thousand Two Hundred and Ninety Nine,5299,114.png,Universelle,Seymour Patenaude,1 -9477,16,14,Three Thousand Four Hundred and Forty Two,3442,82.png,Universelle,Renata Lukic,1 -9478,8,31,Four Thousand Three Hundred and Nineteen,4319,42.png,Universelle,Naomi Grant,1 -9479,3,38,One Thousand Three Hundred and Forty Seven,1347,19.png,Universelle,Freddie Reid,1 -9480,42,5,Eight Hundred and Eighty,880,210.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9481,42,13,Eight Thousand Two Hundred and Ninety Nine,8299,212.png,Universelle,Petra Kovacic,1 -9482,41,15,Three Thousand One Hundred and Fifty Five,3155,206.png,Universelle,Milenko Tkalcic,1 -9483,25,31,Three Thousand Four Hundred and Ninety One,3491,129.png,Universelle,Naomi Grant,1 -9484,24,3,Five Thousand Three Hundred and Forty,5340,122.png,Universelle,Jiang Li Tao,1 -9485,30,43,Five Thousand Seven Hundred and Eighty Nine,5789,154.png,Universelle,Aruna Bekx,1 -9486,11,15,Seven Thousand Five Hundred and Thirty,7530,59.png,Universelle,Milenko Tkalcic,1 -9487,26,27,Seven Thousand Three Hundred and Thirty Seven,7337,132.png,Universelle,Colette Monjeau,1 -9488,1,36,Four Thousand Eight Hundred and Seventy Five,4875,6.png,Universelle,Thomas Chapman,1 -9489,6,17,One Thousand Seven Hundred and Fifty Six,1756,34.png,Universelle,Yolette Cloutier,1 -9490,1,7,One Thousand One Hundred and Forty Two,1142,9.png,Universelle,Hasna Bahiyaa Amari,1 -9491,11,37,Three Thousand Nine Hundred and Fifty Six,3956,56.png,Universelle,Eva Davies,1 -9492,30,15,Nine Thousand Nine Hundred and Sixty,9960,150.png,Universelle,Milenko Tkalcic,1 -9493,39,36,One Thousand One Hundred and Eighty Eight,1188,195.png,Universelle,Thomas Chapman,1 -9494,33,39,Six Thousand One Hundred and Sixty Nine,6169,166.png,Universelle,Katie Connor,1 -9495,37,7,Three Thousand Nine Hundred and Sixty Three,3963,186.png,Universelle,Hasna Bahiyaa Amari,1 -9496,10,28,Four Thousand One Hundred and Fourteen,4114,50.png,Universelle,Chapin Auger,1 -9497,30,29,Nine Thousand Three Hundred and Forty Six,9346,153.png,Universelle,Hayden Bruce,1 -9498,0,24,One Thousand Nine Hundred and Twenty One,1921,4.png,Universelle,Clarice Blanc,1 -9499,18,9,Three Thousand Seven Hundred and Seventy Five,3775,93.png,Universelle,Maria Kalb,1 -9500,14,42,Two Hundred and Thirty,230,70.png,Universelle,Brady Jamin,1 -9501,15,40, ,3284,79.png,Universelle,David Howard,0 -9502,42,14,Eighty Nine,321,Nan,Universelle,Renata Lukic,0 -9503,0,21, ,210,3.png,Universelle,David Corbeil,0 -9504,33,8,Fifty One, ,167.png,Universelle,Steffen Krueger,0 -9505,24,33, ,4612,122.png,Universelle,Eleanor Freeman,0 -9506,27,25,Eight Thousand Two Hundred and Seventy Two, ,138.png,Universelle,Fleurette Coudert,0 -9507,33,32,One Thousand and Sixty,2928,Nan,Universelle,Chelsea Watson,0 -9508,34,40, ,3033,173.png,Universelle,David Howard,0 -9509,36,2,Three Thousand Four Hundred and Twelve,6368,Nan,Universelle,Chi Hsiao,0 -9510,43,8,Four Thousand Four Hundred and Sixty Seven, ,217.png,Universelle,Steffen Krueger,0 -9511,21,34,One Hundred and Seventy Five,247,Nan,Universelle,Holly Martin,0 -9512,14,25,Seven Hundred and Fifty Three, ,72.png,Universelle,Fleurette Coudert,0 -9513,10,30,Three Thousand Eight Hundred and Sixty Two, ,50.png,Universelle,Jodie Holden,0 -9514,43,9, ,1656,218.png,Universelle,Maria Kalb,0 -9515,1,40, ,8221,5.png,Universelle,David Howard,0 -9516,43,2,Six Hundred and Eighty Five, ,219.png,Universelle,Chi Hsiao,0 -9517,21,26, ,778,108.png,Universelle,Sidney Lapointe,0 -9518,6,20,Two Thousand Eight Hundred and Forty Nine,4069,Nan,Universelle,Seymour Patenaude,0 -9519,22,27,Nine Hundred and Twenty Two,6891,Nan,Universelle,Colette Monjeau,0 -9520,39,32,Seven Hundred and Fifty Six,6717,Nan,Universelle,Chelsea Watson,0 -9521,28,24, ,1562,142.png,Universelle,Clarice Blanc,0 -9522,29,12, ,2619,149.png,Universelle,Marcel Achen,0 -9523,1,15,Six Thousand Two Hundred and Twenty Eight,6808,Nan,Universelle,Milenko Tkalcic,0 -9524,2,43,Three Thousand Two Hundred and Ninety One,3658,Nan,Universelle,Aruna Bekx,0 -9525,2,2,Three Thousand One Hundred and Eighteen, ,10.png,Universelle,Chi Hsiao,0 -9526,15,41,Four Thousand Nine Hundred and Seventy Four,9766,Nan,Universelle,Germa de Geus,0 -9527,12,35, ,7037,61.png,Universelle,Elliot Humphreys,0 -9528,4,21,Twenty Three,437,Nan,Universelle,David Corbeil,0 -9529,21,32,Four Thousand Nine Hundred and Thirty One,7238,Nan,Universelle,Chelsea Watson,0 -9530,35,16,Six Thousand Four Hundred and Fifty One,9621,Nan,Universelle,Searlas Grenier,0 -9531,40,16,Five Hundred and Eighty One, ,202.png,Universelle,Searlas Grenier,0 -9532,40,27,Seventy Eight,126,Nan,Universelle,Colette Monjeau,0 -9533,3,12,Two Thousand Two Hundred and Fifteen,6717,Nan,Universelle,Marcel Achen,0 -9534,4,19,One Thousand Six Hundred and Fifty, ,24.png,Universelle,Franรงoise Lapierre,0 -9535,6,14,Three Thousand Four Hundred and Seventy,7195,Nan,Universelle,Renata Lukic,0 -9536,7,9,Two Thousand and Thirteen,2049,Nan,Universelle,Maria Kalb,0 -9537,36,5,Four Thousand Five Hundred and Twenty Three, ,182.png,Universelle,Fawwaz Zuhayr Mustafa,0 -9538,25,11, ,2845,127.png,Universelle,Jens Egger,0 -9539,34,19,Two Thousand Three Hundred and Twenty Six,2739,Nan,Universelle,Franรงoise Lapierre,0 -9540,20,3, ,1070,103.png,Universelle,Jiang Li Tao,0 -9541,26,35,One Thousand Six Hundred and Sixty Four, ,132.png,Universelle,Elliot Humphreys,0 -9542,33,24, ,401,169.png,Universelle,Clarice Blanc,0 -9543,25,4,One Thousand Two Hundred and Thirty Eight, ,127.png,Universelle,Wafiyah Nashwa Wasem,0 -9544,4,14,One Thousand Three Hundred and Sixteen, ,20.png,Universelle,Renata Lukic,0 -9545,18,16,One Thousand Five Hundred and Eighty Two, ,91.png,Universelle,Searlas Grenier,0 -9546,36,35,One Thousand Six Hundred and Thirty,1945,Nan,Universelle,Elliot Humphreys,0 -9547,38,19,Two Thousand Five Hundred and Sixty Six,7460,Nan,Universelle,Franรงoise Lapierre,0 -9548,20,6,One Thousand Six Hundred and Two,7991,Nan,Universelle,Abdul Qais Khouri,0 -9549,33,13, ,1551,168.png,Universelle,Petra Kovacic,0 -9550,37,12,Five Hundred and Forty, ,187.png,Universelle,Marcel Achen,0 -9551,2,25,One Thousand and Ninety One, ,14.png,Universelle,Fleurette Coudert,0 -9552,27,17, ,62,139.png,Universelle,Yolette Cloutier,0 -9553,10,28, ,7955,50.png,Universelle,Chapin Auger,0 -9554,14,5, ,5083,71.png,Universelle,Fawwaz Zuhayr Mustafa,0 -9555,35,35, ,2159,175.png,Universelle,Elliot Humphreys,0 -9556,27,35,Two Thousand Two Hundred and Three,3800,Nan,Universelle,Elliot Humphreys,0 -9557,35,42, ,6827,176.png,Universelle,Brady Jamin,0 -9558,38,25,Five Thousand Six Hundred and Five,5771,Nan,Universelle,Fleurette Coudert,0 -9559,20,11,Eight Hundred and Thirty Five,2978,Nan,Universelle,Jens Egger,0 -9560,1,14,Five Thousand Nine Hundred and Three,9543,Nan,Universelle,Renata Lukic,0 -9561,29,33,Fifty Two, ,147.png,Universelle,Eleanor Freeman,0 -9562,28,8,Eight Thousand Five Hundred and Sixty Four,9526,Nan,Universelle,Steffen Krueger,0 -9563,18,34,One Thousand Seven Hundred and Seventy Three,3743,Nan,Universelle,Holly Martin,0 -9564,5,27,Two Hundred and Sixty Six, ,25.png,Universelle,Colette Monjeau,0 -9565,11,12,Three Thousand One Hundred and Thirty Two,4004,Nan,Universelle,Marcel Achen,0 -9566,26,37,One Thousand Four Hundred and Eighty Two,3374,Nan,Universelle,Eva Davies,0 -9567,38,17,Nine Hundred and Eighty Six,1539,Nan,Universelle,Yolette Cloutier,0 -9568,10,17,Three Hundred and Eighteen, ,51.png,Universelle,Yolette Cloutier,0 -9569,28,43,Five Hundred and Sixty Three, ,144.png,Universelle,Aruna Bekx,0 -9570,13,22,Four Thousand One Hundred and Ten, ,65.png,Universelle,Eglantine Forest,0 -9571,12,4,Four Thousand Two Hundred and Fifty One,4782,Nan,Universelle,Wafiyah Nashwa Wasem,0 -9572,25,26,Five Hundred and Fifty Seven, ,126.png,Universelle,Sidney Lapointe,0 -9573,1,41,Two Thousand Nine Hundred and Thirty,8317,Nan,Universelle,Germa de Geus,0 -9574,36,22, ,3257,182.png,Universelle,Eglantine Forest,0 -9575,12,0,Four Thousand Two Hundred and Eighty Five,5851,Nan,Universelle,Ethel M. Bryson,0 -9576,25,1,One Thousand and Eighty Two,2319,Nan,Universelle,Emily D. Short,0 -9577,33,29, ,4887,168.png,Universelle,Hayden Bruce,0 -9578,12,35,Five Thousand Nine Hundred and Thirty Five,6252,Nan,Universelle,Elliot Humphreys,0 -9579,32,19,Two Thousand Five Hundred and Ninety Two,4739,Nan,Universelle,Franรงoise Lapierre,0 -9580,31,17,Three Thousand Four Hundred and Fifty Six,7069,Nan,Universelle,Yolette Cloutier,0 -9581,14,37,Two Hundred and Seventeen,467,Nan,Universelle,Eva Davies,0 -9582,43,34,Two Thousand Five Hundred and Ninety Four, ,217.png,Universelle,Holly Martin,0 -9583,10,8,Four Hundred and Eighteen, ,54.png,Universelle,Steffen Krueger,0 -9584,40,39,Three Thousand One Hundred and Three, ,200.png,Universelle,Katie Connor,0 -9585,5,31, ,7059,29.png,Universelle,Naomi Grant,0 -9586,14,25,Four Thousand Nine Hundred and Sixty,9810,Nan,Universelle,Fleurette Coudert,0 -9587,34,3,Three Thousand One Hundred and Ninety Seven,4429,Nan,Universelle,Jiang Li Tao,0 -9588,7,9, ,20,35.png,Universelle,Maria Kalb,0 -9589,38,5, ,9181,191.png,Universelle,Fawwaz Zuhayr Mustafa,0 -9590,33,23,One Hundred,158,Nan,Universelle,Thรฉrรจse Fortier,0 -9591,18,25,Six Thousand Six Hundred and Sixty Nine,7626,Nan,Universelle,Fleurette Coudert,0 -9592,27,22, ,5166,136.png,Universelle,Eglantine Forest,0 -9593,31,20,Seventy Seven,467,Nan,Universelle,Seymour Patenaude,0 -9594,4,16,Seventy Six, ,21.png,Universelle,Searlas Grenier,0 -9595,7,38, ,5624,39.png,Universelle,Freddie Reid,0 -9596,23,16,One Thousand and Nineteen,4778,Nan,Universelle,Searlas Grenier,0 -9597,39,12,One Thousand One Hundred and Two,1224,Nan,Universelle,Marcel Achen,0 -9598,1,27,One Thousand Nine Hundred and Thirteen, ,9.png,Universelle,Colette Monjeau,0 -9599,38,17,Two Thousand Three Hundred and Thirty One,6080,Nan,Universelle,Yolette Cloutier,0 -9600,37,33,Three Thousand One Hundred and Ninety Four,7462,Nan,Universelle,Eleanor Freeman,0 -9601,22,39,Four Hundred and Fifty Seven, ,114.png,Universelle,Katie Connor,0 -9602,2,28,Five Hundred and Seventy Six,4936,Nan,Universelle,Chapin Auger,0 -9603,43,42,Five Thousand Seven Hundred and Seventy Nine, ,215.png,Universelle,Brady Jamin,0 -9604,15,15,Nine Hundred and Seventy,2268,Nan,Universelle,Milenko Tkalcic,0 -9605,9,4, ,9382,47.png,Universelle,Wafiyah Nashwa Wasem,0 -9606,14,3,Two Thousand Two Hundred and Thirty Nine,8818,Nan,Universelle,Jiang Li Tao,0 -9607,32,37,Two Thousand Eight Hundred and Eighty One,3783,Nan,Universelle,Eva Davies,0 -9608,41,32,Seven Thousand Seven Hundred and Fifty Five,8873,Nan,Universelle,Chelsea Watson,0 -9609,3,4, ,745,17.png,Universelle,Wafiyah Nashwa Wasem,0 -9610,4,34,One Thousand Nine Hundred and Thirty, ,24.png,Universelle,Holly Martin,0 -9611,30,21,One Thousand and Forty Six,2353,Nan,Universelle,David Corbeil,0 -9612,23,41,Four Thousand and Fifty,7642,Nan,Universelle,Germa de Geus,0 -9613,31,20,One Thousand and Seventy Four,2055,Nan,Universelle,Seymour Patenaude,0 -9614,34,30, ,2682,171.png,Universelle,Jodie Holden,0 -9615,39,27, ,8604,197.png,Universelle,Colette Monjeau,0 -9616,13,38, ,4751,66.png,Universelle,Freddie Reid,0 -9617,9,14,Four Hundred and Forty Two,3749,Nan,Universelle,Renata Lukic,0 -9618,6,0,Six Thousand Three Hundred and Forty Four, ,34.png,Universelle,Ethel M. Bryson,0 -9619,28,10,Nine Hundred and Twenty Eight, ,144.png,Universelle,Stephan Schwab,0 -9620,21,24,Sixty One, ,108.png,Universelle,Clarice Blanc,0 -9621,39,5,Four Thousand Five Hundred and Forty Three,8009,Nan,Universelle,Fawwaz Zuhayr Mustafa,0 -9622,16,3, ,4148,80.png,Universelle,Jiang Li Tao,0 -9623,31,19,Three Thousand Four Hundred and Eleven,3562,Nan,Universelle,Franรงoise Lapierre,0 -9624,32,17, ,5207,161.png,Universelle,Yolette Cloutier,0 -9625,4,25,One Thousand Eight Hundred and Eighty Five, ,21.png,Universelle,Fleurette Coudert,0 -9626,2,39,Four Hundred and Seventy Nine,2688,Nan,Universelle,Katie Connor,0 -9627,15,5,One Hundred and Seventeen, ,75.png,Universelle,Fawwaz Zuhayr Mustafa,0 -9628,35,36,One Hundred and Ninety Three,1547,Nan,Universelle,Thomas Chapman,0 -9629,2,28,Five Thousand Seven Hundred and Thirty Five,7411,Nan,Universelle,Chapin Auger,0 -9630,21,14,One Thousand Nine Hundred and Ninety Three,3136,Nan,Universelle,Renata Lukic,0 -9631,24,12,Two Thousand and Ninety Nine, ,121.png,Universelle,Marcel Achen,0 -9632,36,0, ,4420,183.png,Universelle,Ethel M. Bryson,0 -9633,34,28,Five Hundred and Eighteen,1906,Nan,Universelle,Chapin Auger,0 -9634,5,2,Three Thousand and Seventy Seven, ,25.png,Universelle,Chi Hsiao,0 -9635,43,6,Eight Hundred and Sixteen,7891,Nan,Universelle,Abdul Qais Khouri,0 -9636,38,28,One Thousand Six Hundred and Sixty Three,8303,Nan,Universelle,Chapin Auger,0 -9637,38,10,Three Hundred and Twenty Three,1302,Nan,Universelle,Stephan Schwab,0 -9638,6,0,Two Thousand Eight Hundred and Seventeen, ,30.png,Universelle,Ethel M. Bryson,0 -9639,32,42,Three Thousand Four Hundred and Ninety Seven,6608,Nan,Universelle,Brady Jamin,0 -9640,38,6,Six Hundred and Sixty Four, ,191.png,Universelle,Abdul Qais Khouri,0 -9641,1,23,Five Thousand Two Hundred and Ninety Four, ,6.png,Universelle,Thรฉrรจse Fortier,0 -9642,28,22, ,3576,143.png,Universelle,Eglantine Forest,0 -9643,21,24,Eight,77,Nan,Universelle,Clarice Blanc,0 -9644,21,5,One Thousand Five Hundred and Sixty Nine,3232,Nan,Universelle,Fawwaz Zuhayr Mustafa,0 -9645,12,17,Two Thousand Seven Hundred and Seventy Four, ,64.png,Universelle,Yolette Cloutier,0 -9646,16,42,Four Hundred and Twenty, ,82.png,Universelle,Brady Jamin,0 -9647,34,10,Two Thousand One Hundred and Seventy One,6592,Nan,Universelle,Stephan Schwab,0 -9648,19,6,Sixty Six, ,98.png,Universelle,Abdul Qais Khouri,0 -9649,10,16,Four Hundred and Fifty Seven, ,52.png,Universelle,Searlas Grenier,0 -9650,29,41,Nine Hundred and Forty One,1627,Nan,Universelle,Germa de Geus,0 -9651,9,37,Three Hundred and Forty Three, ,45.png,Universelle,Eva Davies,0 -9652,14,37, ,8356,71.png,Universelle,Eva Davies,0 -9653,12,35,Five Thousand Seven Hundred and Ninety Seven,7786,Nan,Universelle,Elliot Humphreys,0 -9654,13,42,One Thousand Eight Hundred and Forty Six,3723,Nan,Universelle,Brady Jamin,0 -9655,20,8, ,6901,101.png,Universelle,Steffen Krueger,0 -9656,41,3,Eight Hundred and Thirty Six,2228,Nan,Universelle,Jiang Li Tao,0 -9657,43,13,Four Thousand Two Hundred and Eighteen, ,217.png,Universelle,Petra Kovacic,0 -9658,0,26, ,9258,3.png,Universelle,Sidney Lapointe,0 -9659,27,16, ,5408,135.png,Universelle,Searlas Grenier,0 -9660,11,41,Four Hundred and Twenty Six, ,58.png,Universelle,Germa de Geus,0 -9661,7,9,Eight Thousand Eight Hundred and Fifty Five, ,37.png,Universelle,Maria Kalb,0 -9662,27,2,Four Thousand Three Hundred and Eighty Six,8267,Nan,Universelle,Chi Hsiao,0 -9663,8,22, ,3120,44.png,Universelle,Eglantine Forest,0 -9664,36,0,Two Thousand Six Hundred and Eighty, ,180.png,Universelle,Ethel M. Bryson,0 -9665,28,2,One Thousand Four Hundred,4454,Nan,Universelle,Chi Hsiao,0 -9666,39,0, ,9426,198.png,Universelle,Ethel M. Bryson,0 -9667,42,41,Three Thousand and Seventy Four, ,211.png,Universelle,Germa de Geus,0 -9668,30,26,Four Hundred and Seventeen,2352,Nan,Universelle,Sidney Lapointe,0 -9669,1,23, ,3152,6.png,Universelle,Thรฉrรจse Fortier,0 -9670,7,28,Four Hundred and Twenty Two, ,39.png,Universelle,Chapin Auger,0 -9671,28,0,Five Hundred and Eighty Nine,1425,Nan,Universelle,Ethel M. Bryson,0 -9672,37,7, ,3556,188.png,Universelle,Hasna Bahiyaa Amari,0 -9673,15,25,Four Thousand Four Hundred and Fifty Five,6471,Nan,Universelle,Fleurette Coudert,0 -9674,18,21,Eight Hundred and Nine,9835,Nan,Universelle,David Corbeil,0 -9675,34,35, ,8899,171.png,Universelle,Elliot Humphreys,0 -9676,3,9,Four Thousand One Hundred and Sixty Four,5106,Nan,Universelle,Maria Kalb,0 -9677,1,26,One Thousand Six Hundred and Sixty One,8239,Nan,Universelle,Sidney Lapointe,0 -9678,1,5,One Thousand and Eighty Four,9047,Nan,Universelle,Fawwaz Zuhayr Mustafa,0 -9679,39,43,Three Thousand Seven Hundred and Ten,5511,Nan,Universelle,Aruna Bekx,0 -9680,8,36,Four Thousand and Nine, ,43.png,Universelle,Thomas Chapman,0 -9681,11,11,One Thousand Six Hundred and Seventy Four,5890,Nan,Universelle,Jens Egger,0 -9682,0,3,One Thousand Two Hundred and Sixteen,9479,Nan,Universelle,Jiang Li Tao,0 -9683,10,39,Eight Hundred and Thirty Eight, ,50.png,Universelle,Katie Connor,0 -9684,2,34, ,6744,11.png,Universelle,Holly Martin,0 -9685,27,26,Two Thousand Two Hundred and Fifty Five,3439,Nan,Universelle,Sidney Lapointe,0 -9686,9,22,Nine Hundred and Forty Six,6988,Nan,Universelle,Eglantine Forest,0 -9687,8,25,Seven Hundred and Forty One,2505,Nan,Universelle,Fleurette Coudert,0 -9688,29,37,Two Thousand Seven Hundred and Four,3680,Nan,Universelle,Eva Davies,0 -9689,12,31,Three Thousand Nine Hundred and Thirty Three, ,60.png,Universelle,Naomi Grant,0 -9690,40,40,One Thousand Seven Hundred and Sixty Six,2650,Nan,Universelle,David Howard,0 -9691,41,22,One Thousand Six Hundred and Fifty Five,5116,Nan,Universelle,Eglantine Forest,0 -9692,43,37,One Hundred and Ninety Six, ,216.png,Universelle,Eva Davies,0 -9693,36,37,One Thousand Seven Hundred and Seventy Nine, ,184.png,Universelle,Eva Davies,0 -9694,33,8, ,5346,167.png,Universelle,Steffen Krueger,0 -9695,17,1, ,2999,86.png,Universelle,Emily D. Short,0 -9696,8,11,Two Thousand Seven Hundred and Sixty Two, ,40.png,Universelle,Jens Egger,0 -9697,6,26, ,5404,30.png,Universelle,Sidney Lapointe,0 -9698,0,22,Three Thousand Eight Hundred and Twenty Three,7203,Nan,Universelle,Eglantine Forest,0 -9699,30,18, ,4416,153.png,Universelle,Edmee Pelletier,0 -9700,7,42, ,2701,38.png,Universelle,Brady Jamin,0 -9701,23,27,Eigt Thousand For Hundred and Foty Thre,8443,115.png,Universelle,Colette Monjeau,1 -9702,8,31,Five Thousand Nine Hundred and Ninety Seven,5997,40.png,Universelle,Naomi Grant,1 -9703,19,36,Thre Thousand and Ninety Nine,3099,95.png,Universelle,Thomas Chapman,1 -9704,23,5,On Thousand and Seenty For,1074,116.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9705,0,42,Seven Hundred and Foty Two,742,2.png,Universelle,Brady Jamin,1 -9706,7,14,Seven Thousand Five Hundred and Fifty Eigt,7558,38.png,Universelle,Renata Lukic,1 -9707,19,2,On Thousand Six Hundred and Seenty,1670,96.png,Universelle,Chi Hsiao,1 -9708,2,26,Six Thousand Two Hundred and Foty Thre,6243,10.png,Universelle,Sidney Lapointe,1 -9709,34,17,Two Thousand On Hundred and Two,2102,173.png,Universelle,Yolette Cloutier,1 -9710,42,10,Seven Thousand Six Hundred and Seventeen,7617,213.png,Universelle,Stephan Schwab,1 -9711,35,41,Eigt Thousand Seven Hundred and Ninety Seven,8797,177.png,Universelle,Germa de Geus,1 -9712,23,28,Eigt Thousand Six Hundred and Sxten,8616,119.png,Universelle,Chapin Auger,1 -9713,14,37,Seven Thousand Five Hundred and Eleven,7511,74.png,Universelle,Eva Davies,1 -9714,34,43,Eigt Thousand and Fifty Eigt,8058,173.png,Universelle,Aruna Bekx,1 -9715,25,19,Five Thousand On Hundred and Sixt For,5164,126.png,Universelle,Franรงoise Lapierre,1 -9716,10,19,Thre Thousand Nine Hundred and Two,3902,50.png,Universelle,Franรงoise Lapierre,1 -9717,36,30,For Thousand Two Hundred and Ninety Seven,4297,184.png,Universelle,Jodie Holden,1 -9718,15,14,Seven Thousand Thre Hundred and Twenty Five,7325,77.png,Universelle,Renata Lukic,1 -9719,1,19,Two Thousand On Hundred and Twenty Six,2126,9.png,Universelle,Franรงoise Lapierre,1 -9720,28,15,Two Thousand On Hundred and Foty Thre,2143,141.png,Universelle,Milenko Tkalcic,1 -9721,42,34,Seven Thousand Two Hundred and Thirty For,7234,213.png,Universelle,Holly Martin,1 -9722,36,27,On Thousand Eigt Hundred and Fifty For,1854,182.png,Universelle,Colette Monjeau,1 -9723,7,13,On Thousand and Seenty Seven,1077,38.png,Universelle,Petra Kovacic,1 -9724,8,33,Five Thousand Nine Hundred and Seenty Five,5975,42.png,Universelle,Eleanor Freeman,1 -9725,40,4,Six Thousand Seven Hundred and Fifty Seven,6757,203.png,Universelle,Wafiyah Nashwa Wasem,1 -9726,33,34,Eigt Hundred and Seenty Five,875,166.png,Universelle,Holly Martin,1 -9727,41,30,Two Thousand Five Hundred and Fifty For,2554,207.png,Universelle,Jodie Holden,1 -9728,0,42,Eigt Thousand Six Hundred and Twenty On,8621,1.png,Universelle,Brady Jamin,1 -9729,18,8,Thre Thousand Seven Hundred and Sixt,3760,91.png,Universelle,Steffen Krueger,1 -9730,30,23,Six Thousand For Hundred and Twenty Nine,6429,152.png,Universelle,Thรฉrรจse Fortier,1 -9731,8,7,On Thousand For Hundred and Eihty Eigt,1488,43.png,Universelle,Hasna Bahiyaa Amari,1 -9732,43,2,Thre Thousand and Thirty Eigt,3038,219.png,Universelle,Chi Hsiao,1 -9733,27,22,Five Thousand Six Hundred and Eihty For,5684,137.png,Universelle,Eglantine Forest,1 -9734,21,38,Eigt Thousand On Hundred and Sxten,8116,105.png,Universelle,Freddie Reid,1 -9735,43,38,Nine Hundred and Seenty Six,976,219.png,Universelle,Freddie Reid,1 -9736,17,20,Nine Thousand Six Hundred and Sixt On,9661,86.png,Universelle,Seymour Patenaude,1 -9737,17,19,For Thousand and Fiteen,4015,86.png,Universelle,Franรงoise Lapierre,1 -9738,24,23,Thre Thousand Six Hundred and Fifty For,3654,121.png,Universelle,Thรฉrรจse Fortier,1 -9739,33,4,On Thousand Two Hundred and Twlve,1212,165.png,Universelle,Wafiyah Nashwa Wasem,1 -9740,39,0,Thre Thousand Eigt Hundred and Seenty Seven,3877,199.png,Universelle,Ethel M. Bryson,1 -9741,12,1,Six Thousand Seven Hundred and Fifty,6750,61.png,Universelle,Emily D. Short,1 -9742,15,41,Six Thousand and Nineten,6019,79.png,Universelle,Germa de Geus,1 -9743,32,3,For Thousand On Hundred and Twlve,4112,160.png,Universelle,Jiang Li Tao,1 -9744,14,20,Eigt Thousand Two Hundred and Foty Seven,8247,74.png,Universelle,Seymour Patenaude,1 -9745,16,12,Five Thousand and Thirty Five,5035,81.png,Universelle,Marcel Achen,1 -9746,4,20,On Thousand and Eihty For,1084,23.png,Universelle,Seymour Patenaude,1 -9747,28,31,Eigt Thousand Five Hundred and Sixt Two,8562,144.png,Universelle,Naomi Grant,1 -9748,38,39,Nine Thousand Eigt Hundred and Ninety Six,9896,190.png,Universelle,Katie Connor,1 -9749,26,2,For Thousand Six Hundred and Seenty Seven,4677,133.png,Universelle,Chi Hsiao,1 -9750,39,31,Five Thousand and Thirteen,5013,195.png,Universelle,Naomi Grant,1 -9751,42,26,On Thousand Six Hundred and Fifty For,1654,211.png,Universelle,Sidney Lapointe,1 -9752,11,27,Five Thousand Five Hundred and Fifty Six,5556,58.png,Universelle,Colette Monjeau,1 -9753,24,39,Eigt Thousand Eigt Hundred and Six,8806,123.png,Universelle,Katie Connor,1 -9754,14,37,Seven Thousand Six Hundred and Twenty Five,7625,72.png,Universelle,Eva Davies,1 -9755,34,11,Nine Thousand Eigt Hundred and Fifty Seven,9857,174.png,Universelle,Jens Egger,1 -9756,14,30,Six Thousand and Fifty,6050,73.png,Universelle,Jodie Holden,1 -9757,39,23,On Hundred and Eihty,180,199.png,Universelle,Thรฉrรจse Fortier,1 -9758,5,32,On Thousand Eigt Hundred and Twlve,1812,29.png,Universelle,Chelsea Watson,1 -9759,17,40,On Thousand Two Hundred and Eihty Nine,1289,89.png,Universelle,David Howard,1 -9760,33,41,Two Thousand Thre Hundred and Thirty On,2331,169.png,Universelle,Germa de Geus,1 -9761,31,8,Seven Thousand For Hundred and Eihty Seven,7487,159.png,Universelle,Steffen Krueger,1 -9762,25,9,Thre Thousand Five Hundred and Twenty,3520,129.png,Universelle,Maria Kalb,1 -9763,8,14,For Thousand Thre Hundred and Sixt,4360,42.png,Universelle,Renata Lukic,1 -9764,6,7,Two Hundred and Seenty Nine,279,31.png,Universelle,Hasna Bahiyaa Amari,1 -9765,14,36,Six Thousand Thre Hundred and Six,6306,74.png,Universelle,Thomas Chapman,1 -9766,43,11,On Thousand Seven Hundred and Fiteen,1715,218.png,Universelle,Jens Egger,1 -9767,4,33,Nine Thousand Seven Hundred and Sixt Five,9765,22.png,Universelle,Eleanor Freeman,1 -9768,34,27,Six Thousand Thre Hundred and Twenty For,6324,173.png,Universelle,Colette Monjeau,1 -9769,3,37,Thre Thousand Nine Hundred and Fifty Five,3955,15.png,Universelle,Eva Davies,1 -9770,39,35,Two Thousand Two Hundred and Ninety,2290,197.png,Universelle,Elliot Humphreys,1 -9771,11,13,For Thousand Eigt Hundred and Seventeen,4817,57.png,Universelle,Petra Kovacic,1 -9772,37,0,Two Thousand Seven Hundred and Forteen,2714,186.png,Universelle,Ethel M. Bryson,1 -9773,24,24,Five Thousand Five Hundred and Sixt Six,5566,122.png,Universelle,Clarice Blanc,1 -9774,36,31,Seven Thousand For Hundred and Thirty Two,7432,180.png,Universelle,Naomi Grant,1 -9775,34,32,Five Thousand Two Hundred and Foty Eigt,5248,171.png,Universelle,Chelsea Watson,1 -9776,38,11,Nine Thousand Five Hundred and Sixt For,9564,192.png,Universelle,Jens Egger,1 -9777,25,22,Two Thousand and Nineten,2019,126.png,Universelle,Eglantine Forest,1 -9778,13,6,Five Thousand Eigt Hundred and Twenty Two,5822,69.png,Universelle,Abdul Qais Khouri,1 -9779,40,26,Two Thousand Six Hundred and Sixt Nine,2669,202.png,Universelle,Sidney Lapointe,1 -9780,32,34,Thre Thousand Seven Hundred and Foty Eigt,3748,162.png,Universelle,Holly Martin,1 -9781,35,17,Six Thousand Five Hundred and Foty,6540,177.png,Universelle,Yolette Cloutier,1 -9782,41,42,Five Thousand Nine Hundred and Ninety Six,5996,207.png,Universelle,Brady Jamin,1 -9783,1,28,Nine Thousand For Hundred and Twenty For,9424,8.png,Universelle,Chapin Auger,1 -9784,33,24,Six Thousand For Hundred and Foty On,6441,166.png,Universelle,Clarice Blanc,1 -9785,17,1,Five Thousand Seven Hundred and Twenty Seven,5727,88.png,Universelle,Emily D. Short,1 -9786,39,24,Nine Thousand Six Hundred and Seenty Nine,9679,199.png,Universelle,Clarice Blanc,1 -9787,1,41,Nine Thousand On Hundred and Foty Seven,9147,8.png,Universelle,Germa de Geus,1 -9788,5,23,On Thousand Five Hundred and Foty Seven,1547,28.png,Universelle,Thรฉrรจse Fortier,1 -9789,11,14,Six Thousand For Hundred and Foty Thre,6443,55.png,Universelle,Renata Lukic,1 -9790,22,5,On Thousand Two Hundred and Sixt For,1264,111.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9791,22,10,Nine Thousand Seven Hundred and For,9704,113.png,Universelle,Stephan Schwab,1 -9792,7,41,Six Thousand Eigt Hundred and Eihty Two,6882,38.png,Universelle,Germa de Geus,1 -9793,28,37,Nine Thousand and Eihty Six,9086,142.png,Universelle,Eva Davies,1 -9794,27,11,Six Thousand Two Hundred and Fifty,6250,139.png,Universelle,Jens Egger,1 -9795,19,6,On Thousand and Thirty Nine,1039,97.png,Universelle,Abdul Qais Khouri,1 -9796,18,21,Seven Hundred and Foty On,741,90.png,Universelle,David Corbeil,1 -9797,3,16,Eigt Hundred and Foty For,844,18.png,Universelle,Searlas Grenier,1 -9798,16,24,Two Thousand Thre Hundred and Two,2302,83.png,Universelle,Clarice Blanc,1 -9799,22,22,Two Thousand For Hundred and Two,2402,114.png,Universelle,Eglantine Forest,1 -9800,16,36,Five Thousand Two Hundred and Thirty For,5234,82.png,Universelle,Thomas Chapman,1 -9801,22,35,Two Hundred and Ninety Five,295,112.png,Universelle,Elliot Humphreys,1 -9802,16,39,Eigt Thousand Thre Hundred and For,8304,84.png,Universelle,Katie Connor,1 -9803,9,3,Eigt Thousand Nine Hundred and Seenty For,8974,46.png,Universelle,Jiang Li Tao,1 -9804,16,21,Six Thousand Eigt Hundred and Thirty For,6834,82.png,Universelle,David Corbeil,1 -9805,16,22,Six Thousand and Thirty Six,6036,80.png,Universelle,Eglantine Forest,1 -9806,41,40,Seven Thousand Nine Hundred and Sxten,7916,205.png,Universelle,David Howard,1 -9807,23,18,Eigt Thousand On Hundred and Thre,8103,117.png,Universelle,Edmee Pelletier,1 -9808,33,43,Six Thousand On Hundred and Seenty Nine,6179,168.png,Universelle,Aruna Bekx,1 -9809,43,32,Six Thousand For Hundred and Seenty On,6471,215.png,Universelle,Chelsea Watson,1 -9810,24,24,Nine Thousand Eigt Hundred and Ninety For,9894,123.png,Universelle,Clarice Blanc,1 -9811,17,42,Two Thousand For Hundred and Ninety,2490,87.png,Universelle,Brady Jamin,1 -9812,21,9,Five Thousand Five Hundred and Thirty Nine,5539,105.png,Universelle,Maria Kalb,1 -9813,41,14,Seven Thousand Nine Hundred and For,7904,209.png,Universelle,Renata Lukic,1 -9814,6,32,Five Thousand Eigt Hundred and Forteen,5814,31.png,Universelle,Chelsea Watson,1 -9815,5,4,Nine Thousand and Foty Five,9045,25.png,Universelle,Wafiyah Nashwa Wasem,1 -9816,27,2,Nine Thousand Eigt Hundred and Ninety For,9894,135.png,Universelle,Chi Hsiao,1 -9817,7,32,Six Thousand Thre Hundred and Foty Nine,6349,35.png,Universelle,Chelsea Watson,1 -9818,6,3,Two Thousand Nine Hundred and Fifty Two,2952,34.png,Universelle,Jiang Li Tao,1 -9819,14,42,Eigt Thousand Six Hundred and Twenty For,8624,73.png,Universelle,Brady Jamin,1 -9820,14,42,Seven Thousand For Hundred and Fifty Six,7456,72.png,Universelle,Brady Jamin,1 -9821,28,40,Six Thousand Nine Hundred and Eihty Six,6986,144.png,Universelle,David Howard,1 -9822,16,39,For Thousand Seven Hundred and Thirty Eigt,4738,82.png,Universelle,Katie Connor,1 -9823,19,17,Nine Hundred and Thirty Thre,933,98.png,Universelle,Yolette Cloutier,1 -9824,28,0,Two Thousand and Ninety On,2091,142.png,Universelle,Ethel M. Bryson,1 -9825,42,14,Five Thousand and Thirty Thre,5033,213.png,Universelle,Renata Lukic,1 -9826,35,7,Seven Thousand Nine Hundred and Seenty Nine,7979,177.png,Universelle,Hasna Bahiyaa Amari,1 -9827,33,40,Nine Thousand Seven Hundred and Fifty Eigt,9758,167.png,Universelle,David Howard,1 -9828,5,2,Thre Thousand For Hundred and Five,3405,27.png,Universelle,Chi Hsiao,1 -9829,8,15,Thre Thousand Nine Hundred and Eihty Thre,3983,42.png,Universelle,Milenko Tkalcic,1 -9830,4,21,Six Thousand Six Hundred and Sixt Two,6662,23.png,Universelle,David Corbeil,1 -9831,3,14,Nine Thousand Thre Hundred and Five,9305,18.png,Universelle,Renata Lukic,1 -9832,4,20,Six Thousand and Eihty Six,6086,20.png,Universelle,Seymour Patenaude,1 -9833,7,9,Six Thousand Nine Hundred and Eihty Six,6986,38.png,Universelle,Maria Kalb,1 -9834,19,11,For Hundred and Nine,409,99.png,Universelle,Jens Egger,1 -9835,5,4,Six Thousand Nine Hundred and Seenty Five,6975,26.png,Universelle,Wafiyah Nashwa Wasem,1 -9836,22,43,For Thousand Eigt Hundred and Ninety Thre,4893,111.png,Universelle,Aruna Bekx,1 -9837,40,24,Six Thousand Eigt Hundred and Seenty,6870,204.png,Universelle,Clarice Blanc,1 -9838,30,33,Thre Thousand On Hundred and Sixt For,3164,150.png,Universelle,Eleanor Freeman,1 -9839,34,25,On Thousand Two Hundred and Sixt Eigt,1268,172.png,Universelle,Fleurette Coudert,1 -9840,9,16,On Thousand Six Hundred and Five,1605,47.png,Universelle,Searlas Grenier,1 -9841,41,8,For Thousand Six Hundred and Fifty,4650,209.png,Universelle,Steffen Krueger,1 -9842,12,27,Nine Thousand Seven Hundred and Fifty Thre,9753,63.png,Universelle,Colette Monjeau,1 -9843,21,0,Seven Thousand Nine Hundred and Eihty Thre,7983,107.png,Universelle,Ethel M. Bryson,1 -9844,34,34,Five Thousand Eigt Hundred and Twenty For,5824,170.png,Universelle,Holly Martin,1 -9845,32,4,Two Thousand Eigt Hundred and Seenty Five,2875,163.png,Universelle,Wafiyah Nashwa Wasem,1 -9846,39,43,Six Thousand Five Hundred and Ninety For,6594,197.png,Universelle,Aruna Bekx,1 -9847,9,30,On Thousand Five Hundred and Thirteen,1513,47.png,Universelle,Jodie Holden,1 -9848,33,33,Nine Thousand Thre Hundred and Foty Six,9346,167.png,Universelle,Eleanor Freeman,1 -9849,27,3,For Thousand On Hundred and Eihty For,4184,139.png,Universelle,Jiang Li Tao,1 -9850,21,20,Nine Thousand Five Hundred and Fifty Nine,9559,109.png,Universelle,Seymour Patenaude,1 -9851,42,31,Nine Thousand Eigt Hundred and Twenty Nine,9829,212.png,Universelle,Naomi Grant,1 -9852,10,31,Five Thousand Five Hundred and Fifty Eigt,5558,53.png,Universelle,Naomi Grant,1 -9853,1,19,On Thousand Five Hundred and Sixt,1560,8.png,Universelle,Franรงoise Lapierre,1 -9854,20,34,Nine Thousand Thre Hundred and Twenty Five,9325,102.png,Universelle,Holly Martin,1 -9855,2,16,Fifty Five,55,14.png,Universelle,Searlas Grenier,1 -9856,31,0,Five Thousand On Hundred and Fifty For,5154,156.png,Universelle,Ethel M. Bryson,1 -9857,23,13,Two Thousand Two Hundred and Twenty On,2221,116.png,Universelle,Petra Kovacic,1 -9858,27,25,On Thousand Two Hundred and Thirty Thre,1233,139.png,Universelle,Fleurette Coudert,1 -9859,10,1,On Thousand For Hundred and Fifty Five,1455,51.png,Universelle,Emily D. Short,1 -9860,41,33,On Thousand Five Hundred and Eihty Two,1582,209.png,Universelle,Eleanor Freeman,1 -9861,20,4,Five Thousand Six Hundred and Seenty Six,5676,101.png,Universelle,Wafiyah Nashwa Wasem,1 -9862,1,0,Seven Thousand Eigt Hundred and Twenty Five,7825,7.png,Universelle,Ethel M. Bryson,1 -9863,15,19,On Thousand Two Hundred and Twenty Two,1222,77.png,Universelle,Franรงoise Lapierre,1 -9864,19,9,Five Thousand Thre Hundred and Seenty Two,5372,95.png,Universelle,Maria Kalb,1 -9865,36,14,For Thousand Two Hundred and Thirty Two,4232,181.png,Universelle,Renata Lukic,1 -9866,35,16,Five Thousand Five Hundred and Ninety Six,5596,177.png,Universelle,Searlas Grenier,1 -9867,14,34,Eigt Thousand and Eihty Seven,8087,71.png,Universelle,Holly Martin,1 -9868,39,17,Seven Thousand Six Hundred and Twlve,7612,197.png,Universelle,Yolette Cloutier,1 -9869,12,3,Nine Thousand Eigt Hundred and Thirty On,9831,62.png,Universelle,Jiang Li Tao,1 -9870,1,14,Two Thousand Nine Hundred and Thirty,2930,7.png,Universelle,Renata Lukic,1 -9871,9,37,For Thousand Five Hundred and Seenty Eigt,4578,49.png,Universelle,Eva Davies,1 -9872,8,20,Two Hundred and Thirty For,234,42.png,Universelle,Seymour Patenaude,1 -9873,17,22,Seven Thousand Thre Hundred and Foty Two,7342,86.png,Universelle,Eglantine Forest,1 -9874,26,12,Thre Thousand Thre Hundred and Eihty Seven,3387,134.png,Universelle,Marcel Achen,1 -9875,40,35,Thre Thousand Five Hundred and Thirty Seven,3537,204.png,Universelle,Elliot Humphreys,1 -9876,15,9,Six Thousand For Hundred and Fifty Six,6456,75.png,Universelle,Maria Kalb,1 -9877,30,33,For Thousand Thre Hundred and Twenty Six,4326,154.png,Universelle,Eleanor Freeman,1 -9878,35,14,Nine Thousand Thre Hundred and Sixt Five,9365,178.png,Universelle,Renata Lukic,1 -9879,35,43,Two Thousand Two Hundred and Eihty Seven,2287,175.png,Universelle,Aruna Bekx,1 -9880,4,12,Five Thousand Two Hundred and Thirty Two,5232,22.png,Universelle,Marcel Achen,1 -9881,19,3,Eigt Thousand On Hundred and Thirty Eigt,8138,97.png,Universelle,Jiang Li Tao,1 -9882,8,19,Eigt Thousand and Sixt For,8064,42.png,Universelle,Franรงoise Lapierre,1 -9883,20,37,Two Thousand Eigt Hundred and Nineten,2819,104.png,Universelle,Eva Davies,1 -9884,22,39,Thre Thousand Nine Hundred and Sixt Thre,3963,111.png,Universelle,Katie Connor,1 -9885,14,9,Thre Hundred,300,74.png,Universelle,Maria Kalb,1 -9886,34,20,Eigt Thousand Six Hundred and Fifty Seven,8657,173.png,Universelle,Seymour Patenaude,1 -9887,5,28,For Hundred and Two,402,29.png,Universelle,Chapin Auger,1 -9888,5,18,Two Thousand Thre Hundred and Ninety On,2391,25.png,Universelle,Edmee Pelletier,1 -9889,33,10,Seven Thousand Thre Hundred and Eihty Nine,7389,167.png,Universelle,Stephan Schwab,1 -9890,38,29,Five Thousand Two Hundred and Foty Two,5242,191.png,Universelle,Hayden Bruce,1 -9891,22,28,Seven,7,113.png,Universelle,Chapin Auger,1 -9892,31,18,Seven Thousand On Hundred and Foty Thre,7143,159.png,Universelle,Edmee Pelletier,1 -9893,12,39,Five Thousand Two Hundred and Eihty Two,5282,63.png,Universelle,Katie Connor,1 -9894,40,39,For Thousand Seven Hundred and Twenty Seven,4727,203.png,Universelle,Katie Connor,1 -9895,0,19,Six Thousand Six Hundred and Eihty For,6684,2.png,Universelle,Franรงoise Lapierre,1 -9896,17,26,Sixt Five,65,86.png,Universelle,Sidney Lapointe,1 -9897,26,9,Nine Thousand and Twenty Seven,9027,130.png,Universelle,Maria Kalb,1 -9898,32,4,Six Thousand Six Hundred and Forteen,6614,164.png,Universelle,Wafiyah Nashwa Wasem,1 -9899,7,15,Thre Thousand Six Hundred and Thirty Thre,3633,38.png,Universelle,Milenko Tkalcic,1 -9900,28,43,For Thousand Eigt Hundred and Two,4802,140.png,Universelle,Aruna Bekx,1 -9901,35,37,Thre Thousand For Hundred and Six,3406,177.png,Universelle,Eva Davies,1 -9902,17,23,Six Thousand On Hundred and Fifty Nine,6159,89.png,Universelle,Thรฉrรจse Fortier,1 -9903,30,39,Two Thousand On Hundred and Fifty For,2154,152.png,Universelle,Katie Connor,1 -9904,34,21,Nine Hundred and Thre,903,172.png,Universelle,David Corbeil,1 -9905,9,12,Eigt Thousand Nine Hundred and Twenty Five,8925,48.png,Universelle,Marcel Achen,1 -9906,10,12,Thre Thousand Five Hundred and Six,3506,53.png,Universelle,Marcel Achen,1 -9907,5,15,Eigt Thousand Eigt Hundred and Seenty Thre,8873,28.png,Universelle,Milenko Tkalcic,1 -9908,40,32,Five Thousand On Hundred and Twenty Nine,5129,201.png,Universelle,Chelsea Watson,1 -9909,37,39,Six Thousand For Hundred and Eihty Nine,6489,188.png,Universelle,Katie Connor,1 -9910,34,28,On Hundred and Sixt,160,173.png,Universelle,Chapin Auger,1 -9911,18,25,Five Thousand and Foty Nine,5049,90.png,Universelle,Fleurette Coudert,1 -9912,42,6,Eigt Thousand and Eihty Five,8085,214.png,Universelle,Abdul Qais Khouri,1 -9913,31,1,Thre Thousand and Twenty On,3021,158.png,Universelle,Emily D. Short,1 -9914,1,0,Six Thousand Nine Hundred and Twlve,6912,5.png,Universelle,Ethel M. Bryson,1 -9915,5,30,Eigt Thousand On Hundred and Ninety On,8191,25.png,Universelle,Jodie Holden,1 -9916,23,12,Thre Thousand Seven Hundred and Twenty Seven,3727,117.png,Universelle,Marcel Achen,1 -9917,5,16,Thirty For,34,27.png,Universelle,Searlas Grenier,1 -9918,11,41,For Thousand On Hundred and Foty On,4141,58.png,Universelle,Germa de Geus,1 -9919,12,39,Eigt Thousand Seven Hundred and Sixt On,8761,61.png,Universelle,Katie Connor,1 -9920,43,32,Five Thousand Thre Hundred and Thirty Six,5336,216.png,Universelle,Chelsea Watson,1 -9921,36,2,Seven Thousand On Hundred and Ninety Thre,7193,182.png,Universelle,Chi Hsiao,1 -9922,43,26,Seven Thousand and Sixt Six,7066,218.png,Universelle,Sidney Lapointe,1 -9923,7,18,Two Thousand Two Hundred and Seenty Two,2272,37.png,Universelle,Edmee Pelletier,1 -9924,16,35,On Thousand For Hundred and Eihty On,1481,82.png,Universelle,Elliot Humphreys,1 -9925,10,11,Eigt Hundred and Foty Five,845,52.png,Universelle,Jens Egger,1 -9926,9,39,Two Thousand and Seenty Seven,2077,46.png,Universelle,Katie Connor,1 -9927,0,5,Six Hundred and Ninety Eigt,698,0.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9928,30,7,Eigt Thousand Six Hundred and Foty Two,8642,151.png,Universelle,Hasna Bahiyaa Amari,1 -9929,21,27,Eigt Thousand Two Hundred and Sxten,8216,108.png,Universelle,Colette Monjeau,1 -9930,14,42,Two Thousand Two Hundred and Sixt Five,2265,71.png,Universelle,Brady Jamin,1 -9931,29,27,Nine Thousand On Hundred and Ninety Thre,9193,147.png,Universelle,Colette Monjeau,1 -9932,16,11,Five Thousand Six Hundred and Foty For,5644,82.png,Universelle,Jens Egger,1 -9933,3,42,Two Thousand For Hundred and Foty Eigt,2448,19.png,Universelle,Brady Jamin,1 -9934,43,20,Seven Thousand For Hundred and Eihty Eigt,7488,219.png,Universelle,Seymour Patenaude,1 -9935,9,26,Seven Thousand For Hundred and Foty Nine,7449,46.png,Universelle,Sidney Lapointe,1 -9936,7,17,Thre Thousand Seven Hundred and Seenty Seven,3777,37.png,Universelle,Yolette Cloutier,1 -9937,32,16,Five Thousand Thre Hundred and Eleven,5311,163.png,Universelle,Searlas Grenier,1 -9938,33,8,Five Thousand Five Hundred and Twlve,5512,169.png,Universelle,Steffen Krueger,1 -9939,9,0,On Thousand Seven Hundred and Eihteen,1718,45.png,Universelle,Ethel M. Bryson,1 -9940,0,16,Two Thousand Five Hundred and Sixt,2560,1.png,Universelle,Searlas Grenier,1 -9941,9,4,On Thousand Thre Hundred and Eihty For,1384,48.png,Universelle,Wafiyah Nashwa Wasem,1 -9942,24,19,Five Thousand Seven Hundred and Ninety Thre,5793,124.png,Universelle,Franรงoise Lapierre,1 -9943,29,25,Thre Thousand and Seenty For,3074,148.png,Universelle,Fleurette Coudert,1 -9944,26,36,Six Thousand On Hundred and Sixt Six,6166,132.png,Universelle,Thomas Chapman,1 -9945,5,34,Six Thousand Nine Hundred and Forteen,6914,26.png,Universelle,Holly Martin,1 -9946,43,15,Five Thousand Thre Hundred and Ninety For,5394,215.png,Universelle,Milenko Tkalcic,1 -9947,31,29,Thre Thousand On Hundred and Twlve,3112,155.png,Universelle,Hayden Bruce,1 -9948,30,2,For Thousand and Fifty On,4051,154.png,Universelle,Chi Hsiao,1 -9949,42,13,Two Thousand Five Hundred and Thirty For,2534,211.png,Universelle,Petra Kovacic,1 -9950,32,4,Seven Thousand Thre Hundred and Ten,7310,164.png,Universelle,Wafiyah Nashwa Wasem,1 -9951,3,40,Nine Thousand Thre Hundred and Eihty Eigt,9388,15.png,Universelle,David Howard,1 -9952,1,36,Thre Thousand Six Hundred and Foty,3640,9.png,Universelle,Thomas Chapman,1 -9953,28,42,Thre Thousand Thre Hundred and Seenty On,3371,143.png,Universelle,Brady Jamin,1 -9954,22,13,For Thousand and Ninety For,4094,112.png,Universelle,Petra Kovacic,1 -9955,39,8,On Thousand Six Hundred and Eihty Five,1685,196.png,Universelle,Steffen Krueger,1 -9956,10,35,For Thousand Two Hundred and Seenty On,4271,53.png,Universelle,Elliot Humphreys,1 -9957,6,37,Nine Thousand Two Hundred and Seven,9207,33.png,Universelle,Eva Davies,1 -9958,18,32,Eigt Thousand For Hundred and Ninety,8490,92.png,Universelle,Chelsea Watson,1 -9959,17,10,Five Thousand Two Hundred and On,5201,89.png,Universelle,Stephan Schwab,1 -9960,36,4,Eigt Thousand Eigt Hundred and Nine,8809,180.png,Universelle,Wafiyah Nashwa Wasem,1 -9961,33,42,For Thousand Thre Hundred and Ninety Nine,4399,167.png,Universelle,Brady Jamin,1 -9962,19,11,Nine Thousand For Hundred and Ninety On,9491,98.png,Universelle,Jens Egger,1 -9963,32,36,Five Thousand Thre Hundred and Foty Eigt,5348,164.png,Universelle,Thomas Chapman,1 -9964,28,22,Two Thousand Two Hundred and Fifty,2250,143.png,Universelle,Eglantine Forest,1 -9965,35,3,Nine Hundred and Fifty Eigt,958,177.png,Universelle,Jiang Li Tao,1 -9966,28,1,Six Thousand Two Hundred and Thre,6203,141.png,Universelle,Emily D. Short,1 -9967,0,8,Nine Thousand Nine Hundred and Twenty,9920,4.png,Universelle,Steffen Krueger,1 -9968,14,24,For Thousand Thre Hundred and Thirty Nine,4339,70.png,Universelle,Clarice Blanc,1 -9969,8,9,Thre Thousand Two Hundred and Ninety For,3294,44.png,Universelle,Maria Kalb,1 -9970,30,35,Two Thousand On Hundred and Twenty Thre,2123,153.png,Universelle,Elliot Humphreys,1 -9971,20,40,Eigt Thousand Nine Hundred and Fifty Two,8952,104.png,Universelle,David Howard,1 -9972,23,8,Seenty On,71,115.png,Universelle,Steffen Krueger,1 -9973,21,4,On Thousand Nine Hundred and Ninety Eigt,1998,106.png,Universelle,Wafiyah Nashwa Wasem,1 -9974,28,25,On Thousand On Hundred and Sxten,1116,143.png,Universelle,Fleurette Coudert,1 -9975,6,43,Two Thousand Six Hundred and Sixt Seven,2667,34.png,Universelle,Aruna Bekx,1 -9976,20,12,Thre Thousand and Nineten,3019,103.png,Universelle,Marcel Achen,1 -9977,35,29,Eigt Thousand On Hundred and Fifty Seven,8157,175.png,Universelle,Hayden Bruce,1 -9978,8,10,Seven Thousand Five Hundred and Nineten,7519,40.png,Universelle,Stephan Schwab,1 -9979,7,39,For Thousand For Hundred and Foty On,4441,35.png,Universelle,Katie Connor,1 -9980,21,43,Five Thousand Five Hundred and Eihty Eigt,5588,109.png,Universelle,Aruna Bekx,1 -9981,39,36,Two Thousand Nine Hundred and Fiteen,2915,197.png,Universelle,Thomas Chapman,1 -9982,0,19,Five Thousand Thre Hundred and Thre,5303,1.png,Universelle,Franรงoise Lapierre,1 -9983,16,36,For Thousand Eigt Hundred and Sixt Six,4866,80.png,Universelle,Thomas Chapman,1 -9984,20,28,Nine Thousand Nine Hundred and Seenty Thre,9973,102.png,Universelle,Chapin Auger,1 -9985,26,0,On Thousand Six Hundred and Eigt,1608,132.png,Universelle,Ethel M. Bryson,1 -9986,0,8,Two Thousand Thre Hundred and Eihty Six,2386,1.png,Universelle,Steffen Krueger,1 -9987,3,5,Nine Thousand Five Hundred and Thirty Six,9536,16.png,Universelle,Fawwaz Zuhayr Mustafa,1 -9988,15,4,Nine Thousand Five Hundred and Sixt On,9561,78.png,Universelle,Wafiyah Nashwa Wasem,1 -9989,16,14,Thre Thousand Eigt Hundred and Twenty On,3821,80.png,Universelle,Renata Lukic,1 -9990,42,22,Two Thousand Seven Hundred and Fifty Five,2755,213.png,Universelle,Eglantine Forest,1 -9991,17,41,On Thousand Thre Hundred and Sixt Nine,1369,86.png,Universelle,Germa de Geus,1 -9992,6,10,On Thousand Eigt Hundred and Foty Two,1842,30.png,Universelle,Stephan Schwab,1 -9993,10,11,On Hundred and Ninety,190,54.png,Universelle,Jens Egger,1 -9994,41,2,Thre Thousand On Hundred and Thirty Six,3136,208.png,Universelle,Chi Hsiao,1 -9995,38,15,Five Thousand Thre Hundred and Seven,5307,192.png,Universelle,Milenko Tkalcic,1 -9996,12,20,Eigt Thousand For Hundred and Eihty Two,8482,62.png,Universelle,Seymour Patenaude,1 -9997,29,17,Seven Thousand Nine Hundred and Eihty Seven,7987,149.png,Universelle,Yolette Cloutier,1 -9998,32,26,Two Hundred and Ninety Six,296,162.png,Universelle,Sidney Lapointe,1 -9999,5,8,Thre Thousand Five Hundred and Seven,3507,28.png,Universelle,Steffen Krueger,1 -10000,28,21,Eigt Thousand For Hundred and Eihty For,8484,142.png,Universelle,David Corbeil,1 diff --git a/advanced_tutorials/fraud_cheque_detection/features/cheque.py b/advanced_tutorials/fraud_cheque_detection/features/cheque.py deleted file mode 100644 index 000a06ce..00000000 --- a/advanced_tutorials/fraud_cheque_detection/features/cheque.py +++ /dev/null @@ -1,78 +0,0 @@ -from textblob import TextBlob -from word2number import w2n - -def spell_check(text): - """ - Checks and corrects the spelling of a given text. - - Parameters: - - text (str): The text whose spelling is to be checked. - - Returns: - - tuple: A tuple containing a boolean indicating if the original spelling was correct, and the corrected text. - """ - # Convert the text to lower case to standardize it - text_lower = text.lower() - - # Return early if the text is 'missing' or an empty string - if text_lower in ['missing', ' ']: - return False, 'missing' - - # Correct the text using TextBlob - text_corrected = str(TextBlob(text_lower).correct()) - - # Determine if the original text was spelled correctly - spelling_is_correct = text_lower == text_corrected - - return spelling_is_correct, text_corrected.strip() - - -def amount_letter_number_match(amount_in_text_corrected, amount_in_number): - """ - Compares the numeric value of a text representation of an amount to its numeric counterpart. - - Parameters: - - amount_in_text_corrected (str): The text representation of an amount. - - amount_in_number (str): The numeric representation of an amount. - - Returns: - - bool or tuple: True if the amounts match, False otherwise, or a tuple with a message if data is missing. - """ - # Handle missing values - if 'missing' in [amount_in_text_corrected, amount_in_number]: - return False, ('Amount in words is missing' if amount_in_text_corrected == 'missing' else 'Amount in numbers is missing') - - try: - # Attempt to convert the textual representation to a number - amount_text_to_num = w2n.word_to_num(amount_in_text_corrected) - - # Compare it to the provided numeric value, making sure to convert it to an int - return amount_text_to_num == int(amount_in_number) - - # If Spell correction fails (for -> four) - except Exception as e: - return False - - -def get_amount_match_column(amount_in_text_corrected, amount_in_number): - """ - Retrieves the match status or value for an amount, handling tuples indicating missing data. - - Parameters: - - amount_in_text_corrected (str): The text representation of an amount, corrected for spelling. - - amount_in_number (str): The numeric representation of an amount. - - Returns: - - bool: True if the amounts match, False otherwise, or the first element of the tuple if an error message is present. - """ - # Determine the match status or value - match_value = amount_letter_number_match( - amount_in_text_corrected, - amount_in_number, - ) - - # Return the value, handling tuple for error messages - if isinstance(match_value, tuple): - return match_value[0] - - return match_value diff --git a/advanced_tutorials/fraud_cheque_detection/features/cheque_validation.py b/advanced_tutorials/fraud_cheque_detection/features/cheque_validation.py deleted file mode 100644 index 54d641df..00000000 --- a/advanced_tutorials/fraud_cheque_detection/features/cheque_validation.py +++ /dev/null @@ -1,34 +0,0 @@ -import pandas as pd - -def get_cheque_ids(feature_group, data: pd.DataFrame) -> pd.DataFrame: - """ - Generate a sequence of new cheque IDs for a DataFrame based on the maximum existing cheque ID found in a feature group. - - The function first attempts to find the maximum 'cheque_id' using the feature group statistics. - If it finds this max ID, it generates a new sequence of cheque IDs for the DataFrame starting from the next integer. - If it encounters any issue in the process (e.g., the feature group does not exist), it resets the DataFrame's index - to create a 'cheque_id' based on the row index. - - Parameters: - feature_group: Hopsworks Feature Group. - data (pd.DataFrame): The DataFrame to which the cheque ID will be added. - - Returns: - pd.DataFrame: The modified DataFrame with a new 'cheque_id' column added. - """ - try: - # Extract the maximum 'cheque_id' from feature_group if it exists - cheque_id_max = [ - int(feature.max) - for feature in feature_group.statistics.feature_descriptive_statistics - if feature.feature_name == 'cheque_id' - ][0] - - # Generate new cheque IDs starting from the maximum found + 1 - data['cheque_id'] = [*range(cheque_id_max + 1, cheque_id_max + 1 + data.shape[0])] - - except Exception as e: - # In case of any error during ID generation, fallback to using DataFrame index as 'cheque_id' - data = data.reset_index(drop=False).rename(columns={'index': 'cheque_id'}) - - return data diff --git a/advanced_tutorials/fraud_cheque_detection/functions/donut.py b/advanced_tutorials/fraud_cheque_detection/functions/donut.py deleted file mode 100644 index e10ed930..00000000 --- a/advanced_tutorials/fraud_cheque_detection/functions/donut.py +++ /dev/null @@ -1,138 +0,0 @@ -import torch -import re -import numpy as np -from transformers import ( - DonutProcessor, - VisionEncoderDecoderModel, -) -from features.cheque import ( - spell_check, - amount_letter_number_match, -) - -# Determine the device to use based on the availability of CUDA (GPU) -device = "cuda" if torch.cuda.is_available() else "cpu" - -def load_cheque_parser(folder_name): - """ - Loads a cheque parsing processor and model from a specified directory and moves the model to the appropriate device. - - This function loads a DonutProcessor and a VisionEncoderDecoderModel. The model is moved to a GPU if available, otherwise to CPU. - - Parameters: - - folder_name (str): The directory where the processor and model's pretrained weights are stored. - - Returns: - - tuple: A tuple containing the loaded processor and model. - """ - # Load the DonutProcessor from the pretrained model directory - processor = DonutProcessor.from_pretrained(folder_name) - - # Load the VisionEncoderDecoderModel from the pretrained model directory - model = VisionEncoderDecoderModel.from_pretrained(folder_name) - - # Move the model to the available device (GPU or CPU) - model.to(device) - - # Return the processor and model as a tuple - return processor, model - - -def parse_text(image, processor, model): - """ - Parses text from an image using a pre-trained model and processor, and formats the output. - - Parameters: - - image: The image from which to parse text. - - processor: The processor instance equipped with methods for handling input preprocessing and decoding outputs. - - model: The pre-trained VisionEncoderDecoderModel used to generate text from image data. - - Returns: - - dict: A dictionary containing parsed and formatted cheque details. - """ - # Prepare the initial task prompt and get decoder input IDs from the tokenizer - task_prompt = "" - decoder_input_ids = processor.tokenizer( - task_prompt, - add_special_tokens=False, - return_tensors="pt", - ).input_ids - - # Convert image to pixel values suitable for the model input - pixel_values = processor(image, return_tensors="pt").pixel_values - - - # Generate outputs from the model using the provided pixel values and decoder inputs - outputs = model.generate( - pixel_values.to(device), # Ensure pixel values are on the correct device (CPU/GPU) - decoder_input_ids=decoder_input_ids.to(device), # Move decoder inputs to the correct device - max_length=model.decoder.config.max_position_embeddings, # Set the maximum output length - pad_token_id=processor.tokenizer.pad_token_id, # Define padding token - eos_token_id=processor.tokenizer.eos_token_id, # Define end-of-sequence token - use_cache=True, # Enable caching to improve performance - bad_words_ids=[[processor.tokenizer.unk_token_id]], # Prevent generation of unknown tokens - return_dict_in_generate=True, # Return outputs in a dictionary format - ) - - # Decode the output sequences to text - sequence = processor.batch_decode(outputs.sequences)[0] - - # Remove special tokens and clean up the sequence - sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "") - - # Remove the initial task prompt token - sequence = re.sub(r"<.*?>", "", sequence, count=1).strip() - - # Convert the cleaned sequence to JSON and format the output - json = processor.token2json(sequence) - - return { - key: (value if value != '' else 'missing') - for attribute - in json['cheque_details'] - for key, value - in attribute.items() - } - - -def evaluate_cheque_fraud(parsed_data, model_fraud_detection): - """ - Evaluates potential fraud in a cheque by analyzing the consistency of spelling and the match between - numerical and textual representations of the amount. - - Parameters: - - parsed_data (dict): Dictionary containing parsed data from a cheque, including amounts in words and figures. - - model_fraud_detection: A trained model used to predict whether the cheque is valid or fraudulent. - - Returns: - - tuple: A tuple containing the fraud evaluation result ('valid' or 'fraud'), spelling check message, - and amount match message. - """ - # Check spelling for the amount in words and correct it if necessary - spelling_is_correct, amount_in_text_corrected = spell_check( - parsed_data['amt_in_words'], - ) - - # Check if the corrected amount in words matches the amount in figures - amount_match = amount_letter_number_match( - amount_in_text_corrected, - parsed_data['amt_in_figures'], - ) - - # Handle the case where amount_match is a tuple, using only the first element if so - amount_match_value = amount_match[0] if isinstance(amount_match, tuple) else amount_match - - # Prepare the input for the fraud detection model - model_input = np.array([spelling_is_correct, amount_match_value]) - - # Predict fraud using the model, reshaping input to match expected format - prediction = model_fraud_detection.predict( - model_input.reshape(1, -1) - ) - - # Construct messages regarding the spelling and value match - spelling = f'Spelling is correct: {spelling_is_correct}' - value_match = f'Numeric and alphabetic values match: {amount_match}' - - # Return the evaluation result along with explanatory messages - return np.where(prediction[0] == 1, 'valid', 'fraud').item(), spelling, value_match diff --git a/advanced_tutorials/fraud_cheque_detection/functions/llm_chain.py b/advanced_tutorials/fraud_cheque_detection/functions/llm_chain.py deleted file mode 100644 index 911c55ca..00000000 --- a/advanced_tutorials/fraud_cheque_detection/functions/llm_chain.py +++ /dev/null @@ -1,249 +0,0 @@ -import os -import getpass -from transformers import AutoTokenizer, AutoModelForCausalLM -import transformers -import torch -from langchain.llms import HuggingFacePipeline -from langchain.prompts import PromptTemplate -from langchain.schema.output_parser import StrOutputParser - -from functions.utils import ( - load_image, -) -from functions.donut import ( - parse_text, - evaluate_cheque_fraud, -) - - -def load_llm(model_id: str = "meta-llama/Meta-Llama-3-8B-Instruct") -> tuple: - """ - Load the LLM and its corresponding tokenizer. - - Args: - model_id (str, optional): Identifier for the pre-trained model. Defaults to "meta-llama/Meta-Llama-3-8B-Instruct". - - Returns: - tuple: A tuple containing the loaded model and tokenizer. - """ - - # Setup the HuggingFace API Key - os.environ["HF_API_KEY"] = os.getenv("HF_API_KEY") or getpass.getpass('๐Ÿ”‘ Enter your HuggingFace API key: ') - - # Load the Meta-Llama-3-8B-Instruct tokenizer - tokenizer = AutoTokenizer.from_pretrained( - model_id, - token=os.environ["HF_API_KEY"], - ) - - # Load the Meta-Llama-3-8B-Instruct model - model_llm = AutoModelForCausalLM.from_pretrained( - model_id, - device_map="auto", - token=os.environ["HF_API_KEY"], - ) - - # Print device - print(f'โ›ณ๏ธ Device: {model_llm.device}') - return tokenizer, model_llm - - -def get_prompt_template(): - prompt = """ - <|begin_of_text|> - <|start_header_id|>system<|end_header_id|> - You are a professional cheque fraud detection assistant. - Provide a rich description on why the cheque is fraud or valid. - - ###CONTEXT - {context} - - ###INSTRUCTIONS - - Do not say that you are not a professional cheque fraud detection assistant. - - You are to provide clear, concise, and direct responses. - - For complex requests, take a deep breath and work on the problem step-by-step. - - For every response, you will be tipped up to $1000 (depending on the quality of your output). - - Maintain a casual tone in your communication. - - Start with the cheque verdict (Fraud, Valid) and then justify your decision. - - If the "Amount in words" is missing, skip the spelling validation part. - - Use the provided example as a template. - - Make sure that you do NOT use enumeration or bullet points in your response. - - Be sure in your answer. - - ###EXAMPLE 1 - - User: Is this cheque fraud or valid? - - AI Assistant: Valid | The cheque is considered valid because the amount in words matches the amount in numbers and the spelling is correct. - - ###EXAMPLE 2 - - User: Is this cheque fraud or valid? - - AI Assistant: Fraud | The cheque is fraudulent due to a mismatch between the numeric and alphabetic values. . - - ###EXAMPLE 3 - - User: Is this cheque fraud or valid? - - AI Assistant: Fraud | The cheque is considered fraudulent because the amount in words is missing, which is a crucial detail that should be included in a valid cheque. - <|eot_id|> - <|start_header_id|>user<|end_header_id|> - Is this cheque fraud or valid? - <|eot_id|> - <|start_header_id|>assistant<|end_header_id|> - """ - return prompt - - -def get_llm_chain(model_id: str = "meta-llama/Meta-Llama-3-8B-Instruct"): - """ - Initializes and returns a language model chain for text generation using Hugging Face's transformers library. - - Parameters: - - model_id (str): The identifier for the pre-trained language model and tokenizer to load from Hugging Face. - - Returns: - - LLMChain: A configured chain consisting of a Hugging Face pipeline for text generation and prompt handling. - """ - # Load LLM and its corresponding tokenizer - tokenizer, model = load_llm(model_id) - - # Define special tokens that signal the end of a sequence - terminators = [ - tokenizer.eos_token_id, # End of string token - tokenizer.convert_tokens_to_ids("<|eot_id|>") # Converts an empty string to a token ID if needed - ] - - # Create a text generation pipeline using the loaded model and tokenizer - text_generation_pipeline = transformers.pipeline( - "text-generation", # Specify the task as text generation - model=model, # The pre-trained language model for text generation - tokenizer=tokenizer, # The tokenizer corresponding to the language model - use_cache=True, # Enable caching to speed up processing - do_sample=True, # Enable sampling to generate diverse text - temperature=0.7, # Control the randomness of the output - top_p=0.9, # Use nucleus sampling with this threshold - top_k=0, # Disable top-k sampling - max_new_tokens=500, # Limit the maximum number of new tokens generated - eos_token_id=terminators, # List of tokens to consider as end-of-sequence - ) - - # Create a Hugging Face pipeline for Mistral LLM using the text generation pipeline - pipeline_llm = HuggingFacePipeline( - pipeline=text_generation_pipeline, - ) - - # Create prompt from a predefined template - prompt = PromptTemplate( - input_variables=["context"], # Variables to be replaced in the template - template=get_prompt_template(), # Fetch the prompt template - ) - - # Create the LLM chain - llm_chain = prompt | pipeline_llm | StrOutputParser() - - return llm_chain - - -def format_context(parsed_text, evaluation): - """ - Formats the parsed text and evaluation details into a structured context string. - - This function takes parsed cheque details and the results of a fraud evaluation, combining them into a - single formatted string that provides a clear, readable summary of the cheque's details and the evaluation - outcome. - - Parameters: - - parsed_text (dict): A dictionary containing parsed text details, specifically amounts in words and figures. - - evaluation (tuple): A tuple containing the fraud evaluation result and relevant messages. - - Returns: - - str: A formatted string containing detailed context information. - """ - # Format the context into a multiline string with clear labels and values - context_formatted = f""" -Amount in words: {parsed_text['amt_in_words']} -Amount in numbers: {parsed_text['amt_in_figures']} -{evaluation[1]} -{evaluation[2]} -Verdict: {evaluation[0]} -""" - return context_formatted - - -def generate_response( - image_path, - processor, - model_parser, - model_fraud_detection, - llm_chain, - verbose: bool = False, - folder_name='data/images/' -): - """ - Processes an image to extract text, evaluates it for fraud, and generates a response using a language model chain. - - This function performs a series of operations including loading an image, parsing text from it, detecting - potential fraud in the text, formatting the context for further processing, and finally invoking a language - model chain to generate a response based on the context. - - Parameters: - - image_path (str): Path to the image file. - - processor: Preconfigured processor for handling image data. - - model_parser: Model used to parse text from the image. - - model_fraud_detection: Model used to detect fraud in the parsed text. - - llm_chain: Configured language model chain for generating text responses. - - verbose (bool, optional): If True, prints formatted context. Defaults to False. - - folder_name (str, optional): Folder path where the image is stored. Defaults to 'data/images/'. - - Returns: - - str: The text response generated by the language model. - """ - # Load image from the specified folder and path - image = load_image( - image_path, - folder_name, - ) - - # Parse text from the loaded image using the specified models - parsed_text = parse_text( - image, - processor, - model_parser, - ) - - # Evaluate the parsed text for potential fraud - evaluation = evaluate_cheque_fraud( - parsed_text, - model_fraud_detection, - ) - - # Format the context from parsed text and its evaluation for the language model - context_formatted = format_context( - parsed_text, - evaluation, - ) - if verbose: - print(f'๐Ÿ“– Context:\n{context_formatted.strip()}\n----------\n') - - # Invoke the language model chain with the formatted context and retrieve the output - model_output = llm_chain.invoke({ - "context": context_formatted, - }) - - # Process the model output to extract the relevant response part - return model_output.split( - '<|start_header_id|>assistant<|end_header_id|>' - )[-1].strip() - - -def format_response(response): - """ - Splits a response string into a verdict and a description, both trimmed of excess whitespace. - - Parameters: - - response (str): The response string containing a verdict and description separated by '|'. - - Returns: - - tuple: A tuple containing the verdict and description as separate strings. - """ - # Split the response into verdict and description at the first occurrence of '|' - verdict, description = response.split('|') - - # Return both components stripped of any leading/trailing whitespace - return verdict.strip(), description.strip() diff --git a/advanced_tutorials/fraud_cheque_detection/functions/utils.py b/advanced_tutorials/fraud_cheque_detection/functions/utils.py deleted file mode 100644 index 90b2f9f1..00000000 --- a/advanced_tutorials/fraud_cheque_detection/functions/utils.py +++ /dev/null @@ -1,79 +0,0 @@ -import matplotlib.pyplot as plt -from PIL import Image -import numpy as np -import requests -import zipfile -import os - - -def load_image(image_name, folder_name='data/images/'): - """ - Loads an image from a specified folder and converts it to RGB format. - - Parameters: - - image_name (str): The name of the image file to load. - - folder_name (str, optional): The directory path where image files are stored. Defaults to 'data/images/'. - - Returns: - - Image: An Image object in RGB format. - """ - # Open the image file and convert it to RGB to ensure consistent color format - image = Image.open(folder_name + image_name).convert('RGB') - return image - - -def show_image(image): - """ - Displays an image using matplotlib with specific figure sizing and no axis. - - Parameters: - - image: An Image object or an array-like object that can be visualized through matplotlib. - - Effects: - - This function displays the image on a 10x6 inch figure without axes. - """ - # Create a figure object with specified dimensions - fig = plt.figure(figsize=(10, 6)) - # Convert the image object to a numpy array for displaying - image_array = np.array(image) - # Display the image array - plt.imshow(image_array) - # Hide the axes of the plot - plt.axis('off') - # Show the plot - plt.show() - - -def download_and_extract_zip(url: str, extract_to: str = '.') -> None: - """ - Download a .zip file from a given URL and extract it into the specified directory. - - This function handles the downloading and extraction of a zip file from a specified URL. - It saves the zip file to the local directory, extracts it to a target directory, and handles - basic HTTP status checks to ensure the file is downloaded correctly. - - Args: - url (str): The URL of the .zip file to download. - extract_to (str): Directory to extract the files into, defaults to the current directory. - - Raises: - Exception: Raises an exception if the file could not be downloaded (non-200 status code). - """ - # Get the filename from the URL by splitting it and getting the last segment - filename = url.split('/')[-1] - - # Attempt to download the file with HTTP GET request - response = requests.get(url, stream=True) - if response.status_code == 200: - # Write the response content to a file in binary write mode - with open(filename, 'wb') as f: - f.write(response.content) - print(f"Downloaded {filename}") - - # Extract the .zip file using the ZipFile class - with zipfile.ZipFile(filename, 'r') as zip_ref: - zip_ref.extractall(extract_to) - print(f"Extracted {filename} to {extract_to}") - else: - # If the download fails, raise an exception with the status code - raise Exception(f"โŒ Failed to download the file. Status code: {response.status_code}") diff --git a/advanced_tutorials/fraud_cheque_detection/requirements.txt b/advanced_tutorials/fraud_cheque_detection/requirements.txt deleted file mode 100644 index f79912b0..00000000 --- a/advanced_tutorials/fraud_cheque_detection/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -transformers==4.39.3 -datasets==2.18.0 -sentencepiece==0.2.0 -nltk==3.8.1 -pytorch_lightning==2.2.1 -textblob==0.18.0.post0 -word2number==1.1 -bitsandbytes==0.42.0 -accelerate==0.27.2 -langchain==0.1.16 diff --git a/advanced_tutorials/hospital_wait_time/1_feature_pipeline.ipynb b/advanced_tutorials/hospital_wait_time/1_feature_pipeline.ipynb deleted file mode 100644 index ebf89dff..00000000 --- a/advanced_tutorials/hospital_wait_time/1_feature_pipeline.ipynb +++ /dev/null @@ -1,597 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "5615c2ae", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9fd527fe", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "\n", - "# Mute warnings\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "markdown", - "id": "97f5d51d", - "metadata": {}, - "source": [ - "## ๐Ÿ’ฝ Data Loading\n", - "\n", - "In this case, you are predicting the waiting time for a deceased donor kidney transplant involves estimating the duration a patient might need to wait from the time they are registered on the transplant list until a suitable donor kidney becomes available for transplantation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "819100e5", - "metadata": {}, - "outputs": [], - "source": [ - "patient_demographics_data = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/hospital_wait_time/patient_demographics.csv', \n", - " parse_dates=['date'],\n", - ")\n", - "patient_demographics_data.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9d827df9", - "metadata": {}, - "outputs": [], - "source": [ - "medical_background_data = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/hospital_wait_time/medical_background.csv', \n", - " parse_dates=['date'],\n", - ")\n", - "medical_background_data.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7f7973d2", - "metadata": {}, - "outputs": [], - "source": [ - "transplant_compatibility_data = pd.read_csv(\n", - " 'https://repo.hops.works/dev/davit/hospital_wait_time/transplant_compatibility.csv', \n", - " parse_dates=['date'],\n", - ")\n", - "transplant_compatibility_data.columns = transplant_compatibility_data.columns.str.lower()\n", - "transplant_compatibility_data.head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "c7a4c7c6", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿณ Data Preparation\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23284e32", - "metadata": {}, - "outputs": [], - "source": [ - "patient_demographics_data.isna().sum()[patient_demographics_data.isna().sum() > 0] / len(patient_demographics_data)*100" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5532bdbf", - "metadata": {}, - "outputs": [], - "source": [ - "medical_background_data.isna().sum()[medical_background_data.isna().sum() > 0] / len(medical_background_data)*100" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "31876981", - "metadata": {}, - "outputs": [], - "source": [ - "transplant_compatibility_data.isna().sum()[transplant_compatibility_data.isna().sum() > 0] / len(transplant_compatibility_data)*100" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "058cf4f1", - "metadata": {}, - "outputs": [], - "source": [ - "medical_background_data['dialysis_duration'] = medical_background_data['dialysis_duration'].fillna(1).replace(0, 1)\n", - "medical_background_data['dialysis_duration'] = np.log(medical_background_data['dialysis_duration'] + 1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a6a1faef", - "metadata": {}, - "outputs": [], - "source": [ - "def remove_outliers_iqr(dataframe, iqr_multiplier=1.5):\n", - " # Select numerical columns for outlier removal\n", - " numerical_columns = dataframe.select_dtypes(\n", - " include=['int64', 'float64']).columns\n", - "\n", - " # Loop through numerical columns to identify and remove outliers using IQR\n", - " for column in numerical_columns:\n", - " Q1 = dataframe[column].quantile(0.25)\n", - " Q3 = dataframe[column].quantile(0.75)\n", - " IQR = Q3 - Q1\n", - " lower_bound = Q1 - iqr_multiplier * IQR\n", - " upper_bound = Q3 + iqr_multiplier * IQR\n", - "\n", - " outliers = dataframe[(dataframe[column] < lower_bound) | (\n", - " dataframe[column] > upper_bound)]\n", - "\n", - " # Remove outliers\n", - " dataframe = dataframe[~dataframe.index.isin(outliers.index)]\n", - "\n", - " return dataframe" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7cacfd97", - "metadata": {}, - "outputs": [], - "source": [ - "patient_demographics_data_filtered = remove_outliers_iqr(patient_demographics_data, iqr_multiplier=1.5)\n", - "print(f'โ›ณ๏ธ Original shape: {patient_demographics_data.shape}')\n", - "print(f'โ›ณ๏ธ Cleared shape: {patient_demographics_data_filtered.shape}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "de3c3316", - "metadata": {}, - "outputs": [], - "source": [ - "medical_background_data_filtered = remove_outliers_iqr(medical_background_data, iqr_multiplier=1.5)\n", - "print(f'โ›ณ๏ธ Original shape: {medical_background_data.shape}')\n", - "print(f'โ›ณ๏ธ Cleared shape: {medical_background_data_filtered.shape}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "45b9c45b", - "metadata": {}, - "outputs": [], - "source": [ - "transplant_compatibility_data_filtered = remove_outliers_iqr(transplant_compatibility_data, iqr_multiplier=1.5)\n", - "print(f'โ›ณ๏ธ Original shape: {transplant_compatibility_data.shape}')\n", - "print(f'โ›ณ๏ธ Cleared shape: {transplant_compatibility_data_filtered.shape}')" - ] - }, - { - "cell_type": "markdown", - "id": "3f7ac6f7", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Great Expectations " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f99a5cff", - "metadata": {}, - "outputs": [], - "source": [ - "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee28579a", - "metadata": {}, - "outputs": [], - "source": [ - "# Convert your DataFrame to a Great Expectations DataFrame\n", - "ge_df_patient_demographics = ge.from_pandas(patient_demographics_data_filtered)\n", - "\n", - "# Retrieve the expectation suite associated with the ge DataFrame\n", - "expectation_suite_patient_demographics = ge_df_patient_demographics.get_expectation_suite()\n", - "\n", - "# Set the expectation suite name\n", - "expectation_suite_patient_demographics.expectation_suite_name = \"patient_registration_suite\"\n", - "\n", - "# Expectation: 'id' should always be unique and not null\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_unique\",\n", - " kwargs={\"column\": \"id\"},\n", - " )\n", - ")\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\": \"id\"},\n", - " )\n", - ")\n", - "\n", - "# Expectation: 'date' should be a valid date and not null\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_of_type\",\n", - " kwargs={\n", - " \"column\": \"date\",\n", - " \"type_\": \"datetime64[ns]\",\n", - " }\n", - " )\n", - ")\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\": \"date\"},\n", - " )\n", - ")\n", - "\n", - "# Expectation: 'age_at_list_registration' to be non-negative\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"age_at_list_registration\",\n", - " \"min_value\": 0,\n", - " \"max_value\": None,\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Expectation: 'gender' to be within expected values\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"gender\",\n", - " \"value_set\": [\"M\", \"F\"],\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Expectation: 'age_cat' to contain expected categories\n", - "expectation_suite_patient_demographics.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"age_cat\",\n", - " \"value_set\": [\"Over60\", \"From18to60\", \"Below18\"],\n", - " }\n", - " )\n", - ")\n", - "\n", - "print(\"โœ… Expectations defined and saved successfully.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "640bbf2a", - "metadata": {}, - "outputs": [], - "source": [ - "ge_df_medical_background = ge.from_pandas(medical_background_data_filtered)\n", - "\n", - "# Retrieve and set the expectation suite\n", - "expectation_suite_medical_background = ge_df_medical_background.get_expectation_suite()\n", - "expectation_suite_medical_background.expectation_suite_name = \"medical_background_suite\"\n", - "\n", - "# Expectations for 'id' and 'date'\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_unique\",\n", - " kwargs={\"column\": \"id\"},\n", - " )\n", - ")\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\": \"id\"},\n", - " )\n", - ")\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_of_type\",\n", - " kwargs={\n", - " \"column\": \"date\",\n", - " \"type_\": \"datetime64[ns]\",\n", - " }\n", - " )\n", - ")\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\": \"date\"},\n", - " )\n", - ")\n", - "\n", - "# Expectation for 'dialysis_duration'\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"dialysis_duration\",\n", - " \"min_value\": 0,\n", - " \"max_value\": None,\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Expectation for 'blood_gp'\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"blood_gp\",\n", - " \"value_set\": [\"A\", \"B\", \"AB\", \"O\"],\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Gestation and Prior Transplant Expectations\n", - "for column in [\"gestation\", \"prior_transplant\"]:\n", - " expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": column,\n", - " \"value_set\": [\"YES\", \"NO\"],\n", - " }\n", - " )\n", - " )\n", - "\n", - "# Expectation for 'number_prior_transplant' - check alignment with 'prior_transplant'\n", - "expectation_suite_medical_background.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"number_prior_transplant\",\n", - " \"min_value\": 0,\n", - " \"max_value\": None,\n", - " }\n", - " )\n", - ")\n", - "\n", - "print(\"โœ… Expectations defined and saved successfully.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6ca9a557", - "metadata": {}, - "outputs": [], - "source": [ - "ge_df_transplant_compatibility = ge.from_pandas(transplant_compatibility_data_filtered)\n", - "\n", - "# Retrieve and set the expectation suite\n", - "expectation_suite_transplant_compatibility = ge_df_transplant_compatibility.get_expectation_suite()\n", - "expectation_suite_transplant_compatibility.expectation_suite_name = \"transplant_compatibility_and_outcome_suite\"\n", - "\n", - "# Expectations for 'id' and 'date'\n", - "expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_unique\",\n", - " kwargs={\"column\": \"id\"},\n", - " )\n", - ")\n", - "expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\": \"id\"},\n", - " )\n", - ")\n", - "expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_of_type\",\n", - " kwargs={\n", - " \"column\": \"date\",\n", - " \"type_\": \"datetime64[ns]\",\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Expectation for 'cPRA' to be between 0 and 100\n", - "expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"cpra\",\n", - " \"min_value\": 0,\n", - " \"max_value\": 100,\n", - " }\n", - " )\n", - ")\n", - "\n", - "# HLA Marker Expectations (checking they are non-negative integers)\n", - "for hla_marker in [\"hla_a1\", \"hla_a2\", \"hla_b1\", \"hla_b2\", \"hla_dr1\", \"hla_dr2\"]:\n", - " expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_of_type\",\n", - " kwargs={\n", - " \"column\": hla_marker,\n", - " \"type_\": \"int\",\n", - " }\n", - " )\n", - " )\n", - "\n", - "# Expectation for 'if_transplanted'\n", - "expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"if_transplanted\",\n", - " \"value_set\": [\"YES\", \"NO\"],\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Expectation for 'duration' to be non-negative\n", - "expectation_suite_transplant_compatibility.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"duration\",\n", - " \"min_value\": 0,\n", - " \"max_value\": None,\n", - " }\n", - " )\n", - ")\n", - "\n", - "print(\"โœ… Expectations defined and saved successfully.\")" - ] - }, - { - "cell_type": "markdown", - "id": "ed8fa713", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82777378", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "ff82304a", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Creating Feature Groups \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d21bff59", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'patient_info' feature group\n", - "patient_info_fg = fs.get_or_create_feature_group(\n", - " name=\"patient_info\",\n", - " version=1,\n", - " description=\"Demographic Features\",\n", - " primary_key=[\"id\"],\n", - " event_time=\"date\",\n", - " expectation_suite=expectation_suite_patient_demographics,\n", - ")\n", - "\n", - "patient_info_fg.insert(patient_demographics_data_filtered)\n", - "print('โœ… Done')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a524f361", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'medical_info' feature group\n", - "medical_info_fg = fs.get_or_create_feature_group(\n", - " name=\"medical_info\",\n", - " version=1,\n", - " description=\"Medical background features\",\n", - " primary_key=[\"id\"],\n", - " event_time=\"date\",\n", - " expectation_suite=expectation_suite_medical_background,\n", - ")\n", - "\n", - "medical_info_fg.insert(medical_background_data_filtered)\n", - "print('โœ… Done')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f476f24b", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'transplant_compatibility' feature group\n", - "transplant_compatibility_fg = fs.get_or_create_feature_group(\n", - " name=\"transplant_compatibility\",\n", - " version=1,\n", - " description=\"Transplant compatibility features\",\n", - " primary_key=[\"id\"],\n", - " event_time=\"date\",\n", - " expectation_suite=expectation_suite_transplant_compatibility,\n", - ")\n", - "\n", - "transplant_compatibility_fg.insert(transplant_compatibility_data_filtered)\n", - "print('โœ… Done')" - ] - }, - { - "cell_type": "markdown", - "id": "3e15c005", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.1.-1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/hospital_wait_time/2_training_pipeline.ipynb b/advanced_tutorials/hospital_wait_time/2_training_pipeline.ipynb deleted file mode 100644 index e8583a6a..00000000 --- a/advanced_tutorials/hospital_wait_time/2_training_pipeline.ipynb +++ /dev/null @@ -1,537 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "b6699fe1", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a39a3d61", - "metadata": {}, - "outputs": [], - "source": [ - "import joblib\n", - "import os\n", - "import datetime\n", - "import pandas as pd\n", - "import numpy as np\n", - "from matplotlib import pyplot\n", - "\n", - "from sklearn.metrics import mean_absolute_error\n", - "from prophet import Prophet\n", - "from prophet.serialize import model_to_json\n", - "\n", - "# Mute warnings\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "markdown", - "id": "6f80e358", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f88a3faa", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "d65e85bf", - "metadata": {}, - "source": [ - "### ๐Ÿ”ช Feature Selection \n", - "\n", - "You will start by selecting all the features you want to include for model training/inference." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a11ec70f", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'patient_info' feature group\n", - "patient_info_fg = fs.get_feature_group(\n", - " name=\"patient_info\",\n", - " version=1,\n", - ")\n", - "\n", - "# Retrieve the 'medical_info' feature group\n", - "medical_info_fg = fs.get_feature_group(\n", - " name=\"medical_info\",\n", - " version=1,\n", - ")\n", - "\n", - "# Retrieve the 'transplant_compatibility' feature group\n", - "transplant_compatibility_fg = fs.get_feature_group(\n", - " name=\"transplant_compatibility\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17ba77ed", - "metadata": {}, - "outputs": [], - "source": [ - "# Select features for training data.\n", - "selected_features = patient_info_fg.select_all([\"id\", \"date\"])\\\n", - " .join(medical_info_fg.select_except([\"id\", \"date\"]))\\\n", - " .join(transplant_compatibility_fg.select_except([\"id\", \"date\"])\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "495cbb5f", - "metadata": {}, - "outputs": [], - "source": [ - "# Uncomment this if you would like to view your selected features\n", - "selected_features.show(5)" - ] - }, - { - "cell_type": "markdown", - "id": "d5902c9e", - "metadata": {}, - "source": [ - "## โš™๏ธ Transformation Functions \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ba4ae19c", - "metadata": {}, - "outputs": [], - "source": [ - "[f.name for f in fs.get_transformation_functions()]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6c32555b", - "metadata": {}, - "outputs": [], - "source": [ - "label_encoder = fs.get_transformation_function(name=\"label_encoder\")\n", - "\n", - "standard_scaler = fs.get_transformation_function(name=\"standard_scaler\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b4580c73", - "metadata": {}, - "outputs": [], - "source": [ - "features_category = ['gender', 'age_cat', 'blood_gp', 'underlying_disease', 'gestation', 'prior_transplant', 'if_transplanted']\n", - "\n", - "transformation_functions_category = {\n", - " feature_name: label_encoder\n", - " for feature_name\n", - " in features_category\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "be5eb3c5", - "metadata": {}, - "outputs": [], - "source": [ - "features_numerical = [\n", - " 'age_at_list_registration', 'dialysis_duration', 'number_prior_transplant', 'cpra', 'hla_a1', 'hla_a2', 'hla_b1', 'hla_b2', 'hla_dr1', 'hla_dr2',\n", - "]\n", - "\n", - "transformation_functions_numerical = {\n", - " feature_name: standard_scaler\n", - " for feature_name\n", - " in features_numerical\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1a7e76ee", - "metadata": {}, - "outputs": [], - "source": [ - "# Join transformation_functions_category and transformation_functions_numerical dictionaries into one\n", - "transformation_functions = transformation_functions_category | transformation_functions_numerical" - ] - }, - { - "cell_type": "markdown", - "id": "91636dc3", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "576617c8", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'medical_features' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name='medical_features',\n", - " version=1,\n", - " query=selected_features,\n", - " labels=[\"duration\"],\n", - " transformation_functions=transformation_functions,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "a3bb3b8e", - "metadata": {}, - "source": [ - "## ๐Ÿ‹๏ธ Training Dataset Creation\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7851e335", - "metadata": {}, - "outputs": [], - "source": [ - "# Split date with percentage \n", - "df = patient_info_fg.read()\n", - "\n", - "def split_dfs(df): \n", - " df = df.sort_values(by='date') \n", - " trainvals = df[:int(len(df)*0.8)] \n", - " testvals = df[int(len(df)*0.8):] \n", - " return {\n", - " 'train_start': min(trainvals.date).date(), \n", - " 'train_end': max(trainvals.date).date(), \n", - " 'test_start': min(testvals.date).date(), \n", - " 'test_end': max(testvals.date).date(),\n", - " }\n", - "\n", - "split_dict = split_dfs(df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c7a8f6f1", - "metadata": {}, - "outputs": [], - "source": [ - "split_dict" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "69f4373c", - "metadata": {}, - "outputs": [], - "source": [ - "X_train, X_test, y_train, y_test = feature_view.train_test_split(\n", - " train_start=split_dict['train_start'],\n", - " train_end=split_dict['train_end'],\n", - " test_start=split_dict['test_start'],\n", - " test_end=split_dict['test_end'], \n", - " event_time=True,\n", - ")\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2facefa1", - "metadata": {}, - "outputs": [], - "source": [ - "y_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d510db36", - "metadata": {}, - "outputs": [], - "source": [ - "# Sort the X_train DataFrame based on the \"datetime\" column in ascending order\n", - "X_train = X_train.sort_values(\"date\")\n", - "# Reindex the y_train Series to match the order of rows in the sorted X_train DataFrame\n", - "y_train = y_train.reindex(X_train.index)\n", - "\n", - "# Sort the X_test DataFrame based on the \"datetime\" column in ascending order\n", - "X_test = X_test.sort_values(\"date\")\n", - "# Reindex the y_test Series to match the order of rows in the sorted X_test DataFrame\n", - "y_test = y_test.reindex(X_test.index)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a7e10eb2", - "metadata": {}, - "outputs": [], - "source": [ - "X_train['y'] = y_train\n", - "X_train['ds'] = X_train.date\n", - "X_train['ds'] = pd.to_datetime(X_train.ds)\n", - "X_train['ds'] = X_train.ds.map(lambda x: x.replace(tzinfo=None))\n", - "X_train.drop(columns=[\"date\"], axis=1, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dfbb7b31", - "metadata": {}, - "outputs": [], - "source": [ - "X_test['ds'] = X_test.date\n", - "X_test['ds'] = pd.to_datetime(X_test.ds)\n", - "X_test['ds'] = X_test.ds.map(lambda x: x.replace(tzinfo=None))\n", - "X_test.drop(columns=[\"date\"], axis=1, inplace=True)" - ] - }, - { - "cell_type": "markdown", - "id": "3847431e", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Modeling\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d639b394", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize the Prophet model with the appropriate seasonalities\n", - "model = Prophet(\n", - " daily_seasonality=False,\n", - " weekly_seasonality=True,\n", - " yearly_seasonality=True,\n", - ")\n", - "\n", - "# Add monthly seasonality with a period of 30.5 days (average length of a month)\n", - "model.add_seasonality(\n", - " name='monthly', \n", - " period=30.5, \n", - " fourier_order=5,\n", - " mode='additive',\n", - ")\n", - "\n", - "# Add the additional regressors\n", - "additional_regressors = [\n", - " 'age_at_list_registration','cpra', 'hla_a1', 'hla_a2', 'hla_b1', 'hla_b2', 'hla_dr1', 'hla_dr2',\n", - "]\n", - "\n", - "for regressor in additional_regressors:\n", - " model.add_regressor(regressor)\n", - "\n", - "# Fit the model\n", - "model.fit(X_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ce527621", - "metadata": {}, - "outputs": [], - "source": [ - "forecast = model.predict(X_test)\n", - "\n", - "# Summarize the forecast\n", - "print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head())\n", - "\n", - "# Plot the forecast\n", - "fig = model.plot(forecast)\n", - "\n", - "pyplot.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8e4217c0", - "metadata": {}, - "outputs": [], - "source": [ - "model.plot_components(forecast)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d8701339", - "metadata": {}, - "outputs": [], - "source": [ - "# calculate MAE between expected and predicted values for december\n", - "y_pred = forecast['yhat']\n", - "mae = mean_absolute_error(y_test, y_pred)\n", - "print('MAE: %.3f' % mae)\n", - "# plot expected vs actual\n", - "\n", - "metrics = {\n", - " \"mae\": round(mae,2)\n", - "}\n", - "metrics" - ] - }, - { - "cell_type": "markdown", - "id": "ea6cfd10", - "metadata": {}, - "source": [ - "### โš™๏ธ Model Schema\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0bf4bb02", - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "# Define the input schema using the values of X_test\n", - "input_schema = Schema(X_test.values)\n", - "\n", - "# Define the output schema using y_train\n", - "output_schema = Schema(y_train)\n", - "\n", - "# Create a ModelSchema object specifying the input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", - "\n", - "# Convert the model schema to a dictionary for further inspection or serialization\n", - "model_schema.to_dict()" - ] - }, - { - "cell_type": "markdown", - "id": "93a92ddd", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Register model\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1dbc8bae", - "metadata": {}, - "outputs": [], - "source": [ - "# Specify the directory where the model will be saved\n", - "model_dir = \"forecast_model\"\n", - "\n", - "# Check if the directory exists, and create it if it doesn't\n", - "if not os.path.isdir(model_dir):\n", - " os.mkdir(model_dir)\n", - "\n", - "# Save the trained model using joblib\n", - "with open(model_dir + '/serialized_model.json', 'w') as fout:\n", - " fout.write(model_to_json(model)) # Save model\n", - " \n", - "# Save the confusion matrix plot as an image file in the 'iris_model' directory\n", - "fig.savefig(model_dir + \"/forecast.png\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "707022f2", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the model registry\n", - "mr = project.get_model_registry()\n", - "\n", - "# Create a new model in the model registry\n", - "forecast_model = mr.python.create_model(\n", - " name=\"waiting_time_forecast_model\", # Name for the model\n", - " metrics=metrics, # Metrics used for evaluation\n", - " model_schema=model_schema, # Schema defining the model's input and output\n", - " input_example=X_test.sample(), # Example input data for reference\n", - " description=\"Waiting time for a deceased donor kidney transplant forecasting model\", # Description of the model\n", - ")\n", - "\n", - "# Save the model to the specified directory\n", - "forecast_model.save(model_dir)" - ] - }, - { - "cell_type": "markdown", - "id": "0db0bf98", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/hospital_wait_time/3_inference_pipeline.ipynb b/advanced_tutorials/hospital_wait_time/3_inference_pipeline.ipynb deleted file mode 100644 index af472ff3..00000000 --- a/advanced_tutorials/hospital_wait_time/3_inference_pipeline.ipynb +++ /dev/null @@ -1,229 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "72f42eba", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8158dcec", - "metadata": {}, - "outputs": [], - "source": [ - "import joblib\n", - "import pandas as pd\n", - "from datetime import datetime\n", - "from prophet.serialize import model_from_json\n", - "from matplotlib import pyplot\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "id": "faa87ecf", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b4330a4a", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "dff5ebe0", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Retrieval\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd3f8c1c", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'medical_features' feature view\n", - "feature_view = fs.get_feature_view(\n", - " name='medical_features',\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "21b6f351", - "metadata": {}, - "source": [ - "## ๐Ÿ—„ Model Registry\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ecad81cc", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the model registry\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "markdown", - "id": "515fe05a", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Fetch and test the model\n", - "\n", - "Finally you can start making predictions with your model!\n", - "\n", - "Retrieve your model from Hopsworks model registry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fbb5cdc7", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the model from the model registry\n", - "retrieved_model = mr.get_model(\n", - " name=\"waiting_time_forecast_model\",\n", - " version=1,\n", - ")\n", - "\n", - "# Download the saved model files to a local directory\n", - "saved_model_dir = retrieved_model.download()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9dfaba98", - "metadata": {}, - "outputs": [], - "source": [ - "with open(saved_model_dir + '/serialized_model.json', 'r') as fin:\n", - " model = model_from_json(fin.read()) # Load model" - ] - }, - { - "cell_type": "markdown", - "id": "2e5b40c5", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Batch Prediction \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a5e49a6e", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize batch scoring\n", - "feature_view.init_batch_scoring(1)\n", - "\n", - "# Get the batch data\n", - "batch_data = feature_view.get_batch_data(\n", - " start_time=datetime(2015, 10, 19), \n", - " end_time=datetime(2017, 12, 29), \n", - " event_time=True,\n", - ")\n", - "\n", - "batch_data['ds'] = batch_data.date\n", - "batch_data['ds'] = pd.to_datetime(batch_data.ds)\n", - "batch_data['ds'] = batch_data.ds.map(lambda x: x.replace(tzinfo=None))\n", - "batch_data.drop(columns=[\"date\"], axis=1, inplace=True)\n", - "batch_data = batch_data.sort_values(\"ds\")\n", - "\n", - "# Display the first 3 rows\n", - "batch_data.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8ff70533", - "metadata": {}, - "outputs": [], - "source": [ - "# use the model to make a forecast\n", - "forecast = model.predict(batch_data)\n", - "\n", - "# summarize the forecast\n", - "print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6821c72", - "metadata": {}, - "outputs": [], - "source": [ - "model.plot(forecast)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4c6c4a04", - "metadata": {}, - "outputs": [], - "source": [ - "model.plot_components(forecast)" - ] - }, - { - "cell_type": "markdown", - "id": "583f95e2", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/hospital_wait_time/requirements.txt b/advanced_tutorials/hospital_wait_time/requirements.txt deleted file mode 100644 index 3f5db197..00000000 --- a/advanced_tutorials/hospital_wait_time/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -prophet==1.1.5 diff --git a/advanced_tutorials/llm_pdfs/1_feature_backfill.ipynb b/advanced_tutorials/llm_pdfs/1_feature_backfill.ipynb deleted file mode 100644 index 652fec9e..00000000 --- a/advanced_tutorials/llm_pdfs/1_feature_backfill.ipynb +++ /dev/null @@ -1,285 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "82622ee3", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ade7fe1f", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install -r requirements.txt -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7ab771e2", - "metadata": {}, - "outputs": [], - "source": [ - "import PyPDF2\n", - "import pandas as pd\n", - "from sentence_transformers import SentenceTransformer\n", - "\n", - "from functions.pdf_preprocess import (\n", - " download_files_to_folder, \n", - " process_pdf_file,\n", - ")\n", - "from functions.text_preprocess import process_text_data\n", - "import config\n", - "\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "id": "7e8f1796", - "metadata": {}, - "source": [ - "## ๐Ÿ’พ Download files from Google Drive " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea8c756e", - "metadata": {}, - "outputs": [], - "source": [ - "# Call the function to download files\n", - "new_files = download_files_to_folder(\n", - " config.FOLDER_ID, \n", - " config.DOWNLOAD_PATH,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "f783e27e", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Text Extraction " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0b3b6715", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize an empty list\n", - "document_text = []\n", - "\n", - "for file in new_files:\n", - " process_pdf_file(\n", - " file, \n", - " document_text, \n", - " config.DOWNLOAD_PATH,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "348b723e", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a DataFrame\n", - "columns = [\"file_name\", \"file_link\", \"page_number\", \"text\"]\n", - "df_text = pd.DataFrame(\n", - " data=document_text,\n", - " columns=columns,\n", - ")\n", - "# Display the DataFrame\n", - "df_text" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "62a70763", - "metadata": {}, - "outputs": [], - "source": [ - "# Process text data using the process_text_data function\n", - "df_text_processed = process_text_data(df_text)\n", - "\n", - "# Display the processed DataFrame\n", - "df_text_processed" - ] - }, - { - "cell_type": "markdown", - "id": "10f9ea36", - "metadata": {}, - "source": [ - "## โš™๏ธ Embeddings Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9805c689", - "metadata": {}, - "outputs": [], - "source": [ - "# Load the SentenceTransformer model\n", - "model = SentenceTransformer(\n", - " config.MODEL_SENTENCE_TRANSFORMER,\n", - ").to(config.DEVICE)\n", - "model.device" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c1b7a89a", - "metadata": {}, - "outputs": [], - "source": [ - "# Generate embeddings for the 'text' column using the SentenceTransformer model\n", - "df_text_processed['embeddings'] = pd.Series(\n", - " model.encode(df_text_processed['text']).tolist(),\n", - ")\n", - "\n", - "# Create a new column 'context_id' with values ranging from 0 to the number of rows in the DataFrame\n", - "df_text_processed['context_id'] = [*range(df_text_processed.shape[0])]\n", - "\n", - "# Display the resulting DataFrame with the added 'embeddings' and 'context_id' columns\n", - "df_text_processed" - ] - }, - { - "cell_type": "markdown", - "id": "d2bced31", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7caf764d", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "markdown", - "id": "0ed9ac69", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f5e486b", - "metadata": {}, - "outputs": [], - "source": [ - "from hsfs import embedding\n", - "\n", - "# Create the Embedding Index\n", - "emb = embedding.EmbeddingIndex()\n", - "\n", - "emb.add_embedding(\n", - " \"embeddings\", \n", - " model.get_sentence_embedding_dimension(),\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e32b548", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'documents_fg' feature group\n", - "documents_fg = fs.get_or_create_feature_group(\n", - " name=\"documents_fg\",\n", - " embedding_index=emb,\n", - " primary_key=['context_id'],\n", - " version=1,\n", - " description='Information from various files, presenting details like file names, source links, and structured text excerpts from different pages and paragraphs.',\n", - " online_enabled=True,\n", - ")\n", - "\n", - "documents_fg.insert(df_text_processed)" - ] - }, - { - "cell_type": "markdown", - "id": "d39a9ed6", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature View Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7a7bc2f0", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'documents' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name=\"documents\",\n", - " version=1,\n", - " description='Chunked context for RAG system',\n", - " query=documents_fg.select([\"file_name\", \"file_link\", \"page_number\", \"paragraph\", \"text\"]),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "708b9a5f", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/llm_pdfs/1a_feature_pipeline.py b/advanced_tutorials/llm_pdfs/1a_feature_pipeline.py deleted file mode 100644 index 84c90c8d..00000000 --- a/advanced_tutorials/llm_pdfs/1a_feature_pipeline.py +++ /dev/null @@ -1,69 +0,0 @@ -import PyPDF2 -import pandas as pd -from sentence_transformers import SentenceTransformer - -from functions.pdf_preprocess import download_files_to_folder, process_pdf_file -from functions.text_preprocess import process_text_data -import config - -import hopsworks - -def pipeline(): - # Call the function to download files - new_files = download_files_to_folder( - config.FOLDER_ID, - config.DOWNLOAD_PATH, - ) - - if len(new_files) == 0: - print('โ›ณ๏ธ Your folder is up to date!') - return - - # Initialize an empty list - document_text = [] - - for file in new_files: - process_pdf_file( - file, - document_text, - config.DOWNLOAD_PATH, - ) - - # Create a DataFrame - columns = ["file_name", "page_number", "text"] - df_text = pd.DataFrame( - data=document_text, - columns=columns, - ) - - # Process text data using the process_text_data function - df_text_processed = process_text_data(df_text) - - # Retrieve a SentenceTransformer - model = SentenceTransformer( - config.MODEL_SENTENCE_TRANSFORMER, - ).to(config.DEVICE) - - # Generate embeddings for the 'text' column using the SentenceTransformer model - df_text_processed['embeddings'] = pd.Series( - model.encode(df_text_processed['text']).tolist(), - ) - - # Create a new column 'context_id' with values ranging from 0 to the number of rows in the DataFrame - df_text_processed['context_id'] = [*range(df_text_processed.shape[0])] - - - project = hopsworks.login() - - fs = project.get_feature_store() - - documents_fg = fs.get_feature_group( - name="documents_fg", - version=1, - ) - - documents_fg.insert(df_text_processed) - return - -if __name__ == '__main__': - pipeline() diff --git a/advanced_tutorials/llm_pdfs/1b_dataset_generation.ipynb b/advanced_tutorials/llm_pdfs/1b_dataset_generation.ipynb deleted file mode 100644 index d2fd826e..00000000 --- a/advanced_tutorials/llm_pdfs/1b_dataset_generation.ipynb +++ /dev/null @@ -1,290 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0279e128", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e8efd4e5", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "from openai import OpenAI\n", - "import getpass\n", - "import json\n", - "import pandas as pd\n", - "import json_repair\n", - "from tqdm import tqdm" - ] - }, - { - "cell_type": "markdown", - "id": "4d389343", - "metadata": {}, - "source": [ - "## โš™๏ธ Settings " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "270b84fd", - "metadata": {}, - "outputs": [], - "source": [ - "os.environ[\"OPENAI_API_KEY\"] = os.getenv(\"OPENAI_API_KEY\") or getpass.getpass('๐Ÿ”‘ Enter your OpenAI API key: ')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d58f52ef", - "metadata": {}, - "outputs": [], - "source": [ - "client = OpenAI(\n", - " api_key=os.environ[\"OPENAI_API_KEY\"],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "c16fbf15", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3a8916cf", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32f2bbae", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'documents' feature view\n", - "feature_view = fs.get_feature_view(\n", - " name='documents',\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f60460ab", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize batch scoring for feature view\n", - "feature_view.init_batch_scoring()\n", - "\n", - "# Get batch data from the feature view\n", - "data = feature_view.get_batch_data()\n", - "\n", - "# Filter data to include only rows where the 'text' column length is greater than 2500\n", - "data_filtered = data[data.text.str.len() > 2500]\n", - "\n", - "# Display the filtered data\n", - "data_filtered" - ] - }, - { - "cell_type": "markdown", - "id": "d3d2fcb2", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Dataset Generation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "80d80597", - "metadata": {}, - "outputs": [], - "source": [ - "def generate_questions(context):\n", - "\n", - " instruction = \"\"\"\n", - " The given text is the result of the text extraction from the PDF files. \n", - " Generate 3 meaningful questions on the text and the respective answers.\n", - " Reply strictly in the JSON format:\n", - " {\n", - " \"questions\": [\"question1\", \"question2\", \"question3\"],\n", - " \"answers\": [\"answer1\", \"answer2\", \"answer3\"]\n", - " }\n", - "\n", - " Ensure that the lists of questions and answers are complete and properly formatted. \n", - " DO NOT include any additional information or characters outside the specified JSON format. \n", - " The response must consist only of the requested JSON structure. \n", - " If the generated content does not meet the specified format, please make the necessary adjustments to ensure compliance.\"\"\"\n", - "\n", - " prompt = f\"\\nContext: {context}\\nQuestion: {instruction}\"\n", - "\n", - " # Create a chatbot\n", - " completion = client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", - " # Pre-define conversation messages for the possible roles \n", - " messages=[\n", - " {\"role\": \"user\", \"content\": prompt},\n", - " ]\n", - " )\n", - " response = json_repair.loads(completion.choices[0].message.content)\n", - " \n", - " response['context'] = context\n", - " \n", - " return response\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8d3642f6", - "metadata": {}, - "outputs": [], - "source": [ - "# Generate question-answer pairs\n", - "generated_questions = [\n", - " generate_questions(text)\n", - " for text \n", - " in tqdm(data_filtered['text'])\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d1f1cc46", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a DataFrame from the generated_questions\n", - "df = pd.DataFrame(generated_questions)\n", - "\n", - "# Display the first few rows of the DataFrame\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7f906442", - "metadata": {}, - "outputs": [], - "source": [ - "# Explode the DataFrame to expand lists in specified columns ('questions' and 'answers')\n", - "df_expanded = df.explode(['questions', 'answers']).reset_index(drop=True)\n", - "\n", - "# Reset the index to create a new default integer index\n", - "df_expanded.reset_index(inplace=True)\n", - "\n", - "# Rename the 'index' column to 'record_id' for clarity\n", - "df_expanded.rename(columns={'index': 'record_id'}, inplace=True)\n", - "\n", - "# Display the expanded DataFrame\n", - "df_expanded" - ] - }, - { - "cell_type": "markdown", - "id": "4fe81b9f", - "metadata": {}, - "source": [ - "## ๐Ÿช„ CQA Feature Group Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a84b387", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'cqa_fg' feature group\n", - "cqa_fg = fs.get_or_create_feature_group(\n", - " name=\"cqa_fg\",\n", - " version=1,\n", - " description='Context-Question-Response Data',\n", - " primary_key=['record_id'],\n", - ")\n", - "\n", - "cqa_fg.insert(df_expanded)" - ] - }, - { - "cell_type": "markdown", - "id": "2ed251e4", - "metadata": {}, - "source": [ - "## ๐Ÿช„ CQA Feature View Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ed7146f7", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'cqa' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name=\"cqa\",\n", - " version=1,\n", - " query=cqa_fg.select([\"context\", \"questions\", \"responses\"]),\n", - " description='Context-Question-Response pairs for model fine-tuning',\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "02f6f11a", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/llm_pdfs/2_training_pipeline.ipynb b/advanced_tutorials/llm_pdfs/2_training_pipeline.ipynb deleted file mode 100644 index 4177c447..00000000 --- a/advanced_tutorials/llm_pdfs/2_training_pipeline.ipynb +++ /dev/null @@ -1,376 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "cc6015d0", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9ba30ecb", - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "from datasets import Dataset\n", - "from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig\n", - "from peft import LoraConfig\n", - "from transformers import TrainingArguments\n", - "from trl import SFTTrainer\n", - "\n", - "from functions.prompt_engineering import generate_prompt\n", - "import config" - ] - }, - { - "cell_type": "markdown", - "id": "1270e5f8", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e517b1cd", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store() \n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "markdown", - "id": "86043802", - "metadata": {}, - "source": [ - "## ๐Ÿช Feature View Retrieval " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4007db72", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'cqa' feature view\n", - "feature_view = fs.get_feature_view(\n", - " name='cqa',\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "83b00e9e", - "metadata": {}, - "outputs": [], - "source": [ - "# Initialize batch scoring for the feature view\n", - "feature_view.init_batch_scoring()\n", - "\n", - "# Get batch data from the feature view\n", - "data = feature_view.get_batch_data()\n", - "\n", - "# Display the first three rows of the batch data\n", - "data.head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "64dab547", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Dataset Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "594f4e1a", - "metadata": {}, - "outputs": [], - "source": [ - "# Generate prompts for each record in the DataFrame using context, questions, and responses\n", - "prompts = data.apply(\n", - " lambda record: generate_prompt(record['context'], record['questions']) + f'\\n### RESPONSE:\\n{record[\"responses\"]}', \n", - " axis=1,\n", - ").tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6bd1e493", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a dataset from a dictionary with a single column named \"text\" containing prompts\n", - "dataset = Dataset.from_dict({\n", - " \"text\": prompts,\n", - "})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0756b8e7", - "metadata": {}, - "outputs": [], - "source": [ - "print(dataset[10]['text'])" - ] - }, - { - "cell_type": "markdown", - "id": "bc161e58", - "metadata": {}, - "source": [ - "## โฌ‡๏ธ Model Loading " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "62477b0e", - "metadata": {}, - "outputs": [], - "source": [ - "# Load the tokenizer for Mistral-7B-Instruct model\n", - "tokenizer = AutoTokenizer.from_pretrained(\n", - " config.MODEL_ID,\n", - ")\n", - "\n", - "# Set the pad token to the unknown token to handle padding\n", - "tokenizer.pad_token = tokenizer.unk_token\n", - "\n", - "# Set the padding side to \"right\" to prevent warnings during tokenization\n", - "tokenizer.padding_side = \"right\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0153d320", - "metadata": {}, - "outputs": [], - "source": [ - "# BitsAndBytesConfig int-4 config\n", - "bnb_config = BitsAndBytesConfig(\n", - " load_in_4bit=True, \n", - " bnb_4bit_use_double_quant=True, \n", - " bnb_4bit_quant_type=\"nf4\", \n", - " bnb_4bit_compute_dtype=torch.bfloat16,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f8a4d9ee", - "metadata": {}, - "outputs": [], - "source": [ - "# Load the Mistral-7B-Instruct model with quantization configuration\n", - "model = AutoModelForCausalLM.from_pretrained(\n", - " config.MODEL_ID,\n", - " device_map=\"auto\",\n", - " quantization_config=bnb_config,\n", - ")\n", - "\n", - "# Configure the pad token ID in the model to match the tokenizer's pad token ID\n", - "model.config.pad_token_id = tokenizer.pad_token_id" - ] - }, - { - "cell_type": "markdown", - "id": "93c7ba90", - "metadata": {}, - "source": [ - "## โš™๏ธ Configuration " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18d24668", - "metadata": {}, - "outputs": [], - "source": [ - "peft_config = LoraConfig(\n", - " lora_alpha=64,\n", - " lora_dropout=0.1,\n", - " r=32,\n", - " bias=\"none\",\n", - " task_type=\"CAUSAL_LM\", \n", - " target_modules=[\n", - " \"q_proj\",\n", - " \"k_proj\",\n", - " \"v_proj\",\n", - " \"o_proj\",\n", - " \"gate_proj\",\n", - " \"up_proj\",\n", - " \"down_proj\",\n", - " \"lm_head\",\n", - " ],\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ebade183", - "metadata": {}, - "outputs": [], - "source": [ - "training_arguments = TrainingArguments(\n", - " output_dir=\"mistral7b_finetuned\", # directory to save and repository id\n", - " num_train_epochs=3, # number of training epochs\n", - " per_device_train_batch_size=3, # batch size per device during training\n", - " gradient_accumulation_steps=2, # number of steps before performing a backward/update pass\n", - " gradient_checkpointing=True, # use gradient checkpointing to save memory\n", - " optim=\"adamw_torch_fused\", # use fused adamw optimizer\n", - " logging_steps=10, # log every 10 steps\n", - " save_strategy=\"epoch\", # save checkpoint every epoch\n", - " learning_rate=2e-4, # learning rate, based on QLoRA paper\n", - " bf16=True, # use bfloat16 precision\n", - " tf32=True, # use tf32 precision\n", - " max_grad_norm=0.3, # max gradient norm based on QLoRA paper\n", - " warmup_ratio=0.03, # warmup ratio based on QLoRA paper\n", - " lr_scheduler_type=\"constant\", # use constant learning rate scheduler\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "36e79a43", - "metadata": {}, - "source": [ - "## ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ Training" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13af595e", - "metadata": {}, - "outputs": [], - "source": [ - "# Create the Supervised Fine-tuning Trainer\n", - "trainer = SFTTrainer(\n", - " model=model,\n", - " train_dataset=dataset,\n", - " peft_config=peft_config,\n", - " max_seq_length=4096,\n", - " tokenizer=tokenizer,\n", - " args=training_arguments,\n", - " dataset_text_field='text',\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e2c9a416", - "metadata": {}, - "outputs": [], - "source": [ - "# Train the model\n", - "trainer.train()" - ] - }, - { - "cell_type": "markdown", - "id": "85e840c2", - "metadata": {}, - "source": [ - "## ๐Ÿ’พ Saving Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "75940ca2", - "metadata": {}, - "outputs": [], - "source": [ - "# Save the trained model\n", - "trainer.save_model()" - ] - }, - { - "cell_type": "markdown", - "id": "bfaae161", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Model Registry" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2ff14642", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a Python model in the model registry\n", - "model_llm = mr.python.create_model(\n", - " name=\"mistral_model\", \n", - " description=\"Mistral Fine-tuned Model\",\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fbce3ba9", - "metadata": {}, - "outputs": [], - "source": [ - "# Save the model directory with the fine-tuned model to the model registry\n", - "model_llm.save(training_arguments.output_dir)" - ] - }, - { - "cell_type": "markdown", - "id": "ecc9b1d0", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/llm_pdfs/3_inference_pipeline.ipynb b/advanced_tutorials/llm_pdfs/3_inference_pipeline.ipynb deleted file mode 100644 index 9e2f00dd..00000000 --- a/advanced_tutorials/llm_pdfs/3_inference_pipeline.ipynb +++ /dev/null @@ -1,366 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "be60a8be", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f95e1e54", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "from FlagEmbedding import FlagReranker\n", - "\n", - "from functions.llm_chain import get_llm_chain\n", - "from functions.prompt_engineering import get_context_and_source\n", - "import config\n", - "\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "id": "3f3a2715", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d292081d", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "733aa65d", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'documents' feature view\n", - "feature_view = fs.get_feature_view(\n", - " name=\"documents\", \n", - " version=1,\n", - ") \n", - "\n", - "# Initialize serving\n", - "feature_view.init_serving(1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a1e562e9", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the Mistral model from Model Registry\n", - "mistral_model = mr.get_model(\n", - " name=\"mistral_model\",\n", - " version=1,\n", - ")\n", - "\n", - "# Download the Mistral model files to a local directory\n", - "saved_model_dir = mistral_model.download()" - ] - }, - { - "cell_type": "markdown", - "id": "0235999b", - "metadata": {}, - "source": [ - "## โ›“๏ธ LLM Chain " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bc70c06b", - "metadata": {}, - "outputs": [], - "source": [ - "llm_chain = get_llm_chain(saved_model_dir)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e6b5249d", - "metadata": {}, - "outputs": [], - "source": [ - "session_id = {\n", - " \"configurable\": {\"session_id\": \"default\"}\n", - "}" - ] - }, - { - "cell_type": "markdown", - "id": "d9377ab5", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Sentence Transformer Loading " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "89b5ce52", - "metadata": {}, - "outputs": [], - "source": [ - "# Load the Sentence Transformer\n", - "sentence_transformer = SentenceTransformer(\n", - " config.MODEL_SENTENCE_TRANSFORMER,\n", - ").to(config.DEVICE)" - ] - }, - { - "cell_type": "markdown", - "id": "40126e56", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Reranking " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "72cfcbd2", - "metadata": {}, - "outputs": [], - "source": [ - "def get_reranker():\n", - " reranker = FlagReranker(\n", - " 'BAAI/bge-reranker-large', \n", - " use_fp16=True,\n", - " ) \n", - " return reranker" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "491e3847", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve a reranker\n", - "reranker = get_reranker()" - ] - }, - { - "cell_type": "markdown", - "id": "c739dd2d", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Context Retrieval " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "987d3108", - "metadata": {}, - "outputs": [], - "source": [ - "# User Question Example\n", - "user_input = 'What are the best risk reporting practices?' " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "02199904", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve reranked context and source\n", - "context, source = get_context_and_source(\n", - " user_input, \n", - " sentence_transformer,\n", - " feature_view, \n", - " reranker,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "decf4d3d", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Model Inference " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "622bfb9a", - "metadata": {}, - "outputs": [], - "source": [ - "# Generate model response\n", - "model_output = llm_chain.invoke({\n", - " \"context\": context, \n", - " \"question\": user_input,\n", - " },\n", - " session_id,\n", - ")\n", - "\n", - "print(model_output.split('### RESPONSE:\\n')[-1] + source)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5711145e", - "metadata": {}, - "outputs": [], - "source": [ - "user_input = 'What is Adaptability?'\n", - "\n", - "context, source = get_context_and_source(\n", - " user_input, \n", - " sentence_transformer,\n", - " feature_view, \n", - " reranker,\n", - ")\n", - "\n", - "model_output = llm_chain.invoke({\n", - " \"context\": context, \n", - " \"question\": user_input,\n", - " },\n", - " session_id,\n", - ")\n", - "\n", - "print(model_output.split('### RESPONSE:\\n')[-1] + source)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "044e9b15", - "metadata": {}, - "outputs": [], - "source": [ - "user_input = 'What is a risk management?'\n", - "\n", - "context, source = get_context_and_source(\n", - " user_input, \n", - " sentence_transformer,\n", - " feature_view, \n", - " reranker,\n", - ")\n", - "\n", - "model_output = llm_chain.invoke({\n", - " \"context\": context, \n", - " \"question\": user_input,\n", - " },\n", - " session_id,\n", - ")\n", - "\n", - "print(model_output.split('### RESPONSE:\\n')[-1] + source)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "02be4b75", - "metadata": {}, - "outputs": [], - "source": [ - "user_input = 'What is the purpose of maintaining an up-to-date data-flow diagram?'\n", - "\n", - "context, source = get_context_and_source(\n", - " user_input, \n", - " sentence_transformer,\n", - " feature_view, \n", - " reranker,\n", - ")\n", - "\n", - "model_output = llm_chain.invoke({\n", - " \"context\": context, \n", - " \"question\": user_input,\n", - " },\n", - " session_id,\n", - ")\n", - "\n", - "print(model_output.split('### RESPONSE:\\n')[-1] + source)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43a409ea", - "metadata": {}, - "outputs": [], - "source": [ - "user_input = 'Why are security and privacy controls important?'\n", - "\n", - "context, source = get_context_and_source(\n", - " user_input, \n", - " sentence_transformer,\n", - " feature_view, \n", - " reranker,\n", - ")\n", - "\n", - "model_output = llm_chain.invoke({\n", - " \"context\": context, \n", - " \"question\": user_input,\n", - " },\n", - " session_id,\n", - ")\n", - "\n", - "print(model_output.split('### RESPONSE:\\n')[-1] + source)" - ] - }, - { - "cell_type": "markdown", - "id": "108ca3db", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/llm_pdfs/README.md b/advanced_tutorials/llm_pdfs/README.md deleted file mode 100644 index 38d0ec1c..00000000 --- a/advanced_tutorials/llm_pdfs/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# โš™๏ธ Private PDF search using LLMs and RAG - * [Helper video describing how to implement this LLM PDF system](https://www.youtube.com/watch?v=8YDANJ4Gbis) - -# โš™๏ธ RAG, Fine-tune a LLM, UI for querying - -This project is an AI system built on Hopsworks that - * creates vector embeddings for PDF files in a google drive folder (you can also use local/network directories) and indexes them for retrieval augmented generation (RAG) in Hopsworks Feature Store with Vector Indexing - * creates an instruction dataset for fine-tuning using a teacher model (GPT by default, but you can easily configure to use a powerful private model such as Llama-3-70b) - * trains and hosts in the model registry a fine-tuned open-source foundation model (Mistral 7b by default, but can be easily changed for other models such as Llama-3-8b) - * provides a UI, written in Streamlit/Python, for querying your PDFs that returns answers, citing the page/paragraph/url-to-pdf in its answer. - -![Hopsworks Architecture for Private PDFs Indexed for LLMs](../..//images/llm-pdfs-architecture.gif) - -## ๐Ÿ“– Feature Pipeline -The Feature Pipeline does the following: - - * Download any new PDFs from the google drive. - * Extract chunks of text from the PDFs and store them in a Vector-Index enabled Feature Group in Hopsworks. - * Use GPT (or Llama-3-70b) to generate an instruction set for the fine-tuning of a foundation LLM and store the instruction dataset as a feature group in Hopsworks. - -## ๐Ÿƒ๐Ÿปโ€โ™‚๏ธTraining Pipeline -This step is optional if you also want to create a fine-tuned model. -The Training Pipeline does the following: - - * Uses the instruction dataset and LoRA to fine-tune the open-source LLM (Mistral-7B-Instruct-v0.2 by default). - * Saves the fine-tuned model to Hopsworks Model Registry. - -## ๐Ÿš€ Inference Pipeline -* A chatbot written in Streamlit that answers questions about the PDFs you uploaded using RAG and your embedded LLM (either an off-the-shelf model, like Mistral-7B-Instruct-v0.2, or your fine-tuned LLM. - -## ๐Ÿ•ต๐Ÿปโ€โ™‚๏ธ Google Drive Credentials Creation - -To create your Google Drive credentials, please follow the steps outlined in this guide: [Google Drive API Quickstart with Python](https://developers.google.com/drive/api/quickstart/python). This guide will walk you through setting up your project and downloading the necessary credentials files. - -After completing the setup, you will have two files: `credentials.json` and `client_secret.json`. These are your authentication files from your Google Cloud account. - -Next, integrate these files into your project: - -1. Create a directory named `credentials` at the root of your forked repository. - -2. Place both `credentials.json` and `client_secret.json` files inside this credentials directory. - -Now, you are ready to download your PDFs from the Google Drive! - - diff --git a/advanced_tutorials/llm_pdfs/app.py b/advanced_tutorials/llm_pdfs/app.py deleted file mode 100644 index 4db37f4c..00000000 --- a/advanced_tutorials/llm_pdfs/app.py +++ /dev/null @@ -1,127 +0,0 @@ -import streamlit as st -import hopsworks -from sentence_transformers import SentenceTransformer -from FlagEmbedding import FlagReranker -from functions.prompt_engineering import get_context_and_source -from functions.llm_chain import get_llm_chain -import config -import warnings -warnings.filterwarnings('ignore') - -st.title("๐Ÿ’ฌ AI assistant") - -@st.cache_resource() -def connect_to_hopsworks(): - # Initialize Hopsworks feature store connection - project = hopsworks.login() - fs = project.get_feature_store() - mr = project.get_model_registry() - - # Retrieve the 'documents' feature view - feature_view = fs.get_feature_view( - name="documents", - version=1, - ) - - # Initialize serving - feature_view.init_serving(1) - - # Get the Mistral model from Model Registry - mistral_model = mr.get_model( - name="mistral_model", - version=1, - ) - - # Download the Mistral model files to a local directory - saved_model_dir = mistral_model.download() - - return feature_view, saved_model_dir - - -@st.cache_resource() -def get_models(saved_model_dir): - - # Load the Sentence Transformer - sentence_transformer = SentenceTransformer( - config.MODEL_SENTENCE_TRANSFORMER, - ).to(config.DEVICE) - - llm_chain = get_llm_chain(saved_model_dir) - - return sentence_transformer, llm_chain - - -@st.cache_resource() -def get_reranker(): - reranker = FlagReranker( - 'BAAI/bge-reranker-large', - use_fp16=True, - ) - return reranker - - -def predict(user_query, sentence_transformer, feature_view, reranker, llm_chain): - - st.write('โš™๏ธ Generating Response...') - - session_id = { - "configurable": {"session_id": "default"} - } - - # Retrieve reranked context and source - context, source = get_context_and_source( - user_query, - sentence_transformer, - feature_view, - reranker, - ) - - # Generate model response - model_output = llm_chain.invoke({ - "context": context, - "question": user_query, - }, - session_id, - ) - - return model_output.split('### RESPONSE:\n')[-1] + source - - -# Retrieve the feature view and the saved_model_dir -feature_view, saved_model_dir = connect_to_hopsworks() - -# Load and retrieve the sentence_transformer and llm_chain -sentence_transformer, llm_chain = get_models(saved_model_dir) - -# Retrieve the reranking model -reranker = get_reranker() - -# Initialize chat history -if "messages" not in st.session_state: - st.session_state.messages = [] - -# Display chat messages from history on app rerun -for message in st.session_state.messages: - with st.chat_message(message["role"]): - st.markdown(message["content"]) - -# React to user input -if user_query := st.chat_input("How can I help you?"): - # Display user message in chat message container - st.chat_message("user").markdown(user_query) - # Add user message to chat history - st.session_state.messages.append({"role": "user", "content": user_query}) - - response = predict( - user_query, - sentence_transformer, - feature_view, - reranker, - llm_chain, - ) - - # Display assistant response in chat message container - with st.chat_message("assistant"): - st.markdown(response) - # Add assistant response to chat history - st.session_state.messages.append({"role": "assistant", "content": response}) diff --git a/advanced_tutorials/llm_pdfs/config.py b/advanced_tutorials/llm_pdfs/config.py deleted file mode 100644 index 1b1ee098..00000000 --- a/advanced_tutorials/llm_pdfs/config.py +++ /dev/null @@ -1,16 +0,0 @@ -import torch - -# The unique identifier for the Google Drive folder where your PDF files are stored -FOLDER_ID = '{YOUR_FOLDER_ID}' - -# The local directory path where downloaded data will be saved. -DOWNLOAD_PATH = "data" - -# The identifier of the pre-trained sentence transformer model for producing sentence embeddings. -MODEL_SENTENCE_TRANSFORMER = 'all-MiniLM-L6-v2' - -# The computing device to be used for model inference and training. -DEVICE = "cuda" if torch.cuda.is_available() else "cpu" - -# The identifier for the Mistral-7B-Instruct model -MODEL_ID = 'mistralai/Mistral-7B-Instruct-v0.2' diff --git a/advanced_tutorials/llm_pdfs/functions/connect_to_google_drive.py b/advanced_tutorials/llm_pdfs/functions/connect_to_google_drive.py deleted file mode 100644 index a20a164c..00000000 --- a/advanced_tutorials/llm_pdfs/functions/connect_to_google_drive.py +++ /dev/null @@ -1,19 +0,0 @@ -from apiclient import discovery -from httplib2 import Http -from oauth2client import client, file, tools - - -# Define path variables -credentials_file_path = '../credentials/credentials.json' -clientsecret_file_path = '../credentials/client_secret.json' - -# Define API scope -SCOPE = 'https://www.googleapis.com/auth/drive' - -# Define store -store = file.Storage(credentials_file_path) -credentials = store.get() -# Get access token -if not credentials or credentials.invalid: - flow = client.flow_from_clientsecrets(clientsecret_file_path, SCOPE) - credentials = tools.run_flow(flow, store) \ No newline at end of file diff --git a/advanced_tutorials/llm_pdfs/functions/llm_chain.py b/advanced_tutorials/llm_pdfs/functions/llm_chain.py deleted file mode 100644 index 46e56952..00000000 --- a/advanced_tutorials/llm_pdfs/functions/llm_chain.py +++ /dev/null @@ -1,133 +0,0 @@ -import os -import getpass -import torch -import transformers -from peft import AutoPeftModelForCausalLM -from transformers import AutoTokenizer -from langchain.llms import HuggingFacePipeline -from langchain.prompts import PromptTemplate -from langchain_core.output_parsers import StrOutputParser -from langchain_core.runnables.history import RunnableWithMessageHistory -from langchain_community.chat_message_histories import ChatMessageHistory -from langchain_core.chat_history import BaseChatMessageHistory - - -def load_llm(model_dir) -> tuple: - """ - Load the LLM and its corresponding tokenizer. - - Args: - model_dir (str): Path to the pre-trained fine-tuned model. - - Returns: - tuple: A tuple containing the tokenizer and loaded model. - """ - # Setup the HuggingFace API Key - os.environ["HF_API_KEY"] = os.getenv("HF_API_KEY") or getpass.getpass('๐Ÿ”‘ Enter your HuggingFace API key: ') - - # Load a model from the saved model directory - model_llm = AutoPeftModelForCausalLM.from_pretrained( - model_dir, - device_map="auto", - torch_dtype=torch.float16, - token=os.environ["HF_API_KEY"], - ) - - # Load the tokenizer from the saved model directory - tokenizer = AutoTokenizer.from_pretrained( - model_dir, - token=os.environ["HF_API_KEY"], - ) - - # Set the pad token to the end-of-sequence token - tokenizer.pad_token = tokenizer.eos_token - - # Set the padding side to "right" to remove warnings - tokenizer.padding_side = "right" - - # Print device - print(f'โ›ณ๏ธ Device: {model_llm.device}') - return tokenizer, model_llm - - -def get_prompt_template(): - # Define a template for generating prompts - prompt_template = """ - [INST] - Instruction: Prioritize brevity and clarity in responses. - Avoid unnecessary repetition and keep answers concise, adhering to a maximum of 750 characters. - Eliminate redundant phrases and sentences. - If details are repeated, provide them only once for better readability. - Focus on delivering key information without unnecessary repetition. - If a concept is already conveyed, there's no need to restate it. Ensure responses remain clear and to the point. - Make sure you do not repeat any sentences in your answer. - [/INST] - - Previous conversation: - {chat_history} - - ### CONTEXT: - - {context} - - ### QUESTION: - [INST]{question}[/INST]""" - return prompt_template - - -def get_llm_chain(model_dir): - """ - Initializes and returns a language model chain for text generation using Hugging Face's transformers library. - - Parameters: - - model_dir (str): Path to the pre-trained fine-tuned model. - - Returns: - - LLMChain: A configured chain consisting of a Hugging Face pipeline for text generation and prompt handling. - """ - - def get_global_history(session_id: str) -> BaseChatMessageHistory: - return global_chat_history - - # Load LLM and its corresponding tokenizer - tokenizer, model = load_llm(model_dir) - - # Create a text generation pipeline using the loaded model and tokenizer - text_generation_pipeline = transformers.pipeline( - model=model, # The pre-trained language model for text generation - tokenizer=tokenizer, # The tokenizer corresponding to the language model - task="text-generation", # Specify the task as text generation - temperature=0.2, # Controls the randomness of the generation (higher values for more randomness) - repetition_penalty=1.5, # Controls the penalty for repeating tokens in generated text - return_full_text=True, # Return the full generated text instead of just the generated tokens - max_new_tokens=750, # Limit the maximum number of newly generated tokens - pad_token_id=tokenizer.eos_token_id, # Use the end-of-sequence token as the padding token - do_sample=True, # Enable sampling during text generation - ) - - # Create a Hugging Face pipeline for Mistral LLM using the text generation pipeline - mistral_llm = HuggingFacePipeline( - pipeline=text_generation_pipeline, - ) - - # Create prompt from prompt template - prompt = PromptTemplate( - input_variables=["context", "question", "chat_history"], - template=get_prompt_template(), - ) - - # Create the runnable sequence - runnable = prompt | mistral_llm | StrOutputParser() - - # Initialize a global chat history (shared for all invocations) - global_chat_history = ChatMessageHistory() - - # Create the RunnableWithMessageHistory using the global history - llm_chain = RunnableWithMessageHistory( - runnable, - get_global_history, - input_messages_key="question", - history_messages_key="chat_history", - ) - - return llm_chain diff --git a/advanced_tutorials/llm_pdfs/functions/pdf_preprocess.py b/advanced_tutorials/llm_pdfs/functions/pdf_preprocess.py deleted file mode 100644 index 495207df..00000000 --- a/advanced_tutorials/llm_pdfs/functions/pdf_preprocess.py +++ /dev/null @@ -1,96 +0,0 @@ -from pydrive.auth import GoogleAuth -from pydrive.drive import GoogleDrive -import PyPDF2 -import os -from typing import List, Dict, Union - -def download_files_to_folder(folder_id: str, download_path: str) -> List: - """ - Download files from a specified Google Drive folder to a local folder. - - Parameters: - - folder_id (str): The ID of the Google Drive folder. - - download_path (str): The local folder path where files will be downloaded. - - Returns: - - List: A list containing information about newly downloaded files. - """ - # Authenticate with Google Drive - gauth = GoogleAuth() - gauth.LoadCredentialsFile("credentials/credentials.json") - - if gauth.credentials is None: - gauth.LocalWebserverAuth() - elif gauth.access_token_expired: - gauth.Refresh() - else: - # Initialize the saved creds - gauth.Authorize() - - # Save the current credentials to a file - gauth.SaveCredentialsFile("credentials/credentials.json") - - drive = GoogleDrive(gauth) - - # Create the local folder if it doesn't exist - if not os.path.exists(download_path): - os.makedirs(download_path) - - # List files in the specified Google Drive folder - file_list = drive.ListFile({'q': f"'{folder_id}' in parents and trashed=false"}).GetList() - - # Initialize a list to store information about new files - new_files = [] - print('โ›ณ๏ธ Loading...') - - # Iterate through each file in the list - for file in file_list: - # Check if the file already exists locally - local_file_path = os.path.join(download_path, file["title"]) - - if not os.path.isfile(local_file_path): - # Download the file content and save it to the local folder - file.GetContentFile(local_file_path) - - # Append information about the downloaded file to the list - new_files.append(file) - - # Print the list of newly downloaded files - if len(new_files) == 0: - print("โ›ณ๏ธ There are no new files") - return new_files - - print("โ›ณ๏ธ Newly downloaded files:") - for file in new_files: - print("title: %s, id: %s" % (file["title"], file["id"])) - - return new_files - - -def process_pdf_file(file_info: Dict, - document_text: List, - pdfs_path: str = 'data/') -> List: - """ - Process content of a PDF file and append information to the document_text list. - - Parameters: - - file_info (Dict): Information about the PDF file. - - document_text (List): List containing document information. - - pdfs_path (str): Path to the folder containing PDF files (default is 'data/'). - - Returns: - - List: Updated document_text list. - """ - file_title = file_info["title"] - - if file_title.split('.')[-1] == 'pdf': - print(f'โ›ณ๏ธ File Name: {file_title}') - - pdf_path = os.path.join(pdfs_path, file_title) - pdf_reader = PyPDF2.PdfReader(pdf_path) - pages_amount = len(pdf_reader.pages) - print(f'Amount of pages: {pages_amount}') - - for i, page in enumerate(pdf_reader.pages): - document_text.append([file_title, file_info['embedLink'], i+1, page.extract_text()]) - return document_text diff --git a/advanced_tutorials/llm_pdfs/functions/prompt_engineering.py b/advanced_tutorials/llm_pdfs/functions/prompt_engineering.py deleted file mode 100644 index a4a0b979..00000000 --- a/advanced_tutorials/llm_pdfs/functions/prompt_engineering.py +++ /dev/null @@ -1,151 +0,0 @@ -from typing import List, Tuple -from sentence_transformers import SentenceTransformer - -def get_source(neighbors: List[Tuple[str, str, int, int]]) -> str: - """ - Generates a formatted string for the sources of the provided context. - - Args: - neighbors (List[Tuple[str, str, int, int]]): List of tuples representing document information. - - Returns: - str: Formatted string containing document names, links, pages, and paragraphs. - """ - return '\n\nReferences:\n' + '\n'.join( - [ - f' - {neighbor[0]}({neighbor[1]}): Page: {neighbor[2]}, Paragraph: {neighbor[3]}' - for neighbor - in neighbors - ] - ) - -def get_context(neighbors: List[Tuple[str]]) -> str: - """ - Generates a formatted string for the context based on the provided neighbors. - - Args: - neighbors (List[Tuple[str]]): List of tuples representing context information. - - Returns: - str: Formatted string containing context information. - """ - return '\n\n'.join([neighbor[-1] for neighbor in neighbors]) - - -def generate_prompt(context: str, question: str) -> str: - """ - Generates a prompt for the AI assistant based on context and question. - - Args: - context (str): Formatted string containing context information. - question (str): The question to be included in the prompt. - - Returns: - str: Formatted prompt for the AI assistant. - """ - prompt_template = """ -[INST] -Instruction: You are an AI assistant specialized in regulatory documents. -Your role is to provide accurate and informative answers based on the given context. -[/INST] - -### CONTEXT: - -{context} - -### QUESTION: -[INST]{question}[/INST] - """ - - return prompt_template.format( - context=context, - question=question, - ) - - -def get_neighbors(query: str, sentence_transformer: SentenceTransformer, feature_view, k: int = 10) -> List[Tuple[str, float]]: - """ - Get the k closest neighbors for a given query using sentence embeddings. - - Parameters: - - query (str): The input query string. - - sentence_transformer (SentenceTransformer): The sentence transformer model. - - feature_view (FeatureView): The feature view for retrieving neighbors. - - k (int, optional): Number of neighbors to retrieve. Default is 10. - - Returns: - - List[Tuple[str, float]]: A list of tuples containing the neighbor context. - """ - question_embedding = sentence_transformer.encode(query) - - # Retrieve closest neighbors - neighbors = feature_view.find_neighbors( - question_embedding, - k=k, - ) - - return neighbors - - -def rerank(query: str, neighbors: List[str], reranker, k: int = 3) -> List[str]: - """ - Rerank a list of neighbors based on a reranking model. - - Parameters: - - query (str): The input query string. - - neighbors (List[str]): List of neighbor contexts. - - reranker (Reranker): The reranking model. - - k (int, optional): Number of top-ranked neighbors to return. Default is 3. - - Returns: - - List[str]: The top-ranked neighbor contexts after reranking. - """ - # Compute scores for each context using the reranker - scores = [reranker.compute_score([query, context[-1]]) for context in neighbors] - - combined_data = [*zip(scores, neighbors)] - - # Sort contexts based on the scores in descending order - sorted_data = sorted(combined_data, key=lambda x: x[0], reverse=True) - - # Return the top-k ranked contexts - return [context for score, context in sorted_data][:k] - - -def get_context_and_source(user_query: str, sentence_transformer: SentenceTransformer, - feature_view, reranker) -> Tuple[str, str]: - """ - Retrieve context and source based on user query using a combination of embedding, feature view, and reranking. - - Parameters: - - user_query (str): The user's input query string. - - sentence_transformer (SentenceTransformer): The sentence transformer model. - - feature_view (FeatureView): The feature view for retrieving neighbors. - - reranker (Reranker): The reranking model. - - Returns: - - Tuple[str, str]: A tuple containing the retrieved context and source. - """ - # Retrieve closest neighbors - neighbors = get_neighbors( - user_query, - sentence_transformer, - feature_view, - k=10, - ) - - # Rerank the neighbors to get top-k - context_reranked = rerank( - user_query, - neighbors, - reranker, - k=3, - ) - - # Retrieve context - context = get_context(context_reranked) - - # Retrieve source - source = get_source(context_reranked) - - return context, source diff --git a/advanced_tutorials/llm_pdfs/functions/text_preprocess.py b/advanced_tutorials/llm_pdfs/functions/text_preprocess.py deleted file mode 100644 index 47cbd21d..00000000 --- a/advanced_tutorials/llm_pdfs/functions/text_preprocess.py +++ /dev/null @@ -1,73 +0,0 @@ -import pandas as pd -from typing import List - -def split_page(document: str) -> List[str]: - """ - Splits a document into a list of paragraphs based on newline characters. - - Parameters: - - document (str): The input document to be split. - - Returns: - - List[str]: A list of paragraphs. - """ - return document.split('\n \n') - - -def get_paragraphs(data: pd.DataFrame) -> pd.DataFrame: - """ - Explodes the 'text' column in the DataFrame, adds a 'paragraph' column indicating the index - of the element in the list grouped by file_name and page_number. - - Parameters: - - data (pd.DataFrame): The input DataFrame containing 'file_name', 'page_number', and 'text' columns. - - Returns: - - pd.DataFrame: The modified DataFrame with an added 'paragraph' column. - """ - # Explode the list to separate rows - data_text_exploded = data.explode('text') - - # Add a 'paragraph' column indicating the index of the element in the list - data_text_exploded['paragraph'] = data_text_exploded.groupby( - ['file_name', 'page_number'] - ).cumcount() + 1 - - return data_text_exploded - - -def process_text_data(df: pd.DataFrame) -> pd.DataFrame: - """ - Processes text data by applying the split_page, get_paragraphs functions. - - Parameters: - - df (pd.DataFrame): The input DataFrame containing 'file_name' and 'text' columns. - - Returns: - - pd.DataFrame: The processed DataFrame with 'file_name', 'page_number', 'paragraph', and 'text' columns. - """ - # Apply split_page function to split text into paragraphs - df['text'] = df['text'].apply(split_page) - - # Apply get_paragraphs function to explode the list and add paragraph numbers - df = get_paragraphs(df) - - # Apply strip to remove leading and trailing spaces - df['text'] = df['text'].str.strip() - - # Filter rows where the length of the 'text' column is greater than 500 - df = df[df['text'].str.len() > 500] - - # Set a regex pattern to identify rows with 5 or more consecutive dots or dashes - pattern_to_remove = r'(\.{5,}|\-{5,})' - - # Remove rows matching the pattern - df_filtered = df[~df['text'].str.contains(pattern_to_remove, regex=True)] - - # Reset index - df_filtered.reset_index(drop=True, inplace=True) - - # Reorder columns for better readability - df_filtered = df_filtered[['file_name', 'file_link', 'page_number', 'paragraph', 'text']] - - return df_filtered diff --git a/advanced_tutorials/llm_pdfs/requirements.txt b/advanced_tutorials/llm_pdfs/requirements.txt deleted file mode 100644 index 8c00f616..00000000 --- a/advanced_tutorials/llm_pdfs/requirements.txt +++ /dev/null @@ -1,22 +0,0 @@ -google-api-python-client==2.114.0 -httplib2==0.22.0 -oauth2client==4.1.3 -pydrive==1.3.1 -PyPDF2==3.0.1 -pandas==2.1.4 -sentence-transformers==2.2.2 -accelerate==0.26.1 -peft==0.7.1 -bitsandbytes==0.40.2 -transformers==4.36.2 -flask-sqlalchemy==3.1.1 -trl==0.7.9 -langchain==0.1.1 -pyopenssl==23.3.0 -FlagEmbedding -streamlit==1.30.0 -openai==1.9.0 -getpass4==0.0.14.1 -json_repair==0.6.1 -protobuf==3.20.0 -hopsworks diff --git a/advanced_tutorials/nyc_taxi_fares/1_nyc_taxi_fares_feature_backfill.ipynb b/advanced_tutorials/nyc_taxi_fares/1_nyc_taxi_fares_feature_backfill.ipynb index 78de0b35..feb24eb1 100644 --- a/advanced_tutorials/nyc_taxi_fares/1_nyc_taxi_fares_feature_backfill.ipynb +++ b/advanced_tutorials/nyc_taxi_fares/1_nyc_taxi_fares_feature_backfill.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "dd36272d", + "id": "33e115a6", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 01: Feature Backfill\n", @@ -19,7 +19,7 @@ }, { "cell_type": "markdown", - "id": "43713d56", + "id": "49b3ce29", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -28,7 +28,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2f322474", + "id": "30786dcc", "metadata": {}, "outputs": [], "source": [ @@ -38,7 +38,7 @@ { "cell_type": "code", "execution_count": null, - "id": "aeed974f", + "id": "c3a82469", "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "markdown", - "id": "af8f24b1", + "id": "2956016d", "metadata": {}, "source": [ "___" @@ -59,7 +59,7 @@ }, { "cell_type": "markdown", - "id": "55fec98f", + "id": "b9585831", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Loading Historical Data\n" @@ -67,7 +67,7 @@ }, { "cell_type": "markdown", - "id": "097fa6b8", + "id": "ffef12a5", "metadata": {}, "source": [ "### ๐Ÿš– Rides Data" @@ -76,7 +76,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23c93fd1", + "id": "508ffc6a", "metadata": {}, "outputs": [], "source": [ @@ -89,7 +89,7 @@ }, { "cell_type": "markdown", - "id": "9b04266f", + "id": "6b07cf18", "metadata": {}, "source": [ "### ๐Ÿ’ธ Fares Data" @@ -98,7 +98,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3025713c", + "id": "0fc2f8a0", "metadata": {}, "outputs": [], "source": [ @@ -111,7 +111,7 @@ }, { "cell_type": "markdown", - "id": "c0cdbddb", + "id": "ca08499c", "metadata": {}, "source": [ "---" @@ -119,7 +119,7 @@ }, { "cell_type": "markdown", - "id": "06f48ff5", + "id": "67ba455d", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to the Hopsworks Feature Store " @@ -128,7 +128,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2c2367c5", + "id": "5b89e69b", "metadata": {}, "outputs": [], "source": [ @@ -141,7 +141,7 @@ }, { "cell_type": "markdown", - "id": "18fdd1af", + "id": "1b75e62a", "metadata": {}, "source": [ "___" @@ -149,7 +149,7 @@ }, { "cell_type": "markdown", - "id": "5919f8c4", + "id": "977b0a17", "metadata": {}, "source": [ "## ๐Ÿช„ Creating Feature Groups" @@ -157,7 +157,7 @@ }, { "cell_type": "markdown", - "id": "4d3bf547", + "id": "0abd3542", "metadata": {}, "source": [ "### ๐Ÿš– Rides Data" @@ -166,7 +166,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e75628e8", + "id": "63a2eeb9", "metadata": {}, "outputs": [], "source": [ @@ -177,6 +177,7 @@ " event_time=\"pickup_datetime\",\n", " description=\"Rides features\",\n", " time_travel_format=\"HUDI\", \n", + " online_enabled=False, \n", " statistics_config=True,\n", ")\n", "\n", @@ -185,7 +186,7 @@ }, { "cell_type": "markdown", - "id": "af1042da", + "id": "de46ef09", "metadata": {}, "source": [ "### ๐Ÿ’ธ Fares Data" @@ -194,7 +195,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7ad00ce4", + "id": "19183b27", "metadata": {}, "outputs": [], "source": [ @@ -204,15 +205,19 @@ " primary_key=[\"ride_id\"], \n", " description=\"Taxi fares features\",\n", " time_travel_format=\"HUDI\", \n", + " online_enabled=False,\n", " statistics_config=True,\n", ") \n", "\n", - "fares_fg.insert(df_fares)" + "fares_fg.insert(\n", + " df_fares, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "markdown", - "id": "655abd26", + "id": "35f036f1", "metadata": {}, "source": [ "---\n", @@ -224,7 +229,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -238,7 +243,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/nyc_taxi_fares/2_nyc_taxi_fares_feature_pipeline.ipynb b/advanced_tutorials/nyc_taxi_fares/2_nyc_taxi_fares_feature_pipeline.ipynb index 4c3fda4f..b8ab4ccd 100644 --- a/advanced_tutorials/nyc_taxi_fares/2_nyc_taxi_fares_feature_pipeline.ipynb +++ b/advanced_tutorials/nyc_taxi_fares/2_nyc_taxi_fares_feature_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "835eceed", + "id": "a071956b", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 02: Feature Pipeline\n", @@ -15,7 +15,7 @@ }, { "cell_type": "markdown", - "id": "310cfc8a", + "id": "48f55b16", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -24,7 +24,7 @@ { "cell_type": "code", "execution_count": null, - "id": "95150ba4", + "id": "29e6f1bb", "metadata": {}, "outputs": [], "source": [ @@ -33,10 +33,7 @@ "import time \n", "import os \n", "\n", - "from features import (\n", - " nyc_taxi_rides, \n", - " nyc_taxi_fares,\n", - ")\n", + "from features import nyc_taxi_rides, nyc_taxi_fares\n", "\n", "# Mute warnings\n", "import warnings\n", @@ -45,7 +42,7 @@ }, { "cell_type": "markdown", - "id": "a3d5d7be", + "id": "87a03dc4", "metadata": {}, "source": [ "___" @@ -53,7 +50,7 @@ }, { "cell_type": "markdown", - "id": "4603a252", + "id": "50a543e2", "metadata": {}, "source": [ "## ๐Ÿช„ Generating new data" @@ -61,7 +58,7 @@ }, { "cell_type": "markdown", - "id": "474bd1b2", + "id": "802d8319", "metadata": {}, "source": [ "### ๐Ÿš– Rides Data" @@ -70,7 +67,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6db8cc92", + "id": "829b67ed", "metadata": {}, "outputs": [], "source": [ @@ -78,13 +75,13 @@ "df_rides = nyc_taxi_rides.generate_rides_data(150)\n", "\n", "# Display the DataFrame containing the generated ride data\n", - "df_rides.head(5)" + "df_rides" ] }, { "cell_type": "code", "execution_count": null, - "id": "c4010b8e", + "id": "86d22e8c", "metadata": {}, "outputs": [], "source": [ @@ -98,7 +95,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f9fc44ab", + "id": "0c1cc726", "metadata": {}, "outputs": [], "source": [ @@ -109,7 +106,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bdbe5cf9", + "id": "c788df5e", "metadata": {}, "outputs": [], "source": [ @@ -120,7 +117,7 @@ }, { "cell_type": "markdown", - "id": "8cfc9fdf", + "id": "899fa056", "metadata": {}, "source": [ "### ๐Ÿ’ธ Fares Data" @@ -129,7 +126,7 @@ { "cell_type": "code", "execution_count": null, - "id": "36b883e0", + "id": "0847286d", "metadata": { "scrolled": true }, @@ -139,13 +136,13 @@ "df_fares = nyc_taxi_fares.generate_fares_data(150)\n", "\n", "# Display the DataFrame containing the generated fare data\n", - "df_fares.head()" + "df_fares" ] }, { "cell_type": "code", "execution_count": null, - "id": "054a0a76", + "id": "b053a508", "metadata": {}, "outputs": [], "source": [ @@ -156,7 +153,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ad1f6760", + "id": "1395c730", "metadata": {}, "outputs": [], "source": [ @@ -167,7 +164,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d8a9b305", + "id": "31df375e", "metadata": {}, "outputs": [], "source": [ @@ -178,7 +175,7 @@ }, { "cell_type": "markdown", - "id": "24d823c9", + "id": "47145017", "metadata": {}, "source": [ "___" @@ -186,7 +183,7 @@ }, { "cell_type": "markdown", - "id": "11699f3c", + "id": "cd24607e", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to the Hopsworks Feature Store " @@ -195,7 +192,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ef887c6e", + "id": "3dc300c0", "metadata": {}, "outputs": [], "source": [ @@ -209,7 +206,7 @@ { "cell_type": "code", "execution_count": null, - "id": "23213c57", + "id": "3a5d908c", "metadata": {}, "outputs": [], "source": [ @@ -226,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "96c4aa87", + "id": "55de84ac", "metadata": {}, "source": [ "---" @@ -234,7 +231,7 @@ }, { "cell_type": "markdown", - "id": "4ceb6069", + "id": "670b6336", "metadata": {}, "source": [ "## โฌ†๏ธ Uploading new data to the Feature Store" @@ -243,7 +240,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5672f9ff", + "id": "9ff63846", "metadata": {}, "outputs": [], "source": [ @@ -253,7 +250,7 @@ { "cell_type": "code", "execution_count": null, - "id": "64abc698", + "id": "43ede544", "metadata": { "scrolled": true }, @@ -264,7 +261,7 @@ }, { "cell_type": "markdown", - "id": "470b5e79", + "id": "9b352a57", "metadata": {}, "source": [ "---" @@ -272,7 +269,7 @@ }, { "cell_type": "markdown", - "id": "12d5f3e1", + "id": "7f6152cd", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 03: Training Pipeline \n", @@ -283,7 +280,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -297,7 +294,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" }, "vscode": { "interpreter": { diff --git a/advanced_tutorials/nyc_taxi_fares/3_nyc_taxi_fares_training_pipeline.ipynb b/advanced_tutorials/nyc_taxi_fares/3_nyc_taxi_fares_training_pipeline.ipynb index 7ec89b28..86ec3386 100644 --- a/advanced_tutorials/nyc_taxi_fares/3_nyc_taxi_fares_training_pipeline.ipynb +++ b/advanced_tutorials/nyc_taxi_fares/3_nyc_taxi_fares_training_pipeline.ipynb @@ -36,10 +36,7 @@ "\n", "import pandas as pd\n", "\n", - "from sklearn.metrics import (\n", - " mean_absolute_error, \n", - " r2_score,\n", - ")\n", + "from sklearn.metrics import mean_absolute_error, r2_score\n", "import xgboost as xgb\n", "\n", "import matplotlib.pyplot as plt\n", @@ -110,15 +107,15 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = fares_fg.select(['total_fare', \"tolls\"])\\\n", + "# Select features for training data.\n", + "query = fares_fg.select(['total_fare', \"tolls\"])\\\n", " .join(rides_fg.select_except(['taxi_id', \"driver_id\", \"pickup_datetime\",\n", " \"pickup_longitude\", \"pickup_latitude\",\n", " \"dropoff_longitude\", \"dropoff_latitude\"]),\n", " on=['ride_id'])\n", "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# Uncomment the line below if you want to display the first 2 rows of the resulting DataFrame\n", + "# query.show(2)" ] }, { @@ -154,7 +151,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='nyc_taxi_fares_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=[\"total_fare\"],\n", ")" ] @@ -293,12 +290,7 @@ "})\n", "\n", "# Create a residual plot using Seaborn\n", - "residplot = sns.residplot(\n", - " data=df_, \n", - " x=\"y_true\", \n", - " y=\"y_pred\", \n", - " color='#613F75',\n", - ")\n", + "residplot = sns.residplot(data=df_, x=\"y_true\", y=\"y_pred\", color='#613F75')\n", "\n", "# Set plot title and axis labels\n", "plt.title('Model Residuals')\n", @@ -350,10 +342,7 @@ "output_schema = Schema(y_train)\n", "\n", "# Create a model schema using the defined input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "# Convert the model schema to a dictionary representation\n", "model_schema_dict = model_schema.to_dict()" @@ -381,8 +370,8 @@ "if not os.path.isdir(model_dir):\n", " os.mkdir(model_dir)\n", "\n", - "# Save the trained XGBoost regressor to a json file in the specified directory\n", - "regressor.save_model(model_dir + \"/model.json\")\n", + "# Save the trained XGBoost regressor to a file in the specified directory\n", + "joblib.dump(regressor, model_dir + '/nyc_taxi_fares_model.pkl')\n", "\n", "# Save the residual plot figure as an image file in the specified directory\n", "fig.savefig(model_dir + \"/residplot.png\")" @@ -432,7 +421,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -446,7 +435,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/nyc_taxi_fares/4_nyc_taxi_fares_batch_inference.ipynb b/advanced_tutorials/nyc_taxi_fares/4_nyc_taxi_fares_batch_inference.ipynb index dff4b0a3..de1b3845 100644 --- a/advanced_tutorials/nyc_taxi_fares/4_nyc_taxi_fares_batch_inference.ipynb +++ b/advanced_tutorials/nyc_taxi_fares/4_nyc_taxi_fares_batch_inference.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c368eab4", + "id": "c958e52b", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 04: Batch Inference\n", @@ -15,7 +15,7 @@ }, { "cell_type": "markdown", - "id": "255906b9", + "id": "8855ee1a", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -24,16 +24,16 @@ { "cell_type": "code", "execution_count": null, - "id": "4ba1afa2", + "id": "019c9226", "metadata": {}, "outputs": [], "source": [ - "from xgboost import XGBRegressor" + "import joblib" ] }, { "cell_type": "markdown", - "id": "cb4a9dca", + "id": "ce2fe8a8", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c9bce235", + "id": "39f83bc9", "metadata": {}, "outputs": [], "source": [ @@ -55,7 +55,7 @@ }, { "cell_type": "markdown", - "id": "7cad25e1", + "id": "87485ee0", "metadata": {}, "source": [ "## โš™๏ธ Feature View Retrieval\n" @@ -64,7 +64,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9a36a4b8", + "id": "e622d6b4", "metadata": {}, "outputs": [], "source": [ @@ -77,7 +77,7 @@ }, { "cell_type": "markdown", - "id": "2b99f3b3", + "id": "e1dac8b6", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -86,7 +86,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3ce2c9f1", + "id": "ca35a9f4", "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ }, { "cell_type": "markdown", - "id": "f8eec8d4", + "id": "6f3589dc", "metadata": {}, "source": [ "## ๐Ÿ“ฎ Retrieving model from Model Registry " @@ -105,7 +105,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e0333663", + "id": "6ac8014f", "metadata": {}, "outputs": [], "source": [ @@ -122,21 +122,20 @@ { "cell_type": "code", "execution_count": null, - "id": "b2df9868", + "id": "b48a0159", "metadata": {}, "outputs": [], "source": [ - "# Initialize the model\n", - "model = XGBRegressor()\n", + "# Load the saved XGBoost model from the downloaded directory\n", + "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/nyc_taxi_fares_model.pkl\")\n", "\n", - "# Load the model from a saved JSON file\n", - "model.load_model(saved_model_dir + \"/model.json\")\n", - "model" + "# Display the retrieved XGBoost model\n", + "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "2531a77a", + "id": "86af1be5", "metadata": {}, "source": [ "## โœจ Load Batch Data" @@ -145,7 +144,7 @@ { "cell_type": "code", "execution_count": null, - "id": "276fd009", + "id": "7dab6acd", "metadata": {}, "outputs": [], "source": [ @@ -164,7 +163,7 @@ }, { "cell_type": "markdown", - "id": "06f2f514", + "id": "a41ffc73", "metadata": {}, "source": [ "## ๐Ÿค– Making the predictions " @@ -173,12 +172,12 @@ { "cell_type": "code", "execution_count": null, - "id": "09d9847d", + "id": "88e2fa47", "metadata": {}, "outputs": [], "source": [ "# Use the retrieved XGBoost model to make predictions on the batch data\n", - "predictions = model.predict(batch_data)\n", + "predictions = retrieved_xgboost_model.predict(batch_data)\n", "\n", "# Display the first 10 predictions\n", "predictions[:10]" @@ -186,7 +185,7 @@ }, { "cell_type": "markdown", - "id": "1f351099", + "id": "b0b40f5b", "metadata": {}, "source": [ "It's important to know that every time you save a model with the same name, a new version of the model will be saved, so nothing will be overwritten. In this way, you can compare several versions of the same model - or create a model with a new name, if you prefer that." @@ -194,7 +193,7 @@ }, { "cell_type": "markdown", - "id": "a6ebe15e", + "id": "89bc07f2", "metadata": {}, "source": [ "---\n", @@ -210,7 +209,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -224,7 +223,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/nyc_taxi_fares/streamlit_batch_inference_app.py b/advanced_tutorials/nyc_taxi_fares/streamlit_batch_inference_app.py index 42b3dc84..c9b6226a 100644 --- a/advanced_tutorials/nyc_taxi_fares/streamlit_batch_inference_app.py +++ b/advanced_tutorials/nyc_taxi_fares/streamlit_batch_inference_app.py @@ -1,6 +1,6 @@ import streamlit as st import hopsworks -from xgboost import XGBRegressor +import joblib import pandas as pd import numpy as np import folium @@ -24,11 +24,7 @@ def get_model(project, model_name, file_name): if list_of_files: model_path = list_of_files[0] - # Initialize the model - model = XGBRegressor() - - # Load the model from a saved JSON file - model.load_model("/model.json") + model = joblib.load(model_path) else: if not os.path.exists(TARGET_FILE): mr = project.get_model_registry() @@ -39,11 +35,7 @@ def get_model(project, model_name, file_name): EVALUATION_METRIC, SORT_METRICS_BY) model_dir = model.download() - # Initialize the model - model = XGBRegressor() - - # Load the model from a saved JSON file - model.load_model(model_dir + "/model.json") + model = joblib.load(model_dir + f"/{file_name}.pkl") return model diff --git a/advanced_tutorials/on_demand_feature/notebooks/3_feature_view_td_modelling.ipynb b/advanced_tutorials/on_demand_feature/notebooks/3_feature_view_td_modelling.ipynb index f66bc275..d30411bd 100644 --- a/advanced_tutorials/on_demand_feature/notebooks/3_feature_view_td_modelling.ipynb +++ b/advanced_tutorials/on_demand_feature/notebooks/3_feature_view_td_modelling.ipynb @@ -271,7 +271,7 @@ "source": [ "dataset_api = project.get_dataset_api()\n", "\n", - "uploaded_file_path = dataset_api.upload(\"predict_example.py\", \"Resources\", overwrite=True)\n", + "uploaded_file_path = dataset_api.upload(\"predict_example.py\", \"Models\", overwrite=True)\n", "predictor_script_path = os.path.join(\"/Projects\", project.name, uploaded_file_path)" ] }, diff --git a/advanced_tutorials/recommender-system/1_feature_engineering.ipynb b/advanced_tutorials/recommender-system/1_feature_engineering.ipynb index 9ead9d7a..1be57f4e 100644 --- a/advanced_tutorials/recommender-system/1_feature_engineering.ipynb +++ b/advanced_tutorials/recommender-system/1_feature_engineering.ipynb @@ -6,21 +6,19 @@ "source": [ "## ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ Feature Engineering \n", "\n", - "**Note**: This tutorial does not support Google Colab.\n", - "\n", "**Your Python Jupyter notebook should be configured for >8GB of memory.**\n", "\n", - "In this series of tutorials, you will build a recommender system for fashion items. It will consist of two models: a *retrieval model* and a *ranking model*. The idea is that the retrieval model should be able to quickly generate a small subset of candidate items from a large collection of items. This comes at the cost of granularity, which is why you also train a ranking model that can afford to use more features than the retrieval model.\n", + "In this series of tutorials, we will build a recommender system for fashion items. It will consist of two models: a *retrieval model* and a *ranking model*. The idea is that the retrieval model should be able to quickly generate a small subset of candidate items from a large collection of items. This comes at the cost of granularity, which is why we also train a ranking model that can afford to use more features than the retrieval model.\n", "\n", "### โœ๐Ÿป Data\n", "\n", - "You will use data from the [H&M Personalized Fashion Recommendations](https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations) Kaggle competition.\n", + "We will use data from the [H&M Personalized Fashion Recommendations](https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations) Kaggle competition.\n", "\n", "\n", "\n", - "The full dataset contains images of all products, but here you will simply use the tabular data. You have three data sources:\n", + "The full dataset contains images of all products, but here we will simply use the tabular data. We have three data sources:\n", "- `articles.csv`: info about fashion items.\n", "- `customers.csv`: info about users.\n", "- `transactions_train.csv`: info about transactions.\n" @@ -33,6 +31,59 @@ "## ๐Ÿ“ Imports " ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Hosted notebook environments may not have the local features package\n", + "import os\n", + "\n", + "def need_download_modules():\n", + " if 'google.colab' in str(get_ipython()):\n", + " return True\n", + " if 'HOPSWORKS_PROJECT_ID' in os.environ:\n", + " return True\n", + " return False\n", + "\n", + "if need_download_modules():\n", + " print(\"โš™๏ธ Downloading modules...\")\n", + " os.system('mkdir -p features')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/articles.py')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/customers.py')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/transactions.py')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/ranking.py') \n", + " print('โœ… Done!')\n", + "else:\n", + " print(\"Local environment\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "try:\n", + " from features.articles import prepare_articles\n", + " from features.customers import prepare_customers\n", + " from features.transactions import prepare_transactions\n", + " from features.ranking import compute_ranking_dataset\n", + "except ImportError:\n", + " print(\"โš™๏ธ Downloading modules...\")\n", + " os.system('mkdir -p features')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/articles.py')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/customers.py')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/transactions.py')\n", + " os.system('cd features && wget https://raw.githubusercontent.com/logicalclocks/hopsworks-tutorials/master/advanced_tutorials/recommender-system/features/ranking.py') \n", + " print('โœ… Done!')\n", + " from features.articles import prepare_articles\n", + " from features.customers import prepare_customers\n", + " from features.transactions import prepare_transactions\n", + " from features.ranking import compute_ranking_dataset " + ] + }, { "cell_type": "code", "execution_count": null, @@ -43,12 +94,7 @@ "import numpy as np\n", "\n", "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration\n", - "\n", - "from features.articles import prepare_articles\n", - "from features.customers import prepare_customers\n", - "from features.transactions import prepare_transactions\n", - "from features.ranking import compute_ranking_dataset " + "from great_expectations.core import ExpectationSuite, ExpectationConfiguration" ] }, { @@ -75,31 +121,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ๐Ÿ—„๏ธ Read Articles Data\n", - "\n", - "The **article_id** and **product_code** serve different purposes in the context of H&M's product database:\n", - "\n", - "- **Article ID**: This is a unique identifier assigned to each individual article within the database. It is typically used for internal tracking and management purposes. Each distinct item or variant of a product (e.g., different sizes or colors) would have its own unique article_id.\n", - "\n", - "- **Product Code**: This is also a unique identifier, but it is associated with a specific product or style rather than individual articles. It represents a broader category or type of product within H&M's inventory. Multiple articles may share the same product code if they belong to the same product line or style.\n", - "\n", - "While both are unique identifiers, the article_id is specific to individual items, whereas the product_code represents a broader category or style of product.\n", - "\n", - "Here is an example:\n", - "\n", - "**Product: Basic T-Shirt**\n", - "\n", - "- **Product Code:** TS001\n", - "\n", - "- **Article IDs:**\n", - " - Article ID: 1001 (Size: Small, Color: White)\n", - " - Article ID: 1002 (Size: Medium, Color: White)\n", - " - Article ID: 1003 (Size: Large, Color: White)\n", - " - Article ID: 1004 (Size: Small, Color: Black)\n", - " - Article ID: 1005 (Size: Medium, Color: Black)\n", - "\n", - "In this example, \"TS001\" is the product code for the basic t-shirt style. Each variant of this t-shirt (e.g., different sizes and colors) has its own unique article_id.\n", - "\n" + "## ๐Ÿ—„๏ธ Read Articles Data" ] }, { @@ -200,7 +222,7 @@ "metadata": {}, "outputs": [], "source": [ - "trans_df = pd.read_parquet('https://repo.hops.works/dev/jdowling/transactions_train.parquet')[:1_000_000]\n", + "trans_df = pd.read_parquet('https://repo.hops.works/dev/jdowling/transactions_train.parquet')[:600000]\n", "print(trans_df.shape)\n", "trans_df.head(3)" ] @@ -223,7 +245,7 @@ "source": [ "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿญ Transactions Feature Engineering\n", "\n", - "The time of the year a purchase was made should be a strong predictor, as seasonality plays a big factor in fashion purchases. Here, you will use the month of the purchase as a feature. Since this is a cyclical feature (January is as close to December as it is to February), you'll map each month to the unit circle using sine and cosine." + "The time of the year a purchase was made should be a strong predictor, as seasonality plays a big factor in fashion purchases. Here, we will use the month of the purchase as a feature. Since this is a cyclical feature (January is as close to December as it is to February), we'll map each month to the unit circle using sine and cosine." ] }, { @@ -249,7 +271,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You can see that you have a large dataset. For the sake of the tutorial, you will use a small subset of this dataset, which you generate by sampling 25'000 customers and using their transactions." + "We can see that we have a large dataset. For the sake of the tutorial, we will use a small subset of this dataset, which we generate by sampling 25'000 customers and using their transactions." ] }, { @@ -410,14 +432,14 @@ "\n", "A [feature group](https://docs.hopsworks.ai/feature-store-api/latest/generated/feature_group/) can be seen as a collection of conceptually related features.\n", "\n", - "Before you can create a feature group you need to connect to your feature store." + "Before we can create a feature group we need to connect to our feature store." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "To create a feature group you need to give it a name and specify a primary key. It is also good to provide a description of the contents of the feature group." + "To create a feature group we need to give it a name and specify a primary key. It is also good to provide a description of the contents of the feature group." ] }, { @@ -440,9 +462,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here you have also set `online_enabled=True`, which enables low latency access to the data. A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", + "Here we have also set `online_enabled=True`, which enables low latency access to the data. A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", "\n", - "At this point, you have only specified some metadata for the feature group. It does not store any data or even have a schema defined for the data. To make the feature group persistent you populate it with its associated data using the `insert` method." + "At this point, we have only specified some metadata for the feature group. It does not store any data or even have a schema defined for the data. To make the feature group persistent we populate it with its associated data using the `save` function." ] }, { @@ -451,7 +473,10 @@ "metadata": {}, "outputs": [], "source": [ - "customers_fg.insert(customers_df)" + "customers_fg.insert(\n", + " customers_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { @@ -493,7 +518,10 @@ " online_enabled=True,\n", " expectation_suite=expectation_suite_articles,\n", ")\n", - "articles_fg.insert(articles_df)" + "articles_fg.insert(\n", + " articles_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { @@ -550,7 +578,7 @@ " expectation_suite=expectation_suite_transactions,\n", ")\n", "trans_fg.insert(\n", - " trans_df,\n", + " trans_df, \n", " write_options={\"wait_for_job\": True},\n", ")" ] @@ -585,21 +613,7 @@ "metadata": {}, "outputs": [], "source": [ - "ranking_df = compute_ranking_dataset(\n", - " trans_fg, \n", - " articles_fg, \n", - " customers_fg,\n", - ")\n", - "ranking_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ranking_df.label.value_counts()" + "ranking_df = compute_ranking_dataset(trans_fg, articles_fg, customers_fg)" ] }, { @@ -615,7 +629,10 @@ " primary_key=[\"customer_id\", \"article_id\"], \n", " parents=[articles_fg, customers_fg, trans_fg],\n", ")\n", - "rank_fg.insert(ranking_df)" + "rank_fg.insert(\n", + " ranking_df,\n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { @@ -670,7 +687,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python", "language": "python", "name": "python3" }, @@ -684,9 +701,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.11" } }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/advanced_tutorials/recommender-system/2_train_retrieval_model.ipynb b/advanced_tutorials/recommender-system/2_train_retrieval_model.ipynb index 98cf58b0..b92f51fc 100644 --- a/advanced_tutorials/recommender-system/2_train_retrieval_model.ipynb +++ b/advanced_tutorials/recommender-system/2_train_retrieval_model.ipynb @@ -6,9 +6,9 @@ "source": [ "## ๐Ÿงฌ Train Retrieval Model \n", "\n", - "In this notebook, you will train a retrieval model that will be able to quickly generate a small subset of candidate items from a large collection of items. Your model will be based on the *two-tower architecture*, which embeds queries and candidates (keys) into a shared low-dimensional vector space. Here, a query consists of features of a customer and a transaction (e.g. timestamp of the purchase), whereas a candidate consists of features of a particular item. All queries will have a user ID and all candidates will have an item ID, and the model will be trained such that the embedding of a user will be close to all the embeddings of items the user has previously bought.\n", + "In this notebook, we will train a retrieval model that will be able to quickly generate a small subset of candidate items from a large collection of items. Our model will be based on the two-tower architecture, which embeds queries and candidates (keys) into a shared low-dimensional vector space. Here, a query consists of features of a customer and a transaction (e.g. timestamp of the purchase), whereas a candidate consists of features of a particular item. All queries will have a user ID and all candidates will have an item ID, and the model will be trained such that the embedding of a user will be close to all the embeddings of items the user has previously bought.\n", "\n", - "After training the model you will save and upload its components to the Hopsworks Model Registry.\n", + "After training the model we will save and upload its components to the Hopsworks Model Registry.\n", "\n", "Let's go ahead and load the data." ] @@ -27,9 +27,7 @@ "outputs": [], "source": [ "import tensorflow as tf\n", - "from tensorflow.keras.layers import StringLookup, Normalization\n", - "\n", - "import tensorflow_recommenders as tfrs\n", + "from tensorflow.keras.layers.experimental.preprocessing import StringLookup, Normalization\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')" @@ -61,7 +59,7 @@ "source": [ "## ๐Ÿ”ช Feature Selection \n", "\n", - "First, you'll load the feature groups you created in the previous tutorial." + "First, we'll load the feature groups we created in the previous tutorial." ] }, { @@ -88,7 +86,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You'll need to join these three data sources to make the data compatible with out retrieval model. Recall that each row in the `transactions` feature group relates information about which customer bought which item. You'll join this feature group with the `customers` and `articles` feature groups to inject customer and item features into each row." + "We'll need to join these three data sources to make the data compatible with out retrieval model. Recall that each row in the `transactions` feature group relates information about which customer bought which item. We'll join this feature group with the `customers` and `articles` feature groups to inject customer and item features into each row." ] }, { @@ -97,13 +95,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = trans_fg.select([\"customer_id\", \"article_id\", \"t_dat\", \"price\", \"month_sin\", \"month_cos\"])\\\n", + "query = trans_fg.select([\"customer_id\", \"article_id\", \"t_dat\", \"price\", \"month_sin\", \"month_cos\"])\\\n", " .join(customers_fg.select([\"age\", \"club_member_status\", \"age_group\"]), on=\"customer_id\")\\\n", - " .join(articles_fg.select([\"garment_group_name\", \"index_group_name\"]), on=\"article_id\")\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + " .join(articles_fg.select([\"garment_group_name\", \"index_group_name\"]), on=\"article_id\")" ] }, { @@ -123,7 +117,7 @@ "source": [ "feature_view = fs.get_or_create_feature_view(\n", " name='retrieval',\n", - " query=selected_features,\n", + " query=query,\n", " version=1,\n", ")" ] @@ -159,19 +153,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You will train your retrieval model with a subset of features.\n", + "We will train our retrieval model with a subset of features.\n", "\n", - "For the query embedding you will use:\n", + "For the query embedding we will use:\n", "- `customer_id`: ID of the customer.\n", "- `age`: age of the customer at the time of purchase.\n", "- `month_sin`, `month_cos`: time of year the purchase was made.\n", "\n", - "For the candidate embedding you will use:\n", + "For the candidate embedding we will use:\n", "- `article_id`: ID of the item.\n", "- `garment_group_name`: type of garment.\n", "- `index_group_name`: menswear/ladieswear etc." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_df[\"article_id\"] = train_df[\"article_id\"].astype(str) # to be removed\n", + "val_df[\"article_id\"] = val_df[\"article_id\"].astype(str) # to be removed" + ] + }, { "cell_type": "code", "execution_count": null, @@ -182,7 +186,7 @@ "candidate_features = [\"article_id\", \"garment_group_name\", \"index_group_name\"]\n", "\n", "def df_to_ds(df):\n", - " return tf.data.Dataset.from_tensor_slices({col: df[col] for col in df})\n", + " return tf.data.Dataset.from_tensor_slices({col : df[col] for col in df})\n", "\n", "BATCH_SIZE = 2048\n", "train_ds = df_to_ds(train_df).batch(BATCH_SIZE).cache().shuffle(BATCH_SIZE*10)\n", @@ -193,7 +197,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You will need a list of user and item IDs when you initialize your embeddings." + "You will need a list of user and item IDs when we initialize our embeddings." ] }, { @@ -202,15 +206,12 @@ "metadata": {}, "outputs": [], "source": [ - "# Retrieve unique customer IDs and article IDs from the training dataset\n", "user_id_list = train_df[\"customer_id\"].unique().tolist()\n", "item_id_list = train_df[\"article_id\"].unique().tolist()\n", "\n", - "# Retrieve unique garment group names and index group names from the training dataset\n", "garment_group_list = train_df[\"garment_group_name\"].unique().tolist()\n", "index_group_list = train_df[\"index_group_name\"].unique().tolist()\n", "\n", - "# Print the number of transactions, number of users, number of items, and unique garment group names\n", "print(f\"Number of transactions: {len(train_df):,}\")\n", "print(f\"Number of users: {len(user_id_list):,}\")\n", "print(f\"Number of items: {len(item_id_list):,}\")\n", @@ -224,10 +225,10 @@ "## ๐Ÿฐ Two Tower Model \n", "\n", "The two tower model consist of two models:\n", - "- Query model: Generates a query representation given user and transaction features.\n", - "- Candidate model: Generates an item representation given item features.\n", + "- Query model: generates a query representation given user and transaction features.\n", + "- Candidate model: generates an item representation given item features.\n", "\n", - "**Both models produce embeddings that live in the same embedding space**. You let this space be low-dimensional to prevent overfitting on the training data. (Otherwise, the model might simply memorize previous purchases, which makes it recommend items customers already have bought)." + "Both models produce embeddings that live in the same embedding space. We let this space be low-dimensional to prevent overfitting on the training data. (Otherwise, the model might simply memorize previous purchases, which makes it recommend items customers already have bought.)" ] }, { @@ -243,7 +244,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You start with creating the query model." + "We start with creating the query model." ] }, { @@ -263,7 +264,7 @@ " mask_token=None\n", " ),\n", " tf.keras.layers.Embedding(\n", - " # You add an additional embedding to account for unknown tokens.\n", + " # We add an additional embedding to account for unknown tokens.\n", " len(user_id_list) + 1,\n", " EMB_DIM\n", " )\n", @@ -303,7 +304,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The candidate model is very similar to the query model. A difference is that it has two categorical features as input, which you one-hot encode." + "The candidate model is very similar to the query model. A difference is that it has two categorical features as input, which we one-hot encode." ] }, { @@ -323,20 +324,14 @@ " mask_token=None\n", " ),\n", " tf.keras.layers.Embedding(\n", - " # You add an additional embedding to account for unknown tokens.\n", + " # We add an additional embedding to account for unknown tokens.\n", " len(item_id_list) + 1,\n", " EMB_DIM\n", " )\n", " ])\n", - " # Converts strings into integer indices (scikit-learn LabelEncoder analog)\n", - " self.garment_group_tokenizer = StringLookup(\n", - " vocabulary=garment_group_list, \n", - " mask_token=None,\n", - " )\n", - " self.index_group_tokenizer = StringLookup(\n", - " vocabulary=index_group_list, \n", - " mask_token=None,\n", - " )\n", + "\n", + " self.garment_group_tokenizer = StringLookup(vocabulary=garment_group_list, mask_token=None)\n", + " self.index_group_tokenizer = StringLookup(vocabulary=index_group_list, mask_token=None)\n", "\n", " self.fnn = tf.keras.Sequential([\n", " tf.keras.layers.Dense(EMB_DIM, activation=\"relu\"),\n", @@ -346,18 +341,18 @@ " def call(self, inputs):\n", " garment_group_embedding = tf.one_hot(\n", " self.garment_group_tokenizer(inputs[\"garment_group_name\"]),\n", - " len(garment_group_list),\n", + " len(garment_group_list)\n", " )\n", "\n", " index_group_embedding = tf.one_hot(\n", " self.index_group_tokenizer(inputs[\"index_group_name\"]),\n", - " len(index_group_list),\n", + " len(index_group_list)\n", " )\n", "\n", " concatenated_inputs = tf.concat([\n", " self.item_embedding(inputs[\"article_id\"]),\n", " garment_group_embedding,\n", - " index_group_embedding,\n", + " index_group_embedding\n", " ], axis=1)\n", "\n", " outputs = self.fnn(concatenated_inputs)\n", @@ -372,7 +367,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You will evaluate the two tower model using the *top-100 accuracy*. That is, for each transaction in the validation data you will generate the associated query embedding and retrieve the set of the 100 items that are closest to this query in the embedding space. The top-100 accuracy measures how often the item that was actually bought is part of this subset. To evaluate this, you create a dataset of all unique items in the training data." + "You will evaluate the two tower model using the *top-100 accuracy*. That is, for each transaction in the validation data we will generate the associated query embedding and retrieve the set of the 100 items that are closest to this query in the embedding space. The top-100 accuracy measures how often the item that was actually bought is part of this subset. To evaluate this, we create a dataset of all unique items in the training data." ] }, { @@ -390,7 +385,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With this in place, you can finally create your two tower model." + "With this in place, we can finally create our two tower model." ] }, { @@ -399,6 +394,8 @@ "metadata": {}, "outputs": [], "source": [ + "import tensorflow_recommenders as tfrs\n", + "\n", "class TwoTowerModel(tf.keras.Model):\n", " def __init__(self, query_model, item_model):\n", " super().__init__()\n", @@ -478,13 +475,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Create a TwoTowerModel with the specified query_model and item_model\n", - "model = TwoTowerModel(query_model, item_model)\n", + "import tensorflow_addons as tfa\n", "\n", - "# Define an optimizer using AdamW with a learning rate of 0.01\n", - "optimizer = tf.keras.optimizers.AdamW(weight_decay=0.001, learning_rate=0.01)\n", - "\n", - "# Compile the model using the specified optimizer\n", + "model = TwoTowerModel(query_model, item_model)\n", + "optimizer = tfa.optimizers.AdamW(0.001, learning_rate=0.01)\n", "model.compile(optimizer=optimizer)" ] }, @@ -494,11 +488,7 @@ "metadata": {}, "outputs": [], "source": [ - "model.fit(\n", - " train_ds, \n", - " validation_data=val_ds, \n", - " epochs=5,\n", - ")" + "model.fit(train_ds, validation_data=val_ds, epochs=5)" ] }, { @@ -507,7 +497,7 @@ "source": [ "## ๐Ÿ—„๏ธ Upload Model to Model Registry \n", "\n", - "One of the features in Hopsworks is the model registry. This is where you can store different versions of models and compare their performance. Models from the registry can then be served as API endpoints.\n", + "One of the features in Hopsworks is the model registry. This is where we can store different versions of models and compare their performance. Models from the registry can then be served as API endpoints.\n", "\n", "Let's connect to the model registry using the [HSML library](https://docs.hopsworks.ai/machine-learning-api/latest) from Hopsworks." ] @@ -534,12 +524,10 @@ " @tf.function()\n", " def compute_emb(self, instances):\n", " query_emb = self.query_model(instances)\n", - " return {\n", - " \"customer_id\": instances[\"customer_id\"],\n", - " \"month_sin\": instances[\"month_sin\"],\n", - " \"month_cos\": instances[\"month_cos\"],\n", - " \"query_emb\": query_emb,\n", - " }\n", + " return {\"customer_id\": instances[\"customer_id\"],\n", + " \"month_sin\": instances[\"month_sin\"],\n", + " \"month_cos\": instances[\"month_cos\"],\n", + " \"query_emb\": query_emb}\n", "\n", "# wrap query_model: query_model -> query_model_module\n", "query_model = QueryModelModule(model.query_model)" @@ -551,30 +539,22 @@ "metadata": {}, "outputs": [], "source": [ - "# Define the input specifications for the instances\n", - "instances_spec = {\n", - " 'customer_id': tf.TensorSpec(shape=(None,), dtype=tf.string, name='customer_id'), # Specification for customer IDs\n", - " 'month_sin': tf.TensorSpec(shape=(None,), dtype=tf.float64, name='month_sin'), # Specification for sine of month\n", - " 'month_cos': tf.TensorSpec(shape=(None,), dtype=tf.float64, name='month_cos'), # Specification for cosine of month\n", - " 'age': tf.TensorSpec(shape=(None,), dtype=tf.float64, name='age'), # Specification for age\n", + "instances_spec={\n", + " 'customer_id': tf.TensorSpec(shape=(None,), dtype=tf.string, name='customer_id'),\n", + " 'month_sin': tf.TensorSpec(shape=(None,), dtype=tf.float64, name='month_sin'),\n", + " 'month_cos': tf.TensorSpec(shape=(None,), dtype=tf.float64, name='month_cos'),\n", + " 'age': tf.TensorSpec(shape=(None,), dtype=tf.float64, name='age')\n", "}\n", - "\n", - "# Get the concrete function for the query_model's compute_emb function using the specified input signatures\n", "signatures = query_model.compute_emb.get_concrete_function(instances_spec)\n", "\n", - "# Save the query_model along with the concrete function signatures\n", - "tf.saved_model.save(\n", - " query_model, # The model to save\n", - " \"query_model\", # Path to save the model\n", - " signatures=signatures, # Concrete function signatures to include\n", - ")" + "tf.saved_model.save(query_model, \"query_model\", signatures=signatures)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "First, you need to save our models locally." + "First, we need to save our models locally." ] }, { @@ -583,10 +563,7 @@ "metadata": {}, "outputs": [], "source": [ - "tf.saved_model.save(\n", - " model.item_model, # The model to save\n", - " \"candidate_model\", # Path to save the model\n", - ")" + "tf.saved_model.save(model.item_model, \"candidate_model\")" ] }, { @@ -612,12 +589,12 @@ "query_model_output_schema = Schema([{\n", " \"name\": \"query_embedding\",\n", " \"type\": \"float32\",\n", - " \"shape\": [EMB_DIM],\n", + " \"shape\": [EMB_DIM]\n", "}])\n", "\n", "query_model_schema = ModelSchema(\n", " input_schema=query_model_input_schema,\n", - " output_schema=query_model_output_schema,\n", + " output_schema=query_model_output_schema\n", ")\n", "\n", "query_model_schema.to_dict()" @@ -627,7 +604,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With the schema in place, you can finally register your model." + "With the schema in place, we can finally register our model." ] }, { @@ -636,26 +613,22 @@ "metadata": {}, "outputs": [], "source": [ - "# Sample a query example from the query DataFrame\n", "query_example = query_df.sample().to_dict(\"records\")\n", "\n", - "# Create a tensorflow model for the query_model in the Model Registry \n", "mr_query_model = mr.tensorflow.create_model(\n", - " name=\"query_model\", # Name of the model\n", - " description=\"Model that generates query embeddings from user and transaction features\", # Description of the model\n", - " input_example=query_example, # Example input for the model\n", - " model_schema=query_model_schema, # Schema of the model\n", + " name=\"query_model\",\n", + " description=\"Model that generates query embeddings from user and transaction features\",\n", + " input_example=query_example,\n", + " model_schema=query_model_schema,\n", ")\n", - "\n", - "# Save the query_model to the Model Registry\n", - "mr_query_model.save(\"query_model\") # Path to save the model" + "mr_query_model.save(\"query_model\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Here you have also saved an input example from the training data, which can be helpful for test purposes.\n", + "Here we have also saved an input example from the training data, which can be helpful for test purposes.\n", "\n", "Let's repeat the process with the candidate model." ] @@ -666,35 +639,28 @@ "metadata": {}, "outputs": [], "source": [ - "# Define the input schema for the candidate_model based on item_df\n", "candidate_model_input_schema = Schema(item_df)\n", "\n", - "# Define the output schema for the candidate_model, specifying the shape and type of the output\n", "candidate_model_output_schema = Schema([{\n", - " \"name\": \"candidate_embedding\", # Name of the output feature\n", - " \"type\": \"float32\", # Data type of the output feature\n", - " \"shape\": [EMB_DIM], # Shape of the output feature\n", + " \"name\": \"candidate_embedding\",\n", + " \"type\": \"float32\",\n", + " \"shape\": [EMB_DIM],\n", "}])\n", "\n", - "# Combine the input and output schemas to create the overall model schema for the candidate_model\n", "candidate_model_schema = ModelSchema(\n", - " input_schema=candidate_model_input_schema, # Input schema for the model\n", - " output_schema=candidate_model_output_schema, # Output schema for the model\n", + " input_schema=candidate_model_input_schema,\n", + " output_schema=candidate_model_output_schema\n", ")\n", "\n", - "# Sample a candidate example from the item DataFrame\n", "candidate_example = item_df.sample().to_dict(\"records\")\n", "\n", - "# Create a tensorflow model for the candidate_model in the Model Registry\n", "mr_candidate_model = mr.tensorflow.create_model(\n", - " name=\"candidate_model\", # Name of the model\n", - " description=\"Model that generates candidate embeddings from item features\", # Description of the model\n", - " input_example=candidate_example, # Example input for the model\n", - " model_schema=candidate_model_schema, # Schema of the model\n", + " name=\"candidate_model\",\n", + " description=\"Model that generates candidate embeddings from item features\",\n", + " input_example=candidate_example,\n", + " model_schema=candidate_model_schema,\n", ")\n", - "\n", - "# Save the candidate_model to the Model Registry\n", - "mr_candidate_model.save(\"candidate_model\") # Path to save the model" + "mr_candidate_model.save(\"candidate_model\")" ] }, { @@ -704,13 +670,13 @@ "---\n", "## โฉ๏ธ Next Steps \n", "\n", - "Retrieving the top-k closest candidate embeddings in a brute-force way (computing the distances between the query embedding and all candidate embeddings) is too expensive in a practical setting. In the next notebook, you will compute embeddings and create a feature view which will allow you to retrieve candidates with very low latency." + "Retrieving the top-k closest candidate embeddings in a brute-force way (computing the distances between the query embedding and all candidate embeddings) is too expensive in a practical setting. In the next notebook, we will index the item embeddings using OpenSearch, which will allow us to retrieve candidates with very low latency." ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python", "language": "python", "name": "python3" }, @@ -729,4 +695,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/advanced_tutorials/recommender-system/3_build_index.ipynb b/advanced_tutorials/recommender-system/3_build_index.ipynb new file mode 100644 index 00000000..fe8dd55d --- /dev/null +++ b/advanced_tutorials/recommender-system/3_build_index.ipynb @@ -0,0 +1,372 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Build Index \n", + "\n", + "In this notebook we will build an index for our candidate embeddings. Here we will use OpenSearch, which is natively supported by Hopsworks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐Ÿ“ Imports " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import pprint\n", + "import numpy as np\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import hopsworks\n", + "\n", + "project = hopsworks.login()\n", + "\n", + "fs = project.get_feature_store()\n", + "mr = project.get_model_registry()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐ŸŽฏ Compute Candidate Embeddings \n", + "\n", + "We start by computing candidate embeddings for all items in the training data.\n", + "\n", + "First, we load our candidate model. Recall that we uploaded it to the Hopsworks Model Registry in the previous notebook. If you don't have the model locally you can download it from the Model Registry using the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model = mr.get_model(\n", + " name=\"candidate_model\",\n", + " version=1,\n", + ")\n", + "model_path = model.download()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you already have the model saved locally you can simply replace `model_path` with the path to your model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "candidate_model = tf.saved_model.load(model_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we compute the embeddings of all candidate items that were used to train the retrieval model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "feature_view = fs.get_feature_view(\n", + " name=\"retrieval\", \n", + " version=1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "train_df, val_df, test_df, _, _, _ = feature_view.train_validation_test_split(\n", + " validation_size=0.1, \n", + " test_size=0.1,\n", + " description='Retrieval dataset splits',\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "train_df[\"article_id\"] = train_df[\"article_id\"].astype(str)\n", + "val_df[\"article_id\"] = val_df[\"article_id\"].astype(str)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Get list of input features for the candidate model.\n", + "model_schema = model.model_schema['input_schema']['columnar_schema']\n", + "candidate_features = [feat['name'] for feat in model_schema]\n", + "\n", + "# Get list of unique candidate items.\n", + "item_df = train_df[candidate_features]\n", + "item_df.drop_duplicates(subset=\"article_id\", inplace=True)\n", + "\n", + "item_ds = tf.data.Dataset.from_tensor_slices(\n", + " {col: item_df[col] for col in item_df})\n", + "\n", + "# Compute embeddings for all candidate items.\n", + "candidate_embeddings = item_ds.batch(2048).map(\n", + " lambda x: (x[\"article_id\"], candidate_model(x)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(Strictly speaking, we haven't actually computed the candidate embeddings yet, as the dataset functions are lazily evaluated.)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐Ÿ”ฎ Index Embeddings \n", + "\n", + "Next we index these embeddings. We start by connecting to our project's OpenSearch client using the *hopsworks* library." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from opensearchpy import OpenSearch\n", + "\n", + "opensearch_api = project.get_opensearch_api()\n", + "client = OpenSearch(**opensearch_api.get_default_py_config())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll create an index called `candidate_index`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "index_name = opensearch_api.get_project_index(\"candidate_index\")\n", + "\n", + "emb_dim = 16 # candidate_model.layers[-1].output.shape[-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we use the HNSW (Hierarchical Navigable Small World) data structure, which can be thought of as a skip list for graphs.\n", + "\n", + "See the [OpenSearch documentation](https://opensearch.org/docs/latest/search-plugins/knn/knn-index) for more detailed information about parameters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# To delete the indices\n", + "# response = client.indices.delete(\n", + "# index = index_name\n", + "# )\n", + "# print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Dimensionality of candidate embeddings.\n", + "\n", + "index_body = {\n", + " \"settings\": {\n", + " \"knn\": True,\n", + " \"knn.algo_param.ef_search\": 100,\n", + " },\n", + " \"mappings\": {\n", + " \"properties\": {\n", + " \"my_vector1\": {\n", + " \"type\": \"knn_vector\",\n", + " \"dimension\": emb_dim,\n", + " \"method\": {\n", + " \"name\": \"hnsw\",\n", + " \"space_type\": \"innerproduct\",\n", + " \"engine\": \"faiss\",\n", + " \"parameters\": {\n", + " \"ef_construction\": 256,\n", + " \"m\": 48\n", + " }\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "response = client.indices.create(index_name, body=index_body)\n", + "print(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can finally insert our candidate embeddings." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from opensearchpy.helpers import bulk\n", + "\n", + "actions = []\n", + "for batch in candidate_embeddings:\n", + " item_id_list, embedding_list = batch\n", + " item_id_list = item_id_list.numpy().astype(int)\n", + " embedding_list = embedding_list.numpy()\n", + "\n", + " for item_id, embedding in zip(item_id_list, embedding_list):\n", + " actions.append({\n", + " \"_index\": index_name,\n", + " \"_id\": item_id,\n", + " \"_source\": {\n", + " \"my_vector1\": embedding,\n", + " }\n", + " })\n", + "\n", + "# Bulk insertion.\n", + "bulk(client, actions)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To test that it works we can retrieve the neighbors of a random vector." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "embedding = np.random.rand(emb_dim)\n", + "\n", + "query = {\n", + " \"size\": 10,\n", + " \"query\": {\n", + " \"knn\": {\n", + " \"my_vector1\": {\n", + " \"vector\": embedding,\n", + " \"k\": 10\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "response = client.search(\n", + " body = query,\n", + " index = index_name\n", + ")\n", + "\n", + "pprint.pprint(response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "## โฉ๏ธ Next Steps \n", + "\n", + "At this point we have a recommender system that is able to generate a set of candidate items for a customer. However, many of these could be poor, as the candidate model was trained with only a few subset of the features. In the next notebook, we'll create a ranking dataset to train a *ranking model* to do more fine-grained predictions." + ] + } + ], + "metadata": { + "interpreter": { + "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + }, + "kernelspec": { + "display_name": "Python", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/advanced_tutorials/recommender-system/3_embeddings_creation.ipynb b/advanced_tutorials/recommender-system/3_embeddings_creation.ipynb deleted file mode 100644 index 124eaffb..00000000 --- a/advanced_tutorials/recommender-system/3_embeddings_creation.ipynb +++ /dev/null @@ -1,324 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Build Index \n", - "\n", - "In this notebook you will create a feature group for your candidate embeddings." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import pprint\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐ŸŽฏ Compute Candidate Embeddings \n", - "\n", - "You start by computing candidate embeddings for all items in the training data.\n", - "\n", - "First, you load your candidate model. Recall that you uploaded it to the Hopsworks Model Registry in the previous notebook. If you don't have the model locally you can download it from the Model Registry using the following code:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = mr.get_model(\n", - " name=\"candidate_model\",\n", - " version=1,\n", - ")\n", - "model_path = model.download()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you already have the model saved locally you can simply replace `model_path` with the path to your model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "candidate_model = tf.saved_model.load(model_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next you compute the embeddings of all candidate items that were used to train the retrieval model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "feature_view = fs.get_feature_view(\n", - " name=\"retrieval\", \n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "train_df, val_df, test_df, _, _, _ = feature_view.train_validation_test_split(\n", - " validation_size=0.1, \n", - " test_size=0.1,\n", - " description='Retrieval dataset splits',\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "train_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the list of input features for the candidate model from the model schema\n", - "model_schema = model.model_schema['input_schema']['columnar_schema']\n", - "candidate_features = [feat['name'] for feat in model_schema]\n", - "\n", - "# Select the candidate features from the training DataFrame\n", - "item_df = train_df[candidate_features]\n", - "\n", - "# Drop duplicate rows based on the 'article_id' column to get unique candidate items\n", - "item_df.drop_duplicates(subset=\"article_id\", inplace=True)\n", - "\n", - "item_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create a TensorFlow dataset from the item DataFrame\n", - "item_ds = tf.data.Dataset.from_tensor_slices(\n", - " {col: item_df[col] for col in item_df})\n", - "\n", - "# Compute embeddings for all candidate items using the candidate_model\n", - "candidate_embeddings = item_ds.batch(2048).map(\n", - " lambda x: (x[\"article_id\"], candidate_model(x))\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> Strictly speaking, you haven't actually computed the candidate embeddings yet, as the dataset functions are lazily evaluated." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## โš™๏ธ Data Preparation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Concatenate all article IDs and embeddings from the candidate_embeddings dataset\n", - "all_article_ids = tf.concat([batch[0] for batch in candidate_embeddings], axis=0)\n", - "all_embeddings = tf.concat([batch[1] for batch in candidate_embeddings], axis=0)\n", - "\n", - "# Convert tensors to numpy arrays\n", - "all_article_ids_np = all_article_ids.numpy().astype(int)\n", - "all_embeddings_np = all_embeddings.numpy()\n", - "\n", - "# Convert numpy arrays to lists\n", - "items_ids_list = all_article_ids_np.tolist()\n", - "embeddings_list = all_embeddings_np.tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create a DataFrame\n", - "data_emb = pd.DataFrame({\n", - " 'article_id': items_ids_list, \n", - " 'embeddings': embeddings_list,\n", - "})\n", - "\n", - "data_emb.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation \n", - "\n", - "Now you are ready to create a feature group for your candidate embeddings.\n", - "\n", - "To begin with, you need to create your Embedding Index where you will specify the name of the embeddings feature and the embeddings length.\n", - "Then you attach this index to the FG." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from hsfs import embedding\n", - "\n", - "# Create the Embedding Index\n", - "emb = embedding.EmbeddingIndex()\n", - "\n", - "emb.add_embedding(\n", - " \"embeddings\", # Embeddings feature name\n", - " len(data_emb[\"embeddings\"].iloc[0]), # Embeddings length\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'candidate_embeddings_fg' feature group\n", - "candidate_embeddings_fg = fs.get_or_create_feature_group(\n", - " name=\"candidate_embeddings_fg\",\n", - " embedding_index=emb, # Specify the Embedding Index\n", - " primary_key=['article_id'],\n", - " version=1,\n", - " description='Embeddings for each article',\n", - " online_enabled=True,\n", - ")\n", - "\n", - "candidate_embeddings_fg.insert(data_emb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature View Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'candidate_embeddings' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name=\"candidate_embeddings\",\n", - " version=1,\n", - " description='Embeddings of each article',\n", - " query=candidate_embeddings_fg.select([\"article_id\"]),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## โฉ๏ธ Next Steps \n", - "\n", - "At this point you have a recommender system that is able to generate a set of candidate items for a customer. However, many of these could be poor, as the candidate model was trained with only a few subset of the features. In the next notebook, you'll create a ranking dataset to train a *ranking model* to do more fine-grained predictions." - ] - } - ], - "metadata": { - "interpreter": { - "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/advanced_tutorials/recommender-system/4_train_ranking_model.ipynb b/advanced_tutorials/recommender-system/4_train_ranking_model.ipynb index e35de9ce..d557df57 100644 --- a/advanced_tutorials/recommender-system/4_train_ranking_model.ipynb +++ b/advanced_tutorials/recommender-system/4_train_ranking_model.ipynb @@ -6,7 +6,7 @@ "source": [ "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Train Ranking Model \n", "\n", - "In this notebook, you will train a ranking model using gradient boosted trees. " + "In this notebook, we will train a ranking model using gradient boosted trees. " ] }, { @@ -88,12 +88,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features\n", - "selected_features_customers = customers_fg.select_all()\n", - "\n", + "customers_query = customers_fg.select_all()\n", "fs.get_or_create_feature_view( \n", " name='customers',\n", - " query=selected_features_customers,\n", + " query=customers_query,\n", " version=1,\n", ")" ] @@ -104,12 +102,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features\n", - "selected_features_articles = articles_fg.select_all()\n", - "\n", + "articles_query = articles_fg.select_all()\n", "fs.get_or_create_feature_view(\n", " name='articles',\n", - " query=selected_features_articles,\n", + " query=articles_query,\n", " version=1,\n", ")" ] @@ -120,13 +116,22 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features\n", - "selected_features_ranking = rank_fg.select_except([\"customer_id\", \"article_id\"])\n", - "\n", + "rank_fg = fs.get_or_create_feature_group(\n", + " name=\"ranking\",\n", + " version=1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ranking_query = rank_fg.select_except([\"customer_id\", \"article_id\"])\n", "feature_view_ranking = fs.get_or_create_feature_view(\n", " name='ranking',\n", - " query=selected_features_ranking,\n", - " labels=[\"label\"],\n", + " query=ranking_query,\n", + " labels = [\"label\"],\n", " version=1,\n", ")" ] @@ -149,16 +154,7 @@ " description='Ranking training dataset',\n", ")\n", "\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "y_train.head(3)" + "#X_train, X_val, y_train, y_val = feature_view_ranking.get_train_test_split(1)" ] }, { @@ -194,10 +190,7 @@ " use_best_model=True,\n", ")\n", "\n", - "model.fit(\n", - " pool_train, \n", - " eval_set=pool_val,\n", - ")" + "model.fit(pool_train, eval_set=pool_val)" ] }, { @@ -206,7 +199,7 @@ "source": [ "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Model Validation \n", "\n", - "Next, you'll evaluate how well the model performs on the validation data." + "Next, we'll evaluate how well the model performs on the validation data." ] }, { @@ -233,7 +226,7 @@ "source": [ "It can be seen that the model has a low F1-score on the positive class (higher is better). The performance could potentially be improved by adding more features to the dataset, e.g. image embeddings.\n", "\n", - "Let's see which features your model considers important." + "Let's see which features our model considers important." ] }, { @@ -267,7 +260,7 @@ "source": [ "It can be seen that the model places high importance on user and item embedding features. Consequently, better trained embeddings could yield a better ranking model.\n", "\n", - "Finally, you'll save your model." + "Finally, we'll save our model." ] }, { @@ -285,7 +278,7 @@ "source": [ "### ๐Ÿ’พ Upload Model to Model Registry \n", "\n", - "You'll upload the model to the Hopsworks Model Registry." + "We'll upload the model to the Hopsworks Model Registry." ] }, { @@ -294,7 +287,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Connect to Hopsworks Model Registry\n", + "# connect to Hopsworks Model Registry\n", "mr = project.get_model_registry()" ] }, @@ -329,7 +322,7 @@ "---\n", "## โฉ๏ธ Next Steps \n", "\n", - "Now you have trained both a retrieval and a ranking model, which will allow you to generate recommendations for users. In the next notebook, you'll take a look at how you can deploy these models with the `HSML` library." + "Now we have trained both a retrieval and a ranking model, which will allow us to generate recommendations for users. In the next notebook, we'll take a look at how we can deploy these models with the `HSML` library." ] } ], @@ -338,7 +331,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python", "language": "python", "name": "python3" }, @@ -352,9 +345,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.11" } }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/advanced_tutorials/recommender-system/5_create_deployments.ipynb b/advanced_tutorials/recommender-system/5_create_deployments.ipynb index 6d73b3f2..fcd66e2d 100644 --- a/advanced_tutorials/recommender-system/5_create_deployments.ipynb +++ b/advanced_tutorials/recommender-system/5_create_deployments.ipynb @@ -6,7 +6,7 @@ "source": [ "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Create Deployment \n", "\n", - "In this notebook, you'll create a deployment for your recommendation system.\n", + "In this notebook, we'll create a deployment for our recommendation system.\n", "\n", "**NOTE Currently the transformer scripts are not implemented.**" ] @@ -51,7 +51,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Connect to Hopsworks Model Registry\n", + "# connect to Hopsworks Model Registry\n", "mr = project.get_model_registry()\n", "\n", "dataset_api = project.get_dataset_api()" @@ -70,7 +70,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "You start by deploying your ranking model. Since it is a CatBoost model you need to implement a `Predict` class that tells Hopsworks how to load the model and how to use it." + "Next, we'll deploy our ranking model. Since it is a CatBoost model we need to implement a `Predict` class that tells Hopsworks how to load the model and how to use it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ranking_model = mr.get_best_model(\"ranking_model\", \"fscore\", \"max\")" ] }, { @@ -79,11 +88,6 @@ "metadata": {}, "outputs": [], "source": [ - "ranking_model = mr.get_best_model(\n", - " name=\"ranking_model\", \n", - " metric=\"fscore\", \n", - " direction=\"max\",\n", - ")\n", "ranking_model" ] }, @@ -107,122 +111,97 @@ "class Transformer(object):\n", " \n", " def __init__(self):\n", - " # Connect to Hopsworks\n", + " # connect to Hopsworks\n", " project = hopsworks.connection().get_project()\n", - " self.fs = project.get_feature_store()\n", " \n", - " # Retrieve the 'articles' feature view\n", - " self.articles_fv = self.fs.get_feature_view(\n", - " name=\"articles\", \n", - " version=1,\n", - " )\n", - " \n", - " # Get list of feature names for articles\n", + " # get feature views\n", + " self.fs = project.get_feature_store()\n", + " self.articles_fv = self.fs.get_feature_view(\"articles\", 1)\n", " self.articles_features = [feat.name for feat in self.articles_fv.schema]\n", - " \n", - " # Retrieve the 'customers' feature view\n", - " self.customer_fv = self.fs.get_feature_view(\n", - " name=\"customers\", \n", - " version=1,\n", - " )\n", - "\n", - " # Retrieve the 'candidate_embeddings' feature view\n", - " self.candidate_index = self.fs.get_feature_view(\n", - " name=\"candidate_embeddings\", \n", - " version=1,\n", - " )\n", - "\n", - " # Retrieve ranking model\n", + " self.customer_fv = self.fs.get_feature_view(\"customers\", 1)\n", + "\n", + " # create opensearch client\n", + " opensearch_api = project.get_opensearch_api()\n", + " self.os_client = OpenSearch(**opensearch_api.get_default_py_config())\n", + " self.candidate_index = opensearch_api.get_project_index(\"candidate_index\")\n", + "\n", + " # get ranking model feature names\n", " mr = project.get_model_registry()\n", - " model = mr.get_model(\n", - " name=\"ranking_model\", \n", - " version=1,\n", - " )\n", - " \n", - " # Extract input schema from the model\n", + " model = mr.get_model(\"ranking_model\", 1)\n", " input_schema = model.model_schema[\"input_schema\"][\"columnar_schema\"]\n", " \n", - " # Get the names of features expected by the ranking model\n", " self.ranking_model_feature_names = [feat[\"name\"] for feat in input_schema]\n", " \n", " def preprocess(self, inputs):\n", - " # Extract the input instance\n", " inputs = inputs[\"instances\"][0]\n", - " \n", - " # Extract customer_id from inputs\n", " customer_id = inputs[\"customer_id\"]\n", " \n", - " # Search for candidate items\n", - " neighbors = self.candidate_index.find_neighbors(\n", - " inputs[\"query_emb\"], \n", - " k=100,\n", - " )\n", - " neighbors = [neighbor[0] for neighbor in neighbors]\n", + " # search for candidates\n", + " hits = self.search_candidates(inputs[\"query_emb\"], k=100)\n", " \n", - " # Get IDs of items already bought by the customer\n", + " # get already bought items\n", " already_bought_items_ids = self.fs.sql(\n", " f\"SELECT article_id from transactions_1 WHERE customer_id = '{customer_id}'\"\n", " ).values.reshape(-1).tolist()\n", " \n", - " # Filter candidate items to exclude those already bought by the customer\n", - " item_id_list = [\n", - " str(item_id) \n", - " for item_id \n", - " in neighbors \n", - " if str(item_id) \n", - " not in already_bought_items_ids\n", - " ]\n", + " # build dataframes\n", + " item_id_list = []\n", + " item_emb_list = []\n", + " exclude_set = set(already_bought_items_ids)\n", + " for el in hits:\n", + " item_id = str(el[\"_id\"])\n", + " if item_id in exclude_set:\n", + " continue\n", + " item_emb = el[\"_source\"][\"my_vector1\"]\n", + " item_id_list.append(item_id)\n", + " item_emb_list.append(item_emb)\n", " item_id_df = pd.DataFrame({\"article_id\" : item_id_list})\n", + " #item_emb_df = pd.DataFrame(item_emb_list).add_prefix(\"item_emb_\")\n", " \n", - " # Retrieve Article data for candidate items\n", - " articles_data = [\n", - " self.articles_fv.get_feature_vector({\"article_id\": item_id}) \n", - " for item_id \n", - " in item_id_list\n", - " ]\n", - "\n", - " articles_df = pd.DataFrame(\n", - " data=articles_data, \n", - " columns=self.articles_features,\n", - " )\n", + " # get articles feature vectors\n", + " articles_data = []\n", + " for article_id in item_id_list:\n", + " try:\n", + " article_features = self.articles_fv.get_feature_vector({\"article_id\" : article_id})\n", + " articles_data.append(article_features)\n", + " except:\n", + " logging.info(\"-- not found:\" + str(article_id))\n", + " pass # article might have been removed from catalogue\n", + " \n", + " articles_df = pd.DataFrame(data=articles_data, columns=self.articles_features)\n", " \n", - " # Join candidate items with their features\n", - " ranking_model_inputs = item_id_df.merge(\n", - " articles_df, \n", - " on=\"article_id\", \n", - " how=\"inner\",\n", - " ) \n", + " # join candidates with item features\n", + " ranking_model_inputs = item_id_df.merge(articles_df, on=\"article_id\", how=\"inner\")\n", " \n", - " # Add customer features\n", - " customer_features = self.customer_fv.get_feature_vector(\n", - " {\"customer_id\": customer_id}, \n", - " return_type=\"pandas\",\n", - " )\n", + " # add customer features\n", + " customer_features = self.customer_fv.get_feature_vector({\"customer_id\": customer_id}, return_type=\"pandas\")\n", " ranking_model_inputs[\"age\"] = customer_features.age.values[0] \n", " ranking_model_inputs[\"month_sin\"] = inputs[\"month_sin\"]\n", " ranking_model_inputs[\"month_cos\"] = inputs[\"month_cos\"]\n", - " \n", - " # Select only the features required by the ranking model\n", " ranking_model_inputs = ranking_model_inputs[self.ranking_model_feature_names]\n", " \n", - " return { \n", - " \"inputs\" : [{\"ranking_features\": ranking_model_inputs.values.tolist(), \"article_ids\": item_id_list}]\n", - " }\n", + " return { \"inputs\" : [{\"ranking_features\": ranking_model_inputs.values.tolist(), \"article_ids\": item_id_list} ]}\n", "\n", " def postprocess(self, outputs):\n", - " # Extract predictions from the outputs\n", " preds = outputs[\"predictions\"]\n", - " \n", - " # Merge prediction scores and corresponding article IDs into a list of tuples\n", - " ranking = list(zip(preds[\"scores\"], preds[\"article_ids\"]))\n", - " \n", - " # Sort the ranking list by score in descending order\n", - " ranking.sort(reverse=True)\n", - " \n", - " # Return the sorted ranking list\n", - " return { \n", - " \"ranking\": ranking,\n", - " }" + " ranking = list(zip(preds[\"scores\"], preds[\"article_ids\"])) # merge lists\n", + " ranking.sort(reverse=True) # sort by score (descending)\n", + " return { \"ranking\": ranking }\n", + " \n", + " def search_candidates(self, query_emb, k=100):\n", + " k = 100\n", + " query = {\n", + " \"size\": k,\n", + " \"query\": {\n", + " \"knn\": {\n", + " \"my_vector1\": {\n", + " \"vector\": query_emb,\n", + " \"k\": k\n", + " }\n", + " }\n", + " }\n", + " }\n", + " return self.os_client.search(body = query, index = self.candidate_index)[\"hits\"][\"hits\"]" ] }, { @@ -231,19 +210,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Copy transformer file into Hopsworks File System \n", - "uploaded_file_path = dataset_api.upload(\n", - " \"ranking_transformer.py\", # File name to be uploaded\n", - " \"Resources\", # Destination directory in Hopsworks File System \n", - " overwrite=True, # Overwrite the file if it already exists\n", - ") \n", - "\n", - "# Construct the path to the uploaded transformer script\n", - "transformer_script_path = os.path.join(\n", - " \"/Projects\", # Root directory for projects in Hopsworks\n", - " project.name, # Name of the current project\n", - " uploaded_file_path, # Path to the uploaded file within the project\n", - ")" + "# copy transformer file into Hopsworks File System\n", + "uploaded_file_path = dataset_api.upload(\"ranking_transformer.py\", \"Resources\", overwrite=True)\n", + "transformer_script_path = os.path.join(\"/Projects\", project.name, uploaded_file_path)" ] }, { @@ -266,24 +235,15 @@ " self.model = joblib.load(os.environ[\"ARTIFACT_FILES_PATH\"] + \"/ranking_model.pkl\")\n", "\n", " def predict(self, inputs):\n", - " # Extract ranking features and article IDs from the inputs\n", " features = inputs[0].pop(\"ranking_features\")\n", " article_ids = inputs[0].pop(\"article_ids\")\n", " \n", - " # Log the extracted features\n", " logging.info(\"predict -> \" + str(features))\n", "\n", - " # Predict probabilities for the positive class\n", " scores = self.model.predict_proba(features).tolist()\n", - " \n", - " # Get scores of positive class\n", - " scores = np.asarray(scores)[:,1].tolist() \n", + " scores = np.asarray(scores)[:,1].tolist() # get scores of positive class\n", "\n", - " # Return the predicted scores along with the corresponding article IDs\n", - " return {\n", - " \"scores\": scores, \n", - " \"article_ids\": article_ids,\n", - " }" + " return { \"scores\": scores, \"article_ids\": article_ids }" ] }, { @@ -292,26 +252,16 @@ "metadata": {}, "outputs": [], "source": [ - "# Upload predictor file to Hopsworks\n", - "uploaded_file_path = dataset_api.upload(\n", - " \"ranking_predictor.py\", \n", - " \"Resources\", \n", - " overwrite=True,\n", - ")\n", - "\n", - "# Construct the path to the uploaded script\n", - "predictor_script_path = os.path.join(\n", - " \"/Projects\", \n", - " project.name, \n", - " uploaded_file_path,\n", - ")" + "# upload predictor file to Hopsworks\n", + "uploaded_file_path = dataset_api.upload(\"ranking_predictor.py\", \"Resources\", overwrite=True)\n", + "predictor_script_path = os.path.join(\"/Projects\", project.name, uploaded_file_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "With that in place, you can finally deploy your model." + "With that in place, we can finally deploy our model." ] }, { @@ -324,13 +274,13 @@ "\n", "ranking_deployment_name = \"rankingdeployment\"\n", "\n", - "# Define transformer\n", + "# define transformer\n", "ranking_transformer=Transformer(\n", " script_file=transformer_script_path, \n", " resources={\"num_instances\": 1},\n", ")\n", "\n", - "# Deploy ranking model\n", + "# deploy ranking model\n", "ranking_deployment = ranking_model.deploy(\n", " name=ranking_deployment_name,\n", " description=\"Deployment that search for item candidates and scores them based on customer metadata\",\n", @@ -346,7 +296,6 @@ "metadata": {}, "outputs": [], "source": [ - "# Start the deployment\n", "ranking_deployment.start()" ] }, @@ -358,20 +307,10 @@ }, "outputs": [], "source": [ - "# Check logs in case of failure\n", + "# #in case of failure\n", "# ranking_deployment.get_logs(component=\"predictor\", tail=200)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def get_top_recommendations(ranked_candidates, k=3):\n", - " return [candidate[-1] for candidate in ranked_candidates['ranking'][:k]]" - ] - }, { "cell_type": "code", "execution_count": null, @@ -380,7 +319,7 @@ }, "outputs": [], "source": [ - "# Define a test input example\n", + "# test ranking deployment\n", "test_ranking_input = {\"instances\": [{\"customer_id\": \"641e6f3ef3a2d537140aaa0a06055ae328a0dddf2c2c0dd6e60eb0563c7cbba0\",\n", " \"month_sin\": 1.2246467991473532e-16,\n", " \"query_emb\": [0.214135289,\n", @@ -401,12 +340,8 @@ " 0.966559],\n", " \"month_cos\": -1.0}]}\n", "\n", - "# Test ranking deployment\n", - "ranked_candidates = ranking_deployment.predict(test_ranking_input)\n", - "\n", - "# Retrieve article ids of the top recommended items\n", - "recommendations = get_top_recommendations(ranked_candidates, k=3)\n", - "recommendations" + " # test ranking\n", + "ranking_deployment.predict(test_ranking_input)" ] }, { @@ -415,7 +350,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Check logs in case of failure\n", + "# #in case of failure\n", "# ranking_deployment.get_logs(component=\"transformer\",tail=200)" ] }, @@ -427,7 +362,7 @@ "source": [ "## ๐Ÿš€ Query Model Deployment \n", "\n", - "Next, you'll deploy your query model." + "We start by deploying our query model." ] }, { @@ -436,7 +371,6 @@ "metadata": {}, "outputs": [], "source": [ - "# Retrieve the 'query_model' from the Model Registry\n", "query_model = mr.get_model(\n", " name=\"query_model\",\n", " version=1,\n", @@ -464,60 +398,46 @@ "class Transformer(object):\n", " \n", " def __init__(self): \n", - " # Connect to the Hopsworks\n", + " # connect to Hopsworks\n", " project = hopsworks.connection().get_project()\n", - " ms = project.get_model_serving()\n", " \n", - " # Retrieve the 'customers' feature view\n", + " # get feature views and transformation functions\n", " fs = project.get_feature_store()\n", - " self.customer_fv = fs.get_feature_view(\n", - " name=\"customers\", \n", - " version=1,\n", - " )\n", - " # Retrieve the ranking deployment \n", + " self.customer_fv = fs.get_feature_view(\"customers\", 1)\n", + " \n", + " # get ranking deployment metadata object\n", + " ms = project.get_model_serving()\n", " self.ranking_server = ms.get_deployment(\"rankingdeployment\")\n", + "\n", + " # TODO (Davit): make this as on-demand feature calculation\n", + " self.c = 2 * np.pi / 12\n", " \n", " \n", " def preprocess(self, inputs):\n", - " # Check if the input data contains a key named \"instances\"\n", - " # and extract the actual data if present\n", " inputs = inputs[\"instances\"] if \"instances\" in inputs else inputs\n", - " \n", - " # Extract customer_id and transaction_date from the inputs\n", " customer_id = inputs[\"customer_id\"]\n", " transaction_date = inputs[\"transaction_date\"]\n", " \n", - " # Extract month from the transaction_date\n", + " # extract month\n", " month_of_purchase = datetime.fromisoformat(inputs.pop(\"transaction_date\"))\n", " \n", - " # Get customer features\n", - " customer_features = self.customer_fv.get_feature_vector(\n", - " {\"customer_id\": customer_id}, \n", - " return_type=\"pandas\",\n", - " )\n", + " # get customer features\n", + " #customer_features = self.customer_fv.get_feature_vector(inputs, return_type=\"pandas\")\n", + " customer_features = self.customer_fv.get_feature_vector({\"customer_id\": customer_id}, return_type=\"pandas\")\n", " \n", - " # Enrich inputs with customer age\n", + " # enrich inputs\n", " inputs[\"age\"] = customer_features.age.values[0] \n", " \n", - " # Calculate the sine and cosine of the month_of_purchase\n", + " # TODO (Davit): make this as on-demand feature calculation\n", " month_of_purchase = datetime.strptime(transaction_date, \"%Y-%m-%dT%H:%M:%S.%f\").month\n", - " \n", - " # Calculate a coefficient for adjusting the periodicity of the month\n", - " coef = np.random.uniform(0, 2 * np.pi) / 12\n", - " \n", - " # Calculate the sine and cosine components for the month_of_purchase\n", - " inputs[\"month_sin\"] = float(np.sin(month_of_purchase * coef)) \n", - " inputs[\"month_cos\"] = float(np.cos(month_of_purchase * coef))\n", + " inputs[\"month_sin\"] = float(np.sin(month_of_purchase * self.c)) \n", + " inputs[\"month_cos\"] = float(np.cos(month_of_purchase * self.c))\n", " \n", - " return {\n", - " \"instances\" : [inputs]\n", - " }\n", + " return {\"instances\" : [inputs]}\n", " \n", " def postprocess(self, outputs):\n", - " # Return ordered ranking predictions \n", - " return {\n", - " \"predictions\": self.ranking_server.predict({ \"instances\": outputs[\"predictions\"]}),\n", - " }" + " # get ordered ranking predictions \n", + " return {\"predictions\": self.ranking_server.predict({ \"instances\": outputs[\"predictions\"]})}\n" ] }, { @@ -526,19 +446,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Copy transformer file into Hopsworks File System\n", - "uploaded_file_path = dataset_api.upload(\n", - " \"querymodel_transformer.py\", \n", - " \"Models\", \n", - " overwrite=True,\n", - ")\n", - "\n", - "# Construct the path to the uploaded script\n", - "transformer_script_path = os.path.join(\n", - " \"/Projects\", \n", - " project.name, \n", - " uploaded_file_path,\n", - ")" + "# copy transformer file into Hopsworks File System\n", + "uploaded_file_path = dataset_api.upload(\"querymodel_transformer.py\", \"Models\", overwrite=True)\n", + "transformer_script_path = os.path.join(\"/Projects\", project.name, uploaded_file_path)" ] }, { @@ -551,13 +461,13 @@ "\n", "query_model_deployment_name = \"querydeployment\"\n", "\n", - "# Define transformer\n", + "# define transformer\n", "query_model_transformer=Transformer(\n", " script_file=transformer_script_path, \n", " resources={\"num_instances\": 1},\n", ")\n", "\n", - "# Deploy the query model\n", + "# deploy query model\n", "query_model_deployment = query_model.deploy(\n", " name=query_model_deployment_name,\n", " description=\"Deployment that generates query embeddings from customer and item features using the query model\",\n", @@ -570,7 +480,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "At this point, you have registered your deployment. To start it up you need to run:" + "At this point, we have registered our deployment. To start it up we need to run:" ] }, { @@ -579,7 +489,6 @@ "metadata": {}, "outputs": [], "source": [ - "# Start the deployment\n", "query_model_deployment.start()" ] }, @@ -589,25 +498,27 @@ "metadata": {}, "outputs": [], "source": [ - "# Check logs in case of failure\n", + "# #in case of failure\n", "# query_model_deployment.get_logs(component=\"transformer\", tail=20)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can test the deployment by making a prediction on the input example we registered together with the model." + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "# Define a test input example\n", "data = {\"instances\": {\"customer_id\": \"641e6f3ef3a2d537140aaa0a06055ae328a0dddf2c2c0dd6e60eb0563c7cbba0\", \"transaction_date\": \"2022-11-15T12:16:25.330916\"}}\n", + "# # data = {\"customer_id\": \"641e6f3ef3a2d537140aaa0a06055ae328a0dddf2c2c0dd6e60eb0563c7cbba0\", \"date_of_purchase\": \"2022-11-15T12:16:25.330916\"}\n", "\n", - "# Test the deployment\n", - "ranked_candidates = query_model_deployment.predict(data)\n", - "\n", - "# Retrieve article ids of the top recommended items\n", - "recommendations = get_top_recommendations(ranked_candidates['predictions'], k=3)\n", - "recommendations" + "query_model_deployment.predict(data)" ] }, { @@ -616,7 +527,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Check logs in case of failure\n", + "# #in case of failure\n", "# query_model_deployment.get_logs(component=\"transformer\",tail=200)" ] }, @@ -624,7 +535,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Stop the deployment when you're not using it." + "Let's stop the deployment when we're not using it." ] }, { @@ -633,11 +544,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Stop the ranking model deployment\n", - "ranking_deployment.stop()\n", - "\n", - "# Stop the query model deployment\n", - "query_model_deployment.stop()" + "# ranking_deployment.stop()\n", + "# query_model_deployment.stop()" ] }, { @@ -650,7 +558,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python", "language": "python", "name": "python3" }, @@ -664,9 +572,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.10.11" } }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/advanced_tutorials/recommender-system/README.md b/advanced_tutorials/recommender-system/README.md index de0712b0..70083c77 100644 --- a/advanced_tutorials/recommender-system/README.md +++ b/advanced_tutorials/recommender-system/README.md @@ -7,14 +7,11 @@ ## Building Recommender and Personalized Search Retrieval and Ranking Systems using Hopsworks ![rec_sys_hopsworks](images/rec_sys_hopsworks.png) -#### Video for this talk -[Data AI Talk on Personalized Recommendations with Hopsworks](https://www.youtube.com/watch?v=9vBRjGgdyTY) - #### In this tutorial, you will build a recommender system for fashion items Using Hopsworks. It is divided into the following parts: * 1_feature_engineering.ipynb * 2_train_retrieval_model.ipynb -* 3_embeddings_creation.ipynb +* 3_build_index.ipynb * 4_train_ranking_model.ipynb * 5_create_deployments.ipynb * 6_inference_and_ui.py diff --git a/advanced_tutorials/recommender-system/features/ranking.py b/advanced_tutorials/recommender-system/features/ranking.py index b4c23dfa..8cb1582f 100644 --- a/advanced_tutorials/recommender-system/features/ranking.py +++ b/advanced_tutorials/recommender-system/features/ranking.py @@ -1,48 +1,41 @@ import pandas as pd def compute_ranking_dataset(trans_fg, articles_fg, customers_fg): - # Define the features used in the query + query_features = ["customer_id", "age", "month_sin", "month_cos", "article_id"] - # Perform the necessary joins to create the feature set fg_query = trans_fg.select(["month_sin", "month_cos"]).join(articles_fg.select_all(), on=["article_id"]).join(customers_fg.select(["customer_id", "age"])) df = fg_query.read() df = df[query_features] - # Copy the positive pairs for ranking positive_pairs = df.copy() - # Define the number of negative pairs to generate - n_neg = len(positive_pairs) * 10 - - # Initialize the negative_pairs DataFrame - negative_pairs = pd.DataFrame() - - # Generate random article_id for negative_pairs that are not in positive_pairs - negative_pairs['article_id'] = positive_pairs["article_id"].drop_duplicates().sample(n_neg, replace=True, random_state=2) - - # Add customer_id to negative_pairs - negative_pairs["customer_id"] = positive_pairs["customer_id"].sample(n_neg, replace=True, random_state=3).to_numpy() + n_neg = len(positive_pairs)*10 - # Add other features to negative_pairs - negative_pairs[["age", "month_sin", "month_cos"]] = positive_pairs[["age", "month_sin", "month_cos"]].sample(n_neg, replace=True, random_state=4).to_numpy() + negative_pairs = positive_pairs[query_features]\ + .sample(n_neg, replace=True, random_state=1)\ + .reset_index(drop=True) - # Add labels to positive and negative pairs + negative_pairs["article_id"] = positive_pairs["article_id"]\ + .sample(n_neg, replace=True, random_state=2).to_numpy() + + # Add labels. positive_pairs["label"] = 1 negative_pairs["label"] = 0 - # Concatenate positive and negative pairs - ranking_df = pd.concat([positive_pairs, negative_pairs[positive_pairs.columns]], ignore_index=True) + # Concatenate. + ranking_df = pd.concat([positive_pairs, negative_pairs], ignore_index=True) - # Keep unique article_id from item features + # Merge with item features. item_df = articles_fg.read() item_df.drop_duplicates(subset="article_id", inplace=True) - - # Keep only the necessary columns from item features - item_df = item_df[["article_id", "product_type_name", "product_group_name", "graphical_appearance_name", "colour_group_name", "perceived_colour_value_name", - "perceived_colour_master_name", "department_name", "index_name", "index_group_name", "section_name", "garment_group_name"]] - - # Merge with item features ranking_df = ranking_df.merge(item_df, on="article_id") + # Compute the query and candidate embeddings + # There are several "duplicated" categorical features in the dataset. + # For instance, `index_code` and `index_name` encodes the same feature, but in different formats (int, string). + # Therefore we have to deduplicate these features. + ranking_df = ranking_df[["customer_id", "article_id", "age","month_sin", "month_cos", "product_type_name", "product_group_name", "graphical_appearance_name", "colour_group_name", "perceived_colour_value_name", + "perceived_colour_master_name","department_name", "index_name", "index_group_name","section_name", "garment_group_name", "label"]] + return ranking_df diff --git a/advanced_tutorials/recommender-system/requirements.txt b/advanced_tutorials/recommender-system/requirements.txt index 53888762..3371e075 100644 --- a/advanced_tutorials/recommender-system/requirements.txt +++ b/advanced_tutorials/recommender-system/requirements.txt @@ -1,7 +1,8 @@ #These are the libraries you need to install to the Hopsworks cluster. -tensorflow==2.13 +tensorflow==2.11 tensorflow-recommenders-0.7.2 +tensorflow-addons-0.22.0 catboost==1.1.1 opensearch-py==1.1.0 hopsworks -streamlit==1.28.2 +streamlit==1.28.2 \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/LICENSE b/advanced_tutorials/tiktok_recsys/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/advanced_tutorials/tiktok_recsys/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/advanced_tutorials/tiktok_recsys/README.md b/advanced_tutorials/tiktok_recsys/README.md deleted file mode 100644 index 7d74477e..00000000 --- a/advanced_tutorials/tiktok_recsys/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Real time feature computation using Apache Flink. - -## Introduction -In this guide you will learn how to create a real-time feature engineering pipeline and write real-time features -and build TikTok stile recommender system using Hopsworks features store. - -## Clone tutorials repository -```bash -git clone https://github.com/logicalclocks/hopsworks-tutorials -cd ~/hopsworks-tutorials/advanced_tutorials/tiktok-recsys -``` - -## Install required python libraries -For the tutorials to work, you need to Install the required python libraries -```bash -cd ./python -pip install -r requirements.txt -``` - -Once you have the above, define the following environment variable: - -## Define env variables -```bash -export HOPSWORKS_HOST=REPLACE_WITH_YOUR_HOPSWORKS_CLUSTER_HOST -export HOPSWORKS_PROJECT_NAME=REPLACE_WITH_YOUR_HOPSWORKS_PROJECT_NAME -export HOPSWORKS_API_KEY=REPLACE_WITH_YOUR_HOPSWORKS_API_KEY -export MAX_ID_RANGE=100 -export RECORDS_PER_SECOND=10 -export PARALLELISM=1 -``` - -## Create a Feature Groups -Full documentation how to create feature group using HSFS APIs can be found [here](https://docs.hopsworks.ai/latest/user_guides/fs/feature_group/create/). - -```bash -python ./setup/tiktok_interactions_feature_groups.py -python ./setup/tiktok_user_window_agg_feature_group.py -python ./setup/tiktok_video_window_agg_feature_group.py -``` - -## Flink pipeline: -```bash -cd ~/hopsworks-tutorials/advanced_tutorials/tiktok-recsys/java -mvn clean package -``` -### Submit Flink job -```bash -python3 ./jobs_flink_client.py --host $HOPSWORKS_HOST --api_key $HOPSWORKS_API_KEY --project $HOPSWORKS_PROJECT_NAME --job tikTokInteractions --jar ./target/flink-tiktok-0.1.0.jar --main "ai.hopsworks.tutorials.flink.tiktok.TikTokFlink" --job_arguments "-maxIdRange $MAX_ID_RANGE -recordsPerSecond $RECORDS_PER_SECOND -parallelism $PARALLELISM" -``` - diff --git a/advanced_tutorials/tiktok_recsys/java/dependency-reduced-pom.xml b/advanced_tutorials/tiktok_recsys/java/dependency-reduced-pom.xml deleted file mode 100644 index 56d092c5..00000000 --- a/advanced_tutorials/tiktok_recsys/java/dependency-reduced-pom.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - 4.0.0 - ai.hopsworks - flink-tiktok - 0.1.0 - - - - maven-jar-plugin - - - - ai.hopsworks.tutorials.flink.tiktok.TikTokFlink - - - - - - maven-shade-plugin - - - package - - shade - - - - - org.apache.flink:force-shading - com.google.code.findbugs:jsr305 - org.slf4j:* - log4j:* - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - - - - - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - - - - org.apache.avro - avro-maven-plugin - ${avro.version} - - - generate-sources - - schema - protocol - idl-protocol - - - - - - - - - - - Hops - Hops Repository - https://archiva.hops.works/repository/Hops/ - - - - - org.apache.flink - flink-core - 1.17.0 - provided - - - org.apache.flink - flink-streaming-java - 1.17.0 - provided - - - org.apache.flink - flink-connector-kafka - 1.17.0 - provided - - - flink-shaded-hadoop2 - org.apache.flink - - - - - - 1.8.2 - 1.17.0 - 3.7.1 - UTF-8 - 8 - 8 - 4.13.2 - - diff --git a/advanced_tutorials/tiktok_recsys/java/jobs_flink_client.py b/advanced_tutorials/tiktok_recsys/java/jobs_flink_client.py deleted file mode 100644 index 70a35fc4..00000000 --- a/advanced_tutorials/tiktok_recsys/java/jobs_flink_client.py +++ /dev/null @@ -1,88 +0,0 @@ -import hopsworks -import argparse -import time - -def connect(args): - project = hopsworks.login( - host=args.host, port=args.port, project=args.project, api_key_value=args.api_key - ) - return project.get_flink_cluster_api() - - -def setup_cluster(flink_cluster_api, args): - flink_job_config = {'type': 'flinkJobConfiguration', 'amQueue': 'default', 'amMemory': args.job_manager_mbs, - 'amVCores': 1, 'jobmanager.heap.size': args.job_manager_mbs, 'taskmanager.numberOfTaskSlots': 1, - 'taskmanager.heap.size': args.task_manager_mbs, 'jobType': 'FLINK', "appName": args.job} - - # producer job - try: - producer_cluster = flink_cluster_api.get_cluster(args.job) - flink_cluster_jobs = producer_cluster.get_jobs() - for job_id in flink_cluster_jobs: - job_state = producer_cluster.job_state(job_id) - if job_state == "RUNNING": - flink_cluster_jobs.stop_job(job_id=job_id) - return producer_cluster - except: - return flink_cluster_api.setup_cluster(name=args.job, config=flink_job_config) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - # Hopsworks cluster configuration - parser.add_argument("--host", help="Hopsworks cluster host") - parser.add_argument( - "--port", help="Port on which Hopsworks is listening on", default=443 - ) - parser.add_argument("--api_key", help="API key to authenticate with Hopsworks") - parser.add_argument("--project", help="Name of the Hopsworks project to connect to") - - # Flink cluster configuration - parser.add_argument( - "--job", default="flinkcluster", help="Flink job name in Hopsworks" - ) - parser.add_argument( - "--job_manager_mbs", - default=4048, - help="Memory of the Flink job manager in MB", - ) - parser.add_argument( - "--task_manager_mbs", - default=4048, - help="Memory of the Flink task managers in MB", - ) - parser.add_argument("--slots", default=1, help="Number of slots per TaskManager") - - # User application configuration - parser.add_argument("--jar", help="The Flink job jar file") - parser.add_argument( - "--main", - help="The entry point to the application, file with main function", - ) - parser.add_argument("--job_arguments", help="Flink job runtime arguments") - - args = parser.parse_args() - - # Setup connection to Hopsworks - jobs_api = connect(args) - - # Setup Flink cluster - flink_cluster = setup_cluster(jobs_api, args) - - if flink_cluster._count_ongoing_executions() > 0: - flink_cluster_execution = jobs_api.get_cluster(args.job) - else: - flink_cluster_execution = flink_cluster.start() - - flink_cluster_execution.upload_jar(args.jar) - - # Submit user jar - jar_metadatas = flink_cluster_execution.get_jars() - jar_metadata = jar_metadatas[0] - jar_id = jar_metadata["id"] - job_id = flink_cluster_execution.submit_job(jar_id, args.main, job_arguments=args.job_arguments) - - while True: - flink_cluster_job = flink_cluster_execution.get_job(job_id) - print("Flink job is: {}".format(flink_cluster_job["plan"]["type"])) - time.sleep(20) diff --git a/advanced_tutorials/tiktok_recsys/java/pom.xml b/advanced_tutorials/tiktok_recsys/java/pom.xml deleted file mode 100644 index fec87272..00000000 --- a/advanced_tutorials/tiktok_recsys/java/pom.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - 4.0.0 - - ai.hopsworks - flink-tiktok - 0.1.0 - - - 8 - 8 - UTF-8 - 3.7.1 - 4.13.2 - 1.8.2 - 1.17.0 - - - - - org.apache.flink - flink-core - ${flink.version} - provided - - - - org.apache.flink - flink-streaming-java - ${flink.version} - provided - - - - org.apache.flink - flink-avro - ${flink.version} - - - org.apache.flink - flink-shaded-hadoop2 - - - - - - - org.apache.flink - flink-connector-kafka - ${flink.version} - provided - - - org.apache.flink - flink-shaded-hadoop2 - - - - - - org.apache.flink - flink-connector-datagen - ${flink.version} - - - org.apache.flink - flink-shaded-hadoop2 - - - - - - - org.apache.avro - avro - ${avro.version} - - - - com.logicalclocks - hsfs-flink - ${hsfs.version} - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - ai.hopsworks.tutorials.flink.tiktok.TikTokFlink - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - - package - - shade - - - - - org.apache.flink:force-shading - com.google.code.findbugs:jsr305 - org.slf4j:* - log4j:* - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - - - - - org.apache.avro - avro-maven-plugin - ${avro.version} - - - generate-sources - - schema - protocol - idl-protocol - - - - - - - - - - Hops - Hops Repository - https://archiva.hops.works/repository/Hops/ - - true - - - true - - - - \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_interactions.avsc b/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_interactions.avsc deleted file mode 100644 index c9305074..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_interactions.avsc +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type" : "record", - "name" : "SourceInteractions", - "namespace" : "ai.hopsworks.tutorials.flink.tiktok.features", - "fields": [ - { - "name": "id", - "type": [ - "null", - "long" - ] - }, - { - "name": "user_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "video_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "category_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "interaction_type", - "type": [ - "null", - "string" - ] - }, - { - "name": "watch_time", - "type": [ - "null", - "long" - ] - }, - { - "name": "interaction_date", - "type": [ - "null", - "long" - ] - }, - { - "name": "interaction_month", - "type": [ - "null", - "string" - ] - } - ] -} \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_user_agg.avsc b/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_user_agg.avsc deleted file mode 100644 index 2e16574e..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_user_agg.avsc +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "record", - "name": "UserWindowAggregationSchema", - "namespace" : "ai.hopsworks.tutorials.flink.tiktok.features", - "fields": [ - { - "name": "user_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "category_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "window_end_time", - "type": [ - "null", - { - "type": "long", - "logicalType": "timestamp-micros" - } - ] - }, - { - "name": "interaction_month", - "type": [ - "null", - "string" - ] - }, - { - "name": "like_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "dislike_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "view_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "comment_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "share_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "skip_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "total_watch_time", - "type": [ - "null", - "long" - ] - } - ] -} \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_video_agg.avsc b/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_video_agg.avsc deleted file mode 100644 index 65910c8f..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/avro/tiktok_video_agg.avsc +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "record", - "name": "VideoWindowAggregationSchema", - "namespace" : "ai.hopsworks.tutorials.flink.tiktok.features", - "fields": [ - { - "name": "video_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "category_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "window_end_time", - "type": [ - "null", - { - "type": "long", - "logicalType": "timestamp-micros" - } - ] - }, - { - "name": "interaction_month", - "type": [ - "null", - "string" - ] - }, - { - "name": "like_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "dislike_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "view_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "comment_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "share_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "skip_count", - "type": [ - "null", - "long" - ] - }, - { - "name": "total_watch_time", - "type": [ - "null", - "long" - ] - } - ] -} \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/TikTokFlink.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/TikTokFlink.java deleted file mode 100644 index b08da8fb..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/TikTokFlink.java +++ /dev/null @@ -1,54 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok; - -import ai.hopsworks.tutorials.flink.tiktok.pipelines.TikTokStreamFeatureAggregations; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; - -public class TikTokFlink { - public static void main(String[] args) throws Exception { - - Options options = new Options(); - - options.addOption(Option.builder("maxIdRange") - .argName("maxIdRange") - .required(false) - .hasArg() - .build()); - - options.addOption(Option.builder("recordsPerSecond") - .argName("recordsPerSecond") - .required(false) - .hasArg() - .build()); - - options.addOption(Option.builder("parallelism") - .argName("parallelism") - .required(false) - .hasArg() - .build()); - - CommandLineParser parser = new DefaultParser(); - CommandLine commandLine = parser.parse(options, args); - - Long maxId = 100000000L; - if (commandLine.hasOption("maxIdRange")) { - maxId = Long.parseLong(commandLine.getOptionValue("maxIdRange")); - } - - Long recordsPerSecond = 1000000L; - if (commandLine.hasOption("recordsPerSecond")) { - recordsPerSecond = Long.parseLong(commandLine.getOptionValue("recordsPerSecond")); - } - - Integer parallelism = 200; - if (commandLine.hasOption("parallelism")) { - parallelism = Integer.parseInt(commandLine.getOptionValue("parallelism")); - } - - new TikTokStreamFeatureAggregations().stream(maxId, recordsPerSecond, parallelism); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/Interactions.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/Interactions.java deleted file mode 100644 index 58ec78fc..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/Interactions.java +++ /dev/null @@ -1,45 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.features; - -import ai.hopsworks.tutorials.flink.tiktok.utils.TikTokInteractions; -import org.apache.flink.api.common.functions.RichMapFunction; -import org.apache.flink.configuration.Configuration; -import org.apache.flink.runtime.metrics.DescriptiveStatisticsHistogram; - -import java.time.Instant; - -public class Interactions extends RichMapFunction { - - private static final int EVENT_TIME_LAG_WINDOW_SIZE = 10_000; - - private transient DescriptiveStatisticsHistogram eventTimeLag; - - @Override - public SourceInteractions map(TikTokInteractions source) throws Exception { - SourceInteractions interactionsFeatureGroupSchema = new SourceInteractions(); - interactionsFeatureGroupSchema.setId(source.getInteractionId()); - interactionsFeatureGroupSchema.setUserId(source.getUserId()); - interactionsFeatureGroupSchema.setVideoId(source.getVideoId()); - interactionsFeatureGroupSchema.setCategoryId(source.getCategoryId()); - interactionsFeatureGroupSchema.setInteractionType(source.getInteractionType()); - interactionsFeatureGroupSchema.setInteractionDate(source.getInteractionDate() * 1000); - interactionsFeatureGroupSchema.setInteractionMonth(source.getInteractionMonth()); - interactionsFeatureGroupSchema.setWatchTime(source.getWatchTime()); - - // update eventTimeLag - eventTimeLag.update(Instant.now().toEpochMilli() - source.getProcessStart()); - - return interactionsFeatureGroupSchema; - } - - @Override - public void open(Configuration parameters) throws Exception { - super.open(parameters); - - eventTimeLag = - getRuntimeContext() - .getMetricGroup() - .histogram( - "interactionsTimeLag", - new DescriptiveStatisticsHistogram(EVENT_TIME_LAG_WINDOW_SIZE)); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/UserEngagementAggregation.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/UserEngagementAggregation.java deleted file mode 100644 index 0e49fd5b..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/UserEngagementAggregation.java +++ /dev/null @@ -1,95 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.features; - -import ai.hopsworks.tutorials.flink.tiktok.utils.TikTokInteractions; -import org.apache.flink.api.common.functions.AggregateFunction; - -import java.time.Instant; - -public class UserEngagementAggregation - implements AggregateFunction { - - public UserEngagementAggregation() { - } - - @Override - public UserWindowAggregationSchema createAccumulator() { - return new UserWindowAggregationSchema(); - } - - @Override - public UserWindowAggregationSchema add(TikTokInteractions record, UserWindowAggregationSchema - accumulator) { - - accumulator.setUserId(record.getUserId()); - accumulator.setInteractionMonth(record.getInteractionMonth()); - accumulator.setCategoryId(record.getCategoryId()); - - // to measure latency, will be overwritten later - accumulator.setWindowEndTime(record.getProcessStart()); - - switch(record.getInteractionType()) { - case "like": - accumulator.setLikeCount(engagementDefaultValue(accumulator.getLikeCount()) + 1); - break; - case "dislike": - accumulator.setDislikeCount(engagementDefaultValue(accumulator.getDislikeCount()) + 1); - break; - case "view": - accumulator.setViewCount(engagementDefaultValue(accumulator.getViewCount()) + 1); - break; - case "comment": - accumulator.setCommentCount(engagementDefaultValue(accumulator.getCommentCount()) + 1); - break; - case "share": - accumulator.setShareCount(engagementDefaultValue(accumulator.getShareCount()) + 1); - break; - case "skip": - accumulator.setSkipCount(engagementDefaultValue(accumulator.getShareCount()) + 1); - break; - } - accumulator.setTotalWatchTime(engagementDefaultValue(accumulator.getShareCount()) + - engagementDefaultValue(record.getWatchTime())); - - return accumulator; - } - - @Override - public UserWindowAggregationSchema getResult(UserWindowAggregationSchema accumulator) { - UserWindowAggregationSchema userWindowAggregationSchema = new UserWindowAggregationSchema(); - userWindowAggregationSchema.setUserId(accumulator.getUserId()); - userWindowAggregationSchema.setInteractionMonth(accumulator.getInteractionMonth()); - - userWindowAggregationSchema.setLikeCount(engagementDefaultValue(accumulator.getLikeCount())); - userWindowAggregationSchema.setLikeCount(engagementDefaultValue(accumulator.getLikeCount())); - userWindowAggregationSchema.setViewCount(engagementDefaultValue(accumulator.getViewCount())); - userWindowAggregationSchema.setCommentCount(engagementDefaultValue(accumulator.getCommentCount())); - userWindowAggregationSchema.setShareCount(engagementDefaultValue(accumulator.getShareCount())); - userWindowAggregationSchema.setSkipCount(engagementDefaultValue(accumulator.getSkipCount())); - userWindowAggregationSchema.setTotalWatchTime(engagementDefaultValue(accumulator.getTotalWatchTime())); - return userWindowAggregationSchema; - } - - @Override - public UserWindowAggregationSchema merge(UserWindowAggregationSchema accumulator, - UserWindowAggregationSchema accumulator1) { - accumulator.setLikeCount(engagementDefaultValue(accumulator.getLikeCount()) + - engagementDefaultValue(accumulator1.getLikeCount())); - accumulator.setDislikeCount(engagementDefaultValue(accumulator.getDislikeCount()) + - engagementDefaultValue(accumulator1.getDislikeCount())); - accumulator.setViewCount(engagementDefaultValue(accumulator.getViewCount()) + - engagementDefaultValue(accumulator1.getViewCount())); - accumulator.setCommentCount(engagementDefaultValue(accumulator.getCommentCount()) + - engagementDefaultValue(accumulator1.getCommentCount())); - accumulator.setShareCount(engagementDefaultValue(accumulator.getShareCount()) + - engagementDefaultValue(accumulator1.getShareCount())); - accumulator.setSkipCount(engagementDefaultValue(accumulator.getShareCount()) + - engagementDefaultValue(accumulator1.getShareCount())); - accumulator.setTotalWatchTime(engagementDefaultValue(accumulator.getTotalWatchTime()) + - engagementDefaultValue(accumulator1.getTotalWatchTime())); - return accumulator; - } - - private Long engagementDefaultValue(Long engagementValue) { - return engagementValue == null ? 0: engagementValue; - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/UserEngagementProcessWindow.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/UserEngagementProcessWindow.java deleted file mode 100644 index 3adfac33..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/UserEngagementProcessWindow.java +++ /dev/null @@ -1,47 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.features; - -import org.apache.flink.configuration.Configuration; -import org.apache.flink.runtime.metrics.DescriptiveStatisticsHistogram; -import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction; -import org.apache.flink.streaming.api.windowing.windows.TimeWindow; -import org.apache.flink.util.Collector; - -import java.time.Instant; - -public class UserEngagementProcessWindow extends ProcessWindowFunction { - - private static final int EVENT_TIME_LAG_WINDOW_SIZE = 10_000; - - private transient DescriptiveStatisticsHistogram eventTimeLag; - - @Override - public void process(Long userId, ProcessWindowFunction.Context context, Iterable iterable, Collector collector) { - - UserWindowAggregationSchema record = iterable.iterator().next(); - - // get process start timestamp - Long processStart = record.getWindowEndTime(); - - // window end - record.setWindowEndTime(context.window().getEnd() * 1000); - - // here it ends - collector.collect(record); - - // measure latency - //eventTimeLag.update(Instant.now().toEpochMilli() - processStart); - } - - @Override - public void open(Configuration parameters) throws Exception { - super.open(parameters); - - eventTimeLag = - getRuntimeContext() - .getMetricGroup() - .histogram( - "userEngagementEventTimeLag", - new DescriptiveStatisticsHistogram(EVENT_TIME_LAG_WINDOW_SIZE)); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/VideoEngagementAggregation.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/VideoEngagementAggregation.java deleted file mode 100644 index 23b1088a..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/VideoEngagementAggregation.java +++ /dev/null @@ -1,88 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.features; - -import ai.hopsworks.tutorials.flink.tiktok.utils.TikTokInteractions; -import org.apache.flink.api.common.functions.AggregateFunction; - -public class VideoEngagementAggregation - implements AggregateFunction { - - public VideoEngagementAggregation() { - }; - - @Override - public VideoWindowAggregationSchema createAccumulator() { - return new VideoWindowAggregationSchema(); - } - - @Override - public VideoWindowAggregationSchema add(TikTokInteractions record, VideoWindowAggregationSchema - accumulator) { - accumulator.setVideoId(record.getVideoId()); - accumulator.setInteractionMonth(record.getInteractionMonth()); - - switch(String.valueOf(record.getInteractionType())) { - case "like": - accumulator.setLikeCount(engagementDefaultValue(accumulator.getLikeCount()) + 1); - break; - case "dislike": - accumulator.setDislikeCount(engagementDefaultValue(accumulator.getDislikeCount()) + 1); - break; - case "view": - accumulator.setViewCount(engagementDefaultValue(accumulator.getViewCount()) + 1); - break; - case "comment": - accumulator.setCommentCount(engagementDefaultValue(accumulator.getCommentCount()) + 1); - break; - case "share": - accumulator.setShareCount(engagementDefaultValue(accumulator.getShareCount()) + 1); - break; - case "skip": - accumulator.setSkipCount(engagementDefaultValue(accumulator.getShareCount()) + 1); - break; - } - - return accumulator; - } - - @Override - public VideoWindowAggregationSchema getResult(VideoWindowAggregationSchema accumulator) { - VideoWindowAggregationSchema videoWindowAggregationSchema = new VideoWindowAggregationSchema(); - videoWindowAggregationSchema.setVideoId(accumulator.getVideoId()); - videoWindowAggregationSchema.setInteractionMonth(accumulator.getInteractionMonth()); - - videoWindowAggregationSchema.setLikeCount(engagementDefaultValue(accumulator.getLikeCount())); - videoWindowAggregationSchema.setLikeCount(engagementDefaultValue(accumulator.getLikeCount())); - videoWindowAggregationSchema.setViewCount(engagementDefaultValue(accumulator.getViewCount())); - videoWindowAggregationSchema.setCommentCount(engagementDefaultValue(accumulator.getCommentCount())); - videoWindowAggregationSchema.setShareCount(engagementDefaultValue(accumulator.getShareCount())); - videoWindowAggregationSchema.setSkipCount(engagementDefaultValue(accumulator.getSkipCount())); - videoWindowAggregationSchema.setTotalWatchTime(engagementDefaultValue(accumulator.getTotalWatchTime())); - - return videoWindowAggregationSchema; - } - - @Override - public VideoWindowAggregationSchema merge(VideoWindowAggregationSchema accumulator, - VideoWindowAggregationSchema accumulator1) { - - accumulator.setLikeCount(engagementDefaultValue(accumulator.getLikeCount()) + - engagementDefaultValue(accumulator1.getLikeCount())); - accumulator.setDislikeCount(engagementDefaultValue(accumulator.getDislikeCount()) + - engagementDefaultValue(accumulator1.getDislikeCount())); - accumulator.setViewCount(engagementDefaultValue(accumulator.getViewCount()) + - engagementDefaultValue(accumulator1.getViewCount())); - accumulator.setCommentCount(engagementDefaultValue(accumulator.getCommentCount()) + - engagementDefaultValue(accumulator1.getCommentCount())); - accumulator.setShareCount(engagementDefaultValue(accumulator.getShareCount()) + - engagementDefaultValue(accumulator1.getShareCount())); - accumulator.setSkipCount(engagementDefaultValue(accumulator.getShareCount()) + - engagementDefaultValue(accumulator1.getShareCount())); - accumulator.setTotalWatchTime(engagementDefaultValue(accumulator.getShareCount()) + - engagementDefaultValue(accumulator1.getTotalWatchTime())); - return accumulator; - } - - private Long engagementDefaultValue(Long engagementValue) { - return engagementValue == null ? 0: engagementValue; - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/VideoEngagementProcessWindow.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/VideoEngagementProcessWindow.java deleted file mode 100644 index 9f87daf5..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/features/VideoEngagementProcessWindow.java +++ /dev/null @@ -1,50 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.features; - -import org.apache.flink.configuration.Configuration; -import org.apache.flink.runtime.metrics.DescriptiveStatisticsHistogram; -import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction; -import org.apache.flink.streaming.api.windowing.windows.TimeWindow; -import org.apache.flink.util.Collector; - -import java.time.Instant; - -public class VideoEngagementProcessWindow - extends ProcessWindowFunction { - - - private static final int EVENT_TIME_LAG_WINDOW_SIZE = 10_000; - - private transient DescriptiveStatisticsHistogram eventTimeLag; - - public VideoEngagementProcessWindow() { - } - - @Override - public void process(Long videoId, ProcessWindowFunction.Context context, - Iterable iterable, - Collector collector) throws Exception { - VideoWindowAggregationSchema record = iterable.iterator().next(); - - // get process start timestamp - Long processStart = record.getWindowEndTime(); - - record.setWindowEndTime(context.window().getEnd() * 1000); - - // here it ends - //eventTimeLag.update(Instant.now().toEpochMilli() - processStart); - collector.collect(record); - } - - @Override - public void open(Configuration parameters) throws Exception { - super.open(parameters); - - eventTimeLag = - getRuntimeContext() - .getMetricGroup() - .histogram( - "videoEngagementEventTimeLag", - new DescriptiveStatisticsHistogram(EVENT_TIME_LAG_WINDOW_SIZE)); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/pipelines/InteractionsEventsGenerator.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/pipelines/InteractionsEventsGenerator.java deleted file mode 100644 index 5f743a7e..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/pipelines/InteractionsEventsGenerator.java +++ /dev/null @@ -1,118 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.pipelines; - -import ai.hopsworks.tutorials.flink.tiktok.features.SourceInteractions; -import ai.hopsworks.tutorials.flink.tiktok.simulators.InteractionsGenerator; -import ai.hopsworks.tutorials.flink.tiktok.utils.InteractionsEventKafkaSync; -import ai.hopsworks.tutorials.flink.tiktok.utils.TikTokInteractions; -import ai.hopsworks.tutorials.flink.tiktok.utils.Utils; - -import org.apache.flink.api.common.eventtime.WatermarkStrategy; -import org.apache.flink.api.common.functions.MapFunction; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.connector.source.util.ratelimit.RateLimiterStrategy; -import org.apache.flink.connector.base.DeliveryGuarantee; -import org.apache.flink.connector.datagen.source.DataGeneratorSource; -import org.apache.flink.connector.kafka.sink.KafkaSink; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.CommandLineParser; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; - -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.Properties; - -public class InteractionsEventsGenerator { - Utils utils = new Utils(); - public void run(String topicName, Long recordsPerSecond, Integer parallelism) throws Exception { - - // Define time for start - Instant now = Instant.now(); - // Subtract 2 weeks from the current instant - Instant startTime = now.minus(7, ChronoUnit.DAYS); - - // set up streaming execution environment - StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - env.setParallelism(parallelism); - - DataGeneratorSource generatorSource = - new DataGeneratorSource<>( - new InteractionsGenerator(recordsPerSecond, startTime), - Long.MAX_VALUE, - RateLimiterStrategy.perSecond(recordsPerSecond), - TypeInformation.of(TikTokInteractions.class)); - - DataStream simEvents = - env.fromSource(generatorSource, - WatermarkStrategy.noWatermarks(), - "Generator Source") - //.setParallelism(parallelism) - .rescale() - .rebalance() - .keyBy(TikTokInteractions::getUserId) - .map(new MapFunction() { - @Override - public SourceInteractions map(TikTokInteractions tikTokInteractions) throws Exception { - SourceInteractions sourceInteractions = new SourceInteractions(); - sourceInteractions.setId(tikTokInteractions.getInteractionId()); - sourceInteractions.setUserId(tikTokInteractions.getUserId()); - sourceInteractions.setVideoId(tikTokInteractions.getVideoId()); - sourceInteractions.setCategoryId(tikTokInteractions.getCategoryId()); - sourceInteractions.setInteractionType(tikTokInteractions.getInteractionType()); - sourceInteractions.setInteractionDate(tikTokInteractions.getInteractionDate()); - sourceInteractions.setInteractionMonth(tikTokInteractions.getInteractionMonth()); - sourceInteractions.setWatchTime(tikTokInteractions.getWatchTime()); - return sourceInteractions; - } - }); - - Properties kafkaConfig = utils.getKafkaProperties(topicName); - - KafkaSink sink = KafkaSink.builder() - .setKafkaProducerConfig(kafkaConfig) - .setBootstrapServers(kafkaConfig.getProperty("bootstrap.servers")) - .setRecordSerializer(new InteractionsEventKafkaSync(topicName)) - .setDeliveryGuarantee(DeliveryGuarantee.AT_LEAST_ONCE) - .build(); - - simEvents.sinkTo(sink); - - env.execute(); - } - public static void main(String[] args) throws Exception { - - Options options = new Options(); - - options.addOption(Option.builder("topicName") - .argName("topicName") - .required(true) - .hasArg() - .build()); - - options.addOption(Option.builder("recordsPerSecond") - .argName("recordsPerSecond") - .required(true) - .hasArg() - .build()); - - options.addOption(Option.builder("parallelism") - .argName("parallelism") - .required(true) - .hasArg() - .build()); - - CommandLineParser parser = new DefaultParser(); - CommandLine commandLine = parser.parse(options, args); - - String topicName = commandLine.getOptionValue("topicName"); - Long recordsPerSecond = Long.parseLong(commandLine.getOptionValue("recordsPerSecond")); - Integer parallelism = Integer.parseInt(commandLine.getOptionValue("parallelism")); - - InteractionsEventsGenerator interactionsEventsProducer = new InteractionsEventsGenerator(); - interactionsEventsProducer.run(topicName, recordsPerSecond, parallelism); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/pipelines/TikTokStreamFeatureAggregations.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/pipelines/TikTokStreamFeatureAggregations.java deleted file mode 100644 index fe146cc6..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/pipelines/TikTokStreamFeatureAggregations.java +++ /dev/null @@ -1,130 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.pipelines; - -import ai.hopsworks.tutorials.flink.tiktok.features.SourceInteractions; -import ai.hopsworks.tutorials.flink.tiktok.features.UserWindowAggregationSchema; -import ai.hopsworks.tutorials.flink.tiktok.features.UserEngagementAggregation; -import ai.hopsworks.tutorials.flink.tiktok.features.UserEngagementProcessWindow; -import ai.hopsworks.tutorials.flink.tiktok.features.VideoWindowAggregationSchema; -import ai.hopsworks.tutorials.flink.tiktok.features.VideoEngagementAggregation; -import ai.hopsworks.tutorials.flink.tiktok.features.VideoEngagementProcessWindow; -import ai.hopsworks.tutorials.flink.tiktok.simulators.InteractionsGenerator; -import ai.hopsworks.tutorials.flink.tiktok.utils.TikTokInteractions; - -import com.logicalclocks.hsfs.flink.FeatureStore; -import com.logicalclocks.hsfs.flink.HopsworksConnection; -import com.logicalclocks.hsfs.flink.StreamFeatureGroup; - -import org.apache.flink.api.common.eventtime.WatermarkStrategy; -import org.apache.flink.api.common.functions.MapFunction; -import org.apache.flink.api.common.restartstrategy.RestartStrategies; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.connector.source.util.ratelimit.RateLimiterStrategy; -import org.apache.flink.connector.datagen.source.DataGeneratorSource; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.windowing.assigners.SlidingEventTimeWindows; -import org.apache.flink.streaming.api.windowing.time.Time; - -import java.time.Duration; -import java.time.Instant; -import java.time.temporal.ChronoUnit; - -public class TikTokStreamFeatureAggregations { - - public static final int CHECKPOINTING_INTERVAL_MS = 5000; - private static final String JOB_NAME = "TikTok Streaming Pipeline"; - - private FeatureStore featureStore; - - public TikTokStreamFeatureAggregations() throws Exception { - //get feature store handle - HopsworksConnection hopsworksConnection = HopsworksConnection.builder().build(); - - featureStore = hopsworksConnection.getFeatureStore(); - } - - public void stream(Long maxId, Long recordsPerSecond, Integer parallelism) throws Exception { - - StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - env.setParallelism(parallelism); - - // Setup the sliding window aggregations 5, 10, 60 minutes - //interactionSlidingWindow( env,60, 30, maxId, recordsPerSecond, parallelism); - interactionSlidingWindow( env,10, 5, maxId, recordsPerSecond, parallelism); - - env.execute(JOB_NAME); - //env.enableCheckpointing(CHECKPOINTING_INTERVAL_MS); - env.setRestartStrategy(RestartStrategies.noRestart()); - } - - private void interactionSlidingWindow(StreamExecutionEnvironment env, - int windowSizeMinutes, - int slideSizeMinutes, - Long maxId, - Long recordsPerSecond, - int parallelism) throws Exception { - - // Define time for start - Instant now = Instant.now(); - // Subtract 2 weeks from the current instant - Instant startTime = now.minus(7, ChronoUnit.DAYS); - - // get or create stream feature group - StreamFeatureGroup interactionsFeatureGroup = featureStore.getStreamFeatureGroup("interactions", 1); - StreamFeatureGroup userWindowAgg = featureStore.getStreamFeatureGroup("user_window_agg_1h", 1); - StreamFeatureGroup videoWindowAgg = featureStore.getStreamFeatureGroup("video_window_agg_1h", 1); - - WatermarkStrategy customWatermark = WatermarkStrategy - .forBoundedOutOfOrderness(Duration.ofSeconds(30)) - .withTimestampAssigner((event, timestamp) -> event.getInteractionDate()); - - DataGeneratorSource generatorSource = - new DataGeneratorSource<>( - new InteractionsGenerator(maxId, startTime), - Long.MAX_VALUE, - RateLimiterStrategy.perSecond(recordsPerSecond), - TypeInformation.of(TikTokInteractions.class)); - - DataStream simEvents = - env.fromSource(generatorSource, - WatermarkStrategy.noWatermarks(), - "Generator Source") - .setParallelism(parallelism) - .rescale() - .rebalance(); - - // define feature aggregate streams - DataStream sourceInteractions = - simEvents - .keyBy(TikTokInteractions::getUserId) - .map((MapFunction) tikTokInteractions -> { - SourceInteractions sourceInteractions1 = new SourceInteractions(); - sourceInteractions1.setId(tikTokInteractions.getInteractionId()); - sourceInteractions1.setUserId(tikTokInteractions.getUserId()); - sourceInteractions1.setVideoId(tikTokInteractions.getVideoId()); - sourceInteractions1.setCategoryId(tikTokInteractions.getCategoryId()); - sourceInteractions1.setInteractionType(tikTokInteractions.getInteractionType()); - sourceInteractions1.setInteractionDate(tikTokInteractions.getInteractionDate() * 1000); - sourceInteractions1.setInteractionMonth(tikTokInteractions.getInteractionMonth()); - sourceInteractions1.setWatchTime(tikTokInteractions.getWatchTime()); - return sourceInteractions1; - }); - - DataStream userAggregationStream = - simEvents.assignTimestampsAndWatermarks(customWatermark) - .keyBy(TikTokInteractions::getUserId) - .window(SlidingEventTimeWindows.of(Time.minutes(windowSizeMinutes), Time.minutes(slideSizeMinutes))) - .aggregate(new UserEngagementAggregation(), new UserEngagementProcessWindow()); - - DataStream videoAggregationStream = - simEvents.assignTimestampsAndWatermarks(customWatermark) - .keyBy(TikTokInteractions::getVideoId) - .window(SlidingEventTimeWindows.of(Time.minutes(windowSizeMinutes), Time.minutes(slideSizeMinutes))) - .aggregate(new VideoEngagementAggregation(), new VideoEngagementProcessWindow()); - - // insert streams - interactionsFeatureGroup.insertStream(sourceInteractions); - userWindowAgg.insertStream(userAggregationStream); - videoWindowAgg.insertStream(videoAggregationStream); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/simulators/InteractionsGenerator.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/simulators/InteractionsGenerator.java deleted file mode 100644 index 743421b7..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/simulators/InteractionsGenerator.java +++ /dev/null @@ -1,106 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.simulators; - -import ai.hopsworks.tutorials.flink.tiktok.utils.TikTokInteractions; -import org.apache.flink.api.connector.source.SourceReaderContext; -import org.apache.flink.connector.datagen.source.GeneratorFunction; - -import java.text.SimpleDateFormat; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -public class InteractionsGenerator implements GeneratorFunction { - - private final long maxInteractionId; - - private long interactionId = 0; - - private final Random randomNumber = new Random(); - - private final List interactionTypes = Arrays.asList("like", "view", "dislike", "comment", "share", "skip"); - private final List videoCategories = Arrays.asList(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L); - - SimpleDateFormat monthFormat = new SimpleDateFormat("yyyy-MM"); - - Instant startTime; - - public InteractionsGenerator(long maxInteractionId, Instant startTime) { - this.maxInteractionId = maxInteractionId; - this.startTime = startTime; - } - - @Override - public void open(SourceReaderContext readerContext) throws Exception { - GeneratorFunction.super.open(readerContext); - } - - @Override - public void close() throws Exception { - GeneratorFunction.super.close(); - } - - @Override - public TikTokInteractions map(Long aLong) throws Exception { - return interactionEventGenerator(userIdGenerator(), videoIdGenerator(), - videoCategoryTypeGenerator(), interactionTypeGenerator(), - watchTimeGenerator()); - } - - private void interactionIdGenerator() { - if (this.interactionId == this.maxInteractionId) { - this.interactionId = 0; - } else { - this.interactionId++; - } - } - private Long userIdGenerator() { - long leftLimit = 0L; - long rightLimit = 100L; - return leftLimit + (long) (Math.random() * (rightLimit - leftLimit)); - } - - private Long videoIdGenerator() { - long leftLimit = 0L; - long rightLimit = 100L; - return leftLimit + (long) (Math.random() * (rightLimit - leftLimit)); - } - - private String interactionTypeGenerator() { - return interactionTypes.get(randomNumber.nextInt(interactionTypes.size())); - } - - private Long videoCategoryTypeGenerator() { - return videoCategories.get(randomNumber.nextInt(interactionTypes.size())); - } - - private Long watchTimeGenerator() { - long leftLimit = 10L; - long rightLimit = 250; - return leftLimit + (long) (Math.random() * (rightLimit - leftLimit)); - } - - private void timestampGenerator(TikTokInteractions tikTokInteractions){ - //Long timestamp = Instant.now().toEpochMilli(); - this.startTime = this.startTime.plus(1, ChronoUnit.SECONDS); - tikTokInteractions.setInteractionDate(startTime.toEpochMilli()); - tikTokInteractions.setInteractionMonth(this.monthFormat.format(startTime.toEpochMilli())); - } - - private TikTokInteractions interactionEventGenerator(Long userId, Long videoId,Long videoCategory, - String interactionType, Long watchTime) { - - interactionIdGenerator(); - - TikTokInteractions tikTokInteractions = new TikTokInteractions(); - tikTokInteractions.setInteractionId(interactionId); - tikTokInteractions.setUserId(userId); - tikTokInteractions.setVideoId(videoId); - tikTokInteractions.setCategoryId(videoCategory); - tikTokInteractions.setInteractionType(interactionType); - tikTokInteractions.setWatchTime(watchTime); - timestampGenerator(tikTokInteractions); - return tikTokInteractions; - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/InteractionsEventKafkaSource.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/InteractionsEventKafkaSource.java deleted file mode 100644 index 94c7b46f..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/InteractionsEventKafkaSource.java +++ /dev/null @@ -1,78 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.utils; - -import ai.hopsworks.tutorials.flink.tiktok.features.SourceInteractions; -import lombok.SneakyThrows; -import org.apache.avro.io.BinaryDecoder; -import org.apache.avro.io.DatumReader; -import org.apache.avro.io.DecoderFactory; -import org.apache.avro.specific.SpecificDatumReader; -import org.apache.flink.api.common.serialization.DeserializationSchema; -import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.connector.kafka.source.reader.deserializer.KafkaRecordDeserializationSchema; -import org.apache.flink.streaming.connectors.kafka.KafkaDeserializationSchema; -import org.apache.flink.util.Collector; -import org.apache.kafka.clients.consumer.ConsumerRecord; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.time.Instant; - -public class InteractionsEventKafkaSource implements KafkaDeserializationSchema, - KafkaRecordDeserializationSchema { - - @Override - public void open(DeserializationSchema.InitializationContext context) throws Exception { - KafkaRecordDeserializationSchema.super.open(context); - } - - @Override - public boolean isEndOfStream(TikTokInteractions sourceInteractions) { - return false; - } - - @Override - public TikTokInteractions deserialize(ConsumerRecord consumerRecord) throws Exception { - byte[] messageKey = consumerRecord.key(); - byte[] message = consumerRecord.value(); - long offset = consumerRecord.offset(); - long timestamp = consumerRecord.timestamp(); - - SourceInteractions sourceInteractions = new SourceInteractions(); - ByteArrayInputStream in = new ByteArrayInputStream(message); - DatumReader userDatumReader = new SpecificDatumReader<>(sourceInteractions.getSchema()); - BinaryDecoder decoder = DecoderFactory.get().directBinaryDecoder(in, null); - sourceInteractions = userDatumReader.read(null, decoder); - - TikTokInteractions interactions = getTikTokInteractions(sourceInteractions); - - return interactions; - } - - private static TikTokInteractions getTikTokInteractions(SourceInteractions sourceInteractions) { - TikTokInteractions interactions = new TikTokInteractions(); - interactions.setInteractionId(sourceInteractions.getId()); - interactions.setUserId(sourceInteractions.getUserId()); - interactions.setVideoId(sourceInteractions.getVideoId()); - interactions.setCategoryId(sourceInteractions.getCategoryId()); - interactions.setInteractionType(String.valueOf(sourceInteractions.getInteractionType())); - interactions.setInteractionDate(sourceInteractions.getInteractionDate()); - interactions.setInteractionMonth(String.valueOf(sourceInteractions.getInteractionMonth())); - interactions.setWatchTime(sourceInteractions.getWatchTime()); - return interactions; - } - - @SneakyThrows - @Override - public void deserialize(ConsumerRecord consumerRecord, Collector collector) - throws IOException { - long deserializeStart = Instant.now().toEpochMilli(); - TikTokInteractions sourceInteractions = deserialize(consumerRecord); - sourceInteractions.setProcessStart(deserializeStart); - collector.collect(sourceInteractions); - } - - @Override - public TypeInformation getProducedType() { - return TypeInformation.of(TikTokInteractions.class); - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/InteractionsEventKafkaSync.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/InteractionsEventKafkaSync.java deleted file mode 100644 index 0aabe058..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/InteractionsEventKafkaSync.java +++ /dev/null @@ -1,67 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.utils; - -import ai.hopsworks.tutorials.flink.tiktok.features.SourceInteractions; -import lombok.SneakyThrows; -import org.apache.avro.io.BinaryEncoder; -import org.apache.avro.io.DatumWriter; -import org.apache.avro.io.EncoderFactory; -import org.apache.avro.specific.SpecificDatumWriter; -import org.apache.flink.api.common.serialization.SerializationSchema; -import org.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchema; -import org.apache.flink.runtime.metrics.DescriptiveStatisticsHistogram; -import org.apache.kafka.clients.producer.ProducerRecord; - -import javax.annotation.Nullable; -import java.io.ByteArrayOutputStream; -import java.nio.charset.StandardCharsets; -import java.time.Instant; - -public class InteractionsEventKafkaSync implements KafkaRecordSerializationSchema { - - - private static final int EVENT_TIME_LAG_WINDOW_SIZE = 10_000; - - private transient DescriptiveStatisticsHistogram eventTimeLag; - - private final String topic; - - public InteractionsEventKafkaSync(String topic) { - this.topic = topic; - } - - @SneakyThrows - public byte[] serializeValue(SourceInteractions interactionEvent) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null); - DatumWriter dataFileWriter = new SpecificDatumWriter<>(SourceInteractions.class); - dataFileWriter.write(interactionEvent, encoder); - encoder.flush(); - return out.toByteArray(); - } - - public byte[] serializeKey(SourceInteractions interactionEvent) { - return String.valueOf(interactionEvent.getUserId()).getBytes(StandardCharsets.UTF_8); - } - - @Override - public void open(SerializationSchema.InitializationContext context, KafkaSinkContext sinkContext) throws Exception { - KafkaRecordSerializationSchema.super.open(context, sinkContext); - eventTimeLag = - context - .getMetricGroup() - .histogram( - "interactionsEventKafkaSyncLag", - new DescriptiveStatisticsHistogram(EVENT_TIME_LAG_WINDOW_SIZE)); - } - @Nullable - @Override - public ProducerRecord serialize(SourceInteractions sourceInteractions, - KafkaSinkContext kafkaSinkContext, Long timestamp) { - byte[] key = this.serializeKey(sourceInteractions); - byte[] value = this.serializeValue(sourceInteractions); - eventTimeLag.update(Instant.now().toEpochMilli() - sourceInteractions.getInteractionDate()); - - return new ProducerRecord<>(topic, null, timestamp, key, value); - } - -} \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/TikTokInteractions.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/TikTokInteractions.java deleted file mode 100644 index 940a38f9..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/TikTokInteractions.java +++ /dev/null @@ -1,86 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.utils; - -public class TikTokInteractions { - private Long interactionId; - private Long userId; - private Long videoId; - private Long categoryId; - private String interactionType; - private Long watchTime; - private Long interactionDate; - private String interactionMonth; - private Long processStart; - - - public void setInteractionId(Long interactionId) { - this.interactionId = interactionId; - } - - public Long getInteractionId() { - return interactionId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public Long getUserId() { - return userId; - } - - public void setVideoId(Long videoId) { - this.videoId = videoId; - } - - public Long getVideoId() { - return videoId; - } - - public void setCategoryId(Long categoryId) { - this.categoryId = categoryId; - } - - public Long getCategoryId() { - return categoryId; - } - - public void setInteractionType(String interactionType) { - this.interactionType = interactionType; - } - - public String getInteractionType() { - return interactionType; - } - - public void setWatchTime(Long watchTime) { - this.watchTime = watchTime; - } - - public Long getWatchTime() { - return watchTime; - } - - public void setInteractionDate(Long interactionDate) { - this.interactionDate = interactionDate; - } - - public Long getInteractionDate() { - return interactionDate; - } - - public void setInteractionMonth(String interactionMonth) { - this.interactionMonth = interactionMonth; - } - - public String getInteractionMonth() { - return interactionMonth; - } - - public void setProcessStart(Long processStart) { - this.processStart = processStart; - } - - public Long getProcessStart() { - return processStart; - } -} diff --git a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/Utils.java b/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/Utils.java deleted file mode 100644 index 029ec4ee..00000000 --- a/advanced_tutorials/tiktok_recsys/java/src/main/java/ai/hopsworks/tutorials/flink/tiktok/utils/Utils.java +++ /dev/null @@ -1,35 +0,0 @@ -package ai.hopsworks.tutorials.flink.tiktok.utils; - -import com.logicalclocks.hsfs.FeatureStoreException; -import com.logicalclocks.hsfs.flink.HopsworksConnection; -import com.logicalclocks.hsfs.metadata.HopsworksClient; -import com.logicalclocks.hsfs.metadata.HopsworksHttpClient; - -import java.io.IOException; -import java.util.Properties; - -public class Utils { - - public Properties getKafkaProperties() throws FeatureStoreException, IOException { - HopsworksConnection connection = HopsworksConnection.builder().build(); - HopsworksHttpClient client = HopsworksClient.getInstance().getHopsworksHttpClient(); - Properties properties = new Properties(); - properties.put("bootstrap.servers", "broker.kafka.service.consul:9091"); - properties.put("security.protocol", "SSL"); - properties.put("ssl.truststore.location", client.getTrustStorePath()); - properties.put("ssl.truststore.password", client.getCertKey()); - properties.put("ssl.keystore.location", client.getKeyStorePath()); - properties.put("ssl.keystore.password", client.getCertKey()); - properties.put("ssl.key.password", client.getCertKey()); - properties.put("ssl.endpoint.identification.algorithm", ""); - properties.put("enable.idempotence", false); - return properties; - } - - public Properties getKafkaProperties(String topic) throws FeatureStoreException, IOException { - Properties properties = getKafkaProperties(); - properties.put("topic", topic); - return properties; - } - -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_a_user_fg_backfil.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_a_user_fg_backfil.ipynb deleted file mode 100644 index a803da3c..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_a_user_fg_backfil.ipynb +++ /dev/null @@ -1,198 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "74d2c263", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d06a1e5", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration" - ] - }, - { - "cell_type": "markdown", - "id": "5fb0d84c", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฅ Fetch Users Data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fce94dc8", - "metadata": {}, - "outputs": [], - "source": [ - "data_users_df = pd.read_parquet('https://repo.hops.works/dev/davit/tiktok_recsys/users.parquet')\n", - "data_users_df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "022e16a5", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Great Expectations " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c1b6548a", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a Great Expectations DataFrame from the pandas DataFrame\n", - "ge_users_df = ge.from_pandas(data_users_df)\n", - "\n", - "# Initialize the expectation suite\n", - "expectation_suite_users = ge_users_df.get_expectation_suite()\n", - "expectation_suite_users.expectation_suite_name = \"user_data_suite\"\n", - "\n", - "# Expectation: Age should be between 0 and 120\n", - "expectation_suite_users.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\"column\": \"age\", \"min_value\": 12, \"max_value\": 100}\n", - " )\n", - ")\n", - "\n", - "# Expectations: Columns should not have null values\n", - "for column in ge_users_df.columns:\n", - " expectation_suite_users.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\": column}\n", - " )\n", - " )\n", - "\n", - "# Expectation: Gender should only contain specific values\n", - "expectation_suite_users.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_distinct_values_to_be_in_set\",\n", - " kwargs={\"column\": \"gender\", \"value_set\": [\"Male\", \"Female\", \"Other\"]}\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "06368b8b", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "602d3d75", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "5a19a172", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee7dee55", - "metadata": {}, - "outputs": [], - "source": [ - "users_fg = fs.get_or_create_feature_group(\n", - " name=\"users\",\n", - " version=1,\n", - " description=\"Users data.\",\n", - " primary_key=[\"user_id\"],\n", - " partition_key=[\"registration_month\"],\n", - " event_time=\"registration_date\",\n", - " online_enabled=True,\n", - " expectation_suite=expectation_suite_users,\n", - " statistics_config = {\n", - " \"enabled\": True,\n", - " \"histograms\": True,\n", - " \"correlations\": True,\n", - " } \n", - ")\n", - "\n", - "users_fg.insert(data_users_df)\n", - "print('Done โœ…')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4548f55d-8941-4655-992c-7b672c0942b2", - "metadata": {}, - "outputs": [], - "source": [ - "feature_descriptions = [\n", - " {\"name\": \"user_id\", \"description\": \"Unique identifier for each user.\"},\n", - " {\"name\": \"gender\", \"description\": \"Gender of the user.\"},\n", - " {\"name\": \"age\", \"description\": \"Age of the user.\"},\n", - " {\"name\": \"country\", \"description\": \"Country of Residence of the user.\"},\n", - " {\"name\": \"registration_date\", \"description\": \"Date of registration.\"},\n", - " {\"name\": \"registration_month\", \"description\": \"Month of registration derived from registration_date.\"},\n", - "]\n", - "\n", - "for desc in feature_descriptions: \n", - " users_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "id": "6bcc04ea", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_b_video_fg_backfil.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_b_video_fg_backfil.ipynb deleted file mode 100644 index 4cb01ad3..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_b_video_fg_backfil.ipynb +++ /dev/null @@ -1,189 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "74d2c263", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d06a1e5", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration" - ] - }, - { - "cell_type": "markdown", - "id": "538080dd", - "metadata": {}, - "source": [ - "## ๐ŸŽฅ Fetch Content Data\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d4e2188c", - "metadata": {}, - "outputs": [], - "source": [ - "data_video_df = pd.read_parquet('https://repo.hops.works/dev/davit/tiktok_recsys/videos.parquet')" - ] - }, - { - "cell_type": "markdown", - "id": "022e16a5", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Great Expectations " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1b5cc2d5", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a Great Expectations DataFrame from the pandas DataFrame\n", - "ge_video_df = ge.from_pandas(data_video_df)\n", - "\n", - "# Initialize the expectation suite\n", - "expectation_suite_videos = ge_video_df.get_expectation_suite()\n", - "expectation_suite_videos.expectation_suite_name = \"video_data_suite\"\n", - "\n", - "# Expectation: Views, Likes, and Video Length should be non-negative\n", - "for column in [\"video_length\"]:\n", - " expectation_suite_videos.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\"column\": column, \"min_value\": 0, \"max_value\": None}\n", - " )\n", - " )\n", - "\n", - "# Expectation: Valid date format for upload_date\n", - "expectation_suite_videos.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_dateutil_parseable\",\n", - " kwargs={\"column\": \"upload_date\"}\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "06368b8b", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "602d3d75", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "5a19a172", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1612d635", - "metadata": {}, - "outputs": [], - "source": [ - "videos_fg = fs.get_or_create_feature_group(\n", - " name=\"videos\",\n", - " version=1,\n", - " description=\"Videos data.\",\n", - " primary_key=[\"video_id\"],\n", - " partition_key=[\"upload_month\"],\n", - " online_enabled=True,\n", - " event_time=\"upload_date\",\n", - " expectation_suite=expectation_suite_videos,\n", - " statistics_config = {\n", - " \"enabled\": True,\n", - " \"histograms\": True,\n", - " \"correlations\": True,\n", - " }\n", - ")\n", - "\n", - "videos_fg.insert(data_video_df)\n", - "print('Done โœ…')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "85b5390b-02a3-4a18-b08f-d6d910115464", - "metadata": {}, - "outputs": [], - "source": [ - "feature_descriptions = [\n", - " {\"name\": \"video_id\", \"description\": \"Identifier for the video.\"},\n", - " {\"name\": \"category_id\", \"description\": \"Id of the video category.\"}, \n", - " {\"name\": \"category\", \"description\": \"Name of the video category.\"},\n", - " {\"name\": \"video_length\", \"description\": \"Video length in sconds.\"},\n", - " {\"name\": \"upload_date\", \"description\": \"Date of upload for the video.\"},\n", - " {\"name\": \"upload_month\", \"description\": \"Month of upload for the video, derived from upload_date.\"},\n", - "]\n", - "\n", - "for desc in feature_descriptions: \n", - " videos_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "id": "6bcc04ea", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_c_interactions_fg_backfil.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_c_interactions_fg_backfil.ipynb deleted file mode 100644 index 7c180dcb..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_c_interactions_fg_backfil.ipynb +++ /dev/null @@ -1,161 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "74d2c263", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d06a1e5", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from datetime import datetime, timezone" - ] - }, - { - "cell_type": "markdown", - "id": "a2b34c80", - "metadata": {}, - "source": [ - "## ๐Ÿ”— Fetch historical interactions dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "69b8bd5e-2ede-40f0-af3d-2829c0e46790", - "metadata": {}, - "outputs": [], - "source": [ - "# Fetch historical interactions dataset and backfill interactions feature group\n", - "data_interactions_df = pd.read_parquet('https://repo.hops.works/dev/davit/tiktok_recsys/interactions.parquet')" - ] - }, - { - "cell_type": "markdown", - "id": "06368b8b", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "602d3d75", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "5a19a172", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "239ed3c2-a9f1-4cef-a36f-fe48daa8ddd1", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_fg = fs.get_or_create_feature_group(\n", - " name=\"interactions\",\n", - " version=1,\n", - " description=\"Interactions data.\", \n", - " primary_key=[\"interaction_id\", \"user_id\", \"video_id\"],\n", - " partition_key = [\"interaction_month\"],\n", - " online_enabled=True,\n", - " event_time=\"interaction_date\",\n", - " statistics_config = {\n", - " \"enabled\": True,\n", - " \"histograms\": True,\n", - " \"correlations\": True,\n", - " }\n", - ")\n", - "\n", - "interactions_fg.insert(data_interactions_df)\n", - "print('Done โœ…')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "198209c2-9c8c-45d7-b568-dc44174ad684", - "metadata": {}, - "outputs": [], - "source": [ - "feature_descriptions = [\n", - " {\"name\": \"id\", \"description\": \"Unique id for the interaction\"},\n", - " {\"name\": \"user_id\", \"description\": \"Unique identifier for each user.\"},\n", - " {\"name\": \"video_id\", \"description\": \"Identifier for the video.\"},\n", - " {\"name\": \"category_id\", \"description\": \"Id of the video category.\"},\n", - " {\"name\": \"interaction_type\", \"description\": \"Type of interaction\"},\n", - " {\"name\": \"watch_time\", \"description\": \"Time in seconds how long user watched the video.\"},\n", - " {\"name\": \"interaction_date\", \"description\": \"Date of inteaction.\"},\n", - " {\"name\": \"interaction_month\", \"description\": \"Month of interaction, derived from interaction_date.\"}\n", - "]\n", - "\n", - "for desc in feature_descriptions:\n", - " interactions_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fefa5a02-aad7-4649-b71e-104b2ea53b4d", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_fg.materialization_job.schedule(cron_expression=\"0 */15 * ? * *\",\n", - " start_time=datetime.now(tz=timezone.utc))\n" - ] - }, - { - "cell_type": "markdown", - "id": "6bcc04ea", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_d_video_window_agg_feature_group.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_d_video_window_agg_feature_group.py deleted file mode 100644 index 5a03202a..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_d_video_window_agg_feature_group.py +++ /dev/null @@ -1,62 +0,0 @@ -import hopsworks - -from hsfs.feature import Feature -from datetime import datetime, timedelta, timezone - -project = hopsworks.login() -fs = project.get_feature_store() - -features = [ - Feature(name="video_id", type="bigint"), - Feature(name="category_id", type="bigint"), - - Feature(name="like_count", type="bigint"), - Feature(name="dislike_count", type="bigint"), - Feature(name="view_count", type="bigint"), - Feature(name="comment_count", type="bigint"), - Feature(name="share_count", type="bigint"), - Feature(name="skip_count", type="bigint"), - Feature(name="total_watch_time", type="bigint"), - - Feature(name="interaction_month", type="string"), - Feature(name="window_end_time", type="timestamp"), -] - -video_window_agg_1h_fg = fs.create_feature_group( - "video_window_agg_1h", - version=1, - primary_key=["video_id"], - partition_key=["interaction_month"], - event_time="window_end_time", - online_enabled=True, - stream=True, - statistics_config = { - "enabled": True, - "histograms": True, - "correlations": True, - } -) - -video_window_agg_1h_fg.save(features) - -video_window_agg_1h_fg.materialization_job.schedule(cron_expression="0 */15 * ? * *", - start_time=datetime.now(tz=timezone.utc)) - -feature_descriptions = [ - {"name": "video_id", "description": "Identifier for the video."}, - {"name": "category_id", "description": "Id of the video category."}, - {"name": "window_end_time", "description": "End of the specified time window where interaction were aggregated."}, - {"name": "interaction_month", - "description": "Month of the end of the specified time window where interaction were aggregated. Derived from window_end_time"}, - {"name": "like_count", "description": "Number of likes video got over a specified time window."}, - {"name": "dislike_count", "description": "Number of dislikes video got over a specified time window."}, - {"name": "view_count", "description": "Number of views video got over a specified time window."}, - {"name": "comment_count", "description": "Number of comments video got over a specified time window."}, - {"name": "share_count", "description": "Number of likes over got over a specified time window."}, - {"name": "skip_count", "description": "Number of times video was skiped over a specified time window."}, - {"name": "total_watch_time", - "description": "Total time in seconds video was watched over a specified time window."}, -] - -for desc in feature_descriptions: - video_window_agg_1h_fg.update_feature_description(desc["name"], desc["description"]) diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_e_interactions_month_sincos_fg.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_e_interactions_month_sincos_fg.ipynb deleted file mode 100644 index 7fa569bd..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_e_interactions_month_sincos_fg.ipynb +++ /dev/null @@ -1,168 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "74d2c263", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d06a1e5", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from datetime import datetime, timezone\n", - "\n", - "from features.interactions import month_sine, month_cosine" - ] - }, - { - "cell_type": "markdown", - "id": "06368b8b", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "602d3d75", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "8840b016-2f1f-4db8-a831-b76ae42cf561", - "metadata": {}, - "source": [ - "## ๐Ÿ”— Fetch interactions feature group " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5fae1dde-ebe8-44ef-839b-6fe691ed405b", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_fg = fs.get_feature_group(\n", - " name=\"interactions\",\n", - " version=1)\n", - " \n", - "data_interactions_df = interactions_fg.read()\n", - "data_interactions_df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "be778ba1-edd9-4d3e-912c-fbf6d30c2b84", - "metadata": {}, - "outputs": [], - "source": [ - "data_interactions_df = data_interactions_df[[\"id\", \"interaction_date\", \"interaction_month\"]]\n", - "# Calculate the sine and cosine components for the month_of_purchase\n", - "data_interactions_df[\"month_sin\"] = data_interactions_df.interaction_date.map(lambda x: month_sine(x))\n", - "data_interactions_df[\"month_cos\"] = data_interactions_df.interaction_date.map(lambda x: month_cosine(x)) \n", - "data_interactions_df " - ] - }, - { - "cell_type": "markdown", - "id": "5a19a172", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "239ed3c2-a9f1-4cef-a36f-fe48daa8ddd1", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_month_sincos_fg = fs.get_or_create_feature_group(\n", - " name=\"interactions_month_sincos\",\n", - " version=1,\n", - " description=\"Ondeamand Features for Interactions data such month sine and cosine.\", \n", - " primary_key=[\"id\"],\n", - " partition_key = [\"interaction_month\"],\n", - " online_enabled=True,\n", - " event_time=\"interaction_date\",\n", - " parents=[interactions_fg],\n", - " statistics_config = {\n", - " \"enabled\": True,\n", - " \"histograms\": True,\n", - " \"correlations\": True,\n", - " } \n", - ")\n", - "\n", - "interactions_month_sincos_fg.insert(data_interactions_df)\n", - "print('Done โœ…')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "198209c2-9c8c-45d7-b568-dc44174ad684", - "metadata": {}, - "outputs": [], - "source": [ - "feature_descriptions = [\n", - " {\"name\": \"id\", \"description\": \"Unique id for the interaction\"},\n", - " {\"name\": \"month_sin\", \"description\": \"Sine of the month of interaction date.\"},\n", - " {\"name\": \"month_cos\", \"description\": \"Cosine of the month of interaction date.\"}, \n", - " {\"name\": \"interaction_date\", \"description\": \"Date of inteaction.\"},\n", - " {\"name\": \"interaction_month\", \"description\": \"Month of interaction, derived from interaction_date.\"}\n", - "]\n", - "\n", - "for desc in feature_descriptions:\n", - " interactions_month_sincos_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "id": "6bcc04ea", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_f_user_window_agg_feature_group.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_f_user_window_agg_feature_group.py deleted file mode 100644 index 84aff12d..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_f_user_window_agg_feature_group.py +++ /dev/null @@ -1,69 +0,0 @@ -import hopsworks - -from hsfs.feature import Feature -from datetime import datetime, timedelta, timezone - -project = hopsworks.login() -fs = project.get_feature_store() - -features = [ - Feature(name="user_id", type="bigint"), - Feature(name="category_id", type="bigint"), - - Feature(name="like_count", type="bigint"), - Feature(name="dislike_count", type="bigint"), - Feature(name="view_count", type="bigint"), - Feature(name="comment_count", type="bigint"), - Feature(name="share_count", type="bigint"), - Feature(name="skip_count", type="bigint"), - Feature(name="total_watch_time", type="bigint"), - - Feature(name="interaction_month", type="string"), - Feature(name="window_end_time", type="timestamp"), -] - -user_window_agg_1h_fg = fs.create_feature_group( - "user_window_agg_1h", - version=1, - primary_key=["user_id"], - partition_key=["interaction_month"], - event_time="window_end_time", - online_enabled=True, - stream=True, - statistics_config = { - "enabled": True, - "histograms": True, - "correlations": True, - } -) - -user_window_agg_1h_fg.save(features) - -user_window_agg_1h_fg.materialization_job.schedule(cron_expression="0 */15 * ? * *", - start_time=datetime.now(tz=timezone.utc)) - -feature_descriptions = [ - {"name": "user_id", "description": "Unique identifier for each user."}, - {"name": "category_id", "description": "Id of the video category."}, - {"name": "window_end_time", "description": "End of the specified time window where interaction were aggregated."}, - {"name": "interaction_month", - "description": "Month of the end of the specified time window where interaction were aggregated. Derived from window_end_time"}, - {"name": "like_count", - "description": "Number of likes video category got from the user during a specified time window."}, - {"name": "dislike_count", - "description": "Number of dislikes video category got from the user during a specified time window."}, - {"name": "view_count", - "description": "Number of views over video category got from the user during a specified time window."}, - {"name": "comment_count", - "description": "Number of comments video category got from the user during a specified time window."}, - {"name": "share_count", - "description": "Number of likes over video category got from the user during a specified time window."}, - {"name": "skip_count", - "description": "Number of times video category was skiped by the user during a specified time window."}, - {"name": "total_watch_time", - "description": "Total time in seconds video category was watched by the user during a specified time window."}, -] - -for desc in feature_descriptions: - user_window_agg_1h_fg.update_feature_description(desc["name"], desc["description"]) - diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_g_ranking_fg.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/1_g_ranking_fg.ipynb deleted file mode 100644 index 767e6b2d..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/1_g_ranking_fg.ipynb +++ /dev/null @@ -1,198 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "74d2c263", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4d06a1e5", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np" - ] - }, - { - "cell_type": "markdown", - "id": "06368b8b", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "602d3d75", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "5a19a172", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Fetch Feature Groups " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee7dee55", - "metadata": {}, - "outputs": [], - "source": [ - "users_fg = fs.get_feature_group(\n", - " name=\"users\",\n", - " version=1,\n", - ")\n", - "\n", - "videos_fg = fs.get_feature_group(\n", - " name=\"videos\",\n", - " version=1,\n", - ")\n", - "\n", - "interactions_fg = fs.get_feature_group(\n", - " name=\"interactions\",\n", - " version=1,\n", - ")\n", - "\n", - "interactions_month_sincos_fg = fs.get_feature_group(\n", - " name=\"interactions_month_sincos\",\n", - " version=1,\n", - ")\n", - "\n", - "query = interactions_fg.select_except(['interaction_id', 'watch_time', 'interaction_date', 'category_id'])\\\n", - " .join(interactions_month_sincos_fg.select(['month_cos', 'month_sin']))\\\n", - " .join(users_fg.select_except(['upload_date', 'upload_month'])) \\\n", - " .join(videos_fg.select_except(['registration_date', 'registration_month']))\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2463f23e-3640-4718-90de-0a9a394f821b", - "metadata": {}, - "outputs": [], - "source": [ - "ranking_df = query.read()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2ba00730-3bfc-4aff-9473-8e9b50427326", - "metadata": {}, - "outputs": [], - "source": [ - "ranking_df['label'] = np.where(\n", - " ranking_df.interaction_type.isin(['view', 'like', 'share', 'comment']), \n", - " 1, \n", - " 0,\n", - ")\n", - "\n", - "ranking_df = ranking_df[[\"user_id\", \"video_id\", \"category_id\", \"interaction_month\", \"video_length\", \"gender\", \"age\", \"country\", \"label\"]]" - ] - }, - { - "cell_type": "markdown", - "id": "20a31c2b", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Ranking Feature Group " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "08a30c03", - "metadata": {}, - "outputs": [], - "source": [ - "ranking_fg = fs.get_or_create_feature_group(\n", - " name=\"ranking\",\n", - " version=1,\n", - " description=\"Ranking Data.\",\n", - " primary_key=[\"user_id\", \"video_id\"],\n", - " partition_key = [\"interaction_month\"], \n", - " online_enabled=False, \n", - " parents=[users_fg, videos_fg, interactions_fg, interactions_month_sincos_fg],\n", - " statistics_config = {\n", - " \"enabled\": True,\n", - " \"histograms\": True,\n", - " \"correlations\": True,\n", - " }\n", - ")\n", - "\n", - "ranking_fg.insert(ranking_df)\n", - "print('Done โœ…')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "745641e4-75e8-43cb-b7f8-41a1c994c673", - "metadata": {}, - "outputs": [], - "source": [ - "feature_descriptions = [\n", - " {\"name\": \"user_id\", \"description\": \"Unique identifier for each user.\"},\n", - " {\"name\": \"video_id\", \"description\": \"Identifier for the video.\"},\n", - " {\"name\": \"category_id\", \"description\": \"Id of the video category.\"}, \n", - " {\"name\": \"interaction_month\", \"description\": \"Month of interaction, derived from interaction_date.\"}, \n", - " {\"name\": \"video_length\", \"description\": \"Video length in sconds.\"},\n", - " {\"name\": \"gender\", \"description\": \"Gender of the user.\"},\n", - " {\"name\": \"age\", \"description\": \"Age of the user.\"},\n", - " {\"name\": \"country\", \"description\": \"Country of Residence of the user.\"},\n", - " {\"name\": \"label\", \"description\": \"Label indicating whether the article was purchased (1) or not (0).\"},\n", - "]\n", - "\n", - "for desc in feature_descriptions: \n", - " ranking_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "id": "6bcc04ea", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/2_retrieval_model_training.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/2_retrieval_model_training.ipynb deleted file mode 100644 index 05b18bd9..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/2_retrieval_model_training.ipynb +++ /dev/null @@ -1,772 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "a802df49", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Train Retrieval Model \n" - ] - }, - { - "cell_type": "markdown", - "id": "ad717bc4", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bfa1ec75", - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "from tensorflow.keras.layers import StringLookup, Normalization\n", - "\n", - "import tensorflow_recommenders as tfrs\n", - "\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "id": "27878d7f", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cde7ee5a", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "4a0aa637", - "metadata": {}, - "source": [ - "## ๐Ÿ”ช Feature Selection \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9563ca98", - "metadata": {}, - "outputs": [], - "source": [ - "users_fg = fs.get_feature_group(\n", - " name=\"users\",\n", - " version=1,\n", - ")\n", - "\n", - "videos_fg = fs.get_feature_group(\n", - " name=\"videos\",\n", - " version=1,\n", - ")\n", - "\n", - "interactions_fg = fs.get_feature_group(\n", - " name=\"interactions\",\n", - " version=1,\n", - ")\n", - "\n", - "interactions_fg = fs.get_feature_group(\n", - " name=\"interactions\",\n", - " version=1,\n", - ")\n", - "\n", - "interactions_month_sincos_fg = fs.get_feature_group(\n", - " name=\"interactions_month_sincos\",\n", - " version=1,\n", - ")\n", - "\n", - "user_window_agg_1h_fg = fs.get_feature_group(\n", - " name=\"user_window_agg_1h\",\n", - " version=1,\n", - ")\n", - "\n", - "video_window_agg_1h_fg = fs.get_feature_group(\n", - " name=\"video_window_agg_1h\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7472aa57", - "metadata": {}, - "outputs": [], - "source": [ - "QUERY_FEATURES = [\"user_id\", \"gender\", \"age\", \"country\"] \n", - "QUERY_AGG_FEATURES =[\"like_count\", \"dislike_count\", \"view_count\", \"total_watch_time\"]\n", - "\n", - "CANDIDATE_FEATURES = [\"video_id\", \"category\", \"video_length\"]\n", - "CANDIDATE_AGG_FEATURES = [\"like_count\", \"dislike_count\", \"view_count\", \"total_watch_time\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "05a7017a", - "metadata": {}, - "outputs": [], - "source": [ - "# Select features for training data\n", - "selected_features = interactions_fg.select([\"id\"])\\\n", - " .join(users_fg.select(QUERY_FEATURES), on=\"user_id\")\\\n", - " .join(videos_fg.select(CANDIDATE_FEATURES), on=\"video_id\")\\\n", - " .join(video_window_agg_1h_fg.select(CANDIDATE_AGG_FEATURES), on=\"video_id\", prefix= \"vid_\")\\\n", - " .join(user_window_agg_1h_fg.select(QUERY_AGG_FEATURES), on=[\"user_id\", \"category_id\"], prefix= \"user_\")\\\n", - " .join(interactions_month_sincos_fg.select([\"month_sin\", \"month_cos\"]), on=\"id\")\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "#selected_features.show(5)" - ] - }, - { - "cell_type": "markdown", - "id": "041203aa", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "464a7b55", - "metadata": {}, - "outputs": [], - "source": [ - "feature_view = fs.get_or_create_feature_view(\n", - " name='retrieval',\n", - " version=1,\n", - " query=selected_features,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "ca2ba800", - "metadata": {}, - "source": [ - "## ๐Ÿ‹๏ธ Training Dataset \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7461e500", - "metadata": {}, - "outputs": [], - "source": [ - "train_df, val_df, test_df, _, _, _ = feature_view.train_validation_test_split(\n", - " validation_size=0.1, \n", - " test_size=0.1,\n", - " description='Retrieval dataset splits',\n", - ")\n", - "train_df.head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "633b4c65", - "metadata": {}, - "source": [ - "You will train your retrieval model with a subset of features.\n", - "\n", - "For the query embedding you will use:\n", - "- `user_id`: ID of a user.\n", - "- `gender`: Gender of a user.\n", - "- `age`: age of a user.\n", - "- `country`: country if a user.\n", - "- `month_sin`: Sine of the month of interaction date.\n", - "- `month_cos`: Cosine of the month of interaction date.\n", - "- `user_like_count`: Number of times user liked video catregory.\n", - "- `user_dislike_count`: Number of times user disliked video catregory.\n", - "- `user_view_count`: Number of times user viewed video catregory.\n", - "- `user_total_watch_time` : Total time in seconds user watched video catregory.;\n", - "\n", - "For the candidate embedding you will use:\n", - "- `video_id`: ID of a video.\n", - "- `category`: Video Category.\n", - "- `vid_like_count`: Number of times video was liked by users.\n", - "- `vid_dislike_count`: Number of times video was disliked by users.\n", - "- `vid_view_count`: Number of times video was viewed by users.\n", - "- `vid_total_watch_time`: Total time in seconds video was watched. \n", - "- `video_length`: Length of video.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4588de29", - "metadata": {}, - "outputs": [], - "source": [ - "def df_to_ds(df):\n", - " return tf.data.Dataset.from_tensor_slices({col: df[col] for col in df})\n", - "\n", - "BATCH_SIZE = 2048\n", - "train_ds = df_to_ds(train_df).batch(BATCH_SIZE).cache().shuffle(BATCH_SIZE*10)\n", - "val_ds = df_to_ds(val_df).batch(BATCH_SIZE).cache()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "39e001ab", - "metadata": {}, - "outputs": [], - "source": [ - "train_df" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "414f2cf6", - "metadata": {}, - "outputs": [], - "source": [ - "# Query Features \n", - "user_id_list = train_df[\"user_id\"].unique().tolist()\n", - "countries_list = train_df[\"country\"].unique().tolist()\n", - "gender_list = train_df[\"gender\"].unique().tolist()\n", - "\n", - "# Item Features\n", - "video_id_list = train_df[\"video_id\"].unique().tolist()\n", - "category_list = train_df[\"category\"].unique().tolist()\n", - "\n", - "print(f\"โ›ณ๏ธ Number of users: {len(user_id_list)}\")\n", - "print(f\"โ›ณ๏ธ Number of items: {len(video_id_list)}\")" - ] - }, - { - "cell_type": "markdown", - "id": "56e9f3ce", - "metadata": {}, - "source": [ - "## ๐Ÿฐ Two Tower Model \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "91cd9402", - "metadata": {}, - "outputs": [], - "source": [ - "EMB_DIM = 16" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5214794e", - "metadata": {}, - "outputs": [], - "source": [ - "class QueryTower(tf.keras.Model):\n", - "\n", - " def __init__(self):\n", - " super().__init__()\n", - "\n", - " self.emb_dim = EMB_DIM\n", - " self.user_embedding = tf.keras.Sequential([\n", - " StringLookup(\n", - " vocabulary=user_id_list,\n", - " mask_token=None\n", - " ),\n", - " tf.keras.layers.Embedding(\n", - " # You add an additional embedding to account for unknown tokens.\n", - " len(user_id_list) + 1,\n", - " self.emb_dim\n", - " )\n", - " ])\n", - "\n", - " self.normalized_age = Normalization(axis=None)\n", - " self.normalized_sin = Normalization(axis=None)\n", - " self.normalized_cos = Normalization(axis=None)\n", - " \n", - " # Converts strings into integer indices (scikit-learn LabelEncoder analog)\n", - " self.gender_tokenizer = StringLookup(\n", - " vocabulary=gender_list,\n", - " mask_token=None,\n", - " )\n", - " \n", - " self.country_tokenizer = StringLookup(\n", - " vocabulary=countries_list, \n", - " mask_token=None,\n", - " )\n", - "\n", - " self.normalized_views = Normalization(axis=None)\n", - " self.normalized_dislikes = Normalization(axis=None)\n", - " self.normalized_likes = Normalization(axis=None)\n", - " self.normalized_video_watch_time = Normalization(axis=None)\n", - " \n", - " self.fnn = tf.keras.Sequential([\n", - " tf.keras.layers.Dense(self.emb_dim, activation=\"relu\"),\n", - " tf.keras.layers.Dense(self.emb_dim)\n", - " ])\n", - "\n", - " def call(self, inputs):\n", - " gender_embedding = tf.one_hot(\n", - " self.gender_tokenizer(inputs[\"gender\"]),\n", - " len(gender_list),\n", - " )\n", - " \n", - " country_embedding = tf.one_hot(\n", - " self.country_tokenizer(inputs[\"country\"]),\n", - " len(countries_list),\n", - " )\n", - " \n", - " concatenated_inputs = tf.concat([\n", - " self.user_embedding(inputs[\"user_id\"]),\n", - " tf.reshape(self.normalized_age(inputs[\"age\"]), (-1,1)),\n", - " tf.reshape(self.normalized_sin(inputs[\"month_sin\"]), (-1,1)),\n", - " tf.reshape(self.normalized_cos(inputs[\"month_cos\"]), (-1,1)),\n", - "\n", - " tf.reshape(self.normalized_views(inputs[\"user_view_count\"]), (-1,1)),\n", - " tf.reshape(self.normalized_dislikes(inputs[\"user_dislike_count\"]), (-1,1)),\n", - " tf.reshape(self.normalized_likes(inputs[\"user_like_count\"]), (-1,1)),\n", - " tf.reshape(self.normalized_video_watch_time(inputs[\"user_total_watch_time\"]), (-1,1)),\n", - " \n", - " gender_embedding,\n", - " country_embedding,\n", - " ], axis=1)\n", - "\n", - " outputs = self.fnn(concatenated_inputs)\n", - "\n", - " return outputs\n", - "\n", - "\n", - "query_model = QueryTower()\n", - "\n", - "query_model.normalized_age.adapt(train_ds.map(lambda x : x[\"age\"]))\n", - "\n", - "# Initialize model with inputs.\n", - "query_df = train_df[QUERY_FEATURES + [\"user_\" + i for i in QUERY_AGG_FEATURES] + [\"month_sin\", \"month_cos\"]] \n", - "query_ds = df_to_ds(query_df).batch(1)\n", - "query_model(next(iter(query_ds)))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b8381c8", - "metadata": {}, - "outputs": [], - "source": [ - "class ItemTower(tf.keras.Model):\n", - "\n", - " def __init__(self):\n", - " super().__init__()\n", - "\n", - " self.emb_dim = EMB_DIM\n", - " self.video_embedding = tf.keras.Sequential([\n", - " StringLookup(\n", - " vocabulary=video_id_list,\n", - " mask_token=None\n", - " ),\n", - " tf.keras.layers.Embedding(\n", - " # You add an additional embedding to account for unknown tokens.\n", - " len(video_id_list) + 1,\n", - " self.emb_dim,\n", - " )\n", - " ])\n", - " \n", - " # Converts strings into integer indices (scikit-learn LabelEncoder analog)\n", - " self.category_tokenizer = StringLookup(\n", - " vocabulary=category_list, \n", - " mask_token=None,\n", - " )\n", - " \n", - " self.normalized_views = Normalization(axis=None)\n", - " self.normalized_dislikes = Normalization(axis=None)\n", - " self.normalized_likes = Normalization(axis=None)\n", - " self.normalized_video_length = Normalization(axis=None)\n", - " self.normalized_video_watch_time = Normalization(axis=None)\n", - "\n", - " self.fnn = tf.keras.Sequential([\n", - " tf.keras.layers.Dense(self.emb_dim, activation=\"relu\"),\n", - " tf.keras.layers.Dense(self.emb_dim)\n", - " ])\n", - "\n", - " def call(self, inputs):\n", - " category_embedding = tf.one_hot(\n", - " self.category_tokenizer(inputs[\"category\"]),\n", - " len(category_list),\n", - " )\n", - "\n", - " concatenated_inputs = tf.concat([\n", - " self.video_embedding(inputs[\"video_id\"]),\n", - " category_embedding,\n", - " tf.reshape(self.normalized_views(inputs[\"vid_view_count\"]), (-1,1)),\n", - " tf.reshape(self.normalized_dislikes(inputs[\"vid_dislike_count\"]), (-1,1)),\n", - " tf.reshape(self.normalized_likes(inputs[\"vid_like_count\"]), (-1,1)),\n", - " tf.reshape(self.normalized_video_length(inputs[\"video_length\"]), (-1,1)),\n", - " tf.reshape(self.normalized_video_watch_time(inputs[\"vid_total_watch_time\"]), (-1,1)),\n", - " ], axis=1)\n", - "\n", - " outputs = self.fnn(concatenated_inputs)\n", - "\n", - " return outputs\n", - "\n", - " \n", - "item_model = ItemTower()\n", - "\n", - "item_df = train_df[CANDIDATE_FEATURES+ [\"vid_\" + i for i in CANDIDATE_AGG_FEATURES]]\n", - "item_df.drop_duplicates(subset=\"video_id\", inplace=True)\n", - "item_ds = df_to_ds(item_df)\n", - "\n", - "item_model(next(iter(item_ds.batch(1))))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "319705d8", - "metadata": {}, - "outputs": [], - "source": [ - "class TwoTowerModel(tf.keras.Model):\n", - " def __init__(self, query_model, item_model):\n", - " super().__init__()\n", - " self.query_model = query_model\n", - " self.item_model = item_model\n", - " self.task = tfrs.tasks.Retrieval(\n", - " metrics=tfrs.metrics.FactorizedTopK(\n", - " candidates=item_ds.batch(BATCH_SIZE).map(self.item_model)\n", - " )\n", - " )\n", - "\n", - " def train_step(self, batch) -> tf.Tensor:\n", - " # Set up a gradient tape to record gradients.\n", - " with tf.GradientTape() as tape:\n", - "\n", - " # Loss computation.\n", - " user_embeddings = self.query_model(batch)\n", - " item_embeddings = self.item_model(batch)\n", - " loss = self.task(\n", - " user_embeddings, \n", - " item_embeddings,\n", - " compute_metrics=False,\n", - " )\n", - "\n", - " # Handle regularization losses as well.\n", - " regularization_loss = sum(self.losses)\n", - "\n", - " total_loss = loss + regularization_loss\n", - "\n", - " gradients = tape.gradient(total_loss, self.trainable_variables)\n", - " self.optimizer.apply_gradients(zip(gradients, self.trainable_variables))\n", - "\n", - " metrics = {\n", - " \"loss\": loss,\n", - " \"regularization_loss\": regularization_loss,\n", - " \"total_loss\": total_loss\n", - " }\n", - "\n", - " return metrics\n", - "\n", - " def test_step(self, batch) -> tf.Tensor:\n", - " # Loss computation.\n", - " user_embeddings = self.query_model(batch)\n", - " item_embeddings = self.item_model(batch)\n", - "\n", - " loss = self.task(\n", - " user_embeddings, \n", - " item_embeddings,\n", - " compute_metrics=False,\n", - " )\n", - "\n", - " # Handle regularization losses as well.\n", - " regularization_loss = sum(self.losses)\n", - "\n", - " total_loss = loss + regularization_loss\n", - "\n", - " metrics = {metric.name: metric.result() for metric in self.metrics}\n", - " metrics[\"loss\"] = loss\n", - " metrics[\"regularization_loss\"] = regularization_loss\n", - " metrics[\"total_loss\"] = total_loss\n", - "\n", - " return metrics" - ] - }, - { - "cell_type": "markdown", - "id": "e0aa3b5a", - "metadata": {}, - "source": [ - "### ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ Model Training \n", - "\n", - "You'll train our model using the AdamW optimizer, which applies weight regularization during training." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7a73e2a4", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a TwoTowerModel with the specified query_model and item_model\n", - "model = TwoTowerModel(query_model, item_model)\n", - "\n", - "# Define an optimizer using AdamW with a learning rate of 0.01\n", - "#optimizer = tf.keras.optimizers.AdamW(\n", - "optimizer = tf.keras.optimizers.Adam(\n", - " weight_decay=0.001, \n", - " learning_rate=0.01,\n", - ")\n", - "\n", - "# Compile the model using the specified optimizer\n", - "model.compile(optimizer=optimizer)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0ae7140f", - "metadata": {}, - "outputs": [], - "source": [ - "model.fit(\n", - " train_ds, \n", - " validation_data=val_ds, \n", - " epochs=5,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "75379fa6", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Upload Model to Model Registry \n", - "\n", - "One of the features in Hopsworks is the model registry. This is where you can store different versions of models and compare their performance. Models from the registry can then be served as API endpoints.\n", - "\n", - "Let's connect to the model registry using the [HSML library](https://docs.hopsworks.ai/machine-learning-api/latest) from Hopsworks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "37b0582a", - "metadata": {}, - "outputs": [], - "source": [ - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "04743dca", - "metadata": {}, - "outputs": [], - "source": [ - "class QueryModelModule(tf.Module):\n", - " def __init__(self, query_model):\n", - " self.query_model = query_model\n", - "\n", - " @tf.function()\n", - " def compute_emb(self, instances):\n", - " query_emb = self.query_model(instances)\n", - " return {\n", - " \"user_id\": instances[\"user_id\"],\n", - " \"gender\": instances[\"gender\"],\n", - " \"age\": instances[\"age\"],\n", - " \"country\": instances[\"country\"],\n", - " \"month_sin\": instances[\"month_sin\"],\n", - " \"month_cos\": instances[\"month_cos\"], \n", - " \"query_emb\": query_emb,\n", - " }\n", - "\n", - "# wrap query_model: query_model -> query_model_module\n", - "query_model = QueryModelModule(model.query_model)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ac391bfa", - "metadata": {}, - "outputs": [], - "source": [ - "# Define the input specifications for the instances\n", - "instances_spec = {\n", - " 'user_id': tf.TensorSpec(shape=(None,), dtype=tf.string, name='user_id'), # Specification for user IDs\n", - " 'gender': tf.TensorSpec(shape=(None,), dtype=tf.string, name='gender'), # Specification for gender\n", - " 'country': tf.TensorSpec(shape=(None,), dtype=tf.string, name='country'), # Specification for country\n", - " 'age': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='age'), # Specification for age\n", - " 'user_view_count': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='user_view_count'), # Specification for view_count\n", - " 'user_dislike_count': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='user_dislike_count'), # Specification for dislike_count\n", - " 'month_sin' : tf.TensorSpec(shape=(None,), dtype=tf.float32, name='month_sin'), # Specification for month_sin\n", - " 'month_cos' : tf.TensorSpec(shape=(None,), dtype=tf.float32, name='month_cos'), # Specification for month_cos\n", - " 'user_view_count': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='user_view_count'), # Specification for view_count\n", - " 'user_dislike_count': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='user_dislike_count'), # Specification for dislike_count\n", - " 'user_like_count': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='user_like_count'), # Specification for like_count\n", - " 'user_total_watch_time': tf.TensorSpec(shape=(None,), dtype=tf.int64, name='user_total_watch_time'), # Specification for like_count\n", - "}\n", - "\n", - "# Get the concrete function for the query_model's compute_emb function using the specified input signatures\n", - "signatures = query_model.compute_emb.get_concrete_function(instances_spec)\n", - "\n", - "# Save the query_model along with the concrete function signatures\n", - "tf.saved_model.save(\n", - " query_model, # The model to save\n", - " \"query_model\", # Path to save the model\n", - " signatures=signatures, # Concrete function signatures to include\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2e69f5ee", - "metadata": {}, - "outputs": [], - "source": [ - "tf.saved_model.save(\n", - " model.item_model, # The model to save\n", - " \"candidate_model\", # Path to save the model\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bdd40c96", - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "# Infer input schema from data.\n", - "query_model_input_schema = Schema(query_df)\n", - "\n", - "# Manually specify output schema.\n", - "query_model_output_schema = Schema([{\n", - " \"name\": \"query_embedding\",\n", - " \"type\": \"float32\",\n", - " \"shape\": [EMB_DIM],\n", - "}])\n", - "\n", - "query_model_schema = ModelSchema(\n", - " input_schema=query_model_input_schema,\n", - " output_schema=query_model_output_schema,\n", - ")\n", - "\n", - "query_model_schema.to_dict()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a482bc52", - "metadata": {}, - "outputs": [], - "source": [ - "# Sample a query example from the query DataFrame\n", - "query_example = query_df.sample().to_dict(\"records\")\n", - "\n", - "# Create a tensorflow model for the query_model in the Model Registry \n", - "mr_query_model = mr.tensorflow.create_model(\n", - " name=\"query_model\", # Name of the model\n", - " description=\"Model that generates query embeddings from user features\", # Description of the model\n", - " input_example=query_example, # Example input for the model\n", - " model_schema=query_model_schema, # Schema of the model\n", - ")\n", - "\n", - "# Save the query_model to the Model Registry\n", - "mr_query_model.save(\"query_model\") # Path to save the model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e4db480d", - "metadata": {}, - "outputs": [], - "source": [ - "# Define the input schema for the candidate_model based on item_df\n", - "candidate_model_input_schema = Schema(item_df)\n", - "\n", - "# Define the output schema for the candidate_model, specifying the shape and type of the output\n", - "candidate_model_output_schema = Schema([{\n", - " \"name\": \"candidate_embedding\", # Name of the output feature\n", - " \"type\": \"float32\", # Data type of the output feature\n", - " \"shape\": [EMB_DIM], # Shape of the output feature\n", - "}])\n", - "\n", - "# Combine the input and output schemas to create the overall model schema for the candidate_model\n", - "candidate_model_schema = ModelSchema(\n", - " input_schema=candidate_model_input_schema, # Input schema for the model\n", - " output_schema=candidate_model_output_schema, # Output schema for the model\n", - ")\n", - "\n", - "# Sample a candidate example from the item DataFrame\n", - "candidate_example = item_df.sample().to_dict(\"records\")\n", - "\n", - "# Create a tensorflow model for the candidate_model in the Model Registry\n", - "mr_candidate_model = mr.tensorflow.create_model(\n", - " name=\"candidate_model\", # Name of the model\n", - " description=\"Model that generates candidate embeddings from video features\", # Description of the model\n", - " input_example=candidate_example, # Example input for the model\n", - " model_schema=candidate_model_schema, # Schema of the model\n", - ")\n", - "\n", - "# Save the candidate_model to the Model Registry\n", - "mr_candidate_model.save(\"candidate_model\") # Path to save the model" - ] - }, - { - "cell_type": "markdown", - "id": "4af8f206", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/3_embeddings_creation.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/3_embeddings_creation.ipynb deleted file mode 100644 index 794478af..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/3_embeddings_creation.ipynb +++ /dev/null @@ -1,318 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "e9f877c8", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Build Index \n", - "\n", - "In this notebook you will create a feature group for your candidate embeddings." - ] - }, - { - "cell_type": "markdown", - "id": "9f0949e2", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4958aa5b", - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "import pprint\n", - "import numpy as np\n", - "import pandas as pd\n", - "\n", - "import warnings\n", - "warnings.filterwarnings('ignore')" - ] - }, - { - "cell_type": "markdown", - "id": "8e8fc8ff", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "080e6b00", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "markdown", - "id": "8febd6fa", - "metadata": {}, - "source": [ - "## ๐ŸŽฏ Compute Candidate Embeddings \n", - "\n", - "You start by computing candidate embeddings for all items in the training data.\n", - "\n", - "First, you load your candidate model. Recall that you uploaded it to the Hopsworks Model Registry in the previous notebook. If you don't have the model locally you can download it from the Model Registry using the following code:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b7bae7bd", - "metadata": {}, - "outputs": [], - "source": [ - "model = mr.get_model(\n", - " name=\"candidate_model\",\n", - " version=1,\n", - ")\n", - "model_path = model.download()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f8c3373b", - "metadata": {}, - "outputs": [], - "source": [ - "candidate_model = tf.saved_model.load(model_path)" - ] - }, - { - "cell_type": "markdown", - "id": "6ba8c137", - "metadata": {}, - "source": [ - "Next you compute the embeddings of all candidate videos that were used to train the retrieval model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5d01209f", - "metadata": {}, - "outputs": [], - "source": [ - "feature_view = fs.get_feature_view(\n", - " name=\"retrieval\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53786dd5", - "metadata": {}, - "outputs": [], - "source": [ - "train_df, val_df, test_df, _, _, _ = feature_view.get_train_validation_test_split(1)\n", - "train_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9d7816e7", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the list of input features for the candidate model from the model schema\n", - "model_schema = model.model_schema['input_schema']['columnar_schema']\n", - "candidate_features = [feat['name'] for feat in model_schema]\n", - "\n", - "# Select the candidate features from the training DataFrame\n", - "item_df = train_df[candidate_features]\n", - "\n", - "# Drop duplicate rows based on the 'article_id' column to get unique candidate items\n", - "item_df.drop_duplicates(subset=\"video_id\", inplace=True)\n", - "\n", - "item_df.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "257abe7d", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a TensorFlow dataset from the item DataFrame\n", - "item_ds = tf.data.Dataset.from_tensor_slices(\n", - " {col: item_df[col] for col in item_df})\n", - "\n", - "# Compute embeddings for all candidate items using the candidate_model\n", - "candidate_embeddings = item_ds.batch(2048).map(\n", - " lambda x: (x[\"video_id\"], candidate_model(x))\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "2ad6ea91", - "metadata": {}, - "source": [ - "## โš™๏ธ Data Preparation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f51cbbfc", - "metadata": {}, - "outputs": [], - "source": [ - "# Concatenate all article IDs and embeddings from the candidate_embeddings dataset\n", - "all_article_ids = tf.concat([batch[0] for batch in candidate_embeddings], axis=0)\n", - "all_embeddings = tf.concat([batch[1] for batch in candidate_embeddings], axis=0)\n", - "\n", - "# Convert tensors to numpy arrays\n", - "all_article_ids_np = all_article_ids.numpy()\n", - "all_embeddings_np = all_embeddings.numpy()\n", - "\n", - "# Convert numpy arrays to lists\n", - "items_ids_list = all_article_ids_np.tolist()\n", - "embeddings_list = all_embeddings_np.tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cd1b7d49", - "metadata": {}, - "outputs": [], - "source": [ - "# Create a DataFrame\n", - "data_emb = pd.DataFrame({\n", - " 'video_id': items_ids_list, \n", - " 'embeddings': embeddings_list,\n", - "})\n", - "data_emb['video_id'] = data_emb['video_id'].str.decode('utf-8')\n", - "\n", - "data_emb.head()" - ] - }, - { - "cell_type": "markdown", - "id": "3c131a8b", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature Group Creation \n", - "\n", - "Now you are ready to create a feature group for your candidate embeddings.\n", - "\n", - "To begin with, you need to create your Embedding Index where you will specify the name of the embeddings feature and the embeddings length.\n", - "Then you attach this index to the FG." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dbe6db98", - "metadata": {}, - "outputs": [], - "source": [ - "from hsfs import embedding\n", - "\n", - "# Create the Embedding Index\n", - "emb = embedding.EmbeddingIndex()\n", - "\n", - "emb.add_embedding(\n", - " \"embeddings\", # Embeddings feature name\n", - " len(data_emb[\"embeddings\"].iloc[0]), # Embeddings length\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d94a8821", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'candidate_embeddings_fg' feature group\n", - "candidate_embeddings_fg = fs.get_or_create_feature_group(\n", - " name=\"candidate_embeddings_fg\",\n", - " embedding_index=emb, # Specify the Embedding Index\n", - " primary_key=['video_id'],\n", - " version=1,\n", - " description='Embeddings for each video',\n", - " online_enabled=True,\n", - ")\n", - "\n", - "candidate_embeddings_fg.insert(data_emb)" - ] - }, - { - "cell_type": "markdown", - "id": "9b8b7d0e", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Feature View Creation \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f886cff3", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'candidate_embeddings' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name=\"candidate_embeddings\",\n", - " version=1,\n", - " description='Embeddings of each article',\n", - " query=candidate_embeddings_fg.select([\"video_id\"]),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "a3dd3246", - "metadata": {}, - "source": [ - "---\n", - "## โฉ๏ธ Next Steps \n", - "\n", - "At this point you have a recommender system that is able to generate a set of candidate videos for a user. However, many of these could be poor, as the candidate model was trained with only a few subset of the features. In the next notebook, you'll create a ranking dataset to train a *ranking model* to do more fine-grained predictions." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/4_train_ranking_model.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/4_train_ranking_model.ipynb deleted file mode 100644 index b380f5bb..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/4_train_ranking_model.ipynb +++ /dev/null @@ -1,373 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "18fd1ed3", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Train Ranking Model \n", - "\n", - "In this notebook, you will train a ranking model using gradient boosted trees. " - ] - }, - { - "cell_type": "markdown", - "id": "a8839b46", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "05197280", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from catboost import CatBoostClassifier, Pool\n", - "from sklearn.metrics import classification_report, precision_recall_fscore_support\n", - "import joblib" - ] - }, - { - "cell_type": "markdown", - "id": "229c5069", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23ea515e", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3de921ac", - "metadata": {}, - "outputs": [], - "source": [ - "users_fg = fs.get_feature_group(\n", - " name=\"users\",\n", - " version=1,\n", - ")\n", - "\n", - "user_window_agg_1h_fg = fs.get_feature_group(\n", - " name=\"user_window_agg_1h\",\n", - " version=1,\n", - ")\n", - "\n", - "\n", - "videos_fg = fs.get_feature_group(\n", - " name=\"videos\",\n", - " version=1,\n", - ")\n", - "\n", - "rank_fg = fs.get_feature_group(\n", - " name=\"ranking\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "d854c2d2", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Creation " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "017d4302", - "metadata": {}, - "outputs": [], - "source": [ - "# Select features\n", - "selected_features_customers = users_fg.select_except([\"registration_month\", \"registration_date\", \"registration_month\", \"user_id\"])\\\n", - " .join(user_window_agg_1h_fg.select([\"view_count\", \"dislike_count\", \"like_count\", \"total_watch_time\"]),\n", - " on=[\"user_id\"], prefix= \"user_\")\n", - "\n", - "fs.get_or_create_feature_view( \n", - " name='users',\n", - " query=selected_features_customers,\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "65a8bc35", - "metadata": {}, - "outputs": [], - "source": [ - "# Select features\n", - "selected_features_articles = videos_fg.select_except([\"upload_month\", \"upload_date\", \"upload_month\", \"video_id\"])\n", - "\n", - "fs.get_or_create_feature_view(\n", - " name='videos',\n", - " query=selected_features_articles,\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "26a85948", - "metadata": {}, - "outputs": [], - "source": [ - "# Select features\n", - "selected_features_ranking = rank_fg.select_except([\"user_id\", \"video_id\", \"interaction_month\", \"registration_date\", \"upload_month\", \"upload_date\", \"interaction_type\", \"registration_month\"])\n", - "\n", - "feature_view_ranking = fs.get_or_create_feature_view(\n", - " name='ranking',\n", - " query=selected_features_ranking,\n", - " labels=[\"label\"],\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "0a474e88", - "metadata": {}, - "source": [ - "## ๐Ÿ—„๏ธ Train Data loading " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a72b384", - "metadata": {}, - "outputs": [], - "source": [ - "X_train, X_val, y_train, y_val = feature_view_ranking.train_test_split(\n", - " test_size=0.1,\n", - " description='Ranking training dataset',\n", - ")\n", - "\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9dd2dbba", - "metadata": {}, - "outputs": [], - "source": [ - "y_train.head(3)" - ] - }, - { - "cell_type": "markdown", - "id": "00f10105", - "metadata": {}, - "source": [ - "## ๐Ÿƒ๐Ÿปโ€โ™‚๏ธ Model Training \n", - "\n", - "Let's train a model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c8531f5b", - "metadata": {}, - "outputs": [], - "source": [ - "cat_features = list(\n", - " X_train.select_dtypes(include=['string', 'object']).columns\n", - ")\n", - "\n", - "pool_train = Pool(X_train, y_train, cat_features=cat_features)\n", - "pool_val = Pool(X_val, y_val, cat_features=cat_features)\n", - "\n", - "model = CatBoostClassifier(\n", - " learning_rate=0.2,\n", - " iterations=100,\n", - " depth=10,\n", - " scale_pos_weight=10,\n", - " early_stopping_rounds=5,\n", - " use_best_model=True,\n", - ")\n", - "\n", - "model.fit(\n", - " pool_train, \n", - " eval_set=pool_val,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "9c007b37", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Model Validation \n", - "\n", - "Next, you'll evaluate how well the model performs on the validation data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "412b3cc2", - "metadata": {}, - "outputs": [], - "source": [ - "preds = model.predict(pool_val)\n", - "\n", - "precision, recall, fscore, _ = precision_recall_fscore_support(y_val, preds, average=\"binary\")\n", - "\n", - "metrics = {\n", - " \"precision\" : precision,\n", - " \"recall\" : recall,\n", - " \"fscore\" : fscore,\n", - "}\n", - "print(classification_report(y_val, preds))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cd127abe", - "metadata": {}, - "outputs": [], - "source": [ - "feat_to_score = {\n", - " feature: score \n", - " for feature, score \n", - " in zip(\n", - " X_train.columns, \n", - " model.feature_importances_,\n", - " )\n", - "}\n", - "\n", - "feat_to_score = dict(\n", - " sorted(\n", - " feat_to_score.items(),\n", - " key=lambda item: item[1],\n", - " reverse=True,\n", - " )\n", - ")\n", - "feat_to_score" - ] - }, - { - "cell_type": "markdown", - "id": "b599b46a", - "metadata": {}, - "source": [ - "It can be seen that the model places high importance on user and item embedding features. Consequently, better trained embeddings could yield a better ranking model.\n", - "\n", - "Finally, you'll save your model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ab234527", - "metadata": {}, - "outputs": [], - "source": [ - "joblib.dump(model, 'ranking_model.pkl')" - ] - }, - { - "cell_type": "markdown", - "id": "26ad7e59", - "metadata": {}, - "source": [ - "### ๐Ÿ’พ Upload Model to Model Registry \n", - "\n", - "You'll upload the model to the Hopsworks Model Registry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bbcba206", - "metadata": {}, - "outputs": [], - "source": [ - "# Connect to Hopsworks Model Registry\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4185f67f", - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "input_example = X_train.sample().to_dict(\"records\")\n", - "input_schema = Schema(X_train)\n", - "output_schema = Schema(y_train)\n", - "model_schema = ModelSchema(input_schema, output_schema)\n", - "\n", - "ranking_model = mr.python.create_model(\n", - " name=\"ranking_model\", \n", - " metrics=metrics,\n", - " model_schema=model_schema,\n", - " input_example=input_example,\n", - " description=\"Ranking model that scores item candidates\",\n", - ")\n", - "ranking_model.save(\"ranking_model.pkl\")" - ] - }, - { - "cell_type": "markdown", - "id": "2b4032da", - "metadata": {}, - "source": [ - "---\n", - "## โฉ๏ธ Next Steps \n", - "\n", - "Now you have trained both a retrieval and a ranking model, which will allow you to generate recommendations for users. In the next notebook, you'll take a look at how you can deploy these models with the `HSML` library." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/5_create_deployments.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/5_create_deployments.ipynb deleted file mode 100644 index c8c567ca..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/5_create_deployments.ipynb +++ /dev/null @@ -1,785 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "7a62c0de", - "metadata": {}, - "source": [ - "## ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Create Deployment \n", - "\n", - "In this notebook, you'll create a deployment for your recommendation system.\n", - "\n", - "**NOTE Currently the transformer scripts are not implemented.**" - ] - }, - { - "cell_type": "markdown", - "id": "9326c452", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "159659de", - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install -r requirements.txt" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "214a333d", - "metadata": {}, - "outputs": [], - "source": [ - "import os" - ] - }, - { - "cell_type": "markdown", - "id": "ef743d42", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4729a4f9", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "# Connect to Hopsworks Model Registry\n", - "mr = project.get_model_registry()\n", - "\n", - "dataset_api = project.get_dataset_api()" - ] - }, - { - "cell_type": "markdown", - "id": "d064e89f", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Ranking Model Deployment \n" - ] - }, - { - "cell_type": "markdown", - "id": "b1879f08", - "metadata": {}, - "source": [ - "You start by deploying your ranking model. Since it is a CatBoost model you need to implement a `Predict` class that tells Hopsworks how to load the model and how to use it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea029818", - "metadata": {}, - "outputs": [], - "source": [ - "ranking_model = mr.get_best_model(\n", - " name=\"ranking_model\", \n", - " metric=\"fscore\", \n", - " direction=\"max\",\n", - ")\n", - "ranking_model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb425246", - "metadata": {}, - "outputs": [], - "source": [ - "ranking_model.model_schema[\"input_schema\"][\"columnar_schema\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "de1f5c67", - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile ranking_transformer.py\n", - "\n", - "import os\n", - "import pandas as pd\n", - "\n", - "import hopsworks\n", - "from opensearchpy import OpenSearch\n", - "\n", - "import logging\n", - "\n", - "\n", - "class Transformer(object):\n", - " \n", - " def __init__(self):\n", - " # Connect to Hopsworks\n", - " project = hopsworks.connection().get_project()\n", - " self.fs = project.get_feature_store()\n", - " \n", - " # Retrieve the 'videos' feature view\n", - " self.videos_fv = self.fs.get_feature_view(\n", - " name=\"videos\", \n", - " version=1,\n", - " )\n", - " \n", - " # Get list of feature names for videos\n", - " self.video_features = [feat.name for feat in self.videos_fv.schema]\n", - " \n", - " # Retrieve the 'users' feature view\n", - " self.users_fv = self.fs.get_feature_view(\n", - " name=\"users\", \n", - " version=1,\n", - " )\n", - "\n", - " # Retrieve the 'candidate_embeddings' feature view\n", - " self.candidate_index = self.fs.get_feature_view(\n", - " name=\"candidate_embeddings\", \n", - " version=1,\n", - " )\n", - "\n", - " # Retrieve ranking model\n", - " mr = project.get_model_registry()\n", - " model = mr.get_model(\n", - " name=\"ranking_model\", \n", - " version=1,\n", - " )\n", - " \n", - " # Extract input schema from the model\n", - " input_schema = model.model_schema[\"input_schema\"][\"columnar_schema\"]\n", - " \n", - " # Get the names of features expected by the ranking model\n", - " self.ranking_model_feature_names = [feat[\"name\"] for feat in input_schema]\n", - " \n", - " def preprocess(self, inputs):\n", - " # Extract the input instance\n", - " inputs = inputs[\"instances\"][0]\n", - "\n", - " # Extract customer_id from inputs\n", - " user_id = inputs[\"user_id\"]\n", - " month_sin = inputs[\"month_sin\"]\n", - " month_cos = inputs[\"month_cos\"]\n", - " \n", - " # Search for candidate items\n", - " neighbors = self.candidate_index.find_neighbors(\n", - " inputs[\"query_emb\"], \n", - " k=100,\n", - " )\n", - " neighbors = [neighbor[0] for neighbor in neighbors]\n", - " \n", - " # Get IDs of items already bought by the customer\n", - " already_seen_videos_ids = self.fs.sql(\n", - " f\"SELECT video_id from interactions_1 WHERE user_id = '{user_id}'\", \n", - " online=True).values.reshape(-1).tolist()\n", - " \n", - " # Filter candidate items to exclude those already bought by the customer\n", - " video_id_list = [\n", - " video_id\n", - " for video_id \n", - " in neighbors \n", - " if video_id\n", - " not in already_seen_videos_ids\n", - " ]\n", - " \n", - " # Retrieve Article data for candidate items\n", - " videos_data = [\n", - " self.videos_fv.get_feature_vector({\"video_id\": video_id}) \n", - " for video_id \n", - " in video_id_list\n", - " ]\n", - "\n", - " ranking_model_inputs = pd.DataFrame(\n", - " data=videos_data, \n", - " columns=self.video_features,\n", - " )\n", - " \n", - " # Join candidate items with their features\n", - " ranking_model_inputs[\"video_id\"] = video_id_list\n", - " \n", - " # Add customer features\n", - " user_features = self.users_fv.get_feature_vector(\n", - " {\"user_id\": user_id}, \n", - " return_type=\"pandas\",\n", - " )\n", - " \n", - " ranking_model_inputs[\"gender\"] = user_features[\"gender\"].values[0] \n", - " ranking_model_inputs[\"age\"] = user_features[\"age\"].values[0] \n", - " ranking_model_inputs[\"country\"] = user_features[\"country\"].values[0] \n", - " ranking_model_inputs[\"month_sin\"] = month_sin\n", - " ranking_model_inputs[\"month_cos\"] = month_cos\n", - " \n", - " # Select only the features required by the ranking model\n", - " ranking_model_inputs = ranking_model_inputs[self.ranking_model_feature_names]\n", - " \n", - " return { \n", - " \"inputs\" : [{\"ranking_features\": ranking_model_inputs.values.tolist(), \"video_ids\": video_id_list}]\n", - " }\n", - "\n", - " def postprocess(self, outputs):\n", - " # Extract predictions from the outputs\n", - " preds = outputs[\"predictions\"]\n", - " \n", - " # Merge prediction scores and corresponding article IDs into a list of tuples\n", - " ranking = list(zip(preds[\"scores\"], preds[\"video_ids\"]))\n", - " \n", - " # Sort the ranking list by score in descending order\n", - " ranking.sort(reverse=True)\n", - " \n", - " # Return the sorted ranking list\n", - " return { \n", - " \"ranking\": ranking,\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "155add21", - "metadata": {}, - "outputs": [], - "source": [ - "# Copy transformer file into Hopsworks File System \n", - "uploaded_file_path = dataset_api.upload(\n", - " \"ranking_transformer.py\", # File name to be uploaded\n", - " \"Resources\", # Destination directory in Hopsworks File System \n", - " overwrite=True, # Overwrite the file if it already exists\n", - ") \n", - "\n", - "# Construct the path to the uploaded transformer script\n", - "transformer_script_path = os.path.join(\n", - " \"/Projects\", # Root directory for projects in Hopsworks\n", - " project.name, # Name of the current project\n", - " uploaded_file_path, # Path to the uploaded file within the project\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5e76f3ab", - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile ranking_predictor.py\n", - "\n", - "import os\n", - "import joblib\n", - "import numpy as np\n", - "\n", - "import logging\n", - "\n", - "class Predict(object):\n", - " \n", - " def __init__(self):\n", - " self.model = joblib.load(os.environ[\"ARTIFACT_FILES_PATH\"] + \"/ranking_model.pkl\")\n", - "\n", - " def predict(self, inputs):\n", - " # Extract ranking features and article IDs from the inputs\n", - " features = inputs[0].pop(\"ranking_features\")\n", - " video_ids = inputs[0].pop(\"video_ids\")\n", - " \n", - " # Log the extracted features\n", - " logging.info(\"predict -> \" + str(features))\n", - "\n", - " # Predict probabilities for the positive class\n", - " scores = self.model.predict_proba(features).tolist()\n", - " \n", - " # Get scores of positive class\n", - " scores = np.asarray(scores)[:,1].tolist() \n", - "\n", - " # Return the predicted scores along with the corresponding article IDs\n", - " return {\n", - " \"scores\": scores, \n", - " \"video_ids\": video_ids,\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43e26068", - "metadata": {}, - "outputs": [], - "source": [ - "# Upload predictor file to Hopsworks\n", - "uploaded_file_path = dataset_api.upload(\n", - " \"ranking_predictor.py\", \n", - " \"Resources\", \n", - " overwrite=True,\n", - ")\n", - "\n", - "# Construct the path to the uploaded script\n", - "predictor_script_path = os.path.join(\n", - " \"/Projects\", \n", - " project.name, \n", - " uploaded_file_path,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "17ac4124", - "metadata": {}, - "source": [ - "With that in place, you can finally deploy your model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "913b28d2", - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.transformer import Transformer\n", - "\n", - "ranking_deployment_name = \"rankingdeployment\"\n", - "\n", - "# Define transformer\n", - "ranking_transformer=Transformer(\n", - " script_file=transformer_script_path, \n", - " resources={\"num_instances\": 1},\n", - ")\n", - "\n", - "# Deploy ranking model\n", - "ranking_deployment = ranking_model.deploy(\n", - " name=ranking_deployment_name,\n", - " description=\"Deployment that search for video candidates and scores them based on user metadata\",\n", - " script_file=predictor_script_path,\n", - " resources={\"num_instances\": 1},\n", - " transformer=ranking_transformer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9151e785", - "metadata": {}, - "outputs": [], - "source": [ - "# Start the deployment\n", - "ranking_deployment.start()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f267cd6e", - "metadata": {}, - "outputs": [], - "source": [ - "# Check logs in case of failure\n", - "#ranking_deployment.get_logs(component=\"predictor\", tail=200)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "391032d2", - "metadata": {}, - "outputs": [], - "source": [ - "def get_top_recommendations(ranked_candidates, k=3):\n", - " return [candidate[-1] for candidate in ranked_candidates['ranking'][:k]]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d786e76e", - "metadata": {}, - "outputs": [], - "source": [ - "# Define a test input example\n", - "test_ranking_input = {\"instances\": [{\n", - " \"user_id\": \"ED267E\",\n", - " \"month_sin\": 1.2246467991473532e-16,\n", - " \"month_cos\": -1.0,\n", - " \"query_emb\": [0.214135289,\n", - " 0.571055949,\n", - " 0.330709577,\n", - " -0.225899458,\n", - " -0.308674961,\n", - " -0.0115124583,\n", - " 0.0730511621,\n", - " -0.495835781,\n", - " 0.625569344,\n", - " -0.0438038409,\n", - " 0.263472944,\n", - " -0.58485353,\n", - " -0.307070434,\n", - " 0.0414443575,\n", - " -0.321789205,\n", - " 0.966559],\n", - "}]}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f548e470", - "metadata": {}, - "outputs": [], - "source": [ - "# Test ranking deployment\n", - "ranked_candidates = ranking_deployment.predict(test_ranking_input)\n", - "\n", - "# Retrieve article ids of the top recommended items\n", - "recommendations = get_top_recommendations(ranked_candidates, k=3)\n", - "recommendations" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c1f2888e", - "metadata": {}, - "outputs": [], - "source": [ - "# Check logs in case of failure\n", - "#ranking_deployment.get_logs(component=\"transformer\",tail=200)" - ] - }, - { - "cell_type": "markdown", - "id": "2ebce4de", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "id": "5b8dafe6", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Query Model Deployment \n", - "\n", - "Next, you'll deploy your query model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "08e5295a", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the 'query_model' from the Model Registry\n", - "query_model = mr.get_model(\n", - " name=\"query_model\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b8b4889d", - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile querymodel_transformer.py\n", - "\n", - "import os\n", - "import numpy as np\n", - "import pandas as pd\n", - "from datetime import datetime\n", - "\n", - "import hopsworks\n", - "\n", - "import logging\n", - "import json\n", - "\n", - "\n", - "# Calculate ondemand features the sine and cosine of the month of interaction date\n", - "def month_sine(interaction_date): \n", - " # Calculate a coefficient for adjusting the periodicity of the month\n", - " coef = np.random.uniform(0, 2 * np.pi) / 12\n", - "\n", - " #month_of_purchase = datetime.strptime(transaction_date, \"%Y-%m-%dT%H:%M:%S\").month\n", - " month_of_interaction = interaction_date.month \n", - " \n", - " # Calculate the sine and cosine components for the month_of_purchase\n", - " return float(np.sin(month_of_interaction * coef)) \n", - "\n", - "def month_cosine(interaction_date): \n", - " # Calculate a coefficient for adjusting the periodicity of the month\n", - " coef = np.random.uniform(0, 2 * np.pi) / 12\n", - "\n", - " #month_of_purchase = datetime.strptime(transaction_date, \"%Y-%m-%dT%H:%M:%S\").month\n", - " month_of_interaction = interaction_date.month \n", - " \n", - " # Calculate the sine and cosine components for the month_of_purchase\n", - " return float(np.cos(month_of_interaction * coef))\n", - "\n", - " \n", - "class Transformer(object):\n", - " \n", - " def __init__(self): \n", - " # Connect to the Hopsworks\n", - " project = hopsworks.connection().get_project()\n", - " ms = project.get_model_serving()\n", - " \n", - " # Retrieve the 'users' feature view\n", - " fs = project.get_feature_store()\n", - " self.users_fv = fs.get_feature_view(\n", - " name=\"users\", \n", - " version=1,\n", - " )\n", - " # Retrieve the ranking deployment \n", - " self.ranking_server = ms.get_deployment(\"rankingdeployment\")\n", - " \n", - " self.logger = logging.getLogger(__name__)\n", - "\n", - " \n", - " \n", - " def preprocess(self, inputs):\n", - " # Check if the input data contains a key named \"instances\"\n", - " # and extract the actual data if present\n", - " inputs = inputs[\"instances\"] if \"instances\" in inputs else inputs\n", - " \n", - " # Extract customer_id from the inputs\n", - " user_id = inputs[\"user_id\"]\n", - " interaction_date = inputs.pop(\"interaction_date\")\n", - "\n", - " # Get customer features\n", - " user_features = self.users_fv.get_feature_vector(\n", - " {\"user_id\": user_id}, \n", - " return_type=\"pandas\",\n", - " )\n", - "\n", - " # Enrich inputs with customer age\n", - " inputs[\"gender\"] = user_features['gender'].values[0]\n", - " inputs[\"age\"] = user_features['age'].values[0] \n", - "\n", - " # Calculate the sine and cosine of the month_of_purchase\n", - " interaction_date = datetime.strptime(interaction_date, \"%Y-%m-%d %H:%M:%S\")\n", - " \n", - " # Calculate the sine and cosine components for the month_of_purchase\n", - " inputs[\"month_sin\"] = month_sine(interaction_date)\n", - " inputs[\"month_cos\"] = month_cosine(interaction_date)\n", - " \n", - " inputs[\"country\"] = user_features['country'].values[0]\n", - " inputs[\"user_dislike_count\"] = user_features['user_dislike_count'].values[0]\n", - " inputs[\"user_like_count\"] = user_features['user_like_count'].values[0]\n", - " inputs[\"user_total_watch_time\"] = user_features['user_total_watch_time'].values[0]\n", - " inputs[\"user_view_count\"] = user_features['user_view_count'].values[0]\n", - " \n", - " return {\n", - " \"instances\" : [inputs]\n", - " }\n", - " \n", - " def postprocess(self, outputs):\n", - " # Return ordered ranking predictions\n", - " return {\n", - " \"predictions\": self.ranking_server.predict({ \"instances\": outputs[\"predictions\"]}),\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "96011659", - "metadata": {}, - "outputs": [], - "source": [ - "# Copy transformer file into Hopsworks File System\n", - "uploaded_file_path = dataset_api.upload(\n", - " \"querymodel_transformer.py\", \n", - " \"Models\", \n", - " overwrite=True,\n", - ")\n", - "\n", - "# Construct the path to the uploaded script\n", - "transformer_script_path = os.path.join(\n", - " \"/Projects\", \n", - " project.name, \n", - " uploaded_file_path,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9da61600", - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.transformer import Transformer\n", - "\n", - "query_model_deployment_name = \"querydeployment\"\n", - "\n", - "# Define transformer\n", - "query_model_transformer=Transformer(\n", - " script_file=transformer_script_path, \n", - " resources={\"num_instances\": 1},\n", - ")\n", - "\n", - "# Deploy the query model\n", - "query_model_deployment = query_model.deploy(\n", - " name=query_model_deployment_name,\n", - " description=\"Deployment that generates query embeddings from user and video features using the query model\",\n", - " resources={\"num_instances\": 1},\n", - " transformer=query_model_transformer,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "ed2dcc62", - "metadata": {}, - "source": [ - "At this point, you have registered your deployment. To start it up you need to run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee977d2f", - "metadata": {}, - "outputs": [], - "source": [ - "# Start the deployment\n", - "query_model_deployment.start()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a42f4d7f", - "metadata": {}, - "outputs": [], - "source": [ - "# Check logs in case of failure\n", - "# query_model_deployment.get_logs(component=\"transformer\", tail=20)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5f410c3d", - "metadata": {}, - "outputs": [], - "source": [ - "# Define a test input example\n", - "#data = {\"instances\": {\"user_id\": \"ED267E\"}}\n", - "\n", - "# Define a test input example\n", - "data = {\"instances\": {\"user_id\": \"ED267E\", \"interaction_date\": \"2024-02-10 15:33:11\"}}\n", - "\n", - "\n", - "# Test the deployment\n", - "ranked_candidates = query_model_deployment.predict(data)\n", - "\n", - "# Retrieve article ids of the top recommended items\n", - "recommendations = get_top_recommendations(\n", - " ranked_candidates['predictions'], \n", - " k=3,\n", - ")\n", - "recommendations\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f2f56f00", - "metadata": {}, - "outputs": [], - "source": [ - "# Check logs in case of failure\n", - "#query_model_deployment.get_logs(component=\"transformer\",tail=200)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c38a70e5", - "metadata": {}, - "outputs": [], - "source": [ - "#ranking_deployment.get_logs(component=\"transformer\",tail=200)" - ] - }, - { - "cell_type": "markdown", - "id": "280d386f", - "metadata": {}, - "source": [ - "Stop the deployment when you're not using it." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a44ce70d", - "metadata": {}, - "outputs": [], - "source": [ - "# Stop the ranking model deployment\n", - "ranking_deployment.stop()\n", - "\n", - "# Stop the query model deployment\n", - "query_model_deployment.stop()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "82be7ad5", - "metadata": {}, - "outputs": [], - "source": [ - "inputs = data[\"instances\"][0]\n", - "\n", - "# Extract customer_id from the inputs\n", - "user_id = inputs[\"user_id\"]\n", - "interaction_date = inputs[\"interaction_date\"]\n" - ] - }, - { - "cell_type": "markdown", - "id": "6d72050a", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/README.md b/advanced_tutorials/tiktok_recsys/python/Jupyter/README.md deleted file mode 100644 index 40beeb04..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/README.md +++ /dev/null @@ -1,7 +0,0 @@ -*This is an auto-generated README.md file for your Dataset!* -To replace it, go into your DataSet and edit the README.md file. - -*Jupyter* DataSet -=== - -## Contains Jupyter notebooks. \ No newline at end of file diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/feature_monitoring.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/feature_monitoring.ipynb deleted file mode 100644 index fabe9b85..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/feature_monitoring.ipynb +++ /dev/null @@ -1,262 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9018b425", - "metadata": {}, - "source": [ - "![Screenshot from 2022-06-16 14-24-57.png](data:image/png;base64,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)" - ] - }, - { - "cell_type": "markdown", - "id": "ed9b966b", - "metadata": {}, - "source": [ - "# ๐Ÿ“ˆ Feature Monitoring\n", - "\n", - "This tutorial aims to help data science teams to implement feature monitoring in their production pipeline. ML-models rely heavily on stable data trends over time to keep making high quality predictions. It is however often cumbersome for data science teams to keep an eye on whether their assumptions hold true. To solve this problem, Hopsworks provides a way to schedule regular jobs on snapshots of data to test those assumptions. The regular collection of aggregated statistics on Feature data is an additional tool for data teams to help keep data quality high in the feature store, building confidence to re-use features across relevant projects. In addition, alerts and scheduled data collection reduce the maintenance burden for teams which have ML-models in production and enables you to detect data drift before customers start seeing an impact.\n", - "\n", - "Hopsworks feature monitoring capabilities can be summarised as:\n", - " - **Asynchronous**: The monitoring is performed in separate jobs from write operations.\n", - " - **Historical**: An isolated data point means nothing. By performing regular computations, unusual pattern can be discovered.\n", - " - **Production-oriented**: Feature monitoring is primarily a tool aimed at easing the burden of maintaining model in production.\n", - " - **Alerting**: Raise a warning that something that you did not expect has happened.\n", - " - **Reporting**: Guide the decision on whether to retrain a model or re-engineer a Feature.\n", - " - **Data Quality**: Aggregate and collect information about the quality of your data pipelines. \n", - "\n", - "Feature monitoring in Hopsworks is not intended for:\n", - " - Gate-keeping: Feature monitoring is aimed to monitor data already in Hopsworks, not to keep the data out.\n", - " - Real-time: Computing statistics on mini-batches of data is very noisy, which can mask long-term trends.\n", - " - Accurate Logging: Not logging data, only the summary of a snapshot in a given time-window \n", - "\n", - "## ๐Ÿ“— Feature Monitoring Documentation\n", - "For more information on the intricacies of Feature Monitoring, see the [Feature Monitoring Guide](https://docs.hopsworks.ai/latest/user_guides/fs/feature_monitoring/).\n", - "\n", - "## ๐Ÿ—’๏ธ This notebook is divided in 3 sections:\n", - "0. (Requirement and setup)\n", - "1. Get started quickly with Scheduled Statistics\n", - "2. Setup Feature Monitoring with Reference windows\n", - "3. Explore Feature Monitoring results\n", - "4. List Feature Monitoring configurations" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "78326a44", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "import numpy as np\n", - "import pandas as pd\n", - "import datetime\n", - "\n", - "project = hopsworks.login()\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "80941734", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "id": "2731bad3", - "metadata": {}, - "source": [ - "## ๐ŸชŸ Feature Monitoring and Reference Windows" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "303e40a2-6221-41aa-8c5c-fdad2582dc98", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_fg = fs.get_feature_group(\n", - " name=\"interactions\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0693b884-859b-4280-9c54-28ce253d7745", - "metadata": {}, - "outputs": [], - "source": [ - "fg_watch_time_monitoring_reference_sliding = interactions_fg.create_feature_monitoring(\n", - " name=\"fg_watch_time_monitoring_reference_sliding\",\n", - " feature_name=\"watch_time\",\n", - " cron_expression= \"0 0 * ? * * *\",#\"0 0 12 ? * * *\",\n", - " description=\"Compute and compare descriptive statistics on the watch_time Feature on a daily basis to the same statistics computed in the previous week\",\n", - ").with_detection_window(\n", - " time_offset=\"1d\", # fetch data from inserted throughout the last day\n", - " row_percentage=0.2,\n", - ").with_reference_window(\n", - " time_offset=\"1w1d\", # fetch data from the start of same day of the previous week\n", - " window_length=\"1d\", # limit the reference window to the same day of the previous week\n", - " row_percentage=0.2,\n", - ").compare_on(\n", - " metric=\"mean\",\n", - " threshold=0.1, # allow for a 10% difference between the two windows before triggering an alert\n", - ").save()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "53e5cd5a-204a-4432-83d9-bb18cc88b50b", - "metadata": {}, - "outputs": [], - "source": [ - "retrieval_fv = fs.get_feature_view(\"retrieval\", 1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b5ecd419", - "metadata": {}, - "outputs": [], - "source": [ - "fv_age_monitoring_reference_td = retrieval_fv.create_feature_monitoring(\n", - " name=\"fv_vid_total_watch_time_monitoring_reference_td\",\n", - " feature_name=\"age\",\n", - " cron_expression= \"0 0 * ? * * *\",#\"0 0 12 ? * * *\",\n", - " description=\"Compute and compare descriptive statistics on the age Feature in the last hour of data inserted in the Feature View\",\n", - ").with_detection_window(\n", - " time_offset=\"1h\", # fetch data from the last hour\n", - " row_percentage=0.2,\n", - ").with_reference_training_dataset(\n", - " training_dataset_version=1, # use the training dataset used to train your production model\n", - ").compare_on(\n", - " metric=\"mean\",\n", - " threshold=50,\n", - ").save()" - ] - }, - { - "cell_type": "markdown", - "id": "9e2b659e", - "metadata": {}, - "source": [ - "## ๐Ÿ“‰ Feature Monitoring results and Hopsworks Interactive Graph\n", - "\n", - "So far we have discussed how the python API allows you to quickly setup monitoring jobs and how to customize them to cater to your project needs. We want to focus now on getting the full values from the data points computed by the monitoring jobs. Each data point is stored in the database Feature Monitoring Result. A typical result has the following structure:\n", - " - Result Metadata, including the time at which the job was executed\n", - " - Detection Statistics like count or num_null_values, as well as metric specific to different data types (e.g mean for numerical value)\n", - " - Reference Statistics, if a reference window was defined\n", - " - Comparison information : data shift detected, difference, etc...\n", - "\n", - "Hopsworks UI is the easiest place to get started with monitoring results. You can select a Feature Group or Feature View and see the results of the monitoring jobs in the [Hopsworsk Interactive Graph](https://docs.hopsworks.ai/latest/user_guides/fs/feature_monitoring/interactive_graph). The results are displayed as a Time-series to visualise trend in the monitoring data.\n", - "\n", - "Additionally, you can use the python API to retrieve the monitoring results and plot them as you see fit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "07c863f2", - "metadata": {}, - "outputs": [], - "source": [ - "# Fetch results\n", - "monitoring_results = fg_watch_time_monitoring_reference_sliding.get_history(\n", - " start_time=datetime.datetime.now() - datetime.timedelta(days=1), # fetched data inserted in the last day\n", - " end_time=datetime.datetime.now(),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "0a47a6f9", - "metadata": {}, - "source": [ - "## โš™๏ธ List Feature Monitoring configurations\n", - "\n", - "Finally, you can list the Feature Monitoring configurations created for your Feature Group or Feature View using the Python API." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "58483800", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_fg.get_feature_monitoring_configs()" - ] - }, - { - "cell_type": "markdown", - "id": "626aae5e", - "metadata": {}, - "source": [ - "or retrieve a specific configuration by providing the name." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3372c2d8", - "metadata": {}, - "outputs": [], - "source": [ - "interactions_fg.get_feature_monitoring_configs(name=\"fg_watch_time_monitoring_reference_sliding\")" - ] - }, - { - "cell_type": "markdown", - "id": "c13fbc94", - "metadata": {}, - "source": [ - "## Conclusion \n", - "\n", - "Hopsworks simplifies Feature Monitoring by allowing to schedule monitoring jobs and store the results. In this notebook, we have shown how to get started with Feature Monitoring in Hopsworks. Starting early will allow you to compound knowledge as every new job provides new data points revealing hidden trends in your evolving data. Once you have a better understanding you can use Hopsworks customization options to refine and optimize feature monitoring to match your production context. \n", - "\n", - "Hopsworks UI allows you to quickly visualise timeseries to monitor the evolution of your data. You can also use the python API to retrieve the monitoring results and plot them to match more advance use cases." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a67d4e89-fd68-47d7-aad9-665ab038dc65", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "interpreter": { - "hash": "e1ddeae6eefc765c17da80d38ea59b893ab18c0c0904077a035ef84cfe367f83" - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/features/interactions.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/features/interactions.py deleted file mode 100644 index 559105f0..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/features/interactions.py +++ /dev/null @@ -1,213 +0,0 @@ -from mimesis import Generic -from mimesis.locales import Locale -import random -from datetime import datetime, timedelta -from typing import List, Dict, Any -from streaming import config -import numpy as np - -def generate_interactions(num_interactions: int, users: List[Dict[str, str]], videos: List[Dict[str, str]]) -> List[ - Dict[str, Any]]: - """ - Generate a list of dictionaries, each representing an interaction between a user and a video. - - This function creates interaction data by randomly pairing users with videos and assigning - interaction details like interaction type, watch time, and whether the video was watched till the end. - The likelihood of a video being watched till the end is inversely proportional to its length. - - Args: - num_interactions (int): The number of interactions to generate. - users (List[Dict[str, str]]): A list of dictionaries, where each dictionary contains user data. - videos (List[Dict[str, str]]): A list of dictionaries, where each dictionary contains video data. - - Returns: - List[Dict[str, Any]]: A list of dictionaries, each containing interaction data. - """ - generic = Generic(locale=Locale.EN) - interactions = [] # List to store generated interaction data - - for _ in range(num_interactions): - user = random.choice(users) - video = random.choice(videos) - - # Parse dates from strings - user_registration_date = datetime.strptime(user['registration_date'], config.DATE_TIME_FORMAT) - video_upload_date = datetime.strptime(video['upload_date'], config.DATE_TIME_FORMAT) - - # Determine the earliest possible date for the interaction - earliest_date = max(user_registration_date, video_upload_date) - - # Generate a random date for the interaction - days_since_earliest = (datetime.now() - earliest_date).days - random_days = random.randint(0, days_since_earliest) - interaction_date = earliest_date + timedelta(days=random_days) - - previous_interaction_date = interaction_date - timedelta(days=random.randint(0, random.randint(0, 90))) - - interaction_types = ['like', 'dislike', 'view', 'comment', 'share', 'skip'] - weights = [1.5, 0.2, 3, 0.5, 0.8, 10] - - # Generate watch time and determine if the video was watched till the end - watch_time = random.randint(1, video['video_length']) - - probability_watched_till_end = 1 - (watch_time / video['video_length']) - watched_till_end = random.random() < probability_watched_till_end - - if watched_till_end: - watch_time = video['video_length'] # Adjust watch time to video length if watched till the end - - # Constructing the interaction dictionary - interaction = { - 'interaction_id': generic.person.identifier(mask='####-##-####'), - 'user_id': user['user_id'], - 'video_id': video['video_id'], - 'category_id': video['category_id'], - 'interaction_type': random.choices(interaction_types, weights=weights, k=1)[0], - 'watch_time': watch_time, - 'interaction_date': interaction_date.strftime(config.DATE_TIME_FORMAT), - 'previous_interaction_date': previous_interaction_date.strftime(config.DATE_TIME_FORMAT), - 'interaction_month': interaction_date.strftime(config.MONTH_FORMAT), - } - - interactions.append(interaction) # Add the interaction to the list - - return interactions - - -def generate_user_interactions_window_agg(num_interactions: int, users: List[Dict[str, str]], - videos: List[Dict[str, str]]) -> List[Dict[str, Any]]: - """ - Generate a list of dictionaries, each representing an interaction between a user and a video. - - This function creates interaction data by randomly pairing users with videos and assigning - interaction details like interaction type, watch time, and whether the video was watched till the end. - The likelihood of a video being watched till the end is inversely proportional to its length. - - Args: - num_interactions (int): The number of interactions to generate. - users (List[Dict[str, str]]): A list of dictionaries, where each dictionary contains user data. - videos (List[Dict[str, str]]): A list of dictionaries, where each dictionary contains video data. - - Returns: - List[Dict[str, Any]]: A list of dictionaries, each containing interaction data. - """ - generic = Generic(locale=Locale.EN) - interactions = [] # List to store generated interaction data - - for _ in range(num_interactions): - user = random.choice(users) - video = random.choice(videos) - - # Parse dates from strings - user_registration_date = datetime.strptime(user['registration_date'], config.DATE_TIME_FORMAT) - video_upload_date = datetime.strptime(video['upload_date'], config.DATE_TIME_FORMAT) - - # Determine the earliest possible date for the interaction - earliest_date = max(user_registration_date, video_upload_date) - - # Generate interaction - interaction_types = ['like', 'dislike', 'view', 'comment', 'share', 'skip'] - weights = [1.5, 0.2, 3, 0.5, 0.8, 10] - - # Constructing the interaction dictionary - interaction_date = video_upload_date + timedelta(hours=random.randint(0, 100)) - interaction = { - 'user_id': user['user_id'], - 'category_id': video['category_id'], - - 'window_end_time': interaction_date.strftime(config.DATE_TIME_FORMAT), - 'interaction_month': interaction_date.strftime(config.MONTH_FORMAT), - - "like_count": random.randint(0, 100), - "dislike_count": random.randint(0, 100), - "view_count": random.randint(0, 100), - "comment_count": random.randint(0, 100), - "share_count": random.randint(0, 100), - "skip_count": random.randint(0, 100), - "total_watch_time": random.randint(0, 100), - } - - interactions.append(interaction) # Add the interaction to the list - - return interactions - - -def generate_video_interactions_window_agg(num_interactions: int, users: List[Dict[str, str]], - videos: List[Dict[str, str]]) -> List[Dict[str, Any]]: - """ - Generate a list of dictionaries, each representing an interaction between a user and a video. - - This function creates interaction data by randomly pairing users with videos and assigning - interaction details like interaction type, watch time, and whether the video was watched till the end. - The likelihood of a video being watched till the end is inversely proportional to its length. - - Args: - num_interactions (int): The number of interactions to generate. - users (List[Dict[str, str]]): A list of dictionaries, where each dictionary contains user data. - videos (List[Dict[str, str]]): A list of dictionaries, where each dictionary contains video data. - - Returns: - List[Dict[str, Any]]: A list of dictionaries, each containing interaction data. - """ - generic = Generic(locale=Locale.EN) - interactions = [] # List to store generated interaction data - - for _ in range(num_interactions): - user = random.choice(users) - video = random.choice(videos) - - # Parse dates from strings - user_registration_date = datetime.strptime(user['registration_date'], config.DATE_TIME_FORMAT) - video_upload_date = datetime.strptime(video['upload_date'], config.DATE_TIME_FORMAT) - - # Determine the earliest possible date for the interaction - earliest_date = max(user_registration_date, video_upload_date) - - # Generate interaction - interaction_types = ['like', 'dislike', 'view', 'comment', 'share', 'skip'] - weights = [1.5, 0.2, 3, 0.5, 0.8, 10] - - # Constructing the interaction dictionary - interaction_date = video_upload_date + timedelta(hours=random.randint(0, 100)) - interaction = { - 'video_id': video['video_id'], - 'category_id': video['category_id'], - - 'window_end_time': interaction_date.strftime(config.DATE_TIME_FORMAT), - 'interaction_month': interaction_date.strftime(config.MONTH_FORMAT), - - "like_count": random.randint(0, 100), - "dislike_count": random.randint(0, 100), - "view_count": random.randint(0, 100), - "comment_count": random.randint(0, 100), - "share_count": random.randint(0, 100), - "skip_count": random.randint(0, 100), - "total_watch_time": random.randint(0, 100), - - } - - interactions.append(interaction) # Add the interaction to the list - - return interactions - -# Calculate ondemand features the sine and cosine of the month of interaction date -def month_sine(interaction_date): - # Calculate a coefficient for adjusting the periodicity of the month - coef = np.random.uniform(0, 2 * np.pi) / 12 - - #month_of_purchase = datetime.strptime(transaction_date, "%Y-%m-%dT%H:%M:%S").month - month_of_interaction = interaction_date.month - - # Calculate the sine and cosine components for the month_of_purchase - return float(np.sin(month_of_interaction * coef)) - -def month_cosine(interaction_date): - # Calculate a coefficient for adjusting the periodicity of the month - coef = np.random.uniform(0, 2 * np.pi) / 12 - - #month_of_purchase = datetime.strptime(transaction_date, "%Y-%m-%dT%H:%M:%S").month - month_of_interaction = interaction_date.month - - # Calculate the sine and cosine components for the month_of_purchase - return float(np.cos(month_of_interaction * coef)) - diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/features/users.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/features/users.py deleted file mode 100644 index a4c4c8cc..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/features/users.py +++ /dev/null @@ -1,42 +0,0 @@ -from mimesis import Generic -from mimesis.locales import Locale -import random -from datetime import datetime, timedelta -from typing import List, Dict -from streaming import config - -def generate_users(num_users: int, historical=False) -> List[Dict[str, str]]: - """ - Generate a list of dictionaries, each representing a user with various attributes. - - The function creates fake user data including user ID, gender, age, and country - using the mimesis library. The user ID is generated based on a specified mask. - - Args: - num_users (int): The number of user profiles to generate. - - Returns: - List[Dict[str, str]]: A list of dictionaries, each containing details of a user. - """ - generic = Generic(locale=Locale.EN) - users = [] # List to store generated user data - - for _ in range(num_users): - if historical: - days_ago = random.randint(0, 730) # Choose a random number of days up to two years - registration_date = datetime.now() - timedelta(days=days_ago) # Compute the date of registration - else: - registration_date = datetime.now() - - # Generate each user's details - user = { - 'user_id': generic.person.identifier(mask='@@###@'), # Unique user identifier - 'gender': generic.person.gender(), # Randomly generated gender - 'age': random.randint(12, 90), # Randomly generated age between 12 and 90 - 'country': generic.address.country(), # Randomly generated country name - 'registration_date': registration_date.strftime(config.DATE_TIME_FORMAT), - 'registration_month': registration_date.strftime(config.MONTH_FORMAT), - } - users.append(user) # Add the user to the list - - return users diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/features/videos.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/features/videos.py deleted file mode 100644 index 867aa4c5..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/features/videos.py +++ /dev/null @@ -1,52 +0,0 @@ -from mimesis import Generic -from mimesis.locales import Locale -import random -from datetime import datetime, timedelta -from typing import List, Dict, Any -from streaming import config - -def generate_video_content(num_videos: int, historical=False) -> List[Dict[str, str]]: - """ - Generate a list of dictionaries, each representing video content with various attributes. - - Each video includes details such as a unique video ID, category, - video length in seconds, and the upload date. The function uses the mimesis library - for generating random data and Python's random module for numerical attributes. - - Args: - num_videos (int): The number of video entries to generate. - - Returns: - List[Dict[str, str]]: A list of dictionaries, each containing details of a video. - """ - generic = Generic(locale=Locale.EN) - videos = [] # List to store generated video data - - for _ in range(num_videos): - if historical: - days_ago = random.randint(0, 730) # Choose a random number of days up to two years - upload_date = datetime.now() - timedelta(days=days_ago) # Compute the upload date - - else: - upload_date = datetime.now() - - categories = ['Education', 'Entertainment', 'Lifestyle', 'Music', 'News', 'Sports', 'Technology', 'Dance', 'Cooking', 'Comedy', 'Travel'] - categories_dict = {'Education': 1, 'Entertainment': 2, 'Lifestyle': 3, 'Music': 4, 'News': 5, 'Sports': 6, 'Technology': 7, 'Dance': 8, 'Cooking': 9, 'Comedy': 10, 'Travel': 11} - - video_length_seconds = random.randint(10, 250) # Video length in seconds - video_category = random.choice(categories) - - video = { - 'video_id': generic.person.identifier(mask='#@@##@'), # Unique video identifier - 'category_id': categories_dict[video_category], - 'category': video_category, - 'video_length': video_length_seconds, - 'upload_date': upload_date.strftime(config.DATE_TIME_FORMAT), - 'upload_month': upload_date.strftime(config.MONTH_FORMAT) - } - - videos.append(video) # Add the video to the list - - return videos - - diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/1_kafka_topic.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/1_kafka_topic.py deleted file mode 100644 index 960415a5..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/1_kafka_topic.py +++ /dev/null @@ -1,77 +0,0 @@ -import config -import hopsworks - -# Login to Hopsworks project -project = hopsworks.login() - -# Access Kafka API -kafka_api = project.get_kafka_api() - -# Define the schema for Kafka messages -schema = { - "type": "record", - "name": config.SCHEMA_NAME, - "namespace": "ai.hopsworks.examples.bytewax.interactions", - "fields": [ - { - "name": "interaction_id", - "type": [ - "null", - "string" - ] - }, - { - "name": "user_id", - "type": [ - "null", - "string" - ] - }, - { - "name": "video_id", - "type": [ - "null", - "string" - ] - }, - { - "name": "interaction_type", - "type": [ - "null", - "string" - ] - }, - { - "name": "watch_time", - "type": [ - "null", - "long" - ] - }, - { - "name": "interaction_date", - "type": [ - "null", - { - "type": "long", - "logicalType": "timestamp-micros" - } - ] - } - ] -} - -# Create schema in Hopsworks -kafka_api.create_schema( - config.SCHEMA_NAME, - schema, -) - -# Create Kafka topic -kafka_api.create_topic( - config.KAFKA_TOPIC_NAME, - config.SCHEMA_NAME, - 1, - partitions=1, - replicas=1, -) diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/2_simulation.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/2_simulation.py deleted file mode 100644 index 6b54bbc4..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/2_simulation.py +++ /dev/null @@ -1,57 +0,0 @@ -import json -import sys -sys.path.insert(1, '../') - -import pandas as pd -from tqdm import tqdm -import hopsworks -from confluent_kafka import Producer - -import config -from utils.hsfs_bytewax import get_kafka_config -from features.users import generate_users -from features.videos import generate_video_content -from features.interactions import generate_interactions - -def simulate_interactions(): - # Generate data for users - user_data = generate_users(config.USERS_AMOUNT_PIPELINE) - data_users_df = pd.DataFrame(user_data) - - # Generate data for videos - video_data = generate_video_content(config.VIDEO_AMOUNT_PIPELINE) - data_video_df = pd.DataFrame(video_data) - - # Generate interactions - interactions = generate_interactions( - config.INTERACTIONS_AMOUNT_PIPELINE, - user_data, - video_data, - ) - data_interactions_df = pd.DataFrame(interactions) - - data_interactions_df['json'] = data_interactions_df.apply(lambda x: x.to_json(), axis=1) - - return [json.loads(i) for i in data_interactions_df.json.values] - - -# Connect to Hopsworks -project = hopsworks.login() -fs = project.get_feature_store() - -kafka_api = project.get_kafka_api() -kafka_config = get_kafka_config(fs.id) - -print(kafka_config) -producer = Producer(kafka_config) - -# Simulate interactions -interactions_data = simulate_interactions() - -# Send to source topic -for interaction in tqdm(interactions_data, desc="Sending messages"): - producer.produce( - config.KAFKA_TOPIC_NAME, - json.dumps(interaction) - ) - producer.flush() diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/3_streaming_pipeline.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/3_streaming_pipeline.py deleted file mode 100644 index ebe7df7f..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/3_streaming_pipeline.py +++ /dev/null @@ -1,106 +0,0 @@ -import json -from datetime import datetime, timedelta, timezone -import statistics - -from bytewax.dataflow import Dataflow -from bytewax import operators as op -from bytewax.operators.window import EventClockConfig, TumblingWindow -from bytewax.connectors.kafka import operators as kop -import bytewax.operators.window as win -import hopsworks - -from utils.hsfs_bytewax import get_kafka_config, serialize_with_key, sink_kafka -import config - -def parse_value(msg): - """Parse the JSON payload from a Kafka message into a Python dictionary.""" - return json.loads(msg.value.decode('utf-8')) - -def get_event_time(event): - """Retrieve and convert the event's datetime from the input to a timezone-aware datetime object.""" - return datetime.fromisoformat(event["interaction_date"]).replace(tzinfo=timezone.utc) - -def accumulate(acc, event): - """Accumulate watch times for each event to compute mean later.""" - acc.append(event["watch_time"]) - return acc - -def format_event(event): - """Calculate and format the aggregated results for output.""" - key, (metadata, data) = event - mean_watch_time = statistics.mean(data) if data else 0 - return { - "video_id": key, - "week_start": metadata.start.isoformat(), - "mean_watch_time": mean_watch_time, - "interaction_count": len(data) - } - -def setup_dataflow(feature_group_name, feature_group_version, hopsworks_host, hopsworks_project, hopsworks_api_key): - """Configure and return a Bytewax dataflow for aggregating video interaction data.""" - # Connect to hopsworks - project = hopsworks.login( - host=hopsworks_host, - project=hopsworks_project, - api_key_value=hopsworks_api_key - ) - fs = project.get_feature_store() - - # Get feature group and its topic configuration - feature_group = fs.get_feature_group(feature_group_name, feature_group_version) - - flow = Dataflow("video_interaction_aggregation") - - # Setup Kafka source - kafka_config = get_kafka_config(feature_store_id=fs.id) - stream = kop.input( - "kafka_in", - flow, - brokers=[kafka_config['bootstrap.servers']], - topics=[config.KAFKA_TOPIC_NAME], - ) - - # Parse messages from Kafka - parsed_stream = op.map("parse_value", stream.oks, parse_value) - keyed_stream = op.key_on("key_on_video", parsed_stream, lambda e: e["video_id"]) - - # Configure weekly windows - clock = EventClockConfig( - get_event_time, - wait_for_system_duration=timedelta(seconds=10), - ) - week_window = TumblingWindow( - length=timedelta(days=7), - offset=timedelta(days=-datetime.utcnow().weekday()), - ) - - # Window aggregation for mean watch time - windowed_stream = win.fold_window( - "aggregate_watch_time", - keyed_stream, - clock, - week_window, - list, - accumulate, - ) - formatted_stream = op.map( - "format_event", - windowed_stream, - format_event, - ) - - # Output the formatted stream to another Kafka topic - kop.output( - "kafka_out", - formatted_stream, - brokers=[kafka_config['bootstrap.servers']], - topic=feature_group._online_topic_name, - add_config=kafka_config, - ) - - return flow - -# Initialize and run the dataflow -if __name__ == "__main__": - flow = setup_dataflow() - flow.run() diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/config.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/config.py deleted file mode 100644 index 24ebcbc4..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/config.py +++ /dev/null @@ -1,14 +0,0 @@ -USERS_AMOUNT_HISTORICAL = 100_000 -VIDEO_AMOUNT_HISTORICAL = 100_000 -INTERACTIONS_AMOUNT_HISTORICAL = 2000_000 - -USERS_AMOUNT_PIPELINE = 1_000 -VIDEO_AMOUNT_PIPELINE = 1_000 -INTERACTIONS_AMOUNT_PIPELINE = 10_000 - -DATE_TIME_FORMAT = '%Y-%m-%d %H:%M:%S' -DAY_FORMAT = '%Y-%m-%d' -MONTH_FORMAT = '%Y-%m' - -KAFKA_TOPIC_NAME = "interactions_streaming_test_trial1" -SCHEMA_NAME = "interactions_streaming_test_trial_schema1" diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/test.ipynb b/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/test.ipynb deleted file mode 100644 index eb79b241..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/test.ipynb +++ /dev/null @@ -1,256 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "155601e7", - "metadata": {}, - "source": [ - "---\n", - "export HOPSWORKS_HOST=60342400-fd68-11ee-a374-5db5bf1f1917.cloud.hopsworks.ai\n", - "\n", - "export HOPSWORKS_PROJECT_NAME=Bytewax_pipeline\n", - "\n", - "export HOPSWORKS_API_KEY=NJ9njtdzAdDmoAdL.VcPV9NacRISOXnsRVOglr8fQM9HhsiujewZJDzOzeBHlPyTjNV7Z73tYL7BxNGXJ\n", - "\n", - "export FEATURE_GROUP_NAME=interactions\n", - "\n", - "export FEATURE_GROUP_VERSION=1\n", - "\n", - "---\n", - "python 1_kafka_topic.py\n", - "\n", - "python 2_simulation.py\n", - "\n", - "python -m bytewax.run \"3_streaming_pipeline:setup_dataflow('$FEATURE_GROUP_NAME', $FEATURE_GROUP_VERSION, '$HOPSWORKS_HOST', '$HOPSWORKS_PROJECT_NAME', '$HOPSWORKS_API_KEY')\" \n", - "\n", - "RUST_BACKTRACE=1 python -m bytewax.run \"3_streaming_pipeline:setup_dataflow('$FEATURE_GROUP_NAME', $FEATURE_GROUP_VERSION, '$HOPSWORKS_HOST', '$HOPSWORKS_PROJECT_NAME', '$HOPSWORKS_API_KEY')\"\n", - "\n", - "---" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "48340d75", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'interaction_id': '1422-91-0556',\n", - " 'user_id': 'OU595D',\n", - " 'video_id': '2ZU94X',\n", - " 'interaction_type': 'skip',\n", - " 'watch_time': 87,\n", - " 'interaction_date': '2024-04-18 14:20:59'},\n", - " {'interaction_id': '1892-80-4966',\n", - " 'user_id': 'GC019W',\n", - " 'video_id': '4WO41I',\n", - " 'interaction_type': 'skip',\n", - " 'watch_time': 122,\n", - " 'interaction_date': '2024-04-18 14:20:59'},\n", - " {'interaction_id': '3044-36-7740',\n", - " 'user_id': 'IG087J',\n", - " 'video_id': '1KS47H',\n", - " 'interaction_type': 'view',\n", - " 'watch_time': 20,\n", - " 'interaction_date': '2024-04-18 14:20:59'}]" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import json\n", - "import sys\n", - "sys.path.insert(1, '../')\n", - "\n", - "import pandas as pd\n", - "from tqdm import tqdm\n", - "import hopsworks\n", - "from confluent_kafka import Producer\n", - "\n", - "import config\n", - "from utils.hsfs_bytewax import get_kafka_config\n", - "from features.users import generate_users\n", - "from features.videos import generate_video_content\n", - "from features.interactions import generate_interactions\n", - "\n", - "def simulate_interactions():\n", - " # Generate data for users\n", - " user_data = generate_users(config.USERS_AMOUNT_PIPELINE)\n", - " data_users_df = pd.DataFrame(user_data)\n", - "\n", - " # Generate data for videos\n", - " video_data = generate_video_content(config.VIDEO_AMOUNT_PIPELINE)\n", - " data_video_df = pd.DataFrame(video_data)\n", - "\n", - " # Generate interactions\n", - " interactions = generate_interactions(\n", - " config.INTERACTIONS_AMOUNT_PIPELINE, \n", - " user_data, \n", - " video_data,\n", - " )\n", - " data_interactions_df = pd.DataFrame(interactions)\n", - " \n", - " data_interactions_df['json'] = data_interactions_df.apply(lambda x: x.to_json(), axis=1)\n", - " \n", - " return [json.loads(i) for i in data_interactions_df.json.values]\n", - "\n", - "data = simulate_interactions()\n", - "data[:3]" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "3538d673", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connection closed.\n", - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://60342400-fd68-11ee-a374-5db5bf1f1917.cloud.hopsworks.ai/p/119\n", - "Connected. Call `.close()` to terminate connection gracefully.\n", - "{'bootstrap.servers': '172.16.4.25:9091', 'security.protocol': 'SSL', 'ssl.endpoint.identification.algorithm': 'none', 'ssl.ca.location': '/tmp/kafka_sc_119_-1_ca_chain.pem', 'ssl.certificate.location': '/tmp/kafka_sc_119_-1_client_cert.pem', 'ssl.key.location': '/tmp/kafka_sc_119_-1_client_key.pem'}\n" - ] - } - ], - "source": [ - "# Connect to Hopsworks\n", - "project = hopsworks.login()\n", - "fs = project.get_feature_store()\n", - "\n", - "kafka_api = project.get_kafka_api()\n", - "kafka_config = get_kafka_config(fs.id)\n", - "\n", - "print(kafka_config)\n", - "producer = Producer(kafka_config)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "f133a7bb", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'interaction_id': '9812-78-8238',\n", - " 'user_id': 'RR951P',\n", - " 'video_id': '7YP51D',\n", - " 'interaction_type': 'skip',\n", - " 'watch_time': 157,\n", - " 'interaction_date': '2024-04-18 11:33:30'}" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Simulate interactions\n", - "interactions_data = simulate_interactions()\n", - "interactions_data[0]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "d64e1222", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Sending messages: 30%|โ–ˆโ–ˆโ–ˆ | 3/10 [00:00<00:00, 21.78it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'interaction_id': '9812-78-8238', 'user_id': 'RR951P', 'video_id': '7YP51D', 'interaction_type': 'skip', 'watch_time': 157, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '2438-26-4753', 'user_id': 'ZC342Y', 'video_id': '0HP06X', 'interaction_type': 'view', 'watch_time': 98, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '6795-70-8245', 'user_id': 'AL852G', 'video_id': '0TD02F', 'interaction_type': 'skip', 'watch_time': 141, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '1930-44-8804', 'user_id': 'IA528X', 'video_id': '8KA77T', 'interaction_type': 'like', 'watch_time': 22, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '1584-76-4537', 'user_id': 'VZ873S', 'video_id': '6MY59E', 'interaction_type': 'skip', 'watch_time': 74, 'interaction_date': '2024-04-18 11:33:30'}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Sending messages: 90%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ | 9/10 [00:00<00:00, 21.51it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'interaction_id': '8360-83-9259', 'user_id': 'LF197M', 'video_id': '8GS13E', 'interaction_type': 'skip', 'watch_time': 85, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '8936-72-7250', 'user_id': 'CW504L', 'video_id': '0KS93V', 'interaction_type': 'skip', 'watch_time': 40, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '7234-31-3381', 'user_id': 'OP675X', 'video_id': '9YA05J', 'interaction_type': 'skip', 'watch_time': 35, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '4106-34-5958', 'user_id': 'RF538A', 'video_id': '9HW87T', 'interaction_type': 'skip', 'watch_time': 43, 'interaction_date': '2024-04-18 11:33:30'}\n", - "{'interaction_id': '1759-83-8126', 'user_id': 'SG073W', 'video_id': '5FH42R', 'interaction_type': 'like', 'watch_time': 64, 'interaction_date': '2024-04-18 11:33:30'}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Sending messages: 100%|โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 10/10 [00:00<00:00, 21.66it/s]\n" - ] - } - ], - "source": [ - "# Send to source topic\n", - "for interaction in tqdm(interactions_data[:10], desc=\"Sending messages\"):\n", - " print(interaction)\n", - " producer.produce(\n", - " config.KAFKA_TOPIC_NAME,\n", - " json.dumps(interaction),\n", - " )\n", - " producer.flush()" - ] - }, - { - "cell_type": "markdown", - "id": "29fff3cd", - "metadata": {}, - "source": [ - "---" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/utils/hsfs_bytewax.py b/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/utils/hsfs_bytewax.py deleted file mode 100644 index 822d8805..00000000 --- a/advanced_tutorials/tiktok_recsys/python/Jupyter/streaming/utils/hsfs_bytewax.py +++ /dev/null @@ -1,60 +0,0 @@ -from io import BytesIO -from hsfs import engine -from bytewax.connectors.kafka import KafkaSinkMessage - -def _get_feature_group_config(feature_group): - """ - fetches configuration for feature group online topic - :param feature_group: - :return: - """ - - if feature_group._kafka_producer is None: - offline_write_options = {} # {'internal_kafka': True} - producer, feature_writers, writer = engine.get_instance()._init_kafka_resources( - feature_group, offline_write_options - ) - feature_group._kafka_producer = producer - feature_group._feature_writers = feature_writers - feature_group._writer = writer - - return feature_group - - -def serialize_with_key(key_payload, feature_group): - key, row = key_payload - - feature_group = _get_feature_group_config(feature_group) - - # encode complex features - row = engine.get_instance()._encode_complex_features(feature_group._feature_writers, row) - - # encode feature row - with BytesIO() as outf: - feature_group._writer(row, outf) - encoded_row = outf.getvalue() - - # assemble key - key = "".join([str(row[pk]) for pk in sorted(feature_group.primary_key)]) - - return key, encoded_row - - -def sink_kafka(key, value, feature_group): # -> KafkaSinkMessage[Dict, Dict]: - - # encode complex features - headers = [ - ("projectId", str(feature_group.feature_store.project_id).encode("utf8")), - ("featureGroupId", str(feature_group._id).encode("utf8")), - ("subjectId", str(feature_group.subject["id"]).encode("utf8")) - ] - - return KafkaSinkMessage( - headers=headers, # List[Tuple[str, bytes]] = field(default_factory=list) - key=str({"identifier": key, "name": feature_group._online_topic_name}).encode('utf-8'), - value=value, - ) - - -def get_kafka_config(feature_store_id): - return engine.get_instance()._get_kafka_config(feature_store_id) diff --git a/advanced_tutorials/tiktok_recsys/python/requirements.txt b/advanced_tutorials/tiktok_recsys/python/requirements.txt deleted file mode 100644 index 4ebca888..00000000 --- a/advanced_tutorials/tiktok_recsys/python/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -mimesis==15.1.0 -tensorflow==2.13 -tensorflow-recommenders==0.7.2 -catboost==1.1.1 -hopsworks==3.7.6 -mimesis==15.1.0 diff --git a/advanced_tutorials/tiktok_recsys/python/setup/interactions_topic.py b/advanced_tutorials/tiktok_recsys/python/setup/interactions_topic.py deleted file mode 100644 index a00910fc..00000000 --- a/advanced_tutorials/tiktok_recsys/python/setup/interactions_topic.py +++ /dev/null @@ -1,80 +0,0 @@ -import hopsworks - -project = hopsworks.login() - -# create kafka topic -KAFKA_TOPIC_NAME = "live_interactions" -SCHEMA_NAME = "live_interactions_schema" - -kafka_api = project.get_kafka_api() -job_api = project.get_jobs_api() - -schema = { - "type": "record", - "name": SCHEMA_NAME, - "namespace": "io.hops.examples.flink.examples", - "fields": [ - { - "name": "interaction_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "user_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "video_id", - "type": [ - "null", - "string" - ] - }, - { - "name": "category_id", - "type": [ - "null", - "long" - ] - }, - { - "name": "interaction_type", - "type": [ - "null", - "string" - ] - }, - { - "name": "watch_time", - "type": [ - "null", - "long" - ] - }, - { - "name": "interaction_date", - "type": [ - "null", - { - "type": "long", - "logicalType": "timestamp-micros" - } - ] - }, - { - "name": "interaction_month", - "type": [ - "null", - "string" - ] - } - ] -} - -kafka_api.create_schema(SCHEMA_NAME, schema) -kafka_api.create_topic(KAFKA_TOPIC_NAME, SCHEMA_NAME, 1, replicas=1, partitions=20) diff --git a/advanced_tutorials/tiktok_recsys/python/setup/tiktok_interactions_feature_group.py b/advanced_tutorials/tiktok_recsys/python/setup/tiktok_interactions_feature_group.py deleted file mode 100644 index ed02e994..00000000 --- a/advanced_tutorials/tiktok_recsys/python/setup/tiktok_interactions_feature_group.py +++ /dev/null @@ -1,48 +0,0 @@ -# Setup the feature groups for the Flink pipelines -import pandas as pd -import hopsworks -from hsfs.feature import Feature -from datetime import datetime, timedelta, timezone - -project = hopsworks.login() -fs = project.get_feature_store() - -features = [ - Feature(name="interaction_month", type="string"), - Feature(name="id", type="bigint"), - Feature(name="user_id", type="bigint"), - Feature(name="video_id", type="bigint"), - Feature(name="category_id", type="bigint"), - Feature(name="interaction_type", type="string"), - Feature(name="watch_time", type="bigint"), - Feature(name="interaction_date", type="timestamp"), -] - -interactions_fg = fs.get_or_create_feature_group( - name="interactions", - description="Interactions data.", - version=1, - primary_key=["id"], - partition_key=["interaction_month"], - online_enabled=True, - event_time="interaction_date" - -) - -interactions_fg.save(features) - -feature_descriptions = [ - {"name": "id", "description": "Unique id for the interaction"}, - {"name": "user_id", "description": "Unique identifier for each user."}, - {"name": "video_id", "description": "Identifier for the video."}, - {"name": "category_id", "description": "Id of the video category."}, - {"name": "interaction_type", "description": "Type of interaction"}, - {"name": "watch_time", "description": "Time in seconds how long user watched the video."}, - {"name": "interaction_date", "description": "Date of inteaction."}, - {"name": "interaction_month", "description": "Month of interaction, derived from interaction_date."} -] - -for desc in feature_descriptions: - interactions_fg.update_feature_description(desc["name"], desc["description"]) - -# interactions_fg.materialization_job.schedule(cron_expression="0 */15 * ? * *", start_time=datetime.now(tz=timezone.utc)) diff --git a/advanced_tutorials/tiktok_recsys/python/setup/tiktok_user_window_agg_feature_group.py b/advanced_tutorials/tiktok_recsys/python/setup/tiktok_user_window_agg_feature_group.py deleted file mode 100644 index faa424ad..00000000 --- a/advanced_tutorials/tiktok_recsys/python/setup/tiktok_user_window_agg_feature_group.py +++ /dev/null @@ -1,64 +0,0 @@ -import hopsworks - -from hsfs.feature import Feature -from datetime import datetime, timedelta, timezone - -project = hopsworks.login() -fs = project.get_feature_store() - -features = [ - Feature(name="user_id", type="bigint"), - Feature(name="category_id", type="bigint"), - - Feature(name="like_count", type="bigint"), - Feature(name="dislike_count", type="bigint"), - Feature(name="view_count", type="bigint"), - Feature(name="comment_count", type="bigint"), - Feature(name="share_count", type="bigint"), - Feature(name="skip_count", type="bigint"), - Feature(name="total_watch_time", type="bigint"), - - Feature(name="interaction_month", type="string"), - Feature(name="window_end_time", type="timestamp"), -] - -user_window_agg_1h_fg = fs.create_feature_group( - "user_window_agg_1h", - version=1, - statistics_config=False, - primary_key=["user_id"], - partition_key=["interaction_month"], - event_time="window_end_time", - online_enabled=True, - stream=True, -) - -user_window_agg_1h_fg.save(features) - - -feature_descriptions = [ - {"name": "user_id", "description": "Unique identifier for each user."}, - {"name": "category_id", "description": "Id of the video category."}, - {"name": "window_end_time", "description": "End of the specified time window where interaction were aggregated."}, - {"name": "interaction_month", - "description": "Month of the end of the specified time window where interaction were aggregated. Derived from window_end_time"}, - {"name": "like_count", - "description": "Number of likes video category got from the user during a specified time window."}, - {"name": "dislike_count", - "description": "Number of dislikes video category got from the user during a specified time window."}, - {"name": "view_count", - "description": "Number of views over video category got from the user during a specified time window."}, - {"name": "comment_count", - "description": "Number of comments video category got from the user during a specified time window."}, - {"name": "share_count", - "description": "Number of likes over video category got from the user during a specified time window."}, - {"name": "skip_count", - "description": "Number of times video category was skiped by the user during a specified time window."}, - {"name": "total_watch_time", - "description": "Total time in seconds video category was watched by the user during a specified time window."}, -] - -for desc in feature_descriptions: - user_window_agg_1h_fg.update_feature_description(desc["name"], desc["description"]) - -# user_window_agg_1h_fg.materialization_job.schedule(cron_expression="0 */15 * ? * *", start_time=datetime.now(tz=timezone.utc)) diff --git a/advanced_tutorials/tiktok_recsys/python/setup/tiktok_video_window_agg_feature_group.py b/advanced_tutorials/tiktok_recsys/python/setup/tiktok_video_window_agg_feature_group.py deleted file mode 100644 index cb881ac0..00000000 --- a/advanced_tutorials/tiktok_recsys/python/setup/tiktok_video_window_agg_feature_group.py +++ /dev/null @@ -1,57 +0,0 @@ -import hopsworks - -from hsfs.feature import Feature -from datetime import datetime, timedelta, timezone - -project = hopsworks.login() -fs = project.get_feature_store() - -features = [ - Feature(name="video_id", type="bigint"), - Feature(name="category_id", type="bigint"), - - Feature(name="like_count", type="bigint"), - Feature(name="dislike_count", type="bigint"), - Feature(name="view_count", type="bigint"), - Feature(name="comment_count", type="bigint"), - Feature(name="share_count", type="bigint"), - Feature(name="skip_count", type="bigint"), - Feature(name="total_watch_time", type="bigint"), - - Feature(name="interaction_month", type="string"), - Feature(name="window_end_time", type="timestamp"), -] - -video_window_agg_1h_fg = fs.create_feature_group( - "video_window_agg_1h", - version=1, - statistics_config=False, - primary_key=["video_id"], - partition_key=["interaction_month"], - event_time="window_end_time", - online_enabled=True, - stream=True, -) - -video_window_agg_1h_fg.save(features) - -feature_descriptions = [ - {"name": "video_id", "description": "Identifier for the video."}, - {"name": "category_id", "description": "Id of the video category."}, - {"name": "window_end_time", "description": "End of the specified time window where interaction were aggregated."}, - {"name": "interaction_month", - "description": "Month of the end of the specified time window where interaction were aggregated. Derived from window_end_time"}, - {"name": "like_count", "description": "Number of likes video got over a specified time window."}, - {"name": "dislike_count", "description": "Number of dislikes video got over a specified time window."}, - {"name": "view_count", "description": "Number of views video got over a specified time window."}, - {"name": "comment_count", "description": "Number of comments video got over a specified time window."}, - {"name": "share_count", "description": "Number of likes over got over a specified time window."}, - {"name": "skip_count", "description": "Number of times video was skiped over a specified time window."}, - {"name": "total_watch_time", - "description": "Total time in seconds video was watched over a specified time window."}, -] - -for desc in feature_descriptions: - video_window_agg_1h_fg.update_feature_description(desc["name"], desc["description"]) - -# video_window_agg_1h_fg.materialization_job.schedule(cron_expression="0 */15 * ? * *", start_time=datetime.now(tz=timezone.utc)) diff --git a/advanced_tutorials/timeseries/1_feature_backfill.ipynb b/advanced_tutorials/timeseries/1_feature_backfill.ipynb index 5a92c6c5..70315722 100644 --- a/advanced_tutorials/timeseries/1_feature_backfill.ipynb +++ b/advanced_tutorials/timeseries/1_feature_backfill.ipynb @@ -227,6 +227,18 @@ "- `rsi`: The Relative Strength Index (RSI) is a momentum oscillator that measures the speed and change of price movements. It ranges from 0 to 100, with values above 70 indicating overbought conditions and values below 30 indicating oversold conditions." ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "d3123547", + "metadata": {}, + "outputs": [], + "source": [ + "# Read the price data from the 'price' feature group\n", + "price_df = price_fg.read()\n", + "price_df.head(3)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -235,7 +247,7 @@ "outputs": [], "source": [ "# Calculate second-order features\n", - "averages_df = calculate_second_order_features(data_generated)\n", + "averages_df = calculate_second_order_features(price_df)\n", "\n", "# Display the first 3 rows of the resulting DataFrame\n", "averages_df.head(3)" @@ -295,7 +307,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/advanced_tutorials/timeseries/2_training_pipeline.ipynb b/advanced_tutorials/timeseries/2_training_pipeline.ipynb index daecc690..ce1f1fe2 100644 --- a/advanced_tutorials/timeseries/2_training_pipeline.ipynb +++ b/advanced_tutorials/timeseries/2_training_pipeline.ipynb @@ -94,12 +94,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = price_fg.select_all() \\\n", + "# Select features for training dataset\n", + "query = price_fg.select_all() \\\n", " .join(averages_fg.select_except(['date']))\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "query.show(5)" ] }, { @@ -152,7 +150,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='price_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=[\"price\"],\n", " transformation_functions=transformation_functions,\n", ")" @@ -509,8 +507,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Start the deployment and wait for it up to 360 seconds\n", - "deployment.start(await_running=360)" + "# Start the deployment and wait for it up to 180 seconds\n", + "deployment.start(await_running=180)" ] }, { diff --git a/advanced_tutorials/timeseries/features/price.py b/advanced_tutorials/timeseries/features/price.py index ad372ef8..cf14602f 100644 --- a/advanced_tutorials/timeseries/features/price.py +++ b/advanced_tutorials/timeseries/features/price.py @@ -66,7 +66,7 @@ def generate_historical_data(start_date: Optional[date] = None, end_date: Option data_list = [] - for date in tqdm(date_range, desc="๐Ÿ”ฎ Generating Data"): + for date in tqdm(date_range, desc="Generating Data"): generate_historical_day(date, start_date, data_list) df = pd.DataFrame(data_list, columns=['date', 'id', 'price']) diff --git a/advanced_tutorials/transformation_functions/custom/custom_transformation_functions.ipynb b/advanced_tutorials/transformation_functions/custom/custom_transformation_functions.ipynb index fc404587..44427218 100644 --- a/advanced_tutorials/transformation_functions/custom/custom_transformation_functions.ipynb +++ b/advanced_tutorials/transformation_functions/custom/custom_transformation_functions.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d6fb35cf", + "id": "0c382383", "metadata": {}, "source": [ "# ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Custom Transformation Functions\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "a19fd127", + "id": "3994e496", "metadata": {}, "source": [ "## ๐Ÿ—„๏ธ Table of Contents\n", @@ -35,7 +35,7 @@ }, { "cell_type": "markdown", - "id": "3cc6a7e9", + "id": "a8743b40", "metadata": {}, "source": [ "\n", @@ -45,23 +45,23 @@ { "cell_type": "code", "execution_count": null, - "id": "22c08e9f", + "id": "f10e0c78", "metadata": {}, "outputs": [], "source": [ "# Importing necessary libraries\n", - "import pandas as pd # For data manipulation and analysis using DataFrames\n", - "import numpy as np # For numerical computations and arrays\n", - "import os # For operating system-related functions\n", - "import joblib # For saving and loading model files\n", + "import pandas as pd # For data manipulation and analysis using DataFrames\n", + "import numpy as np # For numerical computations and arrays\n", + "import os # For operating system-related functions\n", + "import joblib # For saving and loading model files\n", "\n", - "import xgboost as xgb # For using the XGBoost machine learning library\n", + "import xgboost as xgb # For using the XGBoost machine learning library\n", "from sklearn.metrics import accuracy_score # For evaluating model accuracy" ] }, { "cell_type": "markdown", - "id": "97bc8784", + "id": "814a7e1a", "metadata": {}, "source": [ "---\n", @@ -73,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "4562f488", + "id": "626ca429", "metadata": {}, "source": [ "\n", @@ -85,7 +85,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1cfebd42", + "id": "ed7aaf97", "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ }, { "cell_type": "markdown", - "id": "031974ca", + "id": "fbd04249", "metadata": {}, "source": [ "Now let's add a target variable to the DataFrame. For simplicity and for demonstration purposes you will randomly assign either a 0 or a 1 to each row." @@ -105,21 +105,18 @@ { "cell_type": "code", "execution_count": null, - "id": "411520b2", + "id": "48e9dd48", "metadata": {}, "outputs": [], "source": [ "# Generate a binary target column\n", - "df_original['target'] = np.random.choice(\n", - " [0, 1], \n", - " size=len(df_original),\n", - ")\n", + "df_original['target'] = np.random.choice([0, 1], size=len(df_original))\n", "df_original.head(3)" ] }, { "cell_type": "markdown", - "id": "b2f4b822", + "id": "4bd983ab", "metadata": {}, "source": [ "\n", @@ -131,7 +128,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49800275", + "id": "4826fc0e", "metadata": {}, "outputs": [], "source": [ @@ -144,7 +141,7 @@ }, { "cell_type": "markdown", - "id": "60c9e83b", + "id": "55f77b7b", "metadata": {}, "source": [ "\n", @@ -160,7 +157,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d6e5c898", + "id": "ed3a1093", "metadata": {}, "outputs": [], "source": [ @@ -171,12 +168,15 @@ " primary_key=['city_name', 'date'],\n", " online_enabled=True,\n", ") \n", - "feature_group.insert(df_original)" + "feature_group.insert(\n", + " df_original, \n", + " wait=True,\n", + ")" ] }, { "cell_type": "markdown", - "id": "eca75c35", + "id": "c5d4d483", "metadata": {}, "source": [ "---\n", @@ -188,7 +188,7 @@ }, { "cell_type": "markdown", - "id": "06b8350d", + "id": "f38330c2", "metadata": {}, "source": [ "\n", @@ -201,7 +201,7 @@ }, { "cell_type": "markdown", - "id": "7c66cd33", + "id": "694da24d", "metadata": {}, "source": [ "If your code is running internally within Hopsworks, to register custom transformation functions in the feature store they need to be either part of the library installed in Hopsworks or attached when starting a Jupyter notebook or Hopsworks job.\n", @@ -212,7 +212,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a3dc2540", + "id": "d460963b", "metadata": {}, "outputs": [], "source": [ @@ -222,7 +222,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1dbb42d0", + "id": "7b67080b", "metadata": {}, "outputs": [], "source": [ @@ -232,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "52881e65", + "id": "cbd50770", "metadata": {}, "outputs": [], "source": [ @@ -244,7 +244,7 @@ { "cell_type": "code", "execution_count": null, - "id": "dd0bf161", + "id": "3efc5c75", "metadata": {}, "outputs": [], "source": [ @@ -255,7 +255,7 @@ }, { "cell_type": "markdown", - "id": "679112d9", + "id": "66b79ff3", "metadata": {}, "source": [ "\n", @@ -269,22 +269,18 @@ { "cell_type": "code", "execution_count": null, - "id": "23d9adb7", + "id": "a1e9ba3e", "metadata": {}, "outputs": [], "source": [ "# Check existing transformation functions\n", - "fns = [\n", - " fn.name \n", - " for fn \n", - " in fs.get_transformation_functions()\n", - "]\n", + "fns = [fn.name for fn in fs.get_transformation_functions()]\n", "fns" ] }, { "cell_type": "markdown", - "id": "f1ffb06c", + "id": "9d3c9e22", "metadata": {}, "source": [ "You can register your transformation function using the `.create_transformation_function()` method with the next parameters:\n", @@ -301,7 +297,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f187f4f5", + "id": "875367b2", "metadata": {}, "outputs": [], "source": [ @@ -326,7 +322,7 @@ }, { "cell_type": "markdown", - "id": "d229ab74", + "id": "a4242b9e", "metadata": {}, "source": [ "Now let's check if your custom transformation functions are present in the feature store." @@ -335,22 +331,18 @@ { "cell_type": "code", "execution_count": null, - "id": "115f5ebc", + "id": "b5a3b9ff", "metadata": {}, "outputs": [], "source": [ "# Check it your transformation functions are present in the feature store\n", - "fns = [\n", - " fn.name \n", - " for fn \n", - " in fs.get_transformation_functions()\n", - "]\n", + "fns = [fn.name for fn in fs.get_transformation_functions()]\n", "fns" ] }, { "cell_type": "markdown", - "id": "a6b8cf14", + "id": "6c6e3352", "metadata": {}, "source": [ "\n", @@ -364,7 +356,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cd0a0c45", + "id": "f5dd6ce0", "metadata": {}, "outputs": [], "source": [ @@ -383,7 +375,7 @@ }, { "cell_type": "markdown", - "id": "54875b4a", + "id": "95df4a6f", "metadata": {}, "source": [ "In Hopsworks Feature Store, a Query object allows you to select specific features from a feature group.\n", @@ -394,20 +386,18 @@ { "cell_type": "code", "execution_count": null, - "id": "596fa8e0", + "id": "98f4dbe0", "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = feature_group.select_except(['date'])\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# Build a Query object\n", + "query = feature_group.select_except(['date'])\n", + "query.show(3)" ] }, { "cell_type": "markdown", - "id": "83db5e88", + "id": "df294d0e", "metadata": {}, "source": [ "After creating the Query object, you will create a feature view.\n", @@ -420,7 +410,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26622c9c", + "id": "d1791335", "metadata": {}, "outputs": [], "source": [ @@ -428,7 +418,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='serving_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " # Apply your custom transformation functions to necessary columns\n", " transformation_functions={\n", " \"city_name\": encoder,\n", @@ -440,7 +430,7 @@ }, { "cell_type": "markdown", - "id": "ccd708ba", + "id": "f554ced8", "metadata": {}, "source": [ "## ๐Ÿ‹๏ธ Training Dataset Creation\n", @@ -456,7 +446,7 @@ { "cell_type": "code", "execution_count": null, - "id": "53b26f67", + "id": "8eb20081", "metadata": {}, "outputs": [], "source": [ @@ -470,7 +460,7 @@ { "cell_type": "code", "execution_count": null, - "id": "30503127", + "id": "4a830bca", "metadata": {}, "outputs": [], "source": [ @@ -480,7 +470,7 @@ { "cell_type": "code", "execution_count": null, - "id": "92db837f", + "id": "d8342245", "metadata": {}, "outputs": [], "source": [ @@ -489,7 +479,7 @@ }, { "cell_type": "markdown", - "id": "248bc5d1", + "id": "d09cf48d", "metadata": {}, "source": [ "\n", @@ -503,7 +493,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9f1346a0", + "id": "ee5019a6", "metadata": {}, "outputs": [], "source": [ @@ -521,7 +511,7 @@ }, { "cell_type": "markdown", - "id": "b230ca05", + "id": "49bedc3e", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n", @@ -535,7 +525,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67616e13", + "id": "b7a73fe0", "metadata": {}, "outputs": [], "source": [ @@ -544,7 +534,7 @@ }, { "cell_type": "markdown", - "id": "f50bed8a", + "id": "6dbde875", "metadata": {}, "source": [ "### โš™๏ธ Model Schema\n", @@ -555,7 +545,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8f9569dc", + "id": "8c52621c", "metadata": {}, "outputs": [], "source": [ @@ -564,17 +554,14 @@ "\n", "input_schema = Schema(X_train.values)\n", "output_schema = Schema(y_train)\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema,\n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "model_schema.to_dict()" ] }, { "cell_type": "markdown", - "id": "8de1abf1", + "id": "c1f6cb84", "metadata": {}, "source": [ "\n", @@ -588,7 +575,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2f790036", + "id": "e94a18cf", "metadata": {}, "outputs": [], "source": [ @@ -598,12 +585,12 @@ " os.mkdir(model_dir)\n", "\n", "# Save the model\n", - "xgb_classifier.save_model(model_dir + \"/model.json\")" + "joblib.dump(xgb_classifier, model_dir + '/xgb_classifier.pkl')" ] }, { "cell_type": "markdown", - "id": "dfbba175", + "id": "f6c4dd90", "metadata": {}, "source": [ "To register your model in the Hopsworks model registry you can use `.create_model()` method with the next parameters:\n", @@ -622,7 +609,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5adae94c", + "id": "da7415dc", "metadata": {}, "outputs": [], "source": [ @@ -640,7 +627,7 @@ }, { "cell_type": "markdown", - "id": "9d416af2", + "id": "33fcad3c", "metadata": {}, "source": [ "---\n", @@ -652,7 +639,7 @@ }, { "cell_type": "markdown", - "id": "d8c45f8e", + "id": "be4e238f", "metadata": {}, "source": [ "\n", @@ -670,7 +657,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42290763", + "id": "2b287444", "metadata": {}, "outputs": [], "source": [ @@ -685,21 +672,18 @@ { "cell_type": "code", "execution_count": null, - "id": "28d78f36", + "id": "9854b853", "metadata": {}, "outputs": [], "source": [ - "# Initialize the model\n", - "model = xgb.XGBClassifier()\n", - "\n", - "# Load the model from a saved JSON file\n", - "model.load_model(saved_model_dir + \"/model.json\")\n", - "model" + "# Retrieve the XGB model\n", + "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/xgb_classifier.pkl\")\n", + "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "bf8d901d", + "id": "b8e2e23e", "metadata": {}, "source": [ "\n", @@ -710,7 +694,7 @@ }, { "cell_type": "markdown", - "id": "9098714a", + "id": "b3fbe4ff", "metadata": {}, "source": [ "To retrieve batch data from the feature view you need to use `init_batch_scoring` method of the feature view object.\n", @@ -723,7 +707,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b8be1550", + "id": "94123860", "metadata": {}, "outputs": [], "source": [ @@ -737,7 +721,7 @@ }, { "cell_type": "markdown", - "id": "1bcf497b", + "id": "ed400e3c", "metadata": {}, "source": [ "Now let's use retrieved model to predict batch data." @@ -746,18 +730,18 @@ { "cell_type": "code", "execution_count": null, - "id": "c930266d", + "id": "9b96bb01", "metadata": {}, "outputs": [], "source": [ "# Predict batch data using retrieved model\n", - "predictions_batch = model.predict(batch_data)\n", + "predictions_batch = retrieved_xgboost_model.predict(batch_data)\n", "predictions_batch[:10]" ] }, { "cell_type": "markdown", - "id": "93db8b23", + "id": "eaf4631d", "metadata": {}, "source": [ "\n", @@ -771,7 +755,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a52389de", + "id": "2317eadf", "metadata": {}, "outputs": [], "source": [ @@ -790,7 +774,7 @@ }, { "cell_type": "markdown", - "id": "e50f54a7", + "id": "1686bcff", "metadata": {}, "source": [ "The next step is to initialize the feature view for serving and then retrieve a feature vector with specified primary keys." @@ -799,7 +783,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b8f9595f", + "id": "5cdb19e0", "metadata": {}, "outputs": [], "source": [ @@ -818,7 +802,7 @@ }, { "cell_type": "markdown", - "id": "9c659edd", + "id": "5e581a8e", "metadata": {}, "source": [ "Now you can use your model to predict the feature vector." @@ -827,18 +811,18 @@ { "cell_type": "code", "execution_count": null, - "id": "6b6aa6c1", + "id": "b6fc77d8", "metadata": {}, "outputs": [], "source": [ "# Predict feature vector using retrieved model\n", - "prediction_feature_vector = model.predict(to_numpy(feature_vector))\n", + "prediction_feature_vector = retrieved_xgboost_model.predict(to_numpy(feature_vector))\n", "prediction_feature_vector" ] }, { "cell_type": "markdown", - "id": "dd1e7328", + "id": "01e82837", "metadata": {}, "source": [ "In addition, you can retrieve several feature vectors. Just pass primary keys as a list of dictionaries." @@ -847,7 +831,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c9d8fbc8", + "id": "ac541e0b", "metadata": {}, "outputs": [], "source": [ @@ -865,7 +849,7 @@ }, { "cell_type": "markdown", - "id": "ccfce535", + "id": "b6a5d21a", "metadata": {}, "source": [ "Now you can use your model to predict feature vectors." @@ -874,18 +858,18 @@ { "cell_type": "code", "execution_count": null, - "id": "8db998a2", + "id": "3ee7ffa0", "metadata": {}, "outputs": [], "source": [ "# Predict feature vectors using retrieved model\n", - "prediction_feature_vectors = model.predict(to_numpy(feature_vectors))\n", + "prediction_feature_vectors = retrieved_xgboost_model.predict(to_numpy(feature_vectors))\n", "prediction_feature_vectors" ] }, { "cell_type": "markdown", - "id": "0c202c74", + "id": "0b1149b1", "metadata": {}, "source": [ "---" @@ -894,7 +878,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -908,7 +892,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/advanced_tutorials/transformation_functions/keras/keras_transformation_functions.ipynb b/advanced_tutorials/transformation_functions/keras/keras_transformation_functions.ipynb index 42867c9f..d9ec88fe 100644 --- a/advanced_tutorials/transformation_functions/keras/keras_transformation_functions.ipynb +++ b/advanced_tutorials/transformation_functions/keras/keras_transformation_functions.ipynb @@ -114,10 +114,7 @@ "outputs": [], "source": [ "# Generate a binary target column\n", - "df_original['target'] = np.random.choice(\n", - " [0, 1], \n", - " size=len(df_original),\n", - ")\n", + "df_original['target'] = np.random.choice([0, 1], size=len(df_original))\n", "df_original.head(3)" ] }, @@ -218,11 +215,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = feature_group.select_except(['date'])\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# Create a Query object\n", + "query = feature_group.select_except(['date'])\n", + "query.show(3)" ] }, { @@ -247,7 +242,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='serving_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=['target'],\n", ")" ] @@ -414,9 +409,6 @@ " # Create a new DataFrame with the encoded values\n", " encoded_df = pd.DataFrame(city_encoded, columns=one_hot_encoder.categories_[0])\n", "\n", - " # Reset the index of the original DataFrame\n", - " data = data.reset_index(drop=True)\n", - "\n", " # Concatenate the encoded DataFrame with the original DataFrame\n", " data = pd.concat([data.drop('city_name', axis=1), encoded_df], axis=1)\n", " \n", @@ -495,11 +487,7 @@ "metadata": {}, "outputs": [], "source": [ - "X_train_transformed = transform_data(\n", - " X_train, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "X_train_transformed = transform_data(X_train, one_hot_encoder, standard_scaler)\n", "X_train_transformed.head(3)" ] }, @@ -518,11 +506,7 @@ "metadata": {}, "outputs": [], "source": [ - "X_test_transformed = transform_data(\n", - " X_test, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "X_test_transformed = transform_data(X_test, one_hot_encoder, standard_scaler)\n", "X_test_transformed.head(3)" ] }, @@ -641,10 +625,7 @@ "\n", "input_schema = Schema(X_train_transformed.values)\n", "output_schema = Schema(y_train)\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "model_schema.to_dict()" ] @@ -757,7 +738,7 @@ "# Retrieve your model from the model registry\n", "retrieved_model = mr.get_model(\n", " name=\"keras_model\",\n", - " version=1,\n", + " version=1\n", ")\n", "saved_model_dir = retrieved_model.download()" ] @@ -808,7 +789,7 @@ "outputs": [], "source": [ "# Initialise feature view to retrieve batch data\n", - "feature_view.init_batch_scoring(1)\n", + "feature_view.init_batch_scoring(training_dataset_version=td_version)\n", "\n", "# Retrieve batch data\n", "batch_data = feature_view.get_batch_data()\n", @@ -831,11 +812,7 @@ "outputs": [], "source": [ "# Apply transformations to the batch data using transform_data function\n", - "batch_data_transformed = transform_data(\n", - " batch_data, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "batch_data_transformed = transform_data(batch_data, one_hot_encoder, standard_scaler)\n", "batch_data_transformed.head(3)" ] }, @@ -936,11 +913,7 @@ "outputs": [], "source": [ "# Apply transformations to the feature vector df using transform_data function\n", - "feature_vector_transformed = transform_data(\n", - " feature_vector_df, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "feature_vector_transformed = transform_data(feature_vector_df, one_hot_encoder, standard_scaler)\n", "feature_vector_transformed.head(3)" ] }, @@ -1025,11 +998,7 @@ "outputs": [], "source": [ "# Apply transformations to the feature vectors df using transform_data function\n", - "feature_vectors_transformed = transform_data(\n", - " feature_vectors_df, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "feature_vectors_transformed = transform_data(feature_vectors_df, one_hot_encoder, standard_scaler)\n", "feature_vectors_transformed.head(3)" ] }, @@ -1078,7 +1047,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/advanced_tutorials/transformation_functions/pytorch/pytorch_transformation_functions.ipynb b/advanced_tutorials/transformation_functions/pytorch/pytorch_transformation_functions.ipynb index dbd4b334..8e5a7fda 100644 --- a/advanced_tutorials/transformation_functions/pytorch/pytorch_transformation_functions.ipynb +++ b/advanced_tutorials/transformation_functions/pytorch/pytorch_transformation_functions.ipynb @@ -116,10 +116,7 @@ "outputs": [], "source": [ "# Generate a binary target column\n", - "df_original['target'] = np.random.choice(\n", - " [0, 1], \n", - " size=len(df_original),\n", - ")\n", + "df_original['target'] = np.random.choice([0, 1], size=len(df_original))\n", "df_original.head(3)" ] }, @@ -220,11 +217,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = feature_group.select_except(['date'])\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# Create a Query object\n", + "query = feature_group.select_except(['date'])\n", + "query.show(3)" ] }, { @@ -249,7 +244,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='serving_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=['target'],\n", ")" ] @@ -416,9 +411,6 @@ " # Create a new DataFrame with the encoded values\n", " encoded_df = pd.DataFrame(city_encoded, columns=one_hot_encoder.categories_[0])\n", "\n", - " # Reset the index of the original DataFrame\n", - " data = data.reset_index(drop=True)\n", - "\n", " # Concatenate the encoded DataFrame with the original DataFrame\n", " data = pd.concat([data.drop('city_name', axis=1), encoded_df], axis=1)\n", " \n", @@ -497,11 +489,7 @@ "metadata": {}, "outputs": [], "source": [ - "X_train_transformed = transform_data(\n", - " X_train, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "X_train_transformed = transform_data(X_train, one_hot_encoder, standard_scaler)\n", "X_train_transformed.head(3)" ] }, @@ -520,11 +508,7 @@ "metadata": {}, "outputs": [], "source": [ - "X_test_transformed = transform_data(\n", - " X_test, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "X_test_transformed = transform_data(X_test, one_hot_encoder, standard_scaler)\n", "X_test_transformed.head(3)" ] }, @@ -721,10 +705,7 @@ "\n", "input_schema = Schema(X_train_transformed.values)\n", "output_schema = Schema(y_train)\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "model_schema.to_dict()" ] @@ -837,7 +818,7 @@ "# Retrieve your model from the model registry\n", "retrieved_model = mr.get_model(\n", " name=\"torch_model\",\n", - " version=1,\n", + " version=1\n", ")\n", "saved_model_dir = retrieved_model.download()" ] @@ -888,7 +869,7 @@ "outputs": [], "source": [ "# Initialise feature view to retrieve batch data\n", - "feature_view.init_batch_scoring(1)\n", + "feature_view.init_batch_scoring(training_dataset_version=td_version)\n", "\n", "# Retrieve batch data\n", "batch_data = feature_view.get_batch_data()\n", @@ -911,11 +892,7 @@ "outputs": [], "source": [ "# Apply transformations to the batch data using transform_data function\n", - "batch_data_transformed = transform_data(\n", - " batch_data, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "batch_data_transformed = transform_data(batch_data, one_hot_encoder, standard_scaler)\n", "batch_data_transformed.head(3)" ] }, @@ -1016,11 +993,7 @@ "outputs": [], "source": [ "# Apply transformations to the feature vector df using transform_data function\n", - "feature_vector_transformed = transform_data(\n", - " feature_vector_df, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "feature_vector_transformed = transform_data(feature_vector_df, one_hot_encoder, standard_scaler)\n", "feature_vector_transformed.head(3)" ] }, @@ -1105,11 +1078,7 @@ "outputs": [], "source": [ "# Apply transformations to the feature vectors df using transform_data function\n", - "feature_vectors_transformed = transform_data(\n", - " feature_vectors_df, \n", - " one_hot_encoder, \n", - " standard_scaler,\n", - ")\n", + "feature_vectors_transformed = transform_data(feature_vectors_df, one_hot_encoder, standard_scaler)\n", "feature_vectors_transformed.head(3)" ] }, @@ -1158,7 +1127,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/advanced_tutorials/transformation_functions/sklearn/sklearn_transformation_functions.ipynb b/advanced_tutorials/transformation_functions/sklearn/sklearn_transformation_functions.ipynb index f2160d71..b53737aa 100644 --- a/advanced_tutorials/transformation_functions/sklearn/sklearn_transformation_functions.ipynb +++ b/advanced_tutorials/transformation_functions/sklearn/sklearn_transformation_functions.ipynb @@ -125,10 +125,7 @@ "outputs": [], "source": [ "# Generate a binary target column\n", - "df_original['target'] = np.random.choice(\n", - " [0, 1], \n", - " size=len(df_original),\n", - ")\n", + "df_original['target'] = np.random.choice([0, 1], size=len(df_original))\n", "df_original.head(3)" ] }, @@ -229,11 +226,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = feature_group.select_except(['date'])\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# Create a Query object\n", + "query = feature_group.select_except(['date'])\n", + "query.show(3)" ] }, { @@ -258,7 +253,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='serving_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=['target'],\n", ")" ] @@ -338,7 +333,7 @@ "numeric_transformer = Pipeline(\n", " steps=[\n", " (\"imputer\", SimpleImputer(strategy=\"median\")),\n", - " (\"scaler\", StandardScaler()),\n", + " (\"scaler\", StandardScaler())\n", " ]\n", ")\n", "# Define a Pipeline for categorical features\n", @@ -412,7 +407,7 @@ "xgb_classifier = Pipeline(\n", " steps=[\n", " (\"preprocessor\", preprocessor),\n", - " (\"classifier\", xgb.XGBClassifier()),\n", + " (\"classifier\", xgb.XGBClassifier())\n", " ]\n", ")\n", "# Fit the classifier\n", @@ -469,10 +464,7 @@ "\n", "input_schema = Schema(X_train.values)\n", "output_schema = Schema(y_train)\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "model_schema.to_dict()" ] @@ -536,7 +528,7 @@ " metrics={\"Accuracy\": accuracy}, \n", " description=\"XGB model\",\n", " input_example=X_train.sample(),\n", - " model_schema=model_schema,\n", + " model_schema=model_schema\n", ")\n", "model.save(model_dir)" ] @@ -580,7 +572,7 @@ "# Retrieve your model from the model registry\n", "retrieved_model = mr.get_model(\n", " name=\"xgb_model\",\n", - " version=1,\n", + " version=1\n", ")\n", "saved_model_dir = retrieved_model.download()" ] @@ -627,7 +619,7 @@ "outputs": [], "source": [ "# Initialise feature view to retrieve batch data\n", - "feature_view.init_batch_scoring(1)\n", + "feature_view.init_batch_scoring(training_dataset_version=td_version)\n", "\n", "# Retrieve batch data\n", "batch_data = feature_view.get_batch_data()\n", @@ -890,7 +882,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.12" } }, "nbformat": 4, diff --git a/api_examples/hopsworks/vector_similarity_search/news-search-knn-save-model.ipynb b/api_examples/hopsworks/vector_similarity_search/news-search-knn-save-model.ipynb deleted file mode 100644 index d2a82644..00000000 --- a/api_examples/hopsworks/vector_similarity_search/news-search-knn-save-model.ipynb +++ /dev/null @@ -1,370 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "1e23a0d0", - "metadata": {}, - "source": [ - "# News search using kNN in Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "03fb3165", - "metadata": {}, - "source": [ - "In this tutorial, you are going to learn how to create a news search application which allows you to search news using natural language. You will create embedding for the news and search news similar to a given description using embeddings and kNN search. You will also learn how to avoid training-serving skew by using model registry. The steps include:\n", - "1. Load news data\n", - "2. Create embedddings for news heading and news body\n", - "3. Save the embedding model to model registry\n", - "4. Ingest the news data and embedding into Hopsworks\n", - "5. Search news using Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "12c30fea", - "metadata": {}, - "source": [ - "## Load news data" - ] - }, - { - "cell_type": "markdown", - "id": "d5d5513d", - "metadata": {}, - "source": [ - "First, you need to load the news articles downloaded from [Kaggle news articles](https://www.kaggle.com/datasets/asad1m9a9h6mood/news-articles).\n", - "Since creating embeddings for the full news is time-consuming, here we sample some articles." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e95346ff", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "df_all = pd.read_csv(\"https://repo.hops.works/dev/jdowling/Articles.csv\", encoding='utf-8', encoding_errors='ignore')\n", - "df = df_all.sample(n=300).reset_index().drop([\"index\"], axis=1)\n", - "df[\"news_id\"] = list(range(len(df)))" - ] - }, - { - "cell_type": "markdown", - "id": "96bfc948", - "metadata": {}, - "source": [ - "## Create embeddings" - ] - }, - { - "cell_type": "markdown", - "id": "b7bd09b2", - "metadata": {}, - "source": [ - "Next, you need to create embeddings for heading and body of the news. The embeddings will then be used for kNN search against the embedding of the news description you want to search. Here we use a light weighted language model (LM) which encodes the news into embeddings. You can use any other language models including LLM (llama, Mistral)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "88053d37", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install sentence_transformers -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9c22d8fb", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "model = SentenceTransformer('all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43e230f9", - "metadata": {}, - "outputs": [], - "source": [ - "# truncate the body to 100 characters\n", - "embeddings_body = model.encode([body for body in df[\"Article\"]])\n", - "embeddings_heading = model.encode(df[\"Heading\"])\n", - "df[\"embedding_heading\"] = pd.Series(embeddings_heading.tolist())\n", - "df[\"embedding_body\"] = pd.Series(embeddings_body.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41b150f6", - "metadata": {}, - "outputs": [], - "source": [ - "df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "65f73330", - "metadata": {}, - "source": [ - "## Ingest into Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "0721e6c1", - "metadata": {}, - "source": [ - "You need to ingest the data to Hopsworks, so that they are stored and indexed. First, you login into Hopsworks and prepare the feature store." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27a19f00", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "36cf4331", - "metadata": {}, - "source": [ - "Next, as embeddings are stored in an index in the backing vecotor database, you need to specify the index name and the embedding features in the dataframe. You can also save the embedding model to model registry, and attach the model to the embedding features. This is useful for avoiding training-serving skew as at inference time you can get back the same model used for creating embedding at training time." - ] - }, - { - "cell_type": "markdown", - "id": "4c564fc9", - "metadata": {}, - "source": [ - "First, you save the model to model registry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e5e5270", - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "model_name = \"SentenceTransformer_all_MiniLM_L6_v2\"\n", - "mr = proj.get_model_registry()\n", - "# Check if the model has been created, and get back the model if available. Otherwise create the model.\n", - "try:\n", - " hsml_model = mr.get_model(model_name, 1)\n", - "except:\n", - " with open(f\"{model_name}.pkl\", \"wb\") as f:\n", - " pickle.dump(model, f)\n", - " hsml_model = mr.python.create_model(model_name)\n", - " hsml_model.save(f\"{model_name}.pkl\")\n" - ] - }, - { - "cell_type": "markdown", - "id": "db4a76ea", - "metadata": {}, - "source": [ - "Then, you specify the index name, embedding features, and model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "47e0cf41", - "metadata": {}, - "outputs": [], - "source": [ - "version = 1\n", - "from hsfs import embedding\n", - "\n", - "emb = embedding.EmbeddingIndex(index_name=f\"news_fg_{version}\")\n", - "# specify the name, dimension, and model of the embedding features \n", - "emb.add_embedding(\"embedding_body\", model.get_sentence_embedding_dimension(), model=hsml_model)\n", - "emb.add_embedding(\"embedding_heading\", model.get_sentence_embedding_dimension(), model=hsml_model)" - ] - }, - { - "cell_type": "markdown", - "id": "25bddf53", - "metadata": {}, - "source": [ - "Next, you create a feature group with the `embedding_index` and ingest data into the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e55522ba", - "metadata": {}, - "outputs": [], - "source": [ - "news_fg = fs.get_or_create_feature_group(\n", - " name=\"news_fg\",\n", - " embedding_index=emb,\n", - " primary_key=[\"news_id\"],\n", - " version=version,\n", - " online_enabled=True\n", - ")\n", - "\n", - "news_fg.insert(df, write_options={\"start_offline_materialization\": False})" - ] - }, - { - "cell_type": "markdown", - "id": "db6b194b", - "metadata": {}, - "source": [ - "## Search News" - ] - }, - { - "cell_type": "markdown", - "id": "7fc8854e", - "metadata": {}, - "source": [ - "Once the data are ingested into Hopsworks, you can search news by giving a news description. The news description first needs to be encoded by the same LM you used to encode the news. You can get back the model in the model registry from the embedding feature. And then you can search news which are similar to the description using kNN search functionality provided by the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ede462ef", - "metadata": {}, - "outputs": [], - "source": [ - "# set the logging level to WARN to avoid INFO message\n", - "import logging\n", - "logging.getLogger().setLevel(logging.WARN)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f8d7df08", - "metadata": {}, - "outputs": [], - "source": [ - "news_description = \"news about europe\"" - ] - }, - { - "cell_type": "markdown", - "id": "ba2b2bde", - "metadata": {}, - "source": [ - "You can get back the model file from embedding feature object, and load the model file back to the embedding model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0f9f2cd4", - "metadata": {}, - "outputs": [], - "source": [ - "hsml_model = news_fg.embedding_index.get_embedding(\"embedding_heading\").model\n", - "local_model_path = hsml_model.download()\n", - "with open(f\"{local_model_path}/{hsml_model.name}.pkl\", 'rb') as f:\n", - " loaded_model = pickle.load(f)" - ] - }, - { - "cell_type": "markdown", - "id": "401915b0", - "metadata": {}, - "source": [ - "You can search similar news to the description against news heading." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7356be82", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(loaded_model.encode(news_description), k=3, col=\"embedding_heading\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "24e70246", - "metadata": {}, - "source": [ - "Alternative, you can search similar news to the description against the news body and filter by news type." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32d954bc", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(loaded_model.encode(news_description), k=3, col=\"embedding_body\",\n", - " filter=news_fg.newstype == \"business\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "c0938afc", - "metadata": {}, - "source": [ - "## Next step" - ] - }, - { - "cell_type": "markdown", - "id": "28ffda57", - "metadata": {}, - "source": [ - "Now you are able to search articles using natural language. You can learn how to rank the result in [this tutorial]() and learn best practices in the [guide]()." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hopsworks/vector_similarity_search/news-search-knn.ipynb b/api_examples/hopsworks/vector_similarity_search/news-search-knn.ipynb deleted file mode 100644 index 988056c7..00000000 --- a/api_examples/hopsworks/vector_similarity_search/news-search-knn.ipynb +++ /dev/null @@ -1,348 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "719b9af9-7375-4679-8e0a-8ae745805320", - "metadata": {}, - "source": [ - "# Requirements: Hopsworks 3.7+\n", - "\n", - "WARNING: this notebook does not currently work with serverless Hopsworks." - ] - }, - { - "cell_type": "markdown", - "id": "8b0ba628", - "metadata": {}, - "source": [ - "# News search using kNN in Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "d727fa41", - "metadata": {}, - "source": [ - "In this tutorial, you are going to learn how to create a news search application which allows you to search news using natural language. You will create embedding for the news and search news similar to a given description using embeddings and kNN search. The steps include:\n", - "1. Load news data\n", - "2. Create embedddings for news heading and news body\n", - "3. Ingest the news data and embedding into Hopsworks\n", - "4. Search news using Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "32974a73", - "metadata": {}, - "source": [ - "## Load news data" - ] - }, - { - "cell_type": "markdown", - "id": "840cc4e5", - "metadata": {}, - "source": [ - "First, you need to load the news articles downloaded from [Kaggle news articles](https://www.kaggle.com/datasets/asad1m9a9h6mood/news-articles).\n", - "Since creating embeddings for the full news is time-consuming, here we sample some articles." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "776aaa6d-b2b3-4c6a-9814-1dcc547f0a36", - "metadata": {}, - "outputs": [], - "source": [ - "#!pip install hsfs==3.7.0rc5 -q\n", - "#!pip install hopsworks==3.7.0rc1 -q\n", - "#!pip install sentence_transformers -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0d4062d8", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from sentence_transformers import SentenceTransformer\n", - "import logging\n", - "import hopsworks\n", - "from hsfs import embedding" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "28f3cca3-ce77-4b31-b837-4c247d28cfbb", - "metadata": {}, - "outputs": [], - "source": [ - "df_all = pd.read_csv(\"https://repo.hops.works/dev/jdowling/Articles.csv\", encoding='utf-8', encoding_errors='ignore')\n", - "df = df_all.sample(n=300).reset_index().drop([\"index\"], axis=1)\n", - "df[\"news_id\"] = list(range(len(df)))" - ] - }, - { - "cell_type": "markdown", - "id": "ddea5ab0", - "metadata": {}, - "source": [ - "## Create embeddings" - ] - }, - { - "cell_type": "markdown", - "id": "b43d7b68", - "metadata": {}, - "source": [ - "Next, you need to create embeddings for heading and body of the news. The embeddings will then be used for kNN search against the embedding of the news description you want to search. Here we use a light weighted language model (LM) which encodes the news into embeddings. You can use any other language models including LLM (llama, Mistral)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "017ae8a7", - "metadata": {}, - "outputs": [], - "source": [ - "model = SentenceTransformer('all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "245ee674", - "metadata": {}, - "outputs": [], - "source": [ - "# truncate the body to 100 characters\n", - "embeddings_body = model.encode([body[:100] for body in df[\"Article\"]])\n", - "embeddings_heading = model.encode(df[\"Heading\"])\n", - "df[\"embedding_heading\"] = pd.Series(embeddings_heading.tolist())\n", - "df[\"embedding_body\"] = pd.Series(embeddings_body.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "af272d56", - "metadata": {}, - "outputs": [], - "source": [ - "df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "1ca7d180", - "metadata": {}, - "source": [ - "## Ingest into Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "4edaa1d3", - "metadata": {}, - "source": [ - "You need to ingest the data to Hopsworks, so that they are stored and indexed. First, you login into Hopsworks and prepare the feature store." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "88f99b8b", - "metadata": {}, - "outputs": [], - "source": [ - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "53ca5b13", - "metadata": {}, - "source": [ - "Next, as embeddings are stored in an index in the backing vecotor database, you need to specify the index name and the embedding features in the dataframe. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4994b30b", - "metadata": {}, - "outputs": [], - "source": [ - "version = 1\n", - "emb = embedding.EmbeddingIndex(index_name=f\"news_fg_{version}\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8bbd31bc-b806-41e5-95a6-0dc510e2fe99", - "metadata": {}, - "outputs": [], - "source": [ - "# specify the name and dimension of the embedding features \n", - "emb.add_embedding(\"embedding_body\", model.get_sentence_embedding_dimension())\n", - "emb.add_embedding(\"embedding_heading\", model.get_sentence_embedding_dimension())" - ] - }, - { - "cell_type": "markdown", - "id": "755be3cb", - "metadata": {}, - "source": [ - "Next, you create a feature group with the `embedding_index` and ingest data into the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2fa6af0", - "metadata": {}, - "outputs": [], - "source": [ - "news_fg = fs.get_or_create_feature_group(\n", - " name=\"news_fg\",\n", - " embedding_index=emb,\n", - " primary_key=[\"news_id\"],\n", - " version=version,\n", - " online_enabled=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f82da02-0e37-4907-8790-a68145253845", - "metadata": {}, - "outputs": [], - "source": [ - "news_fg.insert(df, write_options={\"start_offline_materialization\": False})" - ] - }, - { - "cell_type": "markdown", - "id": "508ae2c4", - "metadata": {}, - "source": [ - "## Search News" - ] - }, - { - "cell_type": "markdown", - "id": "baa6d6c3", - "metadata": {}, - "source": [ - "Once the data are ingested into Hopsworks, you can search news by giving a news description. The news description first needs to be encoded by the same LM you used to encode the news. And then you can search news which are similar to the description using kNN search functionality provided by the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5e114be5", - "metadata": {}, - "outputs": [], - "source": [ - "# set the logging level to WARN to avoid INFO message\n", - "logging.getLogger().setLevel(logging.WARN)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "343bcbcf", - "metadata": {}, - "outputs": [], - "source": [ - "news_description = \"news about europe\"" - ] - }, - { - "cell_type": "markdown", - "id": "aa0d15d3", - "metadata": {}, - "source": [ - "You can search similar news to the description against news heading." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9a73ea59", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(model.encode(news_description), k=3, col=\"embedding_heading\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "c2c4f5fc", - "metadata": {}, - "source": [ - "Alternative, you can search similar news to the description against the news body and filter by news type." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7a3c31b8", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(model.encode(news_description), k=3, col=\"embedding_body\",\n", - " filter=news_fg.newstype == \"business\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "5cf246b3", - "metadata": {}, - "source": [ - "## Next step" - ] - }, - { - "cell_type": "markdown", - "id": "eb82cba1", - "metadata": {}, - "source": [ - "Now you are able to search articles using natural language. You can learn how to rank the result in [this tutorial]() and learn best practices in the [guide]()." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hopsworks/vector_similarity_search/news-search-rank-view.ipynb b/api_examples/hopsworks/vector_similarity_search/news-search-rank-view.ipynb deleted file mode 100644 index 92d8a1f0..00000000 --- a/api_examples/hopsworks/vector_similarity_search/news-search-rank-view.ipynb +++ /dev/null @@ -1,356 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0a5e5c4d", - "metadata": {}, - "source": [ - "# Ranking of news search results" - ] - }, - { - "cell_type": "markdown", - "id": "8988ff65", - "metadata": {}, - "source": [ - "In the previous tutorial, you learn how to search news using natural languages. In order to make the search results more useful, you will learn how to rank the search results in this tutorial. We will use the number of view as the score of news articles as it represent the popularity of the articles. The steps include:\n", - "1. Create a view count feature group with sample view count dataset\n", - "2. Create a feature view that join the news feature group and view count feature group\n", - "3. Search news and rank them by view count" - ] - }, - { - "cell_type": "markdown", - "id": "6bafdd57", - "metadata": {}, - "source": [ - "## Create a view count feature group" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "246b6bb7", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "markdown", - "id": "79a4dc31", - "metadata": {}, - "source": [ - "First you create a sample view count dataset of the size of news feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea809cb3", - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "num_news = 300\n", - "df_view = pd.DataFrame({\"news_id\": list(range(num_news)), \"view_cnt\": [random.randint(0, 100) for i in range(num_news)]})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "139c5c0f", - "metadata": {}, - "outputs": [], - "source": [ - "version = 1" - ] - }, - { - "cell_type": "markdown", - "id": "4d7d216e", - "metadata": {}, - "source": [ - "Then you create a view count feature group and ingest the data into Hopsworks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b007629f", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fbacf4c2", - "metadata": {}, - "outputs": [], - "source": [ - "view_fg = fs.get_or_create_feature_group(\n", - " name=\"view_fg\",\n", - " primary_key=[\"news_id\"],\n", - " version=version,\n", - " online_enabled=True,\n", - ")\n", - "\n", - "view_fg.insert(df_view, write_options={\"start_offline_materialization\": False})" - ] - }, - { - "cell_type": "markdown", - "id": "43790e1d", - "metadata": {}, - "source": [ - "## Create a feature view " - ] - }, - { - "cell_type": "markdown", - "id": "2aab5e57", - "metadata": {}, - "source": [ - "You need to first get back the news feature group created before for the creation of feature view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fad86561", - "metadata": {}, - "outputs": [], - "source": [ - "fg = news_fg = fs.get_or_create_feature_group(\n", - " name=\"news_fg\",\n", - " version=1\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "2ddecaa0", - "metadata": {}, - "source": [ - "Now, you create a feature view by joining the news feature group and the view count feature group. Here, you select the heading, and the view count for ranking." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cc06c04a", - "metadata": {}, - "outputs": [], - "source": [ - "fv = fs.get_or_create_feature_view(\n", - " \"news_view\", version=version,\n", - " query=news_fg.select([\"heading\"]).join(view_fg.select([\"view_cnt\"]))\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "17fe1695", - "metadata": {}, - "source": [ - "## Search news and rank " - ] - }, - { - "cell_type": "markdown", - "id": "29f9b343", - "metadata": {}, - "source": [ - "Same as the previous tutorial, the news description first needs to be encoded by the same LM you used to encoded the news. And then the embedding can be used to search similar news using the feature view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b60e0804", - "metadata": {}, - "outputs": [], - "source": [ - "news_description = \"news about europe\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fcd5b0e6-ca97-480b-8205-cc16a89b7f2b", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install sentence_transformers -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41b60142", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "model = SentenceTransformer('all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "73a31f10", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "logging.getLogger().setLevel(logging.WARN)" - ] - }, - { - "cell_type": "markdown", - "id": "4afe07d9", - "metadata": {}, - "source": [ - "Define some helper functions which sort and print new results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b3da47a9", - "metadata": {}, - "outputs": [], - "source": [ - "def print_news(feature_vectors):\n", - " for feature_vector in feature_vectors:\n", - " print(feature_vector)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7f7c84aa", - "metadata": {}, - "outputs": [], - "source": [ - "def print_sort_news(feature_vectors):\n", - " # sort the articles by view count\n", - " print(\"Ranked result:\")\n", - " feature_vectors = sorted(feature_vectors, key=lambda x: x[1]*-1)\n", - " print_news(feature_vectors)" - ] - }, - { - "cell_type": "markdown", - "id": "f5cae7d7", - "metadata": {}, - "source": [ - "Now, you can see the top k results returned by the feature view, which are the headings and the view count. You can also see the ranked results by view count of the top k results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e27d333", - "metadata": {}, - "outputs": [], - "source": [ - "feature_vectors = fv.find_neighbors(model.encode(news_description), k=5, feature=news_fg.embedding_heading)\n", - "print_news(feature_vectors)\n", - "print_sort_news(feature_vectors)" - ] - }, - { - "cell_type": "markdown", - "id": "268906fb", - "metadata": {}, - "source": [ - "Like the feature group, you can filter results in `find_neighbors` in feature view. You can also use multiple filtering conditions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4054191b", - "metadata": {}, - "outputs": [], - "source": [ - "feature_vectors = fv.find_neighbors(model.encode(news_description), k=5, \n", - " filter=((news_fg.newstype == \"sports\") & (news_fg.article.like(\"europe\"))),\n", - " feature=news_fg.embedding_heading)\n", - "print_news(feature_vectors)\n", - "print_sort_news(feature_vectors)" - ] - }, - { - "cell_type": "markdown", - "id": "15e9480b", - "metadata": {}, - "source": [ - "You can get back result by providing primary key which is the news id as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d8757fab", - "metadata": {}, - "outputs": [], - "source": [ - "feature_vectors = fv.get_feature_vector({\"news_id\": 10})\n", - "print_news([feature_vectors])" - ] - }, - { - "cell_type": "markdown", - "id": "057aa05d", - "metadata": {}, - "source": [ - "## Next step" - ] - }, - { - "cell_type": "markdown", - "id": "7b911f73", - "metadata": {}, - "source": [ - "Now you are able to search articles and rank them by view count. You may be wondering why the view count does not store in the news feature group. You can find the answer and other best practices in the [guide]()." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "55e58363", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.8" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hopsworks/vector_similarity_search/requirements.txt b/api_examples/hopsworks/vector_similarity_search/requirements.txt deleted file mode 100644 index f59b13f2..00000000 --- a/api_examples/hopsworks/vector_similarity_search/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -hsfs==3.7.0rc5 -hopsworks==3.7.0rc1 -sentence_transformers diff --git a/api_examples/hsfs/feature_group_change_notification_cdc.ipynb b/api_examples/hsfs/feature_group_change_notification_cdc.ipynb deleted file mode 100644 index 238f147e..00000000 --- a/api_examples/hsfs/feature_group_change_notification_cdc.ipynb +++ /dev/null @@ -1,253 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "9e9da978", - "metadata": {}, - "source": [ - "![Screenshot from 2022-06-16 14-24-57.png](data:image/png;base64,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)" - ] - }, - { - "cell_type": "markdown", - "id": "55b19afd", - "metadata": {}, - "source": [ - "## ๐Ÿ’ฝ CDC (change data notification) for Feature Groups \n", - "\n", - "This notebook shows you how to write a CDC client that subscribes to changes to an Online Feature Group\n", - "\n", - "The notebook performs the following steps:\n", - "\n", - "1. Create the Kafka topic in your Hopsworks Project for the CDC notifications for the Fetaure Group\n", - "2. Create the Feature Group, providing the name of the CDC notification topic you just created\n", - "3. Insert some data into the feature group\n", - "4. Run a Kafka Client that consume the changes to the Feature Group (from the notification topic)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "46ee5e6e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://hopsworks0.logicalclocks.com/p/2167\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "import hopsworks\n", - "import pandas as pd\n", - "\n", - "project = hopsworks.login()\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "c7b04834", - "metadata": {}, - "source": [ - "### Create the CDC Kafka Topic for Notifications" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "b951fca3", - "metadata": {}, - "outputs": [], - "source": [ - "feature_group_name = \"cdc\"\n", - "notification_topic = f\"{feature_group_name}_notification\"\n", - "partitions = 10\n", - "\n", - "if not any(topic.name == notification_topic for topic in project.get_kafka_api().get_topics()):\n", - " project.get_kafka_api().create_topic(notification_topic, None, None, partitions=partitions)" - ] - }, - { - "cell_type": "markdown", - "id": "c5b95586", - "metadata": {}, - "source": [ - "### Create the Feature Group, providing the CDC topic name " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "ba5fc19f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://hopsworks0.logicalclocks.com/p/2167/fs/2115/fg/2066\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "7c478f19a06247b38633c023263993df", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/10 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: cdc_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://hopsworks0.logicalclocks.com/p/2167/jobs/named/cdc_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fg = fs.get_or_create_feature_group(name=feature_group_name, \n", - " version=1, \n", - " primary_key=[\"id\"], \n", - " online_enabled=True, \n", - " notification_topic_name=notification_topic)\n", - "\n", - "size = 10\n", - "fg_data = {'id': range(0, size), 'text': \"test\"}\n", - "fg_df = pd.DataFrame.from_dict(fg_data)\n", - "fg.insert(fg_df)" - ] - }, - { - "cell_type": "markdown", - "id": "150370b6", - "metadata": {}, - "source": [ - "### Reading the contents of CDC topic" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "4444e032", - "metadata": {}, - "outputs": [], - "source": [ - "import confluent_kafka\n", - "\n", - "# after assignment make consumer read from the begginning\n", - "def my_assign(consumer, partitions):\n", - " for partition in partitions:\n", - " partition.offset = confluent_kafka.OFFSET_BEGINNING\n", - " consumer.assign(partitions)\n", - "\n", - "storage_connector = fs._storage_connector_api.get_kafka_connector(fs.id)\n", - "\n", - "config = storage_connector.confluent_options()\n", - "# You have to define a 'group.id'. If multiple consumers with the same group.id are subscribed to the same topic,\n", - "# they will share consupmtions of its msgs\n", - "config[\"group.id\"] = feature_group_name\n", - "consumer = confluent_kafka.Consumer(config)\n", - "consumer.subscribe([notification_topic], on_assign=my_assign)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "09cc84f2", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"6\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"2\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"5\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"7\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"0\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"9\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"3\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"8\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"4\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "b'{\"projectId\":2167,\"featureStoreId\":2115,\"featureGroupId\":2066,\"entry\":{\"id\":\"1\",\"text\":\"test\"},\"featureViews\":[]}'\n", - "done\n" - ] - } - ], - "source": [ - "run = True\n", - "while run:\n", - " msg = consumer.poll(timeout=10)\n", - " if msg is not None:\n", - " print(msg.value())\n", - " else:\n", - " run = False\n", - "print(\"done\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "ed56a62d", - "metadata": {}, - "outputs": [], - "source": [ - "consumer.close()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "60e148c0", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hsfs/knn_search/news-search-knn-save-model.ipynb b/api_examples/hsfs/knn_search/news-search-knn-save-model.ipynb deleted file mode 100644 index d2a82644..00000000 --- a/api_examples/hsfs/knn_search/news-search-knn-save-model.ipynb +++ /dev/null @@ -1,370 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "1e23a0d0", - "metadata": {}, - "source": [ - "# News search using kNN in Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "03fb3165", - "metadata": {}, - "source": [ - "In this tutorial, you are going to learn how to create a news search application which allows you to search news using natural language. You will create embedding for the news and search news similar to a given description using embeddings and kNN search. You will also learn how to avoid training-serving skew by using model registry. The steps include:\n", - "1. Load news data\n", - "2. Create embedddings for news heading and news body\n", - "3. Save the embedding model to model registry\n", - "4. Ingest the news data and embedding into Hopsworks\n", - "5. Search news using Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "12c30fea", - "metadata": {}, - "source": [ - "## Load news data" - ] - }, - { - "cell_type": "markdown", - "id": "d5d5513d", - "metadata": {}, - "source": [ - "First, you need to load the news articles downloaded from [Kaggle news articles](https://www.kaggle.com/datasets/asad1m9a9h6mood/news-articles).\n", - "Since creating embeddings for the full news is time-consuming, here we sample some articles." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e95346ff", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "df_all = pd.read_csv(\"https://repo.hops.works/dev/jdowling/Articles.csv\", encoding='utf-8', encoding_errors='ignore')\n", - "df = df_all.sample(n=300).reset_index().drop([\"index\"], axis=1)\n", - "df[\"news_id\"] = list(range(len(df)))" - ] - }, - { - "cell_type": "markdown", - "id": "96bfc948", - "metadata": {}, - "source": [ - "## Create embeddings" - ] - }, - { - "cell_type": "markdown", - "id": "b7bd09b2", - "metadata": {}, - "source": [ - "Next, you need to create embeddings for heading and body of the news. The embeddings will then be used for kNN search against the embedding of the news description you want to search. Here we use a light weighted language model (LM) which encodes the news into embeddings. You can use any other language models including LLM (llama, Mistral)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "88053d37", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install sentence_transformers -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9c22d8fb", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "model = SentenceTransformer('all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "43e230f9", - "metadata": {}, - "outputs": [], - "source": [ - "# truncate the body to 100 characters\n", - "embeddings_body = model.encode([body for body in df[\"Article\"]])\n", - "embeddings_heading = model.encode(df[\"Heading\"])\n", - "df[\"embedding_heading\"] = pd.Series(embeddings_heading.tolist())\n", - "df[\"embedding_body\"] = pd.Series(embeddings_body.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41b150f6", - "metadata": {}, - "outputs": [], - "source": [ - "df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "65f73330", - "metadata": {}, - "source": [ - "## Ingest into Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "0721e6c1", - "metadata": {}, - "source": [ - "You need to ingest the data to Hopsworks, so that they are stored and indexed. First, you login into Hopsworks and prepare the feature store." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27a19f00", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "36cf4331", - "metadata": {}, - "source": [ - "Next, as embeddings are stored in an index in the backing vecotor database, you need to specify the index name and the embedding features in the dataframe. You can also save the embedding model to model registry, and attach the model to the embedding features. This is useful for avoiding training-serving skew as at inference time you can get back the same model used for creating embedding at training time." - ] - }, - { - "cell_type": "markdown", - "id": "4c564fc9", - "metadata": {}, - "source": [ - "First, you save the model to model registry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e5e5270", - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "model_name = \"SentenceTransformer_all_MiniLM_L6_v2\"\n", - "mr = proj.get_model_registry()\n", - "# Check if the model has been created, and get back the model if available. Otherwise create the model.\n", - "try:\n", - " hsml_model = mr.get_model(model_name, 1)\n", - "except:\n", - " with open(f\"{model_name}.pkl\", \"wb\") as f:\n", - " pickle.dump(model, f)\n", - " hsml_model = mr.python.create_model(model_name)\n", - " hsml_model.save(f\"{model_name}.pkl\")\n" - ] - }, - { - "cell_type": "markdown", - "id": "db4a76ea", - "metadata": {}, - "source": [ - "Then, you specify the index name, embedding features, and model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "47e0cf41", - "metadata": {}, - "outputs": [], - "source": [ - "version = 1\n", - "from hsfs import embedding\n", - "\n", - "emb = embedding.EmbeddingIndex(index_name=f\"news_fg_{version}\")\n", - "# specify the name, dimension, and model of the embedding features \n", - "emb.add_embedding(\"embedding_body\", model.get_sentence_embedding_dimension(), model=hsml_model)\n", - "emb.add_embedding(\"embedding_heading\", model.get_sentence_embedding_dimension(), model=hsml_model)" - ] - }, - { - "cell_type": "markdown", - "id": "25bddf53", - "metadata": {}, - "source": [ - "Next, you create a feature group with the `embedding_index` and ingest data into the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e55522ba", - "metadata": {}, - "outputs": [], - "source": [ - "news_fg = fs.get_or_create_feature_group(\n", - " name=\"news_fg\",\n", - " embedding_index=emb,\n", - " primary_key=[\"news_id\"],\n", - " version=version,\n", - " online_enabled=True\n", - ")\n", - "\n", - "news_fg.insert(df, write_options={\"start_offline_materialization\": False})" - ] - }, - { - "cell_type": "markdown", - "id": "db6b194b", - "metadata": {}, - "source": [ - "## Search News" - ] - }, - { - "cell_type": "markdown", - "id": "7fc8854e", - "metadata": {}, - "source": [ - "Once the data are ingested into Hopsworks, you can search news by giving a news description. The news description first needs to be encoded by the same LM you used to encode the news. You can get back the model in the model registry from the embedding feature. And then you can search news which are similar to the description using kNN search functionality provided by the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ede462ef", - "metadata": {}, - "outputs": [], - "source": [ - "# set the logging level to WARN to avoid INFO message\n", - "import logging\n", - "logging.getLogger().setLevel(logging.WARN)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f8d7df08", - "metadata": {}, - "outputs": [], - "source": [ - "news_description = \"news about europe\"" - ] - }, - { - "cell_type": "markdown", - "id": "ba2b2bde", - "metadata": {}, - "source": [ - "You can get back the model file from embedding feature object, and load the model file back to the embedding model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0f9f2cd4", - "metadata": {}, - "outputs": [], - "source": [ - "hsml_model = news_fg.embedding_index.get_embedding(\"embedding_heading\").model\n", - "local_model_path = hsml_model.download()\n", - "with open(f\"{local_model_path}/{hsml_model.name}.pkl\", 'rb') as f:\n", - " loaded_model = pickle.load(f)" - ] - }, - { - "cell_type": "markdown", - "id": "401915b0", - "metadata": {}, - "source": [ - "You can search similar news to the description against news heading." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7356be82", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(loaded_model.encode(news_description), k=3, col=\"embedding_heading\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "24e70246", - "metadata": {}, - "source": [ - "Alternative, you can search similar news to the description against the news body and filter by news type." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "32d954bc", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(loaded_model.encode(news_description), k=3, col=\"embedding_body\",\n", - " filter=news_fg.newstype == \"business\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "c0938afc", - "metadata": {}, - "source": [ - "## Next step" - ] - }, - { - "cell_type": "markdown", - "id": "28ffda57", - "metadata": {}, - "source": [ - "Now you are able to search articles using natural language. You can learn how to rank the result in [this tutorial]() and learn best practices in the [guide]()." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hsfs/knn_search/news-search-knn.ipynb b/api_examples/hsfs/knn_search/news-search-knn.ipynb deleted file mode 100644 index 988056c7..00000000 --- a/api_examples/hsfs/knn_search/news-search-knn.ipynb +++ /dev/null @@ -1,348 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "719b9af9-7375-4679-8e0a-8ae745805320", - "metadata": {}, - "source": [ - "# Requirements: Hopsworks 3.7+\n", - "\n", - "WARNING: this notebook does not currently work with serverless Hopsworks." - ] - }, - { - "cell_type": "markdown", - "id": "8b0ba628", - "metadata": {}, - "source": [ - "# News search using kNN in Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "d727fa41", - "metadata": {}, - "source": [ - "In this tutorial, you are going to learn how to create a news search application which allows you to search news using natural language. You will create embedding for the news and search news similar to a given description using embeddings and kNN search. The steps include:\n", - "1. Load news data\n", - "2. Create embedddings for news heading and news body\n", - "3. Ingest the news data and embedding into Hopsworks\n", - "4. Search news using Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "32974a73", - "metadata": {}, - "source": [ - "## Load news data" - ] - }, - { - "cell_type": "markdown", - "id": "840cc4e5", - "metadata": {}, - "source": [ - "First, you need to load the news articles downloaded from [Kaggle news articles](https://www.kaggle.com/datasets/asad1m9a9h6mood/news-articles).\n", - "Since creating embeddings for the full news is time-consuming, here we sample some articles." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "776aaa6d-b2b3-4c6a-9814-1dcc547f0a36", - "metadata": {}, - "outputs": [], - "source": [ - "#!pip install hsfs==3.7.0rc5 -q\n", - "#!pip install hopsworks==3.7.0rc1 -q\n", - "#!pip install sentence_transformers -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0d4062d8", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from sentence_transformers import SentenceTransformer\n", - "import logging\n", - "import hopsworks\n", - "from hsfs import embedding" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "28f3cca3-ce77-4b31-b837-4c247d28cfbb", - "metadata": {}, - "outputs": [], - "source": [ - "df_all = pd.read_csv(\"https://repo.hops.works/dev/jdowling/Articles.csv\", encoding='utf-8', encoding_errors='ignore')\n", - "df = df_all.sample(n=300).reset_index().drop([\"index\"], axis=1)\n", - "df[\"news_id\"] = list(range(len(df)))" - ] - }, - { - "cell_type": "markdown", - "id": "ddea5ab0", - "metadata": {}, - "source": [ - "## Create embeddings" - ] - }, - { - "cell_type": "markdown", - "id": "b43d7b68", - "metadata": {}, - "source": [ - "Next, you need to create embeddings for heading and body of the news. The embeddings will then be used for kNN search against the embedding of the news description you want to search. Here we use a light weighted language model (LM) which encodes the news into embeddings. You can use any other language models including LLM (llama, Mistral)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "017ae8a7", - "metadata": {}, - "outputs": [], - "source": [ - "model = SentenceTransformer('all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "245ee674", - "metadata": {}, - "outputs": [], - "source": [ - "# truncate the body to 100 characters\n", - "embeddings_body = model.encode([body[:100] for body in df[\"Article\"]])\n", - "embeddings_heading = model.encode(df[\"Heading\"])\n", - "df[\"embedding_heading\"] = pd.Series(embeddings_heading.tolist())\n", - "df[\"embedding_body\"] = pd.Series(embeddings_body.tolist())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "af272d56", - "metadata": {}, - "outputs": [], - "source": [ - "df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "1ca7d180", - "metadata": {}, - "source": [ - "## Ingest into Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "4edaa1d3", - "metadata": {}, - "source": [ - "You need to ingest the data to Hopsworks, so that they are stored and indexed. First, you login into Hopsworks and prepare the feature store." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "88f99b8b", - "metadata": {}, - "outputs": [], - "source": [ - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "53ca5b13", - "metadata": {}, - "source": [ - "Next, as embeddings are stored in an index in the backing vecotor database, you need to specify the index name and the embedding features in the dataframe. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4994b30b", - "metadata": {}, - "outputs": [], - "source": [ - "version = 1\n", - "emb = embedding.EmbeddingIndex(index_name=f\"news_fg_{version}\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8bbd31bc-b806-41e5-95a6-0dc510e2fe99", - "metadata": {}, - "outputs": [], - "source": [ - "# specify the name and dimension of the embedding features \n", - "emb.add_embedding(\"embedding_body\", model.get_sentence_embedding_dimension())\n", - "emb.add_embedding(\"embedding_heading\", model.get_sentence_embedding_dimension())" - ] - }, - { - "cell_type": "markdown", - "id": "755be3cb", - "metadata": {}, - "source": [ - "Next, you create a feature group with the `embedding_index` and ingest data into the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a2fa6af0", - "metadata": {}, - "outputs": [], - "source": [ - "news_fg = fs.get_or_create_feature_group(\n", - " name=\"news_fg\",\n", - " embedding_index=emb,\n", - " primary_key=[\"news_id\"],\n", - " version=version,\n", - " online_enabled=True\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9f82da02-0e37-4907-8790-a68145253845", - "metadata": {}, - "outputs": [], - "source": [ - "news_fg.insert(df, write_options={\"start_offline_materialization\": False})" - ] - }, - { - "cell_type": "markdown", - "id": "508ae2c4", - "metadata": {}, - "source": [ - "## Search News" - ] - }, - { - "cell_type": "markdown", - "id": "baa6d6c3", - "metadata": {}, - "source": [ - "Once the data are ingested into Hopsworks, you can search news by giving a news description. The news description first needs to be encoded by the same LM you used to encode the news. And then you can search news which are similar to the description using kNN search functionality provided by the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5e114be5", - "metadata": {}, - "outputs": [], - "source": [ - "# set the logging level to WARN to avoid INFO message\n", - "logging.getLogger().setLevel(logging.WARN)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "343bcbcf", - "metadata": {}, - "outputs": [], - "source": [ - "news_description = \"news about europe\"" - ] - }, - { - "cell_type": "markdown", - "id": "aa0d15d3", - "metadata": {}, - "source": [ - "You can search similar news to the description against news heading." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9a73ea59", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(model.encode(news_description), k=3, col=\"embedding_heading\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "c2c4f5fc", - "metadata": {}, - "source": [ - "Alternative, you can search similar news to the description against the news body and filter by news type." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7a3c31b8", - "metadata": {}, - "outputs": [], - "source": [ - "results = news_fg.find_neighbors(model.encode(news_description), k=3, col=\"embedding_body\",\n", - " filter=news_fg.newstype == \"business\")\n", - "# print out the heading\n", - "for result in results:\n", - " print(result[1][2])" - ] - }, - { - "cell_type": "markdown", - "id": "5cf246b3", - "metadata": {}, - "source": [ - "## Next step" - ] - }, - { - "cell_type": "markdown", - "id": "eb82cba1", - "metadata": {}, - "source": [ - "Now you are able to search articles using natural language. You can learn how to rank the result in [this tutorial]() and learn best practices in the [guide]()." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hsfs/knn_search/news-search-rank-view.ipynb b/api_examples/hsfs/knn_search/news-search-rank-view.ipynb deleted file mode 100644 index 92d8a1f0..00000000 --- a/api_examples/hsfs/knn_search/news-search-rank-view.ipynb +++ /dev/null @@ -1,356 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0a5e5c4d", - "metadata": {}, - "source": [ - "# Ranking of news search results" - ] - }, - { - "cell_type": "markdown", - "id": "8988ff65", - "metadata": {}, - "source": [ - "In the previous tutorial, you learn how to search news using natural languages. In order to make the search results more useful, you will learn how to rank the search results in this tutorial. We will use the number of view as the score of news articles as it represent the popularity of the articles. The steps include:\n", - "1. Create a view count feature group with sample view count dataset\n", - "2. Create a feature view that join the news feature group and view count feature group\n", - "3. Search news and rank them by view count" - ] - }, - { - "cell_type": "markdown", - "id": "6bafdd57", - "metadata": {}, - "source": [ - "## Create a view count feature group" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "246b6bb7", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd" - ] - }, - { - "cell_type": "markdown", - "id": "79a4dc31", - "metadata": {}, - "source": [ - "First you create a sample view count dataset of the size of news feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ea809cb3", - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "num_news = 300\n", - "df_view = pd.DataFrame({\"news_id\": list(range(num_news)), \"view_cnt\": [random.randint(0, 100) for i in range(num_news)]})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "139c5c0f", - "metadata": {}, - "outputs": [], - "source": [ - "version = 1" - ] - }, - { - "cell_type": "markdown", - "id": "4d7d216e", - "metadata": {}, - "source": [ - "Then you create a view count feature group and ingest the data into Hopsworks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b007629f", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fbacf4c2", - "metadata": {}, - "outputs": [], - "source": [ - "view_fg = fs.get_or_create_feature_group(\n", - " name=\"view_fg\",\n", - " primary_key=[\"news_id\"],\n", - " version=version,\n", - " online_enabled=True,\n", - ")\n", - "\n", - "view_fg.insert(df_view, write_options={\"start_offline_materialization\": False})" - ] - }, - { - "cell_type": "markdown", - "id": "43790e1d", - "metadata": {}, - "source": [ - "## Create a feature view " - ] - }, - { - "cell_type": "markdown", - "id": "2aab5e57", - "metadata": {}, - "source": [ - "You need to first get back the news feature group created before for the creation of feature view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fad86561", - "metadata": {}, - "outputs": [], - "source": [ - "fg = news_fg = fs.get_or_create_feature_group(\n", - " name=\"news_fg\",\n", - " version=1\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "2ddecaa0", - "metadata": {}, - "source": [ - "Now, you create a feature view by joining the news feature group and the view count feature group. Here, you select the heading, and the view count for ranking." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cc06c04a", - "metadata": {}, - "outputs": [], - "source": [ - "fv = fs.get_or_create_feature_view(\n", - " \"news_view\", version=version,\n", - " query=news_fg.select([\"heading\"]).join(view_fg.select([\"view_cnt\"]))\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "17fe1695", - "metadata": {}, - "source": [ - "## Search news and rank " - ] - }, - { - "cell_type": "markdown", - "id": "29f9b343", - "metadata": {}, - "source": [ - "Same as the previous tutorial, the news description first needs to be encoded by the same LM you used to encoded the news. And then the embedding can be used to search similar news using the feature view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b60e0804", - "metadata": {}, - "outputs": [], - "source": [ - "news_description = \"news about europe\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fcd5b0e6-ca97-480b-8205-cc16a89b7f2b", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install sentence_transformers -q" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41b60142", - "metadata": {}, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "model = SentenceTransformer('all-MiniLM-L6-v2')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "73a31f10", - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "logging.getLogger().setLevel(logging.WARN)" - ] - }, - { - "cell_type": "markdown", - "id": "4afe07d9", - "metadata": {}, - "source": [ - "Define some helper functions which sort and print new results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b3da47a9", - "metadata": {}, - "outputs": [], - "source": [ - "def print_news(feature_vectors):\n", - " for feature_vector in feature_vectors:\n", - " print(feature_vector)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7f7c84aa", - "metadata": {}, - "outputs": [], - "source": [ - "def print_sort_news(feature_vectors):\n", - " # sort the articles by view count\n", - " print(\"Ranked result:\")\n", - " feature_vectors = sorted(feature_vectors, key=lambda x: x[1]*-1)\n", - " print_news(feature_vectors)" - ] - }, - { - "cell_type": "markdown", - "id": "f5cae7d7", - "metadata": {}, - "source": [ - "Now, you can see the top k results returned by the feature view, which are the headings and the view count. You can also see the ranked results by view count of the top k results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e27d333", - "metadata": {}, - "outputs": [], - "source": [ - "feature_vectors = fv.find_neighbors(model.encode(news_description), k=5, feature=news_fg.embedding_heading)\n", - "print_news(feature_vectors)\n", - "print_sort_news(feature_vectors)" - ] - }, - { - "cell_type": "markdown", - "id": "268906fb", - "metadata": {}, - "source": [ - "Like the feature group, you can filter results in `find_neighbors` in feature view. You can also use multiple filtering conditions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4054191b", - "metadata": {}, - "outputs": [], - "source": [ - "feature_vectors = fv.find_neighbors(model.encode(news_description), k=5, \n", - " filter=((news_fg.newstype == \"sports\") & (news_fg.article.like(\"europe\"))),\n", - " feature=news_fg.embedding_heading)\n", - "print_news(feature_vectors)\n", - "print_sort_news(feature_vectors)" - ] - }, - { - "cell_type": "markdown", - "id": "15e9480b", - "metadata": {}, - "source": [ - "You can get back result by providing primary key which is the news id as well." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d8757fab", - "metadata": {}, - "outputs": [], - "source": [ - "feature_vectors = fv.get_feature_vector({\"news_id\": 10})\n", - "print_news([feature_vectors])" - ] - }, - { - "cell_type": "markdown", - "id": "057aa05d", - "metadata": {}, - "source": [ - "## Next step" - ] - }, - { - "cell_type": "markdown", - "id": "7b911f73", - "metadata": {}, - "source": [ - "Now you are able to search articles and rank them by view count. You may be wondering why the view count does not store in the news feature group. You can find the answer and other best practices in the [guide]()." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "55e58363", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.8" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/api_examples/hsfs/knn_search/requirements.txt b/api_examples/hsfs/knn_search/requirements.txt deleted file mode 100644 index f59b13f2..00000000 --- a/api_examples/hsfs/knn_search/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -hsfs==3.7.0rc5 -hopsworks==3.7.0rc1 -sentence_transformers diff --git a/churn/1_churn_feature_pipeline.ipynb b/churn/1_churn_feature_pipeline.ipynb index 5427f97f..9288d9c9 100644 --- a/churn/1_churn_feature_pipeline.ipynb +++ b/churn/1_churn_feature_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2de72615", + "id": "e31bb98b", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 01: Feature Pipeline\n", @@ -23,7 +23,7 @@ }, { "cell_type": "markdown", - "id": "e08a069b", + "id": "4ab5155e", "metadata": {}, "source": [ "The data you will use comes from three different CSV files:\n", @@ -40,7 +40,7 @@ }, { "cell_type": "markdown", - "id": "90f5f948", + "id": "5b5c3917", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -49,7 +49,7 @@ { "cell_type": "code", "execution_count": null, - "id": "859fbe6b", + "id": "9d961f87", "metadata": {}, "outputs": [], "source": [ @@ -59,20 +59,20 @@ { "cell_type": "code", "execution_count": null, - "id": "f73d7642", + "id": "59ad59a9", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", - "# Ignore warnings\n", + "#ignore warnings\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", - "id": "d7d39005", + "id": "56fbc5cc", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Loading the Data \n" @@ -81,30 +81,19 @@ { "cell_type": "code", "execution_count": null, - "id": "abff9db7", + "id": "cab1512d", "metadata": {}, "outputs": [], "source": [ - "# Read demography data\n", "demography_df = pd.read_csv(\"https://repo.hops.works/dev/davit/churn/demography.csv\")\n", - "\n", - "# Read customer info data with datetime parsing\n", - "customer_info_df = pd.read_csv(\n", - " \"https://repo.hops.works/dev/davit/churn/customer_info.csv\",\n", - " parse_dates=['datetime'],\n", - ")\n", - "\n", - "# Read subscriptions data with datetime parsing\n", - "subscriptions_df = pd.read_csv(\n", - " \"https://repo.hops.works/dev/davit/churn/subscriptions.csv\",\n", - " parse_dates=['datetime'],\n", - ")" + "customer_info_df = pd.read_csv(\"https://repo.hops.works/dev/davit/churn/customer_info.csv\")\n", + "subscriptions_df = pd.read_csv(\"https://repo.hops.works/dev/davit/churn/subscriptions.csv\")" ] }, { "cell_type": "code", "execution_count": null, - "id": "47371dd8", + "id": "95652438-1a10-401e-9438-ca06b6f5ea96", "metadata": {}, "outputs": [], "source": [ @@ -114,7 +103,7 @@ { "cell_type": "code", "execution_count": null, - "id": "171c0a5d", + "id": "0401bede-2d69-40a8-ad21-55602a7c72c2", "metadata": {}, "outputs": [], "source": [ @@ -124,7 +113,7 @@ { "cell_type": "code", "execution_count": null, - "id": "58f7c4ef", + "id": "86a445a2-712b-4d0e-aea3-326932ef7dc3", "metadata": {}, "outputs": [], "source": [ @@ -133,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "5a7a2f89", + "id": "cfddf1b6", "metadata": {}, "source": [ "---\n", @@ -145,7 +134,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4d0ddecb", + "id": "b26eb398", "metadata": {}, "outputs": [], "source": [ @@ -164,7 +153,7 @@ }, { "cell_type": "markdown", - "id": "2ca91d6f", + "id": "ae5008cf", "metadata": {}, "source": [ "---\n", @@ -183,7 +172,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2f835078", + "id": "81531cc3", "metadata": {}, "outputs": [], "source": [ @@ -196,7 +185,7 @@ }, { "cell_type": "markdown", - "id": "2195a094", + "id": "7a094e86", "metadata": {}, "source": [ "To create a feature group you need to give it a name and specify a primary key. It is also good to provide a description of the contents of the feature group." @@ -205,7 +194,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5be5d163", + "id": "921a5010", "metadata": {}, "outputs": [], "source": [ @@ -221,7 +210,7 @@ }, { "cell_type": "markdown", - "id": "9454e269", + "id": "1a06298e", "metadata": {}, "source": [ "A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", @@ -232,7 +221,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c820fdb0", + "id": "05d9cbd8", "metadata": {}, "outputs": [], "source": [ @@ -243,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9a751ee7", + "id": "fd8469e7", "metadata": {}, "outputs": [], "source": [ @@ -267,7 +256,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e97881ff", + "id": "942ecf89", "metadata": {}, "outputs": [], "source": [ @@ -285,7 +274,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cbabcd85", + "id": "bf4e3842", "metadata": {}, "outputs": [], "source": [ @@ -305,7 +294,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0d43fb2e", + "id": "2af92271", "metadata": {}, "outputs": [], "source": [ @@ -318,13 +307,16 @@ " event_time=\"datetime\",\n", ")\n", "# Insert data into feature group\n", - "subscriptions_fg.insert(subscriptions_df)" + "subscriptions_fg.insert(\n", + " subscriptions_df, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "472be52b", + "id": "16aca181", "metadata": {}, "outputs": [], "source": [ @@ -349,7 +341,7 @@ }, { "cell_type": "markdown", - "id": "0f38854f", + "id": "6be2416d", "metadata": {}, "source": [ "All three feature groups are now accessible and searchable in the UI\n", @@ -359,7 +351,7 @@ }, { "cell_type": "markdown", - "id": "817cab5b", + "id": "26023b4f", "metadata": {}, "source": [ "---\n", @@ -376,7 +368,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -390,7 +382,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/churn/2_churn_training_pipeline.ipynb b/churn/2_churn_training_pipeline.ipynb index 0d34eddd..e4e324b6 100644 --- a/churn/2_churn_training_pipeline.ipynb +++ b/churn/2_churn_training_pipeline.ipynb @@ -47,6 +47,7 @@ "metadata": {}, "outputs": [], "source": [ + "import joblib\n", "import os\n", "from PIL import Image\n", "\n", @@ -122,12 +123,12 @@ "outputs": [], "source": [ "# Select features for training data\n", - "selected_features = customer_info_fg.select_except([\"customerid\", \"datetime\"]) \\\n", + "query = customer_info_fg.select_except([\"customerid\", \"datetime\"]) \\\n", " .join(demography_fg.select_except([\"customerid\"])) \\\n", " .join(subscriptions_fg.select_except([\"datetime\"]))\n", "\n", - "# uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# uncomment this if you would like to view query result\n", + "# query.show(5)" ] }, { @@ -163,7 +164,7 @@ " \"multiplelines\", \"internetservice\", \"onlinesecurity\", \"onlinebackup\",\n", " \"deviceprotection\", \"techsupport\", \"streamingmovies\", \"streamingtv\",\n", " \"phoneservice\", \"paperlessbilling\", \"contract\", \"paymentmethod\", \"gender\", \n", - " \"dependents\", \"partner\",\n", + " \"dependents\", \"partner\"\n", "]\n", "\n", "# Map features to their corresponding transformation functions\n", @@ -201,7 +202,7 @@ " version = 1,\n", " labels=[\"churn\"],\n", " transformation_functions=transformation_functions,\n", - " query=selected_features,\n", + " query=query,\n", ")" ] }, @@ -296,10 +297,10 @@ "outputs": [], "source": [ "# Create an instance of the XGBClassifier with a specified scale_pos_weight\n", - "model = xgb.XGBClassifier(scale_pos_weight=3)\n", + "classifier = xgb.XGBClassifier(scale_pos_weight=3)\n", "\n", "# Fit the classifier on the training data\n", - "model.fit(X_train, y_train)" + "classifier.fit(X_train, y_train)" ] }, { @@ -317,10 +318,7 @@ "outputs": [], "source": [ "# Generate the confusion matrix using the true labels (y_test) and predicted labels from the classifier\n", - "conf_matrix = confusion_matrix(\n", - " y_test, \n", - " model.predict(X_test),\n", - ").astype(int)\n", + "conf_matrix = confusion_matrix(y_test, classifier.predict(X_test)).astype(int)\n", "\n", "# Create a DataFrame from the confusion matrix results with appropriate labels\n", "df_cm = pd.DataFrame(\n", @@ -331,12 +329,7 @@ "\n", "# Create a heatmap using seaborn with annotations\n", "figure_cm = plt.figure(figsize=(10, 7))\n", - "figure_cm = sns.heatmap(\n", - " df_cm, \n", - " annot=True, \n", - " annot_kws={\"size\": 14}, \n", - " fmt='.10g',\n", - ")\n", + "figure_cm = sns.heatmap(df_cm, annot=True, annot_kws={\"size\": 14}, fmt='.10g')\n", "\n", "# Set the title for the confusion matrix plot\n", "plt.title('Confusion Matrix', fontsize=17)\n", @@ -392,10 +385,7 @@ "output_schema = Schema(y_train)\n", "\n", "# Create a ModelSchema object specifying the input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "# Convert the model schema to a dictionary\n", "model_schema.to_dict()" @@ -414,8 +404,11 @@ "if not os.path.isdir(model_dir):\n", " os.mkdir(model_dir)\n", "\n", - "# Save the trained classifier as json file\n", - "model.save_model(model_dir + \"/model.json\")\n", + "# Specify the file name for the pickled model\n", + "pkl_file_name = model_dir + '/churnmodel.pkl'\n", + "\n", + "# Save the trained classifier using joblib\n", + "joblib.dump(classifier, pkl_file_name)\n", "\n", "# Save the confusion matrix heatmap as an image in the model directory\n", "figure_cm.figure.savefig(model_dir + '/confusion_matrix.png')" @@ -443,13 +436,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "---\n", "## โญ๏ธ **Next:** Part 03 \n", "\n", "In the following notebook you will use your model for batch inference.\n", "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/logicalclocks/hopsworks-tutorials/blob/master/churn/3_churn_batch_inference.ipynb)\n", - "\n", - "---" + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/logicalclocks/hopsworks-tutorials/blob/master/churn/3_churn_batch_inference.ipynb)" ] } ], @@ -458,7 +450,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -472,7 +464,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/churn/3_churn_batch_inference.ipynb b/churn/3_churn_batch_inference.ipynb index c907d5a1..8fd870e3 100644 --- a/churn/3_churn_batch_inference.ipynb +++ b/churn/3_churn_batch_inference.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "2710cb61", + "id": "7ffd2cd9", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 03: Batch Inference\n", @@ -12,7 +12,7 @@ }, { "cell_type": "markdown", - "id": "91221f50", + "id": "c0f756d8", "metadata": {}, "source": [ "### ๐Ÿ“ Imports" @@ -21,7 +21,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a35f9502", + "id": "ee2ab866", "metadata": {}, "outputs": [], "source": [ @@ -31,14 +31,12 @@ { "cell_type": "code", "execution_count": null, - "id": "5634f0a1", + "id": "a11d2b28", "metadata": {}, "outputs": [], "source": [ - "from xgboost import (\n", - " XGBClassifier, \n", - " plot_importance,\n", - ")\n", + "import joblib\n", + "from xgboost import plot_importance\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", @@ -48,7 +46,7 @@ }, { "cell_type": "markdown", - "id": "65b0eb1d", + "id": "21af1eec", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -57,7 +55,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c94353e7", + "id": "61b5b046", "metadata": {}, "outputs": [], "source": [ @@ -70,7 +68,7 @@ }, { "cell_type": "markdown", - "id": "b4d72861", + "id": "c0a0c398", "metadata": {}, "source": [ "## โš™๏ธ Feature View Retrieval\n" @@ -79,7 +77,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d55ff11f", + "id": "f4b10aff", "metadata": {}, "outputs": [], "source": [ @@ -92,7 +90,7 @@ }, { "cell_type": "markdown", - "id": "6f7b31a0", + "id": "7e7bec90", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -101,7 +99,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8d0d05bc", + "id": "d187a98a", "metadata": {}, "outputs": [], "source": [ @@ -111,7 +109,7 @@ }, { "cell_type": "markdown", - "id": "38d83203", + "id": "b43409c0", "metadata": {}, "source": [ "---\n", @@ -124,7 +122,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cc8a1687", + "id": "e2563560", "metadata": {}, "outputs": [], "source": [ @@ -141,21 +139,20 @@ { "cell_type": "code", "execution_count": null, - "id": "ca62f805", + "id": "5e2159d5", "metadata": {}, "outputs": [], "source": [ - "# Initialize the model\n", - "model = XGBClassifier()\n", + "# Load the saved XGBoost model using joblib from the downloaded model directory\n", + "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/churnmodel.pkl\")\n", "\n", - "# Load the model from a saved JSON file\n", - "model.load_model(saved_model_dir + \"/model.json\")\n", - "model" + "# Display the retrieved XGBoost model\n", + "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "eb7680ed", + "id": "53ee5a05", "metadata": {}, "source": [ "---\n", @@ -165,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "67a4ac87", + "id": "aec4ef7b", "metadata": {}, "outputs": [], "source": [ @@ -183,7 +180,7 @@ { "cell_type": "code", "execution_count": null, - "id": "880d106f", + "id": "ebb02e76", "metadata": {}, "outputs": [], "source": [ @@ -199,7 +196,7 @@ }, { "cell_type": "markdown", - "id": "c522b923", + "id": "43a879bf", "metadata": {}, "source": [ "Let's predict the all for all customer data and then visualize predictions." @@ -208,7 +205,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7e48ba91", + "id": "422ed460", "metadata": {}, "outputs": [], "source": [ @@ -216,7 +213,7 @@ "batch_data.drop('customerid', axis=1, inplace=True)\n", "\n", "# Use the retrieved XGBoost model to make predictions on the batch data\n", - "predictions = model.predict(batch_data)\n", + "predictions = retrieved_xgboost_model.predict(batch_data)\n", "\n", "# Transform numeric predictions to human-readable labels\n", "predictions = transform_preds(predictions)\n", @@ -227,7 +224,7 @@ }, { "cell_type": "markdown", - "id": "e5a41f2e", + "id": "d95fa5e6", "metadata": {}, "source": [ "---\n", @@ -239,7 +236,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8dcefec6", + "id": "fd8413b1", "metadata": {}, "outputs": [], "source": [ @@ -267,7 +264,7 @@ }, { "cell_type": "markdown", - "id": "4ee29f72", + "id": "cbae562e", "metadata": {}, "source": [ "Lets plot feature importance " @@ -276,13 +273,13 @@ { "cell_type": "code", "execution_count": null, - "id": "669cd297", + "id": "daaa2131", "metadata": {}, "outputs": [], "source": [ "# Plot feature importance using XGBoost's plot_importance function\n", "figure_imp = plot_importance(\n", - " model, # The retrieved XGBoost model\n", + " retrieved_xgboost_model, # The retrieved XGBoost model\n", " max_num_features=10, # Maximum number of features to display\n", " importance_type='weight', # Type of importance to display ('weight' represents the number of times a feature appears in a tree across all trees)\n", ")\n", @@ -294,7 +291,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b554d9c5", + "id": "7b9256cf", "metadata": {}, "outputs": [], "source": [ @@ -315,7 +312,7 @@ }, { "cell_type": "markdown", - "id": "97b466fb", + "id": "9d4d273e", "metadata": {}, "source": [ "Lets visualise couple of more imporant features such as `streamingtv` and `streamingmovies`" @@ -324,7 +321,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1f7ad6b4", + "id": "9bbddda9", "metadata": {}, "outputs": [], "source": [ @@ -346,7 +343,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6d83fe76", + "id": "f91b7d1d", "metadata": {}, "outputs": [], "source": [ @@ -368,7 +365,7 @@ { "cell_type": "code", "execution_count": null, - "id": "22b5744a", + "id": "4598b999", "metadata": {}, "outputs": [], "source": [ @@ -390,7 +387,7 @@ { "cell_type": "code", "execution_count": null, - "id": "785a8c93", + "id": "fdaaa590", "metadata": {}, "outputs": [], "source": [ @@ -412,7 +409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f844088e", + "id": "7674b581", "metadata": {}, "outputs": [], "source": [ @@ -434,7 +431,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3b1bae8e", + "id": "e95d8849", "metadata": {}, "outputs": [], "source": [ @@ -455,7 +452,7 @@ }, { "cell_type": "markdown", - "id": "203cb336", + "id": "2421f67a", "metadata": {}, "source": [ "---\n", @@ -474,7 +471,7 @@ }, { "cell_type": "markdown", - "id": "969cdae1", + "id": "471dd2be", "metadata": {}, "source": [ "---\n", @@ -491,7 +488,7 @@ { "cell_type": "code", "execution_count": null, - "id": "76d0033b", + "id": "d557008b", "metadata": {}, "outputs": [], "source": [ @@ -508,7 +505,7 @@ }, { "cell_type": "markdown", - "id": "0a4eeba0", + "id": "98dc224a", "metadata": {}, "source": [ "![fg-statistics](../churn/images/churn_statistics.gif)\n", @@ -521,7 +518,7 @@ }, { "cell_type": "markdown", - "id": "e3d0628e", + "id": "211ff1e0", "metadata": {}, "source": [ "---\n", @@ -537,7 +534,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -551,7 +548,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/churn/streamlit_batch_inference_app.py b/churn/streamlit_batch_inference_app.py index 8639718e..bb544d4a 100644 --- a/churn/streamlit_batch_inference_app.py +++ b/churn/streamlit_batch_inference_app.py @@ -2,7 +2,7 @@ import hopsworks import plotly.graph_objs as go import plotly.express as px -from xgboost import XGBClassifier +import joblib import math import pandas as pd @@ -50,18 +50,9 @@ def retrive_data(feature_view=feature_view): @st.cache_data() def get_model(project=project): mr = project.get_model_registry() - model = mr.get_model( - name="churnmodel", - version=1, - ) + model = mr.get_model("churnmodel", version=1) model_dir = model.download() - - # Initialize the model - model = XGBClassifier() - - # Load the model from a saved JSON file - model.load_model(model_dir + "/model.json") - return model + return joblib.load(model_dir + "/churnmodel.pkl") model = get_model() diff --git a/fraud_batch/1_fraud_batch_feature_pipeline.ipynb b/fraud_batch/1_fraud_batch_feature_pipeline.ipynb old mode 100644 new mode 100755 index 1c9767d8..d4cd4dc2 --- a/fraud_batch/1_fraud_batch_feature_pipeline.ipynb +++ b/fraud_batch/1_fraud_batch_feature_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "f60c52ce", + "id": "c8572ae1", "metadata": { "tags": [] }, @@ -27,7 +27,7 @@ }, { "cell_type": "markdown", - "id": "7ec7724a", + "id": "3f7a0ac5", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -36,7 +36,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42efa933", + "id": "3c57262d", "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a4120a95", + "id": "cd1541d9", "metadata": {}, "outputs": [], "source": [ @@ -64,7 +64,7 @@ }, { "cell_type": "markdown", - "id": "010286f1", + "id": "7d2e72bb", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Loading the Data \n", @@ -84,7 +84,7 @@ { "cell_type": "code", "execution_count": null, - "id": "491a37b4", + "id": "26bad78a", "metadata": {}, "outputs": [], "source": [ @@ -100,7 +100,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9ed8c4f0", + "id": "b2bbe076", "metadata": {}, "outputs": [], "source": [ @@ -118,7 +118,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2543c511", + "id": "46874951", "metadata": {}, "outputs": [], "source": [ @@ -135,7 +135,7 @@ }, { "cell_type": "markdown", - "id": "717f9102", + "id": "45720ec1", "metadata": {}, "source": [ "---" @@ -143,7 +143,7 @@ }, { "cell_type": "markdown", - "id": "16357302", + "id": "41be3e46", "metadata": {}, "source": [ "## ๐Ÿ› ๏ธ Feature Engineering \n", @@ -158,7 +158,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0b919bf8", + "id": "3407147d", "metadata": {}, "outputs": [], "source": [ @@ -181,7 +181,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5d6fd9ae", + "id": "05f1d168-0849-427e-a6f9-08bc282c28d6", "metadata": {}, "outputs": [], "source": [ @@ -191,7 +191,7 @@ }, { "cell_type": "markdown", - "id": "92820fab", + "id": "86626356", "metadata": {}, "source": [ "Next, you will create features that for each credit card aggregate data from multiple time steps.\n", @@ -203,7 +203,7 @@ { "cell_type": "code", "execution_count": null, - "id": "47116f13", + "id": "2ac9cb86", "metadata": {}, "outputs": [], "source": [ @@ -223,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "0b3abcfc", + "id": "80c0764b", "metadata": {}, "source": [ "Next lets compute windowed aggregates. Here you will use 4-hour windows, but feel free to experiment with different window lengths by setting `window_len` below to a value of your choice." @@ -232,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f9bf9dd7", + "id": "f95d09f1", "metadata": {}, "outputs": [], "source": [ @@ -248,16 +248,16 @@ }, { "cell_type": "markdown", - "id": "b3021fa4", + "id": "e4cc229e", "metadata": {}, "source": [ - "### โš™๏ธ Convert date time object to unix epoch in milliseconds " + "### Convert date time object to unix epoch in milliseconds" ] }, { "cell_type": "code", "execution_count": null, - "id": "837bafd5", + "id": "3bbf8852", "metadata": {}, "outputs": [], "source": [ @@ -270,77 +270,7 @@ }, { "cell_type": "markdown", - "id": "a3df26a9", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Great Expectations " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c9391579", - "metadata": {}, - "outputs": [], - "source": [ - "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration\n", - "\n", - "# Convert the 'trans_df' DataFrame to a Great Expectations DataFrame\n", - "ge_trans_df = ge.from_pandas(trans_df)\n", - "\n", - "# Retrieve the expectation suite associated with the ge DataFrame\n", - "expectation_suite_transactions = ge_trans_df.get_expectation_suite()\n", - "\n", - "# Set the expectation suite name to \"transactions_suite\"\n", - "expectation_suite_transactions.expectation_suite_name = \"transactions_suite\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8969ff27", - "metadata": {}, - "outputs": [], - "source": [ - "# Check binary fraud_label column to be in set [0,1]\n", - "expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_distinct_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"fraud_label\",\n", - " \"value_set\": [0, 1],\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Check amount column to be not negative\n", - "expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"amount\",\n", - " \"min_value\": 0.0,\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Loop through specified columns ('tid', 'datetime', 'cc_num') and add expectations for null values\n", - "for column in ['tid', 'datetime', 'cc_num']:\n", - " expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_null\",\n", - " kwargs={\n", - " \"column\": column,\n", - " \"mostly\": 0.0,\n", - " }\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "adf03efd", + "id": "21be72c5", "metadata": {}, "source": [ "---" @@ -348,7 +278,7 @@ }, { "cell_type": "markdown", - "id": "7c069f5a", + "id": "be723483", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -356,7 +286,7 @@ }, { "cell_type": "markdown", - "id": "ac32437d", + "id": "da57c80c", "metadata": { "tags": [] }, @@ -373,7 +303,7 @@ { "cell_type": "code", "execution_count": null, - "id": "287491fa", + "id": "f7329f2c", "metadata": {}, "outputs": [], "source": [ @@ -386,7 +316,7 @@ }, { "cell_type": "markdown", - "id": "23b61089", + "id": "30358563", "metadata": {}, "source": [ "To create a feature group you need to give it a name and specify a primary key. It is also good to provide a description of the contents of the feature group and a version number, if it is not defined it will automatically be incremented to `1`." @@ -395,7 +325,7 @@ { "cell_type": "code", "execution_count": null, - "id": "58353322", + "id": "a7dea9fc", "metadata": {}, "outputs": [], "source": [ @@ -406,13 +336,12 @@ " description=\"Transaction data\",\n", " primary_key=[\"cc_num\"],\n", " event_time=\"datetime\",\n", - " expectation_suite=expectation_suite_transactions,\n", ")" ] }, { "cell_type": "markdown", - "id": "832333fa", + "id": "af58171c", "metadata": {}, "source": [ "A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", @@ -423,19 +352,18 @@ { "cell_type": "code", "execution_count": null, - "id": "7f82e4a2", + "id": "64eef16a", "metadata": {}, "outputs": [], "source": [ "# Insert data into feature group\n", - "trans_fg.insert(trans_df)\n", - "print('โœ… Done!')" + "trans_fg.insert(trans_df)" ] }, { "cell_type": "code", "execution_count": null, - "id": "0c6832a9", + "id": "39d48ea9", "metadata": {}, "outputs": [], "source": [ @@ -462,7 +390,7 @@ }, { "cell_type": "markdown", - "id": "36f7e30a", + "id": "dae17609", "metadata": {}, "source": [ "At the creation of the feature group, you will be prompted with an URL that will directly link to it; there you will be able to explore some of the aspects of your newly created feature group.\n", @@ -472,7 +400,7 @@ }, { "cell_type": "markdown", - "id": "1250c3ce", + "id": "0d90bbfd", "metadata": {}, "source": [ "You can move on and do the same thing for the feature group with our windows aggregation." @@ -481,7 +409,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6b8ef9f6", + "id": "e12d198e", "metadata": {}, "outputs": [], "source": [ @@ -498,19 +426,18 @@ { "cell_type": "code", "execution_count": null, - "id": "1970657b", + "id": "19458252", "metadata": {}, "outputs": [], "source": [ "# Insert data into feature group\n", - "window_aggs_fg.insert(window_aggs_df)\n", - "print('โœ… Done!')" + "window_aggs_fg.insert(window_aggs_df)" ] }, { "cell_type": "code", "execution_count": null, - "id": "68b0c84f", + "id": "e967a252", "metadata": {}, "outputs": [], "source": [ @@ -530,7 +457,7 @@ }, { "cell_type": "markdown", - "id": "e22dce87", + "id": "2030383e", "metadata": {}, "source": [ "Both feature groups are now accessible and searchable in the UI\n", @@ -540,7 +467,7 @@ }, { "cell_type": "markdown", - "id": "4f8b5d8a", + "id": "8e6d4483", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 02: Training Pipeline\n", @@ -555,7 +482,7 @@ "hash": "e1ddeae6eefc765c17da80d38ea59b893ab18c0c0904077a035ef84cfe367f83" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -569,7 +496,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/fraud_batch/2_fraud_batch_training_pipeline.ipynb b/fraud_batch/2_fraud_batch_training_pipeline.ipynb index a1252678..4ba09980 100644 --- a/fraud_batch/2_fraud_batch_training_pipeline.ipynb +++ b/fraud_batch/2_fraud_batch_training_pipeline.ipynb @@ -42,6 +42,7 @@ "metadata": {}, "outputs": [], "source": [ + "import joblib\n", "import os\n", "\n", "import pandas as pd\n", @@ -111,7 +112,7 @@ "outputs": [], "source": [ "# Select features for training data.\n", - "selected_features = trans_fg.select([\"fraud_label\", \"category\", \"amount\", \"age_at_transaction\", \"days_until_card_expires\", \"loc_delta\"])\\\n", + "query = trans_fg.select([\"fraud_label\", \"category\", \"amount\", \"age_at_transaction\", \"days_until_card_expires\", \"loc_delta\"])\\\n", " .join(window_aggs_fg.select_except([\"cc_num\"]))" ] }, @@ -121,8 +122,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "## uncomment this if you would like to view query results\n", + "#query.show(5)" ] }, { @@ -184,7 +185,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='transactions_view_fraud_batch_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=[\"fraud_label\"],\n", " transformation_functions=transformation_functions,\n", ")" @@ -224,7 +225,7 @@ "TEST_SIZE = 0.2\n", "\n", "X_train, X_test, y_train, y_test = feature_view.train_test_split(\n", - " test_size=TEST_SIZE,\n", + " test_size = TEST_SIZE,\n", ")" ] }, @@ -307,10 +308,10 @@ "outputs": [], "source": [ "# Create an instance of the XGBClassifier\n", - "model = xgb.XGBClassifier()\n", + "clf = xgb.XGBClassifier()\n", "\n", "# Fit the classifier on the training data\n", - "model.fit(X_train, y_train)" + "clf.fit(X_train.values, y_train)" ] }, { @@ -320,10 +321,10 @@ "outputs": [], "source": [ "# Predict the training data using the trained classifier\n", - "y_pred_train = model.predict(X_train)\n", + "y_pred_train = clf.predict(X_train.values)\n", "\n", "# Predict the test data using the trained classifier\n", - "y_pred_test = model.predict(X_test)" + "y_pred_test = clf.predict(X_test.values)" ] }, { @@ -438,7 +439,7 @@ " os.mkdir(model_dir)\n", "\n", "# Save the trained XGBoost model using joblib\n", - "model.save_model(model_dir + \"/model.json\")\n", + "joblib.dump(clf, model_dir + '/xgboost_fraud_batch_model.pkl')\n", "\n", "# Save the confusion matrix heatmap as an image in the model directory\n", "fig.savefig(model_dir + \"/confusion_matrix.png\")" @@ -482,7 +483,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -496,7 +497,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/fraud_batch/3_fraud_batch_inference.ipynb b/fraud_batch/3_fraud_batch_inference.ipynb index 6b72e59d..fab4c5fc 100644 --- a/fraud_batch/3_fraud_batch_inference.ipynb +++ b/fraud_batch/3_fraud_batch_inference.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "0be78559", + "id": "c9fec917", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 03: Batch Inference\n", @@ -16,7 +16,7 @@ }, { "cell_type": "markdown", - "id": "43743c5d", + "id": "731cffd4", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -25,16 +25,16 @@ { "cell_type": "code", "execution_count": null, - "id": "13f0abf3", + "id": "b96c942c", "metadata": {}, "outputs": [], "source": [ - "from xgboost import XGBClassifier" + "import joblib" ] }, { "cell_type": "markdown", - "id": "6a310165", + "id": "dfb09860", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -43,7 +43,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3fe3e577", + "id": "6c71483d", "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ }, { "cell_type": "markdown", - "id": "f5b8fa76", + "id": "c637bf4c", "metadata": {}, "source": [ "## โš™๏ธ Feature View Retrieval\n" @@ -65,7 +65,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4cd9db18", + "id": "9b8bb207", "metadata": {}, "outputs": [], "source": [ @@ -78,7 +78,7 @@ }, { "cell_type": "markdown", - "id": "0067bc06", + "id": "8ec3cafe", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -87,7 +87,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4e6b2247", + "id": "1b412d1e", "metadata": {}, "outputs": [], "source": [ @@ -97,7 +97,7 @@ }, { "cell_type": "markdown", - "id": "05dcb148", + "id": "d0587a64", "metadata": {}, "source": [ "## ๐Ÿš€ Fetch and test the model\n", @@ -108,7 +108,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8a34352e", + "id": "f0be44ff", "metadata": {}, "outputs": [], "source": [ @@ -125,21 +125,20 @@ { "cell_type": "code", "execution_count": null, - "id": "d27adabf", + "id": "88b09ee2", "metadata": {}, "outputs": [], "source": [ - "# Initialize the model\n", - "model = XGBClassifier()\n", + "# Load the saved XGBoost model using joblib from the downloaded model directory\n", + "retrieved_xgboost_model = joblib.load(saved_model_dir + \"/xgboost_fraud_batch_model.pkl\")\n", "\n", - "# Load the model from a saved JSON file\n", - "model.load_model(saved_model_dir + \"/model.json\")\n", - "model" + "# Display the retrieved XGBoost model\n", + "retrieved_xgboost_model" ] }, { "cell_type": "markdown", - "id": "ae9b9f92", + "id": "aba7238a", "metadata": {}, "source": [ "---\n", @@ -149,7 +148,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8fc906eb", + "id": "34ac6398", "metadata": {}, "outputs": [], "source": [ @@ -169,12 +168,12 @@ { "cell_type": "code", "execution_count": null, - "id": "2e58817d", + "id": "0695d933", "metadata": {}, "outputs": [], "source": [ "# Use the retrieved XGBoost model to make predictions on the batch data\n", - "predictions = model.predict(batch_data)\n", + "predictions = retrieved_xgboost_model.predict(batch_data)\n", "\n", "# Display the first five predictions\n", "predictions[:5]" @@ -182,7 +181,7 @@ }, { "cell_type": "markdown", - "id": "ee5fcba9", + "id": "5ccd12a2", "metadata": {}, "source": [ "---\n", @@ -198,7 +197,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -212,7 +211,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/fraud_batch/features/transactions_fraud.py b/fraud_batch/features/transactions_fraud.py index cfd1f608..a94d82f6 100644 --- a/fraud_batch/features/transactions_fraud.py +++ b/fraud_batch/features/transactions_fraud.py @@ -15,7 +15,7 @@ def get_age_at_transaction(trans_df: pd.DataFrame, profiles_df: pd.DataFrame) -> """ # Compute age at transaction. age_df = trans_df.merge(profiles_df, on="cc_num", how="left") - trans_df["age_at_transaction"] = (age_df["datetime"] - age_df["birthdate"]) / np.timedelta64(365, "D") + trans_df["age_at_transaction"] = (age_df["datetime"] - age_df["birthdate"]) / np.timedelta64(1, "Y") return trans_df diff --git a/fraud_online/1_fraud_online_feature_pipeline.ipynb b/fraud_online/1_fraud_online_feature_pipeline.ipynb old mode 100644 new mode 100755 index 0201475e..63a98420 --- a/fraud_online/1_fraud_online_feature_pipeline.ipynb +++ b/fraud_online/1_fraud_online_feature_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "c997f05a", + "id": "debc8314", "metadata": { "tags": [] }, @@ -27,7 +27,7 @@ }, { "cell_type": "markdown", - "id": "3ebdad2e", + "id": "14ce4ec5", "metadata": {}, "source": [ "## ๐Ÿ“ Imports" @@ -36,7 +36,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1aa7ce8a", + "id": "138332f0", "metadata": {}, "outputs": [], "source": [ @@ -46,7 +46,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49806257", + "id": "63616634", "metadata": {}, "outputs": [], "source": [ @@ -64,7 +64,7 @@ }, { "cell_type": "markdown", - "id": "f87d8f95", + "id": "f38b023c", "metadata": {}, "source": [ "First of all you will load the data and do some feature engineering on it." @@ -72,7 +72,7 @@ }, { "cell_type": "markdown", - "id": "66d04213", + "id": "23ad6b6b", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Loading the Data \n", @@ -90,7 +90,7 @@ { "cell_type": "code", "execution_count": null, - "id": "27f2b52e", + "id": "b78b9ee2", "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ { "cell_type": "code", "execution_count": null, - "id": "713a9568", + "id": "e0eb13d3", "metadata": {}, "outputs": [], "source": [ @@ -130,7 +130,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4ad0edf3", + "id": "ee728353", "metadata": {}, "outputs": [], "source": [ @@ -147,7 +147,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8efc0deb", + "id": "1970d127", "metadata": {}, "outputs": [], "source": [ @@ -157,7 +157,7 @@ }, { "cell_type": "markdown", - "id": "fe5105a1", + "id": "10cca817", "metadata": {}, "source": [ "---" @@ -165,7 +165,7 @@ }, { "cell_type": "markdown", - "id": "42b88055", + "id": "09c67522", "metadata": {}, "source": [ "## ๐Ÿ› ๏ธ Feature Engineering \n", @@ -179,7 +179,7 @@ }, { "cell_type": "markdown", - "id": "99b27bbd", + "id": "983ef759", "metadata": {}, "source": [ "Now you are ready to start by computing the distance between consecutive transactions, lets call it `loc_delta`.\n", @@ -189,7 +189,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6f7d5009", + "id": "6aaf551d-6495-420f-a878-d4be39e38add", "metadata": {}, "outputs": [], "source": [ @@ -202,123 +202,7 @@ }, { "cell_type": "markdown", - "id": "284eb2c1", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Great Expectations " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5b97f5f2", - "metadata": {}, - "outputs": [], - "source": [ - "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration\n", - "\n", - "# Convert the 'trans_df' DataFrame to a Great Expectations DataFrame\n", - "ge_trans_df = ge.from_pandas(trans_df)\n", - "\n", - "# Retrieve the expectation suite associated with the ge DataFrame\n", - "expectation_suite_transactions = ge_trans_df.get_expectation_suite()\n", - "\n", - "# Set the expectation suite name to \"transactions_suite\"\n", - "expectation_suite_transactions.expectation_suite_name = \"transactions_suite\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bbc8e914", - "metadata": {}, - "outputs": [], - "source": [ - "# Check binary fraud_label column to be in set [0,1]\n", - "expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_distinct_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"fraud_label\",\n", - " \"value_set\": [0, 1],\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Check amount column to be not negative\n", - "expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"amount\",\n", - " \"min_value\": 0.0,\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Loop through specified columns ('tid', 'datetime', 'cc_num') and add expectations for null values\n", - "for column in ['tid', 'datetime', 'cc_num']:\n", - " expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_null\",\n", - " kwargs={\n", - " \"column\": column,\n", - " \"mostly\": 0.0,\n", - " }\n", - " )\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d2331129", - "metadata": {}, - "outputs": [], - "source": [ - "# Convert the 'profiles_df' DataFrame to a Great Expectations DataFrame\n", - "ge_profiles_df = ge.from_pandas(profiles_df)\n", - "\n", - "# Retrieve the expectation suite associated with the ge DataFrame\n", - "expectation_suite_profiles = ge_profiles_df.get_expectation_suite()\n", - "\n", - "# Set the expectation suite name to \"profiles_suite\"\n", - "expectation_suite_profiles.expectation_suite_name = \"profiles_suite\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "51383029", - "metadata": {}, - "outputs": [], - "source": [ - "# Check binary gender column to be in set ['M', 'F']\n", - "expectation_suite_profiles.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_distinct_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"gender\",\n", - " \"value_set\": ['M', 'F'],\n", - " }\n", - " )\n", - ")\n", - "# Check for Nulls\n", - "expectation_suite_profiles.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_null\",\n", - " kwargs={\n", - " \"column\": 'cc_num',\n", - " \"mostly\": 0.0,\n", - " }\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "74e826bb", + "id": "1a7e126d", "metadata": {}, "source": [ "---" @@ -326,7 +210,7 @@ }, { "cell_type": "markdown", - "id": "cf53a5e9", + "id": "be723483", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -334,7 +218,7 @@ }, { "cell_type": "markdown", - "id": "ab3ac23b", + "id": "da57c80c", "metadata": {}, "source": [ "### ๐Ÿช„ Creating Feature Groups \n", @@ -349,7 +233,7 @@ { "cell_type": "code", "execution_count": null, - "id": "35f1e17e", + "id": "9ce63afd", "metadata": {}, "outputs": [], "source": [ @@ -363,7 +247,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7af46c39", + "id": "f0ec5ccf-056d-48fb-baa2-0bc6e0cdf0f8", "metadata": {}, "outputs": [], "source": [ @@ -372,7 +256,7 @@ }, { "cell_type": "markdown", - "id": "15b742ad", + "id": "704da9d2", "metadata": {}, "source": [ "To create a feature group you need to give it a name and specify a primary key. It is also good to provide a description of the contents of the feature group and a version number, if it is not defined it will automatically be incremented to `1`." @@ -381,7 +265,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3e926dc7", + "id": "f21eb1b5", "metadata": {}, "outputs": [], "source": [ @@ -393,13 +277,12 @@ " primary_key=['cc_num'],\n", " event_time='datetime',\n", " online_enabled=True,\n", - " expectation_suite=expectation_suite_transactions,\n", ")" ] }, { "cell_type": "markdown", - "id": "a16ae49d", + "id": "c339bd87", "metadata": {}, "source": [ "Here you have also set `online_enabled=True`, which enables low latency access to the data. A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", @@ -410,19 +293,18 @@ { "cell_type": "code", "execution_count": null, - "id": "9a366430", + "id": "6d4955fa", "metadata": {}, "outputs": [], "source": [ "# Insert data into feature group\n", - "trans_fg.insert(trans_df)\n", - "print('โœ… Done!')" + "trans_fg.insert(trans_df)" ] }, { "cell_type": "code", "execution_count": null, - "id": "3d7de1db", + "id": "5db676d1", "metadata": {}, "outputs": [], "source": [ @@ -444,7 +326,7 @@ }, { "cell_type": "markdown", - "id": "ffbe721c", + "id": "6a616b7f", "metadata": {}, "source": [ "You can move on and do the same thing for the profile and label feature groups." @@ -453,7 +335,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e8027f2d", + "id": "20af4024", "metadata": {}, "outputs": [], "source": [ @@ -464,17 +346,18 @@ " description=\"Credit card holder demographic data\",\n", " primary_key=['cc_num'],\n", " online_enabled=True,\n", - " expectation_suite=expectation_suite_profiles,\n", ")\n", "# Insert data into feature group\n", - "profile_fg.insert(profiles_df)\n", - "print('โœ… Done!')" + "profile_fg.insert(\n", + " profiles_df, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "ef348581", + "id": "aed0619e", "metadata": {}, "outputs": [], "source": [ @@ -490,7 +373,7 @@ }, { "cell_type": "markdown", - "id": "56611f28", + "id": "a45a9e20", "metadata": {}, "source": [ "Click on the hyperlink printed in the cell output above to inspect your feature group in the UI.\n", @@ -500,7 +383,7 @@ }, { "cell_type": "markdown", - "id": "36294255", + "id": "58652612-f30e-4556-b415-53ab940380bd", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] @@ -519,7 +402,7 @@ { "cell_type": "code", "execution_count": null, - "id": "53d1da04", + "id": "9c2a980b-4e05-4fb1-ab25-da593a215d0e", "metadata": {}, "outputs": [], "source": [ @@ -536,7 +419,7 @@ }, { "cell_type": "markdown", - "id": "896b26c3", + "id": "c4d777a4-02c4-443f-88d7-4822b2861faf", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] @@ -552,7 +435,7 @@ }, { "cell_type": "markdown", - "id": "c65cde95", + "id": "a4d232d6", "metadata": {}, "source": [ "## โญ๏ธ **Next:** Part 02 Training Pipeline \n", @@ -566,7 +449,7 @@ "hash": "e1ddeae6eefc765c17da80d38ea59b893ab18c0c0904077a035ef84cfe367f83" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -580,7 +463,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/fraud_online/2_fraud_online_training_pipeline.ipynb b/fraud_online/2_fraud_online_training_pipeline.ipynb index 91ec9b68..ee5e0c2f 100644 --- a/fraud_online/2_fraud_online_training_pipeline.ipynb +++ b/fraud_online/2_fraud_online_training_pipeline.ipynb @@ -117,7 +117,7 @@ ")\n", "\n", "# Select features for training dataset\n", - "selected_features = trans_fg.select_all().join(profile_online_fg.select_all())" + "query = trans_fg.select_all().join(profile_online_fg.select_all())" ] }, { @@ -126,8 +126,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "## uncomment this if you would like to view query results\n", + "#query.show(5)" ] }, { @@ -190,7 +190,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='transactions_fraud_online_fv',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=[\"fraud_label\"],\n", " transformation_functions=transformation_functions,\n", ")" @@ -324,10 +324,10 @@ "outputs": [], "source": [ "# Initialize an XGBoost classifier\n", - "model = xgb.XGBClassifier()\n", + "clf = xgb.XGBClassifier()\n", "\n", "# Train the classifier using the training features (X_train) and labels (y_train)\n", - "model.fit(X_train, y_train)" + "clf.fit(X_train.values, y_train)" ] }, { @@ -337,10 +337,10 @@ "outputs": [], "source": [ "# Predict the training set\n", - "y_pred_train = model.predict(X_train)\n", + "y_pred_train = clf.predict(X_train.values)\n", "\n", "# Predict the test set\n", - "y_pred_test = model.predict(X_test)" + "y_pred_test = clf.predict(X_test.values)" ] }, { @@ -450,10 +450,7 @@ "output_schema = Schema(y_train)\n", "\n", "# Create a ModelSchema using the input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", + "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", "\n", "# Convert the ModelSchema to a dictionary representation\n", "model_schema.to_dict()" @@ -482,7 +479,7 @@ " os.mkdir(model_dir)\n", "\n", "# Save the trained XGBoost model to a file within the model directory\n", - "joblib.dump(model, f\"{model_dir}/xgboost_fraud_online_model.pkl\")\n", + "joblib.dump(clf, f\"{model_dir}/xgboost_fraud_online_model.pkl\")\n", "\n", "# Save the confusion matrix plot to an image file within the model directory\n", "fig.savefig(f\"{model_dir}/confusion_matrix.png\")" @@ -568,10 +565,7 @@ " self.fs = fs_conn.get_feature_store()\n", " \n", " # Get feature view\n", - " self.fv = self.fs.get_feature_view(\n", - " name=\"transactions_fraud_online_fv\", \n", - " version=1,\n", - " )\n", + " self.fv = self.fs.get_feature_view(\"transactions_fraud_online_fv\", 1)\n", " \n", " # Initialize serving\n", " self.fv.init_serving(1)\n", @@ -745,7 +739,7 @@ "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -759,7 +753,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/fraud_online/3_fraud_online_inference_pipeline.ipynb b/fraud_online/3_fraud_online_inference_pipeline.ipynb index 1642b079..5b949709 100644 --- a/fraud_online/3_fraud_online_inference_pipeline.ipynb +++ b/fraud_online/3_fraud_online_inference_pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "d28eba60", + "id": "c958e52b", "metadata": {}, "source": [ "# **Hopsworks Feature Store** - Part 03: Inference Pipeline\n" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "f16367c8", + "id": "ce2fe8a8", "metadata": {}, "source": [ "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ed952ece", + "id": "39f83bc9", "metadata": {}, "outputs": [], "source": [ @@ -32,7 +32,7 @@ }, { "cell_type": "markdown", - "id": "e98e32ce", + "id": "87485ee0", "metadata": {}, "source": [ "## โš™๏ธ Feature Group Retrieval\n", @@ -42,7 +42,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d2a8475b", + "id": "e622d6b4", "metadata": {}, "outputs": [], "source": [ @@ -56,7 +56,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c37c5197", + "id": "98ffb788", "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "markdown", - "id": "6d5dade0", + "id": "e1dac8b6", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -78,7 +78,7 @@ { "cell_type": "code", "execution_count": null, - "id": "be66f4c8", + "id": "ca35a9f4", "metadata": {}, "outputs": [], "source": [ @@ -88,7 +88,7 @@ }, { "cell_type": "markdown", - "id": "903df073", + "id": "6f3589dc", "metadata": {}, "source": [ "## ๐Ÿš€ Fetch Deployment" @@ -97,7 +97,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4303ac82", + "id": "6ac8014f", "metadata": {}, "outputs": [], "source": [ @@ -116,7 +116,7 @@ }, { "cell_type": "markdown", - "id": "045ba7e4", + "id": "7764feba", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Predicting using deployment\n", @@ -130,7 +130,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42196023", + "id": "b0fd763a", "metadata": {}, "outputs": [], "source": [ @@ -142,7 +142,7 @@ { "cell_type": "code", "execution_count": null, - "id": "596f3241", + "id": "7b31447d", "metadata": {}, "outputs": [], "source": [ @@ -155,7 +155,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f260b7b6", + "id": "cf86d364", "metadata": {}, "outputs": [], "source": [ @@ -170,7 +170,7 @@ }, { "cell_type": "markdown", - "id": "0b02e2bd", + "id": "40fc846a", "metadata": {}, "source": [ "### Stop Deployment\n", @@ -180,7 +180,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b90b4c19", + "id": "230cc59f", "metadata": {}, "outputs": [], "source": [ @@ -190,7 +190,7 @@ }, { "cell_type": "markdown", - "id": "93360014", + "id": "69d76f0d", "metadata": {}, "source": [ "## ๐Ÿ‘พ StreamLit App\n", @@ -205,7 +205,7 @@ }, { "cell_type": "markdown", - "id": "8d98d2a0", + "id": "c14d7bd1", "metadata": {}, "source": [ "---\n", @@ -221,7 +221,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -235,7 +235,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/images/llm-pdfs-architecture.gif b/images/llm-pdfs-architecture.gif deleted file mode 100644 index 8be53c69..00000000 Binary files a/images/llm-pdfs-architecture.gif and /dev/null differ diff --git a/integrations/azuresql/AzureSQL_Example.ipynb b/integrations/azuresql/AzureSQL_Example.ipynb deleted file mode 100644 index 7b2cd25d..00000000 --- a/integrations/azuresql/AzureSQL_Example.ipynb +++ /dev/null @@ -1,376 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "c44ef758", - "metadata": {}, - "source": [ - "## Example: Connecting Hopsworks with AzureSQL\n", - "\n", - "### Instructions\n", - "\n", - "#### Retrieve the connection details from Azure Portal\n", - "\n", - "You can connect to AzureSQL from Hopsworks using the JDBC connection. You can see your JDBC connection details from the Azure Portal:\n", - "\n", - "
\n", - "\n", - "
\n", - "\n", - "#### Open the Firewall (Optional)\n", - "Depending on your AzureSQL firewall configuration, you might need to whitelist the Hopsworks IPs with the firewall.\n", - "\n", - "#### Create the storage connector in Hopsworks\n", - "\n", - "All the connection attributes in the screenshot above should be set as `arguments` in a storage connector of type `JDBC` in Hopsworks.\n", - "Additionally you should set an extra `argument` named `driver` with value `com.microsoft.sqlserver.jdbc.SQLServerDriver`\n", - "\n", - "Relevant Documentation: https://docs.hopsworks.ai/latest/user_guides/fs/storage_connector/creation/jdbc/\n", - "\n", - "
\n", - "\n", - "
\n", - "\n", - "#### Download the JDBC Driver JAR and upload it in your project in Hopsworks\n", - "\n", - "You can download the AzureSQL JAR from here: https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server.\n", - "The zip file contains the JAR for both Java 8 and Java 11. You should upload and use the Java 8 JAR \n", - "\n", - "### Use the connector:\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "eb09b335", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connection closed.\n", - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://snurran.hops.works/p/15480\n", - "Connected. Call `.close()` to terminate connection gracefully." - ] - } - ], - "source": [ - "import hopsworks\n", - "project = hopsworks.login()\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "f6266ba5", - "metadata": {}, - "source": [ - "#### Retrieve the Storage Connector using the APIs" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "01cd8d8e", - "metadata": {}, - "outputs": [], - "source": [ - "sc = fs.get_storage_connector(\"azure_sql\")" - ] - }, - { - "cell_type": "markdown", - "id": "e14ebb7c", - "metadata": {}, - "source": [ - "#### Example 1: External Feature Groups \n", - "\n", - "Use the storage connector to create an external feature group in Hopsworks.\n", - " \n", - "
\n", - "These APIs are only supported in a (Py)Spark Execution Engine\n", - "
\n", - "\n", - "Specify a Query (e.g. `SELECT * FROM test`) to execute every time the feature data is needed to create a new training dataset.\n", - "With external feature groups, the offline data stays in the external system and the query is executed every time.\n", - "\n", - "Relevant Documentation: https://docs.hopsworks.ai/latest/user_guides/fs/feature_group/create_external/" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "36b5688c", - "metadata": {}, - "outputs": [], - "source": [ - "external_feature_group = fs.create_external_feature_group(\n", - " name=\"profiles_upstream\",\n", - " version=1,\n", - " storage_connector = sc,\n", - " query=\"SELECT * FROM test\",\n", - " statistics_config={'histograms': True, 'correlations': True}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "6f26abf4", - "metadata": {}, - "outputs": [], - "source": [ - "external_feature_group.save()" - ] - }, - { - "cell_type": "markdown", - "id": "e80dc773", - "metadata": {}, - "source": [ - "#### Example 2: Derived Feature Groups \n", - "\n", - "Use the previously created external feature group as data source to create additional derived features:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "0e0bcd82", - "metadata": {}, - "outputs": [], - "source": [ - "external_feature_group = fs.get_external_feature_group(name=\"profiles_upstream\", version=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "c1df358d", - "metadata": {}, - "outputs": [], - "source": [ - "profiles_df = external_feature_group.read()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "e56f442d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------------+---+--------------------+----------+------------+-------+----------------+\n", - "| name|sex| mail| birthdate| city|country| cc_num|\n", - "+-------------+---+--------------------+----------+------------+-------+----------------+\n", - "|Tonya Gregory| F|sandratorres@hotm...|1976-01-16|Far Rockaway| US|4796807885357879|\n", - "| Lisa Gilbert| F| michael53@yahoo.com|1986-09-30| Encinitas| US|4529266636192966|\n", - "|Carolyn Meyer| F| anthony47@yahoo.com|2001-07-13| Canton| US|4922690008243953|\n", - "| Sara Morris| F| amylloyd@yahoo.com|1938-06-23| Greenpoint| US|4897369589533543|\n", - "| Paul Ashley| M|matthew97@hotmail...|1974-12-06| Rutland| US|4848518335893425|\n", - "+-------------+---+--------------------+----------+------------+-------+----------------+\n", - "only showing top 5 rows" - ] - } - ], - "source": [ - "profiles_df.show(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "02fd1936", - "metadata": {}, - "outputs": [], - "source": [ - "from pyspark.sql import functions as F\n", - "\n", - "derived_df = profiles_df.withColumn(\"age\", F.floor(F.datediff(F.current_date(), F.to_date(F.col('birthdate'), 'yyyy-mm-dd'))/365.25))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "097c0a51", - "metadata": {}, - "outputs": [], - "source": [ - "derived_fg = fs.get_or_create_feature_group(\n", - " name=\"profiles_derived\",\n", - " version=1,\n", - " primary_key=['mail'],\n", - " online_enabled=True,\n", - " parents=[external_feature_group],\n", - " statistics_config={'histograms': True, 'correlations': True}\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "512e9007", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://snurran.hops.works/p/15480/fs/15428/fg/16402\n", - "(None, None)" - ] - } - ], - "source": [ - "derived_fg.insert(derived_df)" - ] - }, - { - "cell_type": "markdown", - "id": "4ac72cae", - "metadata": {}, - "source": [ - "#### Example 3: Create a Training Dataset\n", - "\n", - "
\n", - "These APIs are also supported from a Python Engine:\n", - " \n", - " - https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_view_api/#create_train_test_split\n", - " \n", - " - https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_view_api/#create_training_data\n", - " \n", - " - https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_view_api/#create_train_validation_test_split\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "42bb554f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature view created successfully, explore it at \n", - "https://snurran.hops.works/p/15480/fs/15428/fv/azure_sql_demo/version/1" - ] - } - ], - "source": [ - "fv = fs.create_feature_view(\n", - " name=\"azure_sql_demo\",\n", - " version=1,\n", - " query=external_feature_group.select_all(),\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "ff1437f5", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1, None)\n", - "VersionWarning: Incremented version to `1`." - ] - } - ], - "source": [ - "fv.create_training_data()" - ] - }, - { - "cell_type": "markdown", - "id": "12bc3908", - "metadata": {}, - "source": [ - "#### Example 4: Use the Storage Connector to read the data in a Spark DataFrame\n", - "\n", - "You can use this option if you want to retrieve raw data to create features without having to create an external feature group" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "214f89f4", - "metadata": {}, - "outputs": [], - "source": [ - "df = sc.read(query=\"\"\"\n", - " SELECT *\n", - " FROM test\n", - " WHERE city = 'Canton'\n", - "\"\"\")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "c082a195", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+----------------+---+--------------------+----------+------+-------+----------------+\n", - "| name|sex| mail| birthdate| City|Country| cc_num|\n", - "+----------------+---+--------------------+----------+------+-------+----------------+\n", - "| Carolyn Meyer| F| anthony47@yahoo.com|2001-07-13|Canton| US|4922690008243953|\n", - "|Brandon Mitchell| M| ajackson@yahoo.com|1967-03-25|Canton| US|4928442302922211|\n", - "| John Sutton| M| qcalderon@gmail.com|1998-10-18|Canton| US|4459273780148699|\n", - "| Taylor Pitts| F|cohenrussell@gmai...|1989-10-08|Canton| US|4038150065544828|\n", - "| Larry Andrews| M| annette68@yahoo.com|1938-02-06|Canton| US|4421833463642311|\n", - "| Hector Cook| M| utucker@hotmail.com|1963-10-04|Canton| US|4069293169784098|\n", - "| Abigail Murray| F|rodriguezjulie@ho...|1971-02-01|Canton| US|4839891313999949|\n", - "|Jessica Gonzales| F|rphillips@hotmail...|1936-01-09|Canton| US|4179358160776166|\n", - "| Anthony Fowler| M| jason33@yahoo.com|1978-10-08|Canton| US|4752254878774038|\n", - "+----------------+---+--------------------+----------+------+-------+----------------+" - ] - } - ], - "source": [ - "df.show(10)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1553d8f9", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "PySpark", - "language": "python", - "name": "pysparkkernel" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "mimetype": "text/x-python", - "name": "pyspark", - "pygments_lexer": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/azuresql/images/AzureSQL_ConnDetails.png b/integrations/azuresql/images/AzureSQL_ConnDetails.png deleted file mode 100644 index 25ee33b0..00000000 Binary files a/integrations/azuresql/images/AzureSQL_ConnDetails.png and /dev/null differ diff --git a/integrations/azuresql/images/Hopsworks_JDBC_SC.png b/integrations/azuresql/images/Hopsworks_JDBC_SC.png deleted file mode 100644 index fa0292b5..00000000 Binary files a/integrations/azuresql/images/Hopsworks_JDBC_SC.png and /dev/null differ diff --git a/integrations/federated-offline-query/federated-offline-query.ipynb b/integrations/federated-offline-query/federated-offline-query.ipynb deleted file mode 100644 index 9967233c..00000000 --- a/integrations/federated-offline-query/federated-offline-query.ipynb +++ /dev/null @@ -1,372 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "85565c48-bda4-4004-abc7-369d32dbdeb0", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** \n", - "\n", - "# How to Query from Federated Data Sources with Hopsworks Feature Query Service\n", - "\n", - "The aim of this tutorial is to create a unified view of features regarding the 100 most popular GitHub projects joining public datasets on Snowflake ([GitHub Archive](https://app.snowflake.com/marketplace/listing/GZTSZAS2KJ3/cybersyn-inc-github-archive?search=software&categorySecondary=%5B%2213%22%5D)). BigQuery ([deps.dev](https://console.cloud.google.com/marketplace/product/bigquery-public-data/deps-dev?hl=en)) and Hopsworks. We will create feature groups for each of these sources and then combine them in a unified view exposing all features together regardless of their source. We then use the view to create training data for a model predicting the code coverage of Github projects.\n", - "\n", - "## Prerequisites:\n", - "* To follow this tutorial you can sign up for the [Hopsworks Free Tier](https://app.hopsworks.ai/) or use your own Hopsworks installation. You also need access to Snowflake and BigQuery, which offer free trials: [Snowflake Free Trial](https://signup.snowflake.com/?utm_source=google&utm_medium=paidsearch&utm_campaign=em-se-en-brand-trial-exact&utm_content=go-rsa-evg-ss-free-trial&utm_term=c-g-snowflake%20trial-e&_bt=591349674928&_bk=snowflake%20trial&_bm=e&_bn=g&_bg=129534995484&gclsrc=aw.ds&gad_source=1&gclid=EAIaIQobChMI0eeI-rPrggMVOQuiAx3WfgzdEAAYASAAEgIwS_D_BwE), [Google Cloud Free Tier](https://cloud.google.com/free?hl=en). If you choose to use your own Hopsworks, you should have an instance of Hopsworks version 3.5 or above and be the Data Owner/Author of a project. Furthermore, to use the Hopsworks Feature Query Service, the user has to configure the Hopsworks cluster to enable it. This can only be done during [cluster creation](https://docs.hopsworks.ai/3.5/setup_installation/common/arrow_flight_duckdb/)." - ] - }, - { - "cell_type": "markdown", - "id": "280254a3-6f01-4787-b43a-a25e5afe4751", - "metadata": {}, - "source": [ - "## Gain access to the dataset\n", - "\n", - "* Add the [GitHub Archive](https://app.snowflake.com/marketplace/listing/GZTSZAS2KJ3/cybersyn-inc-github-archive?search=software&categorySecondary=%5B%2213%22%5D) dataset to your Snowflake account\n", - "* The BigQuery dataset [deps.dev](https://console.cloud.google.com/marketplace/product/bigquery-public-data/deps-dev?hl=en) is readable by default" - ] - }, - { - "cell_type": "markdown", - "id": "ee79ba63-7f1a-4a38-802f-42a3f12c7cd9", - "metadata": {}, - "source": [ - "## Set up the Snowflake and BigQuery in Hopsworks\n", - "\n", - "Hopsworks manages the connection to Snowflake and BigQuery through storage connectors. Follow the [Storage Connector Guides](https://docs.hopsworks.ai/3.5/user_guides/fs/storage_connector/) to configure storage connectors for Snowflake and BigQuery and name them **Snowflake** and **BigQuery**." - ] - }, - { - "cell_type": "markdown", - "id": "b49ecda4-c24a-4886-b2c5-860e47524f40", - "metadata": {}, - "source": [ - "## Dependencies" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a34c0a5-a9e4-42ea-a996-c066a412f03e", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install hopsworks>=3.5.0rc1 hsfs>=3.5.0rc2 --quiet" - ] - }, - { - "cell_type": "markdown", - "id": "724e1f96-796c-441d-84e6-40f7c4c7fd9e", - "metadata": {}, - "source": [ - "## Connect to Hopsworks" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "910644c4-dcbd-4e09-b9a5-1b62c87e3b37", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "from hsfs.feature import Feature\n", - "\n", - "\n", - "project = hopsworks.login()\n", - "feature_store = project.get_feature_store()\n", - "\n", - "snowflake = feature_store.get_storage_connector(\"Snowflake\")\n", - "bigquery = feature_store.get_storage_connector(\"BigQuery\") " - ] - }, - { - "cell_type": "markdown", - "id": "8fa08122-9dba-4f5f-acb8-7ccbd01e5cfc", - "metadata": {}, - "source": [ - "## Create an External Feature Group on Snowflake\n", - "We now create an external feature group querying the [GitHub Archive](https://app.snowflake.com/marketplace/listing/GZTSZAS2KJ3/cybersyn-inc-github-archive?search=software&categorySecondary=%5B%2213%22%5D) dataset on Snowflake to return the 100 repositories that got the most stars during the 365 days before Nov 11, 2023. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "651a1bf2-70f4-4b8a-97f6-ce5d77061e98", - "metadata": {}, - "outputs": [], - "source": [ - "query_str = \"\"\"\n", - "WITH latest_repo_name AS (\n", - " SELECT repo_name,\n", - " repo_id\n", - " FROM cybersyn.github_repos\n", - " QUALIFY ROW_NUMBER() OVER (PARTITION BY repo_id ORDER BY first_seen DESC) = 1\n", - ")\n", - "SELECT LOWER(repo.repo_name) as repo_name,\n", - " SUM(stars.count) AS sum_stars\n", - "FROM cybersyn.github_stars AS stars\n", - "JOIN latest_repo_name AS repo\n", - " ON (repo.repo_id = stars.repo_id)\n", - "WHERE stars.date >= DATEADD('day', -365, DATE('2023-11-13'))\n", - "GROUP BY repo.repo_name, repo.repo_id\n", - "ORDER BY sum_stars DESC NULLS LAST\n", - "LIMIT 100;\"\"\"\n", - "\n", - "features = [\n", - " Feature(name=\"repo_name\",type=\"string\"),\n", - " Feature(name=\"sum_stars\",type=\"int\")\n", - "]\n", - "\n", - "github_most_starts_fg = feature_store.create_external_feature_group(\n", - " name=\"github_most_starts\",\n", - " version=1,\n", - " description=\"The Github repos that got the most stars last year\",\n", - " primary_key=['repo_name'],\n", - " query=query_str,\n", - " storage_connector=snowflake,\n", - " features=features\n", - ")\n", - "\n", - "github_most_starts_fg.save()" - ] - }, - { - "cell_type": "markdown", - "id": "daeb0533-3fca-4871-a1c2-7f533df71155", - "metadata": {}, - "source": [ - "After creating the external feature group on Snowflake, we are now able to query it in our notebook utilizing the Hopsworks Feature Query Service:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "690dec03-ef8b-4534-b2b9-52349da26760", - "metadata": {}, - "outputs": [], - "source": [ - "github_most_starts_df = github_most_starts_fg.read()\n", - "github_most_starts_df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "4691408a-1489-4b84-bf55-40ceb0c7b4c1", - "metadata": {}, - "source": [ - "## Create an External Feature Group on BigQuery\n", - "\n", - "We now create an external feature group on BigQuery containing information about the licenses, number of forks and open issues from the deps.dev dataset. To limit the cost, we limit the content to the 100 repositories from the github_most_starts feature group:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "498e7ada-3194-4f9a-b841-35268e3fe233", - "metadata": {}, - "outputs": [], - "source": [ - "repos_quoted = github_most_starts_df['repo_name'].map(lambda r: f\"'{r}'\").tolist()\n", - "repos_quoted[0:5]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "56d28c47-3abf-449b-bbfe-3e7fd71b7623", - "metadata": {}, - "outputs": [], - "source": [ - "query_str = f\"\"\"\n", - "SELECT\n", - " Name as repo_name, Licenses as licenses, ForksCount as forks_count, OpenIssuesCount as open_issues_count\n", - "FROM\n", - " `bigquery-public-data.deps_dev_v1.Projects`\n", - "WHERE\n", - " TIMESTAMP_TRUNC(SnapshotAt, DAY) = TIMESTAMP(\"2023-11-13\")\n", - " AND\n", - " Type = 'GITHUB'\n", - " AND Name IN ({','.join(repos_quoted)})\n", - " \"\"\"\n", - "\n", - "features = [\n", - " Feature(name=\"repo_name\",type=\"string\"),\n", - " Feature(name=\"licenses\",type=\"string\"),\n", - " Feature(name=\"forks_count\",type=\"int\"),\n", - " Feature(name=\"open_issues_count\",type=\"int\")\n", - "]\n", - "\n", - "github_info_fg = feature_store.create_external_feature_group(\n", - " name=\"github_info\",\n", - " version=1,\n", - " description=\"Information about Github project licenses, forks count and open issues count\",\n", - " primary_key=['repo_name'],\n", - " query=query_str,\n", - " storage_connector=bigquery,\n", - " features=features\n", - ")\n", - "\n", - "github_info_fg.save()" - ] - }, - { - "cell_type": "markdown", - "id": "bad43d67-2ded-4ed0-a512-0efaac2c3dda", - "metadata": {}, - "source": [ - "After creating the external feature group on BigQuery, we can now query it in our notebook utilizing the Hopsworks Feature Query Service:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "11bb6c69-ffbf-4149-94c9-5e8caf9f17eb", - "metadata": {}, - "outputs": [], - "source": [ - "github_info_df = github_info_fg.read()\n", - "github_info_df.head()" - ] - }, - { - "cell_type": "markdown", - "id": "c964cbfa-2b77-4a32-bce0-58a3f50551fa", - "metadata": {}, - "source": [ - "## Create a Feature Group on Hopsworks\n", - "\n", - "To show that the data from the datasets on Snowflake and BigQuery can be queried together with data on Hopsworks, we now make up a dataset for the code coverage of repositories on GitHub and put it into a feature group on Hopsworks:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ab843190-3ed9-4a88-9ee7-f56c4553e72d", - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "import pandas as pd\n", - "\n", - "repos = github_most_starts_df['repo_name'].tolist()\n", - "\n", - "numbers = [random.uniform(0, 1) for _ in range(len(repos))]\n", - "coverage_df = pd.DataFrame(list(zip(repos, numbers)),\n", - " columns =['repo_name', 'code_coverage'])\n", - "\n", - "coverage_fg = feature_store.create_feature_group(name=\"github_coverage\",\n", - " version=1,\n", - " primary_key=['repo_name'],\n", - ")\n", - "\n", - "coverage_fg.insert(coverage_df)" - ] - }, - { - "cell_type": "markdown", - "id": "53fdd694-c9d3-440f-9236-f66126cf0f20", - "metadata": {}, - "source": [ - "After creating the feature group, we can look at it:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f94df533-cfb2-41e4-bfd4-82843ae93fc4", - "metadata": {}, - "outputs": [], - "source": [ - "coverage_fg.select_all().show(5)" - ] - }, - { - "cell_type": "markdown", - "id": "4b94282d-0540-44a4-9d05-79f7b5e4abea", - "metadata": {}, - "source": [ - "## Create a Feature View joining all Feature Groups together\n", - "\n", - "We now join the two external feature groups on Snowflake and BigQuery with the feature group in Hopsworks into a single feature view and mark the feature code_coverage as our label to be able to create training data in the next step:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0b686a1e-0e33-4d05-83d2-ae74f7f6f967", - "metadata": {}, - "outputs": [], - "source": [ - "query = github_most_starts_fg.select_all().join(github_info_fg.select_all(), join_type='left').join(coverage_fg.select_all(), join_type='left')\n", - "\n", - "feature_view = feature_store.create_feature_view(\n", - " name='github_all_info',\n", - " version=1,\n", - " query=query,\n", - " labels=['code_coverage']\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "db931132-f36d-4bea-8797-ddfceb352bf6", - "metadata": {}, - "source": [ - "We can query the feature view in the same way we query any other feature view, regardless of the data being spread across Snowflake, BigQuery and Hopsworks. The data will be queried directly from its source and joined using the Hopsworks Feature Query Service before being returned to Python:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a6785a74-cd20-4f1d-a606-d77069e265ae", - "metadata": {}, - "outputs": [], - "source": [ - "data = feature_view.get_batch_data()\n", - "data.head()" - ] - }, - { - "cell_type": "markdown", - "id": "8b06211c-6b57-4a7e-bc08-1993f4fbd9a0", - "metadata": {}, - "source": [ - "## Create the training data from the Feature View\n", - "\n", - "Finally, we can use the feature view to create training data that could be used to train a model predicting the code coverage of the GitHub repositories:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0c11895a-ba06-4225-925d-c051e0186a6c", - "metadata": {}, - "outputs": [], - "source": [ - "X_train, X_test, Y_train, Y_test = feature_view.train_test_split(test_size=0.2)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.18" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/great_expectations/fraud_batch_data_validation.ipynb b/integrations/great_expectations/fraud_batch_data_validation.ipynb index 01fd7a04..f5918e29 100644 --- a/integrations/great_expectations/fraud_batch_data_validation.ipynb +++ b/integrations/great_expectations/fraud_batch_data_validation.ipynb @@ -137,7 +137,7 @@ "\n", "# Compute age at transaction.\n", "age_df = trans_df.merge(profiles_df, on=\"cc_num\", how=\"left\")\n", - "trans_df[\"age_at_transaction\"] = (age_df[\"datetime\"] - age_df[\"birthdate\"]) / np.timedelta64(365, \"D\")\n", + "trans_df[\"age_at_transaction\"] = (age_df[\"datetime\"] - age_df[\"birthdate\"]) / np.timedelta64(1, \"Y\")\n", "\n", "# Convert date time object to unix epoch in milliseconds\n", "trans_df.datetime = trans_df.datetime.values.astype(np.int64) // 10 ** 6" diff --git a/integrations/langchain/news-search-langchain.ipynb b/integrations/langchain/news-search-langchain.ipynb deleted file mode 100644 index da15d044..00000000 --- a/integrations/langchain/news-search-langchain.ipynb +++ /dev/null @@ -1,248 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "685e5fb7", - "metadata": {}, - "source": [ - "# News search using Hopsworks and Langchain" - ] - }, - { - "cell_type": "markdown", - "id": "541a9ee1", - "metadata": {}, - "source": [ - "In this tutorial, you will learn how to create a news search bot which can answer users' question about news using Opensearch in Hopsworks with Langchain. Concretely, you will create a RAG (Retrieval-Augmented Generation) application which searches news matching users' questions, and answers the question using a LLM with the retrieved news as the context.\n", - "The steps include:\n", - "1. [Ingest news data to Hopsworks](https://github.com/logicalclocks/hopsworks-tutorials/blob/master/api_examples/hsfs/knn_search/news-search-knn.ipynb)\n", - "2. Setup a `vectorstores` in Langchain using Opensearch in Hopsworks\n", - "3. Create a LLM using model from huggingface\n", - "4. Create a RAG application using `RetrievalQA` chain in Langchain" - ] - }, - { - "cell_type": "markdown", - "id": "014fe398-8337-44d7-a71a-334b884d5ebf", - "metadata": {}, - "source": [ - "## Prerequisite" - ] - }, - { - "cell_type": "markdown", - "id": "ba83a905-3944-4bf1-b4d7-43d4336f0beb", - "metadata": {}, - "source": [ - "You need to run this [notebook](https://github.com/logicalclocks/hopsworks-tutorials/blob/master/api_examples/hsfs/knn_search/news-search-knn.ipynb) to ingest news data to Hopsworks." - ] - }, - { - "cell_type": "markdown", - "id": "b4621965", - "metadata": {}, - "source": [ - "## Setup a vector store in Langchain using Opensearch in Hopsworks" - ] - }, - { - "cell_type": "markdown", - "id": "5c55b995", - "metadata": {}, - "source": [ - "First, you need to get the opensearch configuration, and the index name in the vector store from Hopsworks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "942caffc", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "from hsfs.core.opensearch_api import OpenSearchApi\n", - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()\n", - "\n", - "opensearch_config = OpenSearchApi(project_id=proj.id, project_name=proj.name).get_default_py_config()\n", - "opensearch_config[\"opensearch_url\"] = f'{opensearch_config[\"hosts\"][0][\"host\"]}:{opensearch_config[\"hosts\"][0][\"port\"]}'\n", - "opensearch_config.pop(\"hosts\")\n", - "\n", - "# `news_fg.embedding_index.index_name` return the index name\n", - "news_fg = fs.get_feature_group(\n", - " name=\"news_fg\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "5cf29f55", - "metadata": {}, - "source": [ - "Then, you can setup the vector store in Langchain using the configuration, and the embedding model used for generating the embedding in the feature group." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "efd8c222", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain_community.vectorstores import OpenSearchVectorSearch\n", - "from langchain.embeddings import SentenceTransformerEmbeddings\n", - "\n", - "embeddings = SentenceTransformerEmbeddings(model_name=\"all-MiniLM-L6-v2\")\n", - "\n", - "docsearch = OpenSearchVectorSearch(\n", - " index_name=news_fg.embedding_index.index_name,\n", - " embedding_function=embeddings,\n", - " **opensearch_config\n", - ")\n" - ] - }, - { - "cell_type": "markdown", - "id": "40fd60d5", - "metadata": {}, - "source": [ - "## Create a LLM using model from huggingface" - ] - }, - { - "cell_type": "markdown", - "id": "b7016353", - "metadata": {}, - "source": [ - "You need to load a llm model from huggingface. You can pick any model on huggingface. To accelerate the inference, you can use load the model to gpu if available." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "401e21c4", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain.llms import HuggingFacePipeline\n", - "from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline\n", - "import torch\n", - "\n", - "import torch\n", - "# Check for GPU availability and set device\n", - "if torch.cuda.is_available():\n", - " device = torch.device(\"cuda\")\n", - " print(\"GPU is available!\")\n", - "else:\n", - " device = torch.device(\"cpu\")\n", - " print(\"GPU is not available, using CPU.\")\n", - "\n", - " \n", - "# Load the Llama2 chat model (replace with your preferred model name)\n", - "model_name = \"TinyLlama/TinyLlama-1.1B-Chat-v1.0\" \n", - "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", - "model = AutoModelForCausalLM.from_pretrained(model_name).to(device)\n", - "pipe = pipeline(\"text-generation\", model=model, tokenizer=tokenizer, torch_dtype=torch.bfloat16, device=device)\n", - "llm = HuggingFacePipeline(pipeline=pipe)" - ] - }, - { - "cell_type": "markdown", - "id": "c4da0be7", - "metadata": {}, - "source": [ - "# Create a RAG application using `RetrievalQA` chain in Langchain" - ] - }, - { - "cell_type": "markdown", - "id": "dabfbf85", - "metadata": {}, - "source": [ - "Lastly, you need to create a prompt for the llm, and create a `RetrievalQA` chain in Langchain. You need to provide `vector_field`, and `text_field` which are feature names in the `news_fg` feature group. You can also modify the number of results returned from the vector store by adjusting `k`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3b902254", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain import PromptTemplate\n", - "from langchain.chains import RetrievalQA\n", - "\n", - "# Prompt\n", - "template = \"\"\"\n", - "<|system|>\n", - "Use the following pieces of context to answer the question from user. \n", - "If you don't know the answer, just say that you don't know, don't try to make up an answer.\n", - "context:\n", - "{context} \n", - "<|user|>\n", - "{question}\n", - "<|assistant|>\n", - "\"\"\"\n", - "QA_CHAIN_PROMPT = PromptTemplate(\n", - " input_variables=[\"context\", \"question\"],\n", - " template=template,\n", - ")\n", - "\n", - "qa_chain = RetrievalQA.from_chain_type(\n", - " llm,\n", - " retriever=docsearch.as_retriever(\n", - " search_kwargs={\n", - " \"vector_field\": news_fg.embedding_body.name, \n", - " \"text_field\": news_fg.article.name, \n", - " \"k\": 1}\n", - " ),\n", - " chain_type_kwargs={\"prompt\": QA_CHAIN_PROMPT},\n", - ")\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8b9f317f", - "metadata": {}, - "outputs": [], - "source": [ - "question = \"any news about France?\"\n", - "result = qa_chain({\"query\": question})\n", - "print(result[\"result\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "828fc9cd", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/langchain/requirements.txt b/integrations/langchain/requirements.txt deleted file mode 100644 index 2d0a080d..00000000 --- a/integrations/langchain/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -hsfs==3.7.0rc5 -hopsworks==3.7.0rc1 -sentence_transformers -torch -langchain \ No newline at end of file diff --git a/integrations/mage_ai/README.md b/integrations/mage_ai/README.md deleted file mode 100644 index fe76f184..00000000 --- a/integrations/mage_ai/README.md +++ /dev/null @@ -1,113 +0,0 @@ -# ๐Ÿง™๐Ÿปโ€โ™‚๏ธ Machine Learning Pipelines with Mage.ai and Hopsworks - -Mage.ai is an open-source platform for orchestrating data and machine learning pipelines. Hopsworks is a ML infrastructure platform. You can run your feature, training, and inference pipelines on Mage.ai and get the benefits of visualization, debugging, and so on. - - -## โฌ‡๏ธ Installation - - -Create a new Python environment for this tutorial. - -Open the terminal and pass the next command: - -``` -git clone https://github.com/logicalclocks/hopsworks-tutorials.git -``` - -Go to the project folder. - -``` -cd hopsworks-tutorials/integrations/mage_ai -``` - -Install the mage-ai library: - -``` -pip install mage-ai -``` - -Install the requirements.txt - -``` -pip install -r requirements.txt -``` - -To launch the Mage tool run the next command: - -``` -mage start mage_tutorial -``` - -Open http://localhost:6789 in your browser. - - -## โš™๏ธ API Key Setup - - -Navigate to the Pipelines section and open the hopsworks_mage_quickstart pipeline. -Here you can find a Pipeline Tree which shows you the block flow. - -![tree](images/tree.png) - -Go to the Edit Pipeline section. - -![edit](images/edit.png) - - -The next step is to add the Hopsworks Api key to the secrets. Open the Secrets section and press the **+New** button. - -![secrets](images/secrets.png) - - -- *Secret Name: HOPSWORKS_API_KEY* - -- *Secret Value: {YOUR_HOPSWORKS_API_KEY}* - -![secret](images/secret.png) - -Press Enter to save the secret. - -![ready_secret](images/ready_secret.png) - -If you are running your own Hopsworks cluster, you will also have to add the following secrets, where the secret values should be the IP address or FQDN of your Hopsworks cluster and the name of the project in that Hopsworks cluster, respectively: - -- HOPSWORKS_HOST - -- HOPSWORKS_PROJECT - -Now you are ready to run Pipeline blocks. - - -## ๐Ÿš€ Launch - -If you want to run all blocks at once, press on the last block on the blocks tree. Then press **Execute with all upstream blocks**. - -![execute](images/execute.png) - - -If you want to run every block step by step, press the next button on the required block: - -![run](images/run.png) - -At the bottom of a block you will see the block output. - -![output](images/output.png) - - -After running **transactions_fg** and **window_aggs_fg** blocks, you will see **transactions** and **transactions_4h_aggs** Feature Groups in the Hopsworks UI. - -![fg](images/fg.png) - -![fg_data](images/fg_data.png) - -The **model_building** block trains and saves the trained model into the Hopsworks Model Registry. - -![model_registry](images/model_registry.png) - -After running the **model_deployment** block, you can find your deployed model in the Hopsworks Deployments. - -![deployment](images/deployment.png) - -The **deployment_inference** block shows how to make online inference using your deployed model. - -![inference](images/inference.png) diff --git a/integrations/mage_ai/functions.py b/integrations/mage_ai/functions.py deleted file mode 100644 index 63b1411a..00000000 --- a/integrations/mage_ai/functions.py +++ /dev/null @@ -1,20 +0,0 @@ -import numpy as np - -# Define a function to compute Haversine distance between consecutive coordinates -def haversine(long, lat): - """Compute Haversine distance between each consecutive coordinate in (long, lat).""" - - # Shift the longitude and latitude columns to get consecutive values - long_shifted = long.shift() - lat_shifted = lat.shift() - - # Calculate the differences in longitude and latitude - long_diff = long_shifted - long - lat_diff = lat_shifted - lat - - # Haversine formula to compute distance - a = np.sin(lat_diff/2.0)**2 - b = np.cos(lat) * np.cos(lat_shifted) * np.sin(long_diff/2.0)**2 - c = 2*np.arcsin(np.sqrt(a + b)) - - return c \ No newline at end of file diff --git a/integrations/mage_ai/images/add_secret.png b/integrations/mage_ai/images/add_secret.png deleted file mode 100644 index 8e089f56..00000000 Binary files a/integrations/mage_ai/images/add_secret.png and /dev/null differ diff --git a/integrations/mage_ai/images/deployment.png b/integrations/mage_ai/images/deployment.png deleted file mode 100644 index e74badef..00000000 Binary files a/integrations/mage_ai/images/deployment.png and /dev/null differ diff --git a/integrations/mage_ai/images/edit.png b/integrations/mage_ai/images/edit.png deleted file mode 100644 index a454450c..00000000 Binary files a/integrations/mage_ai/images/edit.png and /dev/null differ diff --git a/integrations/mage_ai/images/execute.png b/integrations/mage_ai/images/execute.png deleted file mode 100644 index 8df3a328..00000000 Binary files a/integrations/mage_ai/images/execute.png and /dev/null differ diff --git a/integrations/mage_ai/images/fg.png b/integrations/mage_ai/images/fg.png deleted file mode 100644 index 60194161..00000000 Binary files a/integrations/mage_ai/images/fg.png and /dev/null differ diff --git a/integrations/mage_ai/images/fg_data.png b/integrations/mage_ai/images/fg_data.png deleted file mode 100644 index e16780d6..00000000 Binary files a/integrations/mage_ai/images/fg_data.png and /dev/null differ diff --git a/integrations/mage_ai/images/inference.png b/integrations/mage_ai/images/inference.png deleted file mode 100644 index 51a96a0e..00000000 Binary files a/integrations/mage_ai/images/inference.png and /dev/null differ diff --git a/integrations/mage_ai/images/model_registry.png b/integrations/mage_ai/images/model_registry.png deleted file mode 100644 index 25db6d92..00000000 Binary files a/integrations/mage_ai/images/model_registry.png and /dev/null differ diff --git a/integrations/mage_ai/images/output.png b/integrations/mage_ai/images/output.png deleted file mode 100644 index d484fc10..00000000 Binary files a/integrations/mage_ai/images/output.png and /dev/null differ diff --git a/integrations/mage_ai/images/ready_secret.png b/integrations/mage_ai/images/ready_secret.png deleted file mode 100644 index 19e25d4e..00000000 Binary files a/integrations/mage_ai/images/ready_secret.png and /dev/null differ diff --git a/integrations/mage_ai/images/run.png b/integrations/mage_ai/images/run.png deleted file mode 100644 index 5e4e9042..00000000 Binary files a/integrations/mage_ai/images/run.png and /dev/null differ diff --git a/integrations/mage_ai/images/secret.png b/integrations/mage_ai/images/secret.png deleted file mode 100644 index e11dce4d..00000000 Binary files a/integrations/mage_ai/images/secret.png and /dev/null differ diff --git a/integrations/mage_ai/images/secrets.png b/integrations/mage_ai/images/secrets.png deleted file mode 100644 index 35229ea7..00000000 Binary files a/integrations/mage_ai/images/secrets.png and /dev/null differ diff --git a/integrations/mage_ai/images/tree.png b/integrations/mage_ai/images/tree.png deleted file mode 100644 index 883dc983..00000000 Binary files a/integrations/mage_ai/images/tree.png and /dev/null differ diff --git a/integrations/mage_ai/mage_tutorial/.gitignore b/integrations/mage_ai/mage_tutorial/.gitignore deleted file mode 100755 index 8b3e82f6..00000000 --- a/integrations/mage_ai/mage_tutorial/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -.DS_Store -.file_versions -.gitkeep -.log -.logs/ -.mage_temp_profiles -.preferences.yaml -.variables/ -__pycache__/ -docker-compose.override.yml -logs/ -mage-ai.db -mage_data/ -secrets/ diff --git a/integrations/mage_ai/mage_tutorial/.ssh_tunnel/aws_emr.json b/integrations/mage_ai/mage_tutorial/.ssh_tunnel/aws_emr.json deleted file mode 100644 index 9e26dfee..00000000 --- a/integrations/mage_ai/mage_tutorial/.ssh_tunnel/aws_emr.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/integrations/mage_ai/mage_tutorial/custom/transactions_feature_view.py b/integrations/mage_ai/mage_tutorial/custom/transactions_feature_view.py deleted file mode 100644 index 9bb1da66..00000000 --- a/integrations/mage_ai/mage_tutorial/custom/transactions_feature_view.py +++ /dev/null @@ -1,66 +0,0 @@ -import hopsworks -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'custom' not in globals(): - from mage_ai.data_preparation.decorators import custom -if 'test' not in globals(): - from mage_ai.data_preparation.decorators import test - - -@custom -def transform_custom(*args, **kwargs): - """ - args: The output from any upstream parent blocks (if applicable) - - Returns: - Anything (e.g. data frame, dictionary, array, int, str, etc.) - """ - TEST_SIZE = 0.2 - # Specify the window length as "4h" - window_len = "4h" - - # Specify your data exporting logic here - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - fs = project.get_feature_store() - - trans_fg = fs.get_feature_group( - name="transactions", - version=1, - ) - - window_aggs_fg = fs.get_feature_group( - name=f"transactions_{window_len}_aggs", - version=1, - ) - - # Select features for training data. - query = trans_fg.select(["fraud_label", "category", "amount", "age_at_transaction", "days_until_card_expires", "loc_delta"])\ - .join(window_aggs_fg.select_except(["cc_num"])) - - # Load transformation functions. - label_encoder = fs.get_transformation_function(name="label_encoder") - - # Map features to transformations. - transformation_functions = { - "category": label_encoder, - } - - # Get or create the 'transactions_view' feature view - feature_view = fs.get_or_create_feature_view( - name='transactions_view', - version=1, - query=query, - labels=["fraud_label"], - transformation_functions=transformation_functions, - ) - - return print('โœ… Done') - -@test -def test_output(output, *args) -> None: - """ - Template code for testing the output of the block. - """ - assert output is not None, 'The output is undefined' diff --git a/integrations/mage_ai/mage_tutorial/data_exporters/deployment_inference.py b/integrations/mage_ai/mage_tutorial/data_exporters/deployment_inference.py deleted file mode 100644 index 5bcecbac..00000000 --- a/integrations/mage_ai/mage_tutorial/data_exporters/deployment_inference.py +++ /dev/null @@ -1,38 +0,0 @@ -import hopsworks -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'data_exporter' not in globals(): - from mage_ai.data_preparation.decorators import data_exporter - - -@data_exporter -def inference(data, *args, **kwargs): - """ - Deployment inference. - - Args: - data: The output from the upstream parent block - args: The output from any additional upstream blocks (if applicable) - """ - # Specify your data exporting logic here - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - # get Hopsworks Model Serving - ms = project.get_model_serving() - - # get deployment object - deployment = ms.get_deployment("fraud") - - # Start the deployment and wait for it to be running, with a maximum waiting time of 480 seconds - deployment.start(await_running=480) - - # Make predictions using the deployed model - predictions = deployment.predict( - inputs=[4700702588013561], - ) - print(f'โ›ณ๏ธ Prediction: {predictions}') - - deployment.stop() - - print('๐Ÿ”ฎ Deployment is stopped!') diff --git a/integrations/mage_ai/mage_tutorial/data_exporters/model_building.py b/integrations/mage_ai/mage_tutorial/data_exporters/model_building.py deleted file mode 100644 index fd0eec0e..00000000 --- a/integrations/mage_ai/mage_tutorial/data_exporters/model_building.py +++ /dev/null @@ -1,151 +0,0 @@ -import hopsworks -import xgboost as xgb -import pandas as pd -import os -from sklearn.metrics import confusion_matrix -from sklearn.metrics import f1_score -from matplotlib import pyplot -import seaborn as sns -import joblib -from hsml.schema import Schema -from hsml.model_schema import ModelSchema -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'data_exporter' not in globals(): - from mage_ai.data_preparation.decorators import data_exporter - - -def prepare_training_data(X_train, X_test, y_train, y_test): - # Sort the training features DataFrame 'X_train' based on the 'datetime' column - X_train = X_train.sort_values("datetime") - - # Reindex the target variable 'y_train' to match the sorted order of 'X_train' index - y_train = y_train.reindex(X_train.index) - - # Sort the test features DataFrame 'X_test' based on the 'datetime' column - X_test = X_test.sort_values("datetime") - - # Reindex the target variable 'y_test' to match the sorted order of 'X_test' index - y_test = y_test.reindex(X_test.index) - - # Drop the 'datetime' column from the training features DataFrame 'X_train' - X_train.drop(["datetime"], axis=1, inplace=True) - - # Drop the 'datetime' column from the test features DataFrame 'X_test' - X_test.drop(["datetime"], axis=1, inplace=True) - - return X_train, X_test, y_train, y_test - - -@data_exporter -def train_model(data, *args, **kwargs): - """ - Train an XGBoost classifier for fraud detection and save it in the Hopsworks Model Registry. - - Args: - data: The output from the upstream parent block - args: The output from any additional upstream blocks (if applicable) - """ - TEST_SIZE = 0.2 - - # Specify your data exporting logic here - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - fs = project.get_feature_store() - - # Get the 'transactions_view' feature view - feature_view = fs.get_feature_view( - name='transactions_view', - version=1, - ) - - X_train, X_test, y_train, y_test = feature_view.train_test_split( - description='transactions fraud training dataset', - test_size=TEST_SIZE, - ) - - X_train, X_test, y_train, y_test = prepare_training_data( - X_train, - X_test, - y_train, - y_test, - ) - X_train.to_csv(f'X_train.csv') - - # Create an XGBoost classifier - model = xgb.XGBClassifier() - - # Fit XGBoost classifier to the training data - model.fit(X_train, y_train) - - # Predict the training data using the trained classifier - y_pred_train = model.predict(X_train) - - # Predict the test data using the trained classifier - y_pred_test = model.predict(X_test) - - # Compute f1 score - metrics = { - "f1_score": f1_score(y_test, y_pred_test, average='macro') - } - - # Calculate and print the confusion matrix for the test predictions - results = confusion_matrix(y_test, y_pred_test) - print(results) - - # Create a DataFrame for the confusion matrix results - df_cm = pd.DataFrame( - results, - ['True Normal', 'True Fraud'], - ['Pred Normal', 'Pred Fraud'], - ) - - # Create a heatmap using seaborn with annotations - cm = sns.heatmap(df_cm, annot=True) - - # Get the figure and display it - fig = cm.get_figure() - - # Create a Schema for the input features using the values of X_train - input_schema = Schema(X_train.values) - - # Create a Schema for the output using y_train - output_schema = Schema(y_train) - - # Create a ModelSchema using the defined input and output schemas - model_schema = ModelSchema( - input_schema=input_schema, - output_schema=output_schema, - ) - - # Convert the model schema to a dictionary for inspection - model_schema.to_dict() - - # Specify the directory name for saving the model and related artifacts - model_dir = "quickstart_fraud_model" - - # Check if the directory already exists; if not, create it - if not os.path.isdir(model_dir): - os.mkdir(model_dir) - - # Save the trained XGBoost classifier to a joblib file in the specified directory - joblib.dump(model, model_dir + '/xgboost_model.pkl') - - # Save the confusion matrix heatmap figure to an image file in the specified directory - fig.savefig(model_dir + "/confusion_matrix.png") - - # Get the model registry - mr = project.get_model_registry() - - # Create a Python model named "fraud" in the model registry - fraud_model = mr.python.create_model( - name="fraud", - metrics=metrics, # Specify the metrics used to evaluate the model - model_schema=model_schema, # Use the previously defined model schema - input_example=[4700702588013561], # Provide an input example for testing deployments - description="Quickstart Fraud Predictor", # Add a description for the model - ) - - # Save the model to the specified directory - fraud_model.save(model_dir) \ No newline at end of file diff --git a/integrations/mage_ai/mage_tutorial/data_exporters/model_deployment.py b/integrations/mage_ai/mage_tutorial/data_exporters/model_deployment.py deleted file mode 100644 index 5be15fc1..00000000 --- a/integrations/mage_ai/mage_tutorial/data_exporters/model_deployment.py +++ /dev/null @@ -1,58 +0,0 @@ -import hopsworks -import os -import time -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'data_exporter' not in globals(): - from mage_ai.data_preparation.decorators import data_exporter - - -@data_exporter -def deploy_model(data, *args, **kwargs): - """ - Deploys the trained XGBoost classifier. - - Args: - data: The output from the upstream parent block - args: The output from any additional upstream blocks (if applicable) - """ - # Specify your data exporting logic here - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - fs = project.get_feature_store() - # Get the model registry - mr = project.get_model_registry() - - # Get model object - fraud_model = mr.get_model( - name="fraud", - version=1, - ) - print('Model is here!') - - # Get the dataset API from the project - dataset_api = project.get_dataset_api() - - # Specify the file to upload ("predict_example.py") to the "Models" directory, and allow overwriting - uploaded_file_path = dataset_api.upload( - "predictor_script.py", - "Models", - overwrite=True, - ) - - # Construct the full path to the uploaded predictor script - predictor_script_path = os.path.join( - "/Projects", - project.name, - uploaded_file_path, - ) - - # Deploy the fraud model - deployment = fraud_model.deploy( - name="fraud", # Specify the deployment name - script_file=predictor_script_path, # Provide the path to the predictor script - ) - - print("Deployment is warming up...") - time.sleep(45) diff --git a/integrations/mage_ai/mage_tutorial/data_exporters/transactions_feature_view.py b/integrations/mage_ai/mage_tutorial/data_exporters/transactions_feature_view.py deleted file mode 100644 index a8c61b6e..00000000 --- a/integrations/mage_ai/mage_tutorial/data_exporters/transactions_feature_view.py +++ /dev/null @@ -1,55 +0,0 @@ -import hopsworks -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'data_exporter' not in globals(): - from mage_ai.data_preparation.decorators import data_exporter - - -@data_exporter -def create_feature_view(data, *args, **kwargs): - """ - Selects features for the training dataset and creates the Feature View. - - Args: - data: The output from the upstream parent block - args: The output from any additional upstream blocks (if applicable) - """ - # Specify the window length as "4h" - window_len = "4h" - - # Specify your data exporting logic here - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - fs = project.get_feature_store() - - trans_fg = fs.get_feature_group( - name="transactions", - version=1, - ) - - window_aggs_fg = fs.get_feature_group( - name=f"transactions_{window_len}_aggs", - version=1, - ) - - # Select features for training data. - query = trans_fg.select(["fraud_label", "category", "amount", "age_at_transaction", "days_until_card_expires", "loc_delta"])\ - .join(window_aggs_fg.select_except(["cc_num"])) - - # Load transformation functions. - label_encoder = fs.get_transformation_function(name="label_encoder") - - # Map features to transformations. - transformation_functions = { - "category": label_encoder, - } - - # Get or create the 'transactions_view' feature view - feature_view = fs.get_or_create_feature_view( - name='transactions_view', - version=1, - query=query, - labels=["fraud_label"], - transformation_functions=transformation_functions, - ) diff --git a/integrations/mage_ai/mage_tutorial/data_exporters/transactions_fg.py b/integrations/mage_ai/mage_tutorial/data_exporters/transactions_fg.py deleted file mode 100644 index 63d9486f..00000000 --- a/integrations/mage_ai/mage_tutorial/data_exporters/transactions_fg.py +++ /dev/null @@ -1,52 +0,0 @@ -import hopsworks -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'data_exporter' not in globals(): - from mage_ai.data_preparation.decorators import data_exporter - - -@data_exporter -def transaction_fg_creation(data, *args, **kwargs): - """ - Creates the transaction Feature Group. - - Args: - data: The output from the upstream parent block - args: The output from any additional upstream blocks (if applicable) - """ - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - fs = project.get_feature_store() - - # Get or create the 'transactions' feature group - trans_fg = fs.get_or_create_feature_group( - name="transactions", - version=1, - description="Transaction data", - primary_key=["cc_num"], - event_time="datetime", - online_enabled=True, - ) - # Insert data into feature group - trans_fg.insert(data) - - # Update feature descriptions - feature_descriptions = [ - {"name": "tid", "description": "Transaction id"}, - {"name": "datetime", "description": "Transaction time"}, - {"name": "cc_num", "description": "Number of the credit card performing the transaction"}, - {"name": "category", "description": "Expense category"}, - {"name": "amount", "description": "Dollar amount of the transaction"}, - {"name": "latitude", "description": "Transaction location latitude"}, - {"name": "longitude", "description": "Transaction location longitude"}, - {"name": "city", "description": "City in which the transaction was made"}, - {"name": "country", "description": "Country in which the transaction was made"}, - {"name": "fraud_label", "description": "Whether the transaction was fraudulent or not"}, - {"name": "age_at_transaction", "description": "Age of the card holder when the transaction was made"}, - {"name": "days_until_card_expires", "description": "Card validity days left when the transaction was made"}, - {"name": "loc_delta", "description": "Haversine distance between this transaction location and the previous transaction location from the same card"}, - ] - - for desc in feature_descriptions: - trans_fg.update_feature_description(desc["name"], desc["description"]) diff --git a/integrations/mage_ai/mage_tutorial/data_exporters/window_aggs_fg.py b/integrations/mage_ai/mage_tutorial/data_exporters/window_aggs_fg.py deleted file mode 100644 index caa6ae5a..00000000 --- a/integrations/mage_ai/mage_tutorial/data_exporters/window_aggs_fg.py +++ /dev/null @@ -1,56 +0,0 @@ -import hopsworks -from mage_ai.data_preparation.shared.secrets import get_secret_value -if 'data_exporter' not in globals(): - from mage_ai.data_preparation.decorators import data_exporter - - -@data_exporter -def window_aggs_fg_creation(data, *args, **kwargs): - """ - Creates the transaction window aggregations Feature Group. - - Args: - data: The output from the upstream parent block - args: The output from any additional upstream blocks (if applicable) - """ - # Specify the window length as "4h" - window_len = "4h" - - # Specify your data exporting logic here - project = hopsworks.login( - api_key_value=get_secret_value('HOPSWORKS_API_KEY'), - ) - - fs = project.get_feature_store() - - # Get or create the 'transactions' feature group with aggregations using specified window len - window_aggs_fg = fs.get_or_create_feature_group( - name=f"transactions_{window_len}_aggs", - version=1, - description=f"Aggregate transaction data over {window_len} windows.", - primary_key=["cc_num"], - event_time="datetime", - online_enabled=True, - ) - - # Insert data into feature group - window_aggs_fg.insert( - data, - write_options={"wait_for_job": True}, - ) - - # Update feature descriptions - feature_descriptions = [ - {"name": "datetime", "description": "Transaction time"}, - {"name": "cc_num", "description": "Number of the credit card performing the transaction"}, - {"name": "loc_delta_mavg", "description": "Moving average of location difference between consecutive transactions from the same card"}, - {"name": "trans_freq", "description": "Moving average of transaction frequency from the same card"}, - {"name": "trans_volume_mavg", "description": "Moving average of transaction volume from the same card"}, - {"name": "trans_volume_mstd", "description": "Moving standard deviation of transaction volume from the same card"}, - ] - - for desc in feature_descriptions: - window_aggs_fg.update_feature_description(desc["name"], desc["description"]) - - - diff --git a/integrations/mage_ai/mage_tutorial/data_loaders/credit_cards.py b/integrations/mage_ai/mage_tutorial/data_loaders/credit_cards.py deleted file mode 100644 index fdabc584..00000000 --- a/integrations/mage_ai/mage_tutorial/data_loaders/credit_cards.py +++ /dev/null @@ -1,22 +0,0 @@ -import io -import pandas as pd -import requests -if 'data_loader' not in globals(): - from mage_ai.data_preparation.decorators import data_loader -if 'test' not in globals(): - from mage_ai.data_preparation.decorators import test - - -@data_loader -def load_credit_data(*args, **kwargs): - # Specify the URL for the data - url = "https://repo.hops.works/master/hopsworks-tutorials/data/card_fraud_data/" - # Read the 'credit_cards.csv' file - credit_cards_df = pd.read_csv(url + "credit_cards.csv") - - return credit_cards_df - - -@test -def test_output(output, *args) -> None: - assert output is not None, 'The output is undefined' diff --git a/integrations/mage_ai/mage_tutorial/data_loaders/profiles.py b/integrations/mage_ai/mage_tutorial/data_loaders/profiles.py deleted file mode 100644 index 31be68c9..00000000 --- a/integrations/mage_ai/mage_tutorial/data_loaders/profiles.py +++ /dev/null @@ -1,27 +0,0 @@ -import io -import pandas as pd -import requests -if 'data_loader' not in globals(): - from mage_ai.data_preparation.decorators import data_loader -if 'test' not in globals(): - from mage_ai.data_preparation.decorators import test - - -@data_loader -def load_profiles_data(*args, **kwargs): - # Specify the URL for the data - url = "https://repo.hops.works/master/hopsworks-tutorials/data/card_fraud_data/" - - # Read the 'profiles.csv' file - # Parse the 'birthdate' column as dates - profiles_df = pd.read_csv( - url + "profiles.csv", - parse_dates=["birthdate"], - ) - - return profiles_df - - -@test -def test_output(output, *args) -> None: - assert output is not None, 'The output is undefined' diff --git a/integrations/mage_ai/mage_tutorial/data_loaders/transactions.py b/integrations/mage_ai/mage_tutorial/data_loaders/transactions.py deleted file mode 100644 index 4569aad7..00000000 --- a/integrations/mage_ai/mage_tutorial/data_loaders/transactions.py +++ /dev/null @@ -1,27 +0,0 @@ -import io -import pandas as pd -import requests -if 'data_loader' not in globals(): - from mage_ai.data_preparation.decorators import data_loader -if 'test' not in globals(): - from mage_ai.data_preparation.decorators import test - - -@data_loader -def load_transactions_data(*args, **kwargs): - # Specify the URL for the data - url = "https://repo.hops.works/master/hopsworks-tutorials/data/card_fraud_data/" - - # Read the 'transactions.csv' file - # Parse the 'datetime' column as dates - trans_df = pd.read_csv( - url + "transactions.csv", - parse_dates=["datetime"], - ) - - return trans_df - - -@test -def test_output(output, *args) -> None: - assert output is not None, 'The output is undefined' diff --git a/integrations/mage_ai/mage_tutorial/dbt/profiles.yml b/integrations/mage_ai/mage_tutorial/dbt/profiles.yml deleted file mode 100755 index 90599f89..00000000 --- a/integrations/mage_ai/mage_tutorial/dbt/profiles.yml +++ /dev/null @@ -1,9 +0,0 @@ -# https://docs.getdbt.com/docs/core/connect-data-platform/profiles.yml - -base: - outputs: - - dev: - type: duckdb - - target: dev diff --git a/integrations/mage_ai/mage_tutorial/io_config.yaml b/integrations/mage_ai/mage_tutorial/io_config.yaml deleted file mode 100755 index 06f9d3ba..00000000 --- a/integrations/mage_ai/mage_tutorial/io_config.yaml +++ /dev/null @@ -1,112 +0,0 @@ -version: 0.1.1 -default: - # Default profile created for data IO access. - # Add your credentials for the source you use, and delete the rest. - # AWS - AWS_ACCESS_KEY_ID: "{{ env_var('AWS_ACCESS_KEY_ID') }}" - AWS_SECRET_ACCESS_KEY: "{{ env_var('AWS_SECRET_ACCESS_KEY') }}" - AWS_SESSION_TOKEN: session_token (Used to generate Redshift credentials) - AWS_REGION: region - # Azure - AZURE_CLIENT_ID: "{{ env_var('AZURE_CLIENT_ID') }}" - AZURE_CLIENT_SECRET: "{{ env_var('AZURE_CLIENT_SECRET') }}" - AZURE_STORAGE_ACCOUNT_NAME: "{{ env_var('AZURE_STORAGE_ACCOUNT_NAME') }}" - AZURE_TENANT_ID: "{{ env_var('AZURE_TENANT_ID') }}" - # Clickhouse - CLICKHOUSE_DATABASE: default - CLICKHOUSE_HOST: host.docker.internal - CLICKHOUSE_INTERFACE: http - CLICKHOUSE_PASSWORD: null - CLICKHOUSE_PORT: 8123 - CLICKHOUSE_USERNAME: null - # Druid - DRUID_HOST: hostname - DRUID_PASSWORD: password - DRUID_PATH: /druid/v2/sql/ - DRUID_PORT: 8082 - DRUID_SCHEME: http - DRUID_USER: user - # DuckDB - DUCKDB_DATABASE: database - DUCKDB_SCHEMA: main - # Google - GOOGLE_SERVICE_ACC_KEY: - type: service_account - project_id: project-id - private_key_id: key-id - private_key: "-----BEGIN PRIVATE KEY-----\nyour_private_key\n-----END_PRIVATE_KEY" - client_email: your_service_account_email - auth_uri: "https://accounts.google.com/o/oauth2/auth" - token_uri: "https://accounts.google.com/o/oauth2/token" - auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs" - client_x509_cert_url: "https://www.googleapis.com/robot/v1/metadata/x509/your_service_account_email" - GOOGLE_SERVICE_ACC_KEY_FILEPATH: "/path/to/your/service/account/key.json" - GOOGLE_LOCATION: US # Optional - # MongoDB - # Specify either the connection string or the (host, password, user, port) to connect to MongoDB. - MONGODB_CONNECTION_STRING: "mongodb://{username}:{password}@{host}:{port}/" - MONGODB_HOST: host - MONGODB_PORT: 27017 - MONGODB_USER: user - MONGODB_PASSWORD: password - MONGODB_DATABASE: database - MONGODB_COLLECTION: collection - # MSSQL - MSSQL_DATABASE: database - MSSQL_SCHEMA: schema - MSSQL_DRIVER: "ODBC Driver 18 for SQL Server" - MSSQL_HOST: host - MSSQL_PASSWORD: password - MSSQL_PORT: 1433 - MSSQL_USER: SA - # MySQL - MYSQL_DATABASE: database - MYSQL_HOST: host - MYSQL_PASSWORD: password - MYSQL_PORT: 3306 - MYSQL_USER: root - # PostgresSQL - POSTGRES_CONNECT_TIMEOUT: 10 - POSTGRES_DBNAME: postgres - POSTGRES_SCHEMA: public # Optional - POSTGRES_USER: username - POSTGRES_PASSWORD: password - POSTGRES_HOST: hostname - POSTGRES_PORT: 5432 - # Redshift - REDSHIFT_SCHEMA: public # Optional - REDSHIFT_DBNAME: redshift_db_name - REDSHIFT_HOST: redshift_cluster_id.identifier.region.redshift.amazonaws.com - REDSHIFT_PORT: 5439 - REDSHIFT_TEMP_CRED_USER: temp_username - REDSHIFT_TEMP_CRED_PASSWORD: temp_password - REDSHIFT_DBUSER: redshift_db_user - REDSHIFT_CLUSTER_ID: redshift_cluster_id - REDSHIFT_IAM_PROFILE: default - # Snowflake - SNOWFLAKE_USER: username - SNOWFLAKE_PASSWORD: password - SNOWFLAKE_ACCOUNT: account_id.region - SNOWFLAKE_DEFAULT_WH: null # Optional default warehouse - SNOWFLAKE_DEFAULT_DB: null # Optional default database - SNOWFLAKE_DEFAULT_SCHEMA: null # Optional default schema - SNOWFLAKE_PRIVATE_KEY_PASSPHRASE: null # Optional private key passphrase - SNOWFLAKE_PRIVATE_KEY_PATH: null # Optional private key path - SNOWFLAKE_ROLE: null # Optional role name - SNOWFLAKE_TIMEOUT: null # Optional timeout in seconds - # Trino - trino: - catalog: postgresql # Change this to the catalog of your choice - host: 127.0.0.1 - http_headers: - X-Something: 'mage=power' - http_scheme: http - password: mage1337 # Optional - port: 8080 - schema: core_data - session_properties: # Optional - acc01.optimize_locality_enabled: false - optimize_hash_generation: true - source: trino-cli # Optional - user: admin - verify: /path/to/your/ca.crt # Optional diff --git a/integrations/mage_ai/mage_tutorial/metadata.yaml b/integrations/mage_ai/mage_tutorial/metadata.yaml deleted file mode 100755 index dcf42397..00000000 --- a/integrations/mage_ai/mage_tutorial/metadata.yaml +++ /dev/null @@ -1,50 +0,0 @@ -project_type: standalone - -variables_dir: ~/.mage_data -# remote_variables_dir: s3://bucket/path_prefix - -variables_retention_period: '90d' - -emr_config: - # You can customize the EMR cluster instance size with the two parameters - master_instance_type: 'r5.4xlarge' - slave_instance_type: 'r5.4xlarge' - - # Configure security groups for EMR cluster instances. - # The default managed security groups are ElasticMapReduce-master and ElasticMapReduce-slave - # master_security_group: 'sg-xxxxxxxxxxxx' - # slave_security_group: 'sg-yyyyyyyyyyyy' - - # If you want to ssh tunnel into EMR cluster, ec2_key_name must be configured. - # You can create a key pair in page https://console.aws.amazon.com/ec2#KeyPairs and download the key file. - # ec2_key_name: '[ec2_key_pair_name]' - -spark_config: - # Application name - app_name: 'my spark app' - # Master URL to connect to - # e.g., spark_master: 'spark://host:port', or spark_master: 'yarn' - spark_master: 'local' - # Executor environment variables - # e.g., executor_env: {'PYTHONPATH': '/home/path'} - executor_env: {} - # Jar files to be uploaded to the cluster and added to the classpath - # e.g., spark_jars: ['/home/path/example1.jar'] - spark_jars: [] - # Path where Spark is installed on worker nodes, - # e.g. spark_home: '/usr/lib/spark' - spark_home: - # List of key-value pairs to be set in SparkConf - # e.g., others: {'spark.executor.memory': '4g', 'spark.executor.cores': '2'} - others: {} - -notification_config: - alert_on: - - trigger_failure - - trigger_passed_sla - slack_config: - webhook_url: "{{ env_var('MAGE_SLACK_WEBHOOK_URL') }}" - teams_config: - webhook_url: "{{ env_var('MAGE_TEAMS_WEBHOOK_URL') }}" -project_uuid: 68ac84292a2e42d6b6ebf01a52cc2dc9 -help_improve_mage: false diff --git a/integrations/mage_ai/mage_tutorial/pipelines/hopsworks_mage_quickstart/metadata.yaml b/integrations/mage_ai/mage_tutorial/pipelines/hopsworks_mage_quickstart/metadata.yaml deleted file mode 100755 index 7f3c34f6..00000000 --- a/integrations/mage_ai/mage_tutorial/pipelines/hopsworks_mage_quickstart/metadata.yaml +++ /dev/null @@ -1,213 +0,0 @@ -blocks: -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - transactions_fe - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: credit_cards - retry_config: null - status: executed - timeout: null - type: data_loader - upstream_blocks: [] - uuid: credit_cards -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - transactions_fe - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: profiles - retry_config: null - status: executed - timeout: null - type: data_loader - upstream_blocks: [] - uuid: profiles -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - transactions_fe - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: transactions - retry_config: null - status: executed - timeout: null - type: data_loader - upstream_blocks: [] - uuid: transactions -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - window_aggs - - transactions_fg - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: transactions_fe - retry_config: null - status: executed - timeout: null - type: transformer - upstream_blocks: - - transactions - - profiles - - credit_cards - uuid: transactions_fe -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - window_aggs_fg - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: window_aggs - retry_config: null - status: executed - timeout: null - type: transformer - upstream_blocks: - - transactions_fe - uuid: window_aggs -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - transactions_feature_view - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: transactions_fg - retry_config: null - status: executed - timeout: null - type: data_exporter - upstream_blocks: - - transactions_fe - uuid: transactions_fg -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - transactions_feature_view - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: window_aggs_fg - retry_config: null - status: executed - timeout: null - type: data_exporter - upstream_blocks: - - window_aggs - uuid: window_aggs_fg -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - model_building - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: transactions_feature_view - retry_config: null - status: executed - timeout: null - type: data_exporter - upstream_blocks: - - window_aggs_fg - - transactions_fg - uuid: transactions_feature_view -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - model_deployment - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: model_building - retry_config: null - status: executed - timeout: null - type: data_exporter - upstream_blocks: - - transactions_feature_view - uuid: model_building -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: - - deployment_inference - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: model_deployment - retry_config: null - status: executed - timeout: null - type: data_exporter - upstream_blocks: - - model_building - uuid: model_deployment -- all_upstream_blocks_executed: true - color: null - configuration: {} - downstream_blocks: [] - executor_config: null - executor_type: local_python - has_callback: false - language: python - name: deployment_inference - retry_config: null - status: executed - timeout: null - type: data_exporter - upstream_blocks: - - model_deployment - uuid: deployment_inference -cache_block_output_in_memory: false -callbacks: [] -concurrency_config: {} -conditionals: [] -created_at: '2023-12-28 11:57:39.358016+00:00' -data_integration: null -description: null -executor_config: {} -executor_count: 1 -executor_type: null -extensions: {} -name: QuickStart -notification_config: {} -remote_variables_dir: null -retry_config: {} -run_pipeline_in_one_process: false -settings: - triggers: null -spark_config: {} -tags: [] -type: python -updated_at: '2024-01-03 16:31:35' -uuid: hopsworks_mage_quickstart -variables_dir: /Users/maxzhytnikov/.mage_data/mage_tutorial -widgets: [] diff --git a/integrations/mage_ai/mage_tutorial/transformers/transactions_fe.py b/integrations/mage_ai/mage_tutorial/transformers/transactions_fe.py deleted file mode 100644 index 76ae65da..00000000 --- a/integrations/mage_ai/mage_tutorial/transformers/transactions_fe.py +++ /dev/null @@ -1,73 +0,0 @@ -import numpy as np -import pandas as pd -from math import radians -from functions import haversine -if 'transformer' not in globals(): - from mage_ai.data_preparation.decorators import transformer -if 'test' not in globals(): - from mage_ai.data_preparation.decorators import test - - -@transformer -def transform(trans_df, profiles_df, credit_cards_df, *args, **kwargs): - """ - Feature Engineering for the transaction dataframe. - - Args: - trans_df (pd.DataFrame): The DataFrame containing transaction data. - profiles_df (pd.DataFrame): The DataFrame containing profiles data. - credit_cards_df (pd.DataFrame): The DataFrame containing credit card data. - *args: The output from any additional upstream blocks (if applicable). - **kwargs: Additional keyword arguments. - - Returns: - pd.DataFrame: The transformed DataFrame with additional columns. - """ - # Merge the 'trans_df' DataFrame with the 'profiles_df' DataFrame based on the 'cc_num' column - age_df = trans_df.merge( - profiles_df, - on="cc_num", - how="left", - ) - - # Compute the age at the time of each transaction and store it in the 'age_at_transaction' column - trans_df["age_at_transaction"] = ( - age_df["datetime"] - age_df["birthdate"] - ) / np.timedelta64(1, "Y") - - # Merge the 'trans_df' DataFrame with the 'credit_cards_df' DataFrame based on the 'cc_num' column - card_expiry_df = trans_df.merge( - credit_cards_df, - on="cc_num", - how="left", - ) - - # Convert the 'expires' column to datetime format - card_expiry_df["expires"] = pd.to_datetime( - card_expiry_df["expires"], - format="%m/%y", - ) - - # Compute the days until the card expires and store it in the 'days_until_card_expires' column - trans_df["days_until_card_expires"] = ( - card_expiry_df["expires"] - card_expiry_df["datetime"] - ) / np.timedelta64(1, "D") - - # Sort the 'trans_df' DataFrame based on the 'datetime' column in ascending order - trans_df.sort_values("datetime", inplace=True) - - # Convert the 'longitude' and 'latitude' columns to radians - trans_df[["longitude", "latitude"]] = trans_df[["longitude", "latitude"]].applymap(radians) - - # Apply the haversine function to compute the 'loc_delta' column - trans_df["loc_delta"] = trans_df.groupby("cc_num")\ - .apply(lambda x : haversine(x["longitude"], x["latitude"]))\ - .reset_index(level=0, drop=True)\ - .fillna(0) - - return trans_df - - -@test -def test_output(output, *args) -> None: - assert output is not None, 'The output is undefined' diff --git a/integrations/mage_ai/mage_tutorial/transformers/window_aggs.py b/integrations/mage_ai/mage_tutorial/transformers/window_aggs.py deleted file mode 100644 index 007b1566..00000000 --- a/integrations/mage_ai/mage_tutorial/transformers/window_aggs.py +++ /dev/null @@ -1,75 +0,0 @@ -import pandas as pd -if 'transformer' not in globals(): - from mage_ai.data_preparation.decorators import transformer -if 'test' not in globals(): - from mage_ai.data_preparation.decorators import test - - -@transformer -def transform(trans_df, *args, **kwargs): - """ - Compute the dataframe with window aggregations. - - Args: - trans_df (pd.DataFrame): The DataFrame containing transaction data. - *args: The output from any additional upstream blocks (if applicable). - **kwargs: Additional keyword arguments. - - Returns: - pd.DataFrame: The transformed DataFrame with aggregated window features. - """ - # Specify the window length as "4h" - window_len = "4h" - - # Define a rolling window groupby on 'cc_num' with a specified window length on the 'datetime' column - cc_group = trans_df[["cc_num", "amount", "datetime"]].groupby("cc_num").rolling( - window_len, - on="datetime", - ) - - # Moving average of transaction volume. - df_4h_mavg = pd.DataFrame(cc_group.mean()) - df_4h_mavg.columns = ["trans_volume_mavg", "datetime"] - df_4h_mavg = df_4h_mavg.reset_index(level=["cc_num"]) - df_4h_mavg = df_4h_mavg.drop(columns=["cc_num", "datetime"]) - df_4h_mavg = df_4h_mavg.sort_index() - - # Moving standard deviation of transaction volume. - df_4h_std = pd.DataFrame(cc_group.mean()) - df_4h_std.columns = ["trans_volume_mstd", "datetime"] - df_4h_std = df_4h_std.reset_index(level=["cc_num"]) - df_4h_std = df_4h_std.drop(columns=["cc_num", "datetime"]) - df_4h_std = df_4h_std.fillna(0) - df_4h_std = df_4h_std.sort_index() - window_aggs_df = df_4h_std.merge(df_4h_mavg, left_index=True, right_index=True) - - # Moving average of transaction frequency. - df_4h_count = pd.DataFrame(cc_group.mean()) - df_4h_count.columns = ["trans_freq", "datetime"] - df_4h_count = df_4h_count.reset_index(level=["cc_num"]) - df_4h_count = df_4h_count.drop(columns=["cc_num", "datetime"]) - df_4h_count = df_4h_count.sort_index() - window_aggs_df = window_aggs_df.merge(df_4h_count, left_index=True, right_index=True) - - # Moving average of location difference between consecutive transactions. - cc_group_loc_delta = trans_df[["cc_num", "loc_delta", "datetime"]].groupby("cc_num").rolling(window_len, on="datetime").mean() - df_4h_loc_delta_mavg = pd.DataFrame(cc_group_loc_delta) - df_4h_loc_delta_mavg.columns = ["loc_delta_mavg", "datetime"] - df_4h_loc_delta_mavg = df_4h_loc_delta_mavg.reset_index(level=["cc_num"]) - df_4h_loc_delta_mavg = df_4h_loc_delta_mavg.drop(columns=["cc_num", "datetime"]) - df_4h_loc_delta_mavg = df_4h_loc_delta_mavg.sort_index() - window_aggs_df = window_aggs_df.merge(df_4h_loc_delta_mavg, left_index=True, right_index=True) - - # Merge 'trans_df' with selected columns for the final result - window_aggs_df = window_aggs_df.merge( - trans_df[["cc_num", "datetime"]].sort_index(), - left_index=True, - right_index=True, - ) - - return window_aggs_df - - -@test -def test_output(output, *args) -> None: - assert output is not None, 'The output is undefined' diff --git a/integrations/mage_ai/predictor_script.py b/integrations/mage_ai/predictor_script.py deleted file mode 100644 index 606ae42a..00000000 --- a/integrations/mage_ai/predictor_script.py +++ /dev/null @@ -1,30 +0,0 @@ -import os -import numpy as np -import hsfs -import joblib - - -class Predict(object): - - def __init__(self): - """ Initializes the serving state, reads a trained model""" - # Get feature store handle - fs_conn = hsfs.connection() - self.fs = fs_conn.get_feature_store() - - # Get feature view - self.fv = self.fs.get_feature_view("transactions_view", 1) - - # Initialize serving - self.fv.init_serving(1) - - # Load the trained model - self.model = joblib.load(os.environ["ARTIFACT_FILES_PATH"] + "/xgboost_model.pkl") - print("Initialization Complete") - - def predict(self, inputs): - """ Serves a prediction request usign a trained model""" - feature_vector = self.fv.get_feature_vector({"cc_num": inputs[0][0]}) - feature_vector = feature_vector[:-1] - - return self.model.predict(np.asarray(feature_vector).reshape(1, -1)).tolist() # Numpy Arrays are not JSON serializable diff --git a/integrations/mage_ai/requirements.txt b/integrations/mage_ai/requirements.txt deleted file mode 100644 index 602afd9a..00000000 --- a/integrations/mage_ai/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -hopsworks -xgboost -matplotlib -seaborn \ No newline at end of file diff --git a/api_examples/hsfs/feature_monitoring/feature_monitoring.ipynb b/integrations/monitoring/feature_statistics_monitoring.ipynb old mode 100644 new mode 100755 similarity index 84% rename from api_examples/hsfs/feature_monitoring/feature_monitoring.ipynb rename to integrations/monitoring/feature_statistics_monitoring.ipynb index ab340829..209d14ef --- a/api_examples/hsfs/feature_monitoring/feature_monitoring.ipynb +++ b/integrations/monitoring/feature_statistics_monitoring.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "9018b425", + "id": "acedb376", "metadata": {}, "source": [ "![Screenshot from 2022-06-16 14-24-57.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfgAAABsCAYAAACGqKCeAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAmdEVYdENyZWF0aW9uIFRpbWUAdG9yIDE2IGp1biAyMDIyIDE0OjI1OjAzyRXP1gAAIABJREFUeJzsnXd8HNX1t5+Z2Srtqsu94V5wxXLBxphqehJKINTQCYTQXkIJhF4DIRQDAUI1HWzTm8GAaS6yZRv3brnJltW10u5Oef+YveNZaZtciMNvvp9sLHZnbr+n3XPOlQzDMHDgwIEDBw4c/Kog/7cb4MCBAwcOHDjY+3AYvAMHDhw4cPArhMPgHThw4MCBg18hHAbvwIEDBw4c/ArhMHgHDhw4cODgVwiHwTtw4MCBAwe/QjgM3oEDBw4cOPgVwmHwDhw4cODAwa8QDoN34MCBAwcOfoVwGLwDBw4cOHDwK4TD4B04cODAgYNfIRwG78CBAwcOHPwK4TB4Bw4cOHDg4FcIh8E7cODAgQMHv0K4/tsNSATDMJAkCftNtqnutJXAel6SpH3ePgcOHDhw4GB/h/Tfvg8+GTPXY/+tSFJapm0YBpqhI0syiZ50mL4DBw4cOPi/hv8agxfVSpKEbhjohpGUmYc1lYiu0qypRHTNZP4SuCUZr+Im3+OPe14zdABkJEezd+DAgQMH/yfxi5vo7czWQDB2GTn2XW2kiVX1lSyq3cKyuu1sDtXSoEZo1CI0qhEa1bCl3XsVNwGXhx7Z+YzI78IhxT0ZktcRt6wAMUZvGAi93mH0Dhw4cODg/wp+MQ2+pcZuGAaKbPr4VYYbmVmxmg+3LGVu1UYa1AghNUpYV1EkGUWSkCUJWZJjWrlZptD8w7qKjES2y0O/YDGTOvbjyA59GZHfxXoOQJZA9NZh9A4cOHDg4NeMX4TB28/ZdRtjX1VXyZQNpXy4ZSlrGnYiAT7FHWPoplZvYBD7H/H/j3XeLksShmFq7BFdI6RGKPJlc3i7PlzUazQHF/UAQNU1FEl2zPYOHDhw4OBXj33O4AUj1Q0DA9Mcv725gUdXfstrGxZQFQnhk134FDcAegt/+UwYsf0ZCZAlmWiM0XtkhVO6DOb6AYdzQKAAzdCRkGJCgcPkHThw4MDBrxO/qAYP8MaGBdy39CvWNVYRdHtwSwq6qafvNYYrypGR0DGojzbTwRfkhgGHcX7P0QBouo4iy3FHBw4cOHDgwMGvBfucweu6jiRJbAzVcN/SL3mrfCFuScbvcqPFzuL3FXMVZSuSRFjTaNKinNNjBHcPPo5cjw9V13DFHPIcbd6BAwcOHPyasM8z2QmT+9cVq/nP2jn4FTdZLg+qbnq470umKkmmV52q67hlmVy3jxfXzeU3s55nfvVmXLKCqmsJY/EdOHDgwIGD/2XsMw3ezjQNw0CWZd7cWMb1ZR/QpEbJdnv2uQafqD2KJFEfDVPgyWLyQSdzdMd+aLqOLDkx8w4cOHDg4NeDvc7g7WfahmGgxxzrhDl81va1XLVgOmvqd5Lr8QFmGJuERMI0dHsZRizuPqxFkSSZ+4cex3kHlKDqupVox2HyDhw4cODgfx17lcFbWjugGzqKZJ4AaLG/w5qKV3GxOVTLHT9/ztvlC/EqLnyK65fT5g3ToU+WJFRdp0mLcseBk/hLv0McJu/AgQMHDn412Ctn8IaNORuGga6bDF03dJ5bM5sTvvkPMytW41VcRHWNzlm5PDPqNJ4ceQpFnmyqw00YBpZAsE/PwmMMXDcMXLJMwOXhtp8/4/k1c3DJMpqhO2fyDhw4cODgfx57rMHbNV3T1G6a53+oXM9dS77gp8oNAARcXm4aeASX9zkYgKim4lZcbAnV8fCKr3ltw3zCmka222OFtwlte1962csxZh/RNf4z6jRO7HygkxDHgQMHDhz8z2OPGLz9VZFT3sDgsVWzeGDpTJo1laDbC5KZRa4hGuGM7sO4/cBJdPTnENFUPIqZDv/7Het4cPlMfqrcQETXCLi9yEhWvvp9zeSjMR+BNw8+h4OLeljmenBi5PcWWvpnJIIjVLVGonFzxumXQyqLnjMP/5v4vzKnu83g7QMgksbURZu5qnQ6UzctJuD24BJJbKzEM1AbbeaA7AJuHXQUJ3cdAmCdzQN8tnU5L66bx8ztq2nWVPyKG6+i7NMzepPJyzRpEbpl5fHRhIvp4A/GJcPZ15PdMuogE0gZ+AvsTrkA8h72O1Fdog2GYSDJspWy2MBA1/Q45iU+4r/3NCHR7o5DKtjbsreIQkvCYx8zAEVR0PXWY2X/O9VY7c44iCiYTMvWdT2zcollnkyTcGp35y6T/dGyHvFesvGXJAlFUcwrqjWtVV0t1+yerIe2jmem2JM27m06taf7MlMa2PK/7fW5XLvuXNO0XWHT9vm01/e/hD3W4EVu+W1NdVw69x2+3rGGPLc/jrGLZ0WYWpMaRTV0/tBtONf0m0CvYBGGYaAaOm7Z3Dyl1Zt4c0MZ723+mW3N9eS6/SDtIgp7G4Zh4JJkaqJNnNh5EC+MOgNJ2pX69tci0e1rtIqiMMyjFkVRWj2r6zq6ruNSXEknVTyjKMpeYfT7AqqqIsm7bkQUyLSN9i0Y58eSYMxSQTD+dMx4X6xlO6Fua9mZCKh72q50z8Cusdc0DVmWkeXELkrpylRV1ZoDO/avNashydJur9m9gZbC7J4K74m+F+WKPSVJUqt5tQvMifacpmn/s8x+txi8ETtrF6bzejXM2T++ylfbV1PkzY5d0wq0HABjlwc7QF20mWJvgMt7H8xFvcaY5nzDQDNsF9LU7+CldfN4cd1cs8ES7Kt4OiN2zFAdCXHn4GO4ut8E6zzerHvfTahYpJs2bWLDxo0pibt4duCAAeTk5GREIHVdZ+GiRTQ1NSUlXGAu5pycHAYfeOAeSfctN1NdXR0LFy1iydKlrFq1isrKnYRCIXTDZPB+v5+srCxycnPo1KED48aNo2+fPgSDwbi22ZlXW9qm6zqyLFO+aRMb04xvqv653G5yAgECgQDBYJBAIGD1URAKUXZbNMdEjD0UCrF8xQpmz5nDunXrqKmppaGhHq/Xh9vtpqioiO7dujF06BD69+tHXl6eVZ7ob8uxEn9rmsaCsjLUqJpyO0mSRCQSoX+/fhQVFcVpNy37IFC+aRObyjehuJSURzHRaJROHTvSs2dPa72kKrdy505Wr15tCtwkJ1u6buDzeRk6ZIilbWdi4WopVNXV1bFi5Uq+/+EHtlVUUFdbRygUoqmpCUVRyA5kk52VTU4wSP/+/Rk/bhwdO3bA7Y7dq5FA4Nqd/bT455+pr6tPOZ6ZlFVcVEx+fh65ubmW1trWNorfVVVl/oIFFvNLBk3T6N6tG126dGm1Du1lyrJM2cKFhEKhlPTJfMG0+jQ1N9G7Vy86d+7cqt125i4sIKLcrVu3Ma90HnPnzWPr1m3U1NRYzwdzgrQrLmbAgIGUHHQQPXp0Jzs72xorezn/C0pfmxm8nWEYEqi6zgWz3+TDrUspcPuJGjrYrnRNVYaZQlYlpEYZlNue8w4o4ZSuQyjymgMa1TTcsQ137k+v8eHmpQTc3hRbe+9A13VcsszHh17MoNwOqLqOSzZvrNtXE6qqKi6Xi0cff4J77r2XnJycpKY53TD9Bl6fMoXRo0ehaVpShiUIfTgc5uhjj2P16tX4fL6EhEKWZerq6hgzZjTvT5tmtSkdWm4mO5MrnT+fTz79lBlffsXatWsxDINoNGoxfztxFW1VFAW3280BPXowevQoxowezVFHHUWW32/1qaV5PB2i0Shut5t/PfYY99x7H7m5uW02fQrrkWBEXTp3pscBPRg6eAgTJx7K8GHDgLYJIi1NlLIsU1lZyTtTpzFt+jRWrVpNJBJB0zSLAdkZuMvlQpZlOnXqxIRDDuHYYyYx8dBDrXGCeBO4vb6LL7mUDz/+mEAgkJRxKIpCZWUld9x+G1decUVK7Vasl/MuuIBPPvk05RqWZZnaujomHXkkLzz/H2u9JCpXzN2DDz3EAw/+g/z8/KTlSpJEY2MjBx88lnfefNP6LpXgECdUNTXxxRdf8ONPP/HT7Dms37CBaDSKHht/0XfDMNB03VwPsoxLUQgEAgwdMoRRo0o4fOJEhtnWg1jvbdFWxXie+JvfMnvOnJTjmQ5i3vNycxkwYADDhw/n8MMmMmL4cKuNmaxZMQY1NTWMm3Ao9Q0NuJLQHkFPbvnbzfzlz39OSE/Edx98+CFXXPmXtPRG0JZQKESfPn149eWXLAafiPHaaeM3s2Yxbdo0Znz5FXV1dURVFUPMvXheVUGScLtcuFwu+vTuzeGHH8ZJJ5zIwIEDrDbvzxZFO9JT7xawiJFkhrXdv/wrPtiyhAJPFlFDz6ij4hkzhaxCvtfF6oad3LjoI55a/QOndxvGuT0OoqM/B1XXkCWJgMuLOZYS7EMWbxgGLlmhTm3mnqUzeGX0mciwT5k77CpbkWXcbjculyvpZhYLWCzoVO2yn7e5XC6r7GQMXvyerlx7W8Sz9s30/Y8/8tRTTzN33jyqq6vJzs7GH2PQwoLTsgX2DaPrOuvWr+fnJUuY8trr9O7Vi3PPPosz//AHvF5vK4KU6TjIGYxvJjAMgw0bN7Jq9Wo++eRTnv73M4wdM5rr/991DBo0yGLYydrXUigS8/nm22/z6GOPs3btWjweDz6fqa3bzxrtYyX+u6Kighdffpm33n6bUaNGcdkll3DYRJPRtxQAVVXF7XZz+OGH8f6HH+HxeOLOk+2QZZlAIMC80vlAYhOmaIeiKFRVVbF27Tr8fj+KoiTVxiRJIicYZMWqVVRWVtKxY0e0BPMhmK+mqiz5eSkerzfl3AkG/JsTT0KW5YRMJZHWHmpqYsqrr/Laa6+zZt06ws3NZGdn43G78Xm9cWNu74O9/6qq8v0PP/DVzJk88+yzjBo1ij9ffjmjSkri5sG+NlJB/G7ft3t6Hl9bV8c3337LjC+/5NnnnmPkQQdxzVV/YeTIka3GJlH7WtETlyupciH2Wks6Zd/jLpeLjRs3csedd1vPp9I5ZVkmEolQWFjIE4/+iy5duli0wF62fW63bdvG/Q8+yHvvf0BTUzOBgEmLslrsKdFGMT+GYbBi5UoWLlrEK1NeZdKko/nTpZfSp3dvq/1CaNtftfk2xcGLjmgxU/ZnW5fzyIpvyXX70TA197ZADKaq6/gUFzkuHxXNDdy6+BP+sfxrZElGkWQ03eDn2m24FSWlaW5vQJIkNEMn6PLy2dYVfLptObIsW05+DnbBbq4VxKuquoqbbrmFc879I1/NnImu6xQWFuLxeHatH11HjWlE4qNpmqWlCiLm8XgoLCwky+9n7dq13Py3Wznz7HOYV1oap8kmMvslb/Te6bskSXg8HoLBIAUFBei6xuczZnDyab/n2ef+YzHuZKZn8Z34PRqNcv0NN3D1tdeyZcsW8vLyLIFI9FNVVatM8bcYU5fLRUF+Pm63m++//55zzjuPK678C5s2bWrFVAQxHFVSQudOHQlHIkn7qes6brebn39eTFV1dSvBQvRF9GPpsmVs2bLFmu9kEG3eum0b6zdsMJ9NsMeEZra9spIly5bi9/lSMjlN18nKymLM6NFW21qag1tamn6aPZszzjyLv992O+vWryfL77fWrBiDRGtUVVXrv0W52dnZFBYWoqoaM2Z8yVnnnMsdd91FXV2dKajEBKmW7fqloMQsDQUFBWiaxtfffMNpp5/Bvx591GqbmMt91T572aqqcvMtt7Jl6xZ8aeYWTCFJ03X+8cD9DB48OM7foaXQrCgKC8rKOPnU03j9jTdxu93k5+dZTLnlnmq5rwB8Ph8FBQWEw2Fee+11fnfqaTwxebJVb7L9vb+gTQxeDKIiSdRGmrjj589jOdyFhrsbLZB2JZ7RMfApLrIUL12y8qxNsyPcwKZQDS5JZl9q77uaJCFhtun5tXOIaGqsjw6TF7BL+tFoFEVRmD1nDif99mReeOFFFEUmJyfHYv4txy0Rw0tUh6qqGIaBz+cjNy+X2XPmcObZ5/DE5Cctba1Nm2wv7kPDMCyiL8lmfzVN45bbbuPue++LY6wt144gMKKP113/V1548SVyc3Lxer1xgo7V9DTHEqqqAhAIBMjOzmbqtGn89pRT+fiTT+KEATFmffr0oX///oTD4ZRn1C6Xi+rqGubMmZNQW7FrTStXrqSmpiaplahlf3RNY+7cudb7ycpdvnw5mzdvTik4yLJMY2MjB40YQffu3VqtCztzF9//69FHOfucc1kwfz55eXnW8ZVYd4nanOhvAbEe5Nh6AHjy6X/zu1NPswRTu6f2f4Oe2NsYDAZxeTzcc9/9/O3WW6353VdM3l6+oig8+dRTzPjyK3JjeyedFa6hsZFbb76JYyZNamUqb6lsLFy4kAsvvoTyTZsoLCwEdu0Re5mp/lsIdrIsk5+fT1MoxN333sfZ553H6jVr4vbx/oiMGbxFpDAH4Zk1P/Fz7TayFPdeiVPftQkhamh08udYE7eusYqIrsVo8y8jKWmGQdDt5dsda/lp50Yz+Y60/561/JJoaQZzu918MWMG551/ARs2bCA/P9/aaHsKMd6C4QUCAXRd56577uWqa64h1BSyfs9IANvL+9C+HgRhycvN5fHJk3nhxZessDb7s/bxUxSFx554gjffeovi4uI4xt7WtWY/dzQMg7y8PHburOLSP11O6fz5ccKQGK/x48ejxwhrMoYmyzKhUIj58xck1OBFPyRJomzhIktAyfS4rqxsYasjCPGbINyzZn2XUeimoeuMHj3K0gYTMXcwCf2NN9/MfQ88iCTLZMfW1e6Ovb3NAoJhFeTns3LVKs4651ymv/++ZWq3r4NfEq3aCBQWFvLiSy/z1NNPt+kYoS2wz4HL5eKHH3/k0cefIBgMmP4MKYRMRVGoqa3l/PPO5aILL0zI3AU9kmWZ7du3c/W117F9+3YCgQDRaLRV3zOB/XlVVXEpCoWFhXz++Rfccuutez2EcW8jcw1e2uXctaGxmmfW/ETA7UXby4tAkuLjTyVJok4N7/V6MmmHhISqa7xdHiNAxi+gxe+fgmAc7OZlRVGY8eWX/OnyKwiHw2RnZ1tS8t5dF/EhTPn5ebz2+hv87ZZb45hOujr35dzZGWcwEOD+Bx9k8eLFCWPXxdiVLVzIU089TW5ubpxmt6ftECbvpuYQvz/tVIYOGWIxHHsdRxx+GIFgMK32pCgKPy9ZQiQSsRhAyzpDoSZKS0vxer0ZjbOwDqxeu5bq6uq488xd82l+t6CsLDVjj62NQCDAIePHx2l0on12IfDmW27lxZdfiRNG9zZDE2Wpqkp2VhbRaJSrr7mWL2bMsNbEf9u8a2eMgUCARx59jLKFC1ut2b1Vl+hzVVUVf7v170Sj0Tjnw5YQa6SmpoYjDz+cv99yS0KHwJaC4YMPPcyy5csJBoNmGOteGmMDaG5upkOH9lx15V8sn4H9VfHLiMEbhoFkSBiS2ZGnVn/P9nA9bmnvnYmb1gGzNJ/sItftswatIRpGz9CBb+/BXDRuWeGnnevZGW5ElpI7n+zFavdrCAIptNUlS5ZwxZV/QdN1y/mtLUw2EYFLttntWp4423/t9Td5fPLkOIKUiihlMnd2Rmz/pGufeMcwDNxuF/X19Tz62ONW1IBdYxPE7rn//IfGUChlOJe9PeJYwh5n3bI9QuOpb2hg1MgS7rrjDrxer/W+vT8H9OjBgQMH0tTUlHRsdF0nOzubhYsWsXnzllZ9Ef+uXr2aysrKhAJAsnLdbjfbtm1j5apVSBJxTM8UgmTWr19P+aZNKR2wJMn0Y+jRozsjhg+3+moXFoRQ9ehjj/Piyy+Tn5cXd36eSoNsWVem60E8r2kaHo8HSZK4+trrWLpsWZy5fk8Z6d5Ysy6Xi1AoxGOPP9F235YM2yiOiG67406WL19OVnZWUmuPWMcNDQ0MGNCfRx/5Jz6feQNpS2uOXXhYtmw5H3z0UVrmLvpl31Op9pWop7m5mZtvvJGxY8dYwsb/hInevtBaEmENHQWZTaEaPtyyDL+8d0zzoi5JknAjUxVpon9OO0YXdjeTpECrZAy/FAzJwK+4WVNfxQ+V60Fi3zvb7ecM3i41Nzc3c+ttt9PY2IjP50vL3MW4Ce9qXdeJRCJWGJj4LZm5uGUbdF0nNzeHfz7yL7759ltcLleclro7sDPfSCRCOBwhHAlbJj57+1IxG1XVCQaDfDlzJstXrIhjNsKMuHbdOmZ+/Q3Z2dkpiZz4vqmpidraWmpr66ivr6epuTmOkYnnRVhku3btePihf5CVldWKEAmm4/P5GDNmTMq5s0ykNTUsWba0hYa9y+xdtrCMUCxGPFPzvNvtpqqqipUrV2IY8V7p4mMKFpuTWgZEn0OhEIdOmGA6xdr8Puxm4Z9+ms0TTz5JXixMMq3JP/a78BTXNI1IJGKGztnCOsWzqfqqaRper5fa2lquv+FGGhsb9zhjpL2NqqoRDoetPRUOhy2hJh0TEu3Lzs7m21mzWLBgQdyRzp5A1Cva8uprr/Pu1Kmmz4qaeN3Z13FBQQFPPv44RUVFcZEILQUY8d20996jrrY2o1wiuq5TX18f21e11Dc0EA5HWjnuCQGorq6Oc885h7PPOivOkvA/ocG3NGkJ2Afv063L2Riqxqu4MaQ9Z3SGYXrkS8DOSBND8zry+IjfUewLoOkm0Q+6vGae+19YSjKN9BIRQ6O0ehMSkqXF77M691NJUMAuhT//4ot8/8MPBAKBtGYwwSQwDOrq6qitrcXn81FUVES7du3Iipkwq6qqrPM18V4i2AUNTdO474EHaYwlydgToiQ2vcfjoUP79nTs2IGOHTqSl5eHpmlUVVdbhD3NSCFJEuFwmC9mzIjbQxbjWriQqqqq1A5psX5EImFKSkq49567ufuuOzjzD3+gb58+hEJNhGIWAPu46LrO3XfcQZ/evS2P35b9FM8eMn4cfr8/oTOkvUxJkvjxx5/iaIRd+11QtpBwJNImgdwwDDweD3PnlQJGnCAk2rxgQVnKs3FJktB0nUB2NoeMH2+Va7cESJJEczjMPffdRyQSSctY7cKoqqpUVVURjUbJysqiXbt25MciFurr66mrqwPImIkGAgHmzZvHc88/n1ZYzASij7m5OXTp0pkO7dvToX17OnXqhM/ns9qezrIiBJn6+no+/2KGNQ570jbhswVmVMySpUu557778Pv9ZrkphFohgN1/773079/fWsfJhDxFUYhEIpZwIvqUrHxN03C73Zx7zjk8+sg/ufuuO/ntSSfSoX076uvrLTpkMneF2tpaRo0q4bZbb0HT9Lg9tL8iLkDULvHaF79gwqqu8fHWZXgkF0aM/e0uRPkuWaZRNbWjC3uWcPOgIyn2Bojqu2Ib8zx+6yrXPamzrZAw/Q78iovZlRvjctPvszr3U0kQdjnVybLMpk2beObZ5yynt0yYeygUwuP1csLxxzNx4qEM6N+fosJCFJeLHTt2UFFRQen8BUydOo1NWzYTDARarUU7BBEIZGezoKyMt995hz+ee66ZhlNKbu5ONXvCMjF48IFMfuyxmFkYautqKS8v5+tvvuXtd94hFGrC50vuTNaSKV579dWtGOLCRYvSMhpFMj2HTzj+OJ547LG4mO5IJMLnn3/B5KefoqxsoRm37fFQVVXF9dddx3HHHWtpPIn2tNA+RgwfzgE9erAmFnufDLIss6CsjHA4bJnLxdzW1dWxfPlyfF6vZXnLBEKYWrhoEdFoNC6cUsSxzy2dlzKESsxZzx49rGRDdg1MtPH1119n7rxS8vJy01osJEkCyYwb79a1K5decjHDhw2nfft2FBcXE24Os6NyB+Xl5Xzy6Wd8NXMmqqpa1pJkZVtrNpDN8y+8yCm/+x2dO3e29tXu7H+Rf+CmG/7KqaecYlpRZBlZUdi0aROzZn3HlNdeY8vmLSlN4gIul8uaZzEfu9MuwzCQbFarxlCIm27+G3V1dQQCgaTjJKxStbW13HnH7Rx7zCSi0SgulyspPRDrpbKyko2byi1Hz0QQ72qaxj8euJ8Tjj/e+u3C889nx44dvPHWWzz/wotUVFSQm5tLc3MzHTt25J8PPWRZK2U5dZbE/QFxYv3mzZuJJIiJFVJYRXMDP1VuQJbicxhnyvDsz7lkGU3XqQ430SdQxH9G/Z5HRvyWYm/ASoAjmHknf05Mg//lfdAMycxRv6ahkrpoc4xB/N9j8HbtU5IkXp4yhW3btmUU7yy0gn59+/LS88/zzNNPceYZZzB82DC6du1Kp44dGTpkCEcfdRQ33fBX3ps2lXPPPpvm5ua4ehNBaG8+r5fXXns9lkZ0lxaY6PlUIyzq8rg9tG/fnuLiYtq1KzYzWh12GHfefhtvv/EGvXr2oLm5Oa0mrygK23fsoKa2tpX2UVtba9WZDLph4Ha7Oe3UU60kH1rM29vj8XDCCcczfepU/n7rLXi9XrZs2cIJxx/P1Vf9JS6HdktCJL4TZvqJhx5qpQlNpiF5PB7KyzeyctUqy1IixrmiooI1a9eaZvQ2eBYL02dFRQVr1qy1mIH4rby8nPXr16fNcKZFo4wYMcLK9mZn7rIsU19fz0svv5JSKBN1inebmpo556yzeG/qu9xw/fUcfdSRDB0yhE4dO3LAAT0YVVLCKSefzHPP/JsXn3+efv36UV9fn1ZTNgwDt9tDRUUFb7z5Vtz87I7ysEuDzyU3N5cO7dvTrl07igoLGTZ0KFf++Qreev01Ro4cQSiWqjpZPXrMl2bdunXs2FG5RxqqJEkYkoShm3Pw8MP/ZM7cuQRTOHWK+aqpqeH88//IxTGP+VTM3arLMIhEozTH/ElStbu5uZl+/fpx+GGHoWka0WjUymlQXFzMlVdcwTtvvcnJv/sdNbW16IbOfffcTa+ePU1LQpoUyPsL4qhTcXGxlUfZDkmS0A2dQm82dw0+ljy3n+pIE2BqGCJXezLCAKY27JJlK768Khwiy+Xhmn4T+HDCBZzUeRDRmInQJctsDpmDClDkzabAk2We+f83zPSSRNTQ2R5usL7bZ/Xtp+YeQUQURaG6uppPPv0srVOa/wADAAAgAElEQVSdydxN4jrhkPG889abjDt4bKskIfZEIqqq0qlTRx64715u/dvNlsCZzkLg9XpZvmIFX3/zDdA6na392VQjbCe04pxVtFMQggMPHMRNN920q7wkcyaYV21tLVu3bGlFdDI9p45EIqxcuWrXeR+7zMGqquL1ePjTpZfywnPP8rvf/Ja777zD0tozIYqGYTBqVImpJSd5VjD4bdsqWL58ufWe6M/in3/exdzS9iq+DUosfr20tNSqSzD573/4kfr6hqRM0zAMK7fl0Ucdac2v3TwPMOPLL1m9Zm1aD3/R90gkwi0338SD999Hhw4dUq5XXdfN9f3mGxwyflxaJi/a5fV6+fiTT6wkOHukKUu7IgHEuhXjGIlE6N69O/fec09aC4MREygrtm+nvqF+z8zzsfpz83L57vvvee75561cEcmedykKtXV1HHH44dwWC0NreR6eDGLOpQzuDlEU0+Te0NAQlybZvq969ezJE489yu233spfr7uOo486apdFbD+l0y0Rx+C9Xm/CswtZMs+ivbLChb1G896E8/l912GoukZ1pImQZhJhlywjI8V9FMn8Lqrr1ESaaVTD+GUX5/ccxQcTLuD2wZMo8GQR1lTcikLU0Lht8Wec9eOraLFB9MguBuS0I2qov6iJHkzBRDYkVF2nJiI8jf9vavCCac6ePYf16zckzWkvIMsyoaYm+vfvz5OTJ5Obm2ud1btiKS6FOU78KzyLVVXj4osu4rJLLqa+vj6tFi+0289nzNijs7G4dd/Cs1ZRFMtb/5Bx4+jerRuRSCQlsZRlmebmZhobG1sJA37frkx1ySAY64svvcS80vlW6s+Wuek1TWPUqFG88PxzdOjQIc4En8pcLPb76FGj6NGjO80xx71EzwqBZfacuXHvimOIZMcN9v4l6qtwplq6bJn1rmj3/AULCIfDSR33JEkiHI3StWtXhg8bZglAdu1dkiS+/GomqhpNOR6i7fX19fzp0ku59OKLUVXNIur2dSr+FZqlqqrk5uby5BOT6dOnd9pLnQzDTN60eu1a5sydF8eg24qWYybWrPjO5XajaRr9+vZldElJygtdRBmqqlJXl3rfpYNhGPi8XpYtW86tt92eMte9sPQ1NDbSv29fHnn4Iby24wH70VayusR8yykseOJZ0xpVzr33P0BDQ4N15CTmwB6Vc+klF3PF5ZfH+d7YfQv2Z2TkRW//W9U1BuS059lRp/H+IRdwSc8xDMrtgGRAVbiJOrU57lMbNf9t5wtwRPve3DvkOL4+4nIeHfFbBuS0J6yZyf29iotFNVs4/fspPLzia8pDNVRFQuakSRLD87sQ1jRkee+GbmQCQzKz7DXrUfHNL1Z3KqiqSjQazfiTaG4zhbnBzOUyZ95cIpFwyjND6+xTVrj977eSn5cXlxfcsuy0IE4gzk/NM7Krr7qKkpEjMyKYXp+PRQsXUV1dnXGoVqZoSWRcLhdFscQ0qRioIJbNsWxxdq25Z6+eaU2zghht37GDs849h7vuuZfNW7ZYwoZgDMJk3jKBSjrhQbyXl5fHgQceaF62kQS6ruPz+Zg9Z451PCHOyZctX77bBE+PWWCWLltmOQyKY53ly5enPH+XZZlQYyMjDzqIdu3atYqRFueyZQsX4vf7UyYmkWWZpqYmSkpKuOaqq2JlxQsyLderGF+Xy4WqqhQU5HPHbbfFOQsmgni/uamJeaXzrO/29pqFmC9RbJ127NjRighJBrEmt23bGldOWyHW7tRp09iwYYM1/omYuxDy8vLzefKJJ2jXrl1cMpt0bRDP5Ofl0bF9h4SOpfZnRejnO+++y6mnn8FnX3wBMSHefvwEWMJ0y/n/X0DcwZa90XEdkLBM6y7ZNGfohk5JYTdKCrtRG2lic1Mdy+oq2NBYRUiLUh8NU+jNooMvh77BIjpn5dHVn2eFgUV1Dbes4FVcbG2qY/Kq75myvpR6NUyRJ5smLUpZ9WaO6dgfgIPyO5Pl8qDquul1L0voBtZ5eEup0CLGSMRkAivEre2TI4FhWBaFfWmiz8RCIfogco9nArfbHWcGbCshMRc3sWtGF1rm+WTtM889Gzj2mKM5ZPz4uPAWUV6quoT3st/v55KLL+aSyy6zNmYyE7LX42Ht2rVs3mzmck9m0t0dEirGTWx8TdPYuXNn2iQdQJxGJfonSRLDhw61POhTCQnivF1TNSY/+SQffvQREyYcwmknn8KwYcPweHZdTyrqs7c5GcRvghGdcNxxTJs2Pek4C82moqKCFStWMmTIYGRZZvWaNWzZujWhP4Z9vWmalrC/QptdvmIFW7dupVevXgBsLC9nxcqVKS1FgomMO3hsqz6LfpWXm1cwZyVhMOJZIaxcctFFeH3eNkVziLHRNI1DJ0zgsIkT+ezzz1M6oRoxwWbRokUZRma0DXZBTwg9O3bsSOvPINrarl27uHLaCjudcbvdSdeUEIINDB5+8AEGDOgf58Fub1OqukSYX8+ePSmdP5+srKy0Am4gEGDJkiVc9qfLGTp0KL896USOPuooOnXqlLI//ytIe5ucecZlXsCiyDJRXWVTqJYDAoXW77keP7kePwNz26csy7xe0XTQc8sKO8ONTFlfynNrZ7O+sZoct8+8NQ6oV8P8ULmBYzsNQNV1RhZ246D8LsytKsfAIGro+GQXblkxc9S3XACy6XwV1lWatShIkOPyJTURpYJk2mPwyrFb1vblbXYZlC3a/mhM0k3dHwMwc37v3LkzoxzhCUsxdjkrrVmzJiVjsku6J514YitNJh3TsTNGwzAYO3YMvXr2pHzTpqRe3oLAhiMRVq1exaBBAxP2U5hwU/VTwK4RC6YnkrN8/e23bNiwIaWXsSA6Pp8Pv88fZ0Y0DIP+/fszaOAglixdsitsKMmYCAaQn59PRcV2Xn31Nd56621GlZQwadLRnHTCCRZBbulcJ8pI1l/x7LChQ+nQoT11dfUJY4iF+bexsZE58+YxdOgQDMPMEy8uyGl5vitJZqhgv359cXs8LPl5Sas5FHNXW1vLqlWr6dmzJwCz58yhqanJOrdNxBw0TSM3N5fDDzvMal9Ls+7yFSvQYkdDycZBHKX07duXcQcfHDdPqcZP/NbSanL8scfyyaefpjUru91uVq5cTXNzM1lZ6T3ck5UDpiXE7iOwa4x0PB43y1esYO7cuVbehWRlifJycnJ2UyGKRyrGKMrWdZ0br/8rRx91VMI0tJnWIUkShx82kenvvWf1JdneFOtHCAKlpaXMmTOHJ558kokTJ/KbE0/k4LFj43IgpDpm2B+RlMHbF7aqa7hkhepIiCtLp/HdjnUc12kAJ3UaxKjCbhR4sxKWoRlikZnn84osUx9tZn71Zr7fsZ63yxeyrnEnPsVNoTcLzTDQDD0mAMjMr9lEkxrFKysEXB7eHn8uC6u3MLeqnEU1W1jTUMXmphp2RkKCj1nQDYNCTxa9A0X0yynGMGDG9lU0q1EUuY0bSAKXJJGlmJrSvvQDyKRssbCmTp+OGo2awk1Spm36DEiSRE5Ozh4782yKRVqkC+lpbm6ma9cuHHTQQQBpn49rse05TdMoyM9nxIgRrFi50orXTvSO6NfGjeUpCKuRYqx2lSPLspU1yw5FUVi4aBF33XNPq7Ymgqqq5OXm0qlTR4sBybJMVFUJBAIce+wkSueXWil+U2nyojyv14PPZzqL/fDjj3z/ww888+xzHHvMJE7+7e8YOnSINXYtHZRali/apOk6HTp0YMzoMUybPp28WJa3RO1QVZXS0lIuPP+PSJLEgrKyOEHBDiEQDBs6lGHDhnHNdf+vlaObfcx/+OknJk06GknaFXOfbL0Kk/r48eMsv4NEZtT169en1b5Eopwxo0aRn58Xx2QyQcs6hw8fRqdOnaiqrsadRGMWfW5sCrGtooIDevTIqK5EdRuGgcflQpblVgKUoiisX7+BG264kZra2pSChJjfwoICsrKy9gpzT/S3/btQKMTQIUO47NJLWl39mmn9doHs6KOOom/fvqxevbrVnQSJ2iZ+z87OBqCqqpopU15l6tRpDBs2lN+feipHH30UBfkFAG2yRv63kVyDj5nlVV3HJStsaKzmojlvMqeqnKDLy2sbFvDWxjIOCBRyYE4HRhZ2pXt2Ht2yCtAMnV7ZheR4zMFVZJkdzQ3cv+xLftixgY1N1dRFw2S7POS6/RiYV8batY4sxcPimi1saaqjV7CQqK6RrXgYV3wA44oPAKA6HKIqGqI20kxluJF6NYwsSQRdXnJcPgq8WRR6ssiPCSAPLfua+5Z9SbbkMS+OyWCADGLenbKLDv6c2KT+dydULPy83Nw2La49ybctNtD27TtQoypSCiFJksy0oR3at6dzp06tNKpMYSfKvXr2zChRB5h3oyftB1Jra4/9d2OXY9y6detwezwYuk5zczNbtm7j/Q8+4ONPPiEUCqUkHqI9mqbRrl072rVrFxe+JfIpnHvOOUyf/h4rV60iGAigZnCjlmHscngMBoMAVFZW8tTT/+aNN9/imGMmcdnFlzBgQH/zWcNImaBJkiT02B3xY0aP5oMPP0z6rDiHX7J0KdXV1RQWFlKW5sjG5XJx4KBBjBt7MEoa4r1o0SIAamprWbV6ddJsZGIMm5ubmThhgqWNJXp+W2w9pGLywjLTu0/v3SbcYu0AdO3aleLiIioqKvAkSbFraZGqyvbt2+l5wAG7dXmJsIDsqKxky5YtVsx4NBpl85YtfDlzJu+//wHbt+9IayWQJDNqw8xRUbTPNVXDMPD7/SxZupSPPv6Y4487LqN01y1hZ9bZ2dlcecUVXHbFFfh86a229ndNq4qL/Px8NE1j7tx5/PjjT/Tu3YuzzzqLs888k+zs7Li1tj9r8wkZvGWWR8cly5SHajj7x1dZXLuVfLcfDYNcjw/DgA2N1axuqOS9LUuQgIiu0tGXyxeHXUrQ7UUHqsONnPnjFH6o3EC2y4NXcVkau06C6yclCRloVCM8tHwm9w45nnyv3/pd03V0DPK9u5h3KkQ0DUWWuKBnCS+sm0t1JISShtALSJgEMujykOfxm+00dPYVk8/EfG5fkG3F7i5E0a5wuBnd0HFJKWTD2IayX+SR7twvWZ1SjGC2a98Ot8edUZ8bGhuSty2NBi8Y2IoVKzjl9NNjuQyhpq6OUGMjkiTh8/nSMndB7DVN44jDD48bB7vJPy83lwfuu5dz/3g+zeEwPp8vo8t6xG+CGLpcLgoLC4lGo7z55lt8+uln/Pnyy7nyz1eAsStBUSJiJBiEYRgceugEcnJyCIcTO1GKc2N7fviVq1YlvHTDMMxwo0AgwLChQykuLqJPnz7W0UbLct1uN5s2b6K6upo1a9dSXl6eNKxNkiQiMSGypKTEUg4SjVlDQ/L1ILAre2EHq/zdEUjBtLK43e648/dUwpWmaYRCIWsc2gpxTDH5qad57vkXYnMt0dTcTHVVNWBmkfP7U69ZMCOmotEoQ4cOJRgMxPkh7AvY98l9DzzI2DFjyMvPsyJE2gLLGqVp/OakE1m4aCGTn3yKgvx8DCm5/07LMnTdwDBMYVVYMcrLN3H7nXcx/b33ufeuOxk+fHichWx/RSuvDov4xLLG1USauGr+dBbVbCHP40eNmd01XceI3d+e4/KZWrPbh0tSuKTXaLpn5xPVNVyyzL9WfMuPletp7wvgU0xCr9oIdSuzIaaJPcvl4e3yRRwx8yn+XDqVtzaU8XPNNjTMS2DAPAbQDB1VT37zkUdRwIACbzYndR4U0/TlzM67DQnV0OgVKMIjCw1yH5ro99PFYjGUFOMsYK4hkOU9d0qRYnWbF3Vk5oQUiST3EjYyMNFLkoSqadTW1FJTU0N1TQ1y7IgjGAzG3QSWqhxVVcnLy2PSpKOt7+xmZOGUVVJSwjP/fhq/309dXR0ulyvjaBF7G4TnsNA+7rz7Hv56441xMdFJTZWx77t368aQIUOsY5hk4xONRpkzdy6l8+dTH4slTmT+1zSNoqIi+vTuTVZWFn369E6aIMjr9bJ58xaWLV/OypWrUqbxlSRxtt+PQQMHxgkwLaGqqb3G7f0SF8LsKQzDjOlOV5JYE6q6+1crCyYZCoWoqqqipqaGqqpqmpuaCQaDBINBPB5PRhknxaVRRx15RNJjl70JIehmZWezevVq/vmvR03abMTfR5AJRHvFOrjt1lu47NJLqamti0XwKHHPpmqTgPBn8Hq95ObksHjxYs4+74/MmjUr4wuu/ptISDENw9SQZUni1sWf8tm2FRR4sywzOtg8cAE9puU2ayodfEHO6Dbc8rgvq97Mi+vmkefJIqrrFkvNRJICyHK52dJcx5T1pVw8921O+f5Fjpz5NOf++BpfV6w2k+zEzvijhsa8qnKmbVrMtE2LeWHtHG5e+DHLaitiQovBGd2Gke82BRXJyOy8O6Jr9M9thyLJ6Pt4MvdXBi/67IvdSpZugxiGRH19Q9yxy+7WaxgGocZG697ydPD7/WmfSVenYMDiA7vCZSD1PAmNuK6ujuOOO5bevXq1kvbFeAiN45Dx43nj1VcZPnwY1dXVRCLRuMQbmcCuQcqyTGFhAS++9DKPPzE57o7vhAwz1j+AwydOtOLhEz0ryigrK2PR4sU0JwlhFKFPo0pK8MY84QcPOjBhuYJJRaNRFiwoY+48Mz2tkUIo0TWNg8ea3vMtw5js8PkyWw+6rtPY2GD1b3ePssR7TU3NkGbti377/aa/x+7UKcZTxOUrioLLpcTlS0jXH3Hk0djYyCHjx3PohAlxZe9LiLnMyclhyquvMuv772MXR7XtOt2WVhdN07njtr9zz1134vF6qakxM0cqGSbOEWXCLofOYDBAQ0MDf7nmWpYuW2aF1O2vdLtVHLxghC5Z4Y0NC5iyvpQiTzbRNJ1QJIlGNcKxHfvTJdsMUZIliSdX/UBttNlMNdtG73PDMN9wywq5bj95Xj+NaoSy6s3MrS6nR3a+dY3s5lAtf/hhCkd9/W/On/0mF8x5k+vLPuDB5TN5dOWsmFVAZ2h+J47r1J/G2Hl9ys2HcFGDQTmmE4/Ovj+T2h8h+hwIBNJ64gsGV11dHZf+tK19s2/YjRvLCcdiyVPVC5Cbm5u8UCP90Uy6s7pUEH1vagrRrWtXrrz8cutd+/v2vglCPGTIYN549VVuvulGCgoKqKmpobk5HJdkxd7PdO03s4jl8fjkyZSWlqYkRnYT9+jRoyguLrKuuU3UR39WFqXzF/De++8njC8XfYuqKmNGj7IEgJKRIy0vbns/hLYfDAb54KMPmTVrlnVenKh+Xdfx+v0ceeQRceOZCDk5OSnHS7wfDocpLy+36mjrehXviJv3amtrUVwuSEH3DMO8yCQn5kuxu2i5NkTTM12zsiyjxjzKr73maiC10LS3IdaLpmncc8+91NXVIUm0WUO2Czsm3YELLzifd998k9+cdBKqppmpZ/Vdt+yJ+jMpW1XNMdq2bRsP//ORVmmR9ze0vGIq1mDzWti7lszAo7jQ0zBmA5PxeWSZozr2tZj76vpKPtu2ghy317wopo0Lxf68ZuimsxAS2S4Pkw86mR6BQjTDQNU1rp4/nU+3LifP7SPX7SPHZYbcdfLn8OnWZayq32GZfi7vPY4cV6xNqerHIKxrdPAFGZLXySTG7GOTVYZx8HbmkOlHvJtJ+a3aFVvEnTt1shh8srIMw8DjcbOtooLVa9ZY37Vl3AQRVxQFTdVYuWpVxmdyXbp0Tv7jPqZVLpfLPL9WXDz0jwfp0aNH0nNYO5MX5r5AIMBf/vxnPnhvOn+9/v/RvXs38xrL+noikUibiJLQykKhEP9+9rmUAoIgirquM3DAAHr37p1UoDIMA4/bzc6dO9mwYWPCc3JxRt6uqJiBAwda3x04+EAKYkcILcsW5/CrVq2mVqRvTVC/cILs17cPPQ84IE44SYTOsZjmdFYnXddZvnylxaTTvZOsDMMwWL1mDVu3bYs52CV+Xqxxl8tN586dd9tqsLuwCyS6rtPQ0MD1113LiOHDrb23t9pjH8dk9EU4yJUtXMi/n312tz3V44/CQNU0Bg4cwNNPTmbKyy9xxumn4/F4qKurszJM2n2E0q0TVVXJyclhxpdf8tPs2ZaAvj9q8fEMPqYxy5LEc2tmszFUjV9OnYjDLESiSY3SI7uAkoJuVhq/aZt+jmnvmTm0ZdLYOrWZS3sdzOHt+xDRzGQ5z6z5ic+3raCdN4iqm6F2OoZphkeiOtrMS+vmIUsSqqEzOK8jv+0ymLpos8X0E0EyJCK6Sq9AEQNy2qHHQvj2qaSWwTAJYtbU1ERdnXk3eF2ST73t33QOP/byk9VZVFRMfn5+Wgczkc967ty5cRJuWwQMse62bN3CgrKypBqd/VnDMOjVs1fSugwj9Rl8pm2z/y0YNGDlFX/koYeYeOihlrk8FQOyC2zCFNipY0euvfpqpr/7Ds/++2mOmTSJ4uJiyypiP2tMBkE0fT4fZQsXsmXLFmRZSRr+Jp53u90cPGZsWsFEpBZORB8kSSISDtOpc0f69e1r9TEYCDB06FDLiS9Rua5YuJdhJE4pJUmmp/e4g8cRDAaThheKOnv16pl27QvmMrd0Hjt27LDGQpSTDvY5lCSJeaWlVFVVp7R2iTrat29Pbiwi5pdiEvY5a2xsJBqN8vdb/sYlF1/cKlRtb9XVcp23hBiPQCDAc889z+LFi/fonFs8r9iOKg4eM4ZHHn6I96dN4/a/30rJyJFIksTOnTuJRqOtwkoTQey9puYmvp01y/puf9Tg41ybdcNAliWW11Xw2sYFBF2Zad4iEU6fYDFF3mx03SCsR/mhcp21Qfd02cqSRJOm0j+nPdf2m4Cm67hlmaW12/jnim/IdnlRDd20wLLLT0A3zJC7N8sXckGvUfTINmMZr+k3gS8qVlIdaTKd51rUZxjEBAKNkzoPRJHlWD6AvZttqhUyGCixkA6dMIH2HdrHkngka5d50KDrOt/OmmWaDdNowoaehDECPp+XIYMHs379+qQ3yYnF7vf5mP7++5x37rkWwU7myZ2sDEmS+PyLGVRUVCRMpGJ/XlVVCgsL6XlAj6TEUsrARG9ZRxI9J7eUiQ0ikQihUIjsrCwOO2wiN1x/PYMPPDDpVa3J+irKE2OkaRoFBQWccPzxnHD88ZSXl/Pd9z8w/f33+fHHH5EkKSNvfpfLxc6dO1m1Zg2dYmGLqfptGAaHHzaRJ59+eo+Ilq7rDOg/AL/fb0UGKIrCyINGMG369IxM54naqGkafr+fQ8aPi2OqLSG+79+vP8Fg8ktORLkej4eN5eV89PEnXHD+H1Myo5bvCuYkzLgfffwJfr8v7bxHIhGGDhmCy70rQmR3mHzLcbAz02R1i7U2aNBA/nbTTRwyfrz1Xbo129Z2ibvXhdUi1fOKotDQ0MCdd9/DKy+9aL2XKe0Q/RPlif8226EjSdC7dy969+7FRRddxPzS+Xwz61venTqNtWvXEggE0tal6zo+r4958xdY+3x/PIuPvw8eAwmZtzYuZGtTHYWeLNQMErMahgESjC3qHpsIiW2N9Sytq8DvcqPvoeO5GOiornFV30PI8fhQdQ0d+PvPn1EdaSLo9lme/3HvSgYeyYzD/+fyb5k88mSiusYBgUL+2v8wrpn/Hl6P0uoWLQmDqK5T5AlwbMcBsbHZ9xmMMqGnYtFe/qfLGDtmTIblGhx/4klUVlamN3Un6J7YpIqiMHLkQbw7dWocUWsJXdfx+/3MX1DGK6++yvnnnWed6SYjHvbNKELKKioqeOa555Lmsba3r6mpiRHDhsUlPcmkby3bIOpvEt744h0j5oCq6xATAGRZpmfPnowqKeGEE45nwvjxQGZZr1oyELsWDaa5335W3bVrV/5wxumcfvrv+eCDD/jnvx5l/YYN5h3sKc7WFUWhsrKSyh070mom4jNo0CAGDRzIkqVLE2bZi9srCeZRmPvHjh0Tow8SGGZ0xaBBg6yLh1KVlaw/0WiUzp07MzKmfSUjxmJsO3fuzMAB/ZlXaiYUSqU9Zvn9PPn00xx3zDF06NghbVKTlpYXt9vNy1NeoayszPI1SDb3IjXu0CGDrVDG3QlJs69ZEU2QrhxJMn0O+vbty7tvv0V2VjZRVTU9//cyc1dVFY/bzb+feopnnn2WmV9/TTAYTDg2Yh6CwSCzvvuOl15+hUsvudiy0mTSJvv8iufF+AjLhNhXsiwzcuRBjBx5EOedcw7P/ec/vDzlVeuCo1R1yLJMTXV1nJVuf0OcOqJIMtWREJ9tW4FPNs/eM2myWBB9g8XW3+sbq9kRbsAlyRjSnpkuZEwHvsPa9eK0rkNj4XcKr66fz4xtq8hxey1nu1ZtQ0IzDHLcXqZuWszXFatxywpRXeXcHiM5skNf6oQToG1hyJJEgxrmmI796Z6dj66bfgX7ehIzKV4sdFVVMQzD+jfRRyxkcdlMJpskGWEV/44qKUnphCWeMwzzNqkHH3qY+fMX4Ha7zes1jdaOKXaCEo1GrVz0N99yK5tiKWrTaZ6apjF8+PCU19imc/S0mwkHDRrIoEEDGDQw9hk0kINGjGDioYdyzllnccdtt/HetKlMffstHrz/PibENKBMNHe71icI3V9vvJEnn37aIhaCqNkvwFBVFQyD35x0Es/9+99mcpwUGfBEn8TVppnMvaqqZGdnM3z48LSOjanqy83N5aARI8w1h0g9DAMHDKBTp05JQ/GSQRDVpqYmxo8bR8DmrJdszZqpSP2UlIy0+p9qHXm8XrZu3crNt9xixYCLy1lavmufQxH7Xjp/Pg/+4x+WX0Kq/RGNRikqLmb48OFx+6utsK/Zjh07xqX2TdVXn8/H8uXLmTp1ulmOzb9ob9A5UUYkEuWWv93MoRMO4fLLLstobMSRyeOTJ7Ni5cqMTPV2q4XYU+Xl5Zx97rksW7Ysrgy7X+o4oegAACAASURBVJLYG0VFRdx4ww1ce/XV1rpPVZesKOzYsSPt5T3/TcTtLkmSWNdQxcr6HfgVN3qG5jnDMHDLLrpn5ZvlILGmYac52IbUSqtuC6wJM3T+1GecmfJWktgZbuTRFd/ijZnXUy7ImLYV1qLcu/RLQmoECQlFlrh78DEUewNEdM00yRoxM6AB2S4PZ3UfYZlqfwkJ7ZeQATMxOSb6TmyQAf37M2DAwIy82l0uF02hEH/685+ZPWeOed2ptOtMTNfj71s3DPP8vqGhgWv/3/V88umnSaV9OzRNIxAIcNSRR2YsyCSCiCceMngw0955m6nvvM3Ut83PtHfe5r1pU3ltyis8cN+9XHjB+QwfNoyCggI0TbNMwPaogXSau9Da/vP887z08is8+NBD3Hv//VY2MiEwiHeEVhGNRunTpzdjx4xJesVry/oyOVe1W1iOOvIIK2tXW0z1wpoyoH9/unbpEjcfuq5TUFBAr549MxI4WpYr1uG4g8da45eKUYh3jp00iWAwmNJML0lmuFYwGOTTzz/nmuuua3WVqFin9r9lWcbtdvPT7Dn86Yo/E2oMpY00kSTTPN+nVy8G9O+fMo4/HUQe/0suvpi333idN157lQMHDYqLYGkJsT5dLhcP/OMfrF69BkWRrbnek6MZex8bGxs5/fencfZZZxEOhzn44LGccvLvqKurS9lfQQd2VlVx/wMPxu2ZdMKssIA1Njby15tu5qOPP+H8iy7ms88/t4Rle/igsHiI2zknTjyU4uLi9ApMzNKwLxMB7SlahcktqNlCVNcyJpAGEEWj0Jtt5WpHgo2N1eYg7Kn2HtOkRxd1Z1xRDzRdR5ZkXl0/nzWNlfgyEEQkiGnxPmZXbeTxld/hkpVYfHt7bjvwaJq0aCwkzkCJ1Xlk+76MKer+yzjXxdBWQtrWj3gvXbnJ6jK9fl38/tRTiKrRlJtUPO/1eqmoqOCPF1zIE08+SU1NTVyMuf0jSRJfzJjB6X84k3fefZecnJyMMsY1NTUxYsQIho8YDpC0XemETUHcFEXG7/eT5c8iK8v8CFO1IPB2IcVuFm053onGRZTjcrn48quvuOfe+8jNzcXj9vDE5Kc49fTT+eLLL61yhVYv6hO3c5WXl6dkJqKeQCBAfn5+WgJpP4MtGTmSosKiNnsIyzHmNWBAf+vuADuzNQyD0aNH7dZ+ag6H6dG9O2NGj7aElnRrA2DYsGGUjBxJKNSU0ZrNyQkyddp0fn/GH/jss88s4SrRp6Kign899hjnX3QR27fvwOtLfmRib1c0GuWUU0625nJ3zbzCUtGhfTs6d+5Mv759ueGv11vJbZK9YxhmVsKdO3fy4EP/SGhN2xOIOvrE0v+Kubjqyr9YFpxUe0TTNHJzcvjs88956+134gTnlvOXSGi+/4EH+eqrr+jYsSMVFRVcfOll3HDzzaxes8aaO7sWD+atd9u2bbOcZVNB13XyYzd67o/meUhwXezq+h27TBOZmIsxkAyQWjy/I9wQ+11qc/x7fPmgGjoTi3uR5fKg6TrVkSZe27gAt+xqdXaetBzJNNUHXB6eWP0dh3foQ0lBVyK6xlk9DuLHyg28vKGUQo+fiK6Trbi5uu8hyJKEpptnh7+IBr+fLhSIP1udNGkSQw4cbF0Ak+oMWDD5SCTC/Q88yOtvvMGI4SMYVVJChw7tCQQChMNhysoW8uXMmdb1mYK5Z0pwLrzgfNMZMsVFIZmY6FMdH8Cui3OSnfsmg50oCUFp5apVXH/DDdY6NgyDnJwgCxaUceFFF3PYxImceuopDB08mPYdOuCNpXjdtm0bTz71NEuXLUs7/qqqUpCfT+fOndMK7mK+DMMgOzubiRMP5eVXXkl6+UyiPmox/4vhw4ZZfW45XqNGjoxLvpPpHlajUQYMGEBxcbGlPacy0dsFqYsuvIBZ332XUR90HYLBIIt//pmLL/sTQ4cM4YgjjmD4sKFWmt2qnVXM/OYbvvvuezZu3EhWdhZeb+qMcWIPhUIh+vfvz4nHHx+nve/O/hfvRaNRdF0nEolw8NixnHH673n+hReTOqcKJpqTk8NHH3/C2++8y+m/Py3OYrMn9Ei0KxKJAFi0o2vXLlx26SX8/bbb0zrOCiHk4Uce4ZDx4+jUqZPFwO1MXdQn5vqll1/mhZdeIi8vj2g0ah3xvfzyFD799DN+c9KJnHD88fTq1ZPCgkJTSMZg0eJFPPKvRwmHwyl9KIT/RLduXdu8jn9JtEoQ3qiak5GprVjCDD1r5wuQ497lNaoZe67tGobp2paleDikuKepWcky3+5Yw4q67bH4eiPjIwADA5ck06BGuHnhx0wb/0f8LjearnHf0ONYUb+DsurNaIbOuQeM5KDCrtbtdr/YxO1nC8QOMQZCsr7m6qu45LI/ZfSe2JSBQIDNm7ewfsNG3nn33biNIcsyisuF3+eLiy1NRSxdLhfV1dUcM+kYjph4WNz5d8J3MhQ2W9abjAC1FYKoyrJMTW0t1/2/69m+fQeBQMDqr7jXWtd1vvzqKz77/HO6detG1y5dKCgwo0CWr1jB2rVrLaexVJqQqqoUFhXSo3v3jIiQaIOiKIwdO4aXX5kCZKbZ2ds/cuRIgDjmJT7de/SgZ48ebNi0CY/bnXbc7MLl8ccdmzFBFZq3pmlMPPRQjj/uWKa/9z75+flJjwjs61yM78JFiyidPz/O6VGU7fF4yMnNifOnSNemaDTKVVdeabVjT8y8uyxz5rmyFBuna666iq9mfs22bduSXrNMzHHY4/Fw/4MPMnr0KLp369aKie5Zu3YJzea+1jn7rLN47733WbR4ccoLcIRyUF6+iX88/E/+9c+H4+bePhdmOloXX3/zDbffeVecc6goPzc3h/r6ep597nlefOll+vTpQ7t2xeQEg9TVN1BWVkZjY2NaB0lJMp0Uhw4ZYtW9P5rqW5notzXXI0sSCnJGbFNGQpFkIroWp02vb9y5240Sk+KSFRrUCAdkFzC6sJv12+dbVxALKGnT4hOCR9DlZU7VRm5c+CFy7Hb3oNvHsyWnUewLkO/J4q8DDjPbYbR2rtmX+KXq2V3YCeZxxx7LWWeeSXV16nhf8Z4wn3m9XoKBALm5ueTn51NQUEB+fj45OTlkxdLMpjMLC2LR3NxMhw4duOXmm3C5XXF1JWxHBumJ9xWEoCMY3k03/415paVxzF08J0yGgUCAvLw8KisrmT1nDh98+CEffPghmzZtsm6SS2WeF8xk7Jixlrk8nWObnRGPGjmS7t27pT3nt0NVVXr06EHXrl3j+iSg6zqFBQUM+P/tnXl4VsW9x79z3j3vloU3O0kgEZKwBCFskiBbaVFBeUDkam9BltpWexGw4nW5tnUDbatYq1i7WG/BYqvtFa361OWqj16vbV3bogKxV0IIkLxJ3iV5l3PO3D/OmZPzrnnfLIBxPs/DE/LmPXPmzJmZ38xvfkt9fcowt8nqpBhCFfQb7mUwLvUCihCCW268CZVVlejt7dUy+qW7J9vN2mw2uFwurb/m5+cjNzc3Js57JscfbEF66erVWHnJxTEL0qFuItjlBkEJqe3xePCd7dvTGhcSAm2XfOLECdxx510joqpnP5V3TZFjs2H7tm0DHn3qtQxPPvUUnn3uOTWMbb9dCvuO0WjEZ0eP4rrrdwBIXFiy+cdkMsLtdsFms+Hw4cN49bXX8V9PH8Crr70GURQz8tiJqlqxxunTh9w+I0mCkV2J1YWeSAg+MYSwLGrn2wSKlb2BKIKfUiWCXFCKwBvpQ67ZBgFE+77daMmqIlqnUu+jJLrpRa7ZijumLlNizgMIyyLe6vwMVoMxYyPA+GcUqQy3yYZf/987eOjwmxCIgKgsocqRj4caV+He6StQanNr5/GnU/Vytql44tGvmGVZxi0334R58+ahu7s7IyHPytAb2OnPszNRDep3c5RS7LzzTtTUVMe4NKW8/gw2L9t5iKKInXffjacPHIDb7U7pLgT0x79n2cny8vKQl5cHs9msLQLSTUTMGvmyNZcm7HrS1ZMt4srKyjBl8qS0Bkd6+q3cz4NR1cLE14l9Nqm+PmMrekEQEAgEMWP6DJSpatpMzqzZ8zID0bLyMvxg1y6YTCZEdSr+dNcD/X02mf1Fpn3WaDTC5/Nh+vTp+O5/3BLz3odzYd+/U5aw8pKLsWTxYvj9/pTpltk7cTqd+OPzz+PAM89q7z/Zefdw1W3RwgVYvnx52rr111HpAzt33Q2v1xujFmfteLy9Hd+6+hq0t7fDksR1tL+t+1NnW61WuJxOZYPhdGpjZsAjlmAQs2bPUrPKDW/Uv+EkZnTJlOKmSUuwb85XcXHZZJTZ3DALBkRlCb1iFB3hADrCAfRKiluA22TD3IJK7GlchV/OWos8Sw5kNdtcsTWzIBaUUm3xIEBJExsQwwiKYawonYTnz9+MhUU1WsCdQ/4O1f1u8AZ8yougsAhGPPDJGzgZ8sMkGCDKMs4vrMaKssnKiyQC6OlUz2NgI7AzDVsNs4nRYbfjJ/fvRl1dLXp8PpjUkI8jpYnQCx9/IIBbbroJX/ny0gHPY/sLGJFqZQyr47vvvhcjNFNqHFIImEx2iywfwNrL1mgZ1zLpy0wosn8Lzj9/wEhw7J6UKtbP0xoalERUSSZZJtSnTp2CHFWrkMmiQxAI5syZDYO6g8t0XOrVw6IoormpCbd//3uIhMMJfu7DjaaNNBrh9/tRXl6G++/9kWbwOFCUw8HCPH8EQcCO67+T9khCX1ezyYTb77wDbW1tIxa8Rb+j3nrtFowpGNjllsUoOHToEH50327tM726vqWlBZ8cOtQfdjadJi/JuBoo0JC+D9ntdmy55tuaRuJ0anmzIdbIDkCh1YE1lQ1YU9mAoBjBR76TOB7ywR8NoyMcAAVQaHFijCUH9e5ilNr6Bbmk8292GM0wEJJW0U8IACIgKosISaKa5EZA05hx2Fg9GyvKJgGAlsWOUorD/g4tRO1goZTCQASEZRHLy+tRaHVCkmUYiOKOR6EcPWgv7DQK+KEYJJ4uWLswQVtaWopfPPIIvnn1NfjLO+8gPz8fhNIBB0y29yREyXve26u4Id15223YcOX6jNTO/QUNuSqDhk1KJpMJD/z4ftx08814+sAzyM3NjfHRHUp76dupu7sb5503F9dfd12MnUM29SWEoGleE/Ly8gbcxROiGFSVlJSgvq5Ou5/+Gr3KtGHqVLhzc7UjnnTPxIwuFy9apC1eBtNWzB1q7WWXQZIk3HLrd5UohDp3wOHsr+z5u7q6MGXyZNx/330455xzBgygMxRiz7sl1NXWYvPGjbhr1y4tlXAyjRFT1be2HsNdu3Zh9733DvsOnt2HjYXq8eOxadNG3LVz54AGd5LaB/bu24evLP0SmpqatHaUJAnzzjsPTzy+D9/41tX47OhRuF0uLfvncIwrNnb8fh++e+utmDmzMfONxRkiQUUvUyWWO6UUdqMZM/LLcVFpPf6l8lx8e0Iz/m1CM9ZWTsOS4gkxwh2AFiyGEIJCqwNdkT74xBACYjjhny8aQlekDx3hAOxGC6bllWHT+Fn4Q/OV+F3TOqwomwRRVlR5RvVMiRCC9pAfESoNWuZSqGFv5Sgq7XnYNuF8Jee4+vwCO4Yg6V2dRoqzfQcPxK7A2eCqqqrCY4/+EmtWrUYwEEAoFIqJKQ5kt6uP/y4TAN6uLpSWlOJnP30YG65cnxDr/WwcZHpYexQVFuKRhx/GjTfsQCQaRSAQSIhAlml76duXldHZ2YkZ06djz4MPaiFhs/GzZm0pyzJKS0swraFBq2O6ayKRCMaWl6OyshKSlOjbre87brcbUydPTusuxeqtuN3VoXr8+JhyMkXfP5iQv+Lyy/HTPXtQWVmJrq4uTY2uZzB9Vv8eIpEIuru7cfGK5Xh8317U1dUmHCWNRJ/VP68kSdi0cQPOPffctL7x7LtutxtPPvV7PPf8C9p593DWU38mL8syrly/DlOmTNHqlgrWXqIo4o67dmo5GZhBoCzLmDZtGn6zby/Onz8fXd3dWoKm+EVmJlBKFX0+lPlHFEX09PTghh078M2rroqJVnm2zjuxoWopVVU7qkGC9ntqKKU4EQ7gmWN/R62rSAtXu2rsFERlCV3RPrT1+hClkuYyJ4CgypGPsbZcjM1xo9o5BuPs+bCqfvRs1WUUDDgVDsAAArdJMb5idgGEDlJFTykIERCSRFxfuxBFNqfqW396z9rTMVLCaqByB3NfvZD3eDz4yQP3Y8mSRbh3924cPPgx7PYcWNQc8uz7qVbU+s/02bwkSYLP54PD4cCa1atx4w07UFJSkhAxjj1D+kZI/5zxfxvODT+rI7MfEAQB127Zgrlz5mLnPffgrbfegtFoRE5Ojnb/dLv6+F0iAIRCIYRCIVx04YW45+5dKFCD8AzGwpdNpmazGc1NTXjt9dfT9g9WDxaZjVIJhCTfmWthj2c24tnnntOiryXDYDAgHA5j8aKF2oSejSaCoe8jrM8uWbwIDQ1Tsfv+H2Pf44/D7/fD4XDECAWmiUrXZ/XaEUopQqEwQqE+VFVV4eubNuHK9eu0HXW2RwL6PpmuzyZ7XqZSdjgcuPGGHfjq19al1eSwsixWK3bevQszG2fA4/GktBPJZD5J9zdRFOFyOrF961Zs+vrXB9QQAYDT4cD7H3yAh/Y8jO3btsZoXthm49Ff/ByPPvYYfvrIz9Da2gq73a75q+u1EvHvNNn7lCQlxazL6cQdt92GjRuuzCgU9dlAgh+8fhAQAC+fOARvuA9lOW7tQXoifWjr8+FoXzc+8Z/C37rbcdDXju21C9DkGYewJKLKXoAb6hdnXBG9wZxACLzhXuz/7F38vOVt7Gy4EEuKJwCAZuQ3GKh6BNARCmJz9RxcUTUDoixDIGfeuI21uyRJCIfDaYNUsO/qJ55Myo9EImlDMAqCgHA4rPmtDlSufrCwFTQArLzkEjQ1NeHXe/fi6QPPoKWlRcvUZDabYTKZkk5y7B1Eo1GEQiFEolEYDQbk5eVhxfLlWHPpasyZPVtrp2wGWHz7hsPhpO2rtQELT4rhE/L6RY6WUEaWMXv2LPxm3148+dRT2L//Cbz/wQcIh8MwmkywWa0pjRfZs4fDYYRCIQiCgJqaGmzauAH/esUVABDj7qSvQ6b1ZfWc39yEe35oRjDYC0FILeBDoRDmNzelnEDj6zB50mSYLRb09vamrAelihV744wZQ5pQ9e3Pnk2SJHjGjMHt3/8eLrxgGX6zfz9efuW/0dXVBVGSYDaZtD7Lro0vk8oyItEowuGwZoNQU1ONlRdfgktXr0JRUZF2zJDNu2DfY+M21ZzA+jRbIOnL1y/Am5uasObS1Xj0V49pMSZSIQgCDv7jI9x+512470c/jGk39n82jlItHtlYiq+X/v/sHXxpyWJ8ZelS/OHAAbjUyJXpMJlMeODBBzF/fjNmNjZqCyc2D5nNZly1eTMuWLYMT/z2t9j/xG/R1tYGSZJgNpthNpsVbQ2NPRRlC8hIJKJ5jrhcLly8fDmu/tY3tSRSek3UmZYd6UhYXhOinHUIAA75O7Dhf/cjIEbgMJq1hohSxeguKkuwGIywCSbkW+x45cQRdEV6kWfOAQBIulXfQJoAgRC09/nxt57jeOXkYTzbdhBHe7sRlSUlS5zakG6TBUYiQM5m9077feC7I31YWFSD26cu0yLUMa+AM/mi2L3dbheqqqrgcChZ+ZLBBofNao25NtV3WWcsLS1FIBhQY0EnflcQCAKBIEpKSgYsN77eMUJLnTS3btmCTRs24K/vvIuXXn4JH3zwIdrb23G8vR0hNV2ooLuePVdBQQGqq6tRPX48mpvmobm5GeVlSo53NvAHEyQFAHJzczGuqgpOlzNp+woCQcAfQFFhoVIvDH/f0E8MRnXytZjNuHztWqxauRJvv/02nvnjH/Hue+/j008/RWdnJwxGo3p8019nSZJgMptRWVGButpaLP3SElywbBkcDoeyYNa9k8HUX3/dxIkTMX9+Mz7++GNYLNakCw5JUvJu19fXJ2gW4stlf6utnYhZjTPQfuIkzObE3OmEEIT6+lBdU42GhoYhnb/ry9TbkTAtydw5czB3zhwcbW3Fa6+/jjfeeBNHWlrQ2tqKzs5O7Vp9n2fCpKS4GBUVFZg0qR6LFi7EjOnT4XA4tHZhsc+zqTf7XklJSdo5wWg0ICcnR7ufvvz4e2279lr87e9/RzAYhDCAHROpIPjzX/6CN954E83NTTFeGwaDARUVFQgGg2kEvDKfuN3utPVi73Tb1q040tICSZaQOjumgkEQ4A/4sW/f42hoaIBRt3DSz0Njy8uxfetWbFi/Hn968UW8+NLLaGlpwdHWVni9XrUe6rhShbvNZkVZaRmqqirROGMGLli2DLUTJwLIfmNxpiE0bqRS9QzeKBhw64cvYPcnryLXlIMo7V9RCUQxnhOIcmYvq5NOVJYw0enBwsIazC8cj4WFNdqZty8aQkQSIRABIpXRJ0XRE+nDR/6T+Mh3Cp/4T+Jj/ykc9ndABoXNYILdYEZbyIc9javwtSolc9Trp1qw9s1fa2fmA8Gc70zEgK5IL+pdRfhd0zqU2tyQqKy5351pWGcJBoPwBwJpF0TsheW53TAPkLiB/Y1SCq+3C6IYBUjqk36ZKpa0+fn5WXfg+J2DJMsw6gZ/JBLB8ePHceLkKXR0nMKpUx041XEKoVAILpcLBQUFKCsrQ5HHg7Kysph0omwS1qvu2b0yrRshBIFAAIFgMG37ylQxNsrLzVXaeoQG8kDt5ff70aIKmENHjqC7u0cVSBIcdgfGji1HRUUFKioqUKouyoDESYjdY6h1DAQCac/hZaokF2K5zdMdLeif2+v1prXwZrET9KF2h2ty1ZfDdmb65/P5fDh27BhOnjqF1mPH4PV2wefrgdFoRK7bjcLCIpSVlcLj8aCyoiLmWlGStIyDg3kPrG5erxeRaDR9n5VluN1uLbhLvABlEELQ09ODvlBowE0XK9dsNiMvLy+mDEopOjo6kmbwjLmeUjgdjrQBmfRtk8mzAtDyj0hqkhiWLyC+z8fPGwDg9XpxrK0Nx48fR/uJE6q2mkCURBR6PCgsLERxcbG2qWB1ZAtT9vvZLtyBOAFPVXUFAeCPhrH01YdxJNAJm8GUVE0Zr7IhhCAiSeiMBLCz4SJcV7sAlCrBc1a/8Sv0ihGYBANCkoiT4YAyqUFZUMiUwioYtXN4CuX8vzPcixvrFuOGSYtAQHCyz4+ml34CvxiGgaQ/L2Z1MoDAG+lDY3459jSuwgRXoWI1P8iBx0lP/O6ODbJ0ltLJ0O8Y0ql5P+/ET0xsZ5hNe+kT3egZrnbKZkLLavKjNGMvleEW7vpy43/X7/CzIVXq0LOlv55tgimZDBlqOfrP9Oi1f5kgy7Jmh3a2vs+BSDiDl9RUrH/tasU/g12wCkb0i/1YElQulMIsGFBpz8dK1ZecEILfHX0f73UdQ64pBxKUFZ9JMGglKmkKoWkD2HUypTAJBrzX3QZWhQKrHRNdhXiz45+wp1h4MJW8QBQfxY5IEEuLJ+KhxtUosjo0l7izqbPrJ69MztSBWIvkTHbwmZYLYEiq3WTqN3b/+HroB3d8GcOpChtMOwiCMKI7eAYrO0Z1b+xXHcd/D4BWL/b5SKkN43dDmZDJhK29DwA0w3JHyh0pWXnsXvHvQP/9+HejvDdjTJsNBW0ezKLdU/UB/WeZlpesXPb7cM1T8Z9nW7d05aeah5K901RlGj/nm8AEK3r288Pu4/BHw/BY7RApzTgvfECMYHr+OIy156oLBhnPtB2EzWBSUr2qoWEB6H5SsDSt8WdcFsGA97qPob3Pj2KbEwYi4IKSiXjl5CE4jWaIiFURUXXFZSACgmIEFBRbJszHzfVLYDOaIKoLGP0EeTagn+Sz7Ujpvj9S5WZbhn4AJnPTiR+Y+sE63PXIpjyiXDTk+2d8v5h2SJcVr79ew6GKz6Q+2Vquj0S/PB2TbHy/S+dWxn6mWogNRz2Go92HMg8kK3c455PhqFu68uPvAaR3GR2J+edMkRCLXlB9wD8NetXVS7K9e4rCCEFEElGZkwezoKwdDgc68FlvF4yCAbJ2Wp+chFUnITARAzrCQbx44pC2q19WUodyWy7CsgSiWEEp10PxmY/KMrzhPlQ7CvDY7Mtxx9Rlan57xbaAUjriuzJOIvoBzP6f7B/7+xedTNqKt9fIkk1/5e/g88FA71T/nc87CYFuCACZymgP+bXANZlCqeLGVmnP1677NOhFR6hXjTyX5YoPyiZFpDKeaz+IiKQktKly5OOKyukIiCElxC1RrLHDsoiucB9yTVb8e/0i/GnBN3BBaR0kWVlaCLpAPKPlBXI4HA6Hk4ykbnKiJOFkOKAIeJL8/D0ZlCp+5i5Tf6IZb6QXfjEEh8mJaIaqfj0Spcg12fDC8Y/wXvcxzCqogExlXDNhHl5o/xj/8LVDgACRShhnL8DK8slYP24mKuyK1SczpmP143A4HA7ni0CCgNcsz9luV3dmPhAyoTALRpTaXNoOub2PaQKy3b/3Lxi6IyHM94zHBKcHsmpxn2fOwe1TlmHzn5/AuXlluKi0HheV1iPf0u+DLxDCLeU5HA6H84Uk6Q6eylSL/Z7Kgj4d+m+bB5MUhgWmEQT0REKodxfikZmXItdsU3yF1XP0BUXVeOfL22A3mjW/SUn1y2SuDWeTpTyHw+FwOKeLBPNMZddsgMdiV4QlzcLClSoLgojcH1M635IDkWaecpCqW32TIKAnGsI5Tg9+PmttbMx49Fv7O00WCIRAVH0W9aFsuXDncDgczheVJAJe2cW7TVbISC+YY1xDoAjlXjGKI4FOzU/SabQgx2BWMtSlqQgLssOi5J0KBTEnvxJPNq1DnasQkizBwAJI0FhfVEqpkppWt2PnhnQcDofDlk2JdgAAAptJREFU+SKT4AdPlXg18FjsIJTAJAhKmFpVOlNQze+cCEqIv6gsISSLiEgSxlhyUOcq0oRrsdWFXLMVYUmEQSCIV/frBbKBEPSKUYhUwvrxM/G9yV9GgcWuBqZJTNKQzt+Tw+FwOJwvMgmR7GQqgwgCapxj0B3yK2p6dXesxJ8X1N24EjtbohQFFjtqnUVYUlyDr1U1YpyjQDnDB1DjGAOPxYFPA50wCv2R5/TGfIQAEUmCT4pgvKMAO2oXYm3luQCUM3WDIMQsLDgcDofD4aQnQcALqtZ+WUkt9jatQ2e4F0d7u9Ed7UNPJISuaB/KbS6YBQM8FidqnAWY4PRgRl45zAalOKoKd4nKyLPYMMVdjJZABwwQ+kPdEAIZFAExjKgso8jqwFU1c7G5eg5KbS4tE12MLz6X7xwOh8PhZERCspm0Km5KIarR4JLBLNiVADUEoizBQAT8vvVDrP2f/4TTaIUMqgbTAexGE6a4S7CgsAaXVUzDOEe+Vo4AbgXP4XA4HM5gSZoulglWUe9yhsQkCxT97nTJBDLLxOOLhnDPwVfQGemDkRAUWZWd/2R3CcY7CmBTM8jpXdxOR5IPDofD4XBGKwkCnhGfwjJtIUPcaYuypMTAT1Iuh8PhcDic7Ekp4IcD/SIhlZOcXqXP1fEcDofD4QwPIyrgORwOh8PhnBmySzTM4XA4HA7ncwEX8BwOh8PhjEK4gOdwOBwOZxTCBTyHw+FwOKMQLuA5HA6HwxmFcAHP4XA4HM4ohAt4DofD4XBGIVzAczgcDoczCuECnsPhcDicUQgX8BwOh8PhjEK4gOdwOBwOZxTCBTyHw+FwOKMQLuA5HA6HwxmFcAHP4XA4HM4ohAt4DofD4XBGIVzAczgcDoczCvl/5UgOH6e06/cAAAAASUVORK5CYII=)" @@ -10,56 +10,69 @@ }, { "cell_type": "markdown", - "id": "ed9b966b", + "id": "c8572ae1", "metadata": {}, "source": [ - "# ๐Ÿ“ˆ Feature Monitoring\n", + "# Feature Statistics Monitoring\n", "\n", - "> **Alpha** : Feature Monitoring is still in its alpha version and is not yet supported on https://app.hopsworks.ai. The public api is expected to evolve and stabilize in the coming weeks, your feedback is welcome!\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/logicalclocks/hopsworks-tutorials/blob/dev/integrations/monitoring/feature_statistics_monitoring)\n", + "\n", + "**Note**: you may get an error when installing hopsworks on Colab, and it is safe to ignore it.\n", + "\n", + "**Alpha** : Feature Monitoring is still in its alpha version and is not yet supported on https://app.hopsworks.ai. The public api is expected to evolve and stabilize in the coming weeks, your feedback is welcome!\n", "\n", "This tutorial aims to help data science teams to implement feature monitoring in their production pipeline. ML-models rely heavily on stable data trends over time to keep making high quality predictions. It is however often cumbersome for data science teams to keep an eye on whether their assumptions hold true. To solve this problem, Hopsworks provides a way to schedule regular jobs on snapshots of data to test those assumptions. The regular collection of aggregated statistics on Feature data is an additional tool for data teams to help keep data quality high in the feature store, building confidence to re-use features across relevant projects. In addition, alerts and scheduled data collection reduce the maintenance burden for teams which have ML-models in production and enables you to detect data drift before customers start seeing an impact.\n", "\n", "Hopsworks feature monitoring capabilities can be summarised as:\n", - " - **Asynchronous**: The monitoring is performed in separate jobs from write operations.\n", - " - **Historical**: An isolated data point means nothing. By performing regular computations, unusual pattern can be discovered.\n", - " - **Production-oriented**: Feature monitoring is primarily a tool aimed at easing the burden of maintaining model in production.\n", - " - **Alerting**: Raise a warning that something that you did not expect has happened.\n", - " - **Reporting**: Guide the decision on whether to retrain a model or re-engineer a Feature.\n", - " - **Data Quality**: Aggregate and collect information about the quality of your data pipelines. \n", + " - Asynchronous: The monitoring is performed in separate jobs from write operations.\n", + " - Historical: An isolated data point means nothing. By performing regular computations, unusual pattern can be discovered.\n", + " - Production-oriented: Feature monitoring is primarily a tool aimed at easing the burden of maintaining model in production.\n", + " - Alerting: Raise a warning that something that you did not expect has happened.\n", + " - Reporting: Guide the decision on whether to retrain a model or re-engineer a Feature.\n", + " - Data Quality: Aggregate and collect information about the quality of your data pipelines. \n", "\n", "Feature monitoring in Hopsworks is not intended for:\n", " - Gate-keeping: Feature monitoring is aimed to monitor data already in Hopsworks, not to keep the data out.\n", " - Real-time: Computing statistics on mini-batches of data is very noisy, which can mask long-term trends.\n", " - Accurate Logging: Not logging data, only the summary of a snapshot in a given time-window \n", "\n", - "## ๐Ÿ“— Feature Monitoring Documentation\n", - "For more information on the intricacies of Feature Monitoring, see the [Feature Monitoring Guide](https://docs.hopsworks.ai/latest/user_guides/fs/feature_monitoring/).\n", "\n", "## ๐Ÿ—’๏ธ This notebook is divided in 3 sections:\n", "0. (Requirement and setup)\n", - "1. Get started quickly with Scheduled Statistics\n", - "2. Setup Feature Monitoring with Reference windows\n", - "3. Explore Feature Monitoring results\n", - "4. List Feature Monitoring configurations" + "1. Get started quickly with Statistics Monitoring\n", + "2. Single Feature Monitoring with Reference\n", + "3. Feature Monitoring Result Timeseries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd1541d9", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "# Mute warnings\n", + "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "code", - "execution_count": 1, - "id": "78326a44", + "execution_count": null, + "id": "d51493cb", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://hopsworks0.logicalclocks.com/p/120\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], + "outputs": [], + "source": [ + "%pip install -U hopsworks --quiet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2ee0266", + "metadata": {}, + "outputs": [], "source": [ "import hopsworks\n", "import numpy as np\n", @@ -72,21 +85,23 @@ }, { "cell_type": "markdown", - "id": "e68141df", + "id": "7d2e72bb", "metadata": {}, "source": [ "## ๐Ÿ› ๏ธ Requirements and Setup \n", "\n", - "This tutorial is aimed at data teams who already have some level of comfort and operational level using Hopsworks platform. Therefore we will refrain to go in depth into how to sett up your own Feature Engineering pipeline. You can use existing Feature Groups and Feature Views to follow along the tutorial adapting when necessary. Otherwise you can run the setup cell to create a dedicated Feature Group, Feature View and Training Dataset." + "This tutorial is aimed at data teams who already have some level of comfort and operational level using Hopsworks platform. Therefore we will refrain to go in depth into how to sett up your own Feature Engineering pipeline. You can use existing FeatureGroups and FeatureViews to follow along the tutorial adapting when necessary. Otherwise you can run the setup cell to create a dedicated Feature Group, Feature View and Training Dataset." ] }, { "cell_type": "code", - "execution_count": 2, - "id": "42e1c8b0", + "execution_count": null, + "id": "b2bbe076", "metadata": {}, "outputs": [], "source": [ + "internal_kafka_value = True\n", + "\n", "# Data loading\n", "credit_cards_df = pd.read_csv(\n", " \"https://repo.hops.works/master/hopsworks-tutorials/data/card_fraud_data/credit_cards.csv\"\n", @@ -104,7 +119,7 @@ "age_df = trans_df_raw.merge(profiles_df, on=\"cc_num\", how=\"left\")\n", "trans_df_raw[\"age_at_transaction\"] = (\n", " age_df[\"datetime\"] - age_df[\"birthdate\"]\n", - ") / np.timedelta64(365, \"D\")\n", + ") / np.timedelta64(1, \"Y\")\n", "\n", "card_expiry_df = trans_df_raw.merge(credit_cards_df, on=\"cc_num\", how=\"left\")\n", "card_expiry_df[\"expires\"] = pd.to_datetime(\n", @@ -115,51 +130,11 @@ ") / np.timedelta64(1, \"D\")\n", "\n", "trans_df_raw.sort_values(\"datetime\", inplace=True)\n", - "trans_df_raw.datetime = trans_df_raw.datetime.values.astype(np.int64) // 10**6" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "a1ad04fa", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://hopsworks0.logicalclocks.com/p/120/fs/68/fg/14\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "719e5cea6dca47bdbfd8e87f5b145c45", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Uploading Dataframe: 0.00% | | Rows 0/106020 | Elapsed Time: 00:00 | Remaining Time: ?" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: trans_fg_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://hopsworks0.logicalclocks.com/p/120/jobs/named/trans_fg_1_offline_fg_materialization/executions\n" - ] - } - ], - "source": [ + "trans_df_raw.datetime = trans_df_raw.datetime.values.astype(np.int64) // 10**6\n", + "\n", "# Feature Group\n", "trans_fg = fs.get_or_create_feature_group(\n", - " name=\"trans_fg\",\n", + " name=\"transactions_fraud_batch_fg\",\n", " version=1,\n", " description=\"Transaction data\",\n", " primary_key=[\"cc_num\"],\n", @@ -169,34 +144,9 @@ "_, _ = trans_fg.insert(\n", " trans_df_raw,\n", " wait=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "176ad761", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature view created successfully, explore it at \n", - "https://hopsworks0.logicalclocks.com/p/120/fs/68/fv/trans_fv/version/1\n", - "Training dataset job started successfully, you can follow the progress at \n", - "https://hopsworks0.logicalclocks.com/p/120/jobs/named/trans_fv_1_create_fv_td_16022024133852/executions\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "VersionWarning: Incremented version to `1`.\n" - ] - } - ], - "source": [ + " write_options={\"internal_kafka\": internal_kafka_value},\n", + ")\n", + "\n", "query = trans_fg.select([\"fraud_label\", \"amount\", \"cc_num\"])\n", "\n", "min_max_scaler = fs.get_transformation_function(name=\"min_max_scaler\")\n", @@ -206,7 +156,7 @@ "}\n", "\n", "trans_fv = fs.create_feature_view(\n", - " name=\"trans_fv\",\n", + " name=\"fraud_batch_fv\",\n", " version=1,\n", " query=query,\n", " labels=[\"fraud_label\"],\n", @@ -222,42 +172,9 @@ ")" ] }, - { - "cell_type": "code", - "execution_count": 5, - "id": "29ae9922", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Training dataset job started successfully, you can follow the progress at \n", - "https://hopsworks0.logicalclocks.com/p/120/jobs/named/trans_fv_1_create_fv_td_16022024134233/executions\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "VersionWarning: Incremented version to `2`.\n" - ] - } - ], - "source": [ - "_, _ = trans_fv.create_train_validation_test_split(\n", - " description = 'test extra filters',\n", - " data_format = 'csv',\n", - " validation_size = 0.2,\n", - " test_size = 0.1,\n", - " extra_filter = trans_fg.amount > 423,\n", - " write_options = {'wait_for_job': True}\n", - ")" - ] - }, { "cell_type": "markdown", - "id": "80941734", + "id": "45720ec1", "metadata": {}, "source": [ "---" @@ -265,30 +182,38 @@ }, { "cell_type": "markdown", - "id": "be3b19d0", + "id": "41be3e46", "metadata": {}, "source": [ - "## ๐Ÿš€ Get started quickly with Scheduled Statistics\n", + "## Get started quickly with Statistics Monitoring \n", "\n", "Start Feature Monitoring early in your project development. Often the simplest step one can take to get started provide the most bang for your buck. It is especially true when using Hopsworks Feature Monitoring capabilities. Indeed, in a couple of line you can setup a job that will regularly compute statistics on snapshot of your data. The results are stored in the database and can be queried through the python API or simply visualised in Hopsworks UI. As time goes, you accumulate more information about how your data evolves and what to expect. The individual value of aggregated statistics can help in some situations, but their compounding value is far higher. Especially when it compounds with data validation metrics and other observables as well." ] }, { "cell_type": "code", - "execution_count": 6, - "id": "b82685fb", + "execution_count": null, + "id": "c8961e9a", "metadata": {}, "outputs": [], "source": [ - "fg_full_monitoring = trans_fg.create_statistics_monitoring(\n", + "fg_full_monitoring = trans_fg._enable_statistics_monitoring(\n", " name=\"fg_full_monitoring\",\n", " description=\"Compute statistics on all data of all features of the Feature Group on a daily basis\",\n", - ").save()" + ").save()\n", + "print(fg_full_monitoring)\n", + "\n", + "# Or with a Feature View\n", + "fv_full_monitoring = trans_fv._enable_statistics_monitoring(\n", + " name=\"fv_full_monitoring\",\n", + " description=\"Compute statistics on all data of all features of the Feature View on a daily basis\",\n", + ").save()\n", + "# print(fv_full_monitoring)" ] }, { "cell_type": "markdown", - "id": "95096974", + "id": "8f04c113", "metadata": {}, "source": [ "The config contains essentially three different informations:\n", @@ -303,8 +228,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "703da6cc", + "execution_count": null, + "id": "76fba38b", "metadata": {}, "outputs": [], "source": [ @@ -312,12 +237,12 @@ "fg_full_monitoring.detection_window_config.row_percentage = 0.1\n", "\n", "# Compute statistics less frequently\n", - "fg_full_monitoring.job_schedule._cron_expression = \"0 0 12 ? * MON *\" # Weekly, Monday at 12pm UTC" + "fg_full_monitoring.scheduler_config._job_frequency = \"WEEKLY\"" ] }, { "cell_type": "markdown", - "id": "640d0507", + "id": "0673726d", "metadata": {}, "source": [ "Or you can create new configurations focused on important feature that are still unstable for example." @@ -325,21 +250,28 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "28a891bf", + "execution_count": null, + "id": "e747ae02", "metadata": {}, "outputs": [], "source": [ - "fg_amount_feature_monitoring = trans_fg.create_statistics_monitoring(\n", - " name=\"fg_amount_feature_monitoring\",\n", + "fg_single_feature_monitoring = trans_fg._enable_statistics_monitoring(\n", + " name=\"fg_single_feature_monitoring\",\n", " description=\"Compute statistics on all data of a single feature of the Feature Group on a daily basis\",\n", " feature_name=\"amount\",\n", + ").save()\n", + "\n", + "# Or with a Feature View\n", + "fv_single_feature_monitoring = trans_fv._enable_statistics_monitoring(\n", + " name=\"fv_single_feature_monitoring\",\n", + " description=\"Compute statistics on all data of a single feature of the Feature View on a daily basis\",\n", + " feature_name=\"amount\",\n", ").save()" ] }, { "cell_type": "markdown", - "id": "3e465e54", + "id": "24260360", "metadata": {}, "source": [ "Another avenue to reduce costs is to fetch data in a limited time window. For Feature Group, it is particularly relevant in order to focus monitoring on data recently inserted or upserted into the Feature Store. Using a rolling time window allows you to fetch less and more recent data that are most likely to be relevant. And obviously you can combine those ideas." @@ -347,15 +279,15 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "fa5651be", + "execution_count": null, + "id": "1e859563", "metadata": {}, "outputs": [], "source": [ - "fg_full_monitoring_sliding = trans_fg.create_statistics_monitoring(\n", - " name=\"fg_full_monitoring_sliding\",\n", + "fg_full_monitoring_rolling = trans_fg._enable_statistics_monitoring(\n", + " name=\"fg_full_monitoring_rolling\",\n", " description=\"Compute statistics on 20% of the data inserted in the last week of all features of the Feature Group on a weekly basis\",\n", - " cron_expression=\"0 0 12 ? * MON *\",\n", + " job_frequency=\"WEEKLY\",\n", ").with_detection_window(\n", " time_offset=\"1w\", # fetch data from the last week\n", " row_percentage=0.2,\n", @@ -364,7 +296,7 @@ }, { "cell_type": "markdown", - "id": "c2d681ad", + "id": "c32603df", "metadata": {}, "source": [ "Hopsworks makes it easy to get start with computing descriptive statistics on snapshot of your data on a regular basis. Starting early allow you to compound knowledge as every new job provides new data points revealing hidden trends in your evolving data. " @@ -372,35 +304,36 @@ }, { "cell_type": "markdown", - "id": "2731bad3", + "id": "83d90d47", "metadata": {}, "source": [ - "## ๐ŸชŸ Feature Monitoring and Reference Windows\n", + "## Single Feature Monitoring and Reference Window \n", "\n", "Not all Features are equally important or stable. As such, Hopsworks allows you to focus monitoring on a few relevant Features. This obviously reduce the cost associated to monitoring but also allows your team to cater the job frequency or tune the detection and reference window better fit a given Feature. Narrowing down to a single Feature allows you to define a reference window as well as a comparison config. Through a few exemple use cases, we want to highlight how Hopsworks can enable you to take Feature Monitoring to the next level for your project." ] }, { "cell_type": "code", - "execution_count": 10, - "id": "dce248fb", + "execution_count": null, + "id": "8a3a3f94", "metadata": {}, "outputs": [], "source": [ - "fg_amount_monitoring_reference_value = trans_fg.create_feature_monitoring(\n", - " name=\"fg_amount_monitoring_reference_value\",\n", + "transaction_amount_monitoring_reference_value = trans_fg._enable_feature_monitoring(\n", + " name=\"transaction_amount_monitoring_reference_value\",\n", " feature_name=\"amount\",\n", - " cron_expression=\"0 0 12 ? * MON *\",\n", + " job_frequency=\"WEEKLY\",\n", " description=\"Compute descriptive statistics on the amount Feature in the last week of data inserted in the Feature Group\",\n", ").with_detection_window(\n", " time_offset=\"1w\", # fetch data from the last week\n", " row_percentage=0.2,\n", - ")" + ")\n", + "print(transaction_amount_monitoring_reference_value)" ] }, { "cell_type": "markdown", - "id": "b2b5c7cf", + "id": "c79e0474", "metadata": {}, "source": [ "The starting point is similar to the previous case. We still want to compute the descriptive statistics on data that have been inserted or upserted in the Feature Group last week. However, we want to focus on transaction amount. We want to compare the statistics computed on the last week to a reference value, a target we are trying to reach for example. We also want to be alerted if the statistics computed on the last week are too far from the reference value." @@ -408,24 +341,13 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "7fcc0236", + "execution_count": null, + "id": "30c77550", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "FeatureMonitoringConfig('fg_amount_monitoring_reference_value', STATISTICS_COMPARISON)" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "fg_amount_monitoring_reference_value.with_reference_value(\n", - " value=100,\n", + "transaction_amount_monitoring_reference_value.with_reference_window(\n", + " specific_value=100,\n", ").compare_on(\n", " metric=\"mean\",\n", " threshold=50,\n", @@ -434,7 +356,7 @@ }, { "cell_type": "markdown", - "id": "001b8ae4", + "id": "a1657dcd", "metadata": {}, "source": [ "Note that alert receivers and trigger need to be configured through the Hopsworks UI. If skipped, the monitoring job will still run but no alerts will be sent. Choosing a single value as reference can be useful when there are clear expectations on how the data should behave. You can use a made up value from management or maybe the value of that statistics on a particular week that you decided made sense.\n", @@ -444,21 +366,21 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "b5ecd419", + "execution_count": null, + "id": "93fcec86", "metadata": {}, "outputs": [], "source": [ - "fv_amount_monitoring_reference_td = trans_fv.create_feature_monitoring(\n", - " name=\"fv_amount_monitoring_reference_td\",\n", + "transaction_amount_monitoring_reference_dataset = trans_fv._enable_feature_monitoring(\n", + " name=\"transaction_amount_monitoring_reference_dataset\",\n", " feature_name=\"amount\",\n", - " cron_expression=\"0 0 12 ? * * *\",\n", + " job_frequency=\"HOURLY\",\n", " description=\"Compute and compare descriptive statistics on the amount Feature in the last hour of data inserted in the Feature View\",\n", ").with_detection_window(\n", " time_offset=\"1h\", # fetch data from the last hour\n", " row_percentage=0.2,\n", - ").with_reference_training_dataset(\n", - " training_dataset_version=1, # use the training dataset used to train your production model\n", + ").with_reference_window(\n", + " training_dataset_id=1, # use the training dataset used to train your production model\n", ").compare_on(\n", " metric=\"mean\",\n", " threshold=50,\n", @@ -467,7 +389,7 @@ }, { "cell_type": "markdown", - "id": "7c358222", + "id": "34433cb9", "metadata": {}, "source": [ "Note that new data is not inserted in the Feature View but rather in the Feature Group(s) that makes up the Feature View. The Feature View defines a slice over those data. This monitoring setup is akin to asking the question: \"What would be the descriptive statistics of a similar training dataset created based on the latest data?\". While different statistics would not necessarily translate into degraded model performance, it can help guide the team's decision on when to recreate a training dataset to include the latest user behaviours.\n", @@ -477,15 +399,15 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "2acd07e4", + "execution_count": null, + "id": "747c7b57", "metadata": {}, "outputs": [], "source": [ - "fg_amount_monitoring_reference_sliding = trans_fg.create_feature_monitoring(\n", - " name=\"fg_amount_monitoring_reference_sliding\",\n", + "transaction_amount_monitoring_rolling_reference = trans_fg._enable_feature_monitoring(\n", + " name=\"transaction_amount_monitoring_rolling_reference\",\n", " feature_name=\"amount\",\n", - " cron_expression=\"0 0 12 ? * * *\",\n", + " job_frequency=\"DAILY\",\n", " description=\"Compute and compare descriptive statistics on the amount Feature on a daily basis to the same statistics computed in the previous week\",\n", ").with_detection_window(\n", " time_offset=\"1d\", # fetch data from inserted throughout the last day\n", @@ -497,12 +419,13 @@ ").compare_on(\n", " metric=\"mean\",\n", " threshold=0.1, # allow for a 10% difference between the two windows before triggering an alert\n", + " relative=True,\n", ").save()" ] }, { "cell_type": "markdown", - "id": "115998ad", + "id": "fbcb118c", "metadata": {}, "source": [ "where we defined a relative threshold for the alert, better suited to a rolling reference value." @@ -510,10 +433,10 @@ }, { "cell_type": "markdown", - "id": "9e2b659e", + "id": "47b37aa6", "metadata": {}, "source": [ - "## ๐Ÿ“‰ Feature Monitoring results and Hopsworks Interactive Graph\n", + "## Feature Monitoring Result Timeseries \n", "\n", "So far we have discussed how the python API allows you to quickly setup monitoring jobs and how to customize them to cater to your project needs. We want to focus now on getting the full values from the data points computed by the monitoring jobs. Each data point is stored in the database Feature Monitoring Result. A typical result has the following structure:\n", " - Result Metadata, including the time at which the job was executed\n", @@ -521,94 +444,46 @@ " - Reference Statistics, if a reference window was defined\n", " - Comparison information : data shift detected, difference, etc...\n", "\n", - "Hopsworks UI is the easiest place to get started with monitoring results. You can select a Feature Group or Feature View and see the results of the monitoring jobs in the [Hopsworsk Interactive Graph](https://docs.hopsworks.ai/latest/user_guides/fs/feature_monitoring/interactive_graph). The results are displayed as a Time-series to visualise trend in the monitoring data. Here is a UI screenshot of the monitoring results.\n", + "Hopsworks UI is the easiest place to get started with monitoring results. You can select a Feature Group or Feature View and see the results of the monitoring jobs in the Monitoring Timeline tab. The results are displayed as a Timeseries to visualise trend in the monitoring data. Here is a UI screenshot of the monitoring results.\n", "\n", - "![fm-results-plot](../../images/fm-reference-plot.png)\n", + "![monitoring_timeline](../../images/monitoring_timeline.png)\n", "\n", - "Additionally, you can use the python API to retrieve the monitoring results and plot them as you see fit." + "The Hopsworks UI is convenient to keep an eye on the trend without having to write your own python scripts or to share with other in the teams. However, it does not cover advance use cases such as plotting graphs for reports or compare different metrics. For this, you can use the python API to retrieve the monitoring results and plot them as you see fit." ] }, { "cell_type": "code", - "execution_count": 14, - "id": "07c863f2", + "execution_count": null, + "id": "96d1ab6e", "metadata": {}, "outputs": [], "source": [ "# Fetch results\n", - "monitoring_results = fg_amount_monitoring_reference_sliding.get_history(\n", - " start_time=datetime.datetime.now() - datetime.timedelta(days=1), # fetched data inserted in the last day\n", + "monitoring_results = transaction_amount_monitoring_rolling_reference.get_history(\n", + " start_time=datetime.datetime.now() - datetime.timedelta(days=1), # fetched data inserted in the last day\n", " end_time=datetime.datetime.now(),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "0a47a6f9", - "metadata": {}, - "source": [ - "## โš™๏ธ List Feature Monitoring configurations\n", - "\n", - "Finally, you can list the Feature Monitoring configurations created for your Feature Group or Feature View using the Python API." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "58483800", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[FeatureMonitoringConfig('fg_full_monitoring_sliding', STATISTICS_COMPUTATION),\n", - " FeatureMonitoringConfig('fg_full_monitoring', STATISTICS_COMPUTATION),\n", - " FeatureMonitoringConfig('fg_amount_monitoring_reference_value', STATISTICS_COMPARISON),\n", - " FeatureMonitoringConfig('fg_amount_monitoring_reference_sliding', STATISTICS_COMPARISON),\n", - " FeatureMonitoringConfig('fg_amount_feature_monitoring', STATISTICS_COMPUTATION)]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "trans_fg.get_feature_monitoring_configs()" - ] - }, - { - "cell_type": "markdown", - "id": "626aae5e", - "metadata": {}, - "source": [ - "or retrieve a specific configuration by providing the name." + ")\n", + "print(monitoring_results[0])" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "3372c2d8", + "execution_count": null, + "id": "7c2c5baf", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "FeatureMonitoringConfig('fg_full_monitoring', STATISTICS_COMPUTATION)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "trans_fg.get_feature_monitoring_configs(name=\"fg_full_monitoring\")" + "# Plot in the notebook when a job has runned several times\n", + "# %matplotlib inline\n", + "\n", + "# import matplotlib.pyplot as plt\n", + "\n", + "# plt.plot([r.monitoring_time in monitoring_results], [r.detection_statistics.mean for r in monitoring_results])" ] }, { "cell_type": "markdown", - "id": "c13fbc94", + "id": "44dd475b", "metadata": {}, "source": [ "## Conclusion \n", @@ -624,7 +499,7 @@ "hash": "e1ddeae6eefc765c17da80d38ea59b893ab18c0c0904077a035ef84cfe367f83" }, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -638,7 +513,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.13" } }, "nbformat": 4, diff --git a/integrations/neo4j/1_feature_pipeline.ipynb b/integrations/neo4j/1_feature_pipeline.ipynb deleted file mode 100644 index bbbedc34..00000000 --- a/integrations/neo4j/1_feature_pipeline.ipynb +++ /dev/null @@ -1,687 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** - Part 01: Load, Engineer & Connect\n", - "\n", - " This is the first part of the Neo4j and Hopsworks Feature Store integration. As part of this first module, we will work with data related to credit card transactions. \n", - "The objective of this tutorial is to demonstrate how to work with **Neo4j** and the **Hopworks Feature Store** for batch data with a goal of training and deploying a model that can predict fraudulent transactions.\n", - "\n", - "## **๐Ÿ—’๏ธ This notebook is divided in 4 sections:** \n", - "1. Import data into Neo4j\n", - "2. Use Neo4j's GDS library and `node2vec` to calculate graph node embeddings\n", - "3. More Feature Engineering of transactions\n", - "5. Create Feature Groups in Hopsworks Feature Store from Neo4j embeddings and processed features\n", - "\n", - "![tutorial-flow](../../images/01_featuregroups.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿ“ Import libraries " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "import neo4j\n", - "from neo4j import GraphDatabase\n", - "from graphdatascience import GraphDataScience\n", - "import pandas as pd\n", - "import numpy as np\n", - "from features.transactions import get_in_out_transactions\n", - "from features.party import get_transaction_labels, get_party_labels" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ’ฝ Loading the Data \n", - "\n", - "The data we will use comes from three different CSV files:\n", - "\n", - "- `transactions.csv`: transaction information such as timestamp, location, and the amount. \n", - "- `alert_transactions.csv`: Suspicious Activity Report (SAR) transactions.\n", - "- `party.csv`: User profile information.\n", - "\n", - "In a production system, these CSV files would originate from separate data sources or tables, and probably separate data pipelines. **All three files have a customer id column `id` in common, which we can use for joins.**\n", - "\n", - "Let's go ahead and load the data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Loading the Data into Neo4j\n", - "\n", - "#### Neo4j setup\n", - "Before executing the next cells, the Neo4j database must be installed and initialized:\n", - "- Install Neo4j Desktop from https://neo4j.com/download/\n", - "- Create a new database project and server\n", - "- Install the APOC and GDS plugins\n", - "- BOLT protocol should be set (if already is not) in the the [neo4j.conf](https://neo4j.com/docs/operations-manual/current/configuration/neo4j-conf/) file\n", - "\n", - "First, let's set a few parameters to connect with the Neo4j database." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "URI = \"bolt://localhost:7687\"\n", - "AUTH = (\"neo4j\", \"changeme\")\n", - "DATABASE = \"graphembeddingsdemo\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we create a few indexes in Neo4j." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with GraphDatabase.driver(URI, auth=AUTH) as driver:\n", - " driver.execute_query(\"CREATE CONSTRAINT party_id_constraint FOR (p:Party) REQUIRE p.partyId IS UNIQUE\", database_=DATABASE)\n", - " driver.execute_query(\"CREATE TEXT INDEX party_type_index FOR (p:Party) ON (p.partyType)\", database_=DATABASE)\n", - " driver.execute_query(\"CREATE CONSTRAINT transaction_id_constraint FOR ()-[r:TRANSACTION]-() REQUIRE r.tran_id is UNIQUE\", database_=DATABASE)\n", - " driver.execute_query(\"CREATE TEXT INDEX transaction_timestamp_index FOR ()-[r:TRANSACTION]-() ON r.tran_timestamp\", database_=DATABASE)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we do the first import of the first .csv file, holding the `(:Party)` nodes. This will finish very quickly, as there are only 7-8k nodes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with driver.session(database=DATABASE) as session:\n", - " result = session.run(\"\"\"\n", - " load csv with headers from \"https://repo.hops.works/master/hopsworks-tutorials/data/aml/party.csv\" as parties\n", - " create (p:Party)\n", - " set p = parties\n", - " \"\"\")\n", - "print(result.consume().counters)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we will import the relationshops. There are approx 430k `[:TRANSACTION]` relationships, and importing these will take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with driver.session(database=DATABASE) as session:\n", - " result = session.run(\"\"\"\n", - " LOAD CSV WITH HEADERS FROM \"https://repo.hops.works/master/hopsworks-tutorials/data/aml/transactions.csv\" AS Transaction\n", - " MATCH (startNode:Party)\n", - " WHERE startNode.partyId = Transaction.src\n", - " CALL {\n", - " WITH Transaction, startNode\n", - " MATCH (endNode:Party)\n", - " WHERE endNode.partyId = Transaction.dst\n", - " CREATE (startNode)-[rel:TRANSACTION {tran_id: Transaction.tran_id, tx_type: Transaction.tx_type, base_amt: Transaction.base_amt, tran_timestamp: datetime(Transaction.tran_timestamp)}]->(endNode)\n", - " } IN TRANSACTIONS OF 2500 ROWS;\n", - " \"\"\")\n", - "print(result.consume().counters)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This completes the importing of the data into Neo4j." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Loading remaining data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### โ›ณ๏ธ Transactions dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "transactions_df = pd.read_csv(\"https://repo.hops.works/master/hopsworks-tutorials/data/aml/transactions.csv\", parse_dates = ['tran_timestamp'])\n", - "transactions_df.head(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### โ›ณ๏ธ Alert Transactions dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "alert_transactions = pd.read_csv(\"https://repo.hops.works/master/hopsworks-tutorials/data/aml/alert_transactions.csv\")\n", - "alert_transactions.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### โ›ณ๏ธ Party dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "party = pd.read_csv(\"https://repo.hops.works/master/hopsworks-tutorials/data/aml/party.csv\")\n", - "party.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ› ๏ธ Feature Engineering \n", - "## Calculating the node embeddings in Neo4j\n", - "For each month of transactions, compute and store embeddings using the `node2vec` algorithm. This uses the GDS library of Neo4j, which [needs to be installed](https://neo4j.com/docs/graph-data-science/current/installation/) on the Neo4j server." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with GraphDatabase.driver(URI, auth=AUTH) as driver:\n", - " try:\n", - " gds = GraphDataScience(URI, auth=AUTH, database=DATABASE)\n", - "\n", - " # Determine months of transactions\n", - " start_date = transactions_df['tran_timestamp'].min().to_pydatetime().replace(tzinfo=None)\n", - " end_date = transactions_df['tran_timestamp'].max().to_pydatetime().replace(tzinfo=None)\n", - "\n", - " # For each month of transactions\n", - " while start_date <= end_date:\n", - " last_day_of_month = datetime.datetime(start_date.year, start_date.month, 1) + datetime.timedelta(days=32)\n", - " end_date_of_month = last_day_of_month - datetime.timedelta(days=last_day_of_month.day)\n", - "\n", - " # Convert dates as milliseconds\n", - " start = float(start_date.timestamp() / 10 ** 9)\n", - " end = float(end_date_of_month.timestamp() / 10 ** 9)\n", - "\n", - " # Retrieve transactions within the month\n", - " gds.run_cypher(\n", - " f\"MATCH (p1:Party)-[t:TRANSACTION]->(p2:Party) WHERE t.tran_timestamp >= {start} AND t.tran_timestamp < {end} RETURN p1, t, p2\")\n", - "\n", - " # Create a temporary graph\n", - " G, project_result = gds.graph.project(\"transaction_graph\", \"Party\", \"TRANSACTION\")\n", - "\n", - " # Use the temporary graph to compute embeddings and save them as a property in the Neo4j database\n", - " node2vec_result = gds.node2vec.write(\n", - " G, # Graph object\n", - " embeddingDimension=16,\n", - " walkLength=80,\n", - " inOutFactor=1,\n", - " returnFactor=1,\n", - " writeProperty=\"node2vec\"\n", - " )\n", - "\n", - " # Increment to next month\n", - " start_date = end_date_of_month + datetime.timedelta(days=1)\n", - "\n", - " # Remove the current monthly graph to generate a graph for the following month in the subsequent iteration\n", - " gds.run_cypher(\n", - " \"\"\"\n", - " CALL gds.graph.drop('transaction_graph') YIELD graphName\n", - " \"\"\"\n", - " )\n", - "\n", - " except Exception as e:\n", - " print(e)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Feature Engineering outside Neo4j" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### To investigate patterns of suspicious activities you will make time window aggregates such monthly frequency, total, mean and standard deviation of amount of incoming and outgoing transasactions. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Renaming columns for clarity\n", - "transactions_df.columns = ['tran_id', 'tx_type', 'base_amt', 'tran_timestamp', 'source', 'target']\n", - "\n", - "# Reordering columns for better readability\n", - "transactions_df = transactions_df[[\"source\", \"target\", \"tran_timestamp\", \"tran_id\", \"base_amt\"]]\n", - "\n", - "# Displaying the first few rows of the DataFrame\n", - "transactions_df.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Incoming and Outgoing transactions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generating a DataFrame with monthly incoming and outgoing transaction statistics\n", - "in_out_df = get_in_out_transactions(transactions_df)\n", - "\n", - "# Displaying the first few rows of the resulting DataFrame\n", - "in_out_df.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Transactions identified as suspicious activity " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Displaying the first few rows of the 'alert_transactions' DataFrame\n", - "alert_transactions.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generating transaction labels based on transaction and alert transaction data\n", - "transaction_labels = get_transaction_labels(\n", - " transactions_df, \n", - " alert_transactions,\n", - ")\n", - "\n", - "# Displaying the first three rows of the resulting DataFrame\n", - "transaction_labels.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Party dataset" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Renaming columns for clarity\n", - "party.columns = [\"id\", \"type\"]\n", - "\n", - "# Mapping 'type' values to numerical values for better representation\n", - "party.type = party.type.map({\"Individual\": 0, \"Organization\": 1})\n", - "\n", - "# Displaying the first three rows of the DataFrame\n", - "party.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Filtering transactions with SAR(Suspicious Activity Reports) labels from the generated transaction labels DataFrame\n", - "alert_transactions = transaction_labels[transaction_labels.is_sar == 1]\n", - "\n", - "# Displaying the first few rows of transactions flagged as SAR\n", - "alert_transactions.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generating party labels based on transaction labels and party information\n", - "party_labels = get_party_labels(\n", - " transaction_labels, \n", - " party,\n", - ")\n", - "\n", - "# Displaying the first three rows of the resulting DataFrame\n", - "party_labels.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Convert date time to unix epoc milliseconds " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Converting 'tran_timestamp' values to milliseconds for consistency\n", - "transaction_labels.tran_timestamp = transaction_labels.tran_timestamp.values.astype(np.int64) // 10 ** 6\n", - "\n", - "# Converting 'tran_timestamp' values in 'party_labels' to milliseconds\n", - "party_labels.tran_timestamp = party_labels.tran_timestamp.map(lambda x: datetime.datetime.timestamp(x) * 1000)\n", - "party_labels.tran_timestamp = party_labels.tran_timestamp.values.astype(np.int64)\n", - "\n", - "# Displaying the first three rows of the DataFrame\n", - "transaction_labels.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "\n", - "# ๐Ÿ‘ฎ๐Ÿผโ€โ™€๏ธ Data Validation\n", - "\n", - "Before you define [feature groups](https://docs.hopsworks.ai/latest/generated/feature_group/) lets define [validation rules](https://docs.hopsworks.ai/latest/generated/feature_validation/) for features. You do expect some of the features to comply with certain *rules* or *expectations*. For example: a transacted amount must be a positive value. In the case of a transacted amount arriving as a negative value you can decide whether to stop it to `write` into a feature group and throw an error or allow it to be written but provide a warning. In the next section you will create feature store `expectations`, attach them to feature groups, and apply them to dataframes being appended to said feature group.\n", - "\n", - "#### Data validation with Greate Expectations in Hopsworks\n", - "You can use GE library for validation in Hopsworks features store. \n", - "\n", - "## Hopsworks feature store\n", - "\n", - "The Hopsworks feature feature store library is Apache V2 licensed and available [here](https://github.com/logicalclocks/feature-store-api). The library is currently available for Python and JVM languages such as Scala and Java.\n", - "In this notebook, we are going to cover Python part.\n", - "\n", - "You can find the complete documentation of the library here: \n", - "\n", - "The first step is to establish a connection with your Hopsworks feature store instance and retrieve the object that represents the feature store you'll be working with. \n", - "\n", - "> By default `project.get_feature_store()` returns the feature store of the project we are working with. However, it accepts also a project name as parameter to select a different feature store." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿ”ฌ Expectations suite" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Expectation Suite - no use of HSFS\n", - "import great_expectations as ge\n", - "from pprint import pprint\n", - "import json\n", - "\n", - "expectation_suite = ge.core.ExpectationSuite(expectation_suite_name=\"aml_project_validations\")\n", - "pprint(expectation_suite.to_json_dict(), indent=2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "expectation_suite.add_expectation(\n", - " ge.core.ExpectationConfiguration(\n", - " expectation_type=\"expect_column_max_to_be_between\",\n", - " kwargs={\"column\": \"monthly_in_count\", \"min_value\": 0, \"max_value\": 10000000}) \n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "pprint(expectation_suite)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Register Feature Groups in Hopsworks \n", - "\n", - "A `Feature Groups` is a logical grouping of features, and experience has shown, that this grouping generally originates from the features being derived from the same data source. The `Feature Group` lets you save metadata along features, which defines how the Feature Store interprets them, combines them and reproduces training datasets created from them.\n", - "\n", - "Generally, the features in a feature group are engineered together in an ingestion job. However, it is possible to have additional jobs to append features to an existing feature group. Furthermore, `feature groups` provide a way of defining a namespace for features, such that you can define features with the same name multiple times, but uniquely identified by the group they are contained in.\n", - "\n", - "> It is important to note that `feature groups` are not groupings of features for immediate training of Machine Learning models. Instead, to ensure reusability of features, it is possible to combine features from any number of groups into training datasets." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Read embeddings from Neo4j, and store them in the Hopsworks feature store" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Connecting to Neo4j, getting the embeddings, and putting them into a data frame\n", - "\n", - "with GraphDatabase.driver(URI, auth=AUTH) as driver:\n", - " graph_embeddings_df = driver.execute_query(\n", - " \"\"\"MATCH (p:Party)-[t:TRANSACTION]->(:Party) \n", - " return \n", - " p.partyId as id, \n", - " p.node2vec as party_graph_embedding, \n", - " datetime(t.tran_timestamp).epochmillis as tran_timestamp\"\"\",\n", - " database_=DATABASE,\n", - " result_transformer_=neo4j.Result.to_df\n", - " )\n", - " \n", - " print(type(graph_embeddings_df)) # \n", - " print(graph_embeddings_df.head())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Increase data size to store embeddings\n", - "from hsfs import engine\n", - "features = engine.get_instance().parse_schema_feature_group(graph_embeddings_df)\n", - "for f in features:\n", - " if f.type == \"array\" or f.type == \"array\":\n", - " f.online_type = \"VARBINARY(20000)\"\n", - "\n", - "# Define Feature Group\n", - "graph_embeddings_fg = fs.get_or_create_feature_group(name=\"graph_embeddings\",\n", - " version=1,\n", - " primary_key=[\"id\"],\n", - " description=\"node embeddings from transactions graph\",\n", - " event_time = 'tran_timestamp', \n", - " online_enabled=True,\n", - " features=features,\n", - " statistics_config={\"enabled\": False, \"histograms\": False, \"correlations\": False, \"exact_uniqueness\": False}\n", - " )\n", - "\n", - "# Insert data frame into Feature Group\n", - "graph_embeddings_fg.insert(graph_embeddings_df)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Transactions monthly aggregates feature group" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Feature Group\n", - "transactions_fg = fs.get_or_create_feature_group(\n", - " name = \"transactions_monthly\",\n", - " version = 1,\n", - " primary_key = [\"id\"],\n", - " partition_key = [\"tran_timestamp\"], \n", - " description = \"transactions monthly aggregates features\",\n", - " event_time = 'tran_timestamp',\n", - " online_enabled = True,\n", - " statistics_config = {\"enabled\": True, \"histograms\": True, \"correlations\": True, \"exact_uniqueness\": False},\n", - " expectation_suite=expectation_suite\n", - ") \n", - "\n", - "# Insert data frame into Feature Group\n", - "transactions_fg.insert(in_out_df)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Party feature group" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Define Feature Group\n", - "party_fg = fs.get_or_create_feature_group(\n", - " name = \"party_labels\",\n", - " version = 1,\n", - " primary_key = [\"id\"],\n", - " description = \"party fg with labels\",\n", - " event_time = 'tran_timestamp', \n", - " online_enabled = True,\n", - " statistics_config = {\"enabled\": True, \"histograms\": True, \"correlations\": True, \"exact_uniqueness\": False}\n", - ")\n", - "\n", - "# Insert data frame into Feature Group\n", - "party_fg.insert(party_labels)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## โญ๏ธ **Next:** Part 02 \n", - " \n", - "In the following notebook you will use feature groups to create feature views and training dataset." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.18" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/integrations/neo4j/2_training_pipeline.ipynb b/integrations/neo4j/2_training_pipeline.ipynb deleted file mode 100644 index e718d173..00000000 --- a/integrations/neo4j/2_training_pipeline.ipynb +++ /dev/null @@ -1,748 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** - Part 02: Model training\n", - "\n", - " This notebook explains how to read from a feature group and create training dataset within the feature store. You will train a model on the created training dataset. You will train your model using TensorFlow, although it could just as well be trained with other machine learning frameworks such as Scikit-learn, Keras, and PyTorch. You will also see some of the exploration that can be done in Hopsworks, notably the search functions and the lineage.\n", - "\n", - "## **๐Ÿ—’๏ธ This notebook is divided into the following steps:** \n", - "\n", - "1. **Feature Selection**: Select the features you want to train your model on.\n", - "2. **Feature Transformation**: How the features should be preprocessed.\n", - "3. **Training Dataset Creation**: Create a dataset for training anomaly detection model.\n", - "2. **Model Training**: Train your anomaly detection model.\n", - "3. **Model Registry**: Register model to Hopsworks model registry.\n", - "4. **Model Deployment**: Deploy the model for real-time inference.\n", - "\n", - "![tutorial-flow](../../images/02_training-dataset.png) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import ast\n", - "import numpy as np\n", - "import pandas as pd\n", - "import tensorflow as tf\n", - "import os\n", - "\n", - "from anomaly_detection import GanEncAnomalyDetector" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ”ช Feature Selection \n", - "\n", - "You start by selecting all the features you want to include for model training/inference." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve Feature Groups\n", - "transactions_monthly_fg = fs.get_feature_group(\n", - " name=\"transactions_monthly\", \n", - " version=1,\n", - ")\n", - "\n", - "graph_embeddings_fg = fs.get_feature_group(\n", - " name=\"graph_embeddings\",\n", - " version=1,\n", - ") \n", - "\n", - "party_fg = fs.get_feature_group(\n", - " name=\"party_labels\", \n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Select features for training data\n", - "selected_features = party_fg.select([\"type\", \"is_sar\"]).join(\n", - " transactions_monthly_fg.select(\n", - " [\n", - " \"monthly_in_count\", \n", - " \"monthly_in_total_amount\", \n", - " \"monthly_in_mean_amount\", \n", - " \"monthly_in_std_amount\", \n", - " \"monthly_out_count\", \n", - " \"monthly_out_total_amount\", \n", - " \"monthly_out_mean_amount\", \n", - " \"monthly_out_std_amount\",\n", - " ]\n", - " )).join(\n", - " graph_embeddings_fg.select([\"party_graph_embedding\"]),\n", - " )\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Uncomment this if you would like to view your selected features\n", - "#selected_features.show(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###### ๐Ÿค– Transformation Functions \n", - "\n", - "Transformation functions are a mathematical mapping of input data that may be stateful - requiring statistics from the partent feature view (such as number of instances of a category, or mean value of a numerical feature)\n", - "\n", - "We will preprocess our data using *min-max scaling* on numerical features and *label encoding* on categorical features. To do this we simply define a mapping between our features and transformation functions. This ensures that transformation functions such as *min-max scaling* are fitted only on the training data (and not the validation/test data), which ensures that there is no data leakage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load built in transformation functions.\n", - "min_max_scaler = fs.get_transformation_function(name=\"min_max_scaler\")\n", - "\n", - "# Map features to transformations.\n", - "transformation_functions = {\n", - " \"monthly_in_count\": min_max_scaler,\n", - " \"monthly_in_total_amount\": min_max_scaler,\n", - " \"monthly_in_mean_amount\": min_max_scaler,\n", - " \"monthly_in_std_amount\": min_max_scaler,\n", - " \"monthly_out_count\": min_max_scaler,\n", - " \"monthly_out_total_amount\": min_max_scaler,\n", - " \"monthly_out_mean_amount\": min_max_scaler,\n", - " \"monthly_out_std_amount\": min_max_scaler,\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Creation \n", - "\n", - "In Hopsworks, you write features to feature groups (where the features are stored) and you read features from feature views. A feature view is a logical view over features, stored in feature groups, and a feature view typically contains the features used by a specific model. This way, feature views enable features, stored in different feature groups, to be reused across many different models. The Feature Views allows schema in form of a query with filters, define a model target feature/label and additional transformation functions.\n", - "In order to create a Feature View we may use `fs.create_feature_view()`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create the 'aml_feature_view' feature view\n", - "feature_view = fs.create_feature_view(\n", - " name='aml_feature_view',\n", - " query=selected_features,\n", - " labels=[\"is_sar\"],\n", - " transformation_functions=transformation_functions,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ‹๏ธ Training Dataset Creation\n", - "\n", - "In Hopsworks training data is a query where the projection (set of features) is determined by the parent FeatureView with an optional snapshot on disk of the data returned by the query.\n", - "\n", - "**Training Dataset may contain splits such as:** \n", - "* Training set - the subset of training data used to train a model.\n", - "* Validation set - the subset of training data used to evaluate hparams when training a model\n", - "* Test set - the holdout subset of training data used to evaluate a mode\n", - "\n", - "Training dataset is created using `feature_view.training_data()` method.\n", - "\n", - "**From feature view APIs we can also create training datasts based on even time filters specifing `start_time` and `end_time`**. \n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get training data\n", - "X_train, y_train = feature_view.training_data(\n", - " description='AML training dataset',\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Displaying the first three rows of the training data\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Displaying the first three rows of the target data\n", - "y_train.head(3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "X_tmp = X_train\n", - "y_tmp = y_train" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# ๐Ÿค– Model Building\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Converting string representations of Python literals in 'graph_embeddings' column to actual objects\n", - "#X_train['party_graph_embedding'] = X_train['party_graph_embedding'].apply(ast.literal_eval)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Convert each element in the 'graph_embeddings' column to a NumPy array\n", - "X_train['party_graph_embedding'] = X_train['party_graph_embedding'].apply(np.array)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Merge the original DataFrame with a DataFrame of exploded embeddings\n", - "X_train = X_train.merge(\n", - " pd.DataFrame(X_train['party_graph_embedding'].to_list()).add_prefix('emb_'), \n", - " left_index=True,\n", - " right_index=True,\n", - ").drop('party_graph_embedding', axis=1)\n", - "\n", - "# Display the first three rows of the modified DataFrame\n", - "X_train.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You are going to train [gan for anomaly detection](https://arxiv.org/pdf/1905.11034.pdf). During training step you will provide only features of accounts that have never been reported for suspicios activity. You will disclose previously reported accounts to the model only in evaluation step. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Filter non-suspicious transactions from X_train based on y_train values equal to 0\n", - "non_sar_transactions = X_train[y_train.values == 0]\n", - "\n", - "# Drop any rows with missing values from the non-suspicious transactions DataFrame\n", - "non_sar_transactions = non_sar_transactions.dropna()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now lets define Tensorflow Dataset as we are going to train keras tensorflow model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def windowed_dataset(dataset, window_size, batch_size):\n", - " # Create a windowed dataset using the specified window_size and shift of 1\n", - " # Drop any remaining elements that do not fit in complete windows\n", - " ds = dataset.window(window_size, shift=1, drop_remainder=True)\n", - "\n", - " # Flatten the nested datasets into a single dataset of windows\n", - " ds = ds.flat_map(lambda x: x.batch(window_size))\n", - "\n", - " # Batch the windows into batches of the specified batch_size\n", - " # Use drop_remainder=True to ensure that all batches have the same size\n", - " # Prefetch one batch to improve performance\n", - " return ds.batch(batch_size, drop_remainder=True).prefetch(1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Convert non_sar_transactions to a TensorFlow dataset, casting the values to float32\n", - "training_dataset = tf.data.Dataset.from_tensor_slices(\n", - " tf.cast(non_sar_transactions.astype('float32'), tf.float32)\n", - ")\n", - "\n", - "# Use the windowed_dataset function to create a windowed dataset\n", - "# Parameters: window_size=2 (sequence length), batch_size=16 (number of sequences in each batch)\n", - "training_dataset = windowed_dataset(\n", - " training_dataset, \n", - " window_size=2, \n", - " batch_size=16,\n", - ")\n", - "\n", - "training_dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿƒ Train Model\n", - "\n", - "Next we'll train a model. Here, we set the class weight of the positive class to be twice as big as the negative class." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Model architecture\n", - "\n", - "Key components:\n", - "\n", - "- `Encoder`(encoder_model) takes input data and compresses it into a latent representation. The encoder consists of two Convolutional 1D layers with Batch Normalization and Leaky ReLU activation functions.\n", - "\n", - "- `Generator`(generator_model) takes a latent vector and generates synthetic data. The generator consists of two Convolutional 1D layers with Batch Normalization and Leaky ReLU activation functions. The last layer produces data with the same shape as the input data.\n", - "\n", - "- `Discriminator`(discriminator_model) distinguishes between real and generated (fake) data. It comprises two Convolutional 1D layers with Batch Normalization and Leaky ReLU activation functions, followed by a fully connected layer. The output is a single value representing the probability that the input is real.\n", - "\n", - "![tutorial-flow](images/model_architecture.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create an instance of the GanEncAnomalyDetector model with input dimensions [2, n_features]\n", - "model = GanEncAnomalyDetector([2, training_dataset.element_spec.shape[-1]])\n", - "\n", - "# Compile the model\n", - "model.compile()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Iterate through each layer in the model\n", - "for layer in model.layers:\n", - " # Print the name and output shape of each layer\n", - " print(layer.name, layer.output_shape)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Train the model using the training_dataset\n", - "# Set the number of epochs to 2 and suppress verbose output during training\n", - "history = model.fit(\n", - " training_dataset, # Training dataset used for model training\n", - " epochs=2, # Number of training epochs\n", - " verbose=0, # Verbosity mode (0: silent, 1: progress bar, 2: one line per epoch)\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create a dictionary to store metrics\n", - "# The key is 'loss', and the value is the initial value of the generator loss from the training history\n", - "metrics = {\n", - " 'loss': history.history[\"g_loss\"][0],\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### โš™๏ธ Model Schema\n", - "\n", - "The model needs to be set up with a [Model Schema](https://docs.hopsworks.ai/3.0/user_guides/mlops/registry/model_schema/), which describes the inputs and outputs for a model.\n", - "\n", - "A Model Schema can be automatically generated from training examples, as shown below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "# Define the input schema using the values of X_train\n", - "input_schema = Schema(X_train)\n", - "\n", - "# Define the output schema using y_train\n", - "output_schema = Schema(y_train)\n", - "\n", - "# Create a ModelSchema object specifying the input and output schemas\n", - "model_schema = ModelSchema(\n", - " input_schema=input_schema, \n", - " output_schema=output_schema,\n", - ")\n", - "\n", - "# Convert the model schema to a dictionary for further inspection or serialization\n", - "model_schema.to_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Register model\n", - "\n", - "One of the features in Hopsworks is the model registry. This is where we can store different versions of models and compare their performance. Models from the registry can then be served as API endpoints." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Set the path for exporting the trained model\n", - "export_path = \"aml_model\"\n", - "print('Exporting trained model to: {}'.format(export_path))\n", - "\n", - "# Get the concrete function for serving the model\n", - "call = model.serve_function.get_concrete_function(tf.TensorSpec([None, None, None], tf.float32))\n", - "\n", - "# Save the model to the specified export path with the serving signature\n", - "tf.saved_model.save(\n", - " model, \n", - " export_path, \n", - " signatures=call,\n", - ")\n", - "\n", - "# Access the model registry in your project\n", - "\n", - "mr = project.get_model_registry()\n", - "\n", - "# Create a TensorFlow model in the model registry with specified metadata\n", - "mr_model = mr.tensorflow.create_model(\n", - " name=\"aml_model\", # Specify the model name\n", - " metrics=metrics, # Include model metrics\n", - " model_schema=model_schema, # Include model schema\n", - " description=\"Adversarial anomaly detection model.\", # Model description\n", - " input_example=[\"70408aef\"], # Input example\n", - ")\n", - "\n", - "# Save the registered model to the model registry\n", - "mr_model.save(export_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Model Deployment\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the following cell:\n", - "- Ensure that the value of `version` in `self.fs.get_feature_view()` is appropriately updated to reflect the correct version of your feature view.\n", - "- Verify that the value of `training_dataset_version` in `self.fv.init_serving()` corresponds to the version of your training dataset.\n", - "\n", - "You can check the versions on the Hopsworks web UI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile aml_model_transformer.py\n", - "\n", - "import os\n", - "import hsfs\n", - "import numpy as np\n", - "import tensorflow as tf\n", - "\n", - "class Transformer(object):\n", - " \n", - " def __init__(self): \n", - " # Get feature store handle\n", - " fs_conn = hsfs.connection()\n", - " self.fs = fs_conn.get_feature_store()\n", - " \n", - " # Get feature views\n", - " self.fv = self.fs.get_feature_view(\n", - " name=\"aml_feature_view\", \n", - " version=1,\n", - " )\n", - " \n", - " # Initialise serving\n", - " self.fv.init_serving(training_dataset_version=1)\n", - " \n", - " def preprocess(self, inputs):\n", - " # Retrieve feature vector using the feature vector provider\n", - " feature_vector = self.fv.get_feature_vector({\"id\": inputs[\"inputs\"][0]})\n", - "\n", - " # Explode embeddings (flatten the list of embeddings)\n", - " feature_vector_exploded_emb = [*self.flat2gen(feature_vector)]\n", - "\n", - " # Reshape feature vector to match the model's input shape\n", - " feature_vector_reshaped = np.array(feature_vector_exploded_emb).reshape(1, 25)\n", - "\n", - " # Convert the feature vector to a TensorFlow constant\n", - " input_vector = tf.constant(feature_vector_reshaped, dtype=tf.float32)\n", - "\n", - " # Add a time dimension (axis=1) to the input vector\n", - " input_vector = tf.expand_dims(input_vector, axis=1)\n", - "\n", - " # Duplicate the input vector to create a pair\n", - " input_vector = tf.tile(input_vector, [1, 2, 1])\n", - " \n", - " # Duplicate the input vector to create a pair\n", - " input_vector = input_vector.numpy().tolist()\n", - "\n", - " # Return the preprocessed input dictionary\n", - " return {\n", - " 'inputs': input_vector\n", - " }\n", - "\n", - " def postprocess(self, outputs):\n", - " return outputs\n", - "\n", - " def flat2gen(self, alist):\n", - " for item in alist:\n", - " if isinstance(item, list):\n", - " for subitem in item: yield subitem\n", - " else:\n", - " yield item " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.transformer import Transformer\n", - "\n", - "# Get the dataset API from the project\n", - "dataset_api = project.get_dataset_api()\n", - "\n", - "# Upload the transformer script file to the \"Models\" dataset\n", - "uploaded_file_path = dataset_api.upload(\n", - " \"aml_model_transformer.py\", # Name of the script file\n", - " \"Resources\", # Destination folder in the dataset\n", - " overwrite=True, # Overwrite the file if it already exists\n", - ")\n", - "\n", - "# Construct the full path to the uploaded transformer script file\n", - "transformer_script_path = os.path.join(\n", - " \"/Projects\", \n", - " project.name, \n", - " uploaded_file_path,\n", - ")\n", - "\n", - "# Create a Transformer object using the uploaded script\n", - "transformer_script = Transformer(\n", - " script_file=transformer_script_path,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the \"aml_model\" from the model registry\n", - "model = mr.get_model(\n", - " name=\"aml_model\", \n", - " version=1,\n", - ")\n", - "\n", - "# Deploy the model with the specified name (\"amlmodeldeployment\") and associated transformer\n", - "deployment = model.deploy(\n", - " name=\"amlmodeldeployment\", # Specify the deployment name\n", - " transformer=transformer_script, # Associate the transformer script with the deployment\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Deployment: \" + deployment.name)\n", - "deployment.describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> The deployment has now been registered. However, to start it you need to run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "deployment.start(await_running=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> For trouble shooting one can use `get_logs` method" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "deployment.get_logs()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> To stop the deployment you simply run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "deployment.stop()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## โญ๏ธ Next: Part 03: Online Inference \n", - " \n", - "In the next notebook you will use your deployment for online inference." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "env_app", - "language": "python", - "name": "env_app" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/integrations/neo4j/3_online_inference.ipynb b/integrations/neo4j/3_online_inference.ipynb deleted file mode 100644 index e26f710c..00000000 --- a/integrations/neo4j/3_online_inference.ipynb +++ /dev/null @@ -1,233 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** - Part 03: Online Inference\n", - "\n", - "In this last notebook you will use your deployment for online inference. \n", - "\n", - "## **๐Ÿ—’๏ธ This notebook is divided into the following sections:** \n", - "1. **Deployment Retrieval**: Retrieve your deployment from the model registry.\n", - "2. **Prediction using deployment**." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "# Get the feature store handle for the project's feature store\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ—„ Model Registry\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the Model Registry\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the \"aml_model\" from the model registry\n", - "model = mr.get_model(\n", - " name=\"aml_model\", \n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## โš™๏ธ Fetch Deployment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Access the Model Serving\n", - "ms = project.get_model_serving()\n", - "\n", - "# Specify the deployment name\n", - "deployment_name = \"amlmodeldeployment\"\n", - "\n", - "# Get the deployment with the specified name\n", - "deployment = ms.get_deployment(deployment_name)\n", - "\n", - "# Start the deployment and wait for it to be in a running state for up to 300 seconds\n", - "deployment.start(await_running=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Predicting using deployment\n", - "\n", - "\n", - "Finally you can start making predictions with your model!\n", - "\n", - "Send inference requests to the deployed model as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Prepare input data using the input example from the model\n", - "data = {\n", - " \"inputs\": model.input_example,\n", - "}\n", - "\n", - "# Make predictions using the deployed model\n", - "predictions = deployment.predict(data)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Inspect predictions\n", - "print(predictions)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#deployment.get_logs()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Now lets test feature vectors from online store\n", - "ids_to_score = [\n", - " \"0016359b\", \n", - " \"0054a022\", \n", - " \"00d6b609\", \n", - " \"00e14860\", \n", - " \"014ed5cb\", \n", - " \"01ce3306\", \n", - " \"01fa1d01\", \n", - " \"04b23f4b\",\n", - "]\n", - "\n", - "for node_id in ids_to_score:\n", - " data = {\"inputs\": [node_id]}\n", - " print(\" anomaly score for node_id \", node_id, \" : \", deployment.predict(data)[\"outputs\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> For trouble shooting one can use `get_logs` method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#deployment.get_logs()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Stop Deployment\n", - "To stop the deployment you simply run:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "deployment.stop()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐ŸŽ Wrapping things up " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this module you perforemed feature engineering, created feature view and traning dataset, trained advesarial anomaly detection model and depoyed it in production. To setup this pipeline in your enterprise settings contuct us.\n", - "\n", - "" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/integrations/neo4j/anomaly_detection.py b/integrations/neo4j/anomaly_detection.py deleted file mode 100644 index d785b13c..00000000 --- a/integrations/neo4j/anomaly_detection.py +++ /dev/null @@ -1,288 +0,0 @@ -import tensorflow as tf - -class GanEncAnomalyDetector(tf.keras.Model): - - def __init__(self, input_dim): - super(GanEncAnomalyDetector, self).__init__() - - self.input_dim = input_dim - self.latent_dim = [1, input_dim[1]] - self.d_steps = 3 - self.gp_weight = 10 - - self.encoder = self.make_encoder_model(self.input_dim) - self.generator = self.make_generator(self.input_dim, self.latent_dim) - self.discriminator = self.make_discriminator_model(self.input_dim) - - self.mse = tf.keras.losses.MeanSquaredError() - - self.epoch_e_loss_avg = tf.keras.metrics.Mean(name="epoch_e_loss_avg") - self.epoch_d_loss_avg = tf.keras.metrics.Mean(name="epoch_d_loss_avg") - self.epoch_g_loss_avg = tf.keras.metrics.Mean(name="epoch_g_loss_avg") - self.epoch_a_score_avg = tf.keras.metrics.Mean(name="epoch_a_score_avg") - - @property - def metrics(self): - return [ - self.epoch_e_loss_avg, - self.epoch_d_loss_avg, - self.epoch_g_loss_avg, - self.epoch_a_score_avg, - ] - - # define model architectures - def make_encoder_model(self, input_dim): - inputs = tf.keras.layers.Input(shape=(input_dim[0],input_dim[1])) - x = tf.keras.layers.Conv1D(filters = 64, kernel_size= 1,padding='same', kernel_initializer="uniform")(inputs) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - x = tf.keras.layers.MaxPooling1D(pool_size=2, padding='same')(x) - x = tf.keras.layers.Conv1D(filters = input_dim[1], kernel_size= 1,padding='same', kernel_initializer="uniform")(x) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - x = tf.keras.layers.MaxPooling1D(pool_size=2, padding='same')(x) - encoder = tf.keras.Model(inputs=inputs, outputs=x, name="encoder_model") - return encoder - - def make_generator(self, input_dim, latent_dim): - latent_inputs = tf.keras.layers.Input(shape=(latent_dim[0],latent_dim[1])) - x = tf.keras.layers.Conv1D(filters = 8, kernel_size= 1,padding='same', kernel_initializer="uniform")(latent_inputs) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - x = tf.keras.layers.UpSampling1D(2)(x) - x = tf.keras.layers.Conv1D(filters = 16, kernel_size= 1,padding='same', kernel_initializer="uniform")(x) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - #x = tf.keras.layers.UpSampling1D(2)(x) - x = tf.keras.layers.Conv1D(filters = input_dim[1], kernel_size= 1,padding='same', kernel_initializer="uniform")(x) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - generator = tf.keras.Model(inputs=latent_inputs, outputs=x, name="generator_model") - return generator - - def make_discriminator_model(self, input_dim): - inputs = tf.keras.layers.Input(shape=(input_dim[0],input_dim[1])) - x = tf.keras.layers.Conv1D(filters = 128, kernel_size= 1,padding='same', kernel_initializer="uniform")(inputs) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - x = tf.keras.layers.MaxPooling1D(pool_size=2, padding='same')(x) - x = tf.keras.layers.Conv1D(filters = 64, kernel_size= 1,padding='same', kernel_initializer="uniform")(x) - x = tf.keras.layers.BatchNormalization()(x) - x = tf.keras.layers.LeakyReLU(alpha=0.2)(x) - - # dense output layer - x = tf.keras.layers.Flatten()(x) - x = tf.keras.layers.LeakyReLU(0.2)(x) - x = tf.keras.layers.Dense(128)(x) - x = tf.keras.layers.LeakyReLU(0.2)(x) - prediction = tf.keras.layers.Dense(1)(x) - discriminator = tf.keras.Model(inputs=inputs, outputs=prediction, name="discriminator_model" ) - return discriminator - - # Training function - @tf.function - def train_step(self, real_data): - if isinstance(real_data, tuple): - real_data = real_data[0] - - # Get the batch size - batch_size = tf.shape(real_data)[0] - - # For each batch, we are going to perform the - # following steps as laid out in the original paper: - # 1. Train the generator and get the generator loss - # 1a. Train the encoder and get the encoder loss - # 2. Train the discriminator and get the discriminator loss - # 3. Calculate the gradient penalty - # 4. Multiply this gradient penalty with a constant weight factor - # 5. Add the gradient penalty to the discriminator loss - # 6. Return the generator and discriminator losses as a loss dictionary - - # Train the discriminator first. The original paper recommends training - # the discriminator for `x` more steps (typically 5) as compared to - # one step of the generator. Here we will train it for 3 extra steps - # as compared to 5 to reduce the training time. - for i in range(self.d_steps): - # Get the latent vector - random_latent_vectors = tf.random.normal(shape=(batch_size, self.latent_dim[0], self.latent_dim[1])), - with tf.GradientTape() as tape: - # Generate fake data from the latent vector - fake_data = self.generator(random_latent_vectors, training=True) - - #(somewhere here step forward?) - # Get the logits for the fake data - fake_logits = self.discriminator(fake_data, training=True) - # Get the logits for the real data - real_logits = self.discriminator(real_data, training=True) - - # Calculate the discriminator loss using the fake and real sample logits - d_cost = self.discriminator_loss(real_sample=real_logits, fake_sample=fake_logits) - # Calculate the gradient penalty - gp = self.gradient_penalty(real_data, fake_data) - # Add the gradient penalty to the original discriminator loss - d_loss = d_cost + gp * self.gp_weight - - # Get the gradients w.r.t the discriminator loss - d_gradient = tape.gradient(d_loss, self.discriminator.trainable_variables) - # Update the weights of the discriminator using the discriminator optimizer - self.d_optimizer.apply_gradients( - zip(d_gradient, self.discriminator.trainable_variables) - ) - - # Train the generator - # Get the latent vector - random_latent_vectors = tf.random.normal(shape=(batch_size, self.latent_dim[0], self.latent_dim[1])) - with tf.GradientTape() as tape: - # Generate fake data using the generator - generated_data = self.generator(random_latent_vectors, training=True) - # Get the discriminator logits for fake data - gen_sample_logits = self.discriminator(generated_data, training=True) - # Calculate the generator loss - g_loss = self.generator_loss(gen_sample_logits) - - # Get the gradients w.r.t the generator loss - gen_gradient = tape.gradient(g_loss, self.generator.trainable_variables) - # Update the weights of the generator using the generator optimizer - self.g_optimizer.apply_gradients( - zip(gen_gradient, self.generator.trainable_variables) - ) - - # Train the encoder - with tf.GradientTape() as tape: - generated_data = self.generator(random_latent_vectors, training=True) - # Compress generate fake data from the latent vector - encoded_fake_data = self.encoder(generated_data, training=True) - # Reconstruct encoded generate fake data - generator_reconstructed_encoded_fake_data = self.generator(encoded_fake_data, training=True) - # Encode the latent vector - encoded_random_latent_vectors = self.encoder(tf.random.normal(shape=(batch_size, self.input_dim[0], self.input_dim[1])), - training=True) - # Calculate encoder loss - e_loss = self.encoder_loss(generated_data, generator_reconstructed_encoded_fake_data) - - # Get the gradients w.r.t the generator loss - enc_gradient = tape.gradient(e_loss, self.encoder.trainable_variables) - # Update the weights of the generator using the generator optimizer - self.e_optimizer.apply_gradients( - zip(enc_gradient, self.encoder.trainable_variables) - ) - - anomaly_score = self.compute_anomaly_score(real_data) - - self.epoch_d_loss_avg.update_state(d_loss) - self.epoch_g_loss_avg.update_state(g_loss) - self.epoch_e_loss_avg.update_state(e_loss) - self.epoch_a_score_avg.update_state(anomaly_score["anomaly_score"]) - - return {"d_loss": d_loss, "g_loss": g_loss, "e_loss": e_loss, "anomaly_score": anomaly_score["anomaly_score"]} - - @tf.function - def test_step(self, input): - if isinstance(input, tuple): - input = input[0] - - batch_size = tf.shape(input)[0] - random_latent_vectors = tf.random.normal(shape=(batch_size, self.latent_dim[0], self.latent_dim[1])) - # Generate fake data using the generator - generated_data = self.generator(random_latent_vectors, training=False) - # Get the discriminator logits for fake data - gen_sample_logits = self.discriminator(generated_data, training=False) - # Calculate the generator loss - g_loss = self.generator_loss(gen_sample_logits) - - - # Compress generate fake data from the latent vector - encoded_fake_data = self.encoder(generated_data, training=False) - # Reconstruct encoded generate fake data - generator_reconstructed_encoded_fake_data = self.generator(encoded_fake_data, training=False) - - # Calculate encoder loss - e_loss = self.encoder_loss(generated_data, generator_reconstructed_encoded_fake_data) - - anomaly_score = self.compute_anomaly_score(input) - return { - "g_loss": g_loss, - "e_loss": e_loss, - "anomaly_score": anomaly_score["anomaly_score"] - } - - # define custom server function - @tf.function - def serve_function(self, input): - return self.compute_anomaly_score(input) - - def call(self, input): - if isinstance(input, tuple): - input = input[0] - - encoded = self.encoder(input) - decoded = self.generator(encoded) - anomaly_score = self.compute_anomaly_score(input) - return anomaly_score["anomaly_score"], decoded - - def compile(self): - super(GanEncAnomalyDetector, self).compile() - # Define optimizers - self.e_optimizer = tf.keras.optimizers.SGD(learning_rate=0.00001, clipnorm=0.01) - self.d_optimizer = tf.keras.optimizers.SGD(learning_rate=0.00001, clipnorm=0.01) - self.g_optimizer = tf.keras.optimizers.SGD(learning_rate=0.00001, clipnorm=0.01) - - def gradient_penalty(self, real_data, fake_data): - """ Calculates the gradient penalty. - This loss is calculated on an interpolated sample - and added to the discriminator loss. - """ - # Get the interpolated sample - real_data_shape = tf.shape(real_data) - alpha = tf.random.normal(shape=[real_data_shape[0], real_data_shape[1], real_data_shape[2]], mean=0.0, stddev=2.0, dtype=tf.dtypes.float32) - #alpha = tf.random_uniform([self.batch_size, 1], minval=-2, maxval=2, dtype=tf.dtypes.float32) - interpolated = (alpha * real_data) + ((1 - alpha) * fake_data) - - with tf.GradientTape() as gp_tape: - gp_tape.watch(interpolated) - # 1. Get the discriminator output for this interpolated sample. - pred = self.discriminator(interpolated, training=True) - - # 2. Calculate the gradients w.r.t to this interpolated sample. - grads = gp_tape.gradient(pred, [interpolated])[0] - # 3. Calculate the norm of the gradients. - norm = tf.sqrt(tf.reduce_sum(tf.square(grads), axis=[-2, -1])) - gp = tf.reduce_mean((norm - 1.0) ** 2) - return gp - - def encoder_loss(self,generated_fake_data, generator_reconstructed_encoded_fake_data): - generator_reconstracted_data = tf.cast(generator_reconstructed_encoded_fake_data, tf.float32) - loss = self.mse(generated_fake_data, generator_reconstracted_data) - beta_cycle_gen = 10.0 - loss = loss * beta_cycle_gen - return loss - - # Define the loss functions for the discriminator, - # which should be (fake_loss - real_loss). - # We will add the gradient penalty later to this loss function. - def discriminator_loss(self, real_sample, fake_sample): - real_loss = tf.reduce_mean(real_sample) - fake_loss = tf.reduce_mean(fake_sample) - return fake_loss - real_loss - - # Define the loss functions for the generator. - def generator_loss(self, fake_sample): - return -tf.reduce_mean(fake_sample) - - def compute_anomaly_score(self, input): - """anomaly score. - See https://arxiv.org/pdf/1905.11034.pdf for more details - """ - # Encode the real data - encoded_real_data = self.encoder(input, training=False) - # Reconstruct encoded real data - generator_reconstructed_encoded_real_data = self.generator(encoded_real_data, training=False) - # Calculate distance between real and reconstructed data (Here may be step forward?) - gen_rec_loss_predict = self.mse(input,generator_reconstructed_encoded_real_data) - - # # Compute anomaly score - # real_to_orig_dist_predict = tf.math.reduce_sum(tf.math.pow(encoded_random_latent - encoded_real_data, 2), axis=[-1]) - # anomaly_score = (gen_rec_loss_predict * self.anomaly_alpha) + ((1 - self.anomaly_alpha) * real_to_orig_dist_predict) - anomaly_score = gen_rec_loss_predict - return {'anomaly_score': anomaly_score} - \ No newline at end of file diff --git a/integrations/neo4j/features/graph_embeddings.py b/integrations/neo4j/features/graph_embeddings.py deleted file mode 100644 index 5348a6cf..00000000 --- a/integrations/neo4j/features/graph_embeddings.py +++ /dev/null @@ -1,299 +0,0 @@ -import tensorflow as tf -from tensorflow import keras -from tensorflow.keras import layers -import pandas as pd -import numpy as np - -def create_ffn(hidden_units: list, dropout_rate: float, name: str = None) -> keras.Sequential: - """ - Create a feedforward neural network layer. - - Parameters: - - hidden_units (list): List of integers specifying the number of units in each hidden layer. - - dropout_rate (float): Dropout rate for regularization. - - name (str): Name of the layer. - - Returns: - keras.Sequential: Feedforward neural network layer. - """ - fnn_layers = [] - - for units in hidden_units: - fnn_layers.append(layers.BatchNormalization()) - fnn_layers.append(layers.Dropout(dropout_rate)) - fnn_layers.append(layers.Dense(units, activation=tf.nn.gelu)) - - return keras.Sequential(fnn_layers, name=name) - -class GraphConvLayer(layers.Layer): - """ - Graph Convolutional Layer. - - Parameters: - - hidden_units (list): List of integers specifying the number of units in each hidden layer. - - dropout_rate (float): Dropout rate for regularization. - - aggregation_type (str): Type of aggregation for neighbor messages ('sum', 'mean', 'max'). - - combination_type (str): Type of combination for node embeddings ('gated', 'gru', 'concat', 'add'). - - normalize (bool): Flag to normalize node embeddings. - """ - - def __init__( - self, - hidden_units: list, - dropout_rate: float = 0.2, - aggregation_type: str = "mean", - combination_type: str = "concat", - normalize: bool = False, - *args, - **kwargs, - ): - super(GraphConvLayer, self).__init__(*args, **kwargs) - - self.aggregation_type = aggregation_type - self.combination_type = combination_type - self.normalize = normalize - - self.ffn_prepare = create_ffn(hidden_units, dropout_rate) - if self.combination_type == "gated": - self.update_fn = layers.GRU( - units=hidden_units, - activation="tanh", - recurrent_activation="sigmoid", - dropout=dropout_rate, - return_state=True, - recurrent_dropout=dropout_rate, - ) - else: - self.update_fn = create_ffn(hidden_units, dropout_rate) - - def prepare(self, node_repesentations, weights=None) -> tf.Tensor: - """ - Prepare neighbor messages. - - Parameters: - - node_repesentations (tf.Tensor): Node representations. - - weights (tf.Tensor): Weights for neighbor messages. - - Returns: - tf.Tensor: Prepared neighbor messages. - """ - messages = self.ffn_prepare(node_repesentations) - if weights is not None: - messages = messages * tf.expand_dims(weights, -1) - return messages - - def aggregate(self, node_indices, neighbour_messages) -> tf.Tensor: - """ - Aggregate neighbor messages. - - Parameters: - - node_indices (tf.Tensor): Node indices. - - neighbour_messages (tf.Tensor): Neighbor messages. - - Returns: - tf.Tensor: Aggregated messages. - """ - num_nodes = tf.math.reduce_max(node_indices) + 1 - if self.aggregation_type == "sum": - aggregated_message = tf.math.unsorted_segment_sum( - neighbour_messages, node_indices, num_segments=num_nodes - ) - elif self.aggregation_type == "mean": - aggregated_message = tf.math.unsorted_segment_mean( - neighbour_messages, node_indices, num_segments=num_nodes - ) - elif self.aggregation_type == "max": - aggregated_message = tf.math.unsorted_segment_max( - neighbour_messages, node_indices, num_segments=num_nodes - ) - else: - raise ValueError(f"Invalid aggregation type: {self.aggregation_type}.") - - return aggregated_message - - def update(self, node_repesentations, aggregated_messages) -> tf.Tensor: - """ - Update node embeddings. - - Parameters: - - node_repesentations (tf.Tensor): Node representations. - - aggregated_messages (tf.Tensor): Aggregated neighbor messages. - - Returns: - tf.Tensor: Updated node embeddings. - """ - if self.combination_type == "gru": - h = tf.stack([node_repesentations, aggregated_messages], axis=1) - elif self.combination_type == "concat": - h = tf.concat([node_repesentations, aggregated_messages], axis=1) - elif self.combination_type == "add": - h = node_repesentations + aggregated_messages - else: - raise ValueError(f"Invalid combination type: {self.combination_type}.") - - node_embeddings = self.update_fn(h) - if self.combination_type == "gru": - node_embeddings = tf.unstack(node_embeddings, axis=1)[-1] - - if self.normalize: - node_embeddings = tf.nn.l2_normalize(node_embeddings, axis=-1) - return node_embeddings - - def call(self, inputs) -> tf.Tensor: - """ - Process inputs to produce node embeddings. - - Parameters: - inputs: a tuple of three elements: node_repesentations, edges, edge_weights. - - Returns: - tf.Tensor: Node embeddings. - """ - node_repesentations, edges, edge_weights = inputs - node_indices, neighbour_indices = edges[0], edges[1] - neighbour_repesentations = tf.gather(node_repesentations, neighbour_indices) - - neighbour_messages = self.prepare(neighbour_repesentations, edge_weights) - aggregated_messages = self.aggregate(node_indices, neighbour_messages) - return self.update(node_repesentations, aggregated_messages) - - -class GNNNodeClassifier(tf.keras.Model): - """ - Graph Neural Network Node Classifier. - - Parameters: - - graph_info: Tuple of node_features, edges, and edge_weights. - - hidden_units (list): List of integers specifying the number of units in each hidden layer. - - aggregation_type (str): Type of aggregation for neighbor messages ('sum', 'mean', 'max'). - - combination_type (str): Type of combination for node embeddings ('gated', 'gru', 'concat', 'add'). - - dropout_rate (float): Dropout rate for regularization. - - normalize (bool): Flag to normalize node embeddings. - """ - - def __init__( - self, - graph_info: tuple, - hidden_units: list, - aggregation_type: str = "sum", - combination_type: str = "concat", - dropout_rate: float = 0.2, - normalize: bool = True, - *args, - **kwargs, - ): - super(GNNNodeClassifier, self).__init__(*args, **kwargs) - - node_features, edges, edge_weights = graph_info - self.node_features = node_features - self.edges = edges - self.edge_weights = edge_weights - - if self.edge_weights is None: - self.edge_weights = tf.ones(shape=edges.shape[1]) - - self.edge_weights = self.edge_weights / tf.math.reduce_sum(self.edge_weights) - - self.preprocess = create_ffn(hidden_units, dropout_rate, name="preprocess") - self.conv1 = GraphConvLayer( - hidden_units, - dropout_rate, - aggregation_type, - combination_type, - normalize, - name="graph_conv1", - ) - self.conv2 = GraphConvLayer( - hidden_units, - dropout_rate, - aggregation_type, - combination_type, - normalize, - name="graph_conv2", - ) - self.postprocess = create_ffn(hidden_units, dropout_rate, name="postprocess") - self.compute_logits = layers.Dense(hidden_units[0], activation=tf.nn.tanh, name="logits") - - def call(self, input_node_indices) -> tf.Tensor: - """ - Make predictions. - - Parameters: - - input_node_indices (tf.Tensor): Input node indices. - - Returns: - tf.Tensor: Predictions. - """ - x = self.preprocess(self.node_features) - x1 = self.conv1((x, self.edges, self.edge_weights)) - x = x1 + x - x2 = self.conv2((x, self.edges, self.edge_weights)) - x = x2 + x - x = self.postprocess(x) - node_embeddings = tf.gather(x, input_node_indices) - return self.compute_logits(node_embeddings) - - -def construct_graph(input_df: pd.DataFrame, data_party_labels: pd.DataFrame) -> dict: - """ - Construct a graph and generate node embeddings. - - Parameters: - - input_df (pd.DataFrame): Input transaction DataFrame. - - data_party_labels (pd.DataFrame): DataFrame containing party labels. - - Returns: - dict: Dictionary with keys 'id' and 'graph_embeddings'. - """ - sampled_party = data_party_labels[data_party_labels.id.isin(input_df.source) | (data_party_labels.id.isin(input_df.target))] - sampled_party = sampled_party[["id", "type", "is_sar"]] - - unique_ids = set(sampled_party.id.values) - id_dict = {idn: i for i, idn in enumerate(unique_ids)} - - sampled_party['int_id'] = sampled_party['id'].apply(lambda x: id_dict[x]) - input_df['source'] = input_df['source'].apply(lambda x: id_dict[x]) - input_df['target'] = input_df['target'].apply(lambda x: id_dict[x]) - - feature_names = ["type"] - x_train = sampled_party.int_id.to_numpy() - - edges = input_df[["source", "target"]].to_numpy().T - edge_weights = tf.ones(shape=edges.shape[1]) - node_features = tf.cast( - sampled_party.sort_values("id")[feature_names].to_numpy(), dtype=tf.dtypes.float32 - ) - graph_info = (node_features, edges, edge_weights) - - # Hyperparameters for graph embeddings model - hidden_units = [32, 32] - learning_rate = 0.01 - dropout_rate = 0.5 - num_epochs = 2 - batch_size = 256 - - # Construct the model - model = GNNNodeClassifier( - graph_info=graph_info, - hidden_units=hidden_units, - dropout_rate=dropout_rate, - name="gnn_model", - ) - - # Compile the model. - model.compile( - optimizer=keras.optimizers.RMSprop(learning_rate=learning_rate), - loss=keras.losses.MeanSquaredError(), - metrics=[keras.metrics.SparseCategoricalAccuracy(name="acc")], - ) - - # Fit the model. - history = model.fit( - x=x_train, - y=x_train, - epochs=num_epochs, - batch_size=batch_size, - ) - - graph_embeddings = list(model.predict(x_train).reshape(node_features.shape[0], hidden_units[0])) - return {"id": sampled_party.id.to_numpy(), "graph_embeddings": graph_embeddings} diff --git a/integrations/neo4j/features/party.py b/integrations/neo4j/features/party.py deleted file mode 100644 index 92453112..00000000 --- a/integrations/neo4j/features/party.py +++ /dev/null @@ -1,70 +0,0 @@ -import datetime -import pandas as pd -import numpy as np - -def get_transaction_labels(data_transactions: pd.DataFrame, data_alert_transactions: pd.DataFrame) -> pd.DataFrame: - """ - Merge transaction data with alert transaction data to get labels indicating SAR occurrences. - - Parameters: - - data_transactions (pd.DataFrame): DataFrame containing transaction information. - - data_alert_transactions (pd.DataFrame): DataFrame with alert transaction information, including SAR labels. - - Returns: - pd.DataFrame: Merged DataFrame with transaction labels indicating SAR occurrences. - """ - transaction_labels = data_transactions[ - ["source", "target", "tran_id", "tran_timestamp"] - ].merge( - data_alert_transactions[["is_sar", "tran_id"]], - on=["tran_id"], - how="left", - ) - transaction_labels.is_sar = transaction_labels.is_sar.map({ - True: 1, - np.nan: 0, - }) - transaction_labels.sort_values( - 'tran_id', - inplace=True, - ) - transaction_labels.rename(columns={"tran_id": "id"}, inplace=True) - return transaction_labels - - -def get_party_labels(data_transaction_labels: pd.DataFrame, data_party: pd.DataFrame) -> pd.DataFrame: - """ - Assign SAR(Suspicious Activity Reports) labels to parties based on transaction data. - - Parameters: - - data_transaction_labels (pd.DataFrame): DataFrame containing transaction labels, including SAR information. - - data_party (pd.DataFrame): DataFrame with party information. - - Returns: - pd.DataFrame: DataFrame with party labels indicating SAR occurrences. - """ - alert_transactions = data_transaction_labels[data_transaction_labels.is_sar == 1] - alert_sources = alert_transactions[["source", "tran_timestamp"]] - alert_sources.columns = ["id", "tran_timestamp"] - alert_targets = alert_transactions[["target", "tran_timestamp"]] - alert_targets.columns = ["id", "tran_timestamp"] - #sar_party = alert_sources.append(alert_targets, ignore_index=True) - sar_party = pd.concat([alert_sources, alert_targets], ignore_index=True) - - sar_party.sort_values(["id", "tran_timestamp"], ascending=[False, True]) - - # Find the first occurrence of SAR per ID - sar_party = sar_party.iloc[[sar_party.id.eq(id).idxmax() for id in sar_party['id'].value_counts().index]] - sar_party = sar_party.groupby([pd.Grouper(key='tran_timestamp', freq='M'), 'id']).agg(monthly_count=('id', 'count')) - sar_party = sar_party.reset_index(level=["id"]) - sar_party = sar_party.reset_index(level=["tran_timestamp"]) - sar_party.drop(["monthly_count"], axis=1, inplace=True) - - sar_party["is_sar"] = sar_party["is_sar"] = 1 - - party_labels = data_party.merge(sar_party, on=["id"], how="left") - party_labels.is_sar = party_labels.is_sar.map({1.0: 1, np.nan: 0}) - max_time_stamp = datetime.datetime.utcfromtimestamp(int(max(data_transaction_labels.tran_timestamp.values)) / 1e9) - party_labels = party_labels.fillna(max_time_stamp) - - return party_labels diff --git a/integrations/neo4j/features/transactions.py b/integrations/neo4j/features/transactions.py deleted file mode 100644 index 7db4f7a4..00000000 --- a/integrations/neo4j/features/transactions.py +++ /dev/null @@ -1,66 +0,0 @@ -import pandas as pd -import numpy as np - -def get_out_transactions(data: pd.DataFrame) -> pd.DataFrame: - """ - Calculate monthly outgoing transaction statistics for each source ID. - - Parameters: - - data (pd.DataFrame): DataFrame containing transaction information. - - Returns: - pd.DataFrame: DataFrame with monthly outgoing transaction statistics. - """ - out_df = data.groupby([pd.Grouper(key='tran_timestamp', freq='M'), 'source']) \ - .agg(monthly_count=('source', 'count'), - monthly_total_amount=('base_amt', 'sum'), - monthly_mean_amount=('base_amt', 'mean'), - monthly_std_amount=('base_amt', 'std') - ) - out_df = out_df.reset_index(level=["source"]) - out_df = out_df.reset_index(level=["tran_timestamp"]) - out_df.columns = ["tran_timestamp", "id", "monthly_out_count", "monthly_out_total_amount", - "monthly_out_mean_amount", "monthly_out_std_amount"] - out_df.tran_timestamp = out_df.tran_timestamp.values.astype(np.int64) // 10 ** 6 - return out_df - - -def get_in_transactions(data: pd.DataFrame) -> pd.DataFrame: - """ - Calculate monthly incoming transaction statistics for each target ID. - - Parameters: - - data (pd.DataFrame): DataFrame containing transaction information. - - Returns: - pd.DataFrame: DataFrame with monthly incoming transaction statistics. - """ - in_df = data.groupby([pd.Grouper(key='tran_timestamp', freq='M'), 'target']) \ - .agg(monthly_count=('target', 'count'), - monthly_total_amount=('base_amt', 'sum'), - monthly_mean_amount=('base_amt', 'mean'), - monthly_std_amount=('base_amt', 'std')) - - in_df = in_df.reset_index(level=["target"]) - in_df = in_df.reset_index(level=["tran_timestamp"]) - in_df.columns = ["tran_timestamp", "id", "monthly_in_count", "monthly_in_total_amount", - "monthly_in_mean_amount", "monthly_in_std_amount"] - in_df.tran_timestamp = in_df.tran_timestamp.values.astype(np.int64) // 10 ** 6 - return in_df - - -def get_in_out_transactions(data_transactions: pd.DataFrame) -> pd.DataFrame: - """ - Merge monthly incoming and outgoing transaction statistics. - - Parameters: - - data_transactions (pd.DataFrame): DataFrame containing transaction information. - - Returns: - pd.DataFrame: Merged DataFrame with monthly incoming and outgoing transaction statistics. - """ - out_df = get_out_transactions(data_transactions) - in_df = get_in_transactions(data_transactions) - in_out_df = in_df.merge(out_df, on=['tran_timestamp', 'id'], how="outer") - in_out_df = in_out_df.fillna(0) - return in_out_df diff --git a/integrations/neo4j/images/contuct_us.png b/integrations/neo4j/images/contuct_us.png deleted file mode 100755 index 19b48490..00000000 Binary files a/integrations/neo4j/images/contuct_us.png and /dev/null differ diff --git a/integrations/neo4j/images/deployment.gif b/integrations/neo4j/images/deployment.gif deleted file mode 100755 index 2f01f22e..00000000 Binary files a/integrations/neo4j/images/deployment.gif and /dev/null differ diff --git a/integrations/neo4j/images/feature_view_stats.gif b/integrations/neo4j/images/feature_view_stats.gif deleted file mode 100755 index d23f2f97..00000000 Binary files a/integrations/neo4j/images/feature_view_stats.gif and /dev/null differ diff --git a/integrations/neo4j/images/feature_views_explore.gif b/integrations/neo4j/images/feature_views_explore.gif deleted file mode 100755 index 74f0fa7b..00000000 Binary files a/integrations/neo4j/images/feature_views_explore.gif and /dev/null differ diff --git a/integrations/neo4j/images/fg_explore.gif b/integrations/neo4j/images/fg_explore.gif deleted file mode 100755 index 90c7a4d1..00000000 Binary files a/integrations/neo4j/images/fg_explore.gif and /dev/null differ diff --git a/integrations/neo4j/images/freature_group_stats.gif b/integrations/neo4j/images/freature_group_stats.gif deleted file mode 100755 index ad1b2775..00000000 Binary files a/integrations/neo4j/images/freature_group_stats.gif and /dev/null differ diff --git a/integrations/neo4j/images/model_architecture.png b/integrations/neo4j/images/model_architecture.png deleted file mode 100755 index 8d43b5ff..00000000 Binary files a/integrations/neo4j/images/model_architecture.png and /dev/null differ diff --git a/integrations/neo4j/images/serving_endpoints.gif b/integrations/neo4j/images/serving_endpoints.gif deleted file mode 100755 index de46c5b4..00000000 Binary files a/integrations/neo4j/images/serving_endpoints.gif and /dev/null differ diff --git a/integrations/neo4j/requirements.txt b/integrations/neo4j/requirements.txt deleted file mode 100644 index ba3fa46a..00000000 --- a/integrations/neo4j/requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -hopsworks -neo4j -tqdm -scikit-learn -hsfs -joblib -tqdm -graphdatascience -great_expectations -tensorflow -requests \ No newline at end of file diff --git a/integrations/polars/quickstart_polars.ipynb b/integrations/polars/quickstart_polars.ipynb deleted file mode 100644 index efc53e80..00000000 --- a/integrations/polars/quickstart_polars.ipynb +++ /dev/null @@ -1,1786 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "8WLB6QFXksxw" - }, - "source": [ - "![Screenshot from 2022-06-16 14-24-57.png](data:image/png;base64,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)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/logicalclocks/hopsworks-tutorials/blob/master/quickstart.ipynb)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the quick start tutorial for using **Polars** with the **Hopsworks Feature Store**. As part of this tutorial, you will work with data related to credit card transactions. \n", - "The objective of this tutorial is to demonstrate how to use polars with the Hopworks Feature Store with a goal of training and saving a model that can predict fraudulent transactions. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "NpwpPe1wxQ5M" - }, - "source": [ - "## ๐Ÿ’ฝ Loading the Data \n", - "\n", - "The data you will use comes from three different CSV files:\n", - "\n", - "* credit_cards.csv: information such as the expiration date and provider.\n", - "* transactions.csv: events containing information about when a credit card was used, such as a timestamp, location, and the amount spent. A boolean fraud_label variable (True/False) tells us whether a transaction was fraudulent or not.\n", - "* profiles.csv: credit card user information such as birthdate and city of residence.\n", - "\n", - "In a production system, these CSV files would originate from separate data sources or tables, and probably separate data pipelines. All three files have a common credit card number column cc_num, which you will use later to join features together from the different datasets.\n", - "\n", - "Now, you can go ahead and load the data.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import joblib\n", - "import os\n", - "import time\n", - "\n", - "import polars as pl\n", - "import numpy as np\n", - "from matplotlib import pyplot\n", - "import seaborn as sns\n", - "from math import radians\n", - "\n", - "import xgboost as xgb\n", - "from sklearn.metrics import confusion_matrix\n", - "from sklearn.metrics import f1_score\n", - "\n", - "# Mute warnings\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 143 - }, - "id": "ARrJ_Bp5xMIk", - "outputId": "14e7a020-e04a-40d5-fdea-c4ba71f8a034" - }, - "outputs": [], - "source": [ - "# Specify the window length as \"4h\"\n", - "window_len = \"4h\"\n", - "\n", - "# Specify the URL for the data\n", - "url = \"https://repo.hops.works/master/hopsworks-tutorials/data/card_fraud_data/\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Read the 'credit_cards.csv' file\n", - "credit_cards_df = pl.read_csv(url + \"credit_cards.csv\")\n", - "\n", - "# Read the 'profiles.csv' file\n", - "# Parse the 'birthdate' column as dates\n", - "profiles_df = pl.read_csv(url + \"profiles.csv\", try_parse_dates=True)\n", - "\n", - "# Read the 'transactions.csv' file\n", - "# Parse the 'datetime' column as dates\n", - "trans_df = pl.read_csv(url + \"transactions.csv\", try_parse_dates=True)\n", - "\n", - "# Display the first 3 rows of the 'transactions.csv' DataFrame\n", - "trans_df.head(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HPq2qUtNxjaM" - }, - "source": [ - "## ๐Ÿ› ๏ธ Feature Engineering \n", - "\n", - "Fraudulent transactions can differ from regular ones in many different ways. Typical red flags would for instance be a large transaction volume/frequency in the span of a few hours. It could also be the case that elderly people in particular are targeted by fraudsters. To facilitate model learning, we will create additional features based on these patterns. In particular, we will create two types of features:\n", - "\n", - "* Features that aggregate data from different data sources. This could for instance be the age of a customer at the time of a transaction, which combines the birthdate feature from profiles.csv with the datetime feature from transactions.csv.\n", - "* Features that aggregate data from multiple time steps. An example of this could be the transaction frequency of a credit card in the span of a few hours, which is computed using a window function.\n", - "\n", - "Now you are ready to start with the first category.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 206 - }, - "id": "ngEPnNzAxqsJ", - "outputId": "c8cf6082-1d1d-4bf7-9d81-ac2294146a27" - }, - "outputs": [], - "source": [ - "# Merge the 'trans_df' DataFrame with the 'profiles_df' DataFrame based on the 'cc_num' column\n", - "age_df = trans_df.join(profiles_df, on=\"cc_num\", how=\"left\")\n", - "\n", - "# Merge the 'trans_df' DataFrame with the 'credit_cards_df' DataFrame based on the 'cc_num' column\n", - "card_expiry_df = trans_df.join(credit_cards_df, on=\"cc_num\", how=\"left\")\n", - "\n", - "# Convert the 'expires' column to datetime format\n", - "card_expiry_df = card_expiry_df.with_columns(pl.col(\"expires\").str.to_datetime(\"%m/%y\"))\n", - "\n", - "# Compute the age at the time of each transaction and store it in the 'age_at_transaction' column\n", - "trans_df = trans_df.with_columns(age_at_transaction = (age_df[\"datetime\"] - age_df[\"birthdate\"]).dt.days()/365)\n", - "\n", - "# Compute the days until the card expires and store it in the 'days_until_card_expires' column\n", - "trans_df = trans_df.with_columns(days_until_card_expires = (card_expiry_df[\"expires\"] - card_expiry_df[\"datetime\"]).dt.days())\n", - "\n", - "# Display the 'age_at_transaction' and 'days_until_card_expires' columns for the first few rows\n", - "trans_df[[\"age_at_transaction\", \"days_until_card_expires\"]].head()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zEC12W4ux2Uk" - }, - "source": [ - "The next step is that you will create features from aggregations that are computed over every credit card over multiple time steps.\n", - "\n", - "You start by computing a feature that captures the physical distance between consecutive transactions, which we will call `loc_delta`. Here, you will use Haversine distance to quantify the distance between two longitude and latitude coordinates.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "rQ-g4ETOx4O5" - }, - "outputs": [], - "source": [ - "# Sort the 'trans_df' DataFrame based on the 'datetime' column in ascending order\n", - "trans_df = trans_df.sort(\"datetime\")\n", - "\n", - "# Convert the 'longitude' and 'latitude' columns to radians\n", - "trans_df = trans_df.with_columns(pl.col(\"latitude\").map_elements(radians),\n", - " pl.col(\"longitude\").map_elements(radians))\n", - "\n", - "# Define a function to compute Haversine distance between consecutive coordinates\n", - "def haversine(long, lat):\n", - " \"\"\"Compute Haversine distance between each consecutive coordinate in (long, lat).\"\"\"\n", - "\n", - " # Shift the longitude and latitude columns to get consecutive values\n", - " long_shifted = long.shift()\n", - " lat_shifted = lat.shift()\n", - "\n", - " # Calculate the differences in longitude and latitude\n", - " long_diff = long_shifted - long\n", - " lat_diff = lat_shifted - lat\n", - "\n", - " # Haversine formula to compute distance\n", - " a = np.sin(lat_diff/2.0)**2\n", - " b = np.cos(lat) * np.cos(lat_shifted) * np.sin(long_diff/2.0)**2\n", - " c = 2*np.arcsin(np.sqrt(a + b))\n", - "\n", - " return c\n", - "\n", - "# Apply the haversine function to compute the 'loc_delta' column\n", - "trans_df = trans_df.with_columns(trans_df.groupby(\"cc_num\")\n", - " .agg(pl.map_groups(exprs=[\"longitude\", \"latitude\"], function = lambda x : haversine(x[0], x[1]))\n", - " .alias(\"loc_delta\")).explode(\"loc_delta\").fill_null(0).select(\"loc_delta\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "a_MHfwYsGfbo" - }, - "source": [ - "Next you will compute windowed aggregates. Here you will use 4-hour windows, but feel free to experiment with different window lengths by setting `window_len` below to a value of your choice." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 206 - }, - "id": "jmywmIVKGgLR", - "outputId": "32ad2881-9a27-483f-c8e4-9ef94af6dd6e" - }, - "outputs": [], - "source": [ - "window_aggs_df = trans_df[[\"cc_num\", \"amount\", \"datetime\", \"loc_delta\"]].rolling(\n", - " period=window_len, \n", - " index_column=\"datetime\",\n", - " by=[\"cc_num\"]\n", - ").agg(pl.col(\"amount\").mean().alias(\"trans_volume_mavg\"),\n", - " pl.col(\"amount\").std().alias(\"trans_volume_mstd\"),\n", - " pl.col(\"amount\").count().alias(\"trans_freq\"),\n", - " pl.col(\"loc_delta\").mean().alias(\"loc_delta_mavg\"),).fill_null(0)\n", - "window_aggs_df.tail()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yB90r9qszLe2" - }, - "source": [ - "## ๐Ÿช„ Creating Feature Groups \n", - "\n", - "A feature group can be seen as a collection of conceptually related features that are computed together at the same cadence. In your case, you will create a feature group for the transaction data and a feature group for the windowed aggregations on the transaction data. Both will have `tid` as primary key, which will allow you to join them together to create training data in a follow-on tutorial.\n", - "\n", - "Feature groups provide a namespace for features, so two features are allowed to have the same name as long as they belong to different feature groups. For instance, in a real-life setting we would likely want to experiment with different window lengths. In that case, we can create feature groups with identical schema for each window length.\n", - "\n", - "Before you can create a feature group we need to connect to our feature store.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "WFmD_15TzMHX", - "outputId": "6acf8632-6993-485c-fb2a-31f27f7b462f" - }, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'transactions' feature group\n", - "trans_fg = fs.get_or_create_feature_group(\n", - " name=\"transactions\",\n", - " version=1,\n", - " description=\"Transaction data\",\n", - " primary_key=[\"cc_num\"],\n", - " event_time=\"datetime\",\n", - " online_enabled=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", - "\n", - "At this point, you have only specified some metadata for the feature group. It does not store any data or even have a schema defined for the data. To make the feature group persistent you need to populate it with its associated data using the `insert` function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Insert data into feature group\n", - "trans_fg.insert(trans_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Update feature descriptions\n", - "feature_descriptions = [\n", - " {\"name\": \"tid\", \"description\": \"Transaction id\"},\n", - " {\"name\": \"datetime\", \"description\": \"Transaction time\"},\n", - " {\"name\": \"cc_num\", \"description\": \"Number of the credit card performing the transaction\"},\n", - " {\"name\": \"category\", \"description\": \"Expense category\"},\n", - " {\"name\": \"amount\", \"description\": \"Dollar amount of the transaction\"},\n", - " {\"name\": \"latitude\", \"description\": \"Transaction location latitude\"},\n", - " {\"name\": \"longitude\", \"description\": \"Transaction location longitude\"},\n", - " {\"name\": \"city\", \"description\": \"City in which the transaction was made\"},\n", - " {\"name\": \"country\", \"description\": \"Country in which the transaction was made\"},\n", - " {\"name\": \"fraud_label\", \"description\": \"Whether the transaction was fraudulent or not\"},\n", - " {\"name\": \"age_at_transaction\", \"description\": \"Age of the card holder when the transaction was made\"},\n", - " {\"name\": \"days_until_card_expires\", \"description\": \"Card validity days left when the transaction was made\"},\n", - " {\"name\": \"loc_delta\", \"description\": \"Haversine distance between this transaction location and the previous transaction location from the same card\"},\n", - "]\n", - "\n", - "for desc in feature_descriptions: \n", - " trans_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "At the creation of the feature group, you will be prompted with an URL that will directly link to it; there you will be able to explore some of the aspects of your newly created feature group.\n", - "\n", - "[//]: <> (insert GIF here)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can move on and do the same thing for the feature group with our windows aggregation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'transactions' feature group with aggregations using specified window len\n", - "window_aggs_fg = fs.get_or_create_feature_group(\n", - " name=f\"transactions_{window_len}_aggs\",\n", - " version=1,\n", - " description=f\"Aggregate transaction data over {window_len} windows.\",\n", - " primary_key=[\"cc_num\"],\n", - " event_time=\"datetime\",\n", - " online_enabled=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Insert data into feature group\n", - "window_aggs_fg.insert(window_aggs_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Update feature descriptions\n", - "feature_descriptions = [\n", - " {\"name\": \"datetime\", \"description\": \"Transaction time\"},\n", - " {\"name\": \"cc_num\", \"description\": \"Number of the credit card performing the transaction\"},\n", - " {\"name\": \"loc_delta_mavg\", \"description\": \"Moving average of location difference between consecutive transactions from the same card\"},\n", - " {\"name\": \"trans_freq\", \"description\": \"Moving average of transaction frequency from the same card\"},\n", - " {\"name\": \"trans_volume_mavg\", \"description\": \"Moving average of transaction volume from the same card\"},\n", - " {\"name\": \"trans_volume_mstd\", \"description\": \"Moving standard deviation of transaction volume from the same card\"},\n", - "]\n", - "\n", - "for desc in feature_descriptions: \n", - " window_aggs_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "### ๐Ÿ”ช Feature Selection \n", - "\n", - "You will start by selecting all the features you want to include for model training/inference." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Select features for training data\n", - "selected_features = trans_fg.select([\"fraud_label\", \"category\", \"amount\", \"age_at_transaction\", \"days_until_card_expires\", \"loc_delta\"])\\\n", - " .join(window_aggs_fg.select_except([\"cc_num\"]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Recall that you computed the features in `transactions_4h_aggs_fraud_batch_fg` using 4-hour aggregates. If you had created multiple feature groups with identical schema for different window lengths, and wanted to include them in the join you would need to include a prefix argument in the join to avoid feature name clash. See the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/query_api/#join) for more details." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿค– Transformation Functions \n", - "\n", - "\n", - "You will preprocess our data using *min-max scaling* on numerical features and *label encoding* on categorical features. To do this you simply define a mapping between our features and transformation functions. This ensures that transformation functions such as *min-max scaling* are fitted only on the training data (and not the validation/test data), which ensures that there is no data leakage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load transformation functions.\n", - "label_encoder = fs.get_transformation_function(name=\"label_encoder\")\n", - "\n", - "# Map features to transformations.\n", - "transformation_functions = {\n", - " \"category\": label_encoder,\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Creation \n", - "\n", - "The Feature View is the collection of features (from feature groups) and transformation functions used to train models and serve precomputed features to deployed models.\n", - "\n", - "The Feature View includes all of the features defined in the query object you created earlier. It can additionally include filters, one or more columns identified as the target(s) (or label) and the set of transformation functions and the features they are applied to. \n", - "\n", - "You create a Feature View with `fs.create_feature_view()`. \n", - "You retrieve a reference to an existing feature view with: `fs.get_feature_view('transactions_view',version=1)`.\n", - "In addition you can use `fs.get_or_create_feature_view()` method in order to retrieve existing feature view or create if it does not exist.\n", - "This code first tries to get a reference to the feature_view, if it doesn't exist it creates the feature_view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'transactions_view' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name='transactions_view',\n", - " version=1,\n", - " query=selected_features,\n", - " labels=[\"fraud_label\"],\n", - " transformation_functions=transformation_functions,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## ๐Ÿ‹๏ธ Training Dataset Creation\n", - "\n", - "In Hopsworks training data is a query where the projection (set of features) is determined by the parent FeatureView with an optional snapshot on disk of the data returned by the query.\n", - "\n", - "**Training Dataset may contain splits such as:** \n", - "* Training set - the subset of training data used to train a model.\n", - "* Validation set - the subset of training data used to evaluate hparams when training a model\n", - "* Test set - the holdout subset of training data used to evaluate a mode\n", - "\n", - "Training dataset is created using `feature_view.train_test_split()` method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "TEST_SIZE = 0.2\n", - "\n", - "X_train, X_test, y_train, y_test = feature_view.train_test_split(\n", - " description='transactions fraud training dataset',\n", - " test_size=TEST_SIZE,\n", - " dataframe_type=\"polars\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Combining training data and labels for sorting\n", - "training_data = pl.concat([X_train, y_train], how=\"horizontal\")\n", - "\n", - "# Sort the training features DataFrame based on the 'datetime' column\n", - "training_data = training_data.sort(\"datetime\")\n", - "\n", - "X_train = training_data.select(pl.exclude(\"fraud_label\"))\n", - "\n", - "y_train = training_data.select(\"fraud_label\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Combining training data and labels for sorting\n", - "test_data = pl.concat([X_test, y_test], how=\"horizontal\")\n", - "\n", - "# Sort the test features DataFrame based on the 'datetime' column\n", - "test_data = test_data.sort(\"datetime\")\n", - "\n", - "X_test = test_data.select(pl.exclude(\"fraud_label\"))\n", - "\n", - "y_test = test_data.select(\"fraud_label\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Drop the 'datetime' column from the training features DataFrame 'X_train'\n", - "X_train = X_train.drop([\"datetime\"])\n", - "\n", - "# Drop the 'datetime' column from the test features DataFrame 'X_test'\n", - "X_test = X_test.drop([\"datetime\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Display the normalized value counts of the target variable 'y_train'\n", - "y_train[\"fraud_label\"].value_counts()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that the distribution is extremely skewed, which is natural considering that fraudulent transactions make up a tiny part of all transactions. Thus you should somehow address the class imbalance. There are many approaches for this, such as weighting the loss function, over- or undersampling, creating synthetic data, or modifying the decision threshold. In this example, you will use the simplest method which is to just supply a class weight parameter to our learning algorithm. The class weight will affect how much importance is attached to each class, which in our case means that higher importance will be placed on positive (fraudulent) samples." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Modeling\n", - "\n", - "Next you will train a model. Here, you set larger class weight for the positive class." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create an XGBoost classifier\n", - "clf = xgb.XGBClassifier()\n", - "\n", - "# Fit XGBoost classifier to the training data\n", - "clf.fit(X_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Predict the training data using the trained classifier\n", - "y_pred_train = clf.predict(X_train)\n", - "\n", - "# Predict the test data using the trained classifier\n", - "y_pred_test = clf.predict(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Compute f1 score\n", - "metrics = {\n", - " \"f1_score\": f1_score(y_test, y_pred_test, average='macro')\n", - "}\n", - "metrics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Calculate and print the confusion matrix for the test predictions\n", - "results = confusion_matrix(y_test, y_pred_test)\n", - "print(results)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create a DataFrame for the confusion matrix results\n", - "df_cm = pl.DataFrame(\n", - " results, \n", - ")\n", - "\n", - "# Create a heatmap using seaborn with annotations\n", - "cm = sns.heatmap(df_cm, annot=True)\n", - "\n", - "# Get the figure and display it\n", - "fig = cm.get_figure()\n", - "fig.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "### โš™๏ธ Model Schema\n", - "\n", - "The model needs to be set up with a [Model Schema](https://docs.hopsworks.ai/3.0/user_guides/mlops/registry/model_schema/), which describes the inputs and outputs for a model.\n", - "\n", - "A Model Schema can be automatically generated from training examples, as shown below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "# Create a Schema for the input features using the values of X_train\n", - "input_schema = Schema(X_train.to_numpy())\n", - "\n", - "# Create a Schema for the output using y_train\n", - "output_schema = Schema(y_train.to_numpy())\n", - "\n", - "# Create a ModelSchema using the defined input and output schemas\n", - "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", - "\n", - "# Convert the model schema to a dictionary for inspection\n", - "model_schema.to_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Register model\n", - "\n", - "One of the features in Hopsworks is the model registry. This is where we can store different versions of models and compare their performance. Models from the registry can then be served as API endpoints." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Specify the directory name for saving the model and related artifacts\n", - "model_dir = \"quickstart_fraud_model\"\n", - "\n", - "# Check if the directory already exists; if not, create it\n", - "if not os.path.isdir(model_dir):\n", - " os.mkdir(model_dir)\n", - "\n", - "# Save the trained XGBoost classifier to a joblib file in the specified directory\n", - "joblib.dump(clf, model_dir + '/xgboost_model.pkl')\n", - "\n", - "# Save the confusion matrix heatmap figure to an image file in the specified directory\n", - "fig.savefig(model_dir + \"/confusion_matrix.png\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the model registry\n", - "mr = project.get_model_registry()\n", - "\n", - "# Create a Python model named \"fraud\" in the model registry\n", - "fraud_model = mr.python.create_model(\n", - " name=\"fraud\", \n", - " metrics=metrics, # Specify the metrics used to evaluate the model\n", - " model_schema=model_schema, # Use the previously defined model schema\n", - " input_example=[4700702588013561], # Provide an input example for testing deployments\n", - " description=\"Quickstart Fraud Predictor\", # Add a description for the model\n", - ")\n", - "\n", - "# Save the model to the specified directory\n", - "fraud_model.save(model_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "## ๐Ÿš€ Model Deployment\n", - "\n", - "\n", - "### About Model Serving\n", - "Models can be served via KFServing or \"default\" serving, which means a Docker container exposing a Flask server. For KFServing models, or models written in Tensorflow, you do not need to write a prediction file (see the section below). However, for sklearn models using default serving, you do need to proceed to write a prediction file.\n", - "\n", - "In order to use KFServing, you must have Kubernetes installed and enabled on your cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿ“Ž Predictor script for Python models\n", - "\n", - "\n", - "Scikit-learn and XGBoost models are deployed as Python models, in which case you need to provide a **Predict** class that implements the **predict** method. The **predict()** method invokes the model on the inputs and returns the prediction as a list.\n", - "\n", - "The **init()** method is run when the predictor is loaded into memory, loading the model from the local directory it is materialized to, *ARTIFACT_FILES_PATH*.\n", - "\n", - "The directive \"%%writefile\" writes out the cell before to the given Python file. We will use the **predict_example.py** file to create a deployment for our model. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile predict_example.py\n", - "import os\n", - "import numpy as np\n", - "import hsfs\n", - "import joblib\n", - "\n", - "\n", - "class Predict(object):\n", - "\n", - " def __init__(self):\n", - " \"\"\" Initializes the serving state, reads a trained model\"\"\" \n", - " # Get feature store handle\n", - " fs_conn = hsfs.connection()\n", - " self.fs = fs_conn.get_feature_store()\n", - " \n", - " # Get feature view\n", - " self.fv = self.fs.get_feature_view(\"transactions_view\", 1)\n", - " \n", - " # Initialize serving\n", - " self.fv.init_serving(1)\n", - "\n", - " # Load the trained model\n", - " self.model = joblib.load(os.environ[\"ARTIFACT_FILES_PATH\"] + \"/xgboost_model.pkl\")\n", - " print(\"Initialization Complete\")\n", - "\n", - " def predict(self, inputs):\n", - " \"\"\" Serves a prediction request usign a trained model\"\"\"\n", - " feature_vector = self.fv.get_feature_vector({\"cc_num\": inputs[0][0]})\n", - " feature_vector = feature_vector[:-1]\n", - " \n", - " return self.model.predict(np.asarray(feature_vector).reshape(1, -1)).tolist() # Numpy Arrays are not JSON serializable" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you wonder why we use the path Models/fraud_tutorial_model/1/model.pkl, it is useful to know that the Data Sets tab in the Hopsworks UI lets you browse among the different files in the project. Registered models will be found underneath the Models directory. Since you saved you model with the name fraud_tutorial_model, that's the directory you should look in. 1 is just the version of the model you want to deploy.\n", - "\n", - "This script needs to be put into a known location in the Hopsworks file system. Let's call the file predict_example.py and put it in the Models directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the dataset API from the project\n", - "dataset_api = project.get_dataset_api()\n", - "\n", - "# Specify the file to upload (\"predict_example.py\") to the \"Models\" directory, and allow overwriting\n", - "uploaded_file_path = dataset_api.upload(\"predict_example.py\", \"Models\", overwrite=True)\n", - "\n", - "# Construct the full path to the uploaded predictor script\n", - "predictor_script_path = os.path.join(\"/Projects\", project.name, uploaded_file_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ Create the deployment\n", - "\n", - "Here, you fetch the model you want from the model registry and define a configuration for the deployment. For the configuration, you need to specify the serving type (default or KFserving)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Deploy the fraud model\n", - "deployment = fraud_model.deploy(\n", - " name=\"fraud\", # Specify the deployment name\n", - " script_file=predictor_script_path, # Provide the path to the predictor script\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Deployment is warming up...\")\n", - "time.sleep(45)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### The deployment has now been registered. However, to start it you need to run the following command:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Start the deployment and wait for it to be running, with a maximum waiting time of 180 seconds\n", - "deployment.start(await_running=180)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the current state of the deployment and describe its details\n", - "deployment_state = deployment.get_state().describe()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "QKCTKfcaimxo" - }, - "source": [ - "## ๐Ÿ“ก Test your Model with an Inference Request \n", - "\n", - "Finally you can start making predictions with your model! \n", - "\n", - "Send inference requests to the deployed model as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 52 - }, - "id": "aL3-2W39tC-u", - "outputId": "fbda67a5-ce89-49ff-f113-a7dc8bbc2b6d" - }, - "outputs": [], - "source": [ - "# Make predictions using the deployed model\n", - "predictions = deployment.predict(\n", - " inputs=fraud_model.input_example,\n", - ")\n", - "predictions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ‘พ Try out your Model Interactively \n", - "\n", - "We will build a user interface with Gradio to allow you to enter a credit card category and amount to see if the credit card transaction will be marked as suspected of fraud or not." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install gradio --quiet\n", - "!pip install typing-extensions==4.3.0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "import gradio as gr\n", - "import numpy as np\n", - "\n", - "def greet(credit_card_example):\n", - " cc_data = credit_card_example.iloc[0].astype(\"float\")\n", - " # Add missing feature values to the feature vector. Here we hard-code the values,\n", - " # but if you enable the Online Feature Store, you could retrieve them with the following commented out code\n", - " # entry = { \"cc_num\" : credit_card_example[0]}\n", - " # passed_features = {\"category\": credit_card_example[0], \"amount\" : credit_card_example[1]}\n", - " # feature_vector = feature_view.get_feature_vector(entry, passed_features)\n", - " res = deployment.predict(inputs=cc_data.tolist())\n", - " res = res[\"predictions\"][0]\n", - " if res == 0 :\n", - " return \"Not Suspected of Fraud\"\n", - " return \"Suspected of Fraud\"\n", - "\n", - "credit_card_example = gr.Dataframe(\n", - " headers=[\"Credit card number\"],\n", - " value=[[fraud_model.input_example[0]]]\n", - ")\n", - "\n", - "demo = gr.Interface(greet, \n", - " credit_card_example,\n", - " \"text\",\n", - " title=\"Live Credit Card Fraud Detector\",\n", - " description=\"Enter credit card transaction details.\",\n", - " allow_flagging=\"never\"\n", - ")\n", - "\n", - "\n", - "demo.launch(share=True, debug=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HmwNUVbHjO5I" - }, - "source": [ - "## ๐Ÿฅณ Next Steps\n", - "\n", - "Congratulations you've now completed the quickstart example for Managed Hopsworks.\n", - "\n", - "\n", - "Check out our other tutorials on โžก https://github.com/logicalclocks/hopsworks-tutorials\n", - "\n", - "Or documentation at โžก https://docs.hopsworks.ai" - ] - } - ], - "metadata": { - "colab": { - "collapsed_sections": [], - "name": "quickstart.ipynb", - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.0" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "192f266700894002b24eeff9b2136db3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1b7c2a4d212646239113f831eeafc1cd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "24536f939afa41f1acff4e55fae4423c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3f7e59807b824e86b47319bd47e32650": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_66c0d3f6020845d7a4203f33abf33818", - "IPY_MODEL_f22754bd6225452f8253ecff644c31d5", - "IPY_MODEL_77e516d3f3ce4c5488bf68825d260061" - ], - "layout": "IPY_MODEL_f91eeaa7449541819c9970f42963e2dd" - } - }, - "43c0b243b2c9417abc5072f82ba22457": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_4e326043046247f5ae5bfac3306cb145", - "IPY_MODEL_a16b8eae9f614a44a9ee7f7ea900d1f2", - "IPY_MODEL_a0e314c90c5a413d9701a6efcded884b" - ], - "layout": "IPY_MODEL_24536f939afa41f1acff4e55fae4423c" - } - }, - "4559fa2eaf7348ae9dd5d1cfdd3e0bd5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "4e326043046247f5ae5bfac3306cb145": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_a26b3a1aa96f4eeaaad89d4d662fa010", - "placeholder": "โ€‹", - "style": "IPY_MODEL_ed9e0fc80c9e483cb7aafad007b57ea0", - "value": "Deployment is running: 100%" - } - }, - "5fd0bd75549a47ae8a3042f1e0c61ba5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "66c0d3f6020845d7a4203f33abf33818": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_d1c010a576d94f8bbcc6f535741f514b", - "placeholder": "โ€‹", - "style": "IPY_MODEL_5fd0bd75549a47ae8a3042f1e0c61ba5", - "value": "Model export complete: 100%" - } - }, - "71ad3ff88d62426abda44fdb300b0484": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "7529396c14464b7b9e349c6ba003cddc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "77e516d3f3ce4c5488bf68825d260061": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_192f266700894002b24eeff9b2136db3", - "placeholder": "โ€‹", - "style": "IPY_MODEL_1b7c2a4d212646239113f831eeafc1cd", - "value": " 6/6 [00:25<00:00, 5.19s/it]" - } - }, - "7887571c2ea4415080f60ea18be441b1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a0e314c90c5a413d9701a6efcded884b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7529396c14464b7b9e349c6ba003cddc", - "placeholder": "โ€‹", - "style": "IPY_MODEL_71ad3ff88d62426abda44fdb300b0484", - "value": " 1/1 [00:20<00:00, 5.12s/it]" - } - }, - "a16b8eae9f614a44a9ee7f7ea900d1f2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7887571c2ea4415080f60ea18be441b1", - "max": 1, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_4559fa2eaf7348ae9dd5d1cfdd3e0bd5", - "value": 1 - } - }, - "a26b3a1aa96f4eeaaad89d4d662fa010": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d1c010a576d94f8bbcc6f535741f514b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d6462acb3ac6479f942e1a1b8da309a8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "ed9e0fc80c9e483cb7aafad007b57ea0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "f22754bd6225452f8253ecff644c31d5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f2ccbe863c224765bbe755fcb0ba4be7", - "max": 6, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_d6462acb3ac6479f942e1a1b8da309a8", - "value": 6 - } - }, - "f2ccbe863c224765bbe755fcb0ba4be7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f91eeaa7449541819c9970f42963e2dd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - } - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/integrations/pyspark_streaming/0_stream_simulation.ipynb b/integrations/pyspark_streaming/0_stream_simulation.ipynb deleted file mode 100644 index 3335541b..00000000 --- a/integrations/pyspark_streaming/0_stream_simulation.ipynb +++ /dev/null @@ -1,407 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0ea184f1", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** \n", - "\n", - "This notebook creates a data stream using Hopsworks Internal Kafka\n", - "\n", - "## ๐Ÿ—’๏ธ This notebook is divided into the following sections:\n", - "\n", - "1. Creating Simulated Data\n", - "2. Creating Kafka Topic and Schema in Hopsworks Feature Store\n", - "3. Sending Data to Kafka" - ] - }, - { - "cell_type": "markdown", - "id": "10abb24d", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "03dfa5b6", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install faker --quiet" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a66d98be", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from synthetic_data import synthetic_data\n", - "from confluent_kafka import Producer" - ] - }, - { - "cell_type": "markdown", - "id": "0ac7a545", - "metadata": {}, - "source": [ - "## โœ๏ธ Creating Simulated Data " - ] - }, - { - "cell_type": "markdown", - "id": "bef551fc", - "metadata": {}, - "source": [ - "A simulated dataset for credit card Transactions is created so that the data can be send using a Kafka stream. The data created is split into two different dataframes:\n", - "\n", - "* profiles_df: credit card user information such as birthdate and city of residence, along with credict card information such as the expiration date and provider.\n", - "* trans_df: events containing information about when a credit card was used, such as a timestamp, location, and the amount spent. A boolean fraud_label variable (True/False) tells us whether a transaction was fraudulent or not.\n", - "\n", - "In a production system, these data would originate from separate data sources or tables, and probably separate data pipelines. Both files have a common credit card number column cc_num, which you will use later to join features together from the different datasets.\n", - "\n", - "Now you can go ahead and create the data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bd1cd308", - "metadata": {}, - "outputs": [], - "source": [ - "data_simulater = synthetic_data.synthetic_data()\n", - "\n", - "profiles_df, trans_df = data_simulater.create_simulated_transactions()" - ] - }, - { - "cell_type": "markdown", - "id": "808b22a0", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "markdown", - "id": "cc12ccdd", - "metadata": {}, - "source": [ - "After creating the simulated data let us connect with Hopsworks Feature Store.\n", - "\n", - "Hopsworks provides an internal Kafka which can be accessed using the KafkaAPI. See [documentation](https://docs.hopsworks.ai/3.7/user_guides/projects/kafka/create_schema/#introduction) for more details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7f57df5f", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "kafka_api = project.get_kafka_api()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "1e42b84e", - "metadata": {}, - "source": [ - "## ๐Ÿช„ Creating Feature Groups " - ] - }, - { - "cell_type": "markdown", - "id": "591a2813", - "metadata": {}, - "source": [ - "Profiles data can be directly inserted as a feature group directly since they are not update fequently.\n", - "\n", - "To create a feature group you need to give it a name and specify a primary key. It is also good to provide a description of the contents of the feature group and a version number, if it is not defined it will automatically be incremented to `1`.\n", - "\n", - "A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "685f905b", - "metadata": {}, - "outputs": [], - "source": [ - "profile_fg = fs.get_or_create_feature_group(\n", - " name=\"profile\",\n", - " primary_key=[\"cc_num\"],\n", - " partition_key=[\"cc_provider\"],\n", - " online_enabled=True,\n", - " version=1)\n", - "\n", - "profile_fg.insert(profiles_df)" - ] - }, - { - "cell_type": "markdown", - "id": "d6e18288", - "metadata": {}, - "source": [ - "## โš™๏ธ Kafka Topic and Schema Creation " - ] - }, - { - "cell_type": "markdown", - "id": "e6ac3791", - "metadata": {}, - "source": [ - "To create a Kafka stream for transactions a topic and schema must be create. The schema used must follow Apache Avro specification, more details can be found in the [documentation](https://avro.apache.org/docs/1.11.1/specification/).\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1bec71eb", - "metadata": {}, - "outputs": [], - "source": [ - "# create kafka topic\n", - "KAFKA_TOPIC_NAME = \"transactions_topic\"\n", - "SCHEMA_NAME = \"transactions_schema\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "998326f1", - "metadata": {}, - "outputs": [], - "source": [ - "schema = {\n", - " \"type\": \"record\",\n", - " \"name\": SCHEMA_NAME,\n", - " \"namespace\": \"io.hops.examples.pyspark.example\",\n", - " \"fields\": [\n", - " {\n", - " \"name\": \"tid\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"string\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"datetime\",\n", - " \"type\": [\n", - " \"null\",\n", - " {\n", - " \"type\": \"long\",\n", - " \"logicalType\": \"timestamp-micros\"\n", - " }\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"cc_num\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"long\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"category\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"string\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"amount\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"double\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"latitude\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"double\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"longitude\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"double\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"city\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"string\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"country\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"string\"\n", - " ]\n", - " },\n", - " {\n", - " \"name\": \"fraud_label\",\n", - " \"type\": [\n", - " \"null\",\n", - " \"int\"\n", - " ]\n", - " },\n", - " ]\n", - "}" - ] - }, - { - "cell_type": "markdown", - "id": "a527b15a", - "metadata": {}, - "source": [ - "After the schema is created the topic and the associated schema must be registered in Hopsworks so that the topic can be used." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9d30e9f3", - "metadata": {}, - "outputs": [], - "source": [ - "if KAFKA_TOPIC_NAME not in [topic.name for topic in kafka_api.get_topics()]:\n", - " kafka_api.create_schema(SCHEMA_NAME, schema)\n", - " kafka_api.create_topic(KAFKA_TOPIC_NAME, SCHEMA_NAME, 1, replicas=1, partitions=1)" - ] - }, - { - "cell_type": "markdown", - "id": "24d19231", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Sending Data using created Kafka Topic " - ] - }, - { - "cell_type": "markdown", - "id": "538cec35", - "metadata": {}, - "source": [ - "While sending data through Kafka we must make sure that the data types are in the same format specified in the schema. \n", - "\n", - "Let's make sure that the dataframe has all the components in the correct format." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "86ce202b", - "metadata": {}, - "outputs": [], - "source": [ - "trans_df[\"tid\"] = trans_df[\"tid\"].astype(\"string\")\n", - "trans_df[\"datetime\"] = trans_df[\"datetime\"].astype(\"datetime64[s]\").astype(\"int64\")\n", - "trans_df[\"cc_num\"] = trans_df[\"cc_num\"].astype(\"int64\")\n", - "trans_df[\"category\"] = trans_df[\"category\"].astype(\"string\")\n", - "trans_df[\"amount\"] = trans_df[\"amount\"].astype(\"double\")\n", - "trans_df[\"latitude\"] = trans_df[\"latitude\"].astype(\"double\")\n", - "trans_df[\"longitude\"] = trans_df[\"longitude\"].astype(\"double\")\n", - "trans_df[\"city\"] = trans_df[\"city\"].astype(\"string\")\n", - "trans_df[\"country\"] = trans_df[\"country\"].astype(\"string\")\n", - "trans_df[\"fraud_label\"] = trans_df[\"fraud_label\"].astype(\"int\")" - ] - }, - { - "cell_type": "markdown", - "id": "e39eb952", - "metadata": {}, - "source": [ - "Lets get the configuration needed for the producer to used Hopsworks internal kafka using the KafkaAPI" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d42c4f71", - "metadata": {}, - "outputs": [], - "source": [ - "kafka_config = kafka_api.get_default_config()" - ] - }, - { - "cell_type": "markdown", - "id": "46393a4e", - "metadata": {}, - "source": [ - "Finally, lets create a producer using the Kafka configuration and send data into it.\n", - "\n", - "It is important to note that the data passed to the producer must be a json or it must be avro encoded." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "23636fc7", - "metadata": {}, - "outputs": [], - "source": [ - "producer = Producer(kafka_config)\n", - "\n", - "for index, transaction in trans_df.iterrows():\n", - " producer.produce(KAFKA_TOPIC_NAME, transaction.to_json())\n", - " \n", - " if index % 1000 == 0:\n", - " producer.flush()\n", - " print(f'Finished sending index {index}')" - ] - }, - { - "cell_type": "markdown", - "id": "721e47bc", - "metadata": {}, - "source": [ - "---\n", - "## โญ๏ธ **Next:** Part 01: Feature Pipeline\n", - "\n", - "In the following notebook you will use the created Kafka stream to insert data into a Feature Group" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/pyspark_streaming/1_feature_pipeline.ipynb b/integrations/pyspark_streaming/1_feature_pipeline.ipynb deleted file mode 100644 index 53c366ab..00000000 --- a/integrations/pyspark_streaming/1_feature_pipeline.ipynb +++ /dev/null @@ -1,591 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "44c0c599", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** - Part 01: Feature Pipeline\n", - "\n", - "**Note**: This tutorial does not support Google Colab.\n", - "\n", - "This is the first part of the quick start series of tutorials about Hopsworks Feature Store. As part of this first module, you will work with data related to credit card transactions. \n", - "The objective of this tutorial is to demonstrate how to work with the **Hopworks Feature Store** for streaming data with a goal of training and saving a model that can predict fraudulent transactions. Then try it on retrieved from Feature Store batch data.\n", - "\n", - "\n", - "## ๐Ÿ—’๏ธ This notebook is divided in 3 sections:\n", - "1. Loading the data and feature engineeing,\n", - "2. Connect to the Hopsworks Feature Store,\n", - "3. Create feature groups and upload them to the Feature Store.\n", - "\n", - "![tutorial-flow](../../images/01_featuregroups.png)\n", - "\n", - "First of all you will load the data and do some feature engineering on it." - ] - }, - { - "cell_type": "markdown", - "id": "3d46ee8c", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "19073f37", - "metadata": {}, - "outputs": [], - "source": [ - "import datetime\n", - "from pyspark.sql import SparkSession\n", - "\n", - "from pyspark.sql.types import * \n", - "from pyspark.sql.functions import * \n", - "\n", - "from pyspark.sql.functions import pandas_udf" - ] - }, - { - "cell_type": "markdown", - "id": "caff7a87", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "markdown", - "id": "4579f529", - "metadata": {}, - "source": [ - "In this tutorial a simulated data stream was created using Hopsworks internal Kafka.\n", - "\n", - "Hopsworks allows to access internal Kafka using the storage connector api. See more information in the [documention](https://docs.hopsworks.ai/feature-store-api/3.7/generated/api/storage_connector_api/#kafka)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "33166eae", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "from hsfs.core.storage_connector_api import StorageConnectorApi\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()\n", - "\n", - "sc_api = StorageConnectorApi()" - ] - }, - { - "cell_type": "markdown", - "id": "c06ba96d", - "metadata": {}, - "source": [ - "Let get the kafka configurations needed for read from hopsworks internal Kafka using the storage connector api." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a85ba466", - "metadata": {}, - "outputs": [], - "source": [ - "sc_api = StorageConnectorApi()\n", - "kafka_connector = sc_api.get_kafka_connector(feature_store_id=fs.id, external=False)\n", - "kafka_config = kafka_connector.spark_options()" - ] - }, - { - "cell_type": "markdown", - "id": "e4884ae0", - "metadata": {}, - "source": [ - "## ๐Ÿ—‚ Reading from Kakfa Stream " - ] - }, - { - "cell_type": "markdown", - "id": "022c1e5f", - "metadata": {}, - "source": [ - "After obatining the Kafka configurations we can use it along with the topic name to create a streaming dataframe." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae5d7aaa", - "metadata": {}, - "outputs": [], - "source": [ - "KAFKA_TOPIC_NAME = \"transactions_topic\"\n", - "\n", - "df_read = spark \\\n", - " .readStream \\\n", - " .format(\"kafka\") \\\n", - " .options(**kafka_config) \\\n", - " .option(\"startingOffsets\", \"earliest\") \\\n", - " .option(\"maxOffsetsPerTrigger\", 1000) \\\n", - " .option(\"subscribe\", KAFKA_TOPIC_NAME) \\\n", - " .load()" - ] - }, - { - "cell_type": "markdown", - "id": "141ef286", - "metadata": {}, - "source": [ - "To extract the requierd data from streaming dataframe the correct schema has be defined and used" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fe5f8ac1", - "metadata": {}, - "outputs": [], - "source": [ - "parse_schema = StructType([StructField(\"tid\", StringType(), True),\n", - " StructField(\"datetime\", TimestampType(), True),\n", - " StructField(\"cc_num\", LongType(), True),\n", - " StructField(\"category\", StringType(), True),\n", - " StructField(\"amount\", DoubleType(), True),\n", - " StructField(\"latitude\", DoubleType(), True),\n", - " StructField(\"longitude\", DoubleType(), True),\n", - " StructField(\"city\", StringType(), True),\n", - " StructField(\"country\", StringType(), True),\n", - " StructField(\"fraud_label\", IntegerType(), True),\n", - " ])" - ] - }, - { - "cell_type": "markdown", - "id": "fb15985f", - "metadata": {}, - "source": [ - "Extracting data from the streaming dataframe and casting it to get the required schema" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c3d17ff0", - "metadata": {}, - "outputs": [], - "source": [ - "# Deserialize data from and create streaming query\n", - "streaming_df = df_read.selectExpr(\"CAST(value AS STRING)\") \\\n", - " .select(from_json(\"value\", parse_schema).alias(\"value\")) \\\n", - " .select(\"value.tid\",\n", - " \"value.datetime\",\n", - " \"value.cc_num\",\n", - " \"value.category\",\n", - " \"value.amount\",\n", - " \"value.latitude\",\n", - " \"value.longitude\",\n", - " \"value.city\",\n", - " \"value.country\",\n", - " \"value.fraud_label\") \\\n", - " .selectExpr(\"CAST(tid as string)\",\n", - " \"CAST(datetime as timestamp)\",\n", - " \"CAST(cc_num as long)\",\n", - " \"CAST(category as string)\",\n", - " \"CAST(amount as double)\",\n", - " \"CAST(latitude as double)\",\n", - " \"CAST(longitude as double)\",\n", - " \"CAST(city as string)\",\n", - " \"CAST(country as string)\",\n", - " \"CAST(fraud_label as integer)\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "b4c8cc32", - "metadata": {}, - "source": [ - "## ๐Ÿ› ๏ธ Feature Engineering " - ] - }, - { - "cell_type": "markdown", - "id": "e0fd2687", - "metadata": {}, - "source": [ - "Now that we have a streaming dataframe that contains the data we can use it to engineer features. We would need the also need profiles to effectively engineer features.\n", - "\n", - "So next you can read data from profiles feature group" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ad03f840", - "metadata": {}, - "outputs": [], - "source": [ - "profile_fg = fs.get_or_create_feature_group(\n", - " name=\"profile\",\n", - " version=1)\n", - "\n", - "profile_df = profile_fg.read()" - ] - }, - { - "cell_type": "markdown", - "id": "112c5afa", - "metadata": {}, - "source": [ - "Fraudulent transactions can differ from regular ones in many different ways. Typical red flags would for instance be a large transaction volume/frequency in the span of a few hours. It could also be the case that elderly people in particular are targeted by fraudsters. To facilitate model learning you will create additional features based on these patterns. In particular, you will create two types of features:\n", - "1. **Features that aggregate data from different data sources**. This could for instance be the age of a customer at the time of a transaction, which combines the `birthdate` feature from `profiles` with the `datetime` feature from `transactions`.\n", - "2. **Features that aggregate data from multiple time steps**. An example of this could be the transaction frequency of a credit card in the span of a few hours, which is computed using a window function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7890ec89", - "metadata": {}, - "outputs": [], - "source": [ - "transaction_streaming_df = (\n", - " streaming_df.join(profile_df.drop(\"city\"), on=\"cc_num\", how=\"left\")\n", - " .withColumn(\"cc_expiration_date\", to_timestamp(\"cc_expiration_date\", \"mm/yy\"))\n", - " .withColumn(\"age_at_transaction\", datediff(col(\"datetime\"),col(\"birthdate\")))\n", - " .withColumn(\"days_until_card_expires\", datediff(col(\"datetime\"),col(\"cc_expiration_date\")))\n", - " .select([\"tid\", \"datetime\", \"cc_num\", \"category\", \"amount\", \"latitude\", \"longitude\", \"city\", \"country\", \"fraud_label\", \"age_at_transaction\", \"days_until_card_expires\", \"cc_expiration_date\"])\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "d7f6cfff", - "metadata": {}, - "source": [ - "Next, you will create features that aggregate credit card data over a period of time.\n", - "\n", - "Here for simplicity we take the average, standard deviation and frequency of transaction amount over a period of 4 hours" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "49588d5e", - "metadata": {}, - "outputs": [], - "source": [ - "windowed_4h_aggregation_df = (\n", - " streaming_df.withWatermark(\"datetime\", \"168 hours\")\n", - " .groupBy(window(\"datetime\", \"4 hours\", \"1 hour\"), \"cc_num\")\n", - " .agg(\n", - " avg(\"amount\").alias(\"avg_amt_per_4h\"),\n", - " stddev(\"amount\").alias(\"stdev_amt_per_4h\"),\n", - " count(\"cc_num\").alias(\"num_trans_per_4h\"),\n", - " collect_list(\"datetime\").alias(\"datetime\"),\n", - " )\n", - " .na.fill({\"stdev_amt_per_4h\":0})\n", - " .selectExpr(\n", - " \"cc_num\",\n", - " \"explode(datetime) as datetime\",\n", - " \"num_trans_per_4h\",\n", - " \"avg_amt_per_4h\",\n", - " \"stdev_amt_per_4h\",\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "9bfcd026", - "metadata": {}, - "source": [ - "## ๐Ÿ‘ฎ๐Ÿปโ€โ™‚๏ธ Great Expectations " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e0d3fc83", - "metadata": {}, - "outputs": [], - "source": [ - "import great_expectations as ge\n", - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration\n", - "\n", - "# Set the expectation suite name to \"transactions_suite\"\n", - "expectation_suite_transactions = ge.core.ExpectationSuite(\n", - " expectation_suite_name=\"transactions_suite\"\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2ef7fae1", - "metadata": {}, - "outputs": [], - "source": [ - "# Check binary fraud_label column to be in set [0,1]\n", - "expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_distinct_values_to_be_in_set\",\n", - " kwargs={\n", - " \"column\": \"fraud_label\",\n", - " \"value_set\": [0, 1],\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Check amount column to be not negative\n", - "expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_between\",\n", - " kwargs={\n", - " \"column\": \"amount\",\n", - " \"min_value\": 0.0,\n", - " }\n", - " )\n", - ")\n", - "\n", - "# Loop through specified columns ('tid', 'datetime', 'cc_num') and add expectations for null values\n", - "for column in ['tid', 'datetime', 'cc_num']:\n", - " expectation_suite_transactions.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_be_null\",\n", - " kwargs={\n", - " \"column\": column,\n", - " \"mostly\": 0.0,\n", - " }\n", - " )\n", - " )" - ] - }, - { - "cell_type": "markdown", - "id": "9c139ea7", - "metadata": {}, - "source": [ - "## ๐Ÿ’พ Storing streaming dataframes in Hopsworks Feature Store " - ] - }, - { - "cell_type": "markdown", - "id": "4ef0699f", - "metadata": {}, - "source": [ - "### ๐Ÿช„ Creating Feature Groups \n", - "\n", - "A [feature group](https://docs.hopsworks.ai/3.0/concepts/fs/feature_group/fg_overview/) can be seen as a collection of conceptually related features. In this case, you will create a feature group for the transaction data and a feature group for the windowed aggregations on the transaction data. Both will have `cc_num` as primary key, which will allow you to join them when creating a dataset in the next tutorial.\n", - "\n", - "Feature groups can also be used to define a namespace for features. For instance, in a real-life setting you would likely want to experiment with different window lengths. In that case, you can create feature groups with identical schema for each window length. \n", - "\n", - "Before you can create a feature group you need to connect to Hopsworks feature store." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4bba5a68", - "metadata": {}, - "outputs": [], - "source": [ - "trans_fg = fs.get_or_create_feature_group(\n", - " name=\"transactions_fraud_streaming_fg\",\n", - " version=1,\n", - " description=\"Transaction data\",\n", - " primary_key=[\"cc_num\"],\n", - " event_time=\"datetime\",\n", - " online_enabled=True,\n", - " stream=True,\n", - " expectation_suite=expectation_suite_transactions,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "de01705e", - "metadata": {}, - "source": [ - "A full list of arguments can be found in the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/feature_store_api/#create_feature_group).\n", - "\n", - "At this point, you have only specified some metadata for the feature group. It does not store any data or even have a schema defined for the data. To insert a streaming dataframe into a feature group you can use the streaming feature `insert_stream` function. You can find more details in the [documentation](https://docs.hopsworks.ai/feature-store-api/3.7/generated/api/feature_group_api/#insert_stream)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b61c8985", - "metadata": {}, - "outputs": [], - "source": [ - "# Insert data into feature group\n", - "trans_fg_query = trans_fg.insert_stream(transaction_streaming_df)" - ] - }, - { - "cell_type": "markdown", - "id": "ccff167b", - "metadata": {}, - "source": [ - "\n", - "The `insert_stream` function returns a `StreamingQuery` object which be used to check the status of the streaming query.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "510c5daf", - "metadata": {}, - "outputs": [], - "source": [ - "trans_fg_query.status" - ] - }, - { - "cell_type": "markdown", - "id": "b0dd2b8a", - "metadata": {}, - "source": [ - "The `insert_stream` function inserts the data into the online feature store so to materialize the data in the offline store you need to manually run the materialization job. The materialization job can also be run on schedule using the `schedule` function. You can find more details in the [documentation](https://docs.hopsworks.ai/hopsworks-api/3.7/generated/api/jobs/#schedule)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6ad17c1", - "metadata": {}, - "outputs": [], - "source": [ - "trans_fg.materialization_job.schedule(cron_expression = \"0 /10 * ? * * *\", start_time=datetime.datetime.now(tz=datetime.timezone.utc))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eca6acfc", - "metadata": {}, - "outputs": [], - "source": [ - "# Update feature descriptions\n", - "feature_descriptions = [\n", - " {\"name\": \"tid\", \"description\": \"Transaction id\"},\n", - " {\"name\": \"datetime\", \"description\": \"Transaction time\"},\n", - " {\"name\": \"cc_num\", \"description\": \"Number of the credit card performing the transaction\"},\n", - " {\"name\": \"category\", \"description\": \"Expense category\"},\n", - " {\"name\": \"amount\", \"description\": \"Dollar amount of the transaction\"},\n", - " {\"name\": \"latitude\", \"description\": \"Transaction location latitude\"},\n", - " {\"name\": \"longitude\", \"description\": \"Transaction location longitude\"},\n", - " {\"name\": \"city\", \"description\": \"City in which the transaction was made\"},\n", - " {\"name\": \"country\", \"description\": \"Country in which the transaction was made\"},\n", - " {\"name\": \"fraud_label\", \"description\": \"Whether the transaction was fraudulent or not\"},\n", - " {\"name\": \"age_at_transaction\", \"description\": \"Age of the card holder when the transaction was made\"},\n", - " {\"name\": \"days_until_card_expires\", \"description\": \"Card validity days left when the transaction was made\"},\n", - "]\n", - "\n", - "for desc in feature_descriptions: \n", - " trans_fg.update_feature_description(desc[\"name\"], desc[\"description\"])" - ] - }, - { - "cell_type": "markdown", - "id": "e377e90f", - "metadata": {}, - "source": [ - "At the creation of the feature group, you will be prompted with an URL that will directly link to it; there you will be able to explore some of the aspects of your newly created feature group." - ] - }, - { - "cell_type": "markdown", - "id": "82ae2b51", - "metadata": {}, - "source": [ - "You can move on and do the same thing for the feature group with our windows aggregation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c31e898a", - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'transactions' feature group with specified window aggregations\n", - "window_aggs_streaming_fg = fs.get_or_create_feature_group(\n", - " name=f\"transactions_aggs_fraud_streaming_fg\",\n", - " version=1,\n", - " description=f\"Aggregate transaction data over 5 minute windows.\",\n", - " primary_key=[\"cc_num\"],\n", - " event_time=\"datetime\",\n", - " online_enabled=True,\n", - " stream=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3586447c", - "metadata": {}, - "outputs": [], - "source": [ - "window_aggs_streaming_fg_query = window_aggs_streaming_fg.insert_stream(windowed_4h_aggregation_df)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc40716e", - "metadata": {}, - "outputs": [], - "source": [ - "window_aggs_streaming_fg_query.status" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "af97ebb1", - "metadata": {}, - "outputs": [], - "source": [ - "window_aggs_streaming_fg.materialization_job.schedule(cron_expression = \"0 /10 * ? * * *\", start_time=datetime.datetime.now(tz=datetime.timezone.utc))" - ] - }, - { - "cell_type": "markdown", - "id": "49296a35", - "metadata": {}, - "source": [ - "## โญ๏ธ **Next:** Part 02: Training Pipeline\n", - " \n", - "\n", - "In the following notebook you will use your feature groups to create a dataset you can train a model on." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "PySpark", - "language": "python", - "name": "pysparkkernel" - }, - "language_info": { - "codemirror_mode": { - "name": "python", - "version": 3 - }, - "mimetype": "text/x-python", - "name": "pyspark", - "pygments_lexer": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/pyspark_streaming/2_training_pipeline.ipynb b/integrations/pyspark_streaming/2_training_pipeline.ipynb deleted file mode 100644 index 42d7667e..00000000 --- a/integrations/pyspark_streaming/2_training_pipeline.ipynb +++ /dev/null @@ -1,704 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** - Part 02: Training Pipeline\n", - "\n", - "This notebook explains how to read from a feature group, create training dataset within the feature store, train a model and save it to model registry.\n", - "\n", - "## ๐Ÿ—’๏ธ This notebook is divided into the following sections:\n", - "\n", - "1. Fetch Feature Groups.\n", - "2. Define Transformation functions.\n", - "3. Create Feature Views.\n", - "4. Create Training Dataset with training, validation and test splits.\n", - "5. Train the model.\n", - "6. Register model in Hopsworks Model Registry.\n", - "\n", - "![part2](../../images/02_training-dataset.png) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Imports" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "!pip install -U xgboost --quiet" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import joblib\n", - "import os\n", - "\n", - "import pandas as pd\n", - "import numpy as np\n", - "from matplotlib import pyplot\n", - "import seaborn as sns\n", - "\n", - "import xgboost as xgb\n", - "from sklearn.metrics import confusion_matrix\n", - "from sklearn.metrics import f1_score\n", - "import time\n", - "\n", - "# Mute warnings\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿ”ช Feature Selection \n", - "\n", - "You will start by selecting all the features you want to include for model training/inference." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve feature groups\n", - "trans_fg = fs.get_feature_group(\n", - " name='transactions_fraud_streaming_fg', \n", - " version=1,\n", - ")\n", - "window_aggs_fg = fs.get_feature_group(\n", - " name='transactions_aggs_fraud_streaming_fg', \n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Select features for training data.\n", - "selected_features = trans_fg.select([\"fraud_label\", \"category\", \"amount\", \"datetime\", \"age_at_transaction\", \"days_until_card_expires\"])\\\n", - " .join(window_aggs_fg.select_except([\"cc_num\", \"datetime\"]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Uncomment this if you would like to view your selected features\n", - "#selected_features.read()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Recall that you computed the features in `transactions_4h_aggs_fraud_batch_fg` using 4-hour aggregates. If you had created multiple feature groups with identical schema for different window lengths, and wanted to include them in the join you would need to include a prefix argument in the join to avoid feature name clash. See the [documentation](https://docs.hopsworks.ai/feature-store-api/latest/generated/api/query_api/#join) for more details." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿค– Transformation Functions \n", - "\n", - "\n", - "You will preprocess our data using *min-max scaling* on numerical features and *label encoding* on categorical features. To do this you simply define a mapping between our features and transformation functions. This ensures that transformation functions such as *min-max scaling* are fitted only on the training data (and not the validation/test data), which ensures that there is no data leakage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Load transformation functions.\n", - "label_encoder = fs.get_transformation_function(name=\"label_encoder\")\n", - "\n", - "# Map features to transformations.\n", - "transformation_functions = {\n", - " \"category\": label_encoder,\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature View Creation \n", - "\n", - "The Feature Views allows schema in form of a query with filters, define a model target feature/label and additional transformation functions.\n", - "In order to create a Feature View you may use `fs.create_feature_view()`. Here we try first to get the feature view, and if we can't an exception is thrown and we create the feature view." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get or create the 'transactions_view_fraud_batch_fv' feature view\n", - "feature_view = fs.get_or_create_feature_view(\n", - " name='transactions_view_streaming_fv',\n", - " version=1,\n", - " query=selected_features,\n", - " labels=[\"fraud_label\"],\n", - " transformation_functions=transformation_functions,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The feature view is now visible in the UI.\n", - "\n", - "![fg-overview](../../images/fv_overview.gif)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ‹๏ธ Training Dataset Creation\n", - "\n", - "In Hopsworks training data is a query where the projection (set of features) is determined by the parent FeatureView with an optional snapshot on disk of the data returned by the query.\n", - "\n", - "**Training Dataset may contain splits such as:** \n", - "* Training set - the subset of training data used to train a model.\n", - "* Validation set - the subset of training data used to evaluate hparams when training a model\n", - "* Test set - the holdout subset of training data used to evaluate a mode\n", - "\n", - "Training dataset is created using `feature_view.train_validation_test_split()` method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "TEST_SIZE = 0.2\n", - "\n", - "X_train, X_test, y_train, y_test = feature_view.train_test_split(\n", - " test_size = TEST_SIZE\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sort the X_train DataFrame based on the \"datetime\" column in ascending order\n", - "X_train = X_train.sort_values(\"datetime\")\n", - "\n", - "# Reindex the y_train Series to match the order of rows in the sorted X_train DataFrame\n", - "y_train = y_train.reindex(X_train.index)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Sort the X_test DataFrame based on the \"datetime\" column in ascending order\n", - "X_test = X_test.sort_values(\"datetime\")\n", - "\n", - "# Reindex the y_test Series to match the order of rows in the sorted X_test DataFrame\n", - "y_test = y_test.reindex(X_test.index)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Drop the \"datetime\" column from the X_train DataFrame along the specified axis (axis=1 means columns)\n", - "X_train.drop([\"datetime\"], axis=1, inplace=True)\n", - "\n", - "# Drop the \"datetime\" column from the X_test DataFrame along the specified axis (axis=1 means columns)\n", - "X_test.drop([\"datetime\"], axis=1, inplace=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Display the normalized value counts of the y_train Series\n", - "y_train.value_counts(normalize=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that the distribution is extremely skewed, which is natural considering that fraudulent transactions make up a tiny part of all transactions. Thus you should somehow address the class imbalance. There are many approaches for this, such as weighting the loss function, over- or undersampling, creating synthetic data, or modifying the decision threshold. In this example, you will use the simplest method which is to just supply a class weight parameter to our learning algorithm. The class weight will affect how much importance is attached to each class, which in our case means that higher importance will be placed on positive (fraudulent) samples." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿงฌ Modeling\n", - "\n", - "Next you will train a model. Here, you set larger class weight for the positive class." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create an instance of the XGBClassifier\n", - "clf = xgb.XGBClassifier()\n", - "\n", - "# Fit the classifier on the training data\n", - "clf.fit(X_train.values, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Predict the training data using the trained classifier\n", - "y_pred_train = clf.predict(X_train.values)\n", - "\n", - "# Predict the test data using the trained classifier\n", - "y_pred_test = clf.predict(X_test.values)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Compute f1 score\n", - "metrics = {\n", - " \"f1_score\": f1_score(y_test, y_pred_test, average='macro')\n", - "}\n", - "metrics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Generate the confusion matrix using the true labels (y_test) and predicted labels (y_pred_test)\n", - "results = confusion_matrix(y_test, y_pred_test)\n", - "\n", - "# Print the confusion matrix\n", - "print(results)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Create a DataFrame from the confusion matrix results with appropriate labels\n", - "df_cm = pd.DataFrame(\n", - " results, \n", - " ['True Normal', 'True Fraud'],\n", - " ['Pred Normal', 'Pred Fraud'],\n", - ")\n", - "\n", - "# Create a heatmap using seaborn with annotations\n", - "cm = sns.heatmap(df_cm, annot=True)\n", - "\n", - "# Get the figure from the heatmap and display it\n", - "fig = cm.get_figure()\n", - "fig.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "tags": [] - }, - "source": [ - "### โš™๏ธ Model Schema\n", - "\n", - "The model needs to be set up with a [Model Schema](https://docs.hopsworks.ai/3.0/user_guides/mlops/registry/model_schema/), which describes the inputs and outputs for a model.\n", - "\n", - "A Model Schema can be automatically generated from training examples, as shown below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from hsml.schema import Schema\n", - "from hsml.model_schema import ModelSchema\n", - "\n", - "# Define the input schema using the values of X_train\n", - "input_schema = Schema(X_train.values)\n", - "\n", - "# Define the output schema using y_train\n", - "output_schema = Schema(y_train)\n", - "\n", - "# Create a ModelSchema object specifying the input and output schemas\n", - "model_schema = ModelSchema(input_schema=input_schema, output_schema=output_schema)\n", - "\n", - "# Convert the model schema to a dictionary for further inspection or serialization\n", - "model_schema.to_dict()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Register model\n", - "\n", - "One of the features in Hopsworks is the model registry. This is where we can store different versions of models and compare their performance. Models from the registry can then be served as API endpoints." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Specify the directory where the model will be saved\n", - "model_dir = \"fraud_streaming_model\"\n", - "\n", - "# Check if the directory exists, and create it if it doesn't\n", - "if not os.path.isdir(model_dir):\n", - " os.mkdir(model_dir)\n", - "\n", - "# Save the trained XGBoost model using joblib\n", - "joblib.dump(clf, model_dir + '/xgboost_fraud_streaming_model.pkl')\n", - "\n", - "# Save the confusion matrix heatmap as an image in the model directory\n", - "fig.savefig(model_dir + \"/confusion_matrix.png\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the model registry\n", - "mr = project.get_model_registry()\n", - "\n", - "# Create a new model in the model registry\n", - "fraud_model = mr.python.create_model(\n", - " name=\"xgboost_fraud_streaming_model\", # Name for the model\n", - " metrics=metrics, # Metrics used for evaluation\n", - " model_schema=model_schema, # Schema defining the model's input and output\n", - " input_example=X_train.sample(), # Example input data for reference\n", - " description=\"Fraud Batch Predictor\", # Description of the model\n", - ")\n", - "\n", - "# Save the model to the specified directory\n", - "fraud_model.save(model_dir)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Model Deployment\n", - "\n", - "\n", - "### About Model Serving\n", - "Models can be served via KFServing or \"default\" serving, which means a Docker container exposing a Flask server. For KFServing models, or models written in Tensorflow, you do not need to write a prediction file (see the section below). However, for sklearn models using default serving, you do need to proceed to write a prediction file.\n", - "\n", - "In order to use KFServing, you must have Kubernetes installed and enabled on your cluster." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### ๐Ÿ“Ž Predictor script for Python models\n", - "\n", - "\n", - "Scikit-learn and XGBoost models are deployed as Python models, in which case you need to provide a **Predict** class that implements the **predict** method. The **predict()** method invokes the model on the inputs and returns the prediction as a list.\n", - "\n", - "The **init()** method is run when the predictor is loaded into memory, loading the model from the local directory it is materialized to, *ARTIFACT_FILES_PATH*.\n", - "\n", - "The directive \"%%writefile\" writes out the cell before to the given Python file. We will use the **predict_example.py** file to create a deployment for our model. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%writefile predict_example.py\n", - "import os\n", - "import numpy as np\n", - "import hsfs\n", - "import joblib\n", - "\n", - "\n", - "class Predict(object):\n", - "\n", - " def __init__(self):\n", - " \"\"\" Initializes the serving state, reads a trained model\"\"\" \n", - " # Get feature store handle\n", - " fs_conn = hsfs.connection()\n", - " self.fs = fs_conn.get_feature_store()\n", - " \n", - " # Get feature view\n", - " self.fv = self.fs.get_feature_view(\"transactions_view_streaming_fv\", 1)\n", - " \n", - " # Initialize serving\n", - " self.fv.init_serving(1)\n", - "\n", - " # Load the trained model\n", - " self.model = joblib.load(os.environ[\"ARTIFACT_FILES_PATH\"] + \"/xgboost_fraud_streaming_model.pkl\")\n", - " print(\"Initialization Complete\")\n", - "\n", - " def predict(self, inputs):\n", - " \"\"\" Serves a prediction request usign a trained model\"\"\"\n", - " feature_vector = self.fv.get_feature_vector({\"cc_num\": inputs[0][0]}, return_type=\"pandas\").drop([\"datetime\"], axis=1).values\n", - " return self.model.predict(feature_vector.reshape(1, -1)).tolist() # Numpy Arrays are not JSON serializable" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you wonder why we use the path Models/fraud_tutorial_model/1/model.pkl, it is useful to know that the Data Sets tab in the Hopsworks UI lets you browse among the different files in the project. Registered models will be found underneath the Models directory. Since you saved you model with the name fraud_tutorial_model, that's the directory you should look in. 1 is just the version of the model you want to deploy.\n", - "\n", - "This script needs to be put into a known location in the Hopsworks file system. Let's call the file predict_example.py and put it in the Models directory." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the dataset API for the current project\n", - "dataset_api = project.get_dataset_api()\n", - "\n", - "# Specify the local file path of the Python script to be uploaded\n", - "local_script_path = \"predict_example.py\"\n", - "\n", - "# Upload the Python script to the \"Models\", and overwrite if it already exists\n", - "uploaded_file_path = dataset_api.upload(local_script_path, \"Models\", overwrite=True)\n", - "\n", - "# Create the full path to the uploaded script for future reference\n", - "predictor_script_path = os.path.join(\"/Projects\", project.name, uploaded_file_path)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Create the deployment\n", - "Here, you fetch the model you want from the model registry and define a configuration for the deployment. For the configuration, you need to specify the serving type (default or KFserving)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Deploy the fraud model\n", - "deployment = fraud_model.deploy(\n", - " name=\"fraudonlinemodeldeployment\", # Specify a name for the deployment\n", - " script_file=predictor_script_path, # Provide the path to the Python script for prediction\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Print the name of the deployment\n", - "print(\"Deployment: \" + deployment.name)\n", - "\n", - "# Display information about the deployment\n", - "deployment.describe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Deployment is warming up...\")\n", - "time.sleep(45)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### The deployment has now been registered. However, to start it you need to run the following command:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Start the deployment and wait for it to be in a running state for up to 300 seconds\n", - "deployment.start(await_running=300)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Get the current state of the deployment\n", - "deployment.get_state().describe()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# To troubleshoot you can use `get_logs()` method\n", - "deployment.get_logs(component='predictor')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Stop Deployment\n", - "To stop the deployment you simply run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Stop the deployment and wait for it to be in a stopped state for up to 180 seconds\n", - "deployment.stop(await_stopped=180)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## โญ๏ธ **Next:** Part 03: Online Inference\n", - "\n", - "In the following notebook you will use your model for online inference.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "interpreter": { - "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" - }, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/integrations/pyspark_streaming/3_inference_pipeline.ipynb b/integrations/pyspark_streaming/3_inference_pipeline.ipynb deleted file mode 100644 index d6ccbccd..00000000 --- a/integrations/pyspark_streaming/3_inference_pipeline.ipynb +++ /dev/null @@ -1,235 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "0619bc2f", - "metadata": {}, - "source": [ - "# **Hopsworks Feature Store** - Part 03: Inference Pipeline\n" - ] - }, - { - "cell_type": "markdown", - "id": "e89e50c4", - "metadata": {}, - "source": [ - "## ๐Ÿ“ก Connecting to Hopsworks Feature Store " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e8e5e62d", - "metadata": {}, - "outputs": [], - "source": [ - "import hopsworks\n", - "\n", - "project = hopsworks.login()\n", - "\n", - "fs = project.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "eb5f1f04", - "metadata": {}, - "source": [ - "## โš™๏ธ Feature Retrieval\n", - "Let's retrieve a feature group in order to get cc_num values. The use the feature view to retrive the feature's needed to make predictions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7d3c3248", - "metadata": {}, - "outputs": [], - "source": [ - "trans_fg = fs.get_feature_group(\n", - " name=\"transactions_fraud_streaming_fg\",\n", - " version=1,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee9ad61a", - "metadata": {}, - "outputs": [], - "source": [ - "# Retrieve the first 5 unique credit card numbers (cc_nums)\n", - "cc_nums = trans_fg.select('cc_num').show(5).cc_num.values\n", - "\n", - "# Display the obtained cc_nums\n", - "cc_nums" - ] - }, - { - "cell_type": "markdown", - "id": "95705703", - "metadata": {}, - "source": [ - "Now we initlize the feature view using the training data version to retrive feature vector's" - ] - }, - { - "cell_type": "markdown", - "id": "4fd466c3", - "metadata": {}, - "source": [ - "## ๐Ÿ—„ Model Registry\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "76d991cf", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the Model Registry\n", - "mr = project.get_model_registry()" - ] - }, - { - "cell_type": "markdown", - "id": "b5701bf8", - "metadata": {}, - "source": [ - "## ๐Ÿš€ Fetch Deployment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3af8b8e0", - "metadata": {}, - "outputs": [], - "source": [ - "# Access the Model Serving\n", - "ms = project.get_model_serving()\n", - "\n", - "# Specify the deployment name\n", - "deployment_name = \"fraudonlinemodeldeployment\"\n", - "\n", - "# Get the deployment with the specified name\n", - "deployment = ms.get_deployment(deployment_name)\n", - "\n", - "# Start the deployment and wait for it to be in a running state for up to 300 seconds\n", - "deployment.start(await_running=300)" - ] - }, - { - "cell_type": "markdown", - "id": "49cf822e", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Predicting using deployment\n", - "\n", - "\n", - "Finally you can start making predictions with your model!\n", - "\n", - "Send inference requests to the deployed model as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "06c26a3a", - "metadata": {}, - "outputs": [], - "source": [ - "# Get the first credit card number\n", - "cc_num = cc_nums[0]\n", - "cc_num" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2252bdef", - "metadata": {}, - "outputs": [], - "source": [ - "# Make a prediction\n", - "deployment.predict(\n", - " inputs=[int(cc_num)],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "798fb9ed", - "metadata": {}, - "outputs": [], - "source": [ - "# Predict for several cc_nums\n", - "predictions = [\n", - " deployment.predict(inputs=[int(cc_num)])['predictions'] \n", - " for cc_num\n", - " in cc_nums\n", - "]\n", - "predictions" - ] - }, - { - "cell_type": "markdown", - "id": "ca4f3828", - "metadata": {}, - "source": [ - "### Stop Deployment\n", - "To stop the deployment you simply run:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e9145083", - "metadata": {}, - "outputs": [], - "source": [ - "# Stop the deployment\n", - "deployment.stop(await_stopped=180)" - ] - }, - { - "cell_type": "markdown", - "id": "7ce48444", - "metadata": {}, - "source": [ - "---\n", - "\n", - "### ๐Ÿฅณ Next Steps \n", - "Congratulations you've now completed the PySpark Streaming tutorial for Managed Hopsworks.\n", - "\n", - "Check out our other tutorials on โžก https://github.com/logicalclocks/hopsworks-tutorials\n", - "\n", - "Or documentation at โžก https://docs.hopsworks.ai" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/pyspark_streaming/features/transactions.py b/integrations/pyspark_streaming/features/transactions.py deleted file mode 100644 index c5cecd42..00000000 --- a/integrations/pyspark_streaming/features/transactions.py +++ /dev/null @@ -1,150 +0,0 @@ -import numpy as np -import pandas as pd - - -def haversine(long: int, lat: int, shift: int) -> float: - """Compute Haversine distance between each consecutive coordinate in (long, lat). - - Args: - - long: int ... - - lat: int ... - - shift: int ... - Returns: - - float: ... - """ - - long_shifted = long.shift(shift) - lat_shifted = lat.shift(shift) - long_diff = long_shifted - long - lat_diff = lat_shifted - lat - - a = np.sin(lat_diff / 2.0) ** 2 - b = np.cos(lat) * np.cos(lat_shifted) * np.sin(long_diff / 2.0) ** 2 - c = 2 * np.arcsin(np.sqrt(a + b)) - - return c - - -def get_year_month(datetime_col: pd.Series) -> pd.Series: - """Compute year and month string from datetime column. - - - datetime_col: pd.Series of datetime - Returns: - - pd.Series: year and month string - """ - - year_month = datetime_col.map(lambda x: str(x.year) + "-" + str(x.month)) - return year_month - - -def time_shift(datetime_col: pd.Series, shift: int) -> pd.Series: - """Compute time difference between each consecutive transaction. - - Args: - - datetime_col: pd.Series of datetime - - shift: int value of time step - Returns: - - pd.Series: - """ - time_shifted = datetime_col.shift(shift) - return time_shifted - - -def loc_delta_t_minus_1(df: pd.DataFrame) -> pd.DataFrame: - """Computes previous location of the transaction - - Args: - - df: DataFrame that contains the transaction data - Returns: - - DataFrame: containing the new feature - """ - df["loc_delta_t_minus_1"] = df.groupby("cc_num") \ - .apply(lambda x: haversine(x["longitude"], x["latitude"], -1)) \ - .reset_index(level=0, drop=True) \ - .fillna(0) - df = df.drop_duplicates(subset=['cc_num', 'datetime']).reset_index(drop=True) - return df - - -def time_delta_t_minus_1(df: pd.DataFrame) -> pd.DataFrame: - """Computes time difference in days between current and previous transaction - - Args: - - df: DataFrame that contains the transaction data - Returns: - - DataFrame: containing the new feature - """ - df["time_delta_t_minus_1"] = df.groupby("cc_num") \ - .apply(lambda x: time_shift(x["datetime"], -1)) \ - .reset_index(level=0, drop=True) - df["time_delta_t_minus_1"] = time_delta(df.time_delta_t_minus_1, df.datetime, 'D') - df["time_delta_t_minus_1"] = df.time_delta_t_minus_1.fillna(0) - df["country"] = df["country"].fillna("US") - df = df.drop_duplicates(subset=['cc_num', 'datetime']).reset_index(drop=True) - return df - - -# -def card_owner_age(trans_df: pd.DataFrame, profiles_df: pd.DataFrame) -> pd.DataFrame: - """Computes age of card owner at the time of transaction in years - Args: - - trans_df: pd.DataFrame - - credit_cards_df: pd.DataFrame - Returns: - - pd.DataFrame: - """ - age_df = trans_df.merge(profiles_df, on="cc_num", how="left") - trans_df["age_at_transaction"] = time_delta(age_df["datetime"], age_df["birthdate"], 'Y') - return trans_df - - -def expiry_days(trans_df: pd.DataFrame, profiles_df: pd.DataFrame) -> pd.DataFrame: - """Computes days until card expires at the time of transaction - Args: - - trans_df: pd.DataFrame - - credit_cards_df: pd.DataFrame - Returns: - - pd.DataFrame: - """ - card_expiry_df = trans_df.merge(profiles_df, on="cc_num", how="left") - trans_df["days_until_card_expires"] = \ - time_delta(card_expiry_df["cc_expiration_date"], card_expiry_df["datetime"], 'D') - return trans_df - - -def is_merchant_abroad(trans_df: pd.DataFrame, profiles_df: pd.DataFrame) -> pd.DataFrame: - """Computes if merchant location is abroad from card holders location - Args: - - trans_df: pd.DataFrame - - credit_cards_df: pd.DataFrame - Returns: - - pd.DataFrame: - """ - merged_df = trans_df.merge(profiles_df, on="cc_num", how="left") - trans_df["is_merchant_abroad"] = merged_df["country"] == merged_df["country_of_residence"] - return trans_df - - -def time_delta(date1: pd.Series, date2: pd.Series, unit: str) -> pd.Series: - """Computes time difference in days between 2 pandas datetime series - - Args: - - date1: pd.Series that contains datetime - - date2: pd.Series that contains datetime - - unit: time unit: 'D' or 'Y' days or years respectively - Returns: - - pd.Series: containing the time delta in units provided - """ - return (date1 - date2) / np.timedelta64(1, unit) - - -def select_features(df: pd.DataFrame) -> pd.DataFrame: - """ - Args: - - df: DataFrame - Returns: - - DataFrame: - """ - return df[ - ["tid", "datetime", "month", "cc_num", "amount", "country", "loc_delta_t_minus_1", "time_delta_t_minus_1", - "days_until_card_expires", "age_at_transaction"]] \ No newline at end of file diff --git a/integrations/pyspark_streaming/synthetic_data/synthetic_data.py b/integrations/pyspark_streaming/synthetic_data/synthetic_data.py deleted file mode 100644 index d92f442a..00000000 --- a/integrations/pyspark_streaming/synthetic_data/synthetic_data.py +++ /dev/null @@ -1,294 +0,0 @@ -from faker import Faker -import numpy as np -import pandas as pd -import datetime -import random -import bisect -from dataclasses import dataclass -from typing import List -import hashlib - -@dataclass -class transaction_probablity: - min_value : float - max_value : float - probablity : float - -@dataclass -class categories_price_probality: - category : str - min_price : float - max_price : float - probablity : float - -@dataclass -class transaction_price_distribution: - price_dist : List[transaction_probablity] - -@dataclass -class categories_price_distribution: - category_dist : List[categories_price_probality] - -class synthetic_data: - def __init__(self, total_unique_users : int = 100, - total_unique_transactions : int = 54000, - cash_withrawal_cards_cards_total : int = 2000, - total_unique_cash_withdrawals : int = 1200, - fraud_ratio : int = 0.0025, - atm_withrawal_seq_length : list = [3, 4, 5, 6, 7, 8, 9, 10], - attack_chain_length = [3, 4, 5, 6, 7, 8, 9, 10], - normal_atm_radius : float = 0.01, - transaction_distribution : transaction_price_distribution = transaction_price_distribution(price_dist=[transaction_probablity(min_value=0.01, max_value=1.01, probablity=0.05), - transaction_probablity(min_value=1, max_value=11.01, probablity=0.075), - transaction_probablity(min_value=10, max_value=100.01, probablity=0.525), - transaction_probablity(min_value=100, max_value=1000.01, probablity=0.25), - transaction_probablity(min_value=1000, max_value=10000.01, probablity=0.099), - transaction_probablity(min_value=10000, max_value=30000.01, probablity=0.001),]), - categories_distribution : categories_price_distribution = categories_price_distribution(category_dist=[categories_price_probality(category="Grocery", min_price=0.01, max_price=100, probablity=0.5), - categories_price_probality(category="Restaurant/Cafeteria", min_price=1, max_price=100, probablity=0.2), - categories_price_probality(category="Health/Beauty", min_price=10, max_price=500.01, probablity=0.1), - categories_price_probality(category="Domestic Transport", min_price=10, max_price=100.01, probablity=0.1), - categories_price_probality(category="Clothing", min_price=10, max_price=2000.01, probablity=0.05), - categories_price_probality(category="Electronics", min_price=100, max_price=10000.01, probablity=0.02), - categories_price_probality(category="Sports/Outdoors", min_price=10, max_price=100.01, probablity=0.015), - categories_price_probality(category="Holliday/Travel", min_price=10, max_price=100.01, probablity=0.014), - categories_price_probality(category="Jewelery", min_price=10, max_price=100.01, probablity=0.001), - ])): - - # Setting up parameter for simulated data generation - self.TOTAL_UNIQUE_USERS = total_unique_users - self.TOTAL_UNIQUE_TRANSACTIONS = total_unique_transactions - self.TOTAL_CASH_WITHRAWALS = cash_withrawal_cards_cards_total - self.TOTAL_UNIQUE_CASH_WITHDRAWALS = total_unique_cash_withdrawals - self.ATM_WITHRAWAL_SEQ_LENGTH = atm_withrawal_seq_length - self.NORMAL_ATM_RADIUS = normal_atm_radius - self.AMOUNT_DISTRIBUTION_PERCENTAGES = transaction_distribution - self.CATEGORY_PERC_PRICE = categories_distribution - self.NUMBER_OF_FRAUDULENT_TRANSACTIONS = self.TOTAL_UNIQUE_TRANSACTIONS * fraud_ratio - self.ATTACK_CHAIN_LENGTHS = attack_chain_length - self.NUMBER_OF_FRAUDULENT_ATM_TRANSACTIONS = self.TOTAL_CASH_WITHRAWALS * fraud_ratio - - self.DATE_FORMAT = '%Y-%m-%d %H:%M:%S' - self.END_DATE = datetime.datetime.now().strftime(self.DATE_FORMAT) - self.START_DATE = (datetime.datetime.now() - datetime.timedelta(days=30 * 6)).strftime(self.DATE_FORMAT) - - # Setting up faker - self.faker = Faker() - - # TODO : Make setting seeds a funcion and create a parameter for it - self.faker.seed_locale('en_US', 0) - seed = 12345 - random.seed(seed) - np.random.seed(seed) - self.faker.seed_instance(seed) - - - - - - def generate_list_credit_cards(self) -> pd.DataFrame: - """ Function that generates and returns a dataframe of credit card numbers - """ - credit_cards = [] - delta_time_object = datetime.datetime.strptime(self.START_DATE, self.DATE_FORMAT) - - # Generating credit card number, expiry date using faker - for _ in range(self.TOTAL_UNIQUE_USERS): - address = self.faker.local_latlng(country_code='US') - age = 0 - profile = None - while age < 18 or age > 100: - profile = self.faker.profile(fields=['name', 'mail', 'birthdate']) - bday = profile['birthdate'] - delta = datetime.datetime.now() - datetime.datetime(bday.year, bday.month, bday.day) - age = int(delta.days / 365) - - credit_cards.append({'cc_num': self.faker.credit_card_number(card_type='visa'), - 'cc_provider': random.choice(['visa', 'mastercard']), - 'cc_type' : random.choice(["credit", "debit"]), - 'cc_expiration_date': self.faker.credit_card_expire(start=delta_time_object, end="+5y",date_format="%m/%y"), - 'name' : profile["name"], - 'mail' : profile["name"], - 'birthdate' : profile["birthdate"], - 'age' : age, - 'city' : address[2], - 'country_of_residence' : address[3]}) - return pd.DataFrame(credit_cards) - - def generate_transaction_amounts(self, number_of_transactions : int) -> list: - """Function that returns all a simulated list of transaction amounts based on the transaction probablity distributions - """ - amounts = [] - for price_dist in self.AMOUNT_DISTRIBUTION_PERCENTAGES.price_dist: - n = int(number_of_transactions * price_dist.probablity) - start, end = price_dist.min_value, price_dist.max_value - for _ in range(n): - amounts.append(round(np.random.uniform(start, end + 1),2)) - return amounts - - def create_transaction(self, timestamp, credit_card_number, category, amount, latitude, longitude, city, country, fraud_label): - transaction_id = self.generate_transaction_id(timestamp, credit_card_number, category) - return {'tid': transaction_id, - 'datetime': timestamp.strftime(self.DATE_FORMAT), - 'cc_num': credit_card_number, - 'category': category, - 'amount': amount, - 'latitude': latitude, - 'longitude': longitude, - 'city': city, - 'country': country, - 'fraud_label': fraud_label} - - def generate_card_transactions(self, card_amounts, credit_card_numbers) -> list: - categories = [] - transaction_data_start = datetime.datetime.strptime(self.START_DATE, self.DATE_FORMAT) - transaction_data_end = datetime.datetime.strptime(self.END_DATE, self.DATE_FORMAT) - total_transactions = len(card_amounts) - - # Catgeories for Card transactions - for category_dist in self.CATEGORY_PERC_PRICE.category_dist: - n = round(total_transactions * category_dist.probablity) - for _ in range(n): - credit_card_number = random.choice(credit_card_numbers) - point_of_tr = self.faker.local_latlng(country_code="US") - timestamp = self.faker.date_time_between(start_date=transaction_data_start, end_date=transaction_data_end, tzinfo=None) - min_price_i = bisect.bisect_left(card_amounts, category_dist.min_price) - max_price_i = bisect.bisect_right(card_amounts, category_dist.max_price, lo=min_price_i) - - transaction = self.create_transaction(timestamp=timestamp, - credit_card_number=credit_card_number, - category=category_dist.category, - amount=random.choice(card_amounts[min_price_i:max_price_i]), - latitude=point_of_tr[0], - longitude=point_of_tr[1], - city=point_of_tr[2], - country=point_of_tr[3], - fraud_label=0) - categories.append(transaction) - random.shuffle(categories) - return categories - - def generate_atm_withdrawal(self, withdrawal_amounts, credit_card_numbers): - - transaction_data_start = datetime.datetime.strptime(self.START_DATE, self.DATE_FORMAT) - transaction_data_end = datetime.datetime.strptime(self.END_DATE, self.DATE_FORMAT) - - cash_withdrawals = [] - atm_count = 0 - while atm_count < self.TOTAL_UNIQUE_CASH_WITHDRAWALS: - for ATM_WITHRAWAL_SEQ in self.ATM_WITHRAWAL_SEQ_LENGTH: - # interval in hours between normal cash withdrawals - delta = random.randint(6, 168) - credit_card_number = random.choice(credit_card_numbers) - point_of_tr = self.faker.local_latlng(country_code="US") - withdrawal_timestamp = self.faker.date_time_between(start_date=transaction_data_start, end_date=transaction_data_end, tzinfo=None) - - # Generating sequence of transactions using the generated data - for _ in range(ATM_WITHRAWAL_SEQ): - withdrawal_timestamp = withdrawal_timestamp - datetime.timedelta(hours=delta) - transaction = self.create_transaction(timestamp=withdrawal_timestamp, - credit_card_number=credit_card_number, - category="Cash Withdrawal", - amount=random.choice(withdrawal_amounts), - latitude=self.faker.coordinate(point_of_tr[0], self.NORMAL_ATM_RADIUS), # updating latitude for sequence of transactions - longitude=self.faker.coordinate(point_of_tr[1], self.NORMAL_ATM_RADIUS), # updating longitude for sequence of transactions - city=point_of_tr[2], - country=point_of_tr[3], - fraud_label=0) - cash_withdrawals.append(transaction) - atm_count+=ATM_WITHRAWAL_SEQ - return cash_withdrawals - - def generate_transaction_id(self, timestamp: str, credit_card_number: str, transaction_amount: float) -> str: - """.""" - hashable = f'{timestamp}{credit_card_number}{transaction_amount}' - hexdigest = hashlib.md5(hashable.encode('utf-8')).hexdigest() - return hexdigest - - def create_transactions_data(self, credit_card_numbers): - # Schema transaction dataframe - tid, datetime, cc_num, category, amount, latitude, longitude, city, country - - # Creating transaction amounts - card_transactions_amounts = self.generate_transaction_amounts(self.TOTAL_UNIQUE_TRANSACTIONS) - cash_withdrawal_amounts = self.generate_transaction_amounts(self.TOTAL_UNIQUE_CASH_WITHDRAWALS) - - # Creating corresponding transaction categories - card_transactions = self.generate_card_transactions(card_transactions_amounts, credit_card_numbers) - atm_transactions = self.generate_atm_withdrawal(cash_withdrawal_amounts, credit_card_numbers) - - # Creating fraud transactions - fraud_card_transactions = self.create_fraud_card_transactions(card_transactions) - fraud_atm_transactions = self.create_atm_fraud_transactions(atm_transactions) - - transactions_dataframe = pd.DataFrame(card_transactions + atm_transactions + fraud_card_transactions + fraud_atm_transactions) - - return transactions_dataframe - - def create_fraud_card_transactions(self, card_transactions): - # Create frauds labels for normal transactions using attack chains, attack happens when multiple transactions happen in very close timeperiods - # for different categories of data - - # Creating attack chains -> selecting card for which fraud happens and adding fraud transactions for it - tot_fraud_tractions = 0 - fraud_transactions = [] - - transaction_data_start = datetime.datetime.strptime(self.START_DATE, self.DATE_FORMAT) - transaction_data_end = datetime.datetime.strptime(self.END_DATE, self.DATE_FORMAT) - - while tot_fraud_tractions < self.NUMBER_OF_FRAUDULENT_TRANSACTIONS: - selected_target_transaction = random.choice(card_transactions) - attack_chain_length = random.choice(self.ATTACK_CHAIN_LENGTHS) - - attack_amounts = self.generate_transaction_amounts(attack_chain_length) - attack_transactions = self.generate_card_transactions(attack_amounts, [selected_target_transaction["cc_num"]]) - timestamp = self.faker.date_time_between(start_date=transaction_data_start, end_date=transaction_data_end, tzinfo=None) - - for i in range(len(attack_transactions)): - # interval in seconds between fraudulent attacks - delta = random.randint(30, 120) - attack_transactions[i]["datetime"] = (timestamp + datetime.timedelta(seconds=delta)).strftime(self.DATE_FORMAT) - attack_transactions[i]["fraud_label"] = 1 - fraud_transactions.append(attack_transactions[i]) - tot_fraud_tractions+=1 - - if(tot_fraud_tractions == self.NUMBER_OF_FRAUDULENT_TRANSACTIONS): - break - - return fraud_transactions - - - def create_atm_fraud_transactions(self, atm_transactions): - # Fraud ATM transactions are transactions that are out if US in a sequence of ATM transactions and been done in quick sequence - fraud_atm_transactions = [] - tot_fraud_tractions = 0 - - attack_amounts = self.generate_transaction_amounts(self.NUMBER_OF_FRAUDULENT_ATM_TRANSACTIONS) - - while tot_fraud_tractions < self.NUMBER_OF_FRAUDULENT_ATM_TRANSACTIONS: - selected_target_transaction = random.choice(atm_transactions) - delta = random.randint(1, 5) - fraudulent_atm_location = self.faker.location_on_land() - while fraudulent_atm_location[3] == 'US': - fraudulent_atm_location = self.faker.location_on_land() - withdrawal_timestamp = datetime.datetime.strptime(selected_target_transaction["datetime"], self.DATE_FORMAT) + datetime.timedelta(delta) - transaction = self.create_transaction(timestamp=withdrawal_timestamp, - credit_card_number=selected_target_transaction["cc_num"], - category="Cash Withdrawal", - amount=random.choice(attack_amounts), - latitude=fraudulent_atm_location[0], - longitude=fraudulent_atm_location[1], - city=fraudulent_atm_location[2], - country=fraudulent_atm_location[3], - fraud_label=1) - fraud_atm_transactions.append(transaction) - tot_fraud_tractions+=1 - return fraud_atm_transactions - - - - def create_simulated_transactions(self): - credit_cards = self.generate_list_credit_cards() - - transactions = self.create_transactions_data(credit_cards["cc_num"].tolist()) - - return credit_cards, transactions \ No newline at end of file diff --git a/integrations/snowflake/requirements.txt b/integrations/snowflake/requirements.txt deleted file mode 100644 index 4ac5bf24..00000000 --- a/integrations/snowflake/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -hopsworks -snowflake-connector-python \ No newline at end of file diff --git a/integrations/snowflake/snowflake-data-source-hopsworks-feature-training-pipelines.ipynb b/integrations/snowflake/snowflake-data-source-hopsworks-feature-training-pipelines.ipynb deleted file mode 100644 index 5e9cb72e..00000000 --- a/integrations/snowflake/snowflake-data-source-hopsworks-feature-training-pipelines.ipynb +++ /dev/null @@ -1,1094 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "ba8e158f-ec52-4695-aedc-ec0e9ac69253", - "metadata": {}, - "source": [ - "# ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Snowflake as a Source for Feature Groups in Hopsworks \n", - "\n", - "Follow this [guide](https://docs.hopsworks.ai/latest/user_guides/fs/storage_connector/creation/snowflake/) to set up a Snowflake connector in Hopsworks.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "e059b3e6-6612-4045-a938-e7338943843a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/jdowling/anaconda3/envs/book/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Connected. Call `.close()` to terminate connection gracefully.\n", - "\n", - "Logged in to project, explore it here https://c.app.hopsworks.ai:443/p/17565\n", - "Connected. Call `.close()` to terminate connection gracefully.\n" - ] - } - ], - "source": [ - "import hopsworks\n", - "from hsfs.feature import Feature\n", - "import snowflake.connector\n", - "\n", - "proj = hopsworks.login()\n", - "fs = proj.get_feature_store()" - ] - }, - { - "cell_type": "markdown", - "id": "174f00f2-a93e-4fee-b87b-35c2e55ec855", - "metadata": {}, - "source": [ - "## ๐Ÿ”ฎ Retrieve a Connector\n", - "\n", - "Firstly, connect to feature store and then retrieve your **Snowflake storage connector**.\n", - "\n", - "Replace `my_storage_connector_name` with your Snowflake storage connector name.\n", - "\n", - "In Snowflake, you will need to go to the data marketplace and `get` the [Chicago Divvy Bike Status dataset](https://app.snowflake.com/marketplace/listing/GZSTZBWGAEV/ahead-chicago-divvy-bike-station-status?search=chicago%20bike). \n", - "Add the dataset to a schema called \"PUBLIC\" (or change the details in the connector below)." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "aea55a75-18c0-40fe-9d50-72a15f5d18bc", - "metadata": {}, - "outputs": [], - "source": [ - "connector = fs.get_storage_connector(\"my_storage_connector_name\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "147b9198-fb20-4124-b2d1-edb4aace7073", - "metadata": {}, - "outputs": [], - "source": [ - "def get_connection():\n", - " conn = snowflake.connector.connect(\n", - " user=connector.user,\n", - " password=connector.password,\n", - " account=connector.account,\n", - " warehouse=connector.warehouse,\n", - " database=\"CHICAGO_DIVVY_BIKE_STATION_STATUS\",\n", - " schema=\"PUBLIC\"\n", - " )\n", - " return conn" - ] - }, - { - "cell_type": "markdown", - "id": "c03a3d4b-94da-4e03-95b8-b387b9d51427", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Read Data \n", - "\n", - "You can retrieve your data by passing a SQL query as a string to the snowflake connector." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "d10b4046-2f36-4afd-9aea-286982c310de", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
SHORT_NAMESTATION_TYPENAMELONELECTRIC_BIKE_SURCHARGE_WAIVEREXTERNAL_IDLEGACY_IDCAPACITYHAS_KIOSKSTATION_IDREGION_IDEIGHTD_STATION_SERVICESLAT
0\"TA1309000064\"\"classic\"\"Wolcott Ave & Polk St\"-87.673688false\"a3ab86b6-a135-11e9-9cda-0a87ae2ba916\"\"342\"23true\"a3ab86b6-a135-11e9-9cda-0a87ae2ba916\"\"0\"[]41.871262
1\"15575\"\"classic\"\"Broadway & Thorndale Ave\"-87.6601406209false\"a3af2c5f-a135-11e9-9cda-0a87ae2ba916\"\"458\"19true\"a3af2c5f-a135-11e9-9cda-0a87ae2ba916\"\"0\"[]41.98974251144
2\"KA1503000065\"\"classic\"\"Woodlawn Ave & Lake Park Ave\"-87.5970051479false\"a3ad4d1b-a135-11e9-9cda-0a87ae2ba916\"\"413\"15true\"a3ad4d1b-a135-11e9-9cda-0a87ae2ba916\"\"0\"[]41.81409271048
3\"15491\"\"classic\"\"63rd St Beach\"-87.57632374763489false\"a3a547b8-a135-11e9-9cda-0a87ae2ba916\"\"101\"15true\"a3a547b8-a135-11e9-9cda-0a87ae2ba916\"\"0\"[]41.78091096424803
4\"13292\"\"classic\"\"Kedzie Ave & Palmer Ct\"-87.707322false\"a3a9f76a-a135-11e9-9cda-0a87ae2ba916\"\"290\"15true\"a3a9f76a-a135-11e9-9cda-0a87ae2ba916\"\"0\"[]41.921525
..........................................
1365None\"lightweight\"\"Michigan Ave & 102nd St\"-87.61984false\"motivate_CHI_1674190492950080350\"\"1674190492950080350\"10false\"1674190492950080350\"None[]41.7083
1366None\"lightweight\"\"Pullman - Planet Fitness\"-87.59779false\"motivate_CHI_1677249879663712418\"\"1677249879663712418\"10false\"1677249879663712418\"None[]41.69782
1367None\"lightweight\"\"Lamon Ave & Belmont Ave\"-87.7492834false\"motivate_CHI_1563698701206292480\"\"1563698701206292480\"9false\"1563698701206292480\"None[]41.9390108
1368None\"lightweight\"\"Racine Ave & 76th\"-87.654054false\"motivate_CHI_1674190591734328324\"\"1674190591734328324\"10false\"1674190591734328324\"None[]41.755786
1369None\"lightweight\"\"Torrence Ave & 98th St\"-87.559986false\"motivate_CHI_1674190634684001360\"\"1674190634684001360\"10false\"1674190634684001360\"None[]41.717059
\n", - "

1370 rows ร— 13 columns

\n", - "
" - ], - "text/plain": [ - " SHORT_NAME STATION_TYPE NAME \\\n", - "0 \"TA1309000064\" \"classic\" \"Wolcott Ave & Polk St\" \n", - "1 \"15575\" \"classic\" \"Broadway & Thorndale Ave\" \n", - "2 \"KA1503000065\" \"classic\" \"Woodlawn Ave & Lake Park Ave\" \n", - "3 \"15491\" \"classic\" \"63rd St Beach\" \n", - "4 \"13292\" \"classic\" \"Kedzie Ave & Palmer Ct\" \n", - "... ... ... ... \n", - "1365 None \"lightweight\" \"Michigan Ave & 102nd St\" \n", - "1366 None \"lightweight\" \"Pullman - Planet Fitness\" \n", - "1367 None \"lightweight\" \"Lamon Ave & Belmont Ave\" \n", - "1368 None \"lightweight\" \"Racine Ave & 76th\" \n", - "1369 None \"lightweight\" \"Torrence Ave & 98th St\" \n", - "\n", - " LON ELECTRIC_BIKE_SURCHARGE_WAIVER \\\n", - "0 -87.673688 false \n", - "1 -87.6601406209 false \n", - "2 -87.5970051479 false \n", - "3 -87.57632374763489 false \n", - "4 -87.707322 false \n", - "... ... ... \n", - "1365 -87.61984 false \n", - "1366 -87.59779 false \n", - "1367 -87.7492834 false \n", - "1368 -87.654054 false \n", - "1369 -87.559986 false \n", - "\n", - " EXTERNAL_ID LEGACY_ID CAPACITY \\\n", - "0 \"a3ab86b6-a135-11e9-9cda-0a87ae2ba916\" \"342\" 23 \n", - "1 \"a3af2c5f-a135-11e9-9cda-0a87ae2ba916\" \"458\" 19 \n", - "2 \"a3ad4d1b-a135-11e9-9cda-0a87ae2ba916\" \"413\" 15 \n", - "3 \"a3a547b8-a135-11e9-9cda-0a87ae2ba916\" \"101\" 15 \n", - "4 \"a3a9f76a-a135-11e9-9cda-0a87ae2ba916\" \"290\" 15 \n", - "... ... ... ... \n", - "1365 \"motivate_CHI_1674190492950080350\" \"1674190492950080350\" 10 \n", - "1366 \"motivate_CHI_1677249879663712418\" \"1677249879663712418\" 10 \n", - "1367 \"motivate_CHI_1563698701206292480\" \"1563698701206292480\" 9 \n", - "1368 \"motivate_CHI_1674190591734328324\" \"1674190591734328324\" 10 \n", - "1369 \"motivate_CHI_1674190634684001360\" \"1674190634684001360\" 10 \n", - "\n", - " HAS_KIOSK STATION_ID REGION_ID \\\n", - "0 true \"a3ab86b6-a135-11e9-9cda-0a87ae2ba916\" \"0\" \n", - "1 true \"a3af2c5f-a135-11e9-9cda-0a87ae2ba916\" \"0\" \n", - "2 true \"a3ad4d1b-a135-11e9-9cda-0a87ae2ba916\" \"0\" \n", - "3 true \"a3a547b8-a135-11e9-9cda-0a87ae2ba916\" \"0\" \n", - "4 true \"a3a9f76a-a135-11e9-9cda-0a87ae2ba916\" \"0\" \n", - "... ... ... ... \n", - "1365 false \"1674190492950080350\" None \n", - "1366 false \"1677249879663712418\" None \n", - "1367 false \"1563698701206292480\" None \n", - "1368 false \"1674190591734328324\" None \n", - "1369 false \"1674190634684001360\" None \n", - "\n", - " EIGHTD_STATION_SERVICES LAT \n", - "0 [] 41.871262 \n", - "1 [] 41.98974251144 \n", - "2 [] 41.81409271048 \n", - "3 [] 41.78091096424803 \n", - "4 [] 41.921525 \n", - "... ... ... \n", - "1365 [] 41.7083 \n", - "1366 [] 41.69782 \n", - "1367 [] 41.9390108 \n", - "1368 [] 41.755786 \n", - "1369 [] 41.717059 \n", - "\n", - "[1370 rows x 13 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "conn = get_connection()\n", - "\n", - "# SQL query to fetch the data\n", - "query = \"SELECT * FROM STATION_INFO_FLATTEN\"\n", - "\n", - "# Execute the query\n", - "cur = conn.cursor()\n", - "cur.execute(query)\n", - "rows = cur.fetchall()\n", - "\n", - "# Convert to DataFrame\n", - "import pandas as pd\n", - "df = pd.DataFrame(rows, columns=[x[0] for x in cur.description])\n", - "\n", - "# Close the cursor and connection\n", - "cur.close()\n", - "conn.close()\n", - "df" - ] - }, - { - "cell_type": "markdown", - "id": "7b5dc17f-7dfd-417d-8d5b-ab2abc125134", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Write Data to Hopsworks \n", - "\n", - "Create a feature group and write the Pandas DataFrame to the Feature Group.\n", - "Hopsworks will automatically lowercase the uppercase column names." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "13df21a3-7453-474f-b8b7-136caef4da8a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "FeatureGroupWarning: The ingested dataframe contains upper case letters in feature names: `['SHORT_NAME', 'STATION_TYPE', 'NAME', 'LON', 'ELECTRIC_BIKE_SURCHARGE_WAIVER', 'EXTERNAL_ID', 'LEGACY_ID', 'CAPACITY', 'HAS_KIOSK', 'STATION_ID', 'REGION_ID', 'EIGHTD_STATION_SERVICES', 'LAT']`. Feature names are sanitized to lower case in the feature store.\n", - "DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://c.app.hopsworks.ai:443/p/17565/fs/17485/fg/730480\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Uploading Dataframe: 100.00% |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| Rows 1370/1370 | Elapsed Time: 00:07 | Remaining Time: 00:00\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: chicago_bike_stations_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://c.app.hopsworks.ai/p/17565/jobs/named/chicago_bike_stations_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(, None)" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bike_stations = fs.get_or_create_feature_group(name=\"chicago_bike_stations\",\n", - " version=1,\n", - " description=\"Chicago bike station details\",\n", - " primary_key=[\"station_id\"]\n", - " )\n", - "bike_stations.insert(df)" - ] - }, - { - "cell_type": "markdown", - "id": "fbc78abe-77dc-4c9a-b77b-ed2f5cb90148", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Read Data \n", - "\n", - "This time, we are reading from a table with a timestamp. We are limiting it to the most recent 50k rows, but you can change it if you want." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "71ea530d-d74b-463f-9edd-16dadaa72b6d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IDSTATION_STATUSNUM_BIKES_AVAILABLENUM_EBIKES_AVAILABLELAST_UPDATED
0\"418\"\"active\"202021-10-20 19:52:20
1\"565\"\"active\"222021-10-20 19:52:20
2\"588\"\"active\"752021-10-20 19:52:20
3\"545\"\"active\"102021-10-20 19:52:20
4\"153\"\"active\"812021-10-20 19:52:20
..................
49995\"682\"\"active\"002021-10-20 20:55:35
49996\"1594046362333434512\"\"active\"552021-10-20 20:55:35
49997\"57\"\"active\"532021-10-20 20:55:35
49998\"1448642183732401786\"\"active\"552021-10-20 20:55:35
49999\"280\"\"active\"002021-10-20 20:55:35
\n", - "

50000 rows ร— 5 columns

\n", - "
" - ], - "text/plain": [ - " ID STATION_STATUS NUM_BIKES_AVAILABLE \\\n", - "0 \"418\" \"active\" 2 \n", - "1 \"565\" \"active\" 2 \n", - "2 \"588\" \"active\" 7 \n", - "3 \"545\" \"active\" 1 \n", - "4 \"153\" \"active\" 8 \n", - "... ... ... ... \n", - "49995 \"682\" \"active\" 0 \n", - "49996 \"1594046362333434512\" \"active\" 5 \n", - "49997 \"57\" \"active\" 5 \n", - "49998 \"1448642183732401786\" \"active\" 5 \n", - "49999 \"280\" \"active\" 0 \n", - "\n", - " NUM_EBIKES_AVAILABLE LAST_UPDATED \n", - "0 0 2021-10-20 19:52:20 \n", - "1 2 2021-10-20 19:52:20 \n", - "2 5 2021-10-20 19:52:20 \n", - "3 0 2021-10-20 19:52:20 \n", - "4 1 2021-10-20 19:52:20 \n", - "... ... ... \n", - "49995 0 2021-10-20 20:55:35 \n", - "49996 5 2021-10-20 20:55:35 \n", - "49997 3 2021-10-20 20:55:35 \n", - "49998 5 2021-10-20 20:55:35 \n", - "49999 0 2021-10-20 20:55:35 \n", - "\n", - "[50000 rows x 5 columns]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "conn = get_connection()\n", - "\n", - "query = \"\"\"\n", - " SELECT STATION_ID as id\n", - " , STATION_STATUS as station_status\n", - " , NUM_BIKES_AVAILABLE as num_bikes_available\n", - " , NUM_EBIKES_AVAILABLE as num_ebikes_available\n", - " , LAST_UPDATED as last_updated\n", - " FROM STATION_STATUS_FLATTEN_FULL ORDER BY last_updated LIMIT 50000 \n", - "\"\"\"\n", - "# Execute the query\n", - "cur = conn.cursor()\n", - "cur.execute(query)\n", - "rows = cur.fetchall()\n", - "\n", - "# Convert to DataFrame\n", - "import pandas as pd\n", - "df2 = pd.DataFrame(rows, columns=[x[0] for x in cur.description])\n", - "\n", - "# Close the cursor and connection\n", - "cur.close()\n", - "conn.close()\n", - "df2" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "68c17241-ef96-49b8-bbf5-398fdb541044", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{\"kwargs\": {\"column\": \"id\"}, \"meta\": {}, \"expectation_type\": \"expect_column_values_to_not_be_null\"}" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from great_expectations.core import ExpectationSuite, ExpectationConfiguration\n", - "\n", - "# Create an Expectation Suite\n", - "expectation_suite = ExpectationSuite(\n", - " expectation_suite_name=\"transaction_suite\")\n", - "\n", - "expectation_suite.add_expectation(\n", - " ExpectationConfiguration(\n", - " expectation_type=\"expect_column_values_to_not_be_null\",\n", - " kwargs={\"column\":\"id\"}\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "788e8316-50a7-4a79-8c8e-362493f54af8", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Create Feature Group \n", - "\n", - "This time, we are creating a feature group with a timestamp." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "0b8c97fb-335e-41ff-982e-272fa002805a", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "FeatureGroupWarning: The ingested dataframe contains upper case letters in feature names: `['ID', 'STATION_STATUS', 'NUM_BIKES_AVAILABLE', 'NUM_EBIKES_AVAILABLE', 'LAST_UPDATED']`. Feature names are sanitized to lower case in the feature store.\n", - "DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature Group created successfully, explore it at \n", - "https://c.app.hopsworks.ai:443/p/17565/fs/17485/fg/729472\n", - "Validation succeeded.\n", - "Validation Report saved successfully, explore a summary at https://c.app.hopsworks.ai:443/p/17565/fs/17485/fg/729472\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Uploading Dataframe: 100.00% |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| Rows 50000/50000 | Elapsed Time: 00:09 | Remaining Time: 00:00\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Launching job: chicago_bike_station_status_1_offline_fg_materialization\n", - "Job started successfully, you can follow the progress at \n", - "https://c.app.hopsworks.ai/p/17565/jobs/named/chicago_bike_station_status_1_offline_fg_materialization/executions\n" - ] - }, - { - "data": { - "text/plain": [ - "(,\n", - " {\n", - " \"success\": true,\n", - " \"evaluation_parameters\": {},\n", - " \"statistics\": {\n", - " \"evaluated_expectations\": 1,\n", - " \"successful_expectations\": 1,\n", - " \"unsuccessful_expectations\": 0,\n", - " \"success_percent\": 100.0\n", - " },\n", - " \"meta\": {\n", - " \"great_expectations_version\": \"0.15.12\",\n", - " \"expectation_suite_name\": \"transaction_suite\",\n", - " \"run_id\": {\n", - " \"run_time\": \"2024-04-18T06:00:48.814759+00:00\",\n", - " \"run_name\": null\n", - " },\n", - " \"batch_kwargs\": {\n", - " \"ge_batch_id\": \"011c36b6-fd49-11ee-98f3-00155d1167e0\"\n", - " },\n", - " \"batch_markers\": {},\n", - " \"batch_parameters\": {},\n", - " \"validation_time\": \"20240418T060048.814651Z\",\n", - " \"expectation_suite_meta\": {\n", - " \"great_expectations_version\": \"0.15.12\"\n", - " }\n", - " },\n", - " \"results\": [\n", - " {\n", - " \"success\": true,\n", - " \"result\": {\n", - " \"element_count\": 50000,\n", - " \"unexpected_count\": 0,\n", - " \"unexpected_percent\": 0.0,\n", - " \"unexpected_percent_total\": 0.0,\n", - " \"partial_unexpected_list\": []\n", - " },\n", - " \"expectation_config\": {\n", - " \"kwargs\": {\n", - " \"column\": \"id\"\n", - " },\n", - " \"meta\": {\n", - " \"expectationId\": 454659\n", - " },\n", - " \"expectation_type\": \"expect_column_values_to_not_be_null\"\n", - " },\n", - " \"meta\": {\n", - " \"ingestionResult\": \"INGESTED\",\n", - " \"validationTime\": \"2024-04-18T06:00:48.000814Z\"\n", - " },\n", - " \"exception_info\": {\n", - " \"raised_exception\": false,\n", - " \"exception_message\": null,\n", - " \"exception_traceback\": null\n", - " }\n", - " }\n", - " ]\n", - " })" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "bike_station_status = fs.get_or_create_feature_group(name=\"chicago_bike_station_status\",\n", - " version=1,\n", - " description=\"Chicago bike station details\",\n", - " primary_key=[\"id\"],\n", - " event_time=\"last_updated\",\n", - " online_enabled=True,\n", - " expectation_suite=expectation_suite\n", - " )\n", - "bike_station_status.insert(df2)" - ] - }, - { - "cell_type": "markdown", - "id": "a07ab095-bf92-4f7d-a45e-6fabf9d959e5", - "metadata": {}, - "source": [ - "## ๐Ÿ“ Create a Feature View and Training Data \n", - "\n", - "Join features from our feature group with no event_time (bike_stations) with our feature group with event_time (bike_station_status)." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "68561032-6a05-4b7e-8ab1-1cd66b8a00cf", - "metadata": {}, - "outputs": [], - "source": [ - "# select the features for your model\n", - "selected_features = bike_station_status.select(['station_status','num_bikes_available']).join(bike_stations.select(['station_type', 'capacity', 'has_kiosk']), left_on=\"id\", right_on=\"station_id\")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "b43c8d25-ab0e-450f-86b6-660fa64fa7b4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Feature view created successfully, explore it at \n", - "https://c.app.hopsworks.ai:443/p/17565/fs/17485/fv/chicago_bike_availability/version/1\n" - ] - } - ], - "source": [ - "fv = fs.get_or_create_feature_view(name=\"chicago_bike_availability\", \n", - " version=1,\n", - " description=\"Predict bike availability\",\n", - " query=selected_features,\n", - " labels=[\"num_bikes_available\"]\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "6f3e911a-4f0d-402f-890b-4d7552f6926c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Finished: Reading data from Hopsworks, using ArrowFlight (3.09s) \n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n", - "DeprecationWarning: is_sparse is deprecated and will be removed in a future version. Check `isinstance(dtype, pd.SparseDtype)` instead.\n", - "VersionWarning: Incremented version to `1`.\n" - ] - } - ], - "source": [ - "X_train, X_test, y_train, y_test = fv.train_test_split(test_size=0.1)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "b6e9dc96-aafd-46d8-8fe7-8f682d2c5154", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
station_statusstation_typecapacityhas_kiosk
0\"active\"\"lightweight\"10false
2\"active\"\"lightweight\"9false
3\"active\"\"lightweight\"9false
4\"active\"\"lightweight\"8false
5\"active\"\"lightweight\"4false
...............
7193\"planned\"\"lightweight\"6false
7194\"active\"\"lightweight\"9false
7195\"active\"\"lightweight\"9false
7196\"active\"\"lightweight\"6false
7197\"active\"\"lightweight\"6false
\n", - "

6478 rows ร— 4 columns

\n", - "
" - ], - "text/plain": [ - " station_status station_type capacity has_kiosk\n", - "0 \"active\" \"lightweight\" 10 false\n", - "2 \"active\" \"lightweight\" 9 false\n", - "3 \"active\" \"lightweight\" 9 false\n", - "4 \"active\" \"lightweight\" 8 false\n", - "5 \"active\" \"lightweight\" 4 false\n", - "... ... ... ... ...\n", - "7193 \"planned\" \"lightweight\" 6 false\n", - "7194 \"active\" \"lightweight\" 9 false\n", - "7195 \"active\" \"lightweight\" 9 false\n", - "7196 \"active\" \"lightweight\" 6 false\n", - "7197 \"active\" \"lightweight\" 6 false\n", - "\n", - "[6478 rows x 4 columns]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f1c18c2e-523c-4241-a2b0-f3b0dfac8f6a", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/integrations/snowflake/snowflake_feature_pipeline_external.ipynb b/integrations/snowflake/snowflake_feature_pipeline_external.ipynb index 3a52061e..2c59d298 100644 --- a/integrations/snowflake/snowflake_feature_pipeline_external.ipynb +++ b/integrations/snowflake/snowflake_feature_pipeline_external.ipynb @@ -7,9 +7,9 @@ "source": [ "# ๐Ÿ‘จ๐Ÿปโ€๐Ÿซ Snowflake External Feature Group Creation\n", "\n", - "Follow this [guide](https://docs.hopsworks.ai/latest/user_guides/fs/storage_connector/creation/snowflake/) to set up a Snowflake connector in Hopsworks.\n", + "Follow this [guide](https://docs.hopsworks.ai/3.1/user_guides/fs/storage_connector/creation/snowflake/) to set up a connection to Snowflake.\n", "\n", - "In addition, you can read about [External Feature Groups](https://docs.hopsworks.ai/latest/user_guides/fs/feature_group/create_external/)." + "In addition, you can read about [External Feature Groups](https://docs.hopsworks.ai/3.0/user_guides/fs/feature_group/create_external/)." ] }, { @@ -159,23 +159,20 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "PySpark", "language": "python", - "name": "python3" + "name": "pysparkkernel" }, "language_info": { "codemirror_mode": { - "name": "ipython", + "name": "python", "version": 3 }, - "file_extension": ".py", "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.0" + "name": "pyspark", + "pygments_lexer": "python3" } }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/integrations/wandb/1_feature_groups.ipynb b/integrations/wandb/1_feature_groups.ipynb index f2f9f4d8..d67e9c9f 100755 --- a/integrations/wandb/1_feature_groups.ipynb +++ b/integrations/wandb/1_feature_groups.ipynb @@ -121,7 +121,7 @@ "\n", "# Compute age at transaction.\n", "age_df = trans_df.merge(profiles_df, on=\"cc_num\", how=\"left\")\n", - "trans_df[\"age_at_transaction\"] = (age_df[\"datetime\"] - age_df[\"birthdate\"]) / np.timedelta64(365, \"D\")\n", + "trans_df[\"age_at_transaction\"] = (age_df[\"datetime\"] - age_df[\"birthdate\"]) / np.timedelta64(1, \"Y\")\n", "\n", "# Compute days until card expires.\n", "card_expiry_df = trans_df.merge(credit_cards_df, on=\"cc_num\", how=\"left\")\n", diff --git a/integrations/wandb/2_feature_view_creation.ipynb b/integrations/wandb/2_feature_view_creation.ipynb index a2b68e40..877e5de7 100755 --- a/integrations/wandb/2_feature_view_creation.ipynb +++ b/integrations/wandb/2_feature_view_creation.ipynb @@ -173,11 +173,12 @@ "outputs": [], "source": [ "td_version, td_job = feature_view.create_train_validation_test_split(\n", - " description='transactions fraud batch training dataset',\n", - " data_format='csv',\n", - " validation_size=0.2,\n", - " test_size=0.1,\n", - " coalesce=True,\n", + " description = 'transactions fraud batch training dataset',\n", + " data_format = 'csv',\n", + " validation_size = 0.2,\n", + " test_size = 0.1,\n", + " write_options = {'wait_for_job': True},\n", + " coalesce = True,\n", ")" ] }, @@ -219,9 +220,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.9.12" } }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/iris/iris_tutorial.ipynb b/iris/iris_tutorial.ipynb index 31de7873..bb38d6a1 100644 --- a/iris/iris_tutorial.ipynb +++ b/iris/iris_tutorial.ipynb @@ -168,7 +168,10 @@ " description=\"Iris flower dataset\",\n", ")\n", "# Insert data info the feature group\n", - "iris_fg.insert(iris_df)" + "iris_fg.insert(\n", + " iris_df, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { @@ -194,11 +197,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = iris_fg.select_all()\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "# Build query object\n", + "query = iris_fg.select_all()" ] }, { @@ -212,10 +212,21 @@ " name=\"iris\",\n", " version=1,\n", " description=\"Read from Iris flower dataset\",\n", - " query=selected_features,\n", + " query=query,\n", ")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Read query and display first 3 rows.\n", + "query_df = query.read()\n", + "query_df.head(3)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/loan_approval/1-loan-approval-feature-pipeline.ipynb b/loan_approval/1-loan-approval-feature-pipeline.ipynb index e17fcacd..7654c220 100644 --- a/loan_approval/1-loan-approval-feature-pipeline.ipynb +++ b/loan_approval/1-loan-approval-feature-pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ba7044aa", + "id": "4e1e2fcc", "metadata": { "papermill": { "duration": 0.029083, @@ -28,7 +28,7 @@ }, { "cell_type": "markdown", - "id": "50fa7c09", + "id": "ce396bcb", "metadata": {}, "source": [ "## ๐Ÿ“ Imports \n" @@ -37,7 +37,7 @@ { "cell_type": "code", "execution_count": null, - "id": "83d06dc9", + "id": "7b696de8", "metadata": {}, "outputs": [], "source": [ @@ -47,9 +47,15 @@ { "cell_type": "code", "execution_count": null, - "id": "bfd82941", + "id": "9cb24c87", "metadata": { "_kg_hide-input": true, + "execution": { + "iopub.execute_input": "2023-01-31T14:11:35.164738Z", + "iopub.status.busy": "2023-01-31T14:11:35.163899Z", + "iopub.status.idle": "2023-01-31T14:11:44.332161Z", + "shell.execute_reply": "2023-01-31T14:11:44.331116Z" + }, "papermill": { "duration": 9.198485, "end_time": "2023-01-31T14:11:44.334641", @@ -74,7 +80,7 @@ }, { "cell_type": "markdown", - "id": "77ef7fcb", + "id": "b38e7831", "metadata": {}, "source": [ "## ๐Ÿ’ฝ Loading the Data \n" @@ -83,7 +89,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f42fcc34", + "id": "078e4a4e", "metadata": {}, "outputs": [], "source": [ @@ -92,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "b38b8bf3", + "id": "888e779f", "metadata": {}, "source": [ "### โ›ณ๏ธ Loans Data \n" @@ -101,8 +107,14 @@ { "cell_type": "code", "execution_count": null, - "id": "d53efe1e", + "id": "276d0ec7", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:11:44.602805Z", + "iopub.status.busy": "2023-01-31T14:11:44.602108Z", + "iopub.status.idle": "2023-01-31T14:11:47.931616Z", + "shell.execute_reply": "2023-01-31T14:11:47.930713Z" + }, "papermill": { "duration": 3.467387, "end_time": "2023-01-31T14:11:47.933929", @@ -122,7 +134,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5a161ddf", + "id": "c4f6800b", "metadata": {}, "outputs": [], "source": [ @@ -135,8 +147,14 @@ { "cell_type": "code", "execution_count": null, - "id": "1ae4fedd", + "id": "d0def3d9", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:11:48.208667Z", + "iopub.status.busy": "2023-01-31T14:11:48.208157Z", + "iopub.status.idle": "2023-01-31T14:11:48.428818Z", + "shell.execute_reply": "2023-01-31T14:11:48.427863Z" + }, "papermill": { "duration": 0.360858, "end_time": "2023-01-31T14:11:48.431029", @@ -155,7 +173,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21132787", + "id": "7d12bfb4", "metadata": {}, "outputs": [], "source": [ @@ -164,7 +182,7 @@ }, { "cell_type": "markdown", - "id": "83d26694", + "id": "2a4f12ac", "metadata": {}, "source": [ "### โ›ณ๏ธ Applicants Data \n" @@ -173,7 +191,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7589dcdf", + "id": "bf64e24d", "metadata": {}, "outputs": [], "source": [ @@ -185,7 +203,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0af0bf78", + "id": "58521fcc", "metadata": {}, "outputs": [], "source": [ @@ -201,7 +219,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e8e7cfdd", + "id": "6b95e5b8", "metadata": {}, "outputs": [], "source": [ @@ -210,7 +228,7 @@ }, { "cell_type": "markdown", - "id": "18784e9f", + "id": "7dd7cc11", "metadata": { "execution": { "iopub.execute_input": "2023-01-31T14:11:48.971332Z", @@ -234,8 +252,14 @@ { "cell_type": "code", "execution_count": null, - "id": "a6f9bbf3", + "id": "74bf2b1e", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:06.335754Z", + "iopub.status.busy": "2023-01-31T14:12:06.334576Z", + "iopub.status.idle": "2023-01-31T14:12:06.424596Z", + "shell.execute_reply": "2023-01-31T14:12:06.423659Z" + }, "papermill": { "duration": 0.240425, "end_time": "2023-01-31T14:12:06.426982", @@ -259,8 +283,14 @@ { "cell_type": "code", "execution_count": null, - "id": "62820cd3", + "id": "095cd7fe", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:16.815316Z", + "iopub.status.busy": "2023-01-31T14:12:16.814929Z", + "iopub.status.idle": "2023-01-31T14:12:17.095807Z", + "shell.execute_reply": "2023-01-31T14:12:17.094774Z" + }, "papermill": { "duration": 0.429455, "end_time": "2023-01-31T14:12:17.098362", @@ -281,7 +311,7 @@ }, { "cell_type": "markdown", - "id": "9e781ab0", + "id": "9d1bac3f", "metadata": { "papermill": { "duration": 0.151301, @@ -305,8 +335,14 @@ { "cell_type": "code", "execution_count": null, - "id": "40cb93e7", + "id": "53a5c4a7", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:32.338934Z", + "iopub.status.busy": "2023-01-31T14:12:32.338562Z", + "iopub.status.idle": "2023-01-31T14:12:32.817616Z", + "shell.execute_reply": "2023-01-31T14:12:32.816627Z" + }, "papermill": { "duration": 0.636201, "end_time": "2023-01-31T14:12:32.820041", @@ -331,7 +367,7 @@ }, { "cell_type": "markdown", - "id": "d0b24843", + "id": "0174e794", "metadata": { "papermill": { "duration": 0.152855, @@ -353,7 +389,7 @@ }, { "cell_type": "markdown", - "id": "bd0a69be", + "id": "74d3e2a5", "metadata": { "papermill": { "duration": 0.153798, @@ -371,8 +407,14 @@ { "cell_type": "code", "execution_count": null, - "id": "0d06d64f", + "id": "4e69498c", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:39.733271Z", + "iopub.status.busy": "2023-01-31T14:12:39.732764Z", + "iopub.status.idle": "2023-01-31T14:12:39.823678Z", + "shell.execute_reply": "2023-01-31T14:12:39.822304Z" + }, "papermill": { "duration": 0.253402, "end_time": "2023-01-31T14:12:39.826253", @@ -389,7 +431,7 @@ }, { "cell_type": "markdown", - "id": "8839641f", + "id": "f1ad195b", "metadata": { "papermill": { "duration": 0.241511, @@ -407,8 +449,14 @@ { "cell_type": "code", "execution_count": null, - "id": "8aa885b5", + "id": "08cd74d5", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:42.216196Z", + "iopub.status.busy": "2023-01-31T14:12:42.214985Z", + "iopub.status.idle": "2023-01-31T14:12:42.301892Z", + "shell.execute_reply": "2023-01-31T14:12:42.300870Z" + }, "papermill": { "duration": 0.253314, "end_time": "2023-01-31T14:12:42.304445", @@ -425,7 +473,7 @@ }, { "cell_type": "markdown", - "id": "6a1c32f1", + "id": "a946b370", "metadata": { "papermill": { "duration": 0.154896, @@ -443,8 +491,14 @@ { "cell_type": "code", "execution_count": null, - "id": "0f408ab6", + "id": "87222d20", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:43.955316Z", + "iopub.status.busy": "2023-01-31T14:12:43.954293Z", + "iopub.status.idle": "2023-01-31T14:12:44.029021Z", + "shell.execute_reply": "2023-01-31T14:12:44.027978Z" + }, "papermill": { "duration": 0.232715, "end_time": "2023-01-31T14:12:44.031617", @@ -461,7 +515,7 @@ }, { "cell_type": "markdown", - "id": "06c94b32", + "id": "00fca018", "metadata": { "papermill": { "duration": 0.154279, @@ -480,7 +534,7 @@ }, { "cell_type": "markdown", - "id": "1dfecfcc", + "id": "be604f1e", "metadata": { "papermill": { "duration": 0.157466, @@ -498,8 +552,14 @@ { "cell_type": "code", "execution_count": null, - "id": "07785292", + "id": "655aa19d", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:46.237863Z", + "iopub.status.busy": "2023-01-31T14:12:46.237469Z", + "iopub.status.idle": "2023-01-31T14:12:46.332340Z", + "shell.execute_reply": "2023-01-31T14:12:46.331345Z" + }, "papermill": { "duration": 0.253754, "end_time": "2023-01-31T14:12:46.335011", @@ -518,8 +578,14 @@ { "cell_type": "code", "execution_count": null, - "id": "66c2feed", + "id": "75bb4c76", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:46.991455Z", + "iopub.status.busy": "2023-01-31T14:12:46.990863Z", + "iopub.status.idle": "2023-01-31T14:12:57.341490Z", + "shell.execute_reply": "2023-01-31T14:12:57.340452Z" + }, "papermill": { "duration": 10.520365, "end_time": "2023-01-31T14:12:57.343915", @@ -543,7 +609,7 @@ }, { "cell_type": "markdown", - "id": "002836ec", + "id": "bffb4178", "metadata": { "papermill": { "duration": 0.156009, @@ -562,8 +628,14 @@ { "cell_type": "code", "execution_count": null, - "id": "4bde103f", + "id": "38ed484b", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:12:58.425005Z", + "iopub.status.busy": "2023-01-31T14:12:58.424030Z", + "iopub.status.idle": "2023-01-31T14:12:58.632168Z", + "shell.execute_reply": "2023-01-31T14:12:58.631141Z" + }, "papermill": { "duration": 0.369642, "end_time": "2023-01-31T14:12:58.634630", @@ -580,7 +652,7 @@ }, { "cell_type": "markdown", - "id": "bd7c5a9c", + "id": "dbd71208", "metadata": { "papermill": { "duration": 0.154966, @@ -597,7 +669,7 @@ }, { "cell_type": "markdown", - "id": "71f050ac", + "id": "20623395", "metadata": { "papermill": { "duration": 0.156275, @@ -614,7 +686,7 @@ }, { "cell_type": "markdown", - "id": "74cb3c4e", + "id": "de3a0265", "metadata": { "papermill": { "duration": 0.15528, @@ -634,8 +706,14 @@ { "cell_type": "code", "execution_count": null, - "id": "fcbf45d8", + "id": "ad383419", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:13:01.592535Z", + "iopub.status.busy": "2023-01-31T14:13:01.591599Z", + "iopub.status.idle": "2023-01-31T14:13:01.656733Z", + "shell.execute_reply": "2023-01-31T14:13:01.655753Z" + }, "papermill": { "duration": 0.225278, "end_time": "2023-01-31T14:13:01.659576", @@ -652,7 +730,7 @@ }, { "cell_type": "markdown", - "id": "c33c695f", + "id": "b78ba175", "metadata": { "papermill": { "duration": 0.162961, @@ -671,8 +749,14 @@ { "cell_type": "code", "execution_count": null, - "id": "9fc7e99b", + "id": "3cc3188b", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:13:03.458992Z", + "iopub.status.busy": "2023-01-31T14:13:03.458459Z", + "iopub.status.idle": "2023-01-31T14:13:03.641611Z", + "shell.execute_reply": "2023-01-31T14:13:03.628414Z" + }, "papermill": { "duration": 0.362285, "end_time": "2023-01-31T14:13:03.644153", @@ -693,8 +777,14 @@ { "cell_type": "code", "execution_count": null, - "id": "97a9662b", + "id": "8a04d628", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:13:04.068331Z", + "iopub.status.busy": "2023-01-31T14:13:04.067955Z", + "iopub.status.idle": "2023-01-31T14:13:04.103983Z", + "shell.execute_reply": "2023-01-31T14:13:04.102946Z" + }, "papermill": { "duration": 0.238062, "end_time": "2023-01-31T14:13:04.105979", @@ -712,8 +802,14 @@ { "cell_type": "code", "execution_count": null, - "id": "9f97ee87", + "id": "dafe46bf", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:13:04.919809Z", + "iopub.status.busy": "2023-01-31T14:13:04.919417Z", + "iopub.status.idle": "2023-01-31T14:13:04.986378Z", + "shell.execute_reply": "2023-01-31T14:13:04.985236Z" + }, "papermill": { "duration": 0.226129, "end_time": "2023-01-31T14:13:04.989199", @@ -730,7 +826,7 @@ }, { "cell_type": "markdown", - "id": "c00651cc", + "id": "3be6a8ab", "metadata": { "papermill": { "duration": 0.155658, @@ -750,7 +846,7 @@ { "cell_type": "code", "execution_count": null, - "id": "357d9e7f", + "id": "d3c3bb7c", "metadata": {}, "outputs": [], "source": [ @@ -759,7 +855,7 @@ }, { "cell_type": "markdown", - "id": "f1e87b8a", + "id": "3af9fbb5", "metadata": { "papermill": { "duration": 0.158483, @@ -778,8 +874,14 @@ { "cell_type": "code", "execution_count": null, - "id": "df7bcff9", + "id": "9e8e8d21", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:13:06.287247Z", + "iopub.status.busy": "2023-01-31T14:13:06.286161Z", + "iopub.status.idle": "2023-01-31T14:13:06.337535Z", + "shell.execute_reply": "2023-01-31T14:13:06.336363Z" + }, "papermill": { "duration": 0.221956, "end_time": "2023-01-31T14:13:06.339961", @@ -798,7 +900,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ab9f4744", + "id": "2b29436e", "metadata": {}, "outputs": [], "source": [ @@ -812,8 +914,8 @@ " expectation_type=\"expect_column_values_to_be_between\",\n", " kwargs={\n", " \"column\":\"int_rate\", \n", - " \"min_value\":-2.0,\n", - " \"max_value\":2000.0,\n", + " \"min_value\":\"-2.0\",\n", + " \"max_value\":\"2000.0\",\n", " }\n", " )\n", ")" @@ -821,7 +923,7 @@ }, { "cell_type": "markdown", - "id": "90788109", + "id": "5b9edb3f", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store" @@ -830,7 +932,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6cfde176", + "id": "c991c5e9", "metadata": {}, "outputs": [], "source": [ @@ -843,7 +945,7 @@ }, { "cell_type": "markdown", - "id": "275a2b8e", + "id": "528ae792", "metadata": {}, "source": [ "## ๐Ÿช„ Creating Feature Groups \n" @@ -852,7 +954,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9c548bf7", + "id": "8b0001e4", "metadata": {}, "outputs": [], "source": [ @@ -870,7 +972,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9b7d5edb", + "id": "360c1a96", "metadata": {}, "outputs": [], "source": [ @@ -887,7 +989,7 @@ }, { "cell_type": "markdown", - "id": "37b0eddf", + "id": "48103c37", "metadata": {}, "source": [ "### Configure upload batch size for performance (latency vs throughput)\n", @@ -911,30 +1013,26 @@ { "cell_type": "code", "execution_count": null, - "id": "80a50d09", + "id": "040bf356", "metadata": {}, "outputs": [], "source": [ - "# Insert data into the \"loans\" feature group\n", - "loans_fg.insert(loans_df)\n", - "print('โœ… Done!')" + "loans_fg.insert(loans_df)" ] }, { "cell_type": "code", "execution_count": null, - "id": "c9a7c228", + "id": "97c9f72f", "metadata": {}, "outputs": [], "source": [ - "# Insert data into the \"applicants\" feature group\n", - "applicants_fg.insert(applicants_df)\n", - "print('โœ… Done!')" + "applicants_fg.insert(applicants_df)" ] }, { "cell_type": "markdown", - "id": "08c47109", + "id": "c3f24d00", "metadata": {}, "source": [ "## ๐Ÿ“– Update the description of any features found in the data dictionary\n", @@ -945,7 +1043,7 @@ { "cell_type": "code", "execution_count": null, - "id": "009888f0", + "id": "7e956993", "metadata": {}, "outputs": [], "source": [ @@ -956,7 +1054,7 @@ { "cell_type": "code", "execution_count": null, - "id": "15b84302", + "id": "93889452", "metadata": {}, "outputs": [], "source": [ @@ -984,7 +1082,7 @@ }, { "cell_type": "markdown", - "id": "0b5e5e3e", + "id": "4b3f7025", "metadata": {}, "source": [ "---\n", @@ -997,7 +1095,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1011,7 +1109,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" }, "papermill": { "default_parameters": {}, diff --git a/loan_approval/2-loan-approval-training-pipeline.ipynb b/loan_approval/2-loan-approval-training-pipeline.ipynb index c7d1fa2b..74bf7683 100644 --- a/loan_approval/2-loan-approval-training-pipeline.ipynb +++ b/loan_approval/2-loan-approval-training-pipeline.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ea002020", + "id": "4e1e2fcc", "metadata": { "papermill": { "duration": 0.029083, @@ -30,7 +30,7 @@ }, { "cell_type": "markdown", - "id": "d446dbd1", + "id": "cfb490f6", "metadata": {}, "source": [ "## ๐Ÿ“ Imports \n" @@ -39,7 +39,7 @@ { "cell_type": "code", "execution_count": null, - "id": "1f8de2a6", + "id": "a3cdbf34", "metadata": {}, "outputs": [], "source": [ @@ -49,9 +49,15 @@ { "cell_type": "code", "execution_count": null, - "id": "e0b5ebdf", + "id": "9cb24c87", "metadata": { "_kg_hide-input": true, + "execution": { + "iopub.execute_input": "2023-01-31T14:11:35.164738Z", + "iopub.status.busy": "2023-01-31T14:11:35.163899Z", + "iopub.status.idle": "2023-01-31T14:11:44.332161Z", + "shell.execute_reply": "2023-01-31T14:11:44.331116Z" + }, "papermill": { "duration": 9.198485, "end_time": "2023-01-31T14:11:44.334641", @@ -64,23 +70,27 @@ "outputs": [], "source": [ "import pandas as pd\n", + "import numpy as np\n", + "import seaborn as sns\n", + "from scipy import stats \n", "import matplotlib.pyplot as plt\n", "import joblib\n", "import os\n", + "import time\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.metrics import (\n", - " accuracy_score, \n", - " confusion_matrix, \n", - " classification_report, \n", - " roc_auc_score,\n", + " accuracy_score, confusion_matrix, classification_report, \n", + " roc_auc_score, roc_curve, auc\n", ")\n", "from sklearn.metrics import ConfusionMatrixDisplay, RocCurveDisplay\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.compose import ColumnTransformer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.impute import SimpleImputer\n", - "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelEncoder\n", "from sklearn.feature_selection import SelectPercentile, chi2\n", "\n", "pd.set_option('display.float', '{:.2f}'.format)\n", @@ -90,7 +100,7 @@ }, { "cell_type": "markdown", - "id": "2c80b367", + "id": "5b9edb3f", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store" @@ -99,7 +109,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5b5e80d7", + "id": "4a36d859", "metadata": {}, "outputs": [], "source": [ @@ -112,7 +122,7 @@ }, { "cell_type": "markdown", - "id": "bb9ddbce", + "id": "9dde0a81", "metadata": { "papermill": { "duration": 0.158827, @@ -130,7 +140,7 @@ { "cell_type": "code", "execution_count": null, - "id": "092ad164", + "id": "bec1a57b", "metadata": {}, "outputs": [], "source": [ @@ -149,22 +159,19 @@ { "cell_type": "code", "execution_count": null, - "id": "3c8d1156", + "id": "fc541a8a", "metadata": {}, "outputs": [], "source": [ "# Select features for training dataset\n", - "selected_features = fg_loans.select_except([\"id\", \"issue_d\"]).join(\\\n", - " fg_applicants.select_except([\"earliest_cr_line\", \"earliest_cr_line_year\", \"id\"]))\n", - "\n", - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "query = fg_loans.select_except([\"id\", \"issue_d\"]).join(\\\n", + " fg_applicants.select_except([\"earliest_cr_line\", \"earliest_cr_line_year\", \"id\"]))" ] }, { "cell_type": "code", "execution_count": null, - "id": "a87c1044", + "id": "26d001a5", "metadata": {}, "outputs": [], "source": [ @@ -173,14 +180,14 @@ " version=1,\n", " description=\"Loan applicant data\",\n", " labels=[\"loan_status\"],\n", - " query=selected_features,\n", + " query=query,\n", ")" ] }, { "cell_type": "code", "execution_count": null, - "id": "67c8efea", + "id": "18ae1976", "metadata": {}, "outputs": [], "source": [ @@ -192,7 +199,7 @@ { "cell_type": "code", "execution_count": null, - "id": "11bff38d", + "id": "c741e55c", "metadata": {}, "outputs": [], "source": [ @@ -202,7 +209,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2eb40a8a", + "id": "14822496", "metadata": {}, "outputs": [], "source": [ @@ -211,7 +218,7 @@ }, { "cell_type": "markdown", - "id": "fa1add94", + "id": "0b156600", "metadata": {}, "source": [ "## ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ”ฌ Feature Transformation\n" @@ -220,7 +227,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8de9ec25", + "id": "a0ffed41", "metadata": {}, "outputs": [], "source": [ @@ -249,7 +256,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8e162d58", + "id": "2319b999", "metadata": {}, "outputs": [], "source": [ @@ -276,7 +283,7 @@ "# and categorical features are processed by the categorical_transformer\n", "preprocessor = ColumnTransformer(\n", " transformers=[\n", - " (\"num\", numeric_transformer, numeric_features), # Apply numeric transformer to numeric features\n", + " (\"num\", numeric_transformer, numeric_features), # Apply numeric transformer to numeric features\n", " (\"cat\", categorical_transformer, categorical_features), # Apply categorical transformer to categorical features\n", " ]\n", ")" @@ -285,7 +292,7 @@ { "cell_type": "code", "execution_count": null, - "id": "01aab79e", + "id": "3c83f66d", "metadata": {}, "outputs": [], "source": [ @@ -299,7 +306,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9f369b4c", + "id": "eeaa534d", "metadata": {}, "outputs": [], "source": [ @@ -308,7 +315,7 @@ }, { "cell_type": "markdown", - "id": "cdba44c9", + "id": "64ddcb0d", "metadata": { "papermill": { "duration": 0.162943, @@ -326,8 +333,14 @@ { "cell_type": "code", "execution_count": null, - "id": "f4a7ab73", + "id": "47a8291a", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:13:13.702918Z", + "iopub.status.busy": "2023-01-31T14:13:13.702551Z", + "iopub.status.idle": "2023-01-31T14:13:13.709718Z", + "shell.execute_reply": "2023-01-31T14:13:13.708705Z" + }, "papermill": { "duration": 0.176326, "end_time": "2023-01-31T14:13:13.711748", @@ -362,7 +375,7 @@ { "cell_type": "code", "execution_count": null, - "id": "14760c12", + "id": "9af753fe", "metadata": {}, "outputs": [], "source": [ @@ -381,7 +394,7 @@ { "cell_type": "code", "execution_count": null, - "id": "30b316e7", + "id": "558157e2", "metadata": {}, "outputs": [], "source": [ @@ -401,8 +414,14 @@ { "cell_type": "code", "execution_count": null, - "id": "5924aa50", + "id": "0221c340", "metadata": { + "execution": { + "iopub.execute_input": "2023-01-31T14:32:39.229358Z", + "iopub.status.busy": "2023-01-31T14:32:39.229002Z", + "iopub.status.idle": "2023-01-31T14:32:40.630885Z", + "shell.execute_reply": "2023-01-31T14:32:40.629547Z" + }, "papermill": { "duration": 2.472623, "end_time": "2023-01-31T14:32:40.633694", @@ -433,7 +452,7 @@ }, { "cell_type": "markdown", - "id": "70923c22", + "id": "d2d59196", "metadata": {}, "source": [ "## ๐Ÿ—„๏ธ Register the Model with Model Registry\n" @@ -442,7 +461,7 @@ { "cell_type": "code", "execution_count": null, - "id": "61da403f", + "id": "f6abb6d9", "metadata": { "papermill": { "duration": 1.025564, @@ -462,7 +481,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cc22005a", + "id": "c980e883", "metadata": {}, "outputs": [], "source": [ @@ -482,7 +501,7 @@ }, { "cell_type": "markdown", - "id": "647102d1", + "id": "b5147669", "metadata": {}, "source": [ "### โš™๏ธ Model Schema\n", @@ -495,7 +514,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20d2d6db", + "id": "f6fffe5e", "metadata": {}, "outputs": [], "source": [ @@ -517,7 +536,7 @@ }, { "cell_type": "markdown", - "id": "bbb513ea", + "id": "b35d0d26", "metadata": {}, "source": [ "## ๐Ÿ“ Register model\n", @@ -528,7 +547,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a18cb44c", + "id": "9c1bee22", "metadata": {}, "outputs": [], "source": [ @@ -546,7 +565,7 @@ }, { "cell_type": "markdown", - "id": "604caaa4", + "id": "a8689024", "metadata": {}, "source": [ "---\n", @@ -558,7 +577,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -572,7 +591,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" }, "papermill": { "default_parameters": {}, diff --git a/loan_approval/3-loan-approval-batch-inference.ipynb b/loan_approval/3-loan-approval-batch-inference.ipynb index 8ad00268..97f1da9b 100644 --- a/loan_approval/3-loan-approval-batch-inference.ipynb +++ b/loan_approval/3-loan-approval-batch-inference.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "3795581f", + "id": "384b4632", "metadata": {}, "source": [ "## ๐Ÿš€ Batch Inference Pipeline\n", @@ -17,7 +17,7 @@ }, { "cell_type": "markdown", - "id": "d5c48a06", + "id": "19c44be4", "metadata": {}, "source": [ "## ๐Ÿ“ Imports \n" @@ -26,7 +26,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6677341a", + "id": "b3a6fa29", "metadata": {}, "outputs": [], "source": [ @@ -36,7 +36,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28f7509e", + "id": "8efc53a7", "metadata": {}, "outputs": [], "source": [ @@ -53,22 +53,22 @@ { "cell_type": "code", "execution_count": null, - "id": "76b5901d", + "id": "c61e3adc", "metadata": {}, "outputs": [], "source": [ "# Define version numbers for feature view and model\n", - "FV_VERSION = 1\n", - "MODEL_VERSION = 1\n", + "fv_version = 1\n", + "model_version = 1\n", "\n", "# Define start and end times for the data\n", - "START_TIME_DATA = \"2016-11-01\"\n", - "END_TIME_DATA = \"2016-12-01\"" + "start_time_data = \"2016-11-01\"\n", + "end_time_data = \"2016-12-01\"" ] }, { "cell_type": "markdown", - "id": "c6ebb07e", + "id": "70fe09ca", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Connect to Hopsworks Feature Store" @@ -77,7 +77,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ec202adb", + "id": "7f8cd469", "metadata": {}, "outputs": [], "source": [ @@ -90,7 +90,7 @@ }, { "cell_type": "markdown", - "id": "c35f50e8", + "id": "b66df4b2", "metadata": {}, "source": [ "## โš™๏ธ Feature View Retrieval\n" @@ -99,20 +99,20 @@ { "cell_type": "code", "execution_count": null, - "id": "fde529ba", + "id": "34d8e82a", "metadata": {}, "outputs": [], "source": [ "# Get the 'loans_approvals' feature view\n", "feature_view = fs.get_feature_view(\n", " name=\"loans_approvals\", \n", - " version=FV_VERSION,\n", + " version=fv_version,\n", ")" ] }, { "cell_type": "markdown", - "id": "871fb3e6", + "id": "0890a082", "metadata": {}, "source": [ "## ๐Ÿ—„ Model Registry\n" @@ -121,7 +121,7 @@ { "cell_type": "code", "execution_count": null, - "id": "629006f7", + "id": "f8194512", "metadata": {}, "outputs": [], "source": [ @@ -131,7 +131,7 @@ }, { "cell_type": "markdown", - "id": "e33a656a", + "id": "d251a56a", "metadata": {}, "source": [ "## ๐Ÿš€ Fetch and test the model" @@ -140,14 +140,14 @@ { "cell_type": "code", "execution_count": null, - "id": "296b3056", + "id": "c435cd7c", "metadata": {}, "outputs": [], "source": [ "# Retrieve the model from the Model Registry using the name \"lending_model\" and specified version\n", "model = mr.get_model(\n", " \"lending_model\",\n", - " version=MODEL_VERSION,\n", + " version=model_version,\n", ")\n", "\n", "# Download the model directory from the Model Registry\n", @@ -159,7 +159,7 @@ }, { "cell_type": "markdown", - "id": "a4d09d2a", + "id": "814f9bfd", "metadata": {}, "source": [ "## ๐Ÿ”ฎ Batch Prediction " @@ -168,7 +168,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6ff15884", + "id": "cc915814", "metadata": {}, "outputs": [], "source": [ @@ -177,8 +177,8 @@ "\n", "# Get batch data for a specified time range from start_time_data to end_time_data\n", "batch_data = feature_view.get_batch_data(\n", - " start_time=START_TIME_DATA,\n", - " end_time=END_TIME_DATA,\n", + " start_time=start_time_data,\n", + " end_time=end_time_data,\n", ")\n", "\n", "# Display the first three rows of the batch data\n", @@ -188,7 +188,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0fa57b92", + "id": "37127def", "metadata": {}, "outputs": [], "source": [ @@ -201,7 +201,7 @@ }, { "cell_type": "markdown", - "id": "734918f3", + "id": "faf04cb0", "metadata": {}, "source": [ "---\n", @@ -217,7 +217,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -231,7 +231,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.9.18" }, "papermill": { "default_parameters": {}, diff --git a/quickstart.ipynb b/quickstart.ipynb index dd97f88a..0bba9504 100644 --- a/quickstart.ipynb +++ b/quickstart.ipynb @@ -156,7 +156,7 @@ "age_df = trans_df.merge(profiles_df, on=\"cc_num\", how=\"left\")\n", "\n", "# Compute the age at the time of each transaction and store it in the 'age_at_transaction' column\n", - "trans_df[\"age_at_transaction\"] = (age_df[\"datetime\"] - age_df[\"birthdate\"]) / np.timedelta64(365, \"D\")\n", + "trans_df[\"age_at_transaction\"] = (age_df[\"datetime\"] - age_df[\"birthdate\"]) / np.timedelta64(1, \"Y\")\n", "\n", "# Merge the 'trans_df' DataFrame with the 'credit_cards_df' DataFrame based on the 'cc_num' column\n", "card_expiry_df = trans_df.merge(credit_cards_df, on=\"cc_num\", how=\"left\")\n", @@ -258,7 +258,7 @@ "df_4h_mavg = df_4h_mavg.sort_index()\n", "\n", "# Moving standard deviation of transaction volume.\n", - "df_4h_std = pd.DataFrame(cc_group.std())\n", + "df_4h_std = pd.DataFrame(cc_group.mean())\n", "df_4h_std.columns = [\"trans_volume_mstd\", \"datetime\"]\n", "df_4h_std = df_4h_std.reset_index(level=[\"cc_num\"])\n", "df_4h_std = df_4h_std.drop(columns=[\"cc_num\", \"datetime\"])\n", @@ -266,8 +266,8 @@ "df_4h_std = df_4h_std.sort_index()\n", "window_aggs_df = df_4h_std.merge(df_4h_mavg, left_index=True, right_index=True)\n", "\n", - "# Moving transaction frequency.\n", - "df_4h_count = pd.DataFrame(cc_group.count())\n", + "# Moving average of transaction frequency.\n", + "df_4h_count = pd.DataFrame(cc_group.mean())\n", "df_4h_count.columns = [\"trans_freq\", \"datetime\"]\n", "df_4h_count = df_4h_count.reset_index(level=[\"cc_num\"])\n", "df_4h_count = df_4h_count.drop(columns=[\"cc_num\", \"datetime\"])\n", @@ -429,7 +429,10 @@ "outputs": [], "source": [ "# Insert data into feature group\n", - "window_aggs_fg.insert(window_aggs_df)" + "window_aggs_fg.insert(\n", + " window_aggs_df, \n", + " write_options={\"wait_for_job\": True},\n", + ")" ] }, { @@ -476,8 +479,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Select features for training data\n", - "selected_features = trans_fg.select([\"fraud_label\", \"category\", \"amount\", \"age_at_transaction\", \"days_until_card_expires\", \"loc_delta\"])\\\n", + "# Select features for training data.\n", + "query = trans_fg.select([\"fraud_label\", \"category\", \"amount\", \"age_at_transaction\", \"days_until_card_expires\", \"loc_delta\"])\\\n", " .join(window_aggs_fg.select_except([\"cc_num\"]))" ] }, @@ -487,8 +490,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Uncomment this if you would like to view your selected features\n", - "# selected_features.show(5)" + "## uncomment this if you would like to view query results\n", + "#query.show(5)" ] }, { @@ -556,7 +559,7 @@ "feature_view = fs.get_or_create_feature_view(\n", " name='transactions_view',\n", " version=1,\n", - " query=selected_features,\n", + " query=query,\n", " labels=[\"fraud_label\"],\n", " transformation_functions=transformation_functions,\n", ")" diff --git a/scripts/cleanup-tutorials.ipynb b/scripts/cleanup-tutorials.ipynb index 805c040e..c0272338 100644 --- a/scripts/cleanup-tutorials.ipynb +++ b/scripts/cleanup-tutorials.ipynb @@ -233,6 +233,52 @@ " print(f\"Couldn't delete {fg} FG\")" ] }, + { + "cell_type": "markdown", + "id": "b10b786c", + "metadata": {}, + "source": [ + "## Cleanup Citibike" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eec9cdda", + "metadata": {}, + "outputs": [], + "source": [ + " \n", + "# Delete a model\n", + "models=[\"citibike_xgb_model\"]\n", + "for model in models:\n", + " try:\n", + " model = mr.get_model(f\"{model}\", version=1)\n", + " model.delete()\n", + " except:\n", + " print(f\"Couldn't delete {model} model\")\n", + "\n", + "# Delete the feature_views before the feature groups\n", + "\n", + "fvs=[\"citibike_fv\"]\n", + "\n", + "for fv in fvs:\n", + " try:\n", + " feature_view = fs.get_feature_view(name=f\"{fv}\", version=1)\n", + " feature_view.delete()\n", + " except:\n", + " print(f\"Couldn't delete {fv} feature view\")\n", + "\n", + "fgs=[\"citibike_usage\", \"citibike_stations_info\", \"us_holidays\", \"meteorological_measurements\"]\n", + "\n", + "for fg in fgs:\n", + " try:\n", + " fg = fs.get_feature_group(name=f\"{fg}\", version=1)\n", + " fg.delete()\n", + " except:\n", + " print(f\"Couldn't delete {fg} FG\")" + ] + }, { "cell_type": "markdown", "id": "5c68d708", diff --git a/scripts/test-notebooks.sh b/scripts/test-notebooks.sh index 99e544ea..1a5d1e98 100755 --- a/scripts/test-notebooks.sh +++ b/scripts/test-notebooks.sh @@ -6,6 +6,7 @@ set -e jupyter nbconvert --to notebook --execute scripts/cleanup-tutorials.ipynb # Loan Approval +jupyter nbconvert --to notebook --execute loan_approval/0-loan-approval-eda.ipynb jupyter nbconvert --to notebook --execute loan_approval/1-loan-approval-feature-pipeline.ipynb jupyter nbconvert --to notebook --execute loan_approval/2-loan-approval-training-pipeline.ipynb jupyter nbconvert --to notebook --execute loan_approval/3-loan-approval-batch-inference.ipynb @@ -31,11 +32,9 @@ jupyter nbconvert --to notebook --execute churn/1_churn_feature_pipeline.ipynb jupyter nbconvert --to notebook --execute churn/2_churn_training_pipeline.ipynb jupyter nbconvert --to notebook --execute churn/3_churn_batch_inference.ipynb -# Remove any FGs, FVs, Models, Deployments -jupyter nbconvert --to notebook --execute scripts/cleanup-tutorials.ipynb - # Great Expectations jupyter nbconvert --to notebook --execute integrations/great_expectations/Great_Expectations_Hopsworks_Concepts.ipynb +jupyter nbconvert --to notebook --execute integrations/great_expectations/fraud_batch_data_validation.ipynb # Remove any FGs, FVs, Models, Deployments jupyter nbconvert --to notebook --execute scripts/cleanup-tutorials.ipynb @@ -43,6 +42,15 @@ jupyter nbconvert --to notebook --execute scripts/cleanup-tutorials.ipynb # Advanced Tutorials cd advanced_tutorials +# Citibike +jupyter nbconvert --to notebook --execute citibike/1_citibike_feature_backfill.ipynb +jupyter nbconvert --to notebook --execute citibike/2_citibike_feature_pipeline.ipynb +jupyter nbconvert --to notebook --execute citibike/3_citibike_training_pipeline.ipynb +jupyter nbconvert --to notebook --execute citibike/4_citibike_batch_inference.ipynb + +# Remove any FGs, FVs, Models, Deployments +jupyter nbconvert --to notebook --execute ../scripts/cleanup-tutorials.ipynb + # Credit Scores jupyter nbconvert --to notebook --execute credit_scores/1_credit_scores_feature_backfill.ipynb jupyter nbconvert --to notebook --execute credit_scores/2_credit_scores_feature_pipeline.ipynb @@ -52,21 +60,18 @@ jupyter nbconvert --to notebook --execute credit_scores/4_credit_scores_batch_in # Remove any FGs, FVs, Models, Deployments jupyter nbconvert --to notebook --execute ../scripts/cleanup-tutorials.ipynb -# Nyc Taxi Fares -jupyter nbconvert --to notebook --execute nyc_taxi_fares/1_nyc_taxi_fares_feature_backfill.ipynb -jupyter nbconvert --to notebook --execute nyc_taxi_fares/2_nyc_taxi_fares_feature_pipeline.ipynb -jupyter nbconvert --to notebook --execute nyc_taxi_fares/3_nyc_taxi_fares_training_pipeline.ipynb -jupyter nbconvert --to notebook --execute nyc_taxi_fares/4_nyc_taxi_fares_batch_inference.ipynb - -# Remove any FGs, FVs, Models, Deployments -jupyter nbconvert --to notebook --execute ../scripts/cleanup-tutorials.ipynb - # Electricity jupyter nbconvert --to notebook --execute electricity/1_electricity_feature_backfill.ipynb jupyter nbconvert --to notebook --execute electricity/2_electricity_feature_pipeline.ipynb jupyter nbconvert --to notebook --execute electricity/3_electricity_training_pipeline.ipynb jupyter nbconvert --to notebook --execute electricity/4_electricity_batch_inference.ipynb +# Nyc Taxi Fares +jupyter nbconvert --to notebook --execute nyc_taxi_fares/1_nyc_taxi_fares_feature_backfill.ipynb +jupyter nbconvert --to notebook --execute nyc_taxi_fares/2_nyc_taxi_fares_feature_pipeline.ipynb +jupyter nbconvert --to notebook --execute nyc_taxi_fares/3_nyc_taxi_fares_training_pipeline.ipynb +jupyter nbconvert --to notebook --execute nyc_taxi_fares/4_nyc_taxi_fares_batch_inference.ipynb + # Remove any FGs, FVs, Models, Deployments jupyter nbconvert --to notebook --execute ../scripts/cleanup-tutorials.ipynb