{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "![title](https://media.licdn.com/dms/image/C4D1BAQHrb5OViIi3QQ/company-background_10000/0?e=2159024400&v=beta&t=s-4EEblC_aodYcO6vS-i7KiAPk4YN5WKWEYA91DDQrw)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#
Connaître l'offre gastronomique et touristique de la ville de Lyon: un cas pratique de Data Intelligence et Machine Learning pour l'analyse des comportements sociaux avec Google Maps
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Roque Leal
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A cette occasion, nous allons effectuer une étude exploratoire des données Google Maps associées à la ville de Lyon, pour cela nous utiliserons l'extraction de données dans Google Maps pour découvrir des données utiles sur les restaurants ou leurs attractions touristiques: noms, types entreprise, nombre d'étoiles, coordonnées, heures les plus fréquentées, etc.\n", "\n", "Toutes ces données peuvent être utilisées pour obtenir beaucoup de connaissances sur l'entreprise / l'emplacement et ses environs, pour cela, nous commençons cette promenade avec quelque chose du plus typique de Lyon: sa gastronomie et ses attractions touristiques pour découvrir des Geoinsights intéressants des restaurants, améliorer la l'expérience client, connaître leur comportement et répondre à notre curiosité pour savoir le mieux que la ville nous offre de manière intelligente avec BigData et Data Science." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bibliothèques Python" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from selenium import webdriver\n", "from selenium.webdriver.common.by import By\n", "from selenium.webdriver.support.ui import WebDriverWait\n", "from selenium.webdriver.support import expected_conditions as EC\n", "from selenium.webdriver.common.keys import Keys\n", "from selenium.common.exceptions import NoSuchElementException, TimeoutException, ElementNotInteractableException, ElementClickInterceptedException\n", "from tqdm import tqdm_notebook as tqdmn\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import folium\n", "import time, re" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nous extrayons les données pour les analyser" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "resto = pd.read_csv('lyon_resto.csv')" ] }, { "cell_type": "code", "execution_count": 11, "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", "
full_nameratingtotal_ratingsbusiness_categoryprice_rangeaddressphonewebsitereview_topicshourslatitudelongitude
0Canaima Restaurant5.0(40)RestaurantNaNQR9M+WP Lyon, FranceNaN+33 9 87 05 87 25['cuisine\\n11', 'service\\n3'][]45.7698694.834309
1Tipico - Restaurant & Épicerie Conviviale5.0(62)Italian restaurantNaNQR9H+7J Lyon, FranceNaN+33 4 72 02 29 91['entrees\\n4', 'wine\\n4', 'patterns\\n3', 'hear...['% busy at .', '% busy at .', '0% busy at 6 A...45.7681484.829084
2POP KORNER4.9(90)RestaurantNaNQRCM+FJ Lyon, FranceNaN+33 4 69 84 55 76['concept\\n18', 'cinema\\n14', 'room\\n8', 'blin...['% busy at .', '% busy at .', '% busy at .', ...45.7711304.834113
3L'Atelier des Augustins4.7(275)French restaurant$$QR9J+39 Lyon, FranceNaN+33 4 72 00 88 01['surprise\\n38', 'wine\\n37', 'chef\\n22', 'food...[]45.7677394.830911
4BEL AMI4.7(155)RestaurantNaNQR9J+F3 Lyon, FranceNaNNaN['tapas\\n25', 'cuisine\\n14', 'wine list\\n10', ...['% busy at .', '% busy at .', '0% busy at 6 A...45.7686994.830235
\n", "
" ], "text/plain": [ " full_name rating total_ratings \\\n", "0 Canaima Restaurant 5.0 (40) \n", "1 Tipico - Restaurant & Épicerie Conviviale 5.0 (62) \n", "2 POP KORNER 4.9 (90) \n", "3 L'Atelier des Augustins 4.7 (275) \n", "4 BEL AMI 4.7 (155) \n", "\n", " business_category price_range address phone \\\n", "0 Restaurant NaN QR9M+WP Lyon, France NaN \n", "1 Italian restaurant NaN QR9H+7J Lyon, France NaN \n", "2 Restaurant NaN QRCM+FJ Lyon, France NaN \n", "3 French restaurant $$ QR9J+39 Lyon, France NaN \n", "4 Restaurant NaN QR9J+F3 Lyon, France NaN \n", "\n", " website review_topics \\\n", "0 +33 9 87 05 87 25 ['cuisine\\n11', 'service\\n3'] \n", "1 +33 4 72 02 29 91 ['entrees\\n4', 'wine\\n4', 'patterns\\n3', 'hear... \n", "2 +33 4 69 84 55 76 ['concept\\n18', 'cinema\\n14', 'room\\n8', 'blin... \n", "3 +33 4 72 00 88 01 ['surprise\\n38', 'wine\\n37', 'chef\\n22', 'food... \n", "4 NaN ['tapas\\n25', 'cuisine\\n14', 'wine list\\n10', ... \n", "\n", " hours latitude longitude \n", "0 [] 45.769869 4.834309 \n", "1 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768148 4.829084 \n", "2 ['% busy at .', '% busy at .', '% busy at .', ... 45.771130 4.834113 \n", "3 [] 45.767739 4.830911 \n", "4 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768699 4.830235 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(199, 12)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cette technique de Geo Datamining nous permet d'extraire les données de 199 restaurants de la ville de Lyon" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "resto.total_ratings = resto.total_ratings.replace('(\\(|\\)|,)', '', regex=True)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "resto.total_ratings = resto.total_ratings.astype(float)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Restaurant 73\n", "French restaurant 41\n", "Lebanese restaurant 6\n", "Haute French restaurant 5\n", "Fast food restaurant 4\n", "Italian restaurant 4\n", "Japanese restaurant 4\n", "Pizza restaurant 3\n", "Mexican restaurant 3\n", "Brasserie 2\n", "American restaurant 2\n", "Asian restaurant 2\n", "Vegan restaurant 2\n", "Bar 2\n", "Down home cooking restaurant 2\n", "Indian restaurant 2\n", "Modern French restaurant 2\n", "Vegetarian restaurant 2\n", "Moroccan restaurant 2\n", "Hamburger restaurant 2\n", "Seafood restaurant 1\n", "Hot pot restaurant 1\n", "Pizza takeaway 1\n", "Alsace restaurant 1\n", "Fine dining restaurant 1\n", "Tapas bar 1\n", "Korean restaurant 1\n", "African restaurant 1\n", "Fondue restaurant 1\n", "Eastern European restaurant 1\n", "Conveyor belt sushi restaurant 1\n", "Pub 1\n", "Wine store 1\n", "Cambodian restaurant 1\n", "Indonesian restaurant 1\n", "Vietnamese restaurant 1\n", "Wine bar 1\n", "Sandwich shop 1\n", "Juice shop 1\n", "Ice cream shop 1\n", "Soup restaurant 1\n", "Self service restaurant 1\n", "Thai restaurant 1\n", "Beer hall 1\n", "中餐馆 1\n", "Canadian restaurant 1\n", "Cheese shop 1\n", "Ramen restaurant 1\n", "Sushi restaurant 1\n", "Brewery 1\n", "Syrian restaurant 1\n", "Name: business_category, dtype: int64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto.business_category.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous voulons conserver uniquement les établissements qui sont des steakhouses, des bars et des grillades ou des restaurants ayant le nom «steak» ou «grill» dans leurs noms. Appelons ce nouveau dataframe SBR (pour les Steakhouses, les Bar & Grills et les Restaurants):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nous localiserons notre échantillon de 199 restaurants à Lyon" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tileset = r'https://api.mapbox.com/styles/v1/roqueleal08/cjyaey84d07zq1crze5r08yg1/tiles/256/{z}/{x}/{y}@2x?access_token=pk.APIMAPBOX'\n", "attribution = (r'Map data © OpenStreetMap'\n", " ' contributors, Imagery © MapBox')\n", "gdl_center = [45.756146,4.835014]\n", "resto_map = folium.Map(location=gdl_center, zoom_start=12.5, tiles=tileset, attr=attribution)\n", "\n", "for latitude, longitude, full_name, address, phone, website, rating, total_rating in zip(resto.latitude, resto.longitude, resto.full_name, resto.address, resto.phone, resto.website, resto.rating, resto.total_ratings):\n", " popup = '' + str(full_name) + '
  • Rating: ' + str(rating) + ' (Total of ' + str(total_rating) + ' reviews)'\n", " folium.Marker( [latitude, longitude], \n", " icon=folium.CustomIcon( icon_image='https://www.pinclipart.com/picdir/big/46-460577_maps-vector-graphic-google-maps-icon-android-clipart.png', icon_size=(15,15) ), popup=popup).add_to(resto_map)\n", "resto_map" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "from folium.plugins import HeatMap\n", "resto_rating = resto[resto.total_ratings>400].copy()\n", "resto_rating['count'] = 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nous faisons un Heatmap avec les restaurants avec le meilleur score de reviews de la ville" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
    " ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HeatMap(data=resto_rating[['latitude', 'longitude', 'count']].groupby(['latitude', 'longitude']).sum().reset_index().values.tolist(), radius=20, max_zoom=17).add_to(resto_map)\n", "resto_map" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "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", "
    full_nameratingtotal_ratingsbusiness_categoryprice_rangeaddressphonewebsitereview_topicshourslatitudelongitudecount
    25YAAFA4.4987.0Fast food restaurantNaNNaNyaafa.frQR9J+2M Lyon, France['delivery\\n4', 'falafel\\n174', 'corn\\n29', 'r...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7675784.8317311
    15Le Bouchon des Filles4.4789.0Restaurant$$QR9H+FP Lyon, FranceNaN+33 4 78 30 40 44['food presentation\\n60', 'entree\\n50', 'lyonn...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7686734.8293601
    16Delicatessen4.6626.0Restaurant$$NaNfacebook.comQR9H+QV Lyon, France['concept\\n71', 'amateur\\n23', 'weight\\n17', '...['% busy at .', '0% busy at 6 AM.', '0% busy a...45.7694814.8296631
    5La Mère Brazier4.7574.0Restaurant$$$$QRCP+HV Lyon, FranceNaN+33 4 78 23 17 20['food presentation\\n66', 'corn\\n21', 'sommeli...[]45.7714434.8372131
    14La Tête De Lard4.4501.0Restaurant$$QR9P+86 Lyon, FranceNaN+33 4 78 27 96 80['bouchon\\n95', 'food presentation\\n23', 'entr...['% busy at .', '% busy at .', '0% busy at 6 A...45.7683694.8355121
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings business_category \\\n", "25 YAAFA 4.4 987.0 Fast food restaurant \n", "15 Le Bouchon des Filles 4.4 789.0 Restaurant \n", "16 Delicatessen 4.6 626.0 Restaurant \n", "5 La Mère Brazier 4.7 574.0 Restaurant \n", "14 La Tête De Lard 4.4 501.0 Restaurant \n", "\n", " price_range address phone website \\\n", "25 NaN NaN yaafa.fr QR9J+2M Lyon, France \n", "15 $$ QR9H+FP Lyon, France NaN +33 4 78 30 40 44 \n", "16 $$ NaN facebook.com QR9H+QV Lyon, France \n", "5 $$$$ QRCP+HV Lyon, France NaN +33 4 78 23 17 20 \n", "14 $$ QR9P+86 Lyon, France NaN +33 4 78 27 96 80 \n", "\n", " review_topics \\\n", "25 ['delivery\\n4', 'falafel\\n174', 'corn\\n29', 'r... \n", "15 ['food presentation\\n60', 'entree\\n50', 'lyonn... \n", "16 ['concept\\n71', 'amateur\\n23', 'weight\\n17', '... \n", "5 ['food presentation\\n66', 'corn\\n21', 'sommeli... \n", "14 ['bouchon\\n95', 'food presentation\\n23', 'entr... \n", "\n", " hours latitude longitude \\\n", "25 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.767578 4.831731 \n", "15 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.768673 4.829360 \n", "16 ['% busy at .', '0% busy at 6 AM.', '0% busy a... 45.769481 4.829663 \n", "5 [] 45.771443 4.837213 \n", "14 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768369 4.835512 \n", "\n", " count \n", "25 1 \n", "15 1 \n", "16 1 \n", "5 1 \n", "14 1 " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto_rating.head().sort_values(by='total_ratings', ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Maintenant, nous identifions les restaurants qui remplissent la condition d'être des restaurants de cuisine traditionnelle de haute qualité avec une bonne gamme de cocktails" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ici, nous voyons les restaurants qui remplissent les conditions décrites en fonction du sujet de leurs avis, cela fait référence aux mots clés que les utilisateurs ont reconnus et attribués à leurs \"reviews\". Avec ces données, nous choisissons les restaurants qui remplissent la condition de \"traditionnel\", \"cocktail\" et \"présentation\" pour attribuer une valeur à chaque restaurant et obtenir un score en fonction de ces conditions." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "traditional = []\n", "for i in resto.review_topics :\n", " traditional.append(re.findall('\\d+|$', re.findall('traditional......|$', i)[0])[0] )\n", "\n", "resto['traditional'] = traditional\n", "\n", "cocktail = []\n", "for i in resto.review_topics :\n", " cocktail.append(re.findall('\\d+|$', re.findall('cocktail......|$', i)[0])[0] )\n", "\n", "resto['cocktail'] = cocktail\n", "\n", "presentation = []\n", "for i in resto.review_topics :\n", " presentation.append(re.findall('\\d+|$', re.findall('presentation......|$', i)[0])[0] )\n", "\n", "resto['presentation'] = presentation" ] }, { "cell_type": "code", "execution_count": 29, "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", "
    full_nameratingtotal_ratingsbusiness_categoryprice_rangeaddressphonewebsitereview_topicshourslatitudelongitudetraditionalcocktailpresentation
    0Canaima Restaurant5.040.0RestaurantNaNQR9M+WP Lyon, FranceNaN+33 9 87 05 87 25['cuisine\\n11', 'service\\n3'][]45.7698694.834309
    1Tipico - Restaurant & Épicerie Conviviale5.062.0Italian restaurantNaNQR9H+7J Lyon, FranceNaN+33 4 72 02 29 91['entrees\\n4', 'wine\\n4', 'patterns\\n3', 'hear...['% busy at .', '% busy at .', '0% busy at 6 A...45.7681484.829084
    2POP KORNER4.990.0RestaurantNaNQRCM+FJ Lyon, FranceNaN+33 4 69 84 55 76['concept\\n18', 'cinema\\n14', 'room\\n8', 'blin...['% busy at .', '% busy at .', '% busy at .', ...45.7711304.8341136
    3L'Atelier des Augustins4.7275.0French restaurant$$QR9J+39 Lyon, FranceNaN+33 4 72 00 88 01['surprise\\n38', 'wine\\n37', 'chef\\n22', 'food...[]45.7677394.83091120
    4BEL AMI4.7155.0RestaurantNaNQR9J+F3 Lyon, FranceNaNNaN['tapas\\n25', 'cuisine\\n14', 'wine list\\n10', ...['% busy at .', '% busy at .', '0% busy at 6 A...45.7686994.830235
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings \\\n", "0 Canaima Restaurant 5.0 40.0 \n", "1 Tipico - Restaurant & Épicerie Conviviale 5.0 62.0 \n", "2 POP KORNER 4.9 90.0 \n", "3 L'Atelier des Augustins 4.7 275.0 \n", "4 BEL AMI 4.7 155.0 \n", "\n", " business_category price_range address phone \\\n", "0 Restaurant NaN QR9M+WP Lyon, France NaN \n", "1 Italian restaurant NaN QR9H+7J Lyon, France NaN \n", "2 Restaurant NaN QRCM+FJ Lyon, France NaN \n", "3 French restaurant $$ QR9J+39 Lyon, France NaN \n", "4 Restaurant NaN QR9J+F3 Lyon, France NaN \n", "\n", " website review_topics \\\n", "0 +33 9 87 05 87 25 ['cuisine\\n11', 'service\\n3'] \n", "1 +33 4 72 02 29 91 ['entrees\\n4', 'wine\\n4', 'patterns\\n3', 'hear... \n", "2 +33 4 69 84 55 76 ['concept\\n18', 'cinema\\n14', 'room\\n8', 'blin... \n", "3 +33 4 72 00 88 01 ['surprise\\n38', 'wine\\n37', 'chef\\n22', 'food... \n", "4 NaN ['tapas\\n25', 'cuisine\\n14', 'wine list\\n10', ... \n", "\n", " hours latitude longitude \\\n", "0 [] 45.769869 4.834309 \n", "1 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768148 4.829084 \n", "2 ['% busy at .', '% busy at .', '% busy at .', ... 45.771130 4.834113 \n", "3 [] 45.767739 4.830911 \n", "4 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768699 4.830235 \n", "\n", " traditional cocktail presentation \n", "0 \n", "1 \n", "2 6 \n", "3 20 \n", "4 " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto.head()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "resto.traditional = resto.traditional.replace('', 0)\n", "resto.cocktail = resto.cocktail.replace('', 0)\n", "resto.presentation = resto.presentation.replace('', 0)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "resto.traditional = resto.traditional.astype(int)\n", "resto.cocktail = resto.cocktail.astype(int)\n", "resto.presentation = resto.presentation.astype(int)" ] }, { "cell_type": "code", "execution_count": 36, "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", "
    full_nameratingtotal_ratingsbusiness_categoryprice_rangeaddressphonewebsitereview_topicshourslatitudelongitudetraditionalcocktailpresentation
    0Canaima Restaurant5.040.0RestaurantNaNQR9M+WP Lyon, FranceNaN+33 9 87 05 87 25['cuisine\\n11', 'service\\n3'][]45.7698694.834309000
    1Tipico - Restaurant & Épicerie Conviviale5.062.0Italian restaurantNaNQR9H+7J Lyon, FranceNaN+33 4 72 02 29 91['entrees\\n4', 'wine\\n4', 'patterns\\n3', 'hear...['% busy at .', '% busy at .', '0% busy at 6 A...45.7681484.829084000
    2POP KORNER4.990.0RestaurantNaNQRCM+FJ Lyon, FranceNaN+33 4 69 84 55 76['concept\\n18', 'cinema\\n14', 'room\\n8', 'blin...['% busy at .', '% busy at .', '% busy at .', ...45.7711304.834113060
    3L'Atelier des Augustins4.7275.0French restaurant$$QR9J+39 Lyon, FranceNaN+33 4 72 00 88 01['surprise\\n38', 'wine\\n37', 'chef\\n22', 'food...[]45.7677394.8309110020
    4BEL AMI4.7155.0RestaurantNaNQR9J+F3 Lyon, FranceNaNNaN['tapas\\n25', 'cuisine\\n14', 'wine list\\n10', ...['% busy at .', '% busy at .', '0% busy at 6 A...45.7686994.830235000
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings \\\n", "0 Canaima Restaurant 5.0 40.0 \n", "1 Tipico - Restaurant & Épicerie Conviviale 5.0 62.0 \n", "2 POP KORNER 4.9 90.0 \n", "3 L'Atelier des Augustins 4.7 275.0 \n", "4 BEL AMI 4.7 155.0 \n", "\n", " business_category price_range address phone \\\n", "0 Restaurant NaN QR9M+WP Lyon, France NaN \n", "1 Italian restaurant NaN QR9H+7J Lyon, France NaN \n", "2 Restaurant NaN QRCM+FJ Lyon, France NaN \n", "3 French restaurant $$ QR9J+39 Lyon, France NaN \n", "4 Restaurant NaN QR9J+F3 Lyon, France NaN \n", "\n", " website review_topics \\\n", "0 +33 9 87 05 87 25 ['cuisine\\n11', 'service\\n3'] \n", "1 +33 4 72 02 29 91 ['entrees\\n4', 'wine\\n4', 'patterns\\n3', 'hear... \n", "2 +33 4 69 84 55 76 ['concept\\n18', 'cinema\\n14', 'room\\n8', 'blin... \n", "3 +33 4 72 00 88 01 ['surprise\\n38', 'wine\\n37', 'chef\\n22', 'food... \n", "4 NaN ['tapas\\n25', 'cuisine\\n14', 'wine list\\n10', ... \n", "\n", " hours latitude longitude \\\n", "0 [] 45.769869 4.834309 \n", "1 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768148 4.829084 \n", "2 ['% busy at .', '% busy at .', '% busy at .', ... 45.771130 4.834113 \n", "3 [] 45.767739 4.830911 \n", "4 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.768699 4.830235 \n", "\n", " traditional cocktail presentation \n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 6 0 \n", "3 0 0 20 \n", "4 0 0 0 " ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto.head()" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "resto['score'] = resto.traditional + resto.cocktail + resto.presentation" ] }, { "cell_type": "code", "execution_count": 38, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
    full_nameratingtotal_ratingsbusiness_categoryprice_rangeaddressphonewebsitereview_topicshourslatitudelongitudetraditionalcocktailpresentationscore
    31Maison Villemanzy4.4352.0French restaurant$$QRCP+M7 Lyon, FranceNaN+33 4 72 98 21 21['food presentation\\n41', 'terrace\\n26', 'visi...['% busy at .', '0% busy at 6 AM.', '0% busy a...45.7716664.835712504146
    152La Mère Jean4.4656.0French restaurant$$QR4M+WX Lyon, FranceNaN+33 4 78 37 81 27['bouchon\\n124', 'food presentation\\n31', 'lyo...['% busy at .', '0% busy at 6 AM.', '0% busy a...45.7572634.834922903140
    85Butcher4.4468.0Restaurant$$QR8J+5Q Lyon, FranceNaN+33 9 50 76 46 82['burger\\n52', 'corn\\n34', 'food presentation\\...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7654524.8319780192039
    135Copper Roots4.5103.0RestaurantNaNQRGP+PF Lyon, FranceNaN+33 4 72 07 64 30['cocktails\\n32', 'brunch\\n13', 'cuisine\\n11',...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7767584.836198032739
    101Bouchon Tupin4.8366.0French restaurant$$QR7M+5X Lyon, FranceNaN+33 4 78 37 45 93['food presentation\\n29', 'server\\n18', 'parfa...['% busy at .', '% busy at .', '0% busy at 6 A...45.7628784.834945802937
    50Mas amor por favor4.2186.0Restaurant$$NaNmasamorporfavor-lyon.comQR9J+X3 Lyon, France['brunch\\n27', 'cocktails\\n27', 'cuisine\\n14',...[]45.7699064.830210027532
    9Sabaï Sabaï4.7166.0Asian restaurant$$NaNsabaisabai.frQR9P+PM Lyon, France['tapas\\n31', 'food presentation\\n17', 'cockta...['% busy at .', '0% busy at 6 AM.', '0% busy a...45.7692594.8366680131730
    127Restaurant El Cafetero4.6200.0Restaurant$$QRCX+2P Lyon, FranceNaNNaN['food presentation\\n20', 'mojito\\n11', 'colom...[]45.7701154.849329062026
    78Le Passage4.4217.0Restaurant$$QR8M+9G Lyon, FranceNaN+33 4 78 28 11 16['cuisine\\n18', 'food presentation\\n14', 'cock...['% busy at .', '% busy at .', '0% busy at 6 A...45.7659994.833757091423
    28Hemingway's4.3235.0Restaurant$$NaNhemingways.frQRCP+5Q Lyon, France['cuisine\\n14', 'cocktails\\n13', 'server\\n12',...['% busy at .', '% busy at .', '0% busy at 6 A...45.7703904.836936013922
    144Le Bouchon des Berges4.5262.0Restaurant$$QR5R+PQ Lyon, FranceNaN+33 4 78 62 69 88['food presentation\\n16', 'server\\n12', 'entre...['% busy at .', '% busy at .', '0% busy at 6 A...45.7592654.841896501621
    95Le Ti'Punch de la Réunion4.3133.0Restaurant$$NaNletipunch.frQR8M+44 Lyon, France['server\\n10', 'cuisine of reunion island\\n9',...['% busy at .', '% busy at .', '0% busy at 6 A...45.7652684.83282107613
    79Le Casse Museau4.5140.0French restaurant$$QR8J+5X Lyon, FranceNaN+33 4 78 39 26 12['food presentation\\n7', 'chef\\n6', 'true more...['% busy at .', '% busy at .', '0% busy at 6 A...45.7654674.83243340711
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings business_category \\\n", "31 Maison Villemanzy 4.4 352.0 French restaurant \n", "152 La Mère Jean 4.4 656.0 French restaurant \n", "85 Butcher 4.4 468.0 Restaurant \n", "135 Copper Roots 4.5 103.0 Restaurant \n", "101 Bouchon Tupin 4.8 366.0 French restaurant \n", "50 Mas amor por favor 4.2 186.0 Restaurant \n", "9 Sabaï Sabaï 4.7 166.0 Asian restaurant \n", "127 Restaurant El Cafetero 4.6 200.0 Restaurant \n", "78 Le Passage 4.4 217.0 Restaurant \n", "28 Hemingway's 4.3 235.0 Restaurant \n", "144 Le Bouchon des Berges 4.5 262.0 Restaurant \n", "95 Le Ti'Punch de la Réunion 4.3 133.0 Restaurant \n", "79 Le Casse Museau 4.5 140.0 French restaurant \n", "\n", " price_range address phone \\\n", "31 $$ QRCP+M7 Lyon, France NaN \n", "152 $$ QR4M+WX Lyon, France NaN \n", "85 $$ QR8J+5Q Lyon, France NaN \n", "135 NaN QRGP+PF Lyon, France NaN \n", "101 $$ QR7M+5X Lyon, France NaN \n", "50 $$ NaN masamorporfavor-lyon.com \n", "9 $$ NaN sabaisabai.fr \n", "127 $$ QRCX+2P Lyon, France NaN \n", "78 $$ QR8M+9G Lyon, France NaN \n", "28 $$ NaN hemingways.fr \n", "144 $$ QR5R+PQ Lyon, France NaN \n", "95 $$ NaN letipunch.fr \n", "79 $$ QR8J+5X Lyon, France NaN \n", "\n", " website review_topics \\\n", "31 +33 4 72 98 21 21 ['food presentation\\n41', 'terrace\\n26', 'visi... \n", "152 +33 4 78 37 81 27 ['bouchon\\n124', 'food presentation\\n31', 'lyo... \n", "85 +33 9 50 76 46 82 ['burger\\n52', 'corn\\n34', 'food presentation\\... \n", "135 +33 4 72 07 64 30 ['cocktails\\n32', 'brunch\\n13', 'cuisine\\n11',... \n", "101 +33 4 78 37 45 93 ['food presentation\\n29', 'server\\n18', 'parfa... \n", "50 QR9J+X3 Lyon, France ['brunch\\n27', 'cocktails\\n27', 'cuisine\\n14',... \n", "9 QR9P+PM Lyon, France ['tapas\\n31', 'food presentation\\n17', 'cockta... \n", "127 NaN ['food presentation\\n20', 'mojito\\n11', 'colom... \n", "78 +33 4 78 28 11 16 ['cuisine\\n18', 'food presentation\\n14', 'cock... \n", "28 QRCP+5Q Lyon, France ['cuisine\\n14', 'cocktails\\n13', 'server\\n12',... \n", "144 +33 4 78 62 69 88 ['food presentation\\n16', 'server\\n12', 'entre... \n", "95 QR8M+44 Lyon, France ['server\\n10', 'cuisine of reunion island\\n9',... \n", "79 +33 4 78 39 26 12 ['food presentation\\n7', 'chef\\n6', 'true more... \n", "\n", " hours latitude longitude \\\n", "31 ['% busy at .', '0% busy at 6 AM.', '0% busy a... 45.771666 4.835712 \n", "152 ['% busy at .', '0% busy at 6 AM.', '0% busy a... 45.757263 4.834922 \n", "85 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.765452 4.831978 \n", "135 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.776758 4.836198 \n", "101 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.762878 4.834945 \n", "50 [] 45.769906 4.830210 \n", "9 ['% busy at .', '0% busy at 6 AM.', '0% busy a... 45.769259 4.836668 \n", "127 [] 45.770115 4.849329 \n", "78 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.765999 4.833757 \n", "28 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.770390 4.836936 \n", "144 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.759265 4.841896 \n", "95 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.765268 4.832821 \n", "79 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.765467 4.832433 \n", "\n", " traditional cocktail presentation score \n", "31 5 0 41 46 \n", "152 9 0 31 40 \n", "85 0 19 20 39 \n", "135 0 32 7 39 \n", "101 8 0 29 37 \n", "50 0 27 5 32 \n", "9 0 13 17 30 \n", "127 0 6 20 26 \n", "78 0 9 14 23 \n", "28 0 13 9 22 \n", "144 5 0 16 21 \n", "95 0 7 6 13 \n", "79 4 0 7 11 " ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto[((resto.traditional != 0)|(resto.cocktail != 0)) & (resto.presentation != 0)].sort_values(by='score', ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nous avons 13 restaurants qui remplissent cette condition, nous allons maintenant étendre l'offre et sélectionner également ceux qui offrent une bonne qualité à un prix abordable" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "resto.price_range = resto.price_range.replace({'$$':'Affordable', '$$$':'Pricy' })" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "resto_best = resto.head(30).sort_values(by='score', ascending=False)" ] }, { "cell_type": "code", "execution_count": 51, "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", "
    full_nameratingtotal_ratingsbusiness_categoryprice_rangeaddressphonewebsitereview_topicshourslatitudelongitudetraditionalcocktailpresentationscore
    5La Mère Brazier4.7574.0Restaurant$$$$QRCP+HV Lyon, FranceNaN+33 4 78 23 17 20['food presentation\\n66', 'corn\\n21', 'sommeli...[]45.7714434.837213006666
    15Le Bouchon des Filles4.4789.0RestaurantAffordableQR9H+FP Lyon, FranceNaN+33 4 78 30 40 44['food presentation\\n60', 'entree\\n50', 'lyonn...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7686734.829360006060
    9Sabaï Sabaï4.7166.0Asian restaurantAffordableNaNsabaisabai.frQR9P+PM Lyon, France['tapas\\n31', 'food presentation\\n17', 'cockta...['% busy at .', '0% busy at 6 AM.', '0% busy a...45.7692594.8366680131730
    23Le Cochon Qui Boit4.5356.0French restaurantAffordableQRCP+7X Lyon, FranceNaN+33 4 78 27 23 37['food presentation\\n25', 'being\\n15', 'entree...[]45.7706444.837389002525
    29Les Filaos Restaurant réunionnais4.3351.0RestaurantAffordableNaNlesfilaos-lyon.comQR9H+PQ Lyon, France['corn\\n26', 'food presentation\\n24', 'terrace...['% busy at .', '% busy at .', '0% busy at 6 A...45.7692914.829473002424
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings \\\n", "5 La Mère Brazier 4.7 574.0 \n", "15 Le Bouchon des Filles 4.4 789.0 \n", "9 Sabaï Sabaï 4.7 166.0 \n", "23 Le Cochon Qui Boit 4.5 356.0 \n", "29 Les Filaos Restaurant réunionnais 4.3 351.0 \n", "\n", " business_category price_range address phone \\\n", "5 Restaurant $$$$ QRCP+HV Lyon, France NaN \n", "15 Restaurant Affordable QR9H+FP Lyon, France NaN \n", "9 Asian restaurant Affordable NaN sabaisabai.fr \n", "23 French restaurant Affordable QRCP+7X Lyon, France NaN \n", "29 Restaurant Affordable NaN lesfilaos-lyon.com \n", "\n", " website review_topics \\\n", "5 +33 4 78 23 17 20 ['food presentation\\n66', 'corn\\n21', 'sommeli... \n", "15 +33 4 78 30 40 44 ['food presentation\\n60', 'entree\\n50', 'lyonn... \n", "9 QR9P+PM Lyon, France ['tapas\\n31', 'food presentation\\n17', 'cockta... \n", "23 +33 4 78 27 23 37 ['food presentation\\n25', 'being\\n15', 'entree... \n", "29 QR9H+PQ Lyon, France ['corn\\n26', 'food presentation\\n24', 'terrace... \n", "\n", " hours latitude longitude \\\n", "5 [] 45.771443 4.837213 \n", "15 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.768673 4.829360 \n", "9 ['% busy at .', '0% busy at 6 AM.', '0% busy a... 45.769259 4.836668 \n", "23 [] 45.770644 4.837389 \n", "29 ['% busy at .', '% busy at .', '0% busy at 6 A... 45.769291 4.829473 \n", "\n", " traditional cocktail presentation score \n", "5 0 0 66 66 \n", "15 0 0 60 60 \n", "9 0 13 17 30 \n", "23 0 0 25 25 \n", "29 0 0 24 24 " ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto_best.head()" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(30, 16)" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "resto_best.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cette nouvelle consultation nous a permis d'élargir notre offre à 30 restaurants, dont La Mère Brazier est l'endroit le plus attractif pour choisir et prendre un bon dîner en ville." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nous trouverons les meilleurs restaurants de haute qualité dans la cuisine traditionnelle avec une bonne gamme de cocktails et des prix abordables" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "from folium.plugins import HeatMap\n", "score = resto_best[resto_best.score>11].copy()\n", "score['count'] = 1" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
    " ], "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HeatMap(data=score[['latitude', 'longitude', 'score']].groupby(['latitude', 'longitude']).sum().reset_index().values.tolist(), radius=20, max_zoom=17).add_to(resto_map)\n", "resto_map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Connaître le meilleur moment pour visiter notre restaurant" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Grâce à l'analyse de l'offre gastronomique lyonnaise, nous avons pu choisir Le Bouchon des Filles et aussi nous connaissons sa localisation, nous allons donc extraire les données du Popular Times de Google Maps pour connaître le meilleur moment pour la visiter.\n", "\n", "Avec Google Popular Times, nous pouvons connaître en temps réel l'occupation d'une entreprise, en l'occurrence par Le Bouchon des Filles, avec cela il est possible de connaître les données sur les visites et la durée habituelle des visites dans les locaux.\n", "\n", "![title](https://uploads.guim.co.uk/2016/11/22/Google-Maps-live-data-crop-compressor2.gif)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## On extrait les données sur la durée habituelle des visites dans Le Bouchon des Filles" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'[\"[\\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'44% busy at 12 PM.\\', \\'68% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'40% busy at 7 PM.\\', \\'81% busy at 8 PM.\\', \\'85% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'0% busy at 12 PM.\\', \\'0% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'30% busy at 7 PM.\\', \\'49% busy at 8 PM.\\', \\'51% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'0% busy at 12 PM.\\', \\'0% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'15% busy at 7 PM.\\', \\'40% busy at 8 PM.\\', \\'56% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'0% busy at 12 PM.\\', \\'0% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'23% busy at 7 PM.\\', \\'55% busy at 8 PM.\\', \\'66% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'0% busy at 12 PM.\\', \\'0% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'35% busy at 7 PM.\\', \\'66% busy at 8 PM.\\', \\'73% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'18% busy at 12 PM.\\', \\'37% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'33% busy at 7 PM.\\', \\'62% busy at 8 PM.\\', \\'80% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'0% busy at 9 AM.\\', \\'0% busy at 10 AM.\\', \\'0% busy at 11 AM.\\', \\'40% busy at 12 PM.\\', \\'73% busy at 1 PM.\\', \\'0% busy at 2 PM.\\', \\'0% busy at 3 PM.\\', \\'0% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'58% busy at 7 PM.\\', \\'87% busy at 8 PM.\\', \\'100% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\']\"]'" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "str(list(resto_best[resto_best.full_name == 'Le Bouchon des Filles'].hours))" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "def visit_planner(place_name) :\n", "\n", " place_name = pd.DataFrame(index=['Le dimanche', 'Le lundi', 'Le mardi', 'Le mercredi', 'Le jeudi', 'Le vendredi', 'Le samendi'], \\\n", " columns=['6 AM', '7 AM', '8 AM', '9 AM', '10 AM', '11 AM', '12 PM', '1 PM', '2 PM','3 PM',\n", " '4 PM', '5 PM', '6 PM', '7 PM', '8 PM', '9 PM', '10 PM', '11 PM']) \n", " \n", "\n", " return place_name" ] }, { "cell_type": "code", "execution_count": 55, "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", "
    6 AM7 AM8 AM9 AM10 AM11 AM12 PM1 PM2 PM3 PM4 PM5 PM6 PM7 PM8 PM9 PM10 PM11 PM
    Le dimancheNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le lundiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le mardiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le mercrediNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le jeudiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le vendrediNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le samendiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    \n", "
    " ], "text/plain": [ " 6 AM 7 AM 8 AM 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM 3 PM 4 PM 5 PM \\\n", "Le dimanche NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le lundi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le mardi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le mercredi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le jeudi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le vendredi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le samendi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", " 6 PM 7 PM 8 PM 9 PM 10 PM 11 PM \n", "Le dimanche NaN NaN NaN NaN NaN NaN \n", "Le lundi NaN NaN NaN NaN NaN NaN \n", "Le mardi NaN NaN NaN NaN NaN NaN \n", "Le mercredi NaN NaN NaN NaN NaN NaN \n", "Le jeudi NaN NaN NaN NaN NaN NaN \n", "Le vendredi NaN NaN NaN NaN NaN NaN \n", "Le samendi NaN NaN NaN NaN NaN NaN " ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base_resto = visit_planner('Le Bouchon des Filles')\n", "base_resto" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "for hour in list(base_resto):\n", " base_resto[hour] = re.findall('...%.{0,20} '+str(hour), str(list(resto_best[resto_best.full_name=='Le Bouchon des Filles'].hours)))\n", " base_resto[hour] = [ re.findall('\\d+', str(i))[0] for i in base_resto[hour] ]\n", " base_resto[hour] = base_resto[hour].astype(int)" ] }, { "cell_type": "code", "execution_count": 58, "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", "
    6 AM7 AM8 AM9 AM10 AM11 AM12 PM1 PM2 PM3 PM4 PM5 PM6 PM7 PM8 PM9 PM10 PM11 PM
    Le dimanche00000044680000040818500
    Le lundi000000000000030495100
    Le mardi000000000000015405600
    Le mercredi000000000000023556600
    Le jeudi000000000000035667300
    Le vendredi00000018370000033628000
    Le samendi000000407300000588710000
    \n", "
    " ], "text/plain": [ " 6 AM 7 AM 8 AM 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM 3 PM \\\n", "Le dimanche 0 0 0 0 0 0 44 68 0 0 \n", "Le lundi 0 0 0 0 0 0 0 0 0 0 \n", "Le mardi 0 0 0 0 0 0 0 0 0 0 \n", "Le mercredi 0 0 0 0 0 0 0 0 0 0 \n", "Le jeudi 0 0 0 0 0 0 0 0 0 0 \n", "Le vendredi 0 0 0 0 0 0 18 37 0 0 \n", "Le samendi 0 0 0 0 0 0 40 73 0 0 \n", "\n", " 4 PM 5 PM 6 PM 7 PM 8 PM 9 PM 10 PM 11 PM \n", "Le dimanche 0 0 0 40 81 85 0 0 \n", "Le lundi 0 0 0 30 49 51 0 0 \n", "Le mardi 0 0 0 15 40 56 0 0 \n", "Le mercredi 0 0 0 23 55 66 0 0 \n", "Le jeudi 0 0 0 35 66 73 0 0 \n", "Le vendredi 0 0 0 33 62 80 0 0 \n", "Le samendi 0 0 0 58 87 100 0 0 " ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base_resto" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nhpb/0Sa39ly7Id/2XLsh3/ZcuyHf9ly7Id/2XLsh3/Zcu2Fz+0//sLjmkL55w1ETAdj/i7+tuaTv\n7vnMqwDY/tO/qLmkb1Z96cTiRMbbeXbtRXd0d3F/2aPZHBHLGj4+AbwTOC0i7gLmAa/v5rodk/Lp\nwMERcXdE3AN8sDz/KmB0eUjth4D5ACmlPwOXA3eWy/zx+bhjkiRJkvS3ZlDdAQAppe4G3uN7uOoY\nYGW5jhXA27pY91rguG5u9xzgnC7OP7WH25UkSZIkdaNfDJrbIiI+CJxK8Y6xkiRJkqR+or8cOttn\nKaX/SilNSynl819TJUmSJOlvQLaDpiRJkiSpf3LQlCRJkiRVykFTkiRJklQpB01JkiRJUqUcNCVJ\nkiRJlXLQlCRJkiRVykFTkiRJklQpB01JkiRJUqUcNCVJkiRJlXLQlCRJkiRVykFTkiRJklQpB01J\nkiRJUqUcNCVJkiRJlXLQlCRJkiRVykFTkiRJklSpSCnV3ZArHzhJkiRJf8uiuwsGvZAVf3XWtddd\n0HdDy295bu25dkO+7bl2Q77tZfcDi1fWHNJ3e00cDcDlv19Uc0nfvO0Vk4oTuW0rkP12nl035Nue\nazdsbv/VDUvr7eijVx8xHoDDv/6HekO2wY2nHwXA4A9+r+aSvln/XycXJzLezrNrH7r1UdJDZyVJ\nkiRJlXLQlCRJkiRVykFTkiRJklQpB01J0v9v787jrKzr/o+/PrPIbOwggiA7igIi4IKmYi5pWmbm\njVuldUdWivrLR3Wrj26yO9ssl6wUU6k0l1zqztLcQs0lxRUQWUVANlEQhpkBZubz++O6Bg7jOZwz\ncDHX+Xa/n48HD86cc11nXnO4Zs71Odd1BhEREZFEadAUERERERGRRGnQFBERERERkURp0BQRERER\nEZFEadAUERERERGRRGnQFBERERERkURp0BQREREREZFEadAUERERERGRRGnQFBERERERkURp0BQR\nEREREZFEadAUERERERGRRGnQFBERERERkURp0BQREREREZFEadAUERERERGRRGnQFBERERERkUSV\n7eyKZlbr7jVJxuwKM5sC1Lr7NTu5/gDgIXcfYWbjgC+4++TkCgtz+++msWDRIgYNHMiXv3h+e3/6\nXRJqe6jdEG57qN0QVvu6dWv59c3XsWrVcn7205swM353xy2sXbuW0tJSvnTeBdTUdEw78yM+eG8F\n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\nZUB/n72cY4f35lfnHMYnRvTh3hmLeW3JB9z8+fEM26sTT81dmXZiXqFt55nSbjffyTcPm1kzsDzj\nqp8TDZC/Jjplthy4292vyrLuOOAl4Dx3/218XQ/gl8BwoiOWT7v7Ba3/2xIzmwWc4u6LzewK4AvA\nO8Ay4E13v8bMpgOXufuMeJ3RRO/V7Bzf93Xufkv8Ps/bgDrg70Tv4xxhZhPi9U/ZwUPgNBT/4f6P\nqIgPBofWHmo3hNseajeE2x53v7Pog5RD2q7/oOgV6nv+sTDlkraZeEz0G3mD21Yg+O08uG4Itz3U\nbtja/rdnF6fb0UafPGIAAIff8HS6ITvhuclHAbDHBXnfVVZUNt/0+ehCwNt5cO1Rt+W6eaffgevu\nuY6GnljAujNaR8Xvv5yYZdkprT4ekXH5B2z7xT6Zy0xo9fFrwFFZlnsZyDzqOiW+fjowfcdfhYiI\niIiIiGTzb///aIqIiIiIiEj70qApIiIiIiIiidKgKSIiIiIiIonSoCkiIiIiIiKJ0qApIiIiIiIi\nidKgKSIiIiIiIonSoCkiIiIiIiKJ0qApIiIiIiIiidKgKSIiIiIiIonSoCkiIiIiIiKJ0qApIiIi\nIiIiidKgKSIiIiIiIonSoCkiIiIiIiKJ0qApIiIiIiIiidKgKSIiIiIiIonSoCkiIiIiIiKJ0qAp\nIiIiIiIiiTJ3T7shVHrgRERERETk/zLLdYOOaIqIiIiIiEiiytIOCFpDY9oFbVcR/5OH1h5qN4Tb\nHmo3hNsed9/66LyUQ9ruyycMA6DTtx5KuaRt1v/klOhCaNsKBL+dB9cN4baH2g1b2z819bmUQ9rm\nL5MOB6D83GtTLmm7LXdcCkDp+LNSLmmbpufvii4EvJ0H116x41FSRzRFREREREQkURo0RURERERE\nJFEaNEVERERERCRRGjRFREREREQkURo0RUREREREJFEaNEVERERERCRRGjRFREREREQkURo0RURE\nREREJFEaNEVERERERCRRGjRFREREREQkURo0RUREREREJFEaNEVERERERCRRGjRFREREREQkURo0\nRUREREREJFEaNEVERERERCRRGjRFREREREQkURo0RUREREREJFFlaQfI9m7/3TQWLFrEoIED+fIX\nz087p01CbQ+1G8JtD7Ubwmyf/dJ0lsx7g5POmcysfz3J0gWzqOnclSNOOpuS0tK08z7ikP5dOWdc\n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\ndBwnHjiAR95YzMGD9mLGolVpp2VVWlrCjZd9iSH99uIX3zyfPj268uq8xdxy+SSG7dOb6a+8SVNT\nM3966iVuuXwSJx9xEA9MfzHt7KxC284zpd1u7js/a5lZrbvXtLruOeBad/9jfOrrKHd/vdUyg919\nYXz5T8A0oqOMQ9z9IjM7BngSGBiv8pC7j4iXnxZ/fJ+ZDWi5zcyuBjoRnbbrZnaQu79qZucB49z9\nwnj9h4BrgLnAC8AYYH38+V539wvNbApQ6+7X7ODLdxqK903jOVXEM3Zo7aF2Q7jtoXZDuO1x962P\nzks5pO2+fEL0Kmmnbz2UcknbrP/JKdGF0LYVCH47D64bwm0PtRu2tn9q6nMph7TNXyYdDkD5udem\nXNJ2W+64FIDS8WelXNI2Tc/fFV0IeDsPrj3qtlw37+r/o1llZssyPv450ZHJX5vZlUA5cDfweqv1\nLomHySaiU1kfBjoCfzGzGcBrwFttbPk+cB3wRjzgLgZOybWwu6+IB8rngRXAK0DxnjMhIiIiIiIS\niF0aNN0916m3J+ZZ76IsV28CxudYZUTGuudlXF7ccpu71wNfzfK5phEdMW35+JSMy7cDt2dZZ8qO\n+kVERERERCQ3/T+aIiIiIiIikigNmiIiIiIiIpIoDZoiIiIiIiKSKA2aIiIiIiIikigNmiIiIiIi\nIpIoDZoiIiIiIiKSKA2aIiIiIiIikigNmiIiIiIiIpIoDZoiIiIiIiKSKA2aIiIiIiIikigNmiIi\nIiIiIpIoDZoiIiIiIiKSKA2aIiIiIiIikigNmiIiIiIiIpIoDZoiIiIiIiKSKA2aIiIiIiIikigN\nmiIiIiIiIpIoc/e0G0KlB05ERERERP4vs1w36IimiIiIiIiIJEqDpoiIiIiIiCRKg6aIiIiIiIgk\nSoOmiIiIiIiIJEqDpoiIiIiIiCRKg6aIiIiIiIgkSoOmiIiIiIiIJEqDpoiIiIiIiCRKg6aIiIiI\niIgkSoOmiIiIiIiIJEqDpoiIiIiIiCRKg6aIiIiIiIgkSoOmiIiIiIiIJEqDpoiIiIiIiCRKg6aI\niIiIiIgkSoOmiIiIiIiIJEqDpoiIiIiIiCRKg6aIiIiIiIgkSoOmiIiIiIiIJEqDpoiIiIiIiCRK\ng6aIiIiIiIgkSoOmiIiIiIiIJEqDpoiIiIiIiCRKg+ZOMrOvAhbin1DbQ+0OuT3U7pDbQ+0OuT3U\n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\nqb3Q/RYoru5M+fZdoLjaC91vgeLqBgred4EibM+Qd78lFtpzaItQu7MqSzugWLj7SjNbamb7xudQ\nH0urNzjHb4Y+AxgVnz6BmR1D9P6v32Tc15L4aMXj7fYF7OCITBF3LwEOi08PqCd6zLf7bX/F2m5m\ne7r7ajPbh+jN3eNb3V6U3Vn8L/BF4Efx33/OssxZwBR3/2HLFWb2tpn1b7Xcd4E93b0pestj6oqy\n28xOBL4NHO3udbtwVz8DnnL394vk8c7J3evN7NtEv/xot7PoAbkVmOPuP9/Z+2nvbgAz6wlscfd1\nZlZJtGP747beT3u3u/t/Ef9iKzObAFzm7rmO9OzoftJ4zKuBEnffEF8+AbiqrfeTwmOed7+lwPtp\n98c8wy6dTZJCe979lkKk9Zjn23cpRMrbCxS231KIYJ5DWwmqW4Pm9i4C7oxP5VgEnN/q9qOAd1sG\nh9jTwP4tr660cPebd2tphvgH3vHAV3MsUpTd7v4vM7uP6L1xjcCrwNRWixVlO3C/mXUnOhr2DXdf\n2+r2ouq26L9XmQD0MLNlwH+7+61EP6jvtei/+VjCR08thehI4Emtrnswvn7re8fc/bn26jaz04Bf\nAD2Bv5rZa+7+iWLp3lE7cCPQgehIK0S/nOGCtt6/u8+mHX7j3A6+jjZx9/Z8D/IRRK+4z4xPQQK4\n3N3/1tY7audugN7Ab82slOiso3vdPet/FZJPCu2JSKG7F/Bg/P1YBvzB3R/ZmTtKoT3ffktB0thW\nCth3KUh7the431LofaXx/Zlv36Ug7dG+i/stee2u59Bd3G/Jq72e+5NinvOsLREREREREZG203s0\nRUREREREJFEaNEVERERERCRRGjRFREREREQkURo0RUREREREJFEaNEVERERERCRRGjRFREREREQk\nURo0RUREREREJFEaNEVERERERCRR/x+Z3p9FoxHk0wAAAABJRU5ErkJggg==\n", "text/plain": [ "
    " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(15,7))\n", "sns.heatmap(base_resto, cmap='PuBu', linewidths=0.8, annot=True, annot_kws={'fontsize':8, 'alpha':0.8}, fmt='d', square=True,\n", " cbar=False)\n", "\n", "plt.xticks(np.arange(18), list(base_resto))\n", "plt.title('Heures et fréquence des visiteurs de Le Bouchon des Filles (%)\\n', weight='semibold')\n", "\n", "b, t = plt.ylim()\n", "b += 0.5\n", "t -= 0.5\n", "plt.ylim(b, t);\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Grâce au Popular Times de Google Maps, nous avons découvert que Le Bouchon des Filles est ouvert tous les jours avec une fréquence très particulière dans ses heures, ce qui se traduit par une forte demande de visiteurs aux heures du déjeuner et du dîner, d'après ces résultats, je pense que Il est possible de profiter d'un excellent déjeuner en semaine car le week-end, il semble être encombré de clients, sauf si vous pouvez envisager d'aller déjeuner le week-end où la fréquence des visites est moindre.\n", "\n", "Comme on peut le voir, ces données offrent un grand potentiel pour analyser le comportement des concurrents ainsi que pour connaître la structure des clients non seulement dans le secteur du tourisme mais dans n'importe quel secteur du commerce et des services.\n", "\n", "En fait, vous pouvez en voir un exemple dans l'un de mes articles, cette fois pour Mexico où nous avons analysé spatialement Google Maps Popular Times Disponible ici" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Où sont les attractions touristiques de la ville de Lyon et quelles sont les heures les plus fréquentées" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![title](https://www.appart-ambiance.com/images/lyon5big.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Nous analyserons les données obtenues et trouverons le meilleur moment pour les visiter" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "HL = pd.read_csv('lyon_touristme.csv')" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(104, 9)" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HL.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Les techniques de datamining nous ont permis d'avoir des données pour 108 attractions touristiques de Lyon" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "HL.total_ratings = HL.total_ratings.replace('\\(|\\)|,', '', regex=True)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "HL.total_ratings = HL.total_ratings.astype(float)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "HL10 = HL.sort_values(by='total_ratings', ascending=False).head(50).copy()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Selon leur popularité, ils sont commandés de cette façon" ] }, { "cell_type": "code", "execution_count": 75, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
    full_nameratingtotal_ratingslandmark_categorydescriptionaddresshourslatitudelongitude
    2Parc de la Tête d'Or4.637941.0ParkVast, 19th-century park with statues, fountain...69006 Lyon, France[]45.7837074.851606
    1La Basilique Notre Dame de Fourvière4.719139.0Basilica19th-century basilica with 4 octagonal towers,...8 Place de Fourvière, 69005 Lyon, France['0% busy at 6 AM.', '2% busy at 7 AM.', '4% b...45.7622934.822626
    4Cathédrale Saint-Jean-Baptiste4.68777.0CathedralMedieval cathedral with a 14th-century astrono...Place Saint-Jean, 69005 Lyon, France['0% busy at 6 AM.', '0% busy at 7 AM.', '10% ...45.7608014.827290
    12Place des Jacobins4.47125.0Historical landmarkCity square with an elaborate fountain & surro...Place des Jacobins, 69002 Lyon, France['1% busy at 4 AM.', '1% busy at 5 AM.', '0% b...45.7604654.833427
    8Museum of Cinema Miniature4.76188.0MuseumMuseum of hyper-realistic, miniature everyday ...60 Rue Saint-Jean, 69005 Lyon, France[]45.7618764.827347
    50Parc de Parilly4.35141.0Park178-hectare green space with woodland, an athl...36 Boulevard Emile Bollaert, 69500 Bron, France['0% busy at 6 AM.', '2% busy at 7 AM.', '26% ...45.7241804.897767
    33Museum of Fine Arts of Lyon4.54432.0Art museumArt museum in former 17th-century abbey, with ...20 Place des Terreaux, 69001 Lyon, France['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7671104.833619
    103Bird Park4.54125.0Animal parkPark with huge bird collection including rare ...D1083, 01330 Villars-les-Dombes, France[]45.9917595.025966
    38Parc Sergent Blandan4.33930.0ParkSizable city park on the site of onetime army ...37 Rue du Repos, 69007 Lyon, France[]45.7456374.854416
    25Halles de Lyon Paul Bocuse4.63843.0Fresh food marketNaN102 Cours Lafayette, 69003 Lyon, France['0% busy at 6 AM.', '2% busy at 7 AM.', '25% ...45.7633444.850456
    6Fresque des Lyonnais4.63606.0Tourist attractionThis huge, trompe-l'oeil painting on the side ...2 Rue de la Martinière, 69001 Lyon, France[]45.7680864.828025
    9Théâtre Gallo Romain4.63198.0ArenaThe substantial ruins of a pair of Roman theat...Rue de l'Antiquaille, 69005 Lyon, France[]45.7597564.819488
    3Mur des Canuts4.62692.0Tourist attractionHuge fresco of a neighborhood of silk workers ...36 Boulevard des Canuts, 69004 Lyon, France[]45.7780854.827952
    34Lyon Zoo4.22462.0ZooExpansive green zoological gardens, housing ex...Parc de la Tête d'Or, Allée de l'Orangerie, 69...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7784414.856714
    7Gallo-Roman Museum of Lyon-Fourvière4.52461.0Archaeological museumModern hillside museum on Roman archeological ...17 Rue Cleberg, 69005 Lyon, France[]45.7604194.819964
    29Lyon Botanical Garden4.62460.0GardenThis botanical garden dating from 1857 feature...Parc de la Tête d’or, 69006 Lyon, France\\nLoca...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7731564.854833
    27Aux enfants du Rhône défenseurs de la Patrie4.52442.0MonumentNaNParc de La Tête d'Or, Rue de Créqui, 69006 Lyo...['0% busy at 5 AM.', '1% busy at 6 AM.', '0% b...45.7772284.845212
    16Mini World Lyon4.52343.0Tourist attractionIndoor attraction featuring highly detailed, s...Pôle du Carré de Soie, 3 Avenue de Bohlen, 691...[]45.7648074.923254
    23Bartholdi Fountain4.42095.0FountainDramatic fountain by the famous French sculpto...Place des Terreaux, 69001 Lyon, France['0% busy at 4 AM.', '5% busy at 5 AM.', '0% b...45.7676324.833463
    83iFLY Lyon4.52067.0Amusement centerNaN48 Ancienne Route de Grenoble, 69800 Saint-Pri...[]45.7250234.938786
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings \\\n", "2 Parc de la Tête d'Or 4.6 37941.0 \n", "1 La Basilique Notre Dame de Fourvière 4.7 19139.0 \n", "4 Cathédrale Saint-Jean-Baptiste 4.6 8777.0 \n", "12 Place des Jacobins 4.4 7125.0 \n", "8 Museum of Cinema Miniature 4.7 6188.0 \n", "50 Parc de Parilly 4.3 5141.0 \n", "33 Museum of Fine Arts of Lyon 4.5 4432.0 \n", "103 Bird Park 4.5 4125.0 \n", "38 Parc Sergent Blandan 4.3 3930.0 \n", "25 Halles de Lyon Paul Bocuse 4.6 3843.0 \n", "6 Fresque des Lyonnais 4.6 3606.0 \n", "9 Théâtre Gallo Romain 4.6 3198.0 \n", "3 Mur des Canuts 4.6 2692.0 \n", "34 Lyon Zoo 4.2 2462.0 \n", "7 Gallo-Roman Museum of Lyon-Fourvière 4.5 2461.0 \n", "29 Lyon Botanical Garden 4.6 2460.0 \n", "27 Aux enfants du Rhône défenseurs de la Patrie 4.5 2442.0 \n", "16 Mini World Lyon 4.5 2343.0 \n", "23 Bartholdi Fountain 4.4 2095.0 \n", "83 iFLY Lyon 4.5 2067.0 \n", "\n", " landmark_category description \\\n", "2 Park Vast, 19th-century park with statues, fountain... \n", "1 Basilica 19th-century basilica with 4 octagonal towers,... \n", "4 Cathedral Medieval cathedral with a 14th-century astrono... \n", "12 Historical landmark City square with an elaborate fountain & surro... \n", "8 Museum Museum of hyper-realistic, miniature everyday ... \n", "50 Park 178-hectare green space with woodland, an athl... \n", "33 Art museum Art museum in former 17th-century abbey, with ... \n", "103 Animal park Park with huge bird collection including rare ... \n", "38 Park Sizable city park on the site of onetime army ... \n", "25 Fresh food market NaN \n", "6 Tourist attraction This huge, trompe-l'oeil painting on the side ... \n", "9 Arena The substantial ruins of a pair of Roman theat... \n", "3 Tourist attraction Huge fresco of a neighborhood of silk workers ... \n", "34 Zoo Expansive green zoological gardens, housing ex... \n", "7 Archaeological museum Modern hillside museum on Roman archeological ... \n", "29 Garden This botanical garden dating from 1857 feature... \n", "27 Monument NaN \n", "16 Tourist attraction Indoor attraction featuring highly detailed, s... \n", "23 Fountain Dramatic fountain by the famous French sculpto... \n", "83 Amusement center NaN \n", "\n", " address \\\n", "2 69006 Lyon, France \n", "1 8 Place de Fourvière, 69005 Lyon, France \n", "4 Place Saint-Jean, 69005 Lyon, France \n", "12 Place des Jacobins, 69002 Lyon, France \n", "8 60 Rue Saint-Jean, 69005 Lyon, France \n", "50 36 Boulevard Emile Bollaert, 69500 Bron, France \n", "33 20 Place des Terreaux, 69001 Lyon, France \n", "103 D1083, 01330 Villars-les-Dombes, France \n", "38 37 Rue du Repos, 69007 Lyon, France \n", "25 102 Cours Lafayette, 69003 Lyon, France \n", "6 2 Rue de la Martinière, 69001 Lyon, France \n", "9 Rue de l'Antiquaille, 69005 Lyon, France \n", "3 36 Boulevard des Canuts, 69004 Lyon, France \n", "34 Parc de la Tête d'Or, Allée de l'Orangerie, 69... \n", "7 17 Rue Cleberg, 69005 Lyon, France \n", "29 Parc de la Tête d’or, 69006 Lyon, France\\nLoca... \n", "27 Parc de La Tête d'Or, Rue de Créqui, 69006 Lyo... \n", "16 Pôle du Carré de Soie, 3 Avenue de Bohlen, 691... \n", "23 Place des Terreaux, 69001 Lyon, France \n", "83 48 Ancienne Route de Grenoble, 69800 Saint-Pri... \n", "\n", " hours latitude longitude \n", "2 [] 45.783707 4.851606 \n", "1 ['0% busy at 6 AM.', '2% busy at 7 AM.', '4% b... 45.762293 4.822626 \n", "4 ['0% busy at 6 AM.', '0% busy at 7 AM.', '10% ... 45.760801 4.827290 \n", "12 ['1% busy at 4 AM.', '1% busy at 5 AM.', '0% b... 45.760465 4.833427 \n", "8 [] 45.761876 4.827347 \n", "50 ['0% busy at 6 AM.', '2% busy at 7 AM.', '26% ... 45.724180 4.897767 \n", "33 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.767110 4.833619 \n", "103 [] 45.991759 5.025966 \n", "38 [] 45.745637 4.854416 \n", "25 ['0% busy at 6 AM.', '2% busy at 7 AM.', '25% ... 45.763344 4.850456 \n", "6 [] 45.768086 4.828025 \n", "9 [] 45.759756 4.819488 \n", "3 [] 45.778085 4.827952 \n", "34 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.778441 4.856714 \n", "7 [] 45.760419 4.819964 \n", "29 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.773156 4.854833 \n", "27 ['0% busy at 5 AM.', '1% busy at 6 AM.', '0% b... 45.777228 4.845212 \n", "16 [] 45.764807 4.923254 \n", "23 ['0% busy at 4 AM.', '5% busy at 5 AM.', '0% b... 45.767632 4.833463 \n", "83 [] 45.725023 4.938786 " ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "HL10.head(20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nous localisons les attractions sur une carte" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
    " ], "text/plain": [ "" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tourisme_map = folium.Map(location=gdl_center, zoom_start=13, tiles=tileset, attr=attribution)\n", "\n", "for latitude, longitude, full_name, rating, total_rating in zip(HL10.latitude, HL10.longitude, HL10.full_name, HL10.rating, HL10.total_ratings):\n", " popup = '' + str(full_name) + '
  • Rating: ' + str(rating) + ' (Total of ' + str(total_rating) + ' reviews)'\n", " folium.Marker( [latitude, longitude], \n", " icon=folium.CustomIcon( icon_image='https://www.pinclipart.com/picdir/big/46-460577_maps-vector-graphic-google-maps-icon-android-clipart.png', icon_size=(15,15) ), popup=popup).add_to(tourisme_map)\n", "tourisme_map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nous créons maintenant une carte thermique avec les attractions touristiques les plus populaires" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "tourisme_rating = HL10[HL10.total_ratings>2000].copy()\n", "tourisme_rating['count'] = 1" ] }, { "cell_type": "code", "execution_count": 86, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
    full_nameratingtotal_ratingslandmark_categorydescriptionaddresshourslatitudelongitudecount
    2Parc de la Tête d'Or4.637941.0ParkVast, 19th-century park with statues, fountain...69006 Lyon, France[]45.7837074.8516061
    1La Basilique Notre Dame de Fourvière4.719139.0Basilica19th-century basilica with 4 octagonal towers,...8 Place de Fourvière, 69005 Lyon, France['0% busy at 6 AM.', '2% busy at 7 AM.', '4% b...45.7622934.8226261
    4Cathédrale Saint-Jean-Baptiste4.68777.0CathedralMedieval cathedral with a 14th-century astrono...Place Saint-Jean, 69005 Lyon, France['0% busy at 6 AM.', '0% busy at 7 AM.', '10% ...45.7608014.8272901
    12Place des Jacobins4.47125.0Historical landmarkCity square with an elaborate fountain & surro...Place des Jacobins, 69002 Lyon, France['1% busy at 4 AM.', '1% busy at 5 AM.', '0% b...45.7604654.8334271
    8Museum of Cinema Miniature4.76188.0MuseumMuseum of hyper-realistic, miniature everyday ...60 Rue Saint-Jean, 69005 Lyon, France[]45.7618764.8273471
    50Parc de Parilly4.35141.0Park178-hectare green space with woodland, an athl...36 Boulevard Emile Bollaert, 69500 Bron, France['0% busy at 6 AM.', '2% busy at 7 AM.', '26% ...45.7241804.8977671
    33Museum of Fine Arts of Lyon4.54432.0Art museumArt museum in former 17th-century abbey, with ...20 Place des Terreaux, 69001 Lyon, France['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7671104.8336191
    103Bird Park4.54125.0Animal parkPark with huge bird collection including rare ...D1083, 01330 Villars-les-Dombes, France[]45.9917595.0259661
    38Parc Sergent Blandan4.33930.0ParkSizable city park on the site of onetime army ...37 Rue du Repos, 69007 Lyon, France[]45.7456374.8544161
    25Halles de Lyon Paul Bocuse4.63843.0Fresh food marketNaN102 Cours Lafayette, 69003 Lyon, France['0% busy at 6 AM.', '2% busy at 7 AM.', '25% ...45.7633444.8504561
    6Fresque des Lyonnais4.63606.0Tourist attractionThis huge, trompe-l'oeil painting on the side ...2 Rue de la Martinière, 69001 Lyon, France[]45.7680864.8280251
    9Théâtre Gallo Romain4.63198.0ArenaThe substantial ruins of a pair of Roman theat...Rue de l'Antiquaille, 69005 Lyon, France[]45.7597564.8194881
    3Mur des Canuts4.62692.0Tourist attractionHuge fresco of a neighborhood of silk workers ...36 Boulevard des Canuts, 69004 Lyon, France[]45.7780854.8279521
    34Lyon Zoo4.22462.0ZooExpansive green zoological gardens, housing ex...Parc de la Tête d'Or, Allée de l'Orangerie, 69...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7784414.8567141
    7Gallo-Roman Museum of Lyon-Fourvière4.52461.0Archaeological museumModern hillside museum on Roman archeological ...17 Rue Cleberg, 69005 Lyon, France[]45.7604194.8199641
    29Lyon Botanical Garden4.62460.0GardenThis botanical garden dating from 1857 feature...Parc de la Tête d’or, 69006 Lyon, France\\nLoca...['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b...45.7731564.8548331
    27Aux enfants du Rhône défenseurs de la Patrie4.52442.0MonumentNaNParc de La Tête d'Or, Rue de Créqui, 69006 Lyo...['0% busy at 5 AM.', '1% busy at 6 AM.', '0% b...45.7772284.8452121
    16Mini World Lyon4.52343.0Tourist attractionIndoor attraction featuring highly detailed, s...Pôle du Carré de Soie, 3 Avenue de Bohlen, 691...[]45.7648074.9232541
    23Bartholdi Fountain4.42095.0FountainDramatic fountain by the famous French sculpto...Place des Terreaux, 69001 Lyon, France['0% busy at 4 AM.', '5% busy at 5 AM.', '0% b...45.7676324.8334631
    83iFLY Lyon4.52067.0Amusement centerNaN48 Ancienne Route de Grenoble, 69800 Saint-Pri...[]45.7250234.9387861
    \n", "
    " ], "text/plain": [ " full_name rating total_ratings \\\n", "2 Parc de la Tête d'Or 4.6 37941.0 \n", "1 La Basilique Notre Dame de Fourvière 4.7 19139.0 \n", "4 Cathédrale Saint-Jean-Baptiste 4.6 8777.0 \n", "12 Place des Jacobins 4.4 7125.0 \n", "8 Museum of Cinema Miniature 4.7 6188.0 \n", "50 Parc de Parilly 4.3 5141.0 \n", "33 Museum of Fine Arts of Lyon 4.5 4432.0 \n", "103 Bird Park 4.5 4125.0 \n", "38 Parc Sergent Blandan 4.3 3930.0 \n", "25 Halles de Lyon Paul Bocuse 4.6 3843.0 \n", "6 Fresque des Lyonnais 4.6 3606.0 \n", "9 Théâtre Gallo Romain 4.6 3198.0 \n", "3 Mur des Canuts 4.6 2692.0 \n", "34 Lyon Zoo 4.2 2462.0 \n", "7 Gallo-Roman Museum of Lyon-Fourvière 4.5 2461.0 \n", "29 Lyon Botanical Garden 4.6 2460.0 \n", "27 Aux enfants du Rhône défenseurs de la Patrie 4.5 2442.0 \n", "16 Mini World Lyon 4.5 2343.0 \n", "23 Bartholdi Fountain 4.4 2095.0 \n", "83 iFLY Lyon 4.5 2067.0 \n", "\n", " landmark_category description \\\n", "2 Park Vast, 19th-century park with statues, fountain... \n", "1 Basilica 19th-century basilica with 4 octagonal towers,... \n", "4 Cathedral Medieval cathedral with a 14th-century astrono... \n", "12 Historical landmark City square with an elaborate fountain & surro... \n", "8 Museum Museum of hyper-realistic, miniature everyday ... \n", "50 Park 178-hectare green space with woodland, an athl... \n", "33 Art museum Art museum in former 17th-century abbey, with ... \n", "103 Animal park Park with huge bird collection including rare ... \n", "38 Park Sizable city park on the site of onetime army ... \n", "25 Fresh food market NaN \n", "6 Tourist attraction This huge, trompe-l'oeil painting on the side ... \n", "9 Arena The substantial ruins of a pair of Roman theat... \n", "3 Tourist attraction Huge fresco of a neighborhood of silk workers ... \n", "34 Zoo Expansive green zoological gardens, housing ex... \n", "7 Archaeological museum Modern hillside museum on Roman archeological ... \n", "29 Garden This botanical garden dating from 1857 feature... \n", "27 Monument NaN \n", "16 Tourist attraction Indoor attraction featuring highly detailed, s... \n", "23 Fountain Dramatic fountain by the famous French sculpto... \n", "83 Amusement center NaN \n", "\n", " address \\\n", "2 69006 Lyon, France \n", "1 8 Place de Fourvière, 69005 Lyon, France \n", "4 Place Saint-Jean, 69005 Lyon, France \n", "12 Place des Jacobins, 69002 Lyon, France \n", "8 60 Rue Saint-Jean, 69005 Lyon, France \n", "50 36 Boulevard Emile Bollaert, 69500 Bron, France \n", "33 20 Place des Terreaux, 69001 Lyon, France \n", "103 D1083, 01330 Villars-les-Dombes, France \n", "38 37 Rue du Repos, 69007 Lyon, France \n", "25 102 Cours Lafayette, 69003 Lyon, France \n", "6 2 Rue de la Martinière, 69001 Lyon, France \n", "9 Rue de l'Antiquaille, 69005 Lyon, France \n", "3 36 Boulevard des Canuts, 69004 Lyon, France \n", "34 Parc de la Tête d'Or, Allée de l'Orangerie, 69... \n", "7 17 Rue Cleberg, 69005 Lyon, France \n", "29 Parc de la Tête d’or, 69006 Lyon, France\\nLoca... \n", "27 Parc de La Tête d'Or, Rue de Créqui, 69006 Lyo... \n", "16 Pôle du Carré de Soie, 3 Avenue de Bohlen, 691... \n", "23 Place des Terreaux, 69001 Lyon, France \n", "83 48 Ancienne Route de Grenoble, 69800 Saint-Pri... \n", "\n", " hours latitude longitude \\\n", "2 [] 45.783707 4.851606 \n", "1 ['0% busy at 6 AM.', '2% busy at 7 AM.', '4% b... 45.762293 4.822626 \n", "4 ['0% busy at 6 AM.', '0% busy at 7 AM.', '10% ... 45.760801 4.827290 \n", "12 ['1% busy at 4 AM.', '1% busy at 5 AM.', '0% b... 45.760465 4.833427 \n", "8 [] 45.761876 4.827347 \n", "50 ['0% busy at 6 AM.', '2% busy at 7 AM.', '26% ... 45.724180 4.897767 \n", "33 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.767110 4.833619 \n", "103 [] 45.991759 5.025966 \n", "38 [] 45.745637 4.854416 \n", "25 ['0% busy at 6 AM.', '2% busy at 7 AM.', '25% ... 45.763344 4.850456 \n", "6 [] 45.768086 4.828025 \n", "9 [] 45.759756 4.819488 \n", "3 [] 45.778085 4.827952 \n", "34 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.778441 4.856714 \n", "7 [] 45.760419 4.819964 \n", "29 ['0% busy at 6 AM.', '0% busy at 7 AM.', '0% b... 45.773156 4.854833 \n", "27 ['0% busy at 5 AM.', '1% busy at 6 AM.', '0% b... 45.777228 4.845212 \n", "16 [] 45.764807 4.923254 \n", "23 ['0% busy at 4 AM.', '5% busy at 5 AM.', '0% b... 45.767632 4.833463 \n", "83 [] 45.725023 4.938786 \n", "\n", " count \n", "2 1 \n", "1 1 \n", "4 1 \n", "12 1 \n", "8 1 \n", "50 1 \n", "33 1 \n", "103 1 \n", "38 1 \n", "25 1 \n", "6 1 \n", "9 1 \n", "3 1 \n", "34 1 \n", "7 1 \n", "29 1 \n", "27 1 \n", "16 1 \n", "23 1 \n", "83 1 " ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tourisme_rating.head(50)" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
    " ], "text/plain": [ "" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from folium import plugins\n", "from folium.plugins import HeatMap\n", "HeatMap(data=tourisme_rating[['latitude', 'longitude', 'total_ratings']].groupby(['latitude', 'longitude']).sum().reset_index().values.tolist(), radius=20, max_zoom=17).add_to(tourisme_map)\n", "tourisme_map" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Découvrons le meilleur moment pour visiter le zoo de Lyon" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'[\"[\\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'11% busy at 9 AM.\\', \\'42% busy at 10 AM.\\', \\'78% busy at 11 AM.\\', \\'78% busy at 12 PM.\\', \\'59% busy at 1 PM.\\', \\'68% busy at 2 PM.\\', \\'85% busy at 3 PM.\\', \\'69% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'6% busy at 9 AM.\\', \\'18% busy at 10 AM.\\', \\'19% busy at 11 AM.\\', \\'7% busy at 12 PM.\\', \\'6% busy at 1 PM.\\', \\'28% busy at 2 PM.\\', \\'51% busy at 3 PM.\\', \\'30% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'9% busy at 9 AM.\\', \\'17% busy at 10 AM.\\', \\'20% busy at 11 AM.\\', \\'16% busy at 12 PM.\\', \\'14% busy at 1 PM.\\', \\'22% busy at 2 PM.\\', \\'28% busy at 3 PM.\\', \\'21% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'5% busy at 9 AM.\\', \\'10% busy at 10 AM.\\', \\'13% busy at 11 AM.\\', \\'14% busy at 12 PM.\\', \\'19% busy at 1 PM.\\', \\'37% busy at 2 PM.\\', \\'44% busy at 3 PM.\\', \\'23% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'8% busy at 9 AM.\\', \\'16% busy at 10 AM.\\', \\'19% busy at 11 AM.\\', \\'16% busy at 12 PM.\\', \\'13% busy at 1 PM.\\', \\'18% busy at 2 PM.\\', \\'21% busy at 3 PM.\\', \\'11% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'8% busy at 9 AM.\\', \\'17% busy at 10 AM.\\', \\'17% busy at 11 AM.\\', \\'12% busy at 12 PM.\\', \\'17% busy at 1 PM.\\', \\'31% busy at 2 PM.\\', \\'33% busy at 3 PM.\\', \\'20% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\', \\'0% busy at 6 AM.\\', \\'0% busy at 7 AM.\\', \\'0% busy at 8 AM.\\', \\'4% busy at 9 AM.\\', \\'17% busy at 10 AM.\\', \\'38% busy at 11 AM.\\', \\'46% busy at 12 PM.\\', \\'38% busy at 1 PM.\\', \\'61% busy at 2 PM.\\', \\'100% busy at 3 PM.\\', \\'67% busy at 4 PM.\\', \\'0% busy at 5 PM.\\', \\'0% busy at 6 PM.\\', \\'0% busy at 7 PM.\\', \\'0% busy at 8 PM.\\', \\'0% busy at 9 PM.\\', \\'0% busy at 10 PM.\\', \\'0% busy at 11 PM.\\']\"]'" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "str(list(HL10[HL10.full_name == 'Lyon Zoo'].hours))" ] }, { "cell_type": "code", "execution_count": 91, "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", "
    6 AM7 AM8 AM9 AM10 AM11 AM12 PM1 PM2 PM3 PM4 PM5 PM6 PM7 PM8 PM9 PM10 PM11 PM
    Le dimancheNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le lundiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le mardiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le mercrediNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le jeudiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le vendrediNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    Le samendiNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
    \n", "
    " ], "text/plain": [ " 6 AM 7 AM 8 AM 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM 3 PM 4 PM 5 PM \\\n", "Le dimanche NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le lundi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le mardi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le mercredi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le jeudi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le vendredi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "Le samendi NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", " 6 PM 7 PM 8 PM 9 PM 10 PM 11 PM \n", "Le dimanche NaN NaN NaN NaN NaN NaN \n", "Le lundi NaN NaN NaN NaN NaN NaN \n", "Le mardi NaN NaN NaN NaN NaN NaN \n", "Le mercredi NaN NaN NaN NaN NaN NaN \n", "Le jeudi NaN NaN NaN NaN NaN NaN \n", "Le vendredi NaN NaN NaN NaN NaN NaN \n", "Le samendi NaN NaN NaN NaN NaN NaN " ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base = visit_planner('Lyon Zoo')\n", "base" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "for hour in list(base):\n", " base[hour] = re.findall('...%.{0,20} '+str(hour), str(list(HL10[HL10.full_name=='Lyon Zoo'].hours)))\n", " base[hour] = [ re.findall('\\d+', str(i))[0] for i in base[hour] ]\n", " base[hour] = base[hour].astype(int)" ] }, { "cell_type": "code", "execution_count": 93, "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", "
    6 AM7 AM8 AM9 AM10 AM11 AM12 PM1 PM2 PM3 PM4 PM5 PM6 PM7 PM8 PM9 PM10 PM11 PM
    Le dimanche00011427878596885690000000
    Le lundi00061819762851300000000
    Le mardi0009172016142228210000000
    Le mercredi0005101314193744230000000
    Le jeudi0008161916131821110000000
    Le vendredi0008171712173133200000000
    Le samendi00041738463861100670000000
    \n", "
    " ], "text/plain": [ " 6 AM 7 AM 8 AM 9 AM 10 AM 11 AM 12 PM 1 PM 2 PM 3 PM \\\n", "Le dimanche 0 0 0 11 42 78 78 59 68 85 \n", "Le lundi 0 0 0 6 18 19 7 6 28 51 \n", "Le mardi 0 0 0 9 17 20 16 14 22 28 \n", "Le mercredi 0 0 0 5 10 13 14 19 37 44 \n", "Le jeudi 0 0 0 8 16 19 16 13 18 21 \n", "Le vendredi 0 0 0 8 17 17 12 17 31 33 \n", "Le samendi 0 0 0 4 17 38 46 38 61 100 \n", "\n", " 4 PM 5 PM 6 PM 7 PM 8 PM 9 PM 10 PM 11 PM \n", "Le dimanche 69 0 0 0 0 0 0 0 \n", "Le lundi 30 0 0 0 0 0 0 0 \n", "Le mardi 21 0 0 0 0 0 0 0 \n", "Le mercredi 23 0 0 0 0 0 0 0 \n", "Le jeudi 11 0 0 0 0 0 0 0 \n", "Le vendredi 20 0 0 0 0 0 0 0 \n", "Le samendi 67 0 0 0 0 0 0 0 " ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n7+9LjybjT8K7KVX3mHE3+L+ztcANMeMf8V/n+0H8nddDDz2S52HOtaV3hIiISOLM+5cT44EZzrn9\nQ44j8o3mt7xeAlzsnGvpjrFBvd4xwLt4XZJv3YXlu+B9ATPNOXdU0PlEJFzqOisiIiISYWY2GK8L\n/5l4LajP747Xdc79mx1dYXdl+U3E/1c3IhJxuhmQiIiISLQdinedZCVwrttx91wRkdCo66yIiIiI\niIgESi2aIiIiIiIiEigVmiIiIiIiIhIoFZoiIiIiIiISKBWaIiIiIiIiEigVmiIiIiIiIhIoFZoi\nIiIiIiISKBWaIiIiIiIiEigVmiIiIiIiIhIoFZoiIiIiIiISKBWaIiIiIiIiEigVmiIiIiIiIhIo\nFZoiIiIiIiISKBWaIiIiIiIiEigVmiIiIiIiIhIoFZoiIiIiIiISKBWaIiIiIiIiEigVmiIiIiIi\nIhKotLADRJgLO4CIiIiIiEiILN4EtWiKiIiIiIhIoFRoioiIiIiISKBUaIqIiIiIiEigVGiKiIiI\niIhIoFRoioiIiIiISKBUaIqIiIiIiEigVGiKiIiIiIhIoFRoioiIiIiISKBUaIqIiIiIiEigVGiK\niIiIiIhIoFRoioiIiIiISKBUaIqIiIiIiEigVGiKiIiIiIhIoFRoioiIiIiISKBUaIqIiIiIiEig\nVGiKiIiIiIhIoFRoioiIiIiISKBUaIqIiIiIiEigVGiKiIiIiIhIoFRoioiIiIiISKBUaIqIiIiI\niEigVGiKiIiIiIhIoFRoioiIiIiISKDSwg4QaTW1YSdIXIb/K49a9qjmhsbsm9ZWhBwkMV165AAw\n9o15ISdJ3GUn7g1Au8ufCzlJYraNORuIXm7Ykf34P34ccpLEvHXJkQAU3PF2yEkSV3L7cQCknz82\n5CSJ2f70ZQD0GflWyEkSt3zk8d6TqJ2LvgHn0Mhlj2puiG72qOaG6GbPaLmUVIumiIiIiIiIBEqF\npoiIiIiIiARKhaaIiIiIiIgESoWmiIiIiIiIBEqFpoiIiIiIiARKhaaIiIiIiIgESoWmiIiIiIiI\nBEqFpoiIiIiIiARKhaaIiIiIiIgESoWmiIiIiIiIBEqFpoiIiIiIiARKhaaIiIiIiIgESoWmiIiI\niIiIBEqFpoiIiIiIiARKhaaIiIiIiIgESoWmiIiIiIiIBEqFpoiIiIiIiAQqLewAsrPxzzzFosWL\n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\nEZFAqdAUERERERGRQKnQFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQR\nEREREZFAqdAUERERERGRQKnQFBERERERkUCZcy7sDFGlHSciIiIiIv/NLN6EtN2Z4hunpjbsBInL\n8H/lUcse1dzQmL26rCbkIInJ7JwBwNLFG0NOkri+/XIBKCneEHKSxBT07wpA1abqkJMkLqtLJhDd\n4/zTqStCTpK4ww/qDcDVz30RcpLEPHz2AQC8//nykJMk7qhD+3hPonYu+gacQyOXPaq5IbrZo5ob\nops9o+VSUl1nRUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQ\nKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERE\nRCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVE\nRERERCRQKjRFREREREQkUGlhBwAwswrnXM4uLHcBcLBz7vIAMgwHrnXOnWxmPwQGO+fu+arrTdT4\nZ55i0eLF9Cso4OLzL9zdL/+VRDV7VHMDfPDRB3z48QfU1dVz+SWXkZvbNexIcZWVbeKxxx9mzZpS\nHrjvj5gZzzz7BJs2bSI1NZWLLriEnJwOYcdsVtnmTTz++ChWrynl/nsfIzU1lYkTn6V01Qq6devB\nOWdfQEpKcn9vN33mdF557WUAVq1exUU/u4iDDzok5FRtE6XjfMXyEt56/UXMjF579eW4E3/MSy8+\nTflm7zj/8VkXk52d8Onua9cxI42fHtaXjZXbqKt3vDRtBWcdkke3Du35y6dLKKvaHnbEuNauKeX1\nl/9KiqXQJbc7J//oPP7z8TssmDuTTp1zOeX080lNTQ07Zquiei6Kam6Ibvao5oboZo9qbgg3e3J/\nMgqJc+7lMIrM4pLF1Gzdyp0j76C2tpZFxYt2d4RdFtXsUc0NsHHjBubOm8MtN9zK7TffntQfvgGy\ns3O48vLr6du3PwArVi4jLTWNa666kcO+9W0mT/k05ITxZWflcPnl15Hftx8AS5eVUFdfx1VX3sie\ne/Zi1uwZISds3f7D9ue2m27ntptup2vXruy775CwI7VJ1I7zzp1zOf/iq7loxLVUVm5h2dJFpKWl\ncuHPf8X+Bx5G0YzPw44Y19INVbwweTl/n7qCegf/mr6ShWu2hB2rVV277cEFP7+On/3vrwFYVbqM\npYsXcP7Pr6XHnr2ZP3d6yAlbF9VzUVRzQ3SzRzU3RDd7VHND+NmTttA0s/5m9qaZTTWzD81s71bm\nf8rMzogZrvB/DjezSWb2opeAzOwAACAASURBVJnNM7O/mpn5007wx30EnB6z7AVmNuZr2rS45i9Y\nwLAhQwEYNmQoCxYu3N0RdllUs0c1N8DMWUXUO8edf/g94/8ynvr6+rAjtSg9PZ3s7OzG4c6duzQ+\nr66uJDsr+Vp5GqSnp5OdtSP7+vVr6dWzNwC998qjpCQ6J521a9fQqWNnMjMyw47SJlE7znM6dCIt\nLR3gS63cNTXVZGZmN7dYUsjrksVZh/ThwL7ee7NqW13IidomtrUyNS2NDevX0LdfIQAF/QaxcnlJ\nWNHaLKrnoqjmhuhmj2puiG72qOaG8LMnbaEJjAOucM4dBFwLPPoV1nUAcDUwGOgHHGlmGcATwCnA\nd4A9v1rcr66qqorMTO/DX3ZWFhWVFSEnaruoZo9qboCyzWXU1tZyyw230r5dO6ZMmxx2pITkZHeg\ntq6WO35/Mx9+9B77739Q2JHabI8ePVlUPB+ABQvnUl1dFXKitvt86mQOPvDgsGO0WVSP89WrVlBV\nWUFe3wHU1tYx5uGRTP7sA/bZ94CwozWrclsdT368mBemLKdvbhbdctqHHSkhC+bN5PFH7qCqcguu\nvp527TMAaJ+Rydaa6pDTtS6q56Ko5oboZo9qbohu9qjmhvCzJ2WhaWY5wBHARDObDjwO9PwKq/zc\nObfCOVcPTAfygb2BEufcQuecA55tQ64RZjbFzKaMGzfuK8RpXlZWFtXV3gmxsqpqpxaUZBfV7FHN\nDV72wXvvA8C+g4dQWloacqLEzJ03i8yMLG6/9S5OOvE0/u/dN8OO1Ga9e+fRs+dejHrkD9RUV9Mh\np2PYkdrsi+nTOOjA6BT1UTzOq6sqef3V5zn19PMoXjSXjIwMLr96JEd/72Q++eidsOM1q67esb3O\n4RwsXldJt5x2YUdKSOHew/jFFbeT06EzlpLCtq01AGzdWkP7CLTeR/VcFNXcEN3sUc0N0c0e1dwQ\nfvakLDTxcpU55/aPeezTyjK1/nL4XWNjz5JbY57XseMmSC6RUM65cc65g51zB48YMSKRRdtkUGEh\nRbNnAVA0q4jCgYWBv8bXJarZo5obYNDAQpYtXwbA0mVL6d69R8iJEuQcWf4fvOycDlTXRKdVEODE\nE07lqituIDsnh333HRZ2nDYp21xGamoqHZL0pkvNidpxXl9fx98njue4E04np0MncK6xu2xWVk7S\ntq6lp1rj815dMimrTt6b/zRVW7sja0ZGBs7Vs7TE6x62ZPE89updEFa0NovquSiquSG62aOaG6Kb\nPaq5IfzsSVloOufKgRIzOxO8wtHM9mtlsSVAw9f0pwLprcw/Dygws/7+8Dm7GDcw/Qv6kZ6ezi0j\nb8dSUhg4YEDYkdosqtmjmhugb14+6entuOOuOyheXMyhhxwadqQW1dXVMnrMfZSWLmfsow+QlZ3D\n6jWlPDTqHl57/SW+++3vhR0xrrq6WsaMvY+VpSt49LEHWbKkmFGj7+GRMfeRmppGfn7/1leSBKZO\nmxqpbrMQveN8dtE0Slcs5Z03X2L8Ew/Srn171q1bxfgnHuTf777CId86KuyIzerdJYv/Oawv5xya\nR2VNLas313DysF707ZrNiUN60r978l5DXbxwDn/584P85c8PUlGxhSHDDiUvfyBPP3E/q1etoHCf\n1j4+hC+q56Ko5oboZo9qbohu9qjmhvCzm9drNFxmVg/E9od6EHgJeAyvy2w68Jxz7o4my12A/+9N\nzGwP4F94xfO7eNd35sT+2xJ/mTHAFOfcU2Z2AvAwsB74CBji/3uTxvW2ENtRU/sVtzwEGX5jbtSy\nRzU3NGavLqsJOUhiMjt71zgtXbwx5CSJ69svF4CS4g0hJ0lMQX/vjqpVm5Kz1aslWV287olRPc4/\nnboi5CSJO/wg74ZUVz/3RchJEvPw2d51qu9/vjzkJIk76tA+3pOonYu+AefQyGWPam6Ibvao5obo\nZvdyW7zJSfF/NJ1z8VpWT2hluaeAp/zna4DDYibf5I+fBEyKWebymOdv4l2rGXe9IiIiIiIikpik\n7DorIiIiIiIi0aVCU0RERERERAKlQlNEREREREQCpUJTREREREREAqVCU0RERERERAKlQlNERERE\nREQCpUJTREREREREAqVCU0RERERERAKlQlNEREREREQCpUJTREREREREAqVCU0RERERERAKlQlNE\nREREREQCpUJTREREREREAqVCU0RERERERAKlQlNEREREREQCpUJTREREREREAqVCU0RERERERAJl\nzrmwM0SVdpyIiIiIiPw3s3gT1KIpIiIiIiIigUoLO0Ck1dSGnSBxGf6vPGrZo5obGrOXr68KOUhi\nOnbLAmD5kk0hJ0lcn/wuACxauD7kJIkZMLAbAKXLykJOkrheeZ0BWFtaHnKSxPTo1RGAeXPXhpwk\ncXvv0wOAT6euCDlJYg4/qDcAC+avCzlJ4goHdfeeRO1c9A04h0Yue1RzQ3SzRzU3RDd7RsulpFo0\nRUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQk\nUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQKjRFRERE\nREQkUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQaWEH\nkJ2Nf+YpFi1eTL+CAi4+/8Kw4yQkqtmjmruuro4/PvEom8s306+gH2ef+dOwI7WorGwTj/7xIVav\nXsVDD/yRVatW8sKLfwVg06YNDD/q+3zvmONDTvllS5Ys5p//fA5LMfL6FPCjH53Nu+++QdGs6eTm\nduXcn15Eampy/iktK9vEmMceYvXqUkY9+DipqanMmTuLN996lXpXz5mnn0PfvgVhx2zWprJNPDLm\nAVatLmXMqCdITU0FYOq0yTz3wrPcd8+okBM2b+nSxfzr5ecxM/L65PPt7xzLhAl/wszo1KkL5/70\nf0lJSb7veFcsL+Gt11/EzOi1V1+OO/HHvPTi05Rv3kRqaio/PutisrNzwo7ZrKVLG96jKeT1yeeU\nU87gkTH3smrVCq799W/o3n2PsCO2SVTPRVHNDdHNHtXcEN3sUc0N4WYP5WxnZhVhvG5LzCzfzGb5\nzw82s9G7O0NxyWJqtm7lzpF3UFtby6LiRbs7wi6Lavao5gaYMm0yffrkcfP1t7Jt2zaWLlsadqQW\nZWfncNUVN5Cf3w+A3r3z+NXVN/Grq2+iV6/eDB2yf8gJm5eb25XLLruOq668iS0V5RQXL2Dhonlc\nfZWXe2bRF2FHjCs7O4drrry+cZ9v27aNDz56j6uvvJ5rr7k5aYtMgJzsHH59zY0U5PffafyUqZ+T\n26VrSKla16VLV355ybVccfmNbKnYwuayjVx88ZVcftkNdM3tzty5M8OO2KzOnXM5/+KruWjEtVRW\n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\nRERERETky0IpNJ1z8brsntDKciObDOc0N805dytwazPLD28yPBXYL2bUSH/8JGBSS1lERERERESk\neclyjaaIiIiIiIh8Q6jQFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQR\nEREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp\n0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERER\nkUCZcy7sDFGlHSciIiIiIv/NLN6EtN2Z4hunpjbsBInL8H/lUcse1dzQmH1r+daQgySmfcf2AGxe\nVxlyksR16p4NwPpVW0JOkphuPTsAsLa0POQkievRqyMAJcUbQk6SmIL+XQF4/r3ikJMk7qyj+wPw\nwKtzQk6SmF+fPBiAOXPWhJwkcYMH7+E9idq56BtwDo1c9qjmhuhmj2puiG72jJZLSXWdFRERERER\nkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBER\nERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQ\nFBERERERkUCp0BQREREREZFAqdAUERERERGRQKnQFBERERERkUCp0BQREREREZFAqdAUERERERGR\nQKXtykJmVuGcywk6TJjMbBJwrXNuipm9DvzUOVe2u3OMf+YpFi1eTL+CAi4+/8Ld/fJfSVSzRzX3\n2nVrue23t9GrZy/S0tK45YZbwo7Uok2bNvHg6PspXbWScWP/TGpqKq+98SrTpk+lW9du/PyiX5CW\ntkt/kr52m8o2MWrMA6xaVcqjo5+gqqqKRx59kNTUNDIzM7nk55fTrl27sGN+yaayTTwy5gFWrS5l\nzKgnSE1NBWDqtMk898Kz3HfPqJATxle2eROPPz6K1WtKuf/ex0hNTWXixGcpXbWCbt16cM7ZF5CS\nknzflW5ct4r333gOM6NTl+4MPfgoPv6/fwBQUb6JoQd/l2GHHh1yyvgWTn2f0kVFHHXW5QCsXDiT\nmZP+xYk/vy3kZPEtXbqYl19+gZQUo3fvfI499gc8+eRYUlNTycjI5LzzRpCennzvz6aiei6Kam6I\n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\ncB/ym9zgKFksXzyPmZ+/B0CnLt3oXbA3K5bMp1d+cn8wGfKdkxufv//8GAYc+B0GHPidxuF9jzwx\nrGitmjlzKsuXL+G11/4OwPHH/5C33noZM8jKyuGccy4KOWHronouimpuiG72qOaG6GaPam4IP7vt\naFBMYCGzeiD21nQPAi8Bj+F1mU0HnnPO3dFkuZFAhXPufn+48d+kxE4zs/2B0UAnvGL4YefcE7H/\ngsRf5hC8azUz8YrMY4EzgIOdc5f782QCD+N17TVgiXPuZH/8eGAwMB0YAFzp/3uTJf461rewGxw1\ntS1MTlIZ/ncLUcse1dzQmH1r+daQgySmfcf2AGxeV9nKnMmnU3eva8j6VVtCTpKYbj07ALC2tDzk\nJInr0cvrylpSvCHkJIkp6O9dv/f8e8UhJ0ncWUd7xfYDr84JOUlifn2ydxOwOXPWhJwkcYMH+z1H\nonYu+gacQyOXPaq5IbrZo5obopvdyx33jnG7+u8/4nW5PaGV5UY2Gc5pbppzbjreNZRNlx/eZHgy\ncFiT2Z7yHw3zVAO/aGZd1cDZcXLmN78FIiIiIiIi0prI/h9NERERERERSU4qNEVERERERCRQKjRF\nREREREQkUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQ\nKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERE\nRCRQKjRFREREREQkUCo0RUREREREJFAqNEVERERERCRQ5pwLO0NUaceJiIiIiMh/M4s3QS2aIiIi\nIiIiEqi0sANEWk1t2AkSl+H/yqOWPaq5oTF7xcaqkIMkJic3C4DSZWUhJ0lcr7zOAJQUbwg5SWIK\n+ncFor3P16/aEnKSxHTr2QGApYs3hpwkcX375QKwYP66kJMkpnBQdwA2ra0IOcn/t3ffYVLVZ//H\n3/cuq9voTRBh6RZAVGKvMcXkMZrmT4wpGp8Qn8QajQ01RIOxoIgQCzZSSKzRJGqMhsQSokZUqrQF\nVspSLIu47LKyy/37Y87isOxsgQNnvubzui4uZ2fOzL7nuHDOPefMbOt17FacuhDatuhTsA0Nrj3U\nbgi3PdRuCLc9v+lRUkc0RUREREREJFYaNEVERERERCRWGjRFREREREQkVho0RUREREREJFYaNEVE\nRERERCRWGjRFREREREQkVho0RUREREREJFYaNEVERERERCRWGjRFREREREQkVho0RUREREREJFYa\nNEVERERERCRWGjRFREREREQkVho0RUREREREJFYaNEVERERERCRWGjRFREREREQkVho0RURERERE\nJFYaNEVERERERCRWBLykpQAAIABJREFUbZIOkG09+JsplC5dSr++fTnne2cnndMqobaH2l1TU8Md\nd06gpqaGwoICzv/RheTl5SWdldH69RVMums8a9aUM+G2e8jNzeXt+XN59m9PscW3cNrXz6BPn75J\nZzZq/YcV3HPPBNasLWfczXeRm5vLo4/+jvLVK+nSpRtnjDyLnJzse90u5HVesb6CCZNuZfXqcu68\n416qqqqYeOdt5Oa2oaCggHN/cB577LFH0pnbWb++grvuuZ21a8u59Za7MTN+87t7qaioIDc3l++f\ndS7FxW2TztzOO+8s5cknH8Jycui9Twlf+co3mTjpZlavXsmll/yMrl27J52YUUVFBeMnjmP16nLu\nnnQf7s4vb/4FK1et4Lprx9K9+15JJ7ZIqNuiULsh3PZQuyHc9lC7Idn2rNgzMrPKHbzfKWZ2RUwN\nY8zs0ujydWb2uTgetzWWLFvKppoaxo65jtraWkqXlO7uhB0Wanuo3QCz5syif78BXH3FNfTvN4DZ\nc2YlndSkoqJiLr7gMkpK+gHw8ccf89K//slFF1zGpRdflbUDD0BRYTHnnfdTSvqk2t9Zvoy6LXVc\neMEV7LVXT+bOy851H/I6Ly4q5qcXX0G/vv0BKCoq4oqfXsPll46mT+8SZs1+K+HCxhUVFXPBeZfR\np0+qe+Wq5bTJbcPFF17B4YcdzeszXkm4sHEdO3bmRz/6KRecfwUfVW5g7do1nPP98zhw2CFJpzWr\nuLiYyy+5cuvPSm5uLhecdzEjDjk04bKWC3VbFGo3hNseajeE2x5qNyTfnhWD5o5y9z+7+4274HGv\ndfe/x/24zVm4aBHDhgwFYNiQoSxavHh3J+ywUNtD7Qbo3q07tbW1AGysqsrKoyTp8vLyKCoq3vr1\n0mWl5FgOd0waxwNT7qGmZlOCdU3Ly8ujqLBo69fvvbeOnj16AdBr794sW5adG53g13lae05Oztaj\nxlu2bMnao1Sp7k9+Vjp06Lj1cnX1RooKixu7W+LatWu/9YyInJxccnKMtm3bJVzVMg1/VsyM9u3a\nJ1jUeqFui0LthnDbQ+2GcNtD7Ybk27N20DSz/mb2rJm9YWYvm9m+jSxzlplNii53NbPHzez16M9R\n0fVbj1RGX881s5Lo8mgzW2hmfwcGpy0zxcy+uYuf4naqqqooKCgAoKiwkMqNO3SgNxGhtofaDbBX\n971YsrSUy0dfxrJlSxk4YGDSSa2yYcMGPvxwPRecdyn9+w3gpX+9kHRSi3Xv1oPSJQsBWLR4PtXV\nVQkXtUzI6xxg6bIlXDf2GhYsfJsunbsmndMixUVtqa2r5bpfXMXL//onw4dn9xHC8vIVbNz4EXvt\ntXfSKf9VQt0WhdoN4baH2g3htofaDcm3Z+2gCUwGznf3Q4BLgTubWX4CMN7dPwN8A7ivqYXN7BBg\nJHAQ8HXgM80FmdkoM5thZjMmT57cgqfQOoWFhVRXVwOpI1TpR1CyXajtoXYDvDz9JYYeMJSbxt7M\n8AOHM/2V6UkntUpBQQED+g8iJyeHwYP3Z82a8qSTWqxXr9706LE3EybexKbqatoWh3HkJ+R1DtCv\nb3+uHX09Bw8fwb/+/VLSOS0yf8FcCvILufbqG/ifL32Vv097NumkjKqqNvL4H3/PyNPDev/Rp0Go\n26JQuyHc9lC7Idz2ULsh+fasHDTNrBg4EnjUzGYC9wA9mrnb54BJ0fJ/BtqZWVPnEh4DPOHuVe6+\nIbpPk9x9sruPcPcRo0aNatFzaY3BgwYxZ95cAObMncOggYNi/x67SqjtoXYDuKfemwTQtrhtMEfV\n6pX06cvqaNBZseIdOnfuknBR63zppFO58PzLKSou5oADhiWd0yIhr/P608QB8gsKsvqDr7bhTmG0\nYS8qbkv1puz8e1pXV8dvf3cvp3zlNNoFdtrpp0Go26JQuyHc9lC7Idz2ULsh+fasHDRJda139+Fp\nf/ZrwX2OSFt+b3f/CKhl2+eZn3bZY+7eKf379iMvL4/RY67FcnIYOGBA0kktFmp7qN0ARx5+JK/9\n5zV+ceP1TH91OkcecVTSSU2qq6tl/B03s2rVCu6YNI733nuXQYP2ZdxtN/DKq//iuGM+m3RiRnV1\ntUz61S2sKl/JnXfdRlnZEibccSMTJ91Cbm4bSkr6J53YqJDXeW1tLePG38iKlcu5bcLNLF9exk3j\nxnLzrWOZO282Rx5+dNKJjaqrq+WOSbdQXr6CX915K4VFxaxZW874CTfy9DNPcOzRJyad2KhZs2aw\nYsUy/vKXR5k06SaWLStlyq/vYuHCefz+9/czZ252fvgSpH5Wbr71l6xYuZxx429iydJSfnX3Hcyb\nN4d7H7iHN996I+nEZoW6LQq1G8JtD7Ubwm0PtRuSbzf35GctM6t09+IG1/2b1Kmwj5qZAcPcfVaD\nZc4CRrj7eWb2e+Atd78lum24u880s28DJ7v7SDM7GHgd6A90AqYAh5H6NS9vAve4+zgzmwI85e6P\nNZHtbKpt4uYslR/9RpvQ2kPthq3tlR9k55GMTIo7FQJQvnx9wiWt17N3BwCWLXk/4ZLW6du/MxD2\nOn9v9UcJl7ROlx6pE1/eWfpBwiWt16dfJwAWLXw34ZLWGTQ49f7ainXhvM+pXsdu0a5KaNuiT8E2\nNLj2ULsh3PZQuyHc9lS3Zbo5W45oFprZyrQ/PwHOBM4xs1nAPODUDPetn5QvAEaY2Wwzexs4N7r+\ncaBTdErt/wGLANz9TeBhYGa0zMu74omJiIiIiIj8t2mTdACAu2caeE9q5q6dgQ+ix3gPOL2Rx64G\nvpDh+44FxjZy/VnNfF8RERERERHJICsGzR1hZucCZ5H6xFgRERERERHJEtly6myrufvd7j7U3cP5\nrakiIiIiIiL/BYIdNEVERERERCQ7adAUERERERGRWGnQFBERERERkVhp0BQREREREZFYadAUERER\nERGRWGnQFBERERERkVhp0BQREREREZFYadAUERERERGRWGnQFBERERERkVhp0BQREREREZFYadAU\nERERERGRWGnQFBERERERkVhp0BQREREREZFYadAUERERERGRWGnQFBERERERkViZuyfdECqtOBER\nERER+W9mmW5oszsrPnU21SZd0Hr50f/y0NpD7Yat7ZUfVCUc0jrFnQoBWFFWkXBJ6+1T0hEIr72+\n+4O1lQmXtF6n7sVAuOt82qvLEy5pvRMP7w3AM9PLkg1ppS8fVQJA6eL3kg3ZAQMGdkldCG1b9CnY\nhgbXHmo3hNseajeE257f9CipU2dFREREREQkVho0RUREREREJFYaNEVERERERCRWGjRFREREREQk\nVho0RUREREREJFYaNEVERERERCRWGjRFREREREQkVho0RUREREREJFYaNEVERERERCRWGjRFRERE\nREQkVho0RUREREREJFYaNEVERERERCRWGjRFREREREQkVho0RUREREREJFYaNEVERERERCRWGjRF\nREREREQkVho0RUREREREJFYaNEVERERERCRWbXb0jmZW6e7FccbsDDMbA1S6+7gdvH8J8JS7DzGz\nEcB33f2C+Apb5sHfTKF06VL69e3LOd87e3d/+50Sanuo3TU1Ndxx5wRqamooLCjg/B9dSF5eXtJZ\nGa1fX8Gdd49nzZrVjL/1blavXsUjj00FoKLifY4/7vOc+NkvJlzZuFDbK9ZXcPsd4yhfXc7dk+7j\ng4oPuPf+uzAzOnbsxKhz/o+cnOx8vTHUdf7u2nKe/cvvU+u4UzdOOuVbTH3gNt5dV87Z515Jp87d\nkk5s1Hvrynn+qT9glkOHTl059nOn8qeHJ5OTk8ue+QWc/I2zaZO3R9KZjSorW8qTTz6E5Ri99+nL\n1742kmnT/sqcuTPp1KkzZ37r++Tm7vDuzm4T6rYo1G4Itz3Ubgi3PdRuSLY9O/cwYmRmrd66uPuM\nJIbMJcuWsqmmhrFjrqO2tpbSJaW7O2GHhdoeajfArDmz6N9vAFdfcQ39+w1g9pxZSSc1qaiomAvP\nv5ySkn4A9OrVm59cdCU/uehKevbsxdAhwxMuzCzU9uKiYi675Er69+sPQGFBAReefwlXXnYNXbt0\nZdbsmQkXZhbqOu/UpTvf+d9L+fY5lwCwbs1KvnHGDxm8/0EJlzWtY+funPH9Sxh59sUAfFjxPqef\ndTGnn3UR3fbahyWL5iZcmFmnTp358Y9/yoUXXMlHlRtYsmQRi0sXcNGFqZ+V2XPeSjqxWaFui0Lt\nhnDbQ+2GcNtD7Ybk22MdNM2sv5k9a2ZvmNnLZrZvg9tzzKzMzDqkXVdqZt3NrKuZPW5mr0d/jopu\nH2NmD5jZC2a21MwuSLvvaDNbaGZ/BwanXf+Cmd1gZi8CF5rZIWb2YtT1NzPrES13iJnNMrNXgB+n\n3f94M3sqznXTEgsXLWLYkKEADBsylEWLF+/uhB0Wanuo3QDdu3WntrYWgI1VVRQXt024qGl5eXkU\nFRVtd31NzSY2bNhAt27dE6hqmVDbU92fnHhSVFRMUWHqeeTk5JKTm72vNYa6znNzcz+53CaXtu07\nUlTcLsGiltmmOzeXdh06bT3a7b6Fjll6JBagXbv2W8/myMnJobx8BQMHpHY/Bg3an7KyJUnmtUio\n26JQuyHc9lC7Idz2ULsh+fa49zImA+e7+yHApcCd6Te6+xbgT8DXAMzsMKDM3dcCE4Dx7v4Z4BvA\nfWl33Rf4InAo8DMzyzOzQ4CRwEHA14HPNGjp4O7HAXcAE4FvRl0PAGOjZR4ELnD3I+J48jurqqqK\ngoICAIoKC6ncWJlwUcuF2h5qN8Be3fdiydJSLh99GcuWLWXggIFJJ+2QeW/P4YD9hyadsUNCba9Y\nX8G8+XMZEmB7COt88YLZ3Dfpeqo2VlJQsP2wnK2WLJzDlDt/QXVVJfkFRaxeVcbv7r2ZFcsW0b5D\n56TzmrVq1Qo2VlZSUFBIfn4+AAX5BVRXVyVc1rxQt0WhdkO47aF2Q7jtoXZD8u2xDZpmVgwcCTxq\nZjOBe4AejSz6MHB6dHlk9DXA54BJ0X3/DLQzs/pDNE+7e427vwesA7oDxwBPuHuVu2+I7tPw+0Dq\nSOcQ4Pnosa8GeplZe1LD6IvRcr9twXMcZWYzzGzG5MmTm1u81QoLC6murgZSR6jqjzyEINT2ULsB\nXp7+EkMPGMpNY29m+IHDmf7K9KSTdsjMWW8w/MBDks7YISG2b968mfseuJuzv3vONkexQhHCOh+4\n7zD+97xrKG7bntJFc5LOabH+g4dy1o+upqhte5YumkOPvUv49g8uY8B+BzJ35itJ5zWpqmojjz8+\nlTPOOJuCgkI2bdoEwKZNmyjIL0y4rnmhbotC7YZw20PthnDbQ+2G5NvjPKKZA6x39+Fpf/ZrZLlX\ngAFm1hX4KvDHtPsfkXbfvd39o+i2mrT71/HJhxh5Ez0bo/8aMC/tcYe6+xei65u6/3bcfbK7j3D3\nEaNGjWrNXVtk8KBBzJmXeh/MnLlzGDRwUOzfY1cJtT3UbgB3KC5OnRbZtrhtEK/aN1RXV8uaNeX0\n6tU76ZRWC7V9ym/v57PHf469e/ZKOqXVQljntbWbt17eM7+ANm2y9wO60m3TvWcBOTmfvAixxx75\nWf086urq+M1vJ3PKKf+Pdu3a07t3X0pLFwKwaNHbW9/nm81C3RaF2g3htofaDeG2h9oNybfHNmhG\nRxWXmdlpAJZyYCPLOfAEcBsw393fj256Djivfjkza+6THl4CvmZmBdGRz69kWG4h0NXMjogeN8/M\nDnD39cCHZnZ0tNyZLXqiu1D/vv3Iy8tj9JhrsZwcBg4YkHRSi4XaHmo3wJGHH8lr/3mNX9x4PdNf\nnc6RRxyVdFKT6upqmTDxZlatWsHEX41jWdkSFi6cz+BB+yed1qxQ22tra7nltl+yYuVybr39JhYu\nnM+bb87g+Wl/48ZbfsEbb76edGJGoa7zpaVvM/WB8Ux9YDwbKzfQt/9+PPnIfZQtmc/TT/yGRQuy\n80O7ypbM5+Ept/PwlNupqtxAYXFbHp5yO4/8egJlS+az/4GHJZ2Y0cyZM1i+vIw//+VR7ph4E++9\nt47+AwZx+4RfsnLVcoYOPTjpxGaFui0KtRvCbQ+1G8JtD7Ubkm+31Ny3A3c02wKUp111G6kB8i5S\np8zmAQ+5+3WN3HcE8Dpwlrv/OrquC/ArYD9SRyxfcvdzG/7aEjObC5zs7mVmNhr4LvAOsBJ4293H\nmdkLwKXuPiO6z3BS79VsHz327e5+b/Q+zweAKuBvpN7HOcTMjo/uf3ITq8DZVNuqdZYV8qODwaG1\nh9oNW9srPwjriGNxp9TpZivKKhIuab19SjoC4bXXd3+wNpz3f9Tr1D11dD3UdT7t1eUJl7TeiYen\njuw+M70s2ZBW+vJRJQCULn4v2ZAdMGBgl9SF0LZFn4JtaHDtoXZDuO2hdkO47aluy3TzDv9iKXfP\ndDT0pBbcd0bDqOj9l6c3suyYBl8PSbs8lk8+2Cd9meMbfD0TOLaR5d4A0o+6jomufwF4oelnISIi\nIiIiIo3J3s+2FxERERERkSBp0BQREREREZFYadAUERERERGRWGnQFBERERERkVhp0BQREREREZFY\nadAUERERERGRWGnQFBERERERkVhp0BQREREREZFYadAUERERERGRWGnQFBERERERkVhp0BQRERER\nEZFYadAUERERERGRWGnQFBERERERkVhp0BQREREREZFYadAUERERERGRWGnQFBERERERkVhp0BQR\nEREREZFYmbsn3RAqrTgREREREflvZplu0BFNERERERERiVWbpAOCtqk26YLWy4/+l4fWHmo3bG3/\n+KOahENaZ4+2ewKwoqwi4ZLW26ekIwBTpy1OuKR1zjxxIABj/zQ34ZLWG33qECDcdX7spJcTLmm9\nl847BoDcI85IuKR16l75AwADxz6fcEnrLR79+dSF0LZFn4JtaHDtoXZDuO2hdkO47flNj5I6oiki\nIiIiIiKx0qApIiIiIiIisdKgKSIiIiIiIrHSoCkiIiIiIiKx0qApIiIiIiIisdKgKSIiIiIiIrHS\noCkiIiIiIiKx0qApIiIiIiIisdKgKSIiIiIiIrHSoCkiIiIiIiKx0qApIiIiIiIisdKgKSIiIiIi\nIrHSoCkiIiIiIiKx0qApIiIiIiIisdKgKSIiIiIiIrHSoCkiIiIiIiKx0qApIiIiIiIisWqTdIBs\n68HfTKF06VL69e3LOd87O+mcVgm1PdTuek/99Wn+8/p/uO7anyed0qT16yu48+7xrFmzmvG33s3q\n1at45LGpAFRUvM/xx32eEz/7xYQrt/fBu6v517MPY5ZDu45dOPZLI3nh6als3LCenJxcPnvqd8kv\nLE46s0kH9GpPSZdinp65ip4dCzhwn46YwWtL3uf9ypqk87YT+jo/vE9HjizpTE4OPPjaO/zgiBL2\nbl/A9c8tYF3lx0nnbaNLh7aMv+i7lPTsxnHnjmHLFuc7XzqGYw/aj9Xvrefn9z9GXd0WTjr8QL55\n4uFs2FjN1Xc/TNWm7Pq5OX5AF04Y0IWcHGPqjBWcOWIfALoW7cnTb6/hL/PWJFzYvFC3RaF2Q7jt\noXZDuO2hdkOy7Tt1RNPMKuMKSZqZnWVmk6LL55rZd3d3w5JlS9lUU8PYMddRW1tL6ZLS3Z2ww0Jt\nD7W73ubNm3lneVnSGS1SVFTMhedfTklJPwB69erNTy66kp9cdCU9e/Zi6JDhCRc2rkOnbpzynYv4\nyrcvAODdNcvJyW3DyWeez8Bhh1I6742EC5uWY0bnoj0ByM0x9u3Rjr/OLueZWeVZOWRC2Ou8Q0Ee\ng7u15bYXSxn3z1Ler9rMr/61jDdXrk86rVEfVlbxo5sfYN6SFQB0aFvEIfv24wc3TKZ05RqOP3h/\ncnNz+PoJhzLql5P567/f4hsnHJpw9bY6FeYxZK92/OzZBVzzzHwWrKvkmmfmc80z83mnoorXl1ck\nndisULdFoXZDuO2hdkO47aF2Q/LtOnW2Ee5+t7v/Znd/34WLFjFsyFAAhg0ZyqLFi3d3wg4LtT3U\n7nrTXvgHxx19XNIZLZKXl0dRUdF219fUbGLDhg1069Y9garm5eTmpl1uQ0FRu61ff7ypmj0LCpPI\narHBPdqyeO1HAHRrl48DXxzWg2P37UabHEs2LoOQ1/kB3duSY/CT4wZwxkG9MOCjmtqkszLaXFvH\nR1XVW78+oG8v3liwFID/zCtlSP996N29C6Ur17Jli/PavFIO6LdPUrmNGr53B8zg5yftyw8O70P9\nT/WebXLoUJDHmo+y8wWVdKFui0LthnDbQ+2GcNtD7Ybk22MfNM2sv5k9a2ZvmNnLZrZvI8scZ2Yz\n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\nRUREREREJFYaNEVERERERCRWGjRFREREREQkVho0RUREREREJFYaNEVERERERCRWGjRFREREREQk\nVubuSTeESitORERERET+m1mmG3REU0RERERERGKlQVNERERERERipUFTREREREREYqVBU0RERERE\nRGKlQVNERET5bltpAAAKyUlEQVRERERipUFTREREREREYqVBU0RERERERGKlQVNERERERERipUFT\nREREREREYqVBU0RERERERGKlQVNERERERERipUFTREREREREYqVBU0RERERERGKlQVNERERERERi\npUFTREREREREYqVBU0RERERERGKlQVNERERERERipUFTREREREREYqVBU0RERERERGKlQVNERERE\nRERipUFTREREREREYqVBU0RERERERGKlQVNERERERERipUFzB5nZDwEL8U+o7aF2h9weanfI7aF2\nh9weanfI7aF2h9weanfI7aF2h9weanfg7Rlp0Nxxo5IO2AmhtofaDeG2h9oN4baH2g3htofaDeG2\nh9oN4baH2g3htofaDeG2h9oNYbc3SoOmiIiIiIiIxEqDpoiIiIiIiMRKg+aOm5x0wE4ItT3Ubgi3\nPdRuCLc91G4Itz3Ubgi3PdRuCLc91G4Itz3Ubgi3PdRuCLu9UebuSTeIiIiIiIjIp4iOaIqIiIiI\niEisNGimMbMOZvaYmS0ws/lmdkQTy84ysz80uG6KmVWZWdu06yaYmZtZl13UPNjMZqb92WBmF2V7\nd9r3udjM5pnZXDP7g5nlh9BuZhdGzfOaWt/Z0m1mD5jZOjOb2+D6Tmb2vJktjv7bsYnHuNjMNplZ\n+7Trjo+az0m77qDoukt3Yfdp0brfYmYjmnmM3d7dTPst0b8xs83sCTPr0Mh9S8ysOvo7/baZ3W1m\nOdH1bmbXpy3bxcw2m9mkOLpb+jwaLDPGzFZFvXPN7JS0693MBqQte3F0XZP/33ayeR8z+2f07/g8\nM7swhO7o++Sb2X+ifzfmmdnPQ2mPvleumb1lZk8F1l1mZnOirhmhtFsL9luytLtF+y5Z2t7sfks2\ndkffq9l9l2xpt53Yb7EEt6FNdDe735Jk966iQXNbE4Bn3X1f4EBgfmMLmdl+pNbdsWZW1ODmUuDU\naLkc4ARg1a4KdveF7j7c3YcDhwBVwBPZ3h19n72BC4AR7j4EyAVGZlg2a9rNbAjwA+BQUj8nJ5vZ\nwCzvngKc1Mj1VwDT3H0gMC36OpMzgNeBrzW4fg5wetrXI4FZO1y6rSk03j0X+DrwUgseI4luyNz+\nPDDE3YcBi4ArM9x/SfT3ehiwP/DV6PqlwMlpy50GzIsjOIMpNP48Ghof9Z4GPBD9TENqPaf/vf4m\n8HashdurBS5x9/2Aw4Efm9n+GZbNpm6AGuCz7n4gMBw4ycwOz7BstrUDXEiGbWeabOwGOCHanja1\n05xt7S3abyHLuluz70IWtbdmv4Us6obW7buQHe1T2Ln9lqS2oVPYuf2WbNn2x0KDZsTM2gHHAvcD\nuPvH7r4+w+LfAn4LPAec0uC2P/DJzuvxwHRSOz27w4mkfkDfyXB7Nna3AQrMrA1QCJRnWC6b2vcD\nXnX3KnevBV5k+yGmXlZ0u/tLwAeN3HQq8Ovo8q/55B+0bZhZf6AYuJrU4JZuOZBvZt3NzEj9A/vX\nXdnt7vPdfWFz90+qO2rM1P5c9HMD8CrQq5nHqQX+DdS/ilwNzE97RfR04JFYohv//pl+djItP5/U\nz3H9kfkn+eQFlX7Ah8C7MWc2bFjt7m9Glz8itfO9dzP3Sbw76nB3r4y+zIv+NPlhCtnSbma9gP8B\n7mvJ8tnSvSOyob2V+y1EyyTe3Yjm9l2ArGpv6X4LkFXdrdl3AZJt39n9lrTH2a3b0J3db0lbPtFt\nf1w0aH6iH6m/LA9a6rSf+xo5AlXvdOBhUoNCw53XxUDX6FD+GcBDuyq4ESOjpkyyqtvdVwHjSO3w\nrwY+dPfnMiyeTe1zSR2h7GxmhcCXgX0yLJtN3Y3p7u6rIbVzDnTLsNwZpJ7Dy8BgM2u43GOkXl07\nEniT1FGZbJDt3d+nmeE2+hk7kdQryfUeAkZGO/Z1NLOjszuZ2WHAFj7Z+dgArIheTT+D1N+H3dlT\nAhwEvNbMclnTbanTT2cC64Dn3T2U9tuBy6KWZmVRN6SG+efM7A0za/aXpmdJe2v2W4Cs6W6ouX0X\nIDvaW7nfAmRHd6Q1+y5AVrWna+l+CxDeNrReqN0NadD8RBvgYOAudz8I2Egjh+PN7DPAu9Erb9OA\ng23788P/SOofzsNI7eDucma2B6kjZo9muD3ruqPvfyrQF+gJFJnZtxtZLqvao1f4biJ1CuSzpE63\n3O5IZLZ176SRwEPuvoVU82kNbn8kuq5+sMsWWdttZqNJ/dxMzbBI/2jYmA487e7pA+mzwOdJbkPf\nmIuj3nHA6b7tR5o/ROr/xVfJfHpc7MysGHgcuMjdN2RYLOu63b0uOnWqF3BotFPXmKxpN7OTgXXu\n/kYLFs+a7jRHufvBwJdInWp9bIblsqm9RfstkWzq3qq5fZdI1rS3dL8lkjXd0PJ9l0hWte+g0Lah\n9ULtbpQGzU+sBFamvXL8GKl/wBs6A9jXzMqAJUA74BsNlnkIuJ7UK9EtemU3Bl8C3nT3tRluz8bu\nzwHL3P1dd99MahA4spHlsq7d3e9394Pd/VhSp0gsbmSxrOtuxFoz6wEQ/XddwwXMbBgwEHg+ei4j\naXB01t3XAJtJ/QM4bRc3t0g2d5vZ90i91+LMBhvwdEui9zAd5O5j0m9w94+BN4BLSA1S2WB81HuM\nuzd80eQvwHeA5U0MfLEyszxS62aqu/+xiUWzqjtddBrkC2R+j2w2tR8FnBL9XXsI+KyZ/S7DstnU\nDYC7l0f/XUdq5/nQDItmU3tL91sgu7rTNbfvAtnV3tL9FsiubqDF+y6Qhe1pmt1viYS2Da0Xanej\n2iQdkC3cfY2ZrTCzwdE51CfS4A3O0ZuhTwOGRadPYGYnkHr/131pj7U8Olrx9932BJo4IpPF3cuB\nw6PTA6pJrfNtPu0vW9vNrJu7rzOz3qTe3H1Eg9uzsrsRfwa+B9wY/fdPjSxzBjDG3X9Zf4WZLTOz\nPg2Wuxbo5u51qbc8Ji4ru83sJOBy4Dh3r9qJh7oVeNHd38+S9Z2Ru1eb2eWkPvxol7PUCrkfmO/u\nt+3o4+zubgAz6wpsdvf1ZlZAasf2ptY+zu5ud/criT7YysyOBy5190xHepp6nCTWeRGQ4+4fRZe/\nAFzX2sdJYJ03u9/SwsfZ7es8zU6dTZJAe7P7LS2R1Dpvbt+lJRL+eYGW7be0RDDb0AaC6tagua3z\nganRqRxLgbMb3H4ssKp+cIi8BOxf/+pKPXe/Z5eWpon+wfs88MMMi2Rlt7u/ZmaPkXpvXC3wFjC5\nwWJZ2Q48bmadSR0N+7G7VzS4Pau6LfXrVY4HupjZSuBn7n4/qX+oH7HUr/lYzvanlkLqSOCXGlz3\nRHT91veOufu/d1e3mX0NmAh0BZ42s5nu/sVs6W6qHZgE7EnqSCukPpzh3NY+vrvPYzd84lwTz6NV\n3H13vgf5KFKvuM+JTkECuMrdn2ntA+3mboAewK/NLJfUWUePuHujvyqkOQm0xyKB7u7AE9HfxzbA\n79392R15oATam9tvaZEkflZasO/SIruzvYX7LS19rCT+fja379Iiu6N9J/dbmrWrtqE7ud/SrN21\n7Y+LecaztkRERERERERaT+/RFBERERERkVhp0BQREREREZFYadAUERERERGRWGnQFBERERERkVhp\n0BQREREREZFYadAUERERERGRWGnQFBERERERkVhp0BQREREREZFY/X9y/V9DePO2qwAAAABJRU5E\nrkJggg==\n", "text/plain": [ "
    " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(15,7))\n", "sns.heatmap(base, cmap='PuBu', linewidths=0.8, annot=True, annot_kws={'fontsize':8, 'alpha':0.8}, fmt='d', square=True,\n", " cbar=False)\n", "\n", "plt.xticks(np.arange(18), list(base))\n", "plt.title('Heures et fréquence des visiteurs du Zoo de Lyon (%)\\n', weight='semibold')\n", "\n", "b, t = plt.ylim()\n", "b += 0.5\n", "t -= 0.5\n", "plt.ylim(b, t);\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Il semble qu'en semaine c'est une meilleure option pour visiter notre Zoo, cependant le samedi de 14h à 16h ce lieu est très fréquentée." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Du point de vue de l'intelligence de localisation pour la gestion de la destination touristique, les techniques utilisées permettent d'identifier et de localiser clairement les services, établissements et agents intéressés qui contribuent à améliorer l'image et la compétitivité de la ville de Lyon en tant que destination touristique et gastronomique.\n", "\n", "Dans le domaine des implications managériales, les résultats générés par Google Maps et Popular Times nous offrent une option efficace pour conclure des accords B2B pour l'amélioration générale de la qualité des services et créer une expérience de voyage immersive liée aux technologies de marketing de proximité. . D'autre part, son application permet également d'identifier la fréquence à laquelle les lieux et / ou attractions sont visités, la compétition, leur popularité et les sujets pour lesquels ils sont reconnus en fonction des recommandations des utilisateurs.\n", "\n", "Enfin, grâce aux résultats, il est possible d'appliquer ces techniques à n'importe quelle destination dans le monde et à n'importe quel secteur, par exemple en connaissant les heures de congestion dans les banques, les cabinets médicaux, le commerce de détail, etc., bien qu'il soit essentiel que la destination étudiée soit bien présente. dans Google Maps et que son afflux de visiteurs génère suffisamment d'interactions pour être analysées par le biais de la science des données." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Références" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Lyon - La Gastronomie Lyonnaise\n", "\n", "2. The Battle of Neighborhoods: Coursera Capstone Project\n", "\n", "3. MapBox Location Data Visualization library for Jupyter Notebooks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 👍👍
    Partagez vos idées et vos commentaires, écrivez-moi 🌍
    ##" ] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }