{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Module 4\n", "\n", "## Video 20: Cargo Movements Example\n", "**Python for the Energy Industry**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this lesson, we'll consider another example of querying the SDK, having a look at Cargo Movements. To start with, we will search for all cargos that are currently being loaded. We specify the start and end times using a `datetime` object - this will be discussed in more detail in the next module.\n", "\n", "Documentation for the Cargo Movements endpoint can be [found here.](https://vortechsa.github.io/python-sdk/endpoints/cargo_movements/)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import vortexasdk as v\n", "from datetime import datetime\n", "now = datetime.utcnow()" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020-12-10 15:12:17,839 vortexasdk.client — WARNING — You are using vortexasdk version 0.26.0, however version 0.27.1 is available.\n", "You should consider upgrading via the 'pip install vortexasdk --upgrade' command.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Loading from API: 1000it [00:01, 680.07it/s] \n" ] } ], "source": [ "cm_query = v.CargoMovements().search(\n", " filter_activity=\"loading_state\",\n", " filter_time_min=now,\n", " filter_time_max=now)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "780" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# How many cargo movements do we get?\n", "len(cm_query)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'cargo_movement_id': '002fb0cdde927e8758bfdc001d016388002fb0cdde927e8758bfdc001d016388',\n", " 'quantity': 26102,\n", " 'status': 'unloaded_state',\n", " 'vessels': [{'id': 'bd959e52a27d98d327ccdcdbc543ee325aafd6eaa9a1752e1d0e9f4e7b353bd8',\n", " 'mmsi': 319498000,\n", " 'imo': 9102095,\n", " 'name': 'STOLT CREATIVITY',\n", " 'dwt': 37271,\n", " 'cubic_capacity': 39808,\n", " 'vessel_class': 'handysize',\n", " 'corporate_entities': [{'id': 'afd995e6928b97fa3799141cec71ed674f739528dd14af15be3791b02f287699',\n", " 'label': 'Stolt Tankers',\n", " 'layer': 'commercial_owner',\n", " 'probability': 1,\n", " 'source': 'external'}],\n", " 'start_timestamp': '2020-10-30T23:42:06+0000',\n", " 'end_timestamp': '2020-11-08T01:47:40+0000',\n", " 'fixture_fulfilled': False,\n", " 'voyage_id': '9e307b22b8ab351b2a471d168b1ccbda3cc6fe8f6bc41173b8f2794e24efdda3',\n", " 'tags': [{'tag': 'vessel_coated_tag'}],\n", " 'status': 'vessel_status_laden_known',\n", " 'year': 1997,\n", " 'scrubber': [],\n", " 'flag': [{'tag': 'vessel_flag_tag',\n", " 'flag': 'KY',\n", " 'flag_country': '9d95bba7023609ee9e3da95b119f27d8f0a7c2412c1c773010f6bd5b8cea0d94'}]}],\n", " 'product': [{'id': 'b68cbb746f8b9098c50e2ba36bcad83001a53bd362e9031fb49085d02c36659c',\n", " 'layer': 'group',\n", " 'probability': 1,\n", " 'source': 'model',\n", " 'label': 'Clean Petroleum Products'},\n", " {'id': 'cbb5acffa542aad31d26712a8cdfd9884301aa7658ac95c40f86ddb31bc29d9b',\n", " 'layer': 'group_product',\n", " 'probability': 1,\n", " 'source': 'model',\n", " 'label': 'Other Clean Products'},\n", " {'id': '903edb3eea47052490c39ce71ce473d6d02ce1f8f1b4076ffbc938d6f5a2afef',\n", " 'layer': 'category',\n", " 'probability': 1,\n", " 'source': 'model',\n", " 'label': 'Chemicals'}],\n", " 'events': [{'event_type': 'cargo_port_load_event',\n", " 'location': [{'id': '3267ef2a83a749052c87e981f1bb12c6396acf590b4b1cd3316cf8f8c5aeb7bc',\n", " 'layer': 'country',\n", " 'label': 'Malaysia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '7f9850477464b75334a237f353b2ac0ca57a1cc1b87b0d4a8731f126ff873247',\n", " 'layer': 'port',\n", " 'label': 'Bintulu (Tanjong Kidurong) [MY]',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': 'e6955a2c59dc90833986fe0894cf6718dddaa7816bb51bc955cdd3eb4470e554',\n", " 'layer': 'region',\n", " 'label': 'Asia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '07ac020aa082d5d116f829ef28a40e9876c0644aeb4f0480202c1a86bb8adf7f',\n", " 'layer': 'shipping_region',\n", " 'label': 'Far East',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': 'a2ca5cb23cfc99e5b355a1b928d16e30cbcdfed1c9ff01ba39b5d4c53ffc1ef3',\n", " 'layer': 'shipping_region',\n", " 'label': 'Southeast Asia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '956b03529510459d298c4e537d23c6fbb22ffd8414af933b3475310c661f337a',\n", " 'layer': 'trading_block',\n", " 'label': 'Non-OPEC',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': 'a2ca5cb23cfc99e5b355a1b928d16e30cbcdfed1c9ff01ba39b5d4c53ffc1ef3',\n", " 'layer': 'trading_region',\n", " 'label': 'Southeast Asia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '3267ef2a83a749052c87e981f1bb12c6396acf590b4b1cd3316cf8f8c5aeb7bc',\n", " 'layer': 'trading_subregion',\n", " 'label': 'Malaysia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': 'ebdb39bc6943ad1b3edac1834c106add337b2cfb69fbcdfc81856a2dca3afd23',\n", " 'layer': 'terminal',\n", " 'label': 'PST Petronas Shell Terminal, Bintulu',\n", " 'source': 'model',\n", " 'probability': 1}],\n", " 'probability': 1,\n", " 'pos': [113.07517683177093, 3.2597980837294065],\n", " 'start_timestamp': '2020-10-30T23:42:06+0000',\n", " 'end_timestamp': '2020-11-01T05:15:10+0000'},\n", " {'event_type': 'cargo_port_unload_event',\n", " 'location': [{'id': 'b15970adfcd316d11d698d13de23e2291a60e1fb05070feab30957c6645e576e',\n", " 'layer': 'country',\n", " 'label': 'Taiwan',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '4468e532e13fb72058fa338b7507ca6df048d0e5b61f7adb5caf95112d3e693a',\n", " 'layer': 'port',\n", " 'label': 'Kaohsiung [TW]',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': 'e6955a2c59dc90833986fe0894cf6718dddaa7816bb51bc955cdd3eb4470e554',\n", " 'layer': 'region',\n", " 'label': 'Asia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '07ac020aa082d5d116f829ef28a40e9876c0644aeb4f0480202c1a86bb8adf7f',\n", " 'layer': 'shipping_region',\n", " 'label': 'Far East',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '2b394b41a7ff9e48b40b4ba8e6a6b045340261dfc02133d04af13fe754a71a48',\n", " 'layer': 'shipping_region',\n", " 'label': 'East Asia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '2b394b41a7ff9e48b40b4ba8e6a6b045340261dfc02133d04af13fe754a71a48',\n", " 'layer': 'trading_region',\n", " 'label': 'East Asia',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': 'b15970adfcd316d11d698d13de23e2291a60e1fb05070feab30957c6645e576e',\n", " 'layer': 'trading_subregion',\n", " 'label': 'Taiwan',\n", " 'source': 'model',\n", " 'probability': 1},\n", " {'id': '1d8064b092ea94ad4b410c430eb56a2b6731667a579f2bf9e3a97143f11769e3',\n", " 'layer': 'terminal',\n", " 'label': 'Formosa Plastics',\n", " 'source': 'model',\n", " 'probability': 1}],\n", " 'probability': 1,\n", " 'pos': [120.29713749728465, 22.597328046059573],\n", " 'start_timestamp': '2020-11-07T07:07:51+0000',\n", " 'end_timestamp': '2020-11-08T01:47:40+0000'}],\n", " 'parent_ids': [{'id': '1d347628f0d562fe3dfb83c99af907781d347628f0d562fe3dfb83c99af90778',\n", " 'splinter_timestamp': '2020-11-08T06:52:17+0000'}]}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# What does a single cargo movement look like?\n", "cm_query[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's choose what bit of information we would like to put in a DataFrame. We'll go with:\n", "- Load and unload port locations\n", "- Product group label\n", "- Vessel name and type\n", "- Coordinates\n", "\n", "Notice how some of this information is 'nested', i.e. the value associated with a key might itself be a dictionary or a list. See below how we specify the column names to access this information." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "cm_df = cm_query.to_df(columns=['events.cargo_port_load_event.0.location.port.label',\n", " 'events.cargo_port_unload_event.0.location.port.label',\n", " 'product.group.label',\n", " 'quantity',\n", " 'vessels.0.name',\n", " 'vessels.0.vessel_class',\n", " 'events.cargo_port_load_event.0.pos.0',\n", " 'events.cargo_port_load_event.0.pos.1'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These column names are quite long and will make our DataFrame harder to read, so we can use a dictionary to relabel them." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "relabel = {'events.cargo_port_load_event.0.location.port.label':'load_port',\n", " 'events.cargo_port_unload_event.0.location.port.label':'unload_port',\n", " 'product.group.label':'product_group',\n", " 'vessels.0.name':'vessel_name',\n", " 'vessels.0.vessel_class':'vessel_class',\n", " 'events.cargo_port_load_event.0.pos.0':'load_X',\n", " 'events.cargo_port_load_event.0.pos.1':'load_Y'}\n", "\n", "cm_df = cm_df.rename(relabel,axis=1)" ] }, { "cell_type": "code", "execution_count": 6, "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", "
load_portunload_portproduct_groupquantityvessel_namevessel_classload_Xload_Y
0Bintulu (Tanjong Kidurong) [MY]Kaohsiung [TW]Clean Petroleum Products26102STOLT CREATIVITYhandysize113.0751773.259798
1Mesaieed [QA]Singapore [SG]Clean Petroleum Products64621MARITIME ROSEMARYhandymax51.57760324.930121
2Dalian [CN]Jiangyin, Fuzhou [CN]Clean Petroleum Products523896QI LIN ZUOpanamax121.28050839.578469
\n", "
" ], "text/plain": [ " load_port unload_port \\\n", "0 Bintulu (Tanjong Kidurong) [MY] Kaohsiung [TW] \n", "1 Mesaieed [QA] Singapore [SG] \n", "2 Dalian [CN] Jiangyin, Fuzhou [CN] \n", "\n", " product_group quantity vessel_name vessel_class \\\n", "0 Clean Petroleum Products 26102 STOLT CREATIVITY handysize \n", "1 Clean Petroleum Products 64621 MARITIME ROSEMARY handymax \n", "2 Clean Petroleum Products 523896 QI LIN ZUO panamax \n", "\n", " load_X load_Y \n", "0 113.075177 3.259798 \n", "1 51.577603 24.930121 \n", "2 121.280508 39.578469 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's take a peek at the data\n", "cm_df.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we've got our data in a DataFrame, we can visualise it with plots. Histograms are convenient for working with numerical data:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[]], dtype=object)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Histogram of quantity\n", "cm_df.hist(column='quantity')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a couple of ways we can try to make this data easier to visualise. Firstly, we note that the number of bins is relatively small, so we can increase it:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([[]], dtype=object)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEVCAYAAAAb/KWvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVbElEQVR4nO3df5DkdX3n8ecrIHi6BqSIE24hWS4hJgqn0TmiMeXNHkekxBIuxgQPzZLD2zNnjHeFd1n0SnKpI0fVlbkzVbFSW5Fyc1FWNP7YCpGEoH3KFaAsigIbhAiHK8ieCmivnrrkfX9MQ9phZrqne2a65zPPR9VWd38/3x+fee93X/PZT3/726kqJElt+aFJd0CStPoMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnu0ipJ8rEkOybdDwkgXucurVyS3wF+sqpeu0T7RcDrq+oX1rNf0uMcuUtSgwx3bXhJfjbJrUm+leT9SfYm+S9JLkpyw4J1K8lP9p6fm+SzSb6Z5Mu90fjj623rrbsjyf1Jvpbkbb22c4C3Ar+apJvktt7yTpLXJ/kZ4I+AF/faH0nyT5I8lOTovmO8Ksnn1ro+2pwMd21oSY4BPgL8T+AE4APAq4bc/DDwa8DxwLnAbyQ5f8E6vwA8GzgLeHuSn6mqa4HfA95fVVuq6nn9G1TVAeANwI299uOr6jPA14Gz+1Z9ba/f0qoz3LXRvQh4CvA/qur7VfVB4DPDbFhVnar6QlX9XVV9HrgK+KcLVvvPVfWdqroNuA143pN2NLw9zAc6SU4AXga8b4z9SUs6evAq0lT7h8BX6gevDPg/w2yY5OeAK4DTgWOAY5kf+ff7at/zbwNbRu8qfwocSLIF+BXgU1X14Bj7k5bkyF0b3YPA1iTpW/ZjvcfDwNMeX5jkRxds+z5gH3BKVR3H/Dx5GM6gy8ye1F5VXwFuBP4F8DqcktEaMty10d0IHAF+K8nRSX4JOLPXdhvw3CTPT/JU4HcWbPsM4BtV9f+SnAn8yxUc9yFgW5Kl/g09BJzce0+g358A/xE4A/jwCo4nrYjhrg2tqr4H/BJwEfAw8KvAh3ptXwR+F/hr4G7ghgWb/1vgd5N8C3g7cPUKDv349M3Xk9y6SPvHgTuAryb5Wt/yDwM/Dny4qg6v4HjSivghJjUnyXuAg1X1nybdl8Uk+Vvg31TVX0+6L2qXI3dpHSV5FfPz8R+fdF/UNq+WkdZJkg7wHOB1VfV3E+6OGue0jCQ1yGkZSWrQVEzLnHjiibVt27aRtj18+DBPf/rTV7dDjbFGy7M+g1mj5U2qPvv37/9aVf3IYm1TEe7btm3jlltuGWnbTqfD3Nzc6naoMdZoedZnMGu0vEnVJ8mSn8Z2WkaSGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkho0FZ9QXU3bdl3zxPP7rjh3gj2RpMkZOHJPcmWSQ0luX6TtLUkqyYl9yy5Nck+Su5K8bLU7LEkabJhpmfcA5yxcmOQU4Gzg/r5lzwEuAJ7b2+ZdSY5alZ5KkoY2MNyr6pPANxZp+u/Mf9Fv/w3hzwP2VtV3q+pe4B7+/suKJUnrZKQ59ySvBL5SVbcl6W/aCtzU9/pgb9li+9gJ7ASYmZmh0+mM0hW63e4PbHvJGUeeeD7qPluzsEb6QdZnMGu0vGmsz4rDPcnTgLcBv7hY8yLLFv2qp6raDewGmJ2drVFvl7nwVpsX9b+heuFo+2yNt2tdnvUZzBotbxrrM8rI/SeAU4HHR+0nA7cmOZP5kfopfeueDDwwbiclSSuz4uvcq+oLVfWsqtpWVduYD/QXVNVXgX3ABUmOTXIqcBrw6VXtsSRpoGEuhbwKuBF4dpKDSS5eat2qugO4GrgTuBZ4Y1U9tlqdlSQNZ+C0TFW9ZkD7tgWvLwcuH69bkqRxePsBSWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIa1MSXdfR/QYckyZG7JDXJcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkho0MNyTXJnkUJLb+5b9tyR/k+TzST6c5Pi+tkuT3JPkriQvW6N+S5KWMczI/T3AOQuWXQecXlX/GPgicClAkucAFwDP7W3zriRHrVpvJUlDGRjuVfVJ4BsLlv1VVR3pvbwJOLn3/Dxgb1V9t6ruBe4BzlzF/kqShrAa93P/V8D7e8+3Mh/2jzvYW/YkSXYCOwFmZmbodDojHbzb7XLJGY8t2jbqPlvT7XatxTKsz2DWaHnTWJ+xwj3J24AjwHsfX7TIarXYtlW1G9gNMDs7W3NzcyP1odPp8I4bDi/adt+Fo+2zNZ1Oh1HruxlYn8Gs0fKmsT4jh3uSHcArgLOq6vEAPwic0rfaycADo3dPkjSKkS6FTHIO8NvAK6vq231N+4ALkhyb5FTgNODT43dTkrQSA0fuSa4C5oATkxwELmP+6phjgeuSANxUVW+oqjuSXA3cyfx0zRuravEJcUnSmhkY7lX1mkUWv3uZ9S8HLh+nU5Kk8fgJVUlqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNWhguCe5MsmhJLf3LTshyXVJ7u49PrOv7dIk9yS5K8nL1qrjkqSlDTNyfw9wzoJlu4Drq+o04Prea5I8B7gAeG5vm3clOWrVeitJGsrAcK+qTwLfWLD4PGBP7/ke4Py+5Xur6rtVdS9wD3Dm6nRVkjSso0fcbqaqHgSoqgeTPKu3fCtwU996B3vLniTJTmAnwMzMDJ1OZ6SOdLtdLjnjsUXbRt1na7rdrrVYhvUZzBotbxrrM2q4LyWLLKvFVqyq3cBugNnZ2ZqbmxvpgJ1Oh3fccHjRtvsuHG2frel0Ooxa383A+gxmjZY3jfUZ9WqZh5KcBNB7PNRbfhA4pW+9k4EHRu+eJGkUo4b7PmBH7/kO4KN9yy9IcmySU4HTgE+P10VJ0koNnJZJchUwB5yY5CBwGXAFcHWSi4H7gVcDVNUdSa4G7gSOAG+sqsUnxCVJa2ZguFfVa5ZoOmuJ9S8HLh+nU5Kk8fgJVUlqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUoNX+mr2psm3XNU88v++KcyfYE0laX47cJalBhrskNchwl6QGGe6S1CDDXZIaNFa4J/n3Se5IcnuSq5I8NckJSa5Lcnfv8Zmr1VlJ0nBGDvckW4HfAmar6nTgKOACYBdwfVWdBlzfey1JWkfjTsscDfyDJEcDTwMeAM4D9vTa9wDnj3kMSdIKpapG3zh5M3A58B3gr6rqwiSPVNXxfes8XFVPmppJshPYCTAzM/PCvXv3jtSHbrfLvY8+NnC9M7YeN9L+W9DtdtmyZcukuzG1rM9g1mh5k6rP9u3b91fV7GJtI39CtTeXfh5wKvAI8IEkrx12+6raDewGmJ2drbm5uZH60el0eMcNhweud9+Fo+2/BZ1Oh1HruxlYn8Gs0fKmsT7jTMv8c+Deqvq/VfV94EPAzwMPJTkJoPd4aPxuSpJWYpxwvx94UZKnJQlwFnAA2Afs6K2zA/joeF2UJK3UyNMyVXVzkg8CtwJHgM8yP82yBbg6ycXM/wJ49Wp0VJI0vLHuCllVlwGXLVj8XeZH8ZKkCfETqpLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktQgw12SGmS4S1KDDHdJatBY4Z7k+CQfTPI3SQ4keXGSE5Jcl+Tu3uMzV6uzkqThjDtyfydwbVX9NPA84ACwC7i+qk4Dru+9liSto5HDPckPAy8F3g1QVd+rqkeA84A9vdX2AOeP10VJ0kqlqkbbMHk+sBu4k/lR+37gzcBXqur4vvUerqonTc0k2QnsBJiZmXnh3r17R+pHt9vl3kcfW9E2Z2w9bqRjbVTdbpctW7ZMuhtTy/oMZo2WN6n6bN++fX9VzS7WNk64zwI3AS+pqpuTvBP4JvCmYcK93+zsbN1yyy0j9aPT6XDRtYdXtM19V5w70rE2qk6nw9zc3KS7MbWsz2DWaHmTqk+SJcN9nDn3g8DBqrq59/qDwAuAh5Kc1DvwScChMY4hSRrByOFeVV8Fvpzk2b1FZzE/RbMP2NFbtgP46Fg9lCSt2NFjbv8m4L1JjgG+BPw6878wrk5yMXA/8OoxjyFJWqGxwr2qPgcsNt9z1jj7lSSNx0+oSlKDDHdJapDhLkkNMtwlqUGGuyQ1yHCXpAYZ7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDRr3xmEb0rZd1zzxfLPd213S5uDIXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktSgscM9yVFJPpvkz3uvT0hyXZK7e4/PHL+bkqSVWI2R+5uBA32vdwHXV9VpwPW915KkdTRWuCc5GTgX+OO+xecBe3rP9wDnj3MMSdLKpapG3zj5IPBfgWcAb6mqVyR5pKqO71vn4ap60tRMkp3AToCZmZkX7t27d6Q+dLtd7n30sZG2BThj63Ejb7tRdLtdtmzZMuluTC3rM5g1Wt6k6rN9+/b9VTW7WNvINw5L8grgUFXtTzK30u2rajewG2B2drbm5la8CwA6nQ7vuOHwSNsC3HfhaMfdSDqdDqPWdzOwPoNZo+VNY33GuSvkS4BXJnk58FTgh5P8KfBQkpOq6sEkJwGHVqOjkqThjTznXlWXVtXJVbUNuAD4eFW9FtgH7OittgP46Ni9XEPbdl3zxB9JasVaXOd+BXB2kruBs3uvJUnraFW+rKOqOkCn9/zrwFmrsV9J0mj8hKokNchwl6QGGe6S1CDDXZIaZLhLUoMMd0lqkOEuSQ0y3CWpQYa7JDXIcJekBhnuktSgVbm3TCv67wx53xXnTrAnkjQeR+6S1CDDXZIaZLhLUoMMd0lqkG+oLsE3VyVtZI7cJalBjtxXiSN9SdPEkbskNWjkcE9ySpJPJDmQ5I4kb+4tPyHJdUnu7j0+c/W6K0kaxjjTMkeAS6rq1iTPAPYnuQ64CLi+qq5IsgvYBfz2+F3dmJyukTQJI4/cq+rBqrq19/xbwAFgK3AesKe32h7g/DH7KElaoVTV+DtJtgGfBE4H7q+q4/vaHq6qJ03NJNkJ7ASYmZl54d69e0c6drfb5d5HHxtp22GdsfW4get84SuPLrr+UsvXU7fbZcuWLRM59kZgfQazRsubVH22b9++v6pmF2sbO9yTbAH+F3B5VX0oySPDhHu/2dnZuuWWW0Y6fqfT4aJrD4+07bCGmU5ZavplGqZlOp0Oc3NzEzn2RmB9BrNGy5tUfZIsGe5jXS2T5CnAnwHvraoP9RY/lOSkXvtJwKFxjiFJWrlxrpYJ8G7gQFX9fl/TPmBH7/kO4KOjd0+SNIpxrpZ5CfA64AtJPtdb9lbgCuDqJBcD9wOvHquHkqQVGzncq+oGIEs0nzXqfiVJ4/MTqpLUIO8tM4RpuOJFklbCkbskNchwl6QGGe6S1CDn3NdA/xy9JE2CI3dJapAj93XkVTeS1ovhvkIGtKSNwGkZSWqQ4S5JDXJaZgxeFSNpWjlyl6QGOXKfAtP8LU6SNibDfcqMO9Wz0l8I/gKR2uS0jCQ1yJH7BjTuaHuY/x1slhH9tl3XcMkZR7ho1zVN/5zafAz3CZnGK22msU+SRmO4bxCjBO/j21xyxhHmVunYK33DdyP9D8A3ttUS59wlqUFrNnJPcg7wTuAo4I+r6oq1OtZmNi1TKat1lc5SP89qjqRXq2aO6DeGzfr3tCbhnuQo4A+Bs4GDwGeS7KuqO9fieBpsLQJtpeusdPk42477j3icerUwjbXw55/Em84rrVe/1eznSo8xzsBlNa3VtMyZwD1V9aWq+h6wFzhvjY4lSVogVbX6O01+GTinql7fe/064Oeq6jf71tkJ7Oy9fDZw14iHOxH42hjd3Qys0fKsz2DWaHmTqs+PV9WPLNawVnPuWWTZD/wWqardwO6xD5TcUlWz4+6nZdZoedZnMGu0vGmsz1pNyxwETul7fTLwwBodS5K0wFqF+2eA05KcmuQY4AJg3xodS5K0wJpMy1TVkSS/Cfwl85dCXllVd6zFsViFqZ1NwBotz/oMZo2WN3X1WZM3VCVJk+UnVCWpQYa7JDVow4R7knOS3JXkniS7FmlPkj/otX8+yQsm0c9JGaI+c0keTfK53p+3T6Kfk5LkyiSHkty+RPumPn9gqBpt9nPolCSfSHIgyR1J3rzIOtNzHlXV1P9h/k3ZvwX+EXAMcBvwnAXrvBz4GPPX2L8IuHnS/Z6y+swBfz7pvk6wRi8FXgDcvkT7pj1/VlCjzX4OnQS8oPf8GcAXpzmHNsrIfZjbGZwH/EnNuwk4PslJ693RCfF2DwNU1SeBbyyzymY+f4CharSpVdWDVXVr7/m3gAPA1gWrTc15tFHCfSvw5b7XB3lyUYdZp1XD/uwvTnJbko8lee76dG3D2Mznz0p4DgFJtgE/C9y8oGlqzqON8mUdA29nMOQ6rRrmZ7+V+ftQdJO8HPgIcNpad2wD2cznz7A8h4AkW4A/A/5dVX1zYfMim0zkPNooI/dhbmewmW95MPBnr6pvVlW39/wvgKckOXH9ujj1NvP5MxTPIUjyFOaD/b1V9aFFVpma82ijhPswtzPYB/xa793qFwGPVtWD693RCRlYnyQ/miS952cy/3f/9XXv6fTazOfPUDb7OdT72d8NHKiq319itak5jzbEtEwtcTuDJG/otf8R8BfMv1N9D/Bt4Ncn1d/1NmR9fhn4jSRHgO8AF1Tv7f3NIMlVzF/tcWKSg8BlwFPA8+dxQ9RoU59DwEuA1wFfSPK53rK3Aj8G03ceefsBSWrQRpmWkSStgOEuSQ0y3CWpQYa7JDXIcJekdTboJm2LrP8rSe7s3bDsfUNt49UykrS+krwU6DJ/H5rTB6x7GnA18M+q6uEkz6qqQ4OO4chdktbZYjdpS/ITSa5Nsj/Jp5L8dK/pXwN/WFUP97YdGOxguEvStNgNvKmqXgi8BXhXb/lPAT+V5H8nuSnJOcPsbEN8QlWSWta7GdnPAx/o3eEB4Nje49HM36Btjvl71XwqyelV9chy+zTcJWnyfgh4pKqev0jbQeCmqvo+cG+Su5gP+88M2qEkaYJ6tw6+N8mr4Ymv63ter/kjwPbe8hOZn6b50qB9Gu6StM56N2m7EXh2koNJLgYuBC5OchtwB3//bWp/CXw9yZ3AJ4D/UFUD78bppZCS1CBH7pLUIMNdkhpkuEtSgwx3SWqQ4S5JDTLcJalBhrskNej/A0ms6wgwGg3NAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cm_df.hist(column='quantity',bins=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This doesn't help much, as the data is still very skewed. Another thing we can try is to plot the logarithm of quantity instead of quantity:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[]], dtype=object)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "cm_df['log quantity'] = np.log10(cm_df['quantity'])\n", "cm_df.hist(column='log quantity')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a fair bit easier to interpret - we can see that quantity broadly varies from 10k bbl to 1M bbl, with a mode around 100k bbl. We can see from this plot that the distribution of quantity appears to be approximately log-normal.\n", "\n", "Let's try a different example - what if we were interested in the composition of vessel classes in these cargo movements?" ] }, { "cell_type": "code", "execution_count": 10, "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", "
load_portunload_portproduct_groupquantityvessel_nameload_Xload_Ylog quantity
vessel_class
aframax4844484848484848
general_purpose160157161161161161161161
handymax150141151151151151151151
handysize10195102102102101101102
lgc55555555
mgc44666666
panamax2726272727272727
sgc4750505050505050
suezmax2927292929292929
tiny_tanker144135145145145145145145
vlcc_plus3535363636353536
vlgc1917202020202020
\n", "
" ], "text/plain": [ " load_port unload_port product_group quantity vessel_name \\\n", "vessel_class \n", "aframax 48 44 48 48 48 \n", "general_purpose 160 157 161 161 161 \n", "handymax 150 141 151 151 151 \n", "handysize 101 95 102 102 102 \n", "lgc 5 5 5 5 5 \n", "mgc 4 4 6 6 6 \n", "panamax 27 26 27 27 27 \n", "sgc 47 50 50 50 50 \n", "suezmax 29 27 29 29 29 \n", "tiny_tanker 144 135 145 145 145 \n", "vlcc_plus 35 35 36 36 36 \n", "vlgc 19 17 20 20 20 \n", "\n", " load_X load_Y log quantity \n", "vessel_class \n", "aframax 48 48 48 \n", "general_purpose 161 161 161 \n", "handymax 151 151 151 \n", "handysize 101 101 102 \n", "lgc 5 5 5 \n", "mgc 6 6 6 \n", "panamax 27 27 27 \n", "sgc 50 50 50 \n", "suezmax 29 29 29 \n", "tiny_tanker 145 145 145 \n", "vlcc_plus 35 35 36 \n", "vlgc 20 20 20 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Start by grouping by vessel class and counting\n", "cm_df_classes = cm_df.groupby('vessel_class').count()\n", "cm_df_classes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because we are using `.count()`, columns have the same values except where data is missing. We want to pick one column with no data missing (say, vessel_name) to use for a pie chart.\n", "\n", "We also note that the number of vessels in classes lgc and mgc are very small, so we shall ignore these." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Drop vessel classes with fewer than 10 vessels (so just lgc and mgc)\n", "cm_df_classes = cm_df_classes[cm_df_classes['vessel_name'] >= 10]\n", "\n", "# Plot pie chart\n", "cm_df_classes.plot.pie(y='vessel_name', legend=False, ylabel='')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "Make a scatter plot of the X and Y coordinates. Does this look how you would expect?" ] }, { "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.7.9" } }, "nbformat": 4, "nbformat_minor": 4 }