{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "20eKtQoSMsrg" }, "source": [ "# 演習・交通手段分類(データの特徴をつかむ)\n", "\n", "このNotebookでは、GPSデータの基本的な特徴をいくつか抽出します。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "executionInfo": { "elapsed": 1810, "status": "ok", "timestamp": 1684722788200, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "IuK8Hp3gM0V4" }, "outputs": [], "source": [ "from geopy import distance\n", "import numpy as np\n", "from math import radians, cos, sin, asin, sqrt, atan2\n", "import matplotlib.pyplot as plt\n", "import os\n", "import pandas as pd\n", "import seaborn as sns\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 112 }, "executionInfo": { "elapsed": 7438, "status": "ok", "timestamp": 1684722797536, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "ij9kI0nfMxNZ", "outputId": "d8d9ba36-885c-44d6-dc82-5c8c2c144512" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/x2/7ss5kcb12n1gtlpc8p2mtjtw0000gn/T/ipykernel_10032/953823710.py:3: DtypeWarning: Columns (10) have mixed types. Specify dtype option on import or set low_memory=False.\n", " traj_df = pd.read_csv(f'./traj_{user}_labeled.csv', index_col=0)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
latitudelongitudeheightdays_totaldatetimerecord_dtusertrans_triptrans_mode
039.138159117.217108-3639805.9617482008-12-2323:04:552008-12-23 23:04:5510NaNNaN
139.138196117.217068-7239805.9617592008-12-2323:04:562008-12-23 23:04:5610NaNNaN
\n", "
" ], "text/plain": [ " latitude longitude height days_total date time \\\n", "0 39.138159 117.217108 -36 39805.961748 2008-12-23 23:04:55 \n", "1 39.138196 117.217068 -72 39805.961759 2008-12-23 23:04:56 \n", "\n", " record_dt user trans_trip trans_mode \n", "0 2008-12-23 23:04:55 10 NaN NaN \n", "1 2008-12-23 23:04:56 10 NaN NaN " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# load the GPS data which we cleaned in 00_clean_GPS_data.ipynb\n", "user = '010'\n", "traj_df = pd.read_csv(f'./traj_{user}_labeled.csv', index_col=0)\n", "# traj_df = pd.read_csv(f'./traj_{user}_labeled.csv', index_col=0)\n", "traj_df.head(2)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 224 }, "executionInfo": { "elapsed": 974, "status": "ok", "timestamp": 1684722798507, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "lRp1L1c2M-SI", "outputId": "74e4e1ec-bd1f-44e6-8350-4174c5c69773" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Size of observations: 534,140\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", "
latitudelongitudeheightdays_totaldatetimerecord_dtusertrans_triptrans_mode
039.845966116.47393813139713.9926622008-09-2223:49:262008-09-22 23:49:2610163.0train
139.846383116.47336313539713.9926742008-09-2223:49:272008-09-22 23:49:2710163.0train
239.846803116.47278814139713.9926852008-09-2223:49:282008-09-22 23:49:2810163.0train
339.847218116.47221314139713.9926972008-09-2223:49:292008-09-22 23:49:2910163.0train
439.847631116.47164114139713.9927082008-09-2223:49:302008-09-22 23:49:3010163.0train
\n", "
" ], "text/plain": [ " latitude longitude height days_total date time \\\n", "0 39.845966 116.473938 131 39713.992662 2008-09-22 23:49:26 \n", "1 39.846383 116.473363 135 39713.992674 2008-09-22 23:49:27 \n", "2 39.846803 116.472788 141 39713.992685 2008-09-22 23:49:28 \n", "3 39.847218 116.472213 141 39713.992697 2008-09-22 23:49:29 \n", "4 39.847631 116.471641 141 39713.992708 2008-09-22 23:49:30 \n", "\n", " record_dt user trans_trip trans_mode \n", "0 2008-09-22 23:49:26 10 163.0 train \n", "1 2008-09-22 23:49:27 10 163.0 train \n", "2 2008-09-22 23:49:28 10 163.0 train \n", "3 2008-09-22 23:49:29 10 163.0 train \n", "4 2008-09-22 23:49:30 10 163.0 train " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# exclude the rows containing no information about transportation mode\n", "traj_df = traj_df.dropna(subset=['trans_mode'], axis=0)\n", "print(\"Size of observations: {:,}\".format(traj_df.shape[0]))\n", "traj_df.head()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "sjXutU9TLXqr" }, "source": [ "## 一つ前の場所(ポイント)からの時間差を計算する\n", "" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "executionInfo": { "elapsed": 94381, "status": "ok", "timestamp": 1684722892880, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "_zo166ITLcNH" }, "outputs": [], "source": [ "# convert time values to timestamp\n", "traj_df['timestamp'] = traj_df['time'].apply(lambda x: pd.to_datetime(x))\n", "# sort values by trip id (trans_trip) and timestamp\n", "traj_df.sort_values(['trans_trip','timestamp'], inplace=True)\n", "# create the start and end time for each trajectory\n", "traj_df['time_delta'] = (traj_df.timestamp - traj_df.groupby(['trans_trip']).timestamp.shift(1))\n", "traj_df['dt_seconds'] = traj_df['time_delta'].dt.seconds" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Z45zHJm7LXqs" }, "source": [ "Let's check the histogram of longest time between two points per trip." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 405 }, "executionInfo": { "elapsed": 21, "status": "ok", "timestamp": 1684722892884, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "STnQmbp7UIib", "outputId": "960f1251-8618-445d-d328-212df6fa43ce" }, "outputs": [ { "data": { "image/png": "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8/Pxz3/+E9/5znewbNkyXLt2TdaSiGiSSXsR+uDBg9i4cSN+9KMfAQCKi4vxt7/9DYcPH0ZhYaFbrcPhgMPhULa7uroAALdv34bL5RpzHpfLhb6+PqhdARgY9OwFt7HcunXLa8d6mKEebt26BY1GM2nzepOsHuYXvuPV42kDBH42b9Anfhfq+3dHHh8U6OsbfKS/ifE+7nt6egAAQoixC4UEDodDBAYGilOnTrmNb926VSxevHhY/Z49ewQA3njjzcdu169fHzMLpJwB/e9//8PAwAAMBoPbuMFgQEdHx7D63bt3Iy8vT9keHBzE7du3ERUVBZVq7ATv7u5GXFwcrl+/jvDwcO80MMnYw9ThD31MRg9CCPT09MBkMo1ZJ/V9QA+GhxBixEDRarXQarVuY0888YRHc4WHh/vsA2YIe5g6/KGPie5Br9c/tEbKi9DR0dEIDAwcdrbT2dk57KyIiPyXlAAKCgpCUlISbDab27jNZsPChQtlLImIJJD2FCwvLw/r169HcnIyFixYgCNHjuDatWvYtGmTV+fRarXYs2fPsKdwvoQ9TB3+0MdU6kElxMOuk02cN998EwcOHEB7ezvMZjOKioqwePFiWcshokkmNYCI6IuNnwUjImkYQEQkDQOIiKRhABGRNH4dQLK+7qOwsBDPPvssdDodYmJisGrVKnzwwQduNUIIWK1WmEwmhISEICUlBS0tLW41DocDubm5iI6ORlhYGFauXIkbN2641djtdqxfvx56vR56vR7r16/HnTt33GquXbuGFStWICwsDNHR0di6dSucTqfHPalUKlgsFp/q4ebNm3jppZcQFRWF0NBQPPPMM6ivr/epHu7fv4+f/exniI+PR0hICGbNmoVf/OIXGBwc9Kk+RuSFz5ZOSRUVFUKj0YijR4+Kq1evim3btomwsDDR1tY24XNnZmaKY8eOiebmZtHY2CiWL18uZsyYIXp7e5Wa/fv3C51OJ95++23R1NQkvv/974vp06eL7u5upWbTpk3iySefFDabTTQ0NIilS5eKuXPnivv37ys13/3ud4XZbBa1tbWitrZWmM1mkZWVpey/f/++MJvNYunSpaKhoUHYbDZhMplETk7OuPu5fPmy+NKXviTmzJkjtm3b5jM93L59W8ycOVO88sor4r333hOtra2iqqpKfPTRRz7TgxBCvP766yIqKkr85S9/Ea2treKtt94S06ZNE8XFxT7Vx0j8NoC++c1vik2bNrmNzZ49W7z66quTvpbOzk4BQFRXVwshhBgcHBRGo1Hs379fqbl3757Q6/Xit7/9rRBCiDt37giNRiMqKiqUmps3b4qAgABx7tw5IYQQV69eFQDEpUuXlJqLFy8KAOLf//63EEKIs2fPioCAAHHz5k2l5ve//73QarWiq6vroWvv6ekRCQkJwmaziSVLligB5As97Nq1SyxatGjU/b7QgxBCLF++XPzwhz90G1u9erV46aWXfKqPkfjlUzCn04n6+npkZGS4jWdkZKC2tnbS1zP0/UWRkZEAgNbWVnR0dLitT6vVYsmSJcr66uvr4XK53GpMJhPMZrNSc/HiRej1esyfP1+p+da3vgW9Xu9WYzab3T6VnJmZCYfD4fZUZDRbtmzB8uXLkZaW5jbuCz2cOXMGycnJ+N73voeYmBjMmzcPR48e9akeAGDRokV455138OGHHwIA/vWvf6GmpgbPP/+8T/UxEr/8rxieft3HRBJCIC8vD4sWLYLZbAYAZQ0jra+trU2pCQoKQkRExLCaoft3dHQgJiZm2JwxMTFuNQ/OExERgaCgoIf+LCoqKtDQ0IC6urph+3yhh48//hiHDx9GXl4eXnvtNVy+fBlbt26FVqvFyy+/7BM9AMCuXbvQ1dWF2bNnIzAwEAMDA9i3bx9efPFF5di+0MdI/DKAhoz36z4mUk5ODt5//33U1NQM2/co63uwZqT6R6l50PXr17Ft2zZUVlYiODh41Lqp3MPg4CCSk5NRUFAAAJg3bx5aWlpw+PBhvPzyyz7RA/D51xeXlZWhvLwcX//619HY2AiLxQKTyYQNGzb4TB8j8cunYFPl6z5yc3Nx5swZ/P3vf0dsbKwybjQaAWDM9RmNRjidTtjt9jFrPvvss2Hz/ve//3WreXAeu90Ol8s15s+ivr4enZ2dSEpKglqthlqtRnV1Nd544w2o1WrlvlO5h+nTp+Ppp592G/va176mfO+4L/weAOCnP/0pXn31VfzgBz9AYmIi1q9fj5/85CfKVxf7Sh8j8csAkv11H0II5OTk4NSpUzh//jzi4+Pd9sfHx8NoNLqtz+l0orq6WllfUlISNBqNW017ezuam5uVmgULFqCrqwuXL19Wat577z10dXW51TQ3N6O9vV2pqayshFarRVJS0qg9pKamoqmpCY2NjcotOTkZ69atQ2NjI2bNmjXle/j2t7897O0PH374IWbOnAnAN34PANDX14eAAPc/1cDAQOUyvK/0MSKPX7b2EUOX4UtLS8XVq1eFxWIRYWFh4pNPPpnwuX/84x8LvV4vLly4INrb25VbX1+fUrN//36h1+vFqVOnRFNTk3jxxRdHvGwaGxsrqqqqRENDg3juuedGvGw6Z84ccfHiRXHx4kWRmJg44mXT1NRU0dDQIKqqqkRsbOwjXTb9/6+C+UIPly9fFmq1Wuzbt0/85z//Eb/73e9EaGioKCsr85kehBBiw4YN4sknn1Quw586dUpER0eLnTt3+lQfI/HbABJCiN/85jdi5syZIigoSHzjG99QLoNPNIzyBd3Hjh1TagYHB8WePXuE0WgUWq1WLF68WDQ1Nbkdp7+/X+Tk5IjIyEgREhIisrKyxLVr19xqbt26JdatWyd0Op3Q6XRi3bp1wm63u9W0tbWJ5cuXi5CQEBEZGSlycnLEvXv3PO7rwQDyhR7+/Oc/C7PZLLRarZg9e7Y4cuSI235f6KG7u1ts27ZNzJgxQwQHB4tZs2aJ/Px84XA4fKqPkfDrOIhIGr98DYiIfAMDiIikYQARkTQMICKShgFERNIwgIhIGgYQEUnDACIiaRhARCQNA4iIpGEAEZE0/w/gpr8eg5Jp5AAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.0 1.0\n", "0.1 2.0\n", "0.2 2.0\n", "0.3 4.0\n", "0.4 48.0\n", "0.5 61.0\n", "0.6 82.0\n", "0.7 120.0\n", "0.8 317.0\n", "0.9 1076.0\n", "Name: dt_seconds, dtype: float64\n" ] } ], "source": [ "# plot the histogram of the maximum time differences between points per trip\n", "trip_dt = traj_df.groupby(['trans_trip']).dt_seconds.max()\n", "trip_dt.hist(bins=10, figsize=(3,2))\n", "plt.show()\n", "# Let's also print out the percentiles of the maximum time differences between points per trip\n", "print(trip_dt.quantile(np.arange(0, 1, 0.1)))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "executionInfo": { "elapsed": 418, "status": "ok", "timestamp": 1684722893295, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "LUSy_33BULpd", "outputId": "a735134b-e05b-4604-f98a-195312b80e21" }, "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", "
meanmedianmaxmincount
trans_mode
airplane3699.0000003699.07394.04.02
bus2597.94117667.585896.02.034
car119.000000119.0119.0119.01
subway1916.59574559.085903.02.047
taxi7997.21875068.585474.02.096
train8911.3939391061.084677.02.099
walk602.0065793.085263.01.0152
\n", "
" ], "text/plain": [ " mean median max min count\n", "trans_mode \n", "airplane 3699.000000 3699.0 7394.0 4.0 2\n", "bus 2597.941176 67.5 85896.0 2.0 34\n", "car 119.000000 119.0 119.0 119.0 1\n", "subway 1916.595745 59.0 85903.0 2.0 47\n", "taxi 7997.218750 68.5 85474.0 2.0 96\n", "train 8911.393939 1061.0 84677.0 2.0 99\n", "walk 602.006579 3.0 85263.0 1.0 152" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# summary info on time differences between points, grouped by trip id (trans_trip)\n", "(traj_df.groupby(['trans_mode','trans_trip'])\n", " .time_delta\n", " .max()\n", " .dt.seconds\n", " .groupby(level=0).agg(['mean','median','max','min','count']))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "pktLPM35LXqt" }, "source": [ "Since airplane and car trips are less, we remove these modes for further analysis." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1684722893295, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "zUudCp3aLXqt" }, "outputs": [], "source": [ "traj_df = traj_df[~traj_df['trans_mode'].isin(['airplane','car'])]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "executionInfo": { "elapsed": 3, "status": "aborted", "timestamp": 1684538406128, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "CMOrdGdpQ4kW" }, "source": [ "## 前のポイントからの距離\n", "" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1684722893295, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "utMQx74qLXqt" }, "outputs": [], "source": [ "# store previous points' latitude and logitude by using `shift` function of pandas\n", "traj_df[['latitude_prev','longitude_prev']] = traj_df.groupby('trans_trip')[['latitude','longitude']].shift(1)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1684722893295, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "XaqMlU-QLXqu" }, "outputs": [], "source": [ "def calc_distance(lat2, lon2, lat1, lon1):\n", " \"\"\"function to calculate distances between two coordinates\n", " \"\"\"\n", " if pd.isna(lat1) or pd.isna(lon1):\n", " return np.nan\n", " else:\n", " return distance.great_circle((lat2, lon2), (lat1, lon1)).km" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "executionInfo": { "elapsed": 22112, "status": "ok", "timestamp": 1684722915402, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "7Ueuw-E-LXqu" }, "outputs": [], "source": [ "# map the calculation function above to the dataframe\n", "traj_df['distance'] = traj_df.apply(lambda x:calc_distance(x[\"latitude\"], x[\"longitude\"], x['latitude_prev'], x['longitude_prev']), axis=1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 211 }, "executionInfo": { "elapsed": 14, "status": "ok", "timestamp": 1684722915403, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "dy4YMm73LXqu", "outputId": "a589c093-2c41-49b5-9468-89ae40f39c62" }, "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", "
latitudelongitudeheightdays_totaldatetimerecord_dtusertrans_triptrans_modetimestamptime_deltadt_secondslatitude_prevlongitude_prevdistance
139.894178116.318200-77739535.6212962008-03-2814:54:402008-03-28 14:54:40101.0train2023-06-07 14:54:40NaTNaNNaNNaNNaN
239.894505116.321132-77739535.6216902008-03-2814:55:142008-03-28 14:55:14101.0train2023-06-07 14:55:140 days 00:00:3434.039.894178116.31820.252764
\n", "
" ], "text/plain": [ " latitude longitude height days_total date time \\\n", "1 39.894178 116.318200 -777 39535.621296 2008-03-28 14:54:40 \n", "2 39.894505 116.321132 -777 39535.621690 2008-03-28 14:55:14 \n", "\n", " record_dt user trans_trip trans_mode timestamp \\\n", "1 2008-03-28 14:54:40 10 1.0 train 2023-06-07 14:54:40 \n", "2 2008-03-28 14:55:14 10 1.0 train 2023-06-07 14:55:14 \n", "\n", " time_delta dt_seconds latitude_prev longitude_prev distance \n", "1 NaT NaN NaN NaN NaN \n", "2 0 days 00:00:34 34.0 39.894178 116.3182 0.252764 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "traj_df.head(2)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "BWYkxVvALXqu" }, "source": [ "## 速度\n", "\n", "次に速度:距離(km)/時を計算します" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "executionInfo": { "elapsed": 11, "status": "ok", "timestamp": 1684722915403, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "jyDzJ-S5LXqu" }, "outputs": [], "source": [ "traj_df['speed'] = \\\n", " np.where(((traj_df['distance'].notnull())&(traj_df['dt_seconds']!=0)), traj_df['distance'] / \n", " (traj_df['dt_seconds'] / 3600), 0)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 238 }, "executionInfo": { "elapsed": 11, "status": "ok", "timestamp": 1684722915403, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "mWqmrTe7LXqv", "outputId": "42dbe098-6cdb-4baf-f0f0-aa7e5d268c8f" }, "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", "
meanminmaxstd
trans_mode
bus40.7318930.0219.97033629.834764
subway52.3692170.0217.57840425.219674
taxi30.3551160.0156.12930627.505678
train87.3057980.076412.488301129.458882
walk5.4537860.077.7003333.290184
\n", "
" ], "text/plain": [ " mean min max std\n", "trans_mode \n", "bus 40.731893 0.0 219.970336 29.834764\n", "subway 52.369217 0.0 217.578404 25.219674\n", "taxi 30.355116 0.0 156.129306 27.505678\n", "train 87.305798 0.0 76412.488301 129.458882\n", "walk 5.453786 0.0 77.700333 3.290184" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's check the descriptions of speed per transportation mode\n", "traj_df.groupby(['trans_mode']).speed.agg(['mean','min','max','std'])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "41SG1QIJLXqv" }, "source": [ "## 加速度\n", "\n", "\n", "2点間の速度の差/2点間の時間の差でAccelation(加速度)を計算します。" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "executionInfo": { "elapsed": 10, "status": "ok", "timestamp": 1684722915403, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "2nPNnh-FLXqv" }, "outputs": [], "source": [ "# store previous points' speed\n", "traj_df['speed_prev'] = traj_df.groupby('trans_trip')['speed'].shift(1)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "executionInfo": { "elapsed": 11, "status": "ok", "timestamp": 1684722915404, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "mQC1AKdCLXqv" }, "outputs": [], "source": [ "def calc_accel(speed_1, speed_2, time_diff_sec):\n", " \"\"\"function to calculate acceleration between two points\n", " \"\"\"\n", " speed_delta = speed_2 - speed_1\n", " if (time_diff_sec == 0) or (speed_delta == 0):\n", " return 0\n", " return speed_delta / time_diff_sec" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "executionInfo": { "elapsed": 13370, "status": "ok", "timestamp": 1684722928763, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "WM1dBu4iLXqv" }, "outputs": [], "source": [ "# map the above calculation fuction to the dataframe\n", "traj_df['accel'] = traj_df.apply(lambda x: calc_accel(x['speed'], x['speed_prev'], x['dt_seconds']), axis=1)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 238 }, "executionInfo": { "elapsed": 18, "status": "ok", "timestamp": 1684722928765, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "2DC_ab1iLXqv", "outputId": "db875df1-9f64-49e0-ad56-101ba03aca5d" }, "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", "
countmeanstdmin25%50%75%max
trans_mode
bus35156.0-0.0721195.457844-166.371582-1.161253-3.753887e-061.108991178.138813
subway20338.0-0.0914526.851066-136.151441-1.2339282.384665e-011.791577126.904634
taxi56731.0-0.0617554.192712-97.929174-1.2724900.000000e+001.30082296.055705
train380835.0-0.0071124.349676-1122.655229-0.9730444.474713e-090.9877601293.744609
walk36954.0-0.0514433.310213-64.769768-1.1910702.163060e-031.20144559.242515
\n", "
" ], "text/plain": [ " count mean std min 25% 50% \\\n", "trans_mode \n", "bus 35156.0 -0.072119 5.457844 -166.371582 -1.161253 -3.753887e-06 \n", "subway 20338.0 -0.091452 6.851066 -136.151441 -1.233928 2.384665e-01 \n", "taxi 56731.0 -0.061755 4.192712 -97.929174 -1.272490 0.000000e+00 \n", "train 380835.0 -0.007112 4.349676 -1122.655229 -0.973044 4.474713e-09 \n", "walk 36954.0 -0.051443 3.310213 -64.769768 -1.191070 2.163060e-03 \n", "\n", " 75% max \n", "trans_mode \n", "bus 1.108991 178.138813 \n", "subway 1.791577 126.904634 \n", "taxi 1.300822 96.055705 \n", "train 0.987760 1293.744609 \n", "walk 1.201445 59.242515 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check basic statistics of acceleration per transportation mode\n", "traj_df.groupby('trans_mode')['accel'].describe()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "KJFXfVf_LXqv" }, "source": [ "## Angular velocity\n", "\n", "\n", "ここでは、2点間の角度の差/2点間の時間の差でAngular velocityを計算します。" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "FWmbirqcLXqv" }, "source": [ "そのためにまず、2点間の角度の差を計算します。" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "executionInfo": { "elapsed": 17, "status": "ok", "timestamp": 1684722928766, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "qvZqFpAJLXqv" }, "outputs": [], "source": [ "def calc_angle(lat1, lat2, lon1, lon2):\n", " \"\"\"function to calculate angle differences between two coordinates\n", " \"\"\"\n", " x = cos(lat2) * sin(lon2-lon1)\n", " y = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2-lon1)\n", " brng = atan2(x, y)\n", " brng = np.degrees(brng)\n", " brng = brng + 360 if brng < 0 else brng\n", " return brng" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "executionInfo": { "elapsed": 11619, "status": "ok", "timestamp": 1684722940368, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "EYcAluRvLXqw" }, "outputs": [], "source": [ "# apply the calculation function abvoe to the dataframe\n", "traj_df['angle'] = traj_df.apply(lambda x: calc_angle(x['latitude'], x['latitude_prev'], x['longitude'], x['longitude_prev']), axis=1)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 238 }, "executionInfo": { "elapsed": 17, "status": "ok", "timestamp": 1684722940370, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "RvG7TJaoLXqw", "outputId": "bd899425-8a3d-4254-ae8b-ea0fc465a870" }, "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", "
countmeanstdmin25%50%75%max
trans_mode
bus35156.0159.299021111.391769-0.068.399355172.127466255.799236359.999455
subway20338.0137.644859104.2305770.019.438924173.706695196.554703359.827198
taxi56731.0158.724686116.988570-0.029.485250178.534543226.851081359.929870
train380835.0179.733586103.0232250.098.886739179.800484269.325408359.999506
walk36954.0181.486218104.4979550.097.345459181.463673269.999640359.812308
\n", "
" ], "text/plain": [ " count mean std min 25% 50% \\\n", "trans_mode \n", "bus 35156.0 159.299021 111.391769 -0.0 68.399355 172.127466 \n", "subway 20338.0 137.644859 104.230577 0.0 19.438924 173.706695 \n", "taxi 56731.0 158.724686 116.988570 -0.0 29.485250 178.534543 \n", "train 380835.0 179.733586 103.023225 0.0 98.886739 179.800484 \n", "walk 36954.0 181.486218 104.497955 0.0 97.345459 181.463673 \n", "\n", " 75% max \n", "trans_mode \n", "bus 255.799236 359.999455 \n", "subway 196.554703 359.827198 \n", "taxi 226.851081 359.929870 \n", "train 269.325408 359.999506 \n", "walk 269.999640 359.812308 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# print out the description of angle differences between two points per transportation mode\n", "traj_df.groupby(['trans_mode'])['angle'].describe()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "fl9xTTX6LXqw" }, "source": [ "Angular velocityを求めます。" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "executionInfo": { "elapsed": 15, "status": "ok", "timestamp": 1684722940370, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "lzZ8H2c9LXqw" }, "outputs": [], "source": [ "def calc_angular_velocity(angle1, angle2, time_diff_sec):\n", " \"\"\"function to calculate angular velocity\n", " \"\"\"\n", " bear_delta = angle2 - angle1\n", " if time_diff_sec == 0:\n", " return 0\n", " return abs(bear_delta / time_diff_sec)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 9716, "status": "ok", "timestamp": 1684722950071, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "gm29z1UkLXqw", "outputId": "ccdebb91-e22f-4458-ed20-2bf2b0185c47" }, "outputs": [ { "data": { "text/plain": [ "count 529586.000000\n", "mean 10.510742\n", "std 45.292572\n", "min 0.000000\n", "25% 0.272122\n", "50% 0.870065\n", "75% 2.537062\n", "max 359.997255\n", "Name: angular_velocity, dtype: float64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create a new column holding the previous points' angle difference\n", "traj_df['angle_prev'] = traj_df.groupby('trans_trip')['angle'].shift(1)\n", "# apply the calculation function to the dataframe\n", "traj_df['angular_velocity'] = traj_df.apply(lambda x: calc_angular_velocity(x['angle'],x['angle_prev'],x['dt_seconds']), axis=1)\n", "traj_df['angular_velocity'].describe()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "3vJKfwiQLXqw" }, "source": [ "## 特徴の可視化\n", "\n", "上で作ったいくつかの特徴を可視化してそれぞれがどのように交通手段と関連があるか確認します。" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1684722950071, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "asreHU6RLXqw" }, "outputs": [], "source": [ "# define a color list for visualizations\n", "colors = ['#0C5DA5', '#00B945', '#FF9500', '#FF2C00', '#845B97', '#474747', '#9e9e9e']" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "_iK7MEVQLXqw" }, "source": [ "\n", "### トリップごとのAngular velocity とスピードの関係性" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 316 }, "executionInfo": { "elapsed": 674, "status": "ok", "timestamp": 1684722950741, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "vWq8O_j6LXqw", "outputId": "85f681d7-cd75-4a5e-9a2b-c9a4149bd7f5" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(4, 3))\n", "markers = ['^', 'o', 's', 'v', 'd']\n", "# iterate over transportation modes\n", "for i, mode in enumerate(traj_df['trans_mode'].unique()):\n", " # create sub-dataframe holding the rows with the mode\n", " chunk = traj_df[traj_df['trans_mode']==mode]\n", " # create mean scores of speed and angular_velocity per trip\n", " trip_df = chunk.groupby('trans_trip')[['speed', 'angular_velocity']].mean()\n", " # create scatter plots of speed and angular_velocity per trip\n", " ax.scatter(trip_df['speed'], trip_df['angular_velocity'], facecolor = 'None', \n", " marker = markers[i], edgecolor=colors[i], label=mode, linewidth=0.8)\n", "ax.legend(frameon=False)\n", "ax.set_xlabel('speed (km/h)')\n", "ax.set_ylabel('angular velocity (deg/sec)')\n", "plt.show()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "_nu8VTP-LXqw" }, "source": [ "\n", "### 各交通手段ごとの加速度の箱ひげ図の確認" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 311 }, "executionInfo": { "elapsed": 940, "status": "ok", "timestamp": 1684722951666, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "MzohpSVaLXqw", "outputId": "3259f7f8-a063-4bad-ea61-e80d2a357193" }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(4, 3))\n", "markers = ['^', 'o', 's', 'v', 'd']\n", "accel_df = traj_df.groupby(['trans_mode', 'trans_trip'])[['accel']].mean().reset_index()\n", "sns.boxplot(data=accel_df, x=\"trans_mode\", y=\"accel\", \n", " # showfliers=True, \n", " notch=True, showcaps=False,\n", " showmeans=True,\n", " meanprops={'markerfacecolor':'none','markeredgecolor':'green'},\n", " flierprops={\"marker\": \"x\"},\n", " boxprops={\"facecolor\": (.4, .6, .8, .2)},\n", " medianprops={\"color\": \"coral\"}, \n", " ax = ax)\n", "ax.set_xlabel('transportation mode')\n", "plt.show()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "id": "cCZOwk_hLXqx" }, "source": [ "## 次の分析のために作成した特徴量データを保存します。" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1684722951667, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "712Q_mvpLXqx" }, "outputs": [], "source": [ "# drop the rows without dt_seconds values\n", "traj_df = traj_df[traj_df['dt_seconds'].notnull()]\n", "# drop the rows which has 0 seconds gaps from previous points\n", "traj_df = traj_df[~(traj_df['dt_seconds']==0)]" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "executionInfo": { "elapsed": 23769, "status": "ok", "timestamp": 1684722975429, "user": { "displayName": "Yuya Shibuya", "userId": "13278923316285788453" }, "user_tz": -540 }, "id": "be7v71oqLXqx" }, "outputs": [], "source": [ "# PLEASE REPLACE THE BELOW PATH WITH YOUR PATH\n", "path = f'traj_{user}_labeled_with_features.csv'\n", "traj_df.to_csv(path)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.16" } }, "nbformat": 4, "nbformat_minor": 4 }