From 4eb466830d76c261f102582e108a5ac13adb1b92 Mon Sep 17 00:00:00 2001
From: Yousen59 <155991677+Yousen59@users.noreply.github.com>
Date: Mon, 12 Feb 2024 13:34:46 +0000
Subject: [PATCH] Add files via upload
---
Lab05.ipynb | 1060 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1060 insertions(+)
create mode 100644 Lab05.ipynb
diff --git a/Lab05.ipynb b/Lab05.ipynb
new file mode 100644
index 0000000..6aa3224
--- /dev/null
+++ b/Lab05.ipynb
@@ -0,0 +1,1060 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "69fb876c",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " lat | \n",
+ " lon | \n",
+ " date | \n",
+ " city | \n",
+ " country | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 51.481292 | \n",
+ " -0.451011 | \n",
+ " 05/14/2014 09:07 | \n",
+ " West Drayton | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 51.474005 | \n",
+ " -0.450999 | \n",
+ " 05/14/2014 09:22 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 51.478199 | \n",
+ " -0.446081 | \n",
+ " 05/14/2014 10:51 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 51.478199 | \n",
+ " -0.446081 | \n",
+ " 05/14/2014 11:24 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 51.474146 | \n",
+ " -0.451562 | \n",
+ " 05/14/2014 11:38 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " lat lon date city country\n",
+ "0 51.481292 -0.451011 05/14/2014 09:07 West Drayton United Kingdom\n",
+ "1 51.474005 -0.450999 05/14/2014 09:22 Hounslow United Kingdom\n",
+ "2 51.478199 -0.446081 05/14/2014 10:51 Hounslow United Kingdom\n",
+ "3 51.478199 -0.446081 05/14/2014 11:24 Hounslow United Kingdom\n",
+ "4 51.474146 -0.451562 05/14/2014 11:38 Hounslow United Kingdom"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd, numpy as np, matplotlib. pyplot as plt\n",
+ "\n",
+ "df = pd.read_csv('D:/anaconda working/text/summer-travel-gps-full.csv')\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "de684cfb",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " city country\n",
+ "0 West Drayton United Kingdom\n",
+ "1 Hounslow United Kingdom\n",
+ "2 Hounslow United Kingdom\n",
+ "3 Hounslow United Kingdom\n",
+ "4 Hounslow United Kingdom\n",
+ "... ... ...\n",
+ "1754 Munich Germany\n",
+ "1755 Munich Germany\n",
+ "1756 Munich Germany\n",
+ "1757 Munich Germany\n",
+ "1758 Munich Germany\n",
+ "\n",
+ "[1759 rows x 2 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q1 \n",
+ "df = pd.read_csv('D:/anaconda working/text/summer-travel-gps-full.csv')\n",
+ "selected_columns = df[['city', 'country']]\n",
+ "\n",
+ "print(selected_columns)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "083176d7",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0 West Drayton\n",
+ "1 Hounslow\n",
+ "2 Hounslow\n",
+ "3 Hounslow\n",
+ "4 Hounslow\n",
+ "Name: city, dtype: object\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q2 \n",
+ "first_five_cities = df['city'].head(5)\n",
+ "print(first_five_cities)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "54b18035",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "lat 51.478199\n",
+ "lon -0.446081\n",
+ "date 05/14/2014 10:51\n",
+ "city Hounslow\n",
+ "country United Kingdom\n",
+ "Name: 2, dtype: object\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q3\n",
+ "third_row = df.loc[2]\n",
+ "print(third_row)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "a602ee6e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "United Kingdom\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q4 \n",
+ "first_country = df.loc[0, 'country']\n",
+ "print(first_country)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "2103552a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " city date\n",
+ "0 West Drayton 05/14/2014 09:07\n",
+ "1 Hounslow 05/14/2014 09:22\n",
+ "2 Hounslow 05/14/2014 10:51\n",
+ "3 Hounslow 05/14/2014 11:24\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q5\n",
+ "first_four_rows = df.loc[0:3, ['city', 'date']]\n",
+ "print(first_four_rows)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "6774a8ac",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-0.446081\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q6\n",
+ "value = df.iloc[2, 1]\n",
+ "print(value)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "b32a0c7e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " lat lon date city country\n",
+ "0 51.481292 -0.451011 05/14/2014 09:07 West Drayton United Kingdom\n",
+ "300 41.377091 2.151175 05/20/2014 03:18 Barcelona Spain\n",
+ "600 50.052338 19.946220 05/31/2014 21:10 Krakow Poland\n",
+ "900 48.561181 9.059672 06/09/2014 15:12 Tübingen Germany\n",
+ "1200 41.378301 2.187443 06/17/2014 16:37 Barcelona Spain\n",
+ "1500 42.208201 20.735993 06/30/2014 08:27 Prizren Kosovo\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q7\n",
+ "every_300th_row = df.iloc[::300]\n",
+ "print(every_300th_row)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "e7045728",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " lat | \n",
+ " lon | \n",
+ " date | \n",
+ " city | \n",
+ " country | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 173 | \n",
+ " 41.044556 | \n",
+ " 28.983286 | \n",
+ " 07/08/2014 16:44 | \n",
+ " Istanbul | \n",
+ " Turkey | \n",
+ "
\n",
+ " \n",
+ " 174 | \n",
+ " 41.008992 | \n",
+ " 28.968268 | \n",
+ " 07/08/2014 20:03 | \n",
+ " Istanbul | \n",
+ " Turkey | \n",
+ "
\n",
+ " \n",
+ " 175 | \n",
+ " 41.043487 | \n",
+ " 28.985488 | \n",
+ " 07/08/2014 22:18 | \n",
+ " Istanbul | \n",
+ " Turkey | \n",
+ "
\n",
+ " \n",
+ " 176 | \n",
+ " 40.977637 | \n",
+ " 28.823879 | \n",
+ " 07/09/2014 09:03 | \n",
+ " Istanbul | \n",
+ " Turkey | \n",
+ "
\n",
+ " \n",
+ " 177 | \n",
+ " 48.357110 | \n",
+ " 11.791346 | \n",
+ " 07/09/2014 13:20 | \n",
+ " Munich | \n",
+ " Germany | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " lat lon date city country\n",
+ "173 41.044556 28.983286 07/08/2014 16:44 Istanbul Turkey\n",
+ "174 41.008992 28.968268 07/08/2014 20:03 Istanbul Turkey\n",
+ "175 41.043487 28.985488 07/08/2014 22:18 Istanbul Turkey\n",
+ "176 40.977637 28.823879 07/09/2014 09:03 Istanbul Turkey\n",
+ "177 48.357110 11.791346 07/09/2014 13:20 Munich Germany"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df = pd.read_csv('D:/anaconda working/text/summer-travel-gps-simplified.csv')\n",
+ "df.tail()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "e353887a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0 False\n",
+ "1 False\n",
+ "2 False\n",
+ "3 False\n",
+ "4 False\n",
+ " ... \n",
+ "173 False\n",
+ "174 False\n",
+ "175 False\n",
+ "176 False\n",
+ "177 True\n",
+ "Name: city, Length: 178, dtype: bool\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q9\n",
+ "is_munich = df['city'] == 'Munich'\n",
+ "print(is_munich)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "dca0edb9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " lat lon date city country\n",
+ "24 41.303911 2.105931 05/18/2014 22:35 El Prat de Llobregat Spain\n",
+ "25 41.289946 2.064590 05/18/2014 23:04 Viladecans Spain\n",
+ "126 41.306752 2.097624 06/12/2014 17:19 El Prat de Llobregat Spain\n",
+ "127 41.304333 2.072728 06/12/2014 17:49 El Prat de Llobregat Spain\n",
+ "131 41.358460 2.128701 06/13/2014 11:35 Hospitalet de Llobregat Spain\n",
+ "138 41.294761 2.059722 06/20/2014 22:15 Viladecans Spain\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q10\n",
+ "mask = (df['country'] == 'Spain') & (df['city'] != 'Barcelona')\n",
+ "cities_in_spain_not_barcelona = df[mask]\n",
+ "\n",
+ "print(cities_in_spain_not_barcelona)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "26a72cf6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " lat lon date city country\n",
+ "139 44.821164 20.289821 06/21/2014 01:59 Belgrade Serbia\n",
+ "140 44.820414 20.463465 06/21/2014 18:44 Belgrade Serbia\n",
+ "141 44.761583 19.577904 06/22/2014 07:58 Slepčević Serbia\n",
+ "177 48.357110 11.791346 07/09/2014 13:20 Munich Germany\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q11\n",
+ "mask = (df['city'] == 'Munich') | (df['country'] == 'Serbia')\n",
+ "selected_rows = df[mask]\n",
+ "print(selected_rows)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "352450e8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of observations west of the prime meridian: 24\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q12\n",
+ "observations_west_of_prime_meridian = df[df['lon'] < 0].shape[0]\n",
+ "print(\"Number of observations west of the prime meridian:\", observations_west_of_prime_meridian)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "fbf4dc06",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " lat lon date city country\n",
+ "62 50.273632 18.729429 06/02/2014 06:39 Gliwice Poland\n",
+ "114 48.282940 8.199630 06/10/2014 13:33 Gutach Germany\n",
+ "115 48.389029 8.021342 06/10/2014 13:48 Gengenbach Germany\n",
+ "152 40.187825 20.079303 07/04/2014 17:42 Gjirokastër Albania\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q13\n",
+ "mask = df['city'].str.startswith('G')\n",
+ "cities_starting_with_g = df[mask]\n",
+ "print(cities_starting_with_g)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "bf9e8755",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "unique_cities: 91\n",
+ "unique_countries: 15\n",
+ "missing_values_number: 0\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q14\n",
+ "unique_cities = df['city'].nunique()\n",
+ "unique_countries = df['country'].nunique()\n",
+ "print(\"unique_cities:\",unique_cities)\n",
+ "print(\"unique_countries:\",unique_countries)\n",
+ "\n",
+ "missing_values = df.isnull().sum()\n",
+ "total_missing_values = missing_values.sum()\n",
+ "print(\"missing_values_number:\",total_missing_values)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "99a63a07",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Albania\n",
+ "151 Berat\n",
+ "152 Gjirokastër\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Bosnia and Herzegovina\n",
+ "142 Sarajevo\n",
+ "143 Sarajevo\n",
+ "144 Mostar\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Croatia\n",
+ "145 Ploče\n",
+ "146 Split\n",
+ "147 Dubrovnik\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Czech Republic\n",
+ "65 Novy Bohumin\n",
+ "66 Hranice\n",
+ "67 Prerov\n",
+ "68 Ústí nad Orlicí\n",
+ "69 Kojice\n",
+ "70 Sadská\n",
+ "71 Prague\n",
+ "72 Prague\n",
+ "73 Prague\n",
+ "74 Prague\n",
+ "75 Úvaly\n",
+ "76 Poříčany\n",
+ "77 Kolin\n",
+ "78 Kutna Hora\n",
+ "79 Kutna Hora\n",
+ "80 Kutna Hora\n",
+ "81 Kutna Hora\n",
+ "82 Nové Dvory (Kutná Hora District)\n",
+ "83 Kolin\n",
+ "84 Český Brod\n",
+ "85 Prague\n",
+ "86 Prague\n",
+ "87 Prague\n",
+ "88 Prague\n",
+ "89 Prague\n",
+ "90 Prague\n",
+ "91 Mýto\n",
+ "92 Plzen\n",
+ "93 Blatnice\n",
+ "94 Rozvadov\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Germany\n",
+ "95 Kümmersbruck\n",
+ "96 Winkelhaid\n",
+ "97 Kammerstein\n",
+ "98 Ellhofen\n",
+ "99 Obersulm\n",
+ "100 Stuttgart\n",
+ "101 Stuttgart\n",
+ "102 Wernau\n",
+ "103 Riederich\n",
+ "104 Tübingen\n",
+ "105 Tübingen\n",
+ "106 Tübingen\n",
+ "107 Tübingen\n",
+ "108 Tübingen\n",
+ "109 Rottenburg\n",
+ "110 Horb am Neckar\n",
+ "111 Eutingen im Gäu\n",
+ "112 Freudenstadt\n",
+ "113 Alpirsbach\n",
+ "114 Gutach\n",
+ "115 Gengenbach\n",
+ "116 Offenburg\n",
+ "117 Freiburg\n",
+ "118 Freiburg\n",
+ "119 Freiburg\n",
+ "120 Freiburg\n",
+ "121 Titisee-Neustadt\n",
+ "122 Villingen-Schwenningen\n",
+ "123 Horb am Neckar\n",
+ "124 Kirchentellinsfurt\n",
+ "125 Stuttgart\n",
+ "177 Munich\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Greece\n",
+ "153 Kakavia\n",
+ "154 Dytiki Ellada\n",
+ "155 Dytiki Ellada\n",
+ "156 Dytiki Ellada\n",
+ "157 Dytiki Ellada\n",
+ "158 Dytiki Ellada\n",
+ "159 Dytiki Ellada\n",
+ "160 Peloponnese\n",
+ "161 Athens\n",
+ "162 Athens\n",
+ "163 Athens\n",
+ "164 Attica\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Kosovo\n",
+ "149 Prizren\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Macedonia (FYROM)\n",
+ "150 Ohrid\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Montenegro\n",
+ "148 Kotor\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Poland\n",
+ "45 Zendek\n",
+ "46 Silesian Voivodeship\n",
+ "47 Dabrowa Gornicza\n",
+ "48 Olkusz County\n",
+ "49 Krakow\n",
+ "50 Oswiecim\n",
+ "51 Babice, Oświęcim County\n",
+ "52 Wygiełzów, Lesser Poland Voivodeship\n",
+ "53 Chrzanów County\n",
+ "54 Krakow\n",
+ "55 Krakow\n",
+ "56 Wieliczka\n",
+ "57 Krakow\n",
+ "58 Balice, Lesser Poland Voivodeship\n",
+ "59 Trzebinia\n",
+ "60 Imielin\n",
+ "61 Ruda Slaska\n",
+ "62 Gliwice\n",
+ "63 Tarnowskie Góry County\n",
+ "64 Bytom\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Portugal\n",
+ "1 Lisbon\n",
+ "2 Lisbon\n",
+ "3 Lisbon\n",
+ "4 Lisbon\n",
+ "5 Lisbon\n",
+ "6 Lisbon\n",
+ "7 Lisbon\n",
+ "8 Algueirão-Mem Martins\n",
+ "9 Sintra\n",
+ "10 Sintra\n",
+ "11 Sintra\n",
+ "12 Sintra\n",
+ "13 Lisbon\n",
+ "14 Lisbon\n",
+ "15 Azambuja\n",
+ "16 Santarém\n",
+ "17 Zibreira\n",
+ "18 São Mamede\n",
+ "19 Leiria District\n",
+ "20 Coimbra Municipality\n",
+ "21 Aveiro District\n",
+ "22 Vila Nova de Gaia\n",
+ "23 Maia\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Serbia\n",
+ "139 Belgrade\n",
+ "140 Belgrade\n",
+ "141 Slepčević\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Spain\n",
+ "24 El Prat de Llobregat\n",
+ "25 Viladecans\n",
+ "26 Barcelona\n",
+ "27 Barcelona\n",
+ "28 Barcelona\n",
+ "29 Barcelona\n",
+ "30 Barcelona\n",
+ "31 Barcelona\n",
+ "32 Barcelona\n",
+ "33 Barcelona\n",
+ "34 Barcelona\n",
+ "35 Barcelona\n",
+ "36 Barcelona\n",
+ "37 Barcelona\n",
+ "38 Barcelona\n",
+ "39 Barcelona\n",
+ "40 Barcelona\n",
+ "41 Barcelona\n",
+ "42 Barcelona\n",
+ "43 Barcelona\n",
+ "44 Barcelona\n",
+ "126 El Prat de Llobregat\n",
+ "127 El Prat de Llobregat\n",
+ "128 Barcelona\n",
+ "129 Barcelona\n",
+ "130 Barcelona\n",
+ "131 Hospitalet de Llobregat\n",
+ "132 Barcelona\n",
+ "133 Barcelona\n",
+ "134 Barcelona\n",
+ "135 Barcelona\n",
+ "136 Barcelona\n",
+ "137 Barcelona\n",
+ "138 Viladecans\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "Turkey\n",
+ "165 Istanbul\n",
+ "166 Istanbul\n",
+ "167 Istanbul\n",
+ "168 Istanbul\n",
+ "169 Istanbul\n",
+ "170 Istanbul\n",
+ "171 Istanbul\n",
+ "172 Istanbul\n",
+ "173 Istanbul\n",
+ "174 Istanbul\n",
+ "175 Istanbul\n",
+ "176 Istanbul\n",
+ "Name: city, dtype: object\n",
+ "\n",
+ "United Kingdom\n",
+ "0 West Drayton\n",
+ "Name: city, dtype: object\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q15\n",
+ "grouped_by_country = df.groupby('country')\n",
+ "for country, group in grouped_by_country:\n",
+ " print(country)\n",
+ " print(group['city'])\n",
+ " print()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "f1a7b933",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " lat | \n",
+ " lon | \n",
+ " city | \n",
+ " country | \n",
+ "
\n",
+ " \n",
+ " date | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ " | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 2014-05-14 09:07:00 | \n",
+ " 51.481292 | \n",
+ " -0.451011 | \n",
+ " West Drayton | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 2014-05-14 09:22:00 | \n",
+ " 51.474005 | \n",
+ " -0.450999 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 2014-05-14 10:51:00 | \n",
+ " 51.478199 | \n",
+ " -0.446081 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 2014-05-14 11:24:00 | \n",
+ " 51.478199 | \n",
+ " -0.446081 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ " 2014-05-14 11:38:00 | \n",
+ " 51.474146 | \n",
+ " -0.451562 | \n",
+ " Hounslow | \n",
+ " United Kingdom | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " lat lon city country\n",
+ "date \n",
+ "2014-05-14 09:07:00 51.481292 -0.451011 West Drayton United Kingdom\n",
+ "2014-05-14 09:22:00 51.474005 -0.450999 Hounslow United Kingdom\n",
+ "2014-05-14 10:51:00 51.478199 -0.446081 Hounslow United Kingdom\n",
+ "2014-05-14 11:24:00 51.478199 -0.446081 Hounslow United Kingdom\n",
+ "2014-05-14 11:38:00 51.474146 -0.451562 Hounslow United Kingdom"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dt = pd.read_csv('D:/anaconda working/text/summer-travel-gps-full.csv', index_col='date', parse_dates=True)\n",
+ "dt.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "a9747a37",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "index is unique? True\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q16\n",
+ "is_index_unique = df.index.is_unique\n",
+ "print(\"index is unique?\", is_index_unique)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "681b9413",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " lat lon date city country\n",
+ "0 51.481292 -0.451011 05/14/2014 09:07 West Drayton United Kingdom\n",
+ "1 38.781775 -9.137544 05/14/2014 15:11 Lisbon Portugal\n",
+ "2 38.711050 -9.139739 05/14/2014 16:40 Lisbon Portugal\n",
+ "3 38.715637 -9.120558 05/14/2014 18:25 Lisbon Portugal\n",
+ "4 38.711977 -9.141788 05/14/2014 19:26 Lisbon Portugal\n",
+ ".. ... ... ... ... ...\n",
+ "173 41.044556 28.983286 07/08/2014 16:44 Istanbul Turkey\n",
+ "174 41.008992 28.968268 07/08/2014 20:03 Istanbul Turkey\n",
+ "175 41.043487 28.985488 07/08/2014 22:18 Istanbul Turkey\n",
+ "176 40.977637 28.823879 07/09/2014 09:03 Istanbul Turkey\n",
+ "177 48.357110 11.791346 07/09/2014 13:20 Munich Germany\n",
+ "\n",
+ "[178 rows x 5 columns]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q17\n",
+ "df_unique_index = df[~df.index.duplicated(keep='first')]\n",
+ "print(df_unique_index)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "id": "af99eaf3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "weekday DataFrame:\n",
+ " lat lon date \\\n",
+ "1970-01-01 00:00:00.000000000 51.481292 -0.451011 05/14/2014 09:07 \n",
+ "1970-01-01 00:00:00.000000001 38.781775 -9.137544 05/14/2014 15:11 \n",
+ "1970-01-01 00:00:00.000000002 38.711050 -9.139739 05/14/2014 16:40 \n",
+ "1970-01-01 00:00:00.000000003 38.715637 -9.120558 05/14/2014 18:25 \n",
+ "1970-01-01 00:00:00.000000004 38.711977 -9.141788 05/14/2014 19:26 \n",
+ "... ... ... ... \n",
+ "1970-01-01 00:00:00.000000173 41.044556 28.983286 07/08/2014 16:44 \n",
+ "1970-01-01 00:00:00.000000174 41.008992 28.968268 07/08/2014 20:03 \n",
+ "1970-01-01 00:00:00.000000175 41.043487 28.985488 07/08/2014 22:18 \n",
+ "1970-01-01 00:00:00.000000176 40.977637 28.823879 07/09/2014 09:03 \n",
+ "1970-01-01 00:00:00.000000177 48.357110 11.791346 07/09/2014 13:20 \n",
+ "\n",
+ " city country \n",
+ "1970-01-01 00:00:00.000000000 West Drayton United Kingdom \n",
+ "1970-01-01 00:00:00.000000001 Lisbon Portugal \n",
+ "1970-01-01 00:00:00.000000002 Lisbon Portugal \n",
+ "1970-01-01 00:00:00.000000003 Lisbon Portugal \n",
+ "1970-01-01 00:00:00.000000004 Lisbon Portugal \n",
+ "... ... ... \n",
+ "1970-01-01 00:00:00.000000173 Istanbul Turkey \n",
+ "1970-01-01 00:00:00.000000174 Istanbul Turkey \n",
+ "1970-01-01 00:00:00.000000175 Istanbul Turkey \n",
+ "1970-01-01 00:00:00.000000176 Istanbul Turkey \n",
+ "1970-01-01 00:00:00.000000177 Munich Germany \n",
+ "\n",
+ "[178 rows x 5 columns]\n",
+ "weedend DataFrame:\n",
+ "Empty DataFrame\n",
+ "Columns: [lat, lon, date, city, country]\n",
+ "Index: []\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Q18\n",
+ "df.index = pd.to_datetime(df.index)\n",
+ "weekday_index = df.index[df.index.weekday < 5] \n",
+ "weekend_index = df.index[df.index.weekday >= 5]\n",
+ "weekday_df = df.loc[weekday_index]\n",
+ "weekend_df = df.loc[weekend_index]\n",
+ "print(\"weekday DataFrame:\")\n",
+ "print(weekday_df)\n",
+ "print(\"weedend DataFrame:\")\n",
+ "print(weekend_df)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "id": "c0199fb5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIhCAYAAABE54vcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABvMUlEQVR4nO3de3zP9f//8fvrvZOZzexkGzPHUM5RoXIWoaSodHCq76ejIoV8hAqlT9H5jCTRAZ1JhYoOaIWcmZAttrHZsNn2/P3ht1fe3nuzl6a9cbteLrtcvB+v1/v1fjxe7/e8d9/r/XrNMsYYAQAAAABKzFXWDQAAAADAmYYgBQAAAAAOEaQAAAAAwCGCFAAAAAA4RJACAAAAAIcIUgAAAADgEEEKAAAAABwiSAEAAACAQwQpAAAAAHCIIAXAq+nTp8uyLJUrV05//PGHx/K2bduqQYMGZdCZtGTJElmWpQ8++KBMHt+p7du3q1u3boqIiJBlWbr//vtPuH5OTo6eeOIJNW3aVBUqVFBISIiaNGmiCRMmKCcnx2N9y7J0zz33nKbuy966des0duxYbd++3WNZ//79Vb169X+9pzNF0fdK0VdgYKCio6PVunVrjRo1qtjvbV+TkZGhG264QTExMbIsSz179vS67ksvvaTp06d71P+N/zP27t0rl8ulO++802PZfffdJ8uyNHLkSI9lgwYNkp+fn/bt21fqPZ1p/1cCZxL/sm4AgO/Lzc3Vf//7X7399ttl3coZa8iQIfrpp580depUxcbGKi4uzuu6f/31lzp27KitW7dq8ODBmjRpkiTpm2++0eOPP653331XX331lSpXrvxvtV/m1q1bp3Hjxqlt27YeoWn06NG67777yqaxM8iECRPUrl07FRQUKD093X49Tp48Wa+//rpuuummsm7Rq8cee0zz5s3T1KlTVatWLUVERHhd96WXXlJUVJT69+//7zX4/0VHR+uCCy7Q4sWLPZYtWbJEISEhXpc1adJElSpV+jfaBFBKCFIATqpLly6aNWuWhg0bpsaNG5d1O/+qQ4cOqVy5crIs6x9tZ+3atbroootO+Jv0Irfeeqs2bNigxYsX69JLL7XrnTp1Urdu3dSuXTv169dPCxYs+Ec9nQ6ltb+cqFWr1r/2WL7q4MGDKl++/AnXqVOnji655BL79lVXXaUHHnhAHTt2VP/+/dWoUSM1bNjwdLd6StauXatatWr5dNgr0q5dOz3//PNKTU1VbGyspKNH1NasWaMHHnhAU6ZM0YEDBxQaGipJ2rVrl7Zt26YHHnigLNsGcAr4aB+Ak3rooYcUGRmp4cOHn3C97du3y7KsYj9WY1mWxo4da98eO3asLMvS6tWr1bt3b1WsWFEREREaOnSo8vPztXHjRnXp0kWhoaGqXr26fVTmeIcPH9bQoUMVGxur4OBgtWnTRklJSR7rrVy5UldddZUiIiJUrlw5NW3aVO+9957bOkUfZfzyyy81cOBARUdHq3z58srNzfU6844dO3TzzTcrJiZGQUFBql+/vp5++mkVFhZK+vtjNVu2bNEXX3xhf7yquI+oFfX55ZdfatCgQW4hqsill16qgQMHauHChVq1apXH8ldffVXnnXeegoKCdP7552v27Nluyw8ePKhhw4apRo0aKleunCIiItS8eXO9++67pba/5syZI8uy9PXXX3v09/LLL9vPe9Hj3HDDDapevbqCg4NVvXp13XjjjW4fN5s+fbp69+4t6egPqUX7sOh1VtxH+w4fPqyRI0eqRo0aCgwMVJUqVXT33Xdr//79butVr15d3bt314IFC9SsWTMFBwerXr16mjp16intt+MV7aNFixZpwIABioiIUEhIiHr06KFt27Z5rP/VV1+pQ4cOCgsLU/ny5dW6dWuP/Vj0vfPLL7/ouuuuU6VKlU45TEZEROjVV19Vfn6+Jk+ebNe3bNmiAQMGqE6dOipfvryqVKmiHj16aM2aNfY62dnZCg8P13/+8x+P7W7fvl1+fn566qmnTvj4GRkZuuuuu1SlShUFBgaqZs2aGjVqlP09V/R/yldffaX169fbz/2SJUuK3V716tX1+++/a+nSpfa6x782jhw5olGjRik+Pl5hYWHq2LGjNm7c6LGtkjwXxWnXrp0kufW4dOlS+fv7a9iwYZKk7777zl5WdISq6H5OHnvz5s3q27ev2/8/L7744kl7zMrK0hVXXKHKlSvr559/Pun6AIpHkAJwUqGhofrvf/+rhQsX6ptvvinVbffp00eNGzfWhx9+qNtvv12TJ0/WkCFD1LNnT3Xr1k3z5s1T+/btNXz4cM2dO9fj/g8//LC2bdumN954Q2+88YZ2796ttm3buv2QunjxYrVu3Vr79+/XK6+8oo8++khNmjTR9ddfX2zoGzhwoAICAvT222/rgw8+UEBAQLG97927V61atdKXX36pxx57TB9//LE6duyoYcOG2ecrNWvWTD/88INiY2PVunVr/fDDD/rhhx+8frRv0aJFknTCI1dFy4rWLfLxxx/rueee06OPPqoPPvhAiYmJuvHGG93OjRg6dKhefvllDR48WAsWLNDbb7+t3r17Kz09vdT21zXXXKOYmBhNmzbNY93p06erWbNmatSokaSjPyjXrVtXU6ZM0cKFC/Xkk08qJSVFLVq0UFpamiSpW7dumjBhgiTpxRdftPdht27dit0/xhj17NlT//vf/3TLLbfos88+09ChQ/XWW2+pffv2HsH4t99+0wMPPKAhQ4boo48+UqNGjTRo0CB9++23jvbbiQwaNEgul0uzZs3SlClT9PPPP6tt27ZuwW7mzJnq3LmzwsLC9NZbb+m9995TRESErrjiimJ/iO7Vq5dq166t999/X6+88kqJ+ihOixYtFBcX5zbv7t27FRkZqSeeeEILFizQiy++KH9/f1188cV26KhQoYIGDhyod955R5mZmW7bfOmllxQYGKiBAwd6fdzDhw+rXbt2mjFjhoYOHarPPvtMN998syZNmqRevXpJkuLi4vTDDz+oadOmqlmzpv3cN2vWrNhtzps3TzVr1lTTpk3tdefNm+e2zsMPP6w//vhDb7zxhl577TVt3rxZPXr0UEFBgb2O0+fiWG3atJHL5XL7CN/ixYvVvHlzVa5cWRdeeKFbyFq8eLH8/Px02WWXOXrsdevWqUWLFlq7dq2efvppffrpp+rWrZsGDx6scePGee1v165duvTSS/XHH3/ohx9+0EUXXXTCeQCcgAEAL6ZNm2YkmRUrVpjc3FxTs2ZN07x5c1NYWGiMMaZNmzbmggsusNdPTk42ksy0adM8tiXJjBkzxr49ZswYI8k8/fTTbus1adLESDJz5861a0eOHDHR0dGmV69edm3x4sVGkmnWrJndjzHGbN++3QQEBJjbbrvNrtWrV880bdrUHDlyxO2xunfvbuLi4kxBQYHbvLfeemuJ9s+IESOMJPPTTz+51e+8805jWZbZuHGjXUtMTDTdunU76TbvuOMOI8ls2LDB6zrr1683ksydd95p1ySZ4OBgk5qaatfy8/NNvXr1TO3ate1agwYNTM+ePU/YQ2nsr6FDh5rg4GCzf/9+u7Zu3TojyTz//PNeHzs/P99kZ2ebkJAQ8+yzz9r1999/30gyixcv9rhPv379TGJion17wYIFRpKZNGmS23pz5swxksxrr71m1xITE025cuXMH3/8YdcOHTpkIiIizH/+8x+7VpL9VpyifXTNNde41ZctW2Ykmccff9wYY0xOTo6JiIgwPXr0cFuvoKDANG7c2Fx00UV2reh755FHHilRD0XfK++//77XdS6++GITHBzsdXl+fr7Jy8szderUMUOGDLHrW7duNS6Xy0yePNmuHTp0yERGRpoBAwacsK9XXnnFSDLvvfeeW/3JJ580ksyXX35p147/v+ZELrjgAtOmTRuPetF+uPLKK93q7733npFkfvjhB2OMs+fCmyZNmpjzzjvPvt2wYUMzYsQIY4wxDz30kGnevLm9rEaNGvY2nTz2FVdcYapWrWoyMzPd1r3nnntMuXLlTEZGhtvc77//vklKSjLx8fHmsssuM+np6SedA8CJcUQKQIkEBgbq8ccf18qVKz0+4vVPdO/e3e12/fr1ZVmWunbtatf8/f1Vu3btYq8u1rdvX7fzcRITE9WqVSv7t8FbtmzRhg0b7HMr8vPz7a8rr7xSKSkpHh/rufbaa0vU+zfffKPzzz/f4ze6/fv3lzGm1I/eFTHGSJLHeUgdOnRwuwCFn5+frr/+em3ZskW7du2SJF100UX64osvNGLECC1ZskSHDh1y20Zp7a+BAwfq0KFDmjNnjl2bNm2agoKC1LdvX7uWnZ2t4cOHq3bt2vL395e/v78qVKignJwcrV+//lR2j73fj7/YQO/evRUSEuJxRKFJkyaqVq2afbtcuXI677zz3F5vJ9tvJ3P8uT2tWrVSYmKi/Tpdvny5MjIy1K9fP7d9XlhYqC5dumjFihUeV2ss6eu0JIpeU0Xy8/M1YcIEnX/++QoMDJS/v78CAwO1efNmt+elZs2a6t69u1566SV7G7NmzVJ6evpJryL5zTffKCQkRNddd51bveh5K8nH6E7FVVdd5Xa76Oho0fN9Ks/F8dq1a6dNmzZp9+7dSk9P19q1a9W2bVtJsj9+nJmZqR07dig5Odn+WF9JH/vw4cP6+uuvdc0116h8+fIe36eHDx/Wjz/+6NbTwoULddlll+nyyy/XokWLTnjBDgAlQ5ACUGI33HCDmjVrplGjRunIkSOlss3j38wDAwNVvnx5lStXzqN++PBhj/sXncx9fK3oI1d//fWXJGnYsGEKCAhw+7rrrrskyf4IWZETXVHvWOnp6cWuGx8fby93qugH+uTkZK/rFJ1flZCQ4Fb3ti+O7eW5557T8OHDNX/+fLVr104RERHq2bOnNm/eLKn09tcFF1ygFi1a2B/vKygo0MyZM3X11Ve7Ped9+/bVCy+8oNtuu00LFy7Uzz//rBUrVig6OtpxWCmSnp4uf39/RUdHu9Uty3J7bRSJjIz02EZQUJDb459sv51MSV+n1113ncd+f/LJJ2WMUUZGhtv9S/o6LYkdO3bYr1vp6EcZR48erZ49e+qTTz7RTz/9pBUrVqhx48Yez8t9992nzZs32x81ffHFF9WyZUuvH78rkp6ertjYWI9fCMTExMjf3/+Uvn9K4vjnOygoSJLsuU7luTjesedJLVmyRH5+fmrdurUk2ec+fvfddx7nR5X0sdPT05Wfn6/nn3/eY70rr7xSkuf36fz583Xo0CHdeeed9swA/hmu2gegxCzL0pNPPqlOnTrptdde81heFH6OPwfldP1AJEmpqanF1op+WIqKipIkjRw50j7v4nh169Z1u13SK85FRkYqJSXFo7579263x3aiU6dOevjhhzV//nx16dKl2HXmz59vr3ssb/uiqFdJCgkJ0bhx4zRu3Dj99ddf9lGWHj16aMOGDaW6vwYMGKC77rpL69ev17Zt25SSkqIBAwbYyzMzM/Xpp59qzJgxGjFihF3Pzc096Q+qJxIZGan8/Hzt3bvXLUwZY5SamqoWLVo43ubJ9tvJeHtuateuLenv18rzzz/vdmW9Yx1/ufvSujLizz//rNTUVA0aNMiuzZw5U7feeqt9blqRtLQ0hYeHu9Xat2+vBg0a6IUXXlCFChX0yy+/aObMmSd93MjISP30008yxrjNsmfPHuXn55/S909pOJXn4niXX365/Pz8tGTJEgUFBalZs2aqUKGCJCksLExNmjTR4sWLlZGRIX9/fztklfSx8/Pz5efnp1tuuUV33313sevVqFHD7fbkyZM1Z84cde3aVfPmzVPnzp1POAOAkyNIAXCkY8eO6tSpkx599FGPIyKVK1dWuXLl7CuyFfnoo49OWz/vvvuuhg4dav8g9scff2j58uW69dZbJR39ob9OnTr67bffPH4o/Kc6dOigiRMn6pdffnH77fuMGTNk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AAAADhGkAAAAAMAhghQAAAAAOESQAgAAAACHCFIAAAAA4BBBCgAAAAAcIkgBAAAAgEMEKQAAAABwiCAFAAAAAA4RpAAAAADAIYIUAAAAADhUpkHq22+/VY8ePRQfHy/LsjR//ny35f3795dlWW5fl1xyids6ubm5uvfeexUVFaWQkBBdddVV2rVr1784BQAAAIBzTZkGqZycHDVu3FgvvPCC13W6dOmilJQU++vzzz93W37//fdr3rx5mj17tr7//ntlZ2ere/fuKigoON3tAwAAADhH+Zflg3ft2lVdu3Y94TpBQUGKjY0tdllmZqbefPNNvf322+rYsaMkaebMmUpISNBXX32lK664otR7BgAAAIAyDVIlsWTJEsXExCg8PFxt2rTR+PHjFRMTI0latWqVjhw5os6dO9vrx8fHq0GDBlq+fLnXIJWbm6vc3Fz7dlZWliQpPz9f+fn5kiSXyyWXy6XCwkIVFhba6xbVCwoKZIw5ad3Pz0+WZdnbPbYuyePImbe6v7+/jDFudcuy5Ofn59GjtzozMdNJZzJGlil0qxtXMXXLkrFcJ6gXyjqmF2NZ0gnqlimU3OouybK81wvdezfW0YPrHr17qzMTMzETMzGT15kKCgp87/2pmPoZ/57LTD470/HLvfHpINW1a1f17t1biYmJSk5O1ujRo9W+fXutWrVKQUFBSk1NVWBgoCpVquR2v8qVKys1NdXrdidOnKhx48Z51JOSkhQSEiJJio6OVq1atZScnKy9e/fa61StWlVVq1bVpk2blJmZaddr1qypmJgYrV27VocOHbLr9erVU3h4uJKSktxeQI0aNVJgYKBWrlzp1kPz5s2Vl5en1atX2zU/Pz+1aNFCmZmZ2rBhg10PDg5W48aNlZaWpm3bttn1ihUrqn79+tq9e7fb+WLMxEwnm8m/IE+xGVvtmnG59GdUPZU7kqOo/Tvser5/kFIjaink8H5VOpBi1w8HhigtPFFhB9MVlvN37znB4doXGq9K2akKObTfrmeFRCsrJFqRmTtVLi/Hru8LjVNOcCVV3pcs//y/f+mRFl5NhwMrKD5js6xj/iNNjailApe/qqRtdJvpz6i68ivMZyZmYiZmYiYHM23alOFz709n43suM/nuTDk5f39vnohljo1pZciyLM2bN089e/b0uk5KSooSExM1e/Zs9erVS7NmzdKA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6dKldki68MILFRAQ4LZOSkqK1q5de8IgBQAAAAD/hOMjUpJ03XXXedT69evneDvZ2dnasmWLfTs5OVm//vqrIiIiVK1aNd1///2aMGGC6tSpozp16mjChAkqX768+vbtK+no5ygHDRqkBx54QJGRkYqIiNCwYcPUsGFDdezY8VRGAwAAAICTOqUg9fXXX2vy5Mlav369LMtSvXr1dP/99zsOLytXrlS7du3s20OHDpV0NJRNnz5dDz30kA4dOqS77rpL+/bt08UXX6wvv/xSoaGh9n0mT54sf39/9enTR4cOHVKHDh00ffp0x38cGAAAAABKyvHFJl544QUNGTJE1113nVq2bClJ+vHHH/XBBx/omWee0T333HNaGj2dsrKyVLFixZOeUAac7Z5ISivrFgAAZWxE06iybgEoUyXNBo6PSE2cOFGTJ092C0yDBw9W69atNX78+DMySAEAAACAE44vNpGVlaUuXbp41Dt37mz/YVsAAAAAOJs5DlJXXXWV5s2b51H/6KOP1KNHj1JpCgAAAAB8WYk+2vfcc8/Z/65fv77Gjx+vJUuWuJ0jtWzZMj3wwAOnp0sAAAAA8CEluthEjRo1SrYxy9K2bdv+cVP/Ni42ARzFxSYAAFxsAue6Ur3YRHJycqk1BgAAAABnOsfnSBVJS0tTenp6afYCAAAAAGcER0Fq//79uvvuuxUVFaXKlSsrJiZGUVFRuueee7R///7T1CIAAAAA+JYS/x2pjIwMtWzZUn/++aduuukm1a9fX8YYrV+/XtOnT9fXX3+t5cuXq1KlSqezXwAAAAAocyUOUo8++qgCAwO1detWVa5c2WNZ586d9eijj2ry5Mml3iQAAAAA+JISf7Rv/vz5+t///ucRoiQpNjZWkyZNKvbvSwEAAADA2abEQSolJUUXXHCB1+UNGjRQampqqTQFAAAAAL6sxEEqKipK27dv97o8OTlZkZGRpdETAAAAAPi0EgepLl26aNSoUcrLy/NYlpubq9GjR6tLly6l2hwAAAAA+KISX2xi3Lhxat68uerUqaO7775b9erVkyStW7dOL730knJzc/X222+ftkYBAAAAwFeUOEhVrVpVP/zwg+666y6NHDlSxhhJkmVZ6tSpk1544QUlJCSctkYBAAAAwFeUOEhJUo0aNfTFF19o37592rx5sySpdu3aioiIOC3NAQAA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tWrVyj5HquhB77rrLi1btkxr1651srkS++OPP1SzZk3NnTtXV1999QnXrVOnjm677TYNHz68RNvOyspSxYoVT7qzgLPdE0lpZd0CAKCMjWgaVdYtAGWqpNnA8eXPt27dqgceeMAOUdLRFDd06FBt3br1BPf8Z6ZNm6aYmBh169bthOulp6dr586dp+XCFwAAAAAgnUKQatasmdavX+9RX79+vZo0aVIaPXkoLCzUtGnT1K9fP/n7/31aV3Z2toYNG6YffvhB27dv15IlS9SjRw9FRUXpmmuuOS29AAAAAECJLjZx7EljgwcP1n333actW7bYf/j2xx9/1IsvvqgnnnjitDT51VdfaceOHRo4cKBb3c/PT2vWrNGMGTO0f/9+xcXFqV27dpozZ45CQ0NPSy8AAAAAUKJzpFwulyzL0slWtSzL4wSzMwHnSAFHcY4UAIBzpHCuK2k2KNERqeTk5FJrDAAAAADOdCUKUomJiae7DwAAAAA4Y5zSH+T9888/tWzZMu3Zs8ftWu7S0XOoAAAAAOBs5jhITZs2TXfccYcCAwMVGRkpy7LsZZZlEaQAAAAAnPUcB6lHHnlEjzzyiEaOHCmXy/HV0wEAAADgjOc4CR08eFA33HADIQoAAADAOctxGho0aJDef//909ELAAAAAJwRHH+0b+LEierevbsWLFighg0bKiAgwG35M888U2rNAQAAAIAvchykJkyYoIULF6pu3bqS5HGxCQAAAAA42zkOUs8884ymTp2q/v37n4Z2AAAAAMD3OT5HKigoSK1btz4dvQAAAADAGcFxkLrvvvv0/PPPn45eAAAAAOCM4PijfT///LO++eYbffrpp7rgggs8LjYxd+7cUmsOAAAAAHyR4yAVHh6uXr16nY5eAAAAAOCM4DhITZs27XT0AQAAAABnDMfnSAEAAADAuc7xEakaNWqc8O9Fbdu27R81BAAAAAC+znGQuv/++91uHzlyRElJSVqwYIEefPDB0uoLAAAAAHyW4yB13333FVt/8cUXtXLlyn/cEAAAAAD4ulI7R6pr16768MMPS2tzAAAAAOCzSi1IffDBB4qIiCitzQEAAACAz3L80b6mTZu6XWzCGKPU1FTt3btXL730Uqk2BwAAAAC+yHGQ6tmzp9ttl8ul6OhotW3bVvXq1SutvgAAAADAZzkOUmPGjDkdfQAAAADA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06ZNU/369VWuXDnVq1dPL730ktd9VbduXcXHx2vJkiV2bcmSJbr66qtVq1YtLV++3K3erl07SUd/eHvooYdUpUoVhYSE6OKLL3bbhiQtX75cl19+uYKDg5WQkKDBgwcrJyfHay/Tpk1TxYoVtWjRomKXFxYW6v3339dVV11l14wxmjJlikaNGqVevXqpQYMGeuutt3Tw4EHNmjXL62OVRL9+/TRt2jS32vTp09WvXz+PdZcuXaqLLrpIQUFBiouL04gRI9xCe9u2bTV48GA99NBDioiIUGxsrMeRmM2bN+vyyy9XuXLldP755xe7H4YPH67zzjtP5cuXV82aNTV69GgdOXJE0tHXl8vlcgvFkvT8888rMTFRxpgSzV29enU9++yzuvXWW1WxYsUS3ccbPz8/xcbG2l8VKlSQv7+/ffuVV17RpZde6nafKVOmqHr16m61E72m8/LydM8999hHY6pXr66JEyfay31lv54uU6dOVUZGhubPn6/WrVsrMTFRl1566SmH4OXLlysrK0tvvPGGmjZtqho1aqh9+/aaMmWKqlWrJqn4jxnPnz/f7f+qsWPHqkmTJnr77bdVvXp1VaxYUTfccIPb/505OTm69dZbVaFCBcXFxenpp5/26GfmzJlq3ry5QkNDFRsbq759+2rPnj2Sjn7/165dW//73//c7rN27Vq5XC5t3bpVkhQZGalWrVrp3XffPaV9ApwrCFIAitW+fXs1btxYc+fOtWsul0vPPfec1q5dq7feekvffPONHnroIUlSSEiIbrjhBo8fpKdNm6brrrvO7YjIsR566CF9+OGHeuutt/TLL7+odu3auuKKK5SRkWH/dj4sLExTpkxRSkqKrr/+eo9tzJ07V1WrVtWjjz5q/9a+yMGDB/W///1Pb7/9tr799lvt2LHD7Tf6r7/+ukaNGqXx48dr/fr1mjBhgkaPHq233nrL675p27atFi9ebN9evHix2rZtqzZt2tj1vLw8/fDDD3aQGjBggJYtW6bZs2dr9erV6t27t7p06aLNmzdLktasWaMrrrhCvXr10urVqzVnzhx9//33uueee4rt4X//+5+GDRumhQsXqlOnTsWus3r1au3fv1/Nmze3a8nJyUpNTVXnzp3tWlBQkNq0aeMWArt27aoKFSqc8Ot4V111lfbt26fvv/9ekvT9998rIyNDPXr0cFvvzz//1JVXXqkWLVrot99+08svv6w333xTjz/+uNt6b731lkJCQvTTTz9p0qRJevTRR+0f6gsLC9WrVy/5+fnpxx9/1CuvvFLsR5FCQ0M1ffp0rVu3Ts8++6xef/11TZ48WdLRANSxY8diX7NFH3ktLe+8885J9+c777xTKo91stf0c889p48//ljvvfeeNm7cqJkzZ9pB7Ezbr6fi448/VsuWLXX33XercuXKatCggSZMmKCCggJ7nQkTJpz0+fruu+8kSbGxscrPz9e8efP+cUjcunWr5s+fr08//VSffvqpli5dqieeeMJe/uCDD2rx4sWaN2+evvzySy1ZssTjXKa8vDw99thj+u233zR//nwlJyerf//+ko6e6zZw4ECP52bq1Km67LLLVKtWLbt20UUX2TMC8MIAOKf169fPXH311cUuu/766039+vW93ve9994zkZGR9u2ffvrJ+Pn5mT///NMYY8zevXtNQECAWbJkSbH3z87ONgEBAeadd96xa3l5eSY+Pt5MmjTJrlWsWNFMmzbthHMkJiaayZMnu9WmTZtmJJktW7bYtRdffNFUrlzZvp2QkGBmzZrldr/HHnvMtGzZ0utjvfbaayYkJMQcOXLEZGVlGX9/f/PXX3+Z2bNnm1atWhljjFm6dKmRZLZu3Wq2bNliLMuy90uRDh06mJEjRxpjjLnlllvM//3f/7kt/+6774zL5TKHDh1ym3HEiBEmLi7OrF69+oT7ZN68ecbPz88UFhbatWXLlhlJHr3cfvvtpnPnzvbtXbt2mc2bN5/wq0hycrKRZJKSksz9999vBgwYYIwxZsCAAWbIkCEmKSnJSDLJycnGGGMefvhhU7duXbe+XnzxRVOhQgVTUFBgjDGmTZs25tJLL3XrsUWLFmb48OHGGGMWLlxo/Pz8zM6dO+3lX3zxhZFk5s2b53WfTJo0yVx44YX27Tlz5phKlSqZw4cPG2OM+fXXX41lWXavTrVp08bcd999HvWsrKyT7s+srCyP+40ZM8Y0btzY621jjJk8ebJJTEy0b5/sNX3vvfea9u3bu+3/Ir66X0tT3bp1TVBQkBk4cKBZuXKleffdd01ERIQZN26cvU56evpJn6+DBw/a6z/88MPG39/fREREmC5duphJkyaZ1NRUe/m0adNMxYoV3fqYN2+eOfbHsDFjxpjy5cu7vQ4efPBBc/HFFxtjjDlw4IAJDAw0s2fPduszODi42NdckZ9//tlIMgcOHDDGGLN7927j5+dnfvrpJ2PM0f9zo6OjzfTp093u9+yzz5rq1aufbHcC5zT/MktwAHyeMcbtt8eLFy/WhAkTtG7dOmVlZSk/P1+HDx9WTk6OQkJCdNFFF+mCCy7QjBkzNGLECL399tuqVq2aLr/88mK3v3XrVh05ckStW7e2awEBAbroootK7bP55cuXd/sta1xcnP0xl71792rnzp0aNGiQbr/9dnud/Pz8E35Eq127dsrJydGKFSu0b98+nXfeeYqJiVGbNm10yy23KCcnR0uWLFG1atVUs2ZNvf/++zLGeJwrlZubq8jISEnSqlWrtGXLFrejEsYYFRYWKjk5WfXr15ckPf3008rJydHKlStVs2bNE85+6NAhBQUFFXsE4Pja8c/1qZ4vMmjQILVs2VITJkzQ+++/rx9++MHjPLv169erZcuWbo/XunVrZWdna9euXfbHoRo1auR2v2Ofu/Xr16tatWqqWrWqvbxly5Ye/XzwwQeaMmWKtmzZouzsbOXn5yssLMxe3rNnT91zzz2aN2+ebrjhBk2dOlXt2rXz+KjcPxUaGur1qGxpKslrun///urUqZPq1q2rLl26qHv37vYRyjNtv56KwsJCxcTE6LXXXpOfn58uvPBC7d69W0899ZQeeeQRSVJERIQiIiJKvM3x48dr6NCh+uabb+wjeRMmTNC3336rhg0blng71atXd3udHPua37p1q/Ly8tyej4iICNWtW9dtG0lJSRo7dqx+/fVXZWRk2BcN2rFjh84//3zFxcWpW7dumjp1qi666CJ9+umnOnz4sHr37u22neDg4DP2HC/g38JH+wB4tX79etWoUUOS9Mcff+jKK69UgwYN9OGHH2rVqlV68cUXJck+N0KSbrvtNvtjI9OmTdOAAQO8fpTH/P+PwZzsh/p/IiAgwO22ZVn24xb9gPH666/r119/tb/Wrl2rH3/80es2a9eurapVq2rx4sVavHix2rRpI+noR3xq1KihZcuWafHixWrfvr39OH5+flq1apXb46xfv17PPvusvc5//vMft+W//fabNm/e7BYEL7vsMhUUFOi999476exRUVE6ePCg8vLy7FpsbKwkKTU11W3dPXv2qHLlyvbtU/lonyQ1aNBA9erV04033qj69eurQYMGHusU9/wW91oo7rkres5MMR+hOn6bP/74o2644QZ17dpVn376qZKSkjRq1Ci3/REYGKhbbrlF06ZNU15enmbNmqWBAwcWO9s/UVof7XO5XB6zH/v9V5LXdLNmzZScnKzHHntMhw4dUp8+fXTddddJOvP266mIi4vTeeedJz8/P7tWv359paam2jM4+WhfkcjISPXu3VtPP/201q9fr/j4ePtcpJM9b0WcvuaPl5OTo86dO6tChQqaOXOmVqxYoXnz5kmS2/Nz2223afbs2Tp06JCmTZum66+/XuXLl3fbVkZGhqKjo0/6mMC5jCNSAIr1zTffaM2aNRoyZIgkaeXKlcrPz9fTTz8tl+vo72CK+2H+5ptv1kMPPaTnnntOv//+e7EXGihSu3ZtBQYG6vvvv1ffvn0lHf3hYuXKlY4vIR0YGOh2jkNJVK5cWVWqVNG2bdt00003Obpvu3bttGTJEu3bt08PPvigXW/Tpo0WLlyoH3/8UQMGDJAkNW3aVAUFBdqzZ4/HJdKLNGvWTL///rtq1659wse96KKLdO+99+qKK66Qn5+f22Mfr0mTJpKkdevW2f+uUaOGYmNjtWjRIjVt2lTS0R+wli5dqieffNK+7xtvvKFDhw6ddD8UZ+DAgbrrrrv08ssvF7v8/PPP14cffugWqJYvX67Q0NASHwk7//zztWPHDu3evVvx8fGSpB9++MFtnWXLlikxMVGjRo2ya3/88YfHtm677TY1aNBAL730ko4cOaJevXqVqAcnrrrqKl188cUnXOfYIOtNdHS0UlNT3fbdr7/+6raNkrymw8LCdP311+v666/Xddddpy5duigjI+OM26+nonXr1po1a5YKCwvt/8s2bdqkuLg4BQYGSpLuuOMO9enT54TbOdFrNTAwULVq1bIvFhMdHa0DBw7YR+8l9+etJGrXrq2AgAD9+OOP9lHbffv2adOmTfYvczZs2KC0tDQ98cQTSkhIkCSPi35I0pVXXqmQkBC9/PLL+uKLL/Ttt996rLN27Vr7/wgAXvz7nyYE4Ev69etnunTpYlJSUsyuXbvMqlWrzPjx402FChVM9+7dTX5+vjHG2Oe5TJkyxWzdutXMmDHDVKlSxUgy+/btc9tm3759TWBgoOnSpctJH/++++4z8fHx5osvvjC///676devn6lUqZLJyMiw1ynJOVKdOnUyV111ldm1a5fZu3evMaZk5yW8/vrrJjg42EyZMsVs3LjRrF692kydOtU8/fTTJ3y8qVOnmuDgYOPv7+92LsTMmTNNaGiokWR27Nhh12+66SZTvXp18+GHH5pt27aZn3/+2TzxxBPms88+M8YY89tvv5ng4GBz1113maSkJLNp0ybz0UcfmXvuucfexrHngX3//femQoUK5plnnjlhn82aNTPPP/+8W+2JJ54wFStWNHPnzjVr1qwxN954o4mLiyv2HJ2SOPYcKWOMOXLkiNm7d685cuSIMcZ4nCO1a9cuU758eXP33Xeb9evXm/nz55uoqCgzZswYe5vFnWt09dVXm379+hljjCkoKDDnn3++6dChg/n111/Nt99+ay688EK3c3nmz59v/P39zbvvvmu2bNlinn32WRMREeHxmjDGmFatWpnAwEBzxx13nNI+SEpKMklJSebCCy80ffv2NUlJSeb3338/pW0d6/hzotatW2csyzJPPPGE2bJli3nhhRdMpUqV3M6ROtlr+plnnjHvvvuuWb9+vdm4caMZNGiQiY2NNQUFBT61X3/66SdTt25ds2vXLrvWvn17t9fz888/b9q3b+9ouzt27DAVKlQw99xzj9m4caP59NNPTUxMjHn88ccd92iMMZ988om56aabzCeffGI2btxoNmzYYJ566inj5+dnZsyYYYw5ei5TSEiIGTx4sNm8ebN55513THx8vMc5Uic7/+2OO+4w1apVM1999ZVZs2aNueqqq0yFChXs75U9e/aYwMBA8+CDD5qtW7eajz76yJx33nlu359FHn74YRMYGGjq1atX7FyJiYl2/wCKR5ACznH9+vUzkowk4+/vb6Kjo03Hjh3N1KlT7RP/izzzzDMmLi7OBAcHmyuuuMLMmDGj2CD19ddfG0nmvffeO+njHzp0yNx7770mKirKBAUFmdatW5uff/7ZbZ2SBKkffvjBNGrUyAQFBdk/nJQkSBljzDvvvGOaNGliAgMDTaVKlczll19u5s6de8LHKwoPx/8QsnPnTiPJ1KpVy62el5dnHnnkEVO9enUTEBBgYmNjzTXXXON2wYiff/7ZdOrUyVSoUMGEhISYRo0amfHjx9vLj7+gxtKlS01ISIh59tlnvfb5yiuvmEsuucStVlhYaMaMGWNiY2NNUFCQufzyy82aNWtOOO+JHB+kjnd8kDLGmCVLlpgWLVqYwMBAExsba4YPH24HL2NOHqSMMWbjxo3m0ksvNYGBgea8884zCxYs8LgowoMPPmgiIyNNhQoVzPXXX28mT55c7A/8b775ppHk8doz5uh+PzbkFafoe+jYr2N/AD5Vxf1w/fLLL5uEhAQTEhJibr31VjN+/HiPxzrRa/q1114zTZo0MSEhISYsLMx06NDB/PLLL/Z9fWW/Ll682ON1c/x9xowZ4zG7pJP+f7F8+XJz8cUXm6CgIFOzZk0zfvx4+5dGTm3dutXcfvvt5rzzzjPBwcEmPDzctGjRwqOHefPmmdq1a5ty5cqZ7t27m9dee81xkDpw4IC5+eabTfny5U3lypXNpEmTPL5XZs2aZapXr26CgoJMy5Ytzccff1zs9+fWrVuNJLcL+xy7f8LDw90uqAHAk2VMGf9BBwBnnXfeeUf33Xefdu/ebX9UBmXj8OHDqlu3rmbPnl3sRQNw1Pjx4zV79mytWbPGrX7o0CFFRETo888/ty9lj5L7t/fr9u3bVadOHa1bt0516tQpte2ejZYtW6a2bdtq165dHh8r7d27t5o2baqHH364jLoDzgycIwWg1Bw8eFDJycmaOHGi/vOf/xCifEC5cuU0Y8YMpaWllXUrPik7O1vr16/X888/r8cee8xj+dKlS9W+fXtClENltV8XLFig//u//yNEnUBubq527typ0aNHq0+fPh4hKjc3V40bN7bPjwXgHUekAJSasWPHavz48br88sv10Ucfeb2yG+Ar+vfvr3fffVc9e/bUrFmz3K7khlPHfvVd06dP16BBg9SkSRN9/PHHp/ynDgAQpAAAAADAMf6OFAAAAAA4RJACAAAAAIcIUgAAAADgEEEKAAAAABwiSAEAAACAQwQpAAAAAHCIIAUAAAAADhGkAAAAAMCh/wdho/YRcyXq5AAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "