From 182b942ae87de626c720b6a4926dbc0b1c07473a Mon Sep 17 00:00:00 2001 From: David Cisneros Date: Mon, 23 Mar 2020 21:03:33 -0600 Subject: [PATCH 1/5] intento 3333 --- module-1/lab-resolving-git-conflicts/your-code/about-me.md | 1 + 1 file changed, 1 insertion(+) diff --git a/module-1/lab-resolving-git-conflicts/your-code/about-me.md b/module-1/lab-resolving-git-conflicts/your-code/about-me.md index 30a999d..f4fc47d 100755 --- a/module-1/lab-resolving-git-conflicts/your-code/about-me.md +++ b/module-1/lab-resolving-git-conflicts/your-code/about-me.md @@ -5,3 +5,4 @@ Ut porttitor iaculis tellus bibendum euismod. Morbi porta, ante nec tempus porta Suspendisse ut malesuada ex. Nulla ultricies nisl et nisi rhoncus sollicitudin. Vestibulum maximus iaculis ligula, nec commodo nunc ullamcorper nec. Duis quis condimentum sapien. Cras vestibulum interdum felis eu auctor. Quisque semper, magna at dapibus faucibus, felis risus semper ligula, id aliquam lectus ligula vel nisi. In hac habitasse platea dictumst. Donec arcu sapien, suscipit ac dictum et, imperdiet id tortor. Maecenas ornare sodales interdum. Mauris dictum felis eu eros vestibulum cursus. Phasellus accumsan, turpis ut malesuada sollicitudin, augue leo venenatis ante, vel convallis tellus diam sit amet lacus. Aenean eu mauris eros. Praesent ante lacus, gravida sit amet tellus nec, laoreet ultrices lacus. Integer commodo semper vestibulum. Fusce felis massa, consectetur facilisis rutrum nec, pulvinar et nisi. Morbi fermentum ultricies tortor, vehicula ultrices eros elementum a. Duis ornare aliquam facilisis. Proin aliquam tincidunt odio vitae dignissim. Sed malesuada lacinia massa, nec blandit urna auctor elementum. Duis auctor non tortor in consequat. Mauris id vestibulum risus. In eget erat sed lacus efficitur viverra sed eu est. Aliquam interdum consequat molestie. Aliquam metus nisi, blandit non semper ut, blandit vel leo. Cras dictum turpis erat, sed iaculis ligula facilisis dapibus. Aliquam posuere dignissim fermentum. Praesent at neque sit amet lectus ornare iaculis. Curabitur id urna quis lorem varius ultrices eu sit amet sapien. Curabitur maximus volutpat suscipit. Proin imperdiet elementum lacus a eleifend. Sed tempor lacus posuere diam vehicula iaculis. +hola lalalala From cdccdbf33a60dd19b195d449e43cd827b33240e2 Mon Sep 17 00:00:00 2001 From: David Cisneros Date: Mon, 23 Mar 2020 21:36:13 -0600 Subject: [PATCH 2/5] Agregue la imagen con el conflicto en las ramas --- .../{ => your-code}/git-conflict.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename module-1/lab-resolving-git-conflicts/{ => your-code}/git-conflict.png (100%) diff --git a/module-1/lab-resolving-git-conflicts/git-conflict.png b/module-1/lab-resolving-git-conflicts/your-code/git-conflict.png similarity index 100% rename from module-1/lab-resolving-git-conflicts/git-conflict.png rename to module-1/lab-resolving-git-conflicts/your-code/git-conflict.png From 30af539c5b7f77e0fa4686783ee145530f349fa4 Mon Sep 17 00:00:00 2001 From: David Cisneros Date: Mon, 23 Mar 2020 21:39:32 -0600 Subject: [PATCH 3/5] Agregue la imagen correcta --- .../your-code/conflicto.png | Bin 0 -> 13488 bytes .../your-code/git-conflict.png | Bin 57775 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 module-1/lab-resolving-git-conflicts/your-code/conflicto.png delete mode 100755 module-1/lab-resolving-git-conflicts/your-code/git-conflict.png diff --git a/module-1/lab-resolving-git-conflicts/your-code/conflicto.png b/module-1/lab-resolving-git-conflicts/your-code/conflicto.png new file mode 100644 index 0000000000000000000000000000000000000000..70ead67dc430d2e2889f335942a28ac419af3d5e GIT binary patch literal 13488 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
  • jfe{RhYv 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 G5BNU{>aAq} From 53071aee36f06aa3ae0496dc2e962d9a691d4a10 Mon Sep 17 00:00:00 2001 From: David Cisneros Date: Mon, 20 Apr 2020 04:28:15 -0500 Subject: [PATCH 4/5] project-done --- .../Untitled-checkpoint.ipynb | 1024 +++++++++++++++++ module-2/python-bi-project/README(project).md | 36 + module-2/python-bi-project/Untitled.ipynb | 1024 +++++++++++++++++ module-2/python-bi-project/eu_gaming.json | 1 + module-2/python-bi-project/gaming_office.html | 363 ++++++ module-2/python-bi-project/paris_gaming.json | 1 + 6 files changed, 2449 insertions(+) create mode 100644 module-2/python-bi-project/.ipynb_checkpoints/Untitled-checkpoint.ipynb create mode 100644 module-2/python-bi-project/README(project).md create mode 100644 module-2/python-bi-project/Untitled.ipynb create mode 100644 module-2/python-bi-project/eu_gaming.json create mode 100644 module-2/python-bi-project/gaming_office.html create mode 100644 module-2/python-bi-project/paris_gaming.json diff --git a/module-2/python-bi-project/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/module-2/python-bi-project/.ipynb_checkpoints/Untitled-checkpoint.ipynb new file mode 100644 index 0000000..fe57539 --- /dev/null +++ b/module-2/python-bi-project/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,1024 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pymongo\n", + "import numpy as np\n", + "import pandas as pd\n", + "from pymongo import MongoClient\n", + "from pandas.io.json import json_normalize\n", + "import folium\n", + "import folium\n", + "from folium import plugins" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "cliente=pymongo.MongoClient('mongodb://localhost:27017')\n", + "db=cliente.Companies" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "paris = db.Companies.find({'$and':[{'offices.city': 'Paris'},{'category_code': 'games_video'},{'offices.latitude':{'$gte':1}},{'offices.longitude':{'$gte':1}}]},\\\n", + " {'name':1, 'offices.city':1, '_id':0, 'offices.latitude':1, 'offices.longitude':1})" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "paris" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "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", + "
    nameoffices
    0Kewego[{'city': 'Paris', 'latitude': 46.227638, 'lon...
    1YOOWALK[{'city': 'Paris', 'latitude': 48.8475487, 'lo...
    2Wevod[{'city': 'Paris', 'latitude': 48.846726, 'lon...
    3Wevod[{'city': 'Paris', 'latitude': 48.846726, 'lon...
    4deltatre[{'city': 'Torino', 'latitude': 45.058576, 'lo...
    5Awdio[{'city': 'Paris', 'latitude': 48.887534, 'lon...
    6Citizenside[{'city': 'Paris', 'latitude': 48.8926988, 'lo...
    7Vibeex[{'city': 'Paris', 'latitude': 48.8566667, 'lo...
    8Owlient[{'city': 'Paris', 'latitude': 48.8308091, 'lo...
    9Preview Networks[{'city': 'Copenhagen', 'latitude': 55.6659813...
    10Mediastroika[{'city': 'Paris', 'latitude': 48.8557544, 'lo...
    112 Minutes[{'city': 'Paris', 'latitude': 48.8502056, 'lo...
    12BetKlub[{'city': 'Paris', 'latitude': 48.8787606, 'lo...
    \n", + "
    " + ], + "text/plain": [ + " name offices\n", + "0 Kewego [{'city': 'Paris', 'latitude': 46.227638, 'lon...\n", + "1 YOOWALK [{'city': 'Paris', 'latitude': 48.8475487, 'lo...\n", + "2 Wevod [{'city': 'Paris', 'latitude': 48.846726, 'lon...\n", + "3 Wevod [{'city': 'Paris', 'latitude': 48.846726, 'lon...\n", + "4 deltatre [{'city': 'Torino', 'latitude': 45.058576, 'lo...\n", + "5 Awdio [{'city': 'Paris', 'latitude': 48.887534, 'lon...\n", + "6 Citizenside [{'city': 'Paris', 'latitude': 48.8926988, 'lo...\n", + "7 Vibeex [{'city': 'Paris', 'latitude': 48.8566667, 'lo...\n", + "8 Owlient [{'city': 'Paris', 'latitude': 48.8308091, 'lo...\n", + "9 Preview Networks [{'city': 'Copenhagen', 'latitude': 55.6659813...\n", + "10 Mediastroika [{'city': 'Paris', 'latitude': 48.8557544, 'lo...\n", + "11 2 Minutes [{'city': 'Paris', 'latitude': 48.8502056, 'lo...\n", + "12 BetKlub [{'city': 'Paris', 'latitude': 48.8787606, 'lo..." + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1=pd.DataFrame(paris)\n", + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "df1=df1.dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib/python3/dist-packages/ipykernel_launcher.py:3: FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead\n", + " This is separate from the ipykernel package so we can avoid doing imports until\n" + ] + }, + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    citylatitudelongitude
    0Paris46.2276382.213749
    1Paris48.8475492.299235
    2Paris48.8467262.321213
    3Paris48.8467262.321213
    4Torino45.0585767.649614
    5LondonNaNNaN
    6LausanneNaNNaN
    7ParisNaNNaN
    8New YorkNaNNaN
    9Paris48.8875342.356288
    10Paris48.8926992.317960
    11Paris48.8566672.350987
    12Paris48.8308092.303220
    13Copenhagen55.66598112.580075
    14LondonNaNNaN
    15BerlinNaNNaN
    16ParisNaNNaN
    17MilanNaNNaN
    18StockholmNaNNaN
    19Paris48.8557542.380833
    20Paris48.8502062.369803
    21Paris48.8787612.363917
    \n", + "
    " + ], + "text/plain": [ + " city latitude longitude\n", + "0 Paris 46.227638 2.213749\n", + "1 Paris 48.847549 2.299235\n", + "2 Paris 48.846726 2.321213\n", + "3 Paris 48.846726 2.321213\n", + "4 Torino 45.058576 7.649614\n", + "5 London NaN NaN\n", + "6 Lausanne NaN NaN\n", + "7 Paris NaN NaN\n", + "8 New York NaN NaN\n", + "9 Paris 48.887534 2.356288\n", + "10 Paris 48.892699 2.317960\n", + "11 Paris 48.856667 2.350987\n", + "12 Paris 48.830809 2.303220\n", + "13 Copenhagen 55.665981 12.580075\n", + "14 London NaN NaN\n", + "15 Berlin NaN NaN\n", + "16 Paris NaN NaN\n", + "17 Milan NaN NaN\n", + "18 Stockholm NaN NaN\n", + "19 Paris 48.855754 2.380833\n", + "20 Paris 48.850206 2.369803\n", + "21 Paris 48.878761 2.363917" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfll=pd.DataFrame()\n", + "for i in range(13):\n", + " dfll=dfll.append(json_normalize(df1.offices[i]), ignore_index=True)\n", + "\n", + " \n", + "dfll" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "df=pd.concat([df1, dfll], axis=1).drop(columns=['offices'])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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", + "
    namecitylatitudelongitude
    0KewegoParis46.2276382.213749
    1YOOWALKParis48.8475492.299235
    2WevodParis48.8467262.321213
    3WevodParis48.8467262.321213
    4deltatreTorino45.0585767.649614
    5AwdioLondonNaNNaN
    6CitizensideLausanneNaNNaN
    7VibeexParisNaNNaN
    8OwlientNew YorkNaNNaN
    9Preview NetworksParis48.8875342.356288
    10MediastroikaParis48.8926992.317960
    112 MinutesParis48.8566672.350987
    12BetKlubParis48.8308092.303220
    13NaNCopenhagen55.66598112.580075
    14NaNLondonNaNNaN
    15NaNBerlinNaNNaN
    16NaNParisNaNNaN
    17NaNMilanNaNNaN
    18NaNStockholmNaNNaN
    19NaNParis48.8557542.380833
    20NaNParis48.8502062.369803
    21NaNParis48.8787612.363917
    \n", + "
    " + ], + "text/plain": [ + " name city latitude longitude\n", + "0 Kewego Paris 46.227638 2.213749\n", + "1 YOOWALK Paris 48.847549 2.299235\n", + "2 Wevod Paris 48.846726 2.321213\n", + "3 Wevod Paris 48.846726 2.321213\n", + "4 deltatre Torino 45.058576 7.649614\n", + "5 Awdio London NaN NaN\n", + "6 Citizenside Lausanne NaN NaN\n", + "7 Vibeex Paris NaN NaN\n", + "8 Owlient New York NaN NaN\n", + "9 Preview Networks Paris 48.887534 2.356288\n", + "10 Mediastroika Paris 48.892699 2.317960\n", + "11 2 Minutes Paris 48.856667 2.350987\n", + "12 BetKlub Paris 48.830809 2.303220\n", + "13 NaN Copenhagen 55.665981 12.580075\n", + "14 NaN London NaN NaN\n", + "15 NaN Berlin NaN NaN\n", + "16 NaN Paris NaN NaN\n", + "17 NaN Milan NaN NaN\n", + "18 NaN Stockholm NaN NaN\n", + "19 NaN Paris 48.855754 2.380833\n", + "20 NaN Paris 48.850206 2.369803\n", + "21 NaN Paris 48.878761 2.363917" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "df=df.drop([4,5,6,7,8,13,14,15,16,17,18])" + ] + }, + { + "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", + "
    namecitylatitudelongitude
    0KewegoParis46.2276382.213749
    1YOOWALKParis48.8475492.299235
    2WevodParis48.8467262.321213
    3WevodParis48.8467262.321213
    4Preview NetworksParis48.8875342.356288
    5MediastroikaParis48.8926992.317960
    62 MinutesParis48.8566672.350987
    7BetKlubParis48.8308092.303220
    8NaNParis48.8557542.380833
    9NaNParis48.8502062.369803
    10NaNParis48.8787612.363917
    \n", + "
    " + ], + "text/plain": [ + " name city latitude longitude\n", + "0 Kewego Paris 46.227638 2.213749\n", + "1 YOOWALK Paris 48.847549 2.299235\n", + "2 Wevod Paris 48.846726 2.321213\n", + "3 Wevod Paris 48.846726 2.321213\n", + "4 Preview Networks Paris 48.887534 2.356288\n", + "5 Mediastroika Paris 48.892699 2.317960\n", + "6 2 Minutes Paris 48.856667 2.350987\n", + "7 BetKlub Paris 48.830809 2.303220\n", + "8 NaN Paris 48.855754 2.380833\n", + "9 NaN Paris 48.850206 2.369803\n", + "10 NaN Paris 48.878761 2.363917" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "df.to_json('paris_gaming.json') " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db.df.insert_many(df.to_dict('records'))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db.df1.insert_many(df1.to_dict('records'))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "df1.to_json('eu_gaming.json') " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "paris2 = db.Companies.find({'$and':[{'offices.city': 'Paris'},{'category_code': 'games_video'},{'offices.latitude':{'$gte':1}},{'offices.longitude':{'$gte':1}}]},\\\n", + " {'name':1, 'offices.city':0, '_id':0, 'offices.latitude':1, 'offices.longitude':1})" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'paris2_2dsphere'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db.df1.create_index([('paris2', '2dsphere')])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "#help(folium.Icon)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = folium.Map(\n", + " location=[48.8032, 2.3511],\n", + " zoom_start=10,\n", + " tiles='Stamen Terrain'\n", + ")\n", + "\n", + "folium.Marker(\n", + " location=[48.8582602, 2.29449905431968],\n", + " popup='Eiffel Tower',\n", + " icon=folium.Icon(icon='glass')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[49.009724, 2.547778],\n", + " popup='Airport',\n", + " icon=folium.Icon(icon='cloud')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[46.227638, 2.213749],\n", + " popup='Kewego',\n", + " icon=folium.Icon(color='red')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.847549, 2.299235],\n", + " popup='YOOWALK',\n", + " icon=folium.Icon(color='green')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.846726, 2.321213],\n", + " popup='Wevod',\n", + " icon=folium.Icon(color='green')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.887534, 2.356288],\n", + " popup='Preview Networks',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.892699, 2.317960],\n", + " popup='Mediastroika',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.856667, 2.350987],\n", + " popup='2 Minutes',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.855754, 2.380833],\n", + " popup='BetKlub',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.850206, 2.369803],\n", + " popup='Unkown',\n", + " icon=folium.Icon(color='red', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.878761, 2.363917],\n", + " popup='Unkown',\n", + " icon=folium.Icon(color='red')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.8584, 2.3024],\n", + " popup='Dream Office',\n", + " icon=folium.Icon(color='cadetblue', icon='star')\n", + ").add_to(m)\n", + "\n", + "m.save('gaming_office.html')\n", + "\n", + "m" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/module-2/python-bi-project/README(project).md b/module-2/python-bi-project/README(project).md new file mode 100644 index 0000000..8fec43a --- /dev/null +++ b/module-2/python-bi-project/README(project).md @@ -0,0 +1,36 @@ +![Paris](https://www.riotgames.com/darkroom/1440/b2b587d91d3c5d2922953ac62fbb2cb8:dfd0d5c2d07f981fb8cda29623b5e54e/paris.jpg) + +# Project: Business Intelligence with Python + +## Overview + +This project needed 5 steps to be done: + +*Step 1 **Define our client** +*Step 2 **Select querys trough pymongo using the companies database** +*Step 3 **Transform data to a dataframe** +*Step 4 **Create new collection using 2dsphere** +*Step 5 **Show trough maps and geoquerys the best place for the client** +*Step 6 (Optional) **Add APIS or webscrapping for more data* + +## Client + +Carlos, 28 years old. CEO of a gaming companie since 2015 want to expand his bussiness to Europe and he has some requirements for his new office there. + +*It needs to be in Paris +*It has to be near the Eiffel Tower +*It has to be near the Sena River +*He dont want another gaming offices near his new office +*Optional... Close to the airport + + +## Description of map + +*Red points are gaming offices without a name +*Green points are gamings offices +*The cloud icon is the airport +*The glass icon is the Eiffel Tower +*The Star icon is the best place to stablish a new office according to our client needs. + +## Author +**David Alfredo Cisneros Diaz** diff --git a/module-2/python-bi-project/Untitled.ipynb b/module-2/python-bi-project/Untitled.ipynb new file mode 100644 index 0000000..fe57539 --- /dev/null +++ b/module-2/python-bi-project/Untitled.ipynb @@ -0,0 +1,1024 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pymongo\n", + "import numpy as np\n", + "import pandas as pd\n", + "from pymongo import MongoClient\n", + "from pandas.io.json import json_normalize\n", + "import folium\n", + "import folium\n", + "from folium import plugins" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "cliente=pymongo.MongoClient('mongodb://localhost:27017')\n", + "db=cliente.Companies" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "paris = db.Companies.find({'$and':[{'offices.city': 'Paris'},{'category_code': 'games_video'},{'offices.latitude':{'$gte':1}},{'offices.longitude':{'$gte':1}}]},\\\n", + " {'name':1, 'offices.city':1, '_id':0, 'offices.latitude':1, 'offices.longitude':1})" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "paris" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "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", + "
    nameoffices
    0Kewego[{'city': 'Paris', 'latitude': 46.227638, 'lon...
    1YOOWALK[{'city': 'Paris', 'latitude': 48.8475487, 'lo...
    2Wevod[{'city': 'Paris', 'latitude': 48.846726, 'lon...
    3Wevod[{'city': 'Paris', 'latitude': 48.846726, 'lon...
    4deltatre[{'city': 'Torino', 'latitude': 45.058576, 'lo...
    5Awdio[{'city': 'Paris', 'latitude': 48.887534, 'lon...
    6Citizenside[{'city': 'Paris', 'latitude': 48.8926988, 'lo...
    7Vibeex[{'city': 'Paris', 'latitude': 48.8566667, 'lo...
    8Owlient[{'city': 'Paris', 'latitude': 48.8308091, 'lo...
    9Preview Networks[{'city': 'Copenhagen', 'latitude': 55.6659813...
    10Mediastroika[{'city': 'Paris', 'latitude': 48.8557544, 'lo...
    112 Minutes[{'city': 'Paris', 'latitude': 48.8502056, 'lo...
    12BetKlub[{'city': 'Paris', 'latitude': 48.8787606, 'lo...
    \n", + "
    " + ], + "text/plain": [ + " name offices\n", + "0 Kewego [{'city': 'Paris', 'latitude': 46.227638, 'lon...\n", + "1 YOOWALK [{'city': 'Paris', 'latitude': 48.8475487, 'lo...\n", + "2 Wevod [{'city': 'Paris', 'latitude': 48.846726, 'lon...\n", + "3 Wevod [{'city': 'Paris', 'latitude': 48.846726, 'lon...\n", + "4 deltatre [{'city': 'Torino', 'latitude': 45.058576, 'lo...\n", + "5 Awdio [{'city': 'Paris', 'latitude': 48.887534, 'lon...\n", + "6 Citizenside [{'city': 'Paris', 'latitude': 48.8926988, 'lo...\n", + "7 Vibeex [{'city': 'Paris', 'latitude': 48.8566667, 'lo...\n", + "8 Owlient [{'city': 'Paris', 'latitude': 48.8308091, 'lo...\n", + "9 Preview Networks [{'city': 'Copenhagen', 'latitude': 55.6659813...\n", + "10 Mediastroika [{'city': 'Paris', 'latitude': 48.8557544, 'lo...\n", + "11 2 Minutes [{'city': 'Paris', 'latitude': 48.8502056, 'lo...\n", + "12 BetKlub [{'city': 'Paris', 'latitude': 48.8787606, 'lo..." + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1=pd.DataFrame(paris)\n", + "df1" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "df1=df1.dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib/python3/dist-packages/ipykernel_launcher.py:3: FutureWarning: pandas.io.json.json_normalize is deprecated, use pandas.json_normalize instead\n", + " This is separate from the ipykernel package so we can avoid doing imports until\n" + ] + }, + { + "data": { + "text/html": [ + "
    \n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
    citylatitudelongitude
    0Paris46.2276382.213749
    1Paris48.8475492.299235
    2Paris48.8467262.321213
    3Paris48.8467262.321213
    4Torino45.0585767.649614
    5LondonNaNNaN
    6LausanneNaNNaN
    7ParisNaNNaN
    8New YorkNaNNaN
    9Paris48.8875342.356288
    10Paris48.8926992.317960
    11Paris48.8566672.350987
    12Paris48.8308092.303220
    13Copenhagen55.66598112.580075
    14LondonNaNNaN
    15BerlinNaNNaN
    16ParisNaNNaN
    17MilanNaNNaN
    18StockholmNaNNaN
    19Paris48.8557542.380833
    20Paris48.8502062.369803
    21Paris48.8787612.363917
    \n", + "
    " + ], + "text/plain": [ + " city latitude longitude\n", + "0 Paris 46.227638 2.213749\n", + "1 Paris 48.847549 2.299235\n", + "2 Paris 48.846726 2.321213\n", + "3 Paris 48.846726 2.321213\n", + "4 Torino 45.058576 7.649614\n", + "5 London NaN NaN\n", + "6 Lausanne NaN NaN\n", + "7 Paris NaN NaN\n", + "8 New York NaN NaN\n", + "9 Paris 48.887534 2.356288\n", + "10 Paris 48.892699 2.317960\n", + "11 Paris 48.856667 2.350987\n", + "12 Paris 48.830809 2.303220\n", + "13 Copenhagen 55.665981 12.580075\n", + "14 London NaN NaN\n", + "15 Berlin NaN NaN\n", + "16 Paris NaN NaN\n", + "17 Milan NaN NaN\n", + "18 Stockholm NaN NaN\n", + "19 Paris 48.855754 2.380833\n", + "20 Paris 48.850206 2.369803\n", + "21 Paris 48.878761 2.363917" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfll=pd.DataFrame()\n", + "for i in range(13):\n", + " dfll=dfll.append(json_normalize(df1.offices[i]), ignore_index=True)\n", + "\n", + " \n", + "dfll" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "df=pd.concat([df1, dfll], axis=1).drop(columns=['offices'])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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", + "
    namecitylatitudelongitude
    0KewegoParis46.2276382.213749
    1YOOWALKParis48.8475492.299235
    2WevodParis48.8467262.321213
    3WevodParis48.8467262.321213
    4deltatreTorino45.0585767.649614
    5AwdioLondonNaNNaN
    6CitizensideLausanneNaNNaN
    7VibeexParisNaNNaN
    8OwlientNew YorkNaNNaN
    9Preview NetworksParis48.8875342.356288
    10MediastroikaParis48.8926992.317960
    112 MinutesParis48.8566672.350987
    12BetKlubParis48.8308092.303220
    13NaNCopenhagen55.66598112.580075
    14NaNLondonNaNNaN
    15NaNBerlinNaNNaN
    16NaNParisNaNNaN
    17NaNMilanNaNNaN
    18NaNStockholmNaNNaN
    19NaNParis48.8557542.380833
    20NaNParis48.8502062.369803
    21NaNParis48.8787612.363917
    \n", + "
    " + ], + "text/plain": [ + " name city latitude longitude\n", + "0 Kewego Paris 46.227638 2.213749\n", + "1 YOOWALK Paris 48.847549 2.299235\n", + "2 Wevod Paris 48.846726 2.321213\n", + "3 Wevod Paris 48.846726 2.321213\n", + "4 deltatre Torino 45.058576 7.649614\n", + "5 Awdio London NaN NaN\n", + "6 Citizenside Lausanne NaN NaN\n", + "7 Vibeex Paris NaN NaN\n", + "8 Owlient New York NaN NaN\n", + "9 Preview Networks Paris 48.887534 2.356288\n", + "10 Mediastroika Paris 48.892699 2.317960\n", + "11 2 Minutes Paris 48.856667 2.350987\n", + "12 BetKlub Paris 48.830809 2.303220\n", + "13 NaN Copenhagen 55.665981 12.580075\n", + "14 NaN London NaN NaN\n", + "15 NaN Berlin NaN NaN\n", + "16 NaN Paris NaN NaN\n", + "17 NaN Milan NaN NaN\n", + "18 NaN Stockholm NaN NaN\n", + "19 NaN Paris 48.855754 2.380833\n", + "20 NaN Paris 48.850206 2.369803\n", + "21 NaN Paris 48.878761 2.363917" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "df=df.drop([4,5,6,7,8,13,14,15,16,17,18])" + ] + }, + { + "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", + "
    namecitylatitudelongitude
    0KewegoParis46.2276382.213749
    1YOOWALKParis48.8475492.299235
    2WevodParis48.8467262.321213
    3WevodParis48.8467262.321213
    4Preview NetworksParis48.8875342.356288
    5MediastroikaParis48.8926992.317960
    62 MinutesParis48.8566672.350987
    7BetKlubParis48.8308092.303220
    8NaNParis48.8557542.380833
    9NaNParis48.8502062.369803
    10NaNParis48.8787612.363917
    \n", + "
    " + ], + "text/plain": [ + " name city latitude longitude\n", + "0 Kewego Paris 46.227638 2.213749\n", + "1 YOOWALK Paris 48.847549 2.299235\n", + "2 Wevod Paris 48.846726 2.321213\n", + "3 Wevod Paris 48.846726 2.321213\n", + "4 Preview Networks Paris 48.887534 2.356288\n", + "5 Mediastroika Paris 48.892699 2.317960\n", + "6 2 Minutes Paris 48.856667 2.350987\n", + "7 BetKlub Paris 48.830809 2.303220\n", + "8 NaN Paris 48.855754 2.380833\n", + "9 NaN Paris 48.850206 2.369803\n", + "10 NaN Paris 48.878761 2.363917" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.reset_index(drop=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "df.to_json('paris_gaming.json') " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db.df.insert_many(df.to_dict('records'))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db.df1.insert_many(df1.to_dict('records'))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "df1.to_json('eu_gaming.json') " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "paris2 = db.Companies.find({'$and':[{'offices.city': 'Paris'},{'category_code': 'games_video'},{'offices.latitude':{'$gte':1}},{'offices.longitude':{'$gte':1}}]},\\\n", + " {'name':1, 'offices.city':0, '_id':0, 'offices.latitude':1, 'offices.longitude':1})" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'paris2_2dsphere'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "db.df1.create_index([('paris2', '2dsphere')])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "#help(folium.Icon)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
    " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = folium.Map(\n", + " location=[48.8032, 2.3511],\n", + " zoom_start=10,\n", + " tiles='Stamen Terrain'\n", + ")\n", + "\n", + "folium.Marker(\n", + " location=[48.8582602, 2.29449905431968],\n", + " popup='Eiffel Tower',\n", + " icon=folium.Icon(icon='glass')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[49.009724, 2.547778],\n", + " popup='Airport',\n", + " icon=folium.Icon(icon='cloud')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[46.227638, 2.213749],\n", + " popup='Kewego',\n", + " icon=folium.Icon(color='red')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.847549, 2.299235],\n", + " popup='YOOWALK',\n", + " icon=folium.Icon(color='green')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.846726, 2.321213],\n", + " popup='Wevod',\n", + " icon=folium.Icon(color='green')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.887534, 2.356288],\n", + " popup='Preview Networks',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.892699, 2.317960],\n", + " popup='Mediastroika',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.856667, 2.350987],\n", + " popup='2 Minutes',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.855754, 2.380833],\n", + " popup='BetKlub',\n", + " icon=folium.Icon(color='green', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.850206, 2.369803],\n", + " popup='Unkown',\n", + " icon=folium.Icon(color='red', icon='info-sign')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.878761, 2.363917],\n", + " popup='Unkown',\n", + " icon=folium.Icon(color='red')\n", + ").add_to(m)\n", + "\n", + "folium.Marker(\n", + " location=[48.8584, 2.3024],\n", + " popup='Dream Office',\n", + " icon=folium.Icon(color='cadetblue', icon='star')\n", + ").add_to(m)\n", + "\n", + "m.save('gaming_office.html')\n", + "\n", + "m" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/module-2/python-bi-project/eu_gaming.json b/module-2/python-bi-project/eu_gaming.json new file mode 100644 index 0000000..d2348b2 --- /dev/null +++ b/module-2/python-bi-project/eu_gaming.json @@ -0,0 +1 @@ +{"name":{"0":"Kewego","1":"YOOWALK","2":"Wevod","3":"Wevod","4":"deltatre","5":"Awdio","6":"Citizenside","7":"Vibeex","8":"Owlient","9":"Preview Networks","10":"Mediastroika","11":"2 Minutes","12":"BetKlub"},"offices":{"0":[{"city":"Paris","latitude":46.227638,"longitude":2.213749}],"1":[{"city":"Paris","latitude":48.8475487,"longitude":2.2992348}],"2":[{"city":"Paris","latitude":48.846726,"longitude":2.321213}],"3":[{"city":"Paris","latitude":48.846726,"longitude":2.321213}],"4":[{"city":"Torino","latitude":45.058576,"longitude":7.649614},{"city":"London","latitude":null,"longitude":null},{"city":"Lausanne","latitude":null,"longitude":null},{"city":"Paris","latitude":null,"longitude":null},{"city":"New York","latitude":null,"longitude":null}],"5":[{"city":"Paris","latitude":48.887534,"longitude":2.356288}],"6":[{"city":"Paris","latitude":48.8926988,"longitude":2.3179601}],"7":[{"city":"Paris","latitude":48.8566667,"longitude":2.3509871}],"8":[{"city":"Paris","latitude":48.8308091,"longitude":2.3032201}],"9":[{"city":"Copenhagen","latitude":55.6659813,"longitude":12.5800751},{"city":"London","latitude":null,"longitude":null},{"city":"Berlin","latitude":null,"longitude":null},{"city":"Paris","latitude":null,"longitude":null},{"city":"Milan","latitude":null,"longitude":null},{"city":"Stockholm","latitude":null,"longitude":null}],"10":[{"city":"Paris","latitude":48.8557544,"longitude":2.3808328}],"11":[{"city":"Paris","latitude":48.8502056,"longitude":2.3698033}],"12":[{"city":"Paris","latitude":48.8787606,"longitude":2.3639174}]}} \ No newline at end of file diff --git a/module-2/python-bi-project/gaming_office.html b/module-2/python-bi-project/gaming_office.html new file mode 100644 index 0000000..b0e63c5 --- /dev/null +++ b/module-2/python-bi-project/gaming_office.html @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + \ No newline at end of file diff --git a/module-2/python-bi-project/paris_gaming.json b/module-2/python-bi-project/paris_gaming.json new file mode 100644 index 0000000..610f281 --- /dev/null +++ b/module-2/python-bi-project/paris_gaming.json @@ -0,0 +1 @@ +{"name":{"0":"Kewego","1":"YOOWALK","2":"Wevod","3":"Wevod","9":"Preview Networks","10":"Mediastroika","11":"2 Minutes","12":"BetKlub","19":null,"20":null,"21":null},"city":{"0":"Paris","1":"Paris","2":"Paris","3":"Paris","9":"Paris","10":"Paris","11":"Paris","12":"Paris","19":"Paris","20":"Paris","21":"Paris"},"latitude":{"0":46.227638,"1":48.8475487,"2":48.846726,"3":48.846726,"9":48.887534,"10":48.8926988,"11":48.8566667,"12":48.8308091,"19":48.8557544,"20":48.8502056,"21":48.8787606},"longitude":{"0":2.213749,"1":2.2992348,"2":2.321213,"3":2.321213,"9":2.356288,"10":2.3179601,"11":2.3509871,"12":2.3032201,"19":2.3808328,"20":2.3698033,"21":2.3639174}} \ No newline at end of file From e913fbec335315518b80e6cae9e88bc765f70391 Mon Sep 17 00:00:00 2001 From: David Cisneros Date: Mon, 20 Apr 2020 04:33:51 -0500 Subject: [PATCH 5/5] update --- module-2/python-bi-project/README(project).md | 47 ++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/module-2/python-bi-project/README(project).md b/module-2/python-bi-project/README(project).md index 8fec43a..8aaa116 100644 --- a/module-2/python-bi-project/README(project).md +++ b/module-2/python-bi-project/README(project).md @@ -6,31 +6,44 @@ This project needed 5 steps to be done: -*Step 1 **Define our client** -*Step 2 **Select querys trough pymongo using the companies database** -*Step 3 **Transform data to a dataframe** -*Step 4 **Create new collection using 2dsphere** -*Step 5 **Show trough maps and geoquerys the best place for the client** -*Step 6 (Optional) **Add APIS or webscrapping for more data* + * Step 1 **Define our client** + + * Step 2 **Select querys trough pymongo using the companies database** + + * Step 3 **Transform data to a dataframe** + + * Step 4 **Create new collection using 2dsphere** + + * Step 5 **Show trough maps and geoquerys the best place for the client** + + * Step 6 (Optional) **Add APIS or webscrapping for more data* ## Client -Carlos, 28 years old. CEO of a gaming companie since 2015 want to expand his bussiness to Europe and he has some requirements for his new office there. + Carlos, 28 years old. CEO of a gaming companie since 2015 want to expand his bussiness to Europe and he has some requirements for his new office there. -*It needs to be in Paris -*It has to be near the Eiffel Tower -*It has to be near the Sena River -*He dont want another gaming offices near his new office -*Optional... Close to the airport +- It needs to be in Paris + +- It has to be near the Eiffel Tower + +- It has to be near the Sena River + +- He dont want another gaming offices near his new office + +- Optional... Close to the airport ## Description of map -*Red points are gaming offices without a name -*Green points are gamings offices -*The cloud icon is the airport -*The glass icon is the Eiffel Tower -*The Star icon is the best place to stablish a new office according to our client needs. + * Red points are gaming offices without a name + + * Green points are gamings offices + + * The cloud icon is the airport + + * The glass icon is the Eiffel Tower + + * The Star icon is the best place to stablish a new office according to our client needs. ## Author **David Alfredo Cisneros Diaz**