A webinar showcasing Vortexa's Python Software Development Kit (SDK), demonstrating the ins & outs of the SDK, and how using Python can expand your energy industry insights.
import pandas as pd
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_colwidth', 100)
pd.set_option('display.max_rows', 300)
from datetime import datetime
from dateutil.relativedelta import relativedelta
from vortexasdk import CargoTimeSeries, Products, Geographies, CargoMovements
# Lets get some crude product categories
products_df = Products().search().to_df(columns="all")
Loading from API: 2000it [00:00, 5724.60it/s]
products_df.head()
id | name | layer.0 | leaf | parent.0.name | parent.0.layer.0 | parent.0.id | ref_type | hierarchy.0.id | hierarchy.0.layer | hierarchy.0.label | hierarchy.1.id | hierarchy.1.layer | hierarchy.1.label | hierarchy.2.id | hierarchy.2.layer | hierarchy.2.label | hierarchy.3.id | hierarchy.3.layer | hierarchy.3.label | meta.sulphur_min | meta.sulphur_max | meta.api_min | meta.api_max | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 6e7da65cfa50b9769f037fb96b914941fcc21b45e97ed931bbe92c0751844f16 | Marine Gasoil 5pc | grade | True | Gasoil | category | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | product | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | category | Gasoil | deda35eb9ca56b54e74f0ff370423f9a8c61cf6a3796fcb18eaeeb32a8c290bb | group_product | Diesel/Gasoil | b68cbb746f8b9098c50e2ba36bcad83001a53bd362e9031fb49085d02c36659c | group | Clean Petroleum Products | 6e7da65cfa50b9769f037fb96b914941fcc21b45e97ed931bbe92c0751844f16 | grade | Marine Gasoil 5pc | NaN | NaN | NaN | NaN |
1 | 896d09d713015c5dc6b089a5b300b2339bc268b1ad3030fe3ddd8e2dcd1ad398 | Marine Gasoil Dyed | grade | True | Gasoil | category | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | product | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | category | Gasoil | deda35eb9ca56b54e74f0ff370423f9a8c61cf6a3796fcb18eaeeb32a8c290bb | group_product | Diesel/Gasoil | b68cbb746f8b9098c50e2ba36bcad83001a53bd362e9031fb49085d02c36659c | group | Clean Petroleum Products | 896d09d713015c5dc6b089a5b300b2339bc268b1ad3030fe3ddd8e2dcd1ad398 | grade | Marine Gasoil Dyed | NaN | NaN | NaN | NaN |
2 | 5d7f8a4c1e467e5e28ac9ccc5990576ce6109847649e37dd183dac5a7249f9b8 | Marine Gasoil Dyed 1000ppm | grade | True | Gasoil | category | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | product | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | category | Gasoil | deda35eb9ca56b54e74f0ff370423f9a8c61cf6a3796fcb18eaeeb32a8c290bb | group_product | Diesel/Gasoil | b68cbb746f8b9098c50e2ba36bcad83001a53bd362e9031fb49085d02c36659c | group | Clean Petroleum Products | 5d7f8a4c1e467e5e28ac9ccc5990576ce6109847649e37dd183dac5a7249f9b8 | grade | Marine Gasoil Dyed 1000ppm | NaN | NaN | NaN | NaN |
3 | 89321760fef994f6a1807364e60e46b9c7411117c314e92fe1ac52d422832708 | Marine Gasoil Dyed 5pc | grade | True | Gasoil | category | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | product | b2034f1ad3a4ac269e962f00b9914d6b909923cf904d9938f641a0853a4eee68 | category | Gasoil | deda35eb9ca56b54e74f0ff370423f9a8c61cf6a3796fcb18eaeeb32a8c290bb | group_product | Diesel/Gasoil | b68cbb746f8b9098c50e2ba36bcad83001a53bd362e9031fb49085d02c36659c | group | Clean Petroleum Products | 89321760fef994f6a1807364e60e46b9c7411117c314e92fe1ac52d422832708 | grade | Marine Gasoil Dyed 5pc | NaN | NaN | NaN | NaN |
4 | a8822d5a0ca144fa881e7972dbc3b06b1b4ef97ba1ea44d19362f779588e7788 | Mariner | grade | True | Heavy-Sour | category | fc2e0746428ed6109045fc1195a4ee4ef2e339d55b7b6e3a0fb01ecf28efc4f7 | product | fc2e0746428ed6109045fc1195a4ee4ef2e339d55b7b6e3a0fb01ecf28efc4f7 | category | Heavy-Sour | 6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653 | group_product | Crude | 54af755a090118dcf9b0724c9a4e9f14745c26165385ffa7f1445bc768f06f11 | group | Crude/Condensates | a8822d5a0ca144fa881e7972dbc3b06b1b4ef97ba1ea44d19362f779588e7788 | grade | Mariner | 1.1 | 1.1 | NaN | NaN |
products_df.shape
(1719, 24)
len(products_df)
# Lets focus on some columns
product_new_labels = {
"id": "id",
"name":"Name",
"parent.0.name":"Parent",
"layer.0":"Layer",
"parent.0.layer.0":"Parent_Layer",
"hierarchy.0.label": "Level_0",
"hierarchy.1.label": "Level_1",
"meta.sulphur_min":"Average_Sulphur",
"meta.api_min":"Average_API",
}
products_df = products_df[list(product_new_labels.keys())].rename(product_new_labels, axis=1)
products_df.head()
id | Name | Parent | Layer | Parent_Layer | Level_0 | Level_1 | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|
0 | 6e7da65cfa50b9769f037fb96b914941fcc21b45e97ed931bbe92c0751844f16 | Marine Gasoil 5pc | Gasoil | grade | category | Gasoil | Diesel/Gasoil | NaN | NaN |
1 | 896d09d713015c5dc6b089a5b300b2339bc268b1ad3030fe3ddd8e2dcd1ad398 | Marine Gasoil Dyed | Gasoil | grade | category | Gasoil | Diesel/Gasoil | NaN | NaN |
2 | 5d7f8a4c1e467e5e28ac9ccc5990576ce6109847649e37dd183dac5a7249f9b8 | Marine Gasoil Dyed 1000ppm | Gasoil | grade | category | Gasoil | Diesel/Gasoil | NaN | NaN |
3 | 89321760fef994f6a1807364e60e46b9c7411117c314e92fe1ac52d422832708 | Marine Gasoil Dyed 5pc | Gasoil | grade | category | Gasoil | Diesel/Gasoil | NaN | NaN |
4 | a8822d5a0ca144fa881e7972dbc3b06b1b4ef97ba1ea44d19362f779588e7788 | Mariner | Heavy-Sour | grade | category | Heavy-Sour | Crude | 1.1 | NaN |
# Let's look at Crude
products_df[products_df['Parent'] == 'Crude']
id | Name | Parent | Layer | Parent_Layer | Level_0 | Level_1 | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|
25 | a7e26956fbb91d786b1d55582981b0d199f72c050958fd3501b3991d24efa2d2 | Medium-Sour | Crude | category | group_product | Crude | Crude/Condensates | 1.88 | 27.41 |
26 | 1c10c409e5412d5eee38bbbd529509d2fe0251fa99e29290c5a58766f8fa3728 | Medium-Sweet | Crude | category | group_product | Crude | Crude/Condensates | 0.27 | 27.70 |
1477 | fc2e0746428ed6109045fc1195a4ee4ef2e339d55b7b6e3a0fb01ecf28efc4f7 | Heavy-Sour | Crude | category | group_product | Crude | Crude/Condensates | 2.53 | 17.39 |
1478 | 3cb81242a4b490d97b78657e8f1d40b994c32d4334051f30369ab18d48b87e4d | Heavy-Sweet | Crude | category | group_product | Crude | Crude/Condensates | 0.22 | 19.27 |
1656 | 87acdcdd0f1b2482eb808d5ea2afdc05266f27e4c9b0a5427c266e42d9bd36c4 | Light-Sour | Crude | category | group_product | Crude | Crude/Condensates | 1.21 | 35.93 |
1657 | 66a98cd9df06660555000f8d4de9bc075e651bce3b57a42fcef33d88c987fc73 | Light-Sweet | Crude | category | group_product | Crude | Crude/Condensates | 0.15 | 41.07 |
We can see the 6 main categories of crude above.
A crude is either defined as Sweet or Sour and this is dependent on the percentage sulphur content (where sulphur is an undesirable contaminant, there are sulphur limits on most finished products meaning sulphur is removed in refining but can damage catalysts at refineries). Sweet crude has less that 0.5% sulphur content and is generally more valuable than sour grades.
API refers to the density of the crude (as in how liquid it is at room temperature and how easy it is to pour). A higher API is a lighter crude, Light crudes tend to have API > 34, Medium is between 31-33 and Heavy is < 30.
Source: https://www.eia.gov/todayinenergy/detail.php?id=33012
# Let's look at Medium-Sour
products_df[products_df['Parent'] == 'Medium-Sour'][0:20]
id | Name | Parent | Layer | Parent_Layer | Level_0 | Level_1 | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|
8 | fc053cfcf989782483e90828766691175c6ec7a898a8903d8c8fb8b7d822d87f | Mars Blend | Medium-Sour | grade | category | Medium-Sour | Crude | 1.9100 | 30.300000 |
11 | 3b6d0123c0a9961c89ec21e2ca2a86a77c80514d496759b87c0ecac5d5578ea1 | Masila | Medium-Sour | grade | category | Medium-Sour | Crude | 0.5400 | 31.400000 |
32 | 043646d21fbcebccd99cf6c9714bc58192ee8efd5a51e684a9d2bbbb6791c253 | Mesa | Medium-Sour | grade | category | Medium-Sour | Crude | 1.1200 | 29.400000 |
82 | fe9b0729fd0849d4a88e03119a900eca68b4b692ebb84a32ae31cbc49b9b0cd5 | Mostarda | Medium-Sour | grade | category | Medium-Sour | Crude | 1.0800 | NaN |
110 | ef32a0f8e8a04053920b1978d938f1bff00b9b51be0740a5bbb1e37ab65051e7 | Nemina Blend | Medium-Sour | grade | category | Medium-Sour | Crude | 1.0000 | 30.029680 |
149 | 3b86a3ac09bc99b53762448bad2c3e0ae6923166ff55bb9dc49286102fb8b5db | Oficina | Medium-Sour | grade | category | Medium-Sour | Crude | 0.7800 | 33.300000 |
150 | 707ea8d9782075f7d815ae673a24962558585ae4e534e1b84d50a07e5d7e5844 | Oguendjo | Medium-Sour | grade | category | Medium-Sour | Crude | 1.5000 | 27.300000 |
162 | 2753e9bf212570d921f9ee8ca891c4aa51f158627c1cccbf55c7d969e11ca0d0 | Olowi | Medium-Sour | grade | category | Medium-Sour | Crude | 1.5000 | 34.000000 |
163 | 8ffbe4cd2ac15fdd9e4d62c62fd3b28359817e14b7ee6ac53dcde70c57dc49c0 | Oman Blend | Medium-Sour | grade | category | Medium-Sour | Crude | 1.4600 | 31.143678 |
167 | 10e10e791f5e5dd8b8b104f8e2726495c6a47ed740e9efde0b61c643f219e6ad | Orito | Medium-Sour | grade | category | Medium-Sour | Crude | 0.7000 | 31.000000 |
274 | 0b534273477046ed15c571b7589a3d389a203448e3d77bd11b184a1f48d36509 | Poseidon | Medium-Sour | grade | category | Medium-Sour | Crude | 1.9700 | 29.600000 |
282 | 01b3991d244fa2d2a7e26956fbb91d786b1d55582981b0d199f72c050958fd35 | Prinos | Medium-Sour | grade | category | Medium-Sour | Crude | 0.9000 | 31.000000 |
308 | ae7bf6d95edf552d37324c596332dd6fa5f185fcd7c5619b961a4d9655ef2a42 | Qarun | Medium-Sour | grade | category | Medium-Sour | Crude | 1.4500 | 35.000000 |
310 | 87d4681e0d424322d4ff866e9df6f4ea22f268559112c9068dfb299629567518 | Qatar Marine | Medium-Sour | grade | category | Medium-Sour | Crude | 2.2100 | 30.956900 |
314 | 695da51dd0aed2dad4b1cace1fee35d346e90e9df9f575625937eb9e491da025 | Quenquela | Medium-Sour | grade | category | Medium-Sour | Crude | 0.9400 | 31.100000 |
367 | 84f0716e03f53a1c0a1422e63454e4658120bbeb764f97faa0402d7ece0f4a1d | Ras El Behar | Medium-Sour | grade | category | Medium-Sour | Crude | 1.6000 | 33.000000 |
384 | ce571ea62f36135810cf73b2c4d755f7a5b63d73f51dcc0f0275f387a45acd7d | Roncador | Medium-Sour | grade | category | Medium-Sour | Crude | 0.5800 | 29.000000 |
409 | 2bf854f5546a47bdabda28266d3a3a762cab1c8f5da34be7a2462577e62f7314 | Saldahna Blend | Medium-Sour | grade | category | Medium-Sour | Crude | 0.8700 | 31.080000 |
413 | c56c8a9d8404573236950b3644825b6928bf0c1f47abccc08e5aeff1afeabb5c | Sandibinskaya (Ob Bay) | Medium-Sour | grade | category | Medium-Sour | Crude | 0.8655 | 31.900000 |
420 | 782d61314e574961c427bb90755f56488027c6c14721f1054832f441b4b372c5 | Sassan | Medium-Sour | grade | category | Medium-Sour | Crude | 1.9100 | 33.900000 |
len(products_df[products_df['Parent'] == 'Medium-Sour'])
99
We can see 20/99 Medium-Sour grades of Crude. But in general the following grades are well known examples of crudes by categories:
Light-Sweet: WTI (Benchmark US Grade) or Brent (North Sea)
Light-Sour: CPC Blend (Russia) or Murban from UAE
Medium-Sweet: Forcados (Nigeria) or Tupi/Lula (Brazil)
Medium-Sour: Middle-Eastern grades such as Arab Light (Saudi Arabia) or Basrah Light (Iraq); Also Russian Urals
Heavy-Sweet: DOBA (Chad biggest flow) or Djeno (Democratic Republic of Congo) - WAF grades
Heavy-Sour: Basrah Heavy (Iraq) or Maya (Mexico)
Suppose we care about specific product groups, we need to group products according to those groups.
products_df.dtypes
id object Name object Parent object Layer object Parent_Layer object Level_0 object Level_1 object Average_Sulphur float64 Average_API float64 dtype: object
mask = ((products_df["Layer"]=="grade") & (products_df["Level_1"]=="Crude"))
crudes_df = products_df.loc[mask]
crudes_df.head()
id | Name | Parent | Layer | Parent_Layer | Level_0 | Level_1 | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|
4 | a8822d5a0ca144fa881e7972dbc3b06b1b4ef97ba1ea44d19362f779588e7788 | Mariner | Heavy-Sour | grade | category | Heavy-Sour | Crude | 1.100 | NaN |
5 | adb6244e45c4f1ec18f8e4f2b9144c52833866316f20b0a216bf93e0fa08ae22 | Marlim | Heavy-Sour | grade | category | Heavy-Sour | Crude | 0.670 | 19.6 |
6 | b20cd165eb8a4dcab1c59e98a78b62c0c50efd17b42b4d83b32aa43b4feb09c6 | Marlim Leste | Heavy-Sour | grade | category | Heavy-Sour | Crude | 0.553 | 24.7 |
7 | a250444936b94aadb1cea3bb69daeee312f666a71cc8433e8811e341c39d6bfb | Marlim Sul | Heavy-Sour | grade | category | Heavy-Sour | Crude | 0.670 | NaN |
8 | fc053cfcf989782483e90828766691175c6ec7a898a8903d8c8fb8b7d822d87f | Mars Blend | Medium-Sour | grade | category | Medium-Sour | Crude | 1.910 | 30.3 |
crudes_df.shape
(711, 9)
Say, we care about the last 2 years or so:
now = datetime.utcnow()
two_years_ago = now - relativedelta(months=24)
two_years_ago
datetime.datetime(2019, 5, 27, 9, 12, 17, 203201)
Now, "Crude" is both a category and a product itself. Lets fetch it's unique id
:
# Grab the ID for Crude
crude_search = Products().search(term=['Crude'], exact_term_match=True)
assert len(crude_search) == 1
crude_ID = crude_search[0]['id']
crude_ID
'6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653'
Let's inspect some geographical A.R.A. (Amsterdam, Rotterdam, Antwerp) regions:
# Grab the ID for ARA
ara_search = Geographies().search("ARA Region",exact_term_match=True)
assert len(ara_search) == 1
ARA_ID = ara_search[0]['id']
ARA_ID
'a50f4a476665d3d507f54398b1a1aed1746c5469619c83c3398716724f8dda27'
We will use ARA region as it is the main refining hub for North West Europe and therefore a key crude importer.
Let's get the cargo-movements we care about:
# Create and run the query
ARA_crude_imports_df = CargoMovements().search(
filter_activity="unloading_start",
filter_time_min=two_years_ago,
filter_time_max=now,
filter_products=crude_ID,
filter_destinations=ARA_ID).to_df(columns="all")
Loading from API: 2500it [00:01, 1661.78it/s]
ARA_crude_imports_df.head()
cargo_movement_id | quantity | status | vessels.0.id | vessels.0.mmsi | vessels.0.imo | vessels.0.name | vessels.0.dwt | vessels.0.cubic_capacity | vessels.0.vessel_class | vessels.0.corporate_entities.charterer.id | vessels.0.corporate_entities.charterer.label | vessels.0.corporate_entities.charterer.layer | vessels.0.corporate_entities.charterer.probability | vessels.0.corporate_entities.charterer.source | vessels.0.corporate_entities.commercial_owner.id | vessels.0.corporate_entities.commercial_owner.label | vessels.0.corporate_entities.commercial_owner.layer | vessels.0.corporate_entities.commercial_owner.probability | vessels.0.corporate_entities.commercial_owner.source | vessels.0.start_timestamp | vessels.0.end_timestamp | vessels.0.fixture_fulfilled | vessels.0.voyage_id | vessels.0.status | vessels.0.year | vessels.0.flag.0.flag | vessels.0.flag.0.flag_country | vessels.0.flag.0.tag | product.group.id | product.group.layer | product.group.probability | product.group.source | product.group.label | product.group_product.id | product.group_product.layer | product.group_product.probability | product.group_product.source | product.group_product.label | product.category.id | product.category.layer | product.category.probability | product.category.source | product.category.label | product.grade.id | product.grade.layer | product.grade.probability | product.grade.source | product.grade.label | events.cargo_port_load_event.0.event_type | events.cargo_port_load_event.0.location.country.id | events.cargo_port_load_event.0.location.country.layer | events.cargo_port_load_event.0.location.country.label | events.cargo_port_load_event.0.location.country.source | events.cargo_port_load_event.0.location.country.probability | events.cargo_port_load_event.0.location.port.id | events.cargo_port_load_event.0.location.port.layer | events.cargo_port_load_event.0.location.port.label | events.cargo_port_load_event.0.location.port.source | events.cargo_port_load_event.0.location.port.probability | events.cargo_port_load_event.0.location.region.id | events.cargo_port_load_event.0.location.region.layer | events.cargo_port_load_event.0.location.region.label | events.cargo_port_load_event.0.location.region.source | events.cargo_port_load_event.0.location.region.probability | events.cargo_port_load_event.0.location.shipping_region.id | events.cargo_port_load_event.0.location.shipping_region.layer | events.cargo_port_load_event.0.location.shipping_region.label | events.cargo_port_load_event.0.location.shipping_region.source | events.cargo_port_load_event.0.location.shipping_region.probability | events.cargo_port_load_event.0.location.trading_block.id | events.cargo_port_load_event.0.location.trading_block.layer | events.cargo_port_load_event.0.location.trading_block.label | events.cargo_port_load_event.0.location.trading_block.source | events.cargo_port_load_event.0.location.trading_block.probability | events.cargo_port_load_event.0.location.trading_region.id | events.cargo_port_load_event.0.location.trading_region.layer | events.cargo_port_load_event.0.location.trading_region.label | events.cargo_port_load_event.0.location.trading_region.source | events.cargo_port_load_event.0.location.trading_region.probability | events.cargo_port_load_event.0.location.trading_subregion.id | events.cargo_port_load_event.0.location.trading_subregion.layer | events.cargo_port_load_event.0.location.trading_subregion.label | events.cargo_port_load_event.0.location.trading_subregion.source | events.cargo_port_load_event.0.location.trading_subregion.probability | events.cargo_port_load_event.0.location.terminal.id | events.cargo_port_load_event.0.location.terminal.layer | events.cargo_port_load_event.0.location.terminal.label | events.cargo_port_load_event.0.location.terminal.source | events.cargo_port_load_event.0.location.terminal.probability | events.cargo_port_load_event.0.probability | events.cargo_port_load_event.0.pos.0 | events.cargo_port_load_event.0.pos.1 | events.cargo_port_load_event.0.start_timestamp | events.cargo_port_load_event.0.end_timestamp | events.cargo_port_unload_event.0.event_type | events.cargo_port_unload_event.0.location.country.id | events.cargo_port_unload_event.0.location.country.layer | events.cargo_port_unload_event.0.location.country.label | events.cargo_port_unload_event.0.location.country.source | events.cargo_port_unload_event.0.location.country.probability | events.cargo_port_unload_event.0.location.port.id | events.cargo_port_unload_event.0.location.port.layer | events.cargo_port_unload_event.0.location.port.label | events.cargo_port_unload_event.0.location.port.source | events.cargo_port_unload_event.0.location.port.probability | events.cargo_port_unload_event.0.location.region.id | events.cargo_port_unload_event.0.location.region.layer | events.cargo_port_unload_event.0.location.region.label | events.cargo_port_unload_event.0.location.region.source | events.cargo_port_unload_event.0.location.region.probability | events.cargo_port_unload_event.0.location.shipping_region.id | events.cargo_port_unload_event.0.location.shipping_region.layer | events.cargo_port_unload_event.0.location.shipping_region.label | events.cargo_port_unload_event.0.location.shipping_region.source | events.cargo_port_unload_event.0.location.shipping_region.probability | events.cargo_port_unload_event.0.location.trading_block.id | events.cargo_port_unload_event.0.location.trading_block.layer | events.cargo_port_unload_event.0.location.trading_block.label | events.cargo_port_unload_event.0.location.trading_block.source | events.cargo_port_unload_event.0.location.trading_block.probability | events.cargo_port_unload_event.0.location.trading_region.id | events.cargo_port_unload_event.0.location.trading_region.layer | events.cargo_port_unload_event.0.location.trading_region.label | events.cargo_port_unload_event.0.location.trading_region.source | events.cargo_port_unload_event.0.location.trading_region.probability | events.cargo_port_unload_event.0.location.trading_subregion.id | events.cargo_port_unload_event.0.location.trading_subregion.layer | events.cargo_port_unload_event.0.location.trading_subregion.label | events.cargo_port_unload_event.0.location.trading_subregion.source | events.cargo_port_unload_event.0.location.trading_subregion.probability | events.cargo_port_unload_event.0.location.terminal.id | events.cargo_port_unload_event.0.location.terminal.layer | events.cargo_port_unload_event.0.location.terminal.label | events.cargo_port_unload_event.0.location.terminal.source | events.cargo_port_unload_event.0.location.terminal.probability | events.cargo_port_unload_event.0.probability | events.cargo_port_unload_event.0.pos.0 | events.cargo_port_unload_event.0.pos.1 | events.cargo_port_unload_event.0.start_timestamp | events.cargo_port_unload_event.0.end_timestamp | events.cargo_waypoint_event.0.event_type | events.cargo_waypoint_event.0.vessel_id | events.cargo_waypoint_event.0.location.waypoint.id | events.cargo_waypoint_event.0.location.waypoint.layer | events.cargo_waypoint_event.0.location.waypoint.label | events.cargo_waypoint_event.0.location.waypoint.source | events.cargo_waypoint_event.0.location.waypoint.probability | events.cargo_waypoint_event.0.pos.0 | events.cargo_waypoint_event.0.pos.1 | events.cargo_waypoint_event.0.probability | events.cargo_waypoint_event.0.start_timestamp | events.cargo_waypoint_event.0.end_timestamp | events.cargo_waypoint_event.1.event_type | events.cargo_waypoint_event.1.vessel_id | events.cargo_waypoint_event.1.location.waypoint.id | events.cargo_waypoint_event.1.location.waypoint.layer | events.cargo_waypoint_event.1.location.waypoint.label | events.cargo_waypoint_event.1.location.waypoint.source | events.cargo_waypoint_event.1.location.waypoint.probability | events.cargo_waypoint_event.1.pos.0 | events.cargo_waypoint_event.1.pos.1 | events.cargo_waypoint_event.1.probability | events.cargo_waypoint_event.1.start_timestamp | events.cargo_waypoint_event.1.end_timestamp | events.cargo_waypoint_event.2.event_type | events.cargo_waypoint_event.2.vessel_id | events.cargo_waypoint_event.2.location.waypoint.id | events.cargo_waypoint_event.2.location.waypoint.layer | events.cargo_waypoint_event.2.location.waypoint.label | events.cargo_waypoint_event.2.location.waypoint.source | events.cargo_waypoint_event.2.location.waypoint.probability | events.cargo_waypoint_event.2.pos.0 | events.cargo_waypoint_event.2.pos.1 | events.cargo_waypoint_event.2.probability | events.cargo_waypoint_event.2.start_timestamp | events.cargo_waypoint_event.2.end_timestamp | events.cargo_waypoint_event.3.event_type | events.cargo_waypoint_event.3.vessel_id | events.cargo_waypoint_event.3.location.waypoint.id | events.cargo_waypoint_event.3.location.waypoint.layer | events.cargo_waypoint_event.3.location.waypoint.label | events.cargo_waypoint_event.3.location.waypoint.source | events.cargo_waypoint_event.3.location.waypoint.probability | events.cargo_waypoint_event.3.pos.0 | events.cargo_waypoint_event.3.pos.1 | events.cargo_waypoint_event.3.probability | events.cargo_waypoint_event.3.start_timestamp | events.cargo_waypoint_event.3.end_timestamp | events.cargo_waypoint_event.4.event_type | events.cargo_waypoint_event.4.vessel_id | events.cargo_waypoint_event.4.location.waypoint.id | events.cargo_waypoint_event.4.location.waypoint.layer | events.cargo_waypoint_event.4.location.waypoint.label | events.cargo_waypoint_event.4.location.waypoint.source | events.cargo_waypoint_event.4.location.waypoint.probability | events.cargo_waypoint_event.4.pos.0 | events.cargo_waypoint_event.4.pos.1 | events.cargo_waypoint_event.4.probability | events.cargo_waypoint_event.4.start_timestamp | events.cargo_waypoint_event.4.end_timestamp | vessels.0.fixture_id | vessels.0.ice_class | vessels.1.id | vessels.1.mmsi | vessels.1.imo | vessels.1.name | vessels.1.dwt | vessels.1.cubic_capacity | vessels.1.vessel_class | vessels.1.corporate_entities.charterer.id | vessels.1.corporate_entities.charterer.label | vessels.1.corporate_entities.charterer.layer | vessels.1.corporate_entities.charterer.probability | vessels.1.corporate_entities.charterer.source | vessels.1.corporate_entities.commercial_owner.id | vessels.1.corporate_entities.commercial_owner.label | vessels.1.corporate_entities.commercial_owner.layer | vessels.1.corporate_entities.commercial_owner.probability | vessels.1.corporate_entities.commercial_owner.source | vessels.1.start_timestamp | vessels.1.end_timestamp | vessels.1.voyage_id | vessels.1.status | vessels.1.year | vessels.1.scrubber.0.scrubber | vessels.1.scrubber.0.tag | vessels.1.scrubber.0.planned | vessels.1.flag.0.flag | vessels.1.flag.0.flag_country | vessels.1.flag.0.tag | events.cargo_sts_event.0.event_type | events.cargo_sts_event.0.from_vessel_id | events.cargo_sts_event.0.from_vessel_name | events.cargo_sts_event.0.to_vessel_id | events.cargo_sts_event.0.to_vessel_name | events.cargo_sts_event.0.location.country.id | events.cargo_sts_event.0.location.country.layer | events.cargo_sts_event.0.location.country.label | events.cargo_sts_event.0.location.country.source | events.cargo_sts_event.0.location.country.probability | events.cargo_sts_event.0.location.region.id | events.cargo_sts_event.0.location.region.layer | events.cargo_sts_event.0.location.region.label | events.cargo_sts_event.0.location.region.source | events.cargo_sts_event.0.location.region.probability | events.cargo_sts_event.0.location.shipping_region.id | events.cargo_sts_event.0.location.shipping_region.layer | events.cargo_sts_event.0.location.shipping_region.label | events.cargo_sts_event.0.location.shipping_region.source | ... | events.cargo_waypoint_event.30.start_timestamp | events.cargo_waypoint_event.30.end_timestamp | events.cargo_waypoint_event.31.event_type | events.cargo_waypoint_event.31.vessel_id | events.cargo_waypoint_event.31.location.waypoint.id | events.cargo_waypoint_event.31.location.waypoint.layer | events.cargo_waypoint_event.31.location.waypoint.label | events.cargo_waypoint_event.31.location.waypoint.source | events.cargo_waypoint_event.31.location.waypoint.probability | events.cargo_waypoint_event.31.pos.0 | events.cargo_waypoint_event.31.pos.1 | events.cargo_waypoint_event.31.probability | events.cargo_waypoint_event.31.start_timestamp | events.cargo_waypoint_event.31.end_timestamp | events.cargo_waypoint_event.32.event_type | events.cargo_waypoint_event.32.vessel_id | events.cargo_waypoint_event.32.location.waypoint.id | events.cargo_waypoint_event.32.location.waypoint.layer | events.cargo_waypoint_event.32.location.waypoint.label | events.cargo_waypoint_event.32.location.waypoint.source | events.cargo_waypoint_event.32.location.waypoint.probability | events.cargo_waypoint_event.32.pos.0 | events.cargo_waypoint_event.32.pos.1 | events.cargo_waypoint_event.32.probability | events.cargo_waypoint_event.32.start_timestamp | events.cargo_waypoint_event.32.end_timestamp | events.cargo_waypoint_event.33.event_type | events.cargo_waypoint_event.33.vessel_id | events.cargo_waypoint_event.33.location.waypoint.id | events.cargo_waypoint_event.33.location.waypoint.layer | events.cargo_waypoint_event.33.location.waypoint.label | events.cargo_waypoint_event.33.location.waypoint.source | events.cargo_waypoint_event.33.location.waypoint.probability | events.cargo_waypoint_event.33.pos.0 | events.cargo_waypoint_event.33.pos.1 | events.cargo_waypoint_event.33.probability | events.cargo_waypoint_event.33.start_timestamp | events.cargo_waypoint_event.33.end_timestamp | events.cargo_waypoint_event.34.event_type | events.cargo_waypoint_event.34.vessel_id | events.cargo_waypoint_event.34.location.waypoint.id | events.cargo_waypoint_event.34.location.waypoint.layer | events.cargo_waypoint_event.34.location.waypoint.label | events.cargo_waypoint_event.34.location.waypoint.source | events.cargo_waypoint_event.34.location.waypoint.probability | events.cargo_waypoint_event.34.pos.0 | events.cargo_waypoint_event.34.pos.1 | events.cargo_waypoint_event.34.probability | events.cargo_waypoint_event.34.start_timestamp | events.cargo_waypoint_event.34.end_timestamp | events.cargo_waypoint_event.35.event_type | events.cargo_waypoint_event.35.vessel_id | events.cargo_waypoint_event.35.location.waypoint.id | events.cargo_waypoint_event.35.location.waypoint.layer | events.cargo_waypoint_event.35.location.waypoint.label | events.cargo_waypoint_event.35.location.waypoint.source | events.cargo_waypoint_event.35.location.waypoint.probability | events.cargo_waypoint_event.35.pos.0 | events.cargo_waypoint_event.35.pos.1 | events.cargo_waypoint_event.35.probability | events.cargo_waypoint_event.35.start_timestamp | events.cargo_waypoint_event.35.end_timestamp | events.cargo_waypoint_event.36.event_type | events.cargo_waypoint_event.36.vessel_id | events.cargo_waypoint_event.36.location.waypoint.id | events.cargo_waypoint_event.36.location.waypoint.layer | events.cargo_waypoint_event.36.location.waypoint.label | events.cargo_waypoint_event.36.location.waypoint.source | events.cargo_waypoint_event.36.location.waypoint.probability | events.cargo_waypoint_event.36.pos.0 | events.cargo_waypoint_event.36.pos.1 | events.cargo_waypoint_event.36.probability | events.cargo_waypoint_event.36.start_timestamp | events.cargo_waypoint_event.36.end_timestamp | events.cargo_waypoint_event.37.event_type | events.cargo_waypoint_event.37.vessel_id | events.cargo_waypoint_event.37.location.waypoint.id | events.cargo_waypoint_event.37.location.waypoint.layer | events.cargo_waypoint_event.37.location.waypoint.label | events.cargo_waypoint_event.37.location.waypoint.source | events.cargo_waypoint_event.37.location.waypoint.probability | events.cargo_waypoint_event.37.pos.0 | events.cargo_waypoint_event.37.pos.1 | events.cargo_waypoint_event.37.probability | events.cargo_waypoint_event.37.start_timestamp | events.cargo_waypoint_event.37.end_timestamp | events.cargo_waypoint_event.38.event_type | events.cargo_waypoint_event.38.vessel_id | events.cargo_waypoint_event.38.location.waypoint.id | events.cargo_waypoint_event.38.location.waypoint.layer | events.cargo_waypoint_event.38.location.waypoint.label | events.cargo_waypoint_event.38.location.waypoint.source | events.cargo_waypoint_event.38.location.waypoint.probability | events.cargo_waypoint_event.38.pos.0 | events.cargo_waypoint_event.38.pos.1 | events.cargo_waypoint_event.38.probability | events.cargo_waypoint_event.38.start_timestamp | events.cargo_waypoint_event.38.end_timestamp | events.cargo_waypoint_event.39.event_type | events.cargo_waypoint_event.39.vessel_id | events.cargo_waypoint_event.39.location.waypoint.id | events.cargo_waypoint_event.39.location.waypoint.layer | events.cargo_waypoint_event.39.location.waypoint.label | events.cargo_waypoint_event.39.location.waypoint.source | events.cargo_waypoint_event.39.location.waypoint.probability | events.cargo_waypoint_event.39.pos.0 | events.cargo_waypoint_event.39.pos.1 | events.cargo_waypoint_event.39.probability | events.cargo_waypoint_event.39.start_timestamp | events.cargo_waypoint_event.39.end_timestamp | events.cargo_waypoint_event.40.event_type | events.cargo_waypoint_event.40.vessel_id | events.cargo_waypoint_event.40.location.waypoint.id | events.cargo_waypoint_event.40.location.waypoint.layer | events.cargo_waypoint_event.40.location.waypoint.label | events.cargo_waypoint_event.40.location.waypoint.source | events.cargo_waypoint_event.40.location.waypoint.probability | events.cargo_waypoint_event.40.pos.0 | events.cargo_waypoint_event.40.pos.1 | events.cargo_waypoint_event.40.probability | events.cargo_waypoint_event.40.start_timestamp | events.cargo_waypoint_event.40.end_timestamp | events.cargo_waypoint_event.41.event_type | events.cargo_waypoint_event.41.vessel_id | events.cargo_waypoint_event.41.location.waypoint.id | events.cargo_waypoint_event.41.location.waypoint.layer | events.cargo_waypoint_event.41.location.waypoint.label | events.cargo_waypoint_event.41.location.waypoint.source | events.cargo_waypoint_event.41.location.waypoint.probability | events.cargo_waypoint_event.41.pos.0 | events.cargo_waypoint_event.41.pos.1 | events.cargo_waypoint_event.41.probability | events.cargo_waypoint_event.41.start_timestamp | events.cargo_waypoint_event.41.end_timestamp | events.cargo_waypoint_event.42.event_type | events.cargo_waypoint_event.42.vessel_id | events.cargo_waypoint_event.42.location.waypoint.id | events.cargo_waypoint_event.42.location.waypoint.layer | events.cargo_waypoint_event.42.location.waypoint.label | events.cargo_waypoint_event.42.location.waypoint.source | events.cargo_waypoint_event.42.location.waypoint.probability | events.cargo_waypoint_event.42.pos.0 | events.cargo_waypoint_event.42.pos.1 | events.cargo_waypoint_event.42.probability | events.cargo_waypoint_event.42.start_timestamp | events.cargo_waypoint_event.42.end_timestamp | events.cargo_waypoint_event.43.event_type | events.cargo_waypoint_event.43.vessel_id | events.cargo_waypoint_event.43.location.waypoint.id | events.cargo_waypoint_event.43.location.waypoint.layer | events.cargo_waypoint_event.43.location.waypoint.label | events.cargo_waypoint_event.43.location.waypoint.source | events.cargo_waypoint_event.43.location.waypoint.probability | events.cargo_waypoint_event.43.pos.0 | events.cargo_waypoint_event.43.pos.1 | events.cargo_waypoint_event.43.probability | events.cargo_waypoint_event.43.start_timestamp | events.cargo_waypoint_event.43.end_timestamp | events.cargo_waypoint_event.44.event_type | events.cargo_waypoint_event.44.vessel_id | events.cargo_waypoint_event.44.location.waypoint.id | events.cargo_waypoint_event.44.location.waypoint.layer | events.cargo_waypoint_event.44.location.waypoint.label | events.cargo_waypoint_event.44.location.waypoint.source | events.cargo_waypoint_event.44.location.waypoint.probability | events.cargo_waypoint_event.44.pos.0 | events.cargo_waypoint_event.44.pos.1 | events.cargo_waypoint_event.44.probability | events.cargo_waypoint_event.44.start_timestamp | events.cargo_waypoint_event.44.end_timestamp | events.cargo_waypoint_event.45.event_type | events.cargo_waypoint_event.45.vessel_id | events.cargo_waypoint_event.45.location.waypoint.id | events.cargo_waypoint_event.45.location.waypoint.layer | events.cargo_waypoint_event.45.location.waypoint.label | events.cargo_waypoint_event.45.location.waypoint.source | events.cargo_waypoint_event.45.location.waypoint.probability | events.cargo_waypoint_event.45.pos.0 | events.cargo_waypoint_event.45.pos.1 | events.cargo_waypoint_event.45.probability | events.cargo_waypoint_event.45.start_timestamp | events.cargo_waypoint_event.45.end_timestamp | events.cargo_waypoint_event.46.event_type | events.cargo_waypoint_event.46.vessel_id | events.cargo_waypoint_event.46.location.waypoint.id | events.cargo_waypoint_event.46.location.waypoint.layer | events.cargo_waypoint_event.46.location.waypoint.label | events.cargo_waypoint_event.46.location.waypoint.source | events.cargo_waypoint_event.46.location.waypoint.probability | events.cargo_waypoint_event.46.pos.0 | events.cargo_waypoint_event.46.pos.1 | events.cargo_waypoint_event.46.probability | events.cargo_waypoint_event.46.start_timestamp | events.cargo_waypoint_event.46.end_timestamp | events.cargo_waypoint_event.47.event_type | events.cargo_waypoint_event.47.vessel_id | events.cargo_waypoint_event.47.location.waypoint.id | events.cargo_waypoint_event.47.location.waypoint.layer | events.cargo_waypoint_event.47.location.waypoint.label | events.cargo_waypoint_event.47.location.waypoint.source | events.cargo_waypoint_event.47.location.waypoint.probability | events.cargo_waypoint_event.47.pos.0 | events.cargo_waypoint_event.47.pos.1 | events.cargo_waypoint_event.47.probability | events.cargo_waypoint_event.47.start_timestamp | events.cargo_waypoint_event.47.end_timestamp | events.cargo_waypoint_event.48.event_type | events.cargo_waypoint_event.48.vessel_id | events.cargo_waypoint_event.48.location.waypoint.id | events.cargo_waypoint_event.48.location.waypoint.layer | events.cargo_waypoint_event.48.location.waypoint.label | events.cargo_waypoint_event.48.location.waypoint.source | events.cargo_waypoint_event.48.location.waypoint.probability | events.cargo_waypoint_event.48.pos.0 | events.cargo_waypoint_event.48.pos.1 | events.cargo_waypoint_event.48.probability | events.cargo_waypoint_event.48.start_timestamp | events.cargo_waypoint_event.48.end_timestamp | events.cargo_waypoint_event.49.event_type | events.cargo_waypoint_event.49.vessel_id | events.cargo_waypoint_event.49.location.waypoint.id | events.cargo_waypoint_event.49.location.waypoint.layer | events.cargo_waypoint_event.49.location.waypoint.label | events.cargo_waypoint_event.49.location.waypoint.source | events.cargo_waypoint_event.49.location.waypoint.probability | events.cargo_waypoint_event.49.pos.0 | events.cargo_waypoint_event.49.pos.1 | events.cargo_waypoint_event.49.probability | events.cargo_waypoint_event.49.start_timestamp | events.cargo_waypoint_event.49.end_timestamp | events.cargo_storage_event.0.location.waypoint.id | events.cargo_storage_event.0.location.waypoint.layer | events.cargo_storage_event.0.location.waypoint.label | events.cargo_storage_event.0.location.waypoint.source | events.cargo_storage_event.0.location.waypoint.probability | events.cargo_storage_event.4.location.trading_subregion.id | events.cargo_storage_event.4.location.trading_subregion.layer | events.cargo_storage_event.4.location.trading_subregion.label | events.cargo_storage_event.4.location.trading_subregion.source | events.cargo_storage_event.4.location.trading_subregion.probability | events.cargo_storage_event.5.location.trading_subregion.id | events.cargo_storage_event.5.location.trading_subregion.layer | events.cargo_storage_event.5.location.trading_subregion.label | events.cargo_storage_event.5.location.trading_subregion.source | events.cargo_storage_event.5.location.trading_subregion.probability | events.cargo_storage_event.0.location.port.id | events.cargo_storage_event.0.location.port.layer | events.cargo_storage_event.0.location.port.label | events.cargo_storage_event.0.location.port.source | events.cargo_storage_event.0.location.port.probability | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | 742020 | unloaded_state | b27299265c1727e8d20d94e567d07d828c9e9126039d593e32946c48f143af94 | 403537000 | 9484742 | FARHAH | 319302 | 350111 | vlcc_plus | c9d5a657b8613de98c3d9ee6b250a26ac224621669959963588a9239d62a7969 | BAHRI | charterer | 1.0 | external | c9d5a657b8613de98c3d9ee6b250a26ac224621669959963588a9239d62a7969 | BAHRI | commercial_owner | 1.0 | external | 2019-05-13 19:25:09+00:00 | 2019-06-16 21:15:03+00:00 | False | ac4db34afac4995d0a439015cecf13d3ce8d5e9ca34b286f0f9f442b0d0468b8 | 2010 | SA | 43a70ba6b21894cd24165d9d7ee59b012e698cf97e22fd275ccdd05a556e7061 | vessel_flag_tag | 54af755a090118dcf9b0724c9a4e9f14745c26165385ffa7f1445bc768f06f11 | group | 1.000000 | external | Crude/Condensates | 6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653 | group_product | 1.000000 | external | Crude | a7e26956fbb91d786b1d55582981b0d199f72c050958fd3501b3991d24efa2d2 | category | 1.000000 | external | Medium-Sour | 448d24e0dd61958694eeb59822acea8eeea85326e6cb67a0739856508107ef5b | grade | 1.000000 | external | Arab Heavy | cargo_port_load_event | 43a70ba6b21894cd24165d9d7ee59b012e698cf97e22fd275ccdd05a556e7061 | country | Saudi Arabia | model | 1.0 | 7d9f3db7ba4035d60fb2b3536c2a83ca151f1d24c29e77d2f3bda32b82dfeb7d | port | Juaymah Terminal [SA] | model | 1.0 | 80aa9e4f3014c3d96559c8e642157edbb2b684ea0144ed76cd20b3af75110877 | region | Middle East | model | 1.0 | 7bc5d2b5ea1cc552f6df9640185e8c7923106b0099a9c432437b8c5768aa670a | shipping_region | Persian Gulf | model | 1.0 | fc6694742ebce49ff955fffa066898c41686d460ab683ab5c44dc7b799aeac58 | trading_block | East of Suez | model | 1.0 | 0899599f74faadb7ba7eb65205ee5c20cb434367a6e7203bc274d310cdb54754 | trading_region | MEG/AG | model | 1.0 | 2dc1973a5fc58b674b59319ddfb3e76fe551078919c7ccaaeca6e550fa3eaba1 | trading_subregion | Saudi Arabia Gulf | model | 1.0 | c3daea3cc9c5b3bd91c90882d42c2a418c4cf17b90ff12da3ac78444282a238a | terminal | Juaymah Crude Oil Terminal | model | 1.0 | 1.0 | 50.034275 | 26.942626 | 2019-05-13 19:25:09+00:00 | 2019-05-15 13:51:13+00:00 | cargo_port_unload_event | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | country | Netherlands | model | 1 | 68faf65af1345067f11dc6723b8da32f00e304a6f33c000118fccd81947deb4e | port | Rotterdam [NL] | model | 1 | f39d455f5d38907394d6da3a91da4e391f9a34bd6a17e826d6042761067e88f4 | region | Europe | model | 1 | 7fe5c7cd39e8e95bfab135ca495b1fb577367ae89e3f6148375b9122bd8c461a | shipping_region | UK Cont | model | 1 | 676c3cff1dffd971ae51cd350f231394eeb0ab94eff981432f6ee55c5219b913 | trading_block | UKC-Med region | model | 1 | a50f4a476665d3d507f54398b1a1aed1746c5469619c83c3398716724f8dda27 | trading_region | ARA Region | model | 1 | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | trading_subregion | Netherlands | model | 1 | 702e363b7f7647d0adae5c67debf65f079b01954f0121ce2354021c32b0f9918 | terminal | TEAM Terminal B.V. | model | 1 | 1 | 4.160543 | 51.945538 | 2019-06-15 13:12:10+00:00 | 2019-06-16 21:15:03+00:00 | cargo_waypoint_event | b27299265c1727e8d20d94e567d07d828c9e9126039d593e32946c48f143af94 | 084435d1e53d1e97b34e75c030c11be2c466e671acca53561dd3fdd13c77a5ec | waypoint | Dover Strait | model | 1.0 | 1.279142 | 50.889389 | 1.0 | 2019-06-13 11:07:23+00:00 | 2019-06-13 15:20:44+00:00 | cargo_waypoint_event | b27299265c1727e8d20d94e567d07d828c9e9126039d593e32946c48f143af94 | 703a4af533b42e86a0473f6b464ad2da1bb04cf899a167d2e452aa82de6bbb00 | waypoint | Cape Finisterre | model | 1.0 | -10.205057 | 43.336051 | 1.0 | 2019-06-10 21:57:51+00:00 | 2019-06-11 03:27:50+00:00 | cargo_waypoint_event | b27299265c1727e8d20d94e567d07d828c9e9126039d593e32946c48f143af94 | f5634597081459985237dc54fcbe518d4b0a4f4af618b7719abda334b95538d1 | waypoint | Suez Canal | model | 1.0 | 32.426000 | 30.535817 | 1.0 | 2019-05-31 06:31:32+00:00 | 2019-05-31 15:32:24+00:00 | cargo_waypoint_event | b27299265c1727e8d20d94e567d07d828c9e9126039d593e32946c48f143af94 | 331fd90b8f038b8b941ee70b066f605937451c9446dff73f1e69b4c30346c2d0 | waypoint | Hormuz Strait | model | 1.0 | 56.352273 | 26.427573 | 1.0 | 2019-05-16 17:09:40+00:00 | 2019-05-16 22:21:53+00:00 | cargo_waypoint_event | b27299265c1727e8d20d94e567d07d828c9e9126039d593e32946c48f143af94 | 5345fff6b9a8178d922c41c4ce9df0f0a81f1b237bec0c4e1d336ecfe2f6661b | waypoint | Strait of Sicily | model | 1.0 | 11.798111 | 37.325988 | 1.0 | 2019-06-06 09:15:06+00:00 | 2019-06-06 11:29:25+00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | 934066 | unloaded_state | 554b2e1f3aebcd83d770b3b2053ddccac78fabdecbf78ea6fdc386e2ad4e41a2 | 419001610 | 9293143 | CLASSIC | 159195 | 171732 | suezmax | NaN | NaN | NaN | NaN | NaN | ea18605cb9880c94cfe96c1674196e7385368bb43965f972c4a1951b32fa4a4a | Seven Islands | commercial_owner | 1.0 | external | 2019-12-19 09:49:57+00:00 | 2020-01-08 21:53:58+00:00 | True | eb1936efa7fa14c2f3e1949f56816b2f5746bf1587c997f8b84b997312bab523 | 2005 | IN | 70425373a1836d6d0390dc6fef838a468717fba7776d66065a5043488f9f041b | vessel_flag_tag | 54af755a090118dcf9b0724c9a4e9f14745c26165385ffa7f1445bc768f06f11 | group | 1.000000 | external | Crude/Condensates | 6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653 | group_product | 1.000000 | external | Crude | 3cb81242a4b490d97b78657e8f1d40b994c32d4334051f30369ab18d48b87e4d | category | 1.000000 | model | Heavy-Sweet | 880d79ff1884ed37a8091526b09605bee38546c0a41ed40fad143c06f733c0a1 | grade | 1.000000 | model | Antan Blend | cargo_port_load_event | 430f0e467f3a408f997f6f71d3c4d410eea157949cef76b3d3200229584b6b6b | country | Nigeria | model | 1.0 | c2b930489951272f1bec56a77ec0e525d7b54f85e40bf2adf4c42f3d06295cc1 | port | Antan Terminal [NG] | model | 1.0 | c4a371acd7c3df8bd70e49805e76cb39b1309ccac3d0f4289120079a9ad68bcd | region | Africa | model | 1.0 | 9f9774f40a5a36f75ae844510feaf1c01c262cf84ba1f229ff6a93fb8e0171e2 | shipping_region | West Africa | model | 1.0 | a7536c48714140c7ba8e8895cdcccc12ebb2c4813720d6712f08c5c03c1e3ecf | trading_block | OPEC + Russia | model | 1.0 | 5e0cb0b66780a00576309aecff1b65934fc580d775bab29ac2a79397d8544e04 | trading_region | West Africa | model | 1.0 | NaN | NaN | NaN | NaN | NaN | a5236cb0de036f2eaef3738d949cac815fc4dea2e0918082993cde1a6bc71ab7 | terminal | Antan Terminal | model | 1.0 | 1.0 | 8.339420 | 4.200392 | 2019-12-19 09:49:57+00:00 | 2019-12-21 19:36:24+00:00 | cargo_port_unload_event | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | country | Netherlands | model | 1 | 68faf65af1345067f11dc6723b8da32f00e304a6f33c000118fccd81947deb4e | port | Rotterdam [NL] | model | 1 | f39d455f5d38907394d6da3a91da4e391f9a34bd6a17e826d6042761067e88f4 | region | Europe | model | 1 | 7fe5c7cd39e8e95bfab135ca495b1fb577367ae89e3f6148375b9122bd8c461a | shipping_region | UK Cont | model | 1 | 676c3cff1dffd971ae51cd350f231394eeb0ab94eff981432f6ee55c5219b913 | trading_block | UKC-Med region | model | 1 | a50f4a476665d3d507f54398b1a1aed1746c5469619c83c3398716724f8dda27 | trading_region | ARA Region | model | 1 | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | trading_subregion | Netherlands | model | 1 | efd6a58d6ad992e0ed4db29227332d65f56733a996f67bf19ff84ebcf85f88f5 | terminal | Maasvlakte Oil Terminal (MOT) | model | 1 | 1 | 4.069263 | 51.968379 | 2020-01-07 15:19:44+00:00 | 2020-01-08 21:53:58+00:00 | cargo_waypoint_event | 554b2e1f3aebcd83d770b3b2053ddccac78fabdecbf78ea6fdc386e2ad4e41a2 | 084435d1e53d1e97b34e75c030c11be2c466e671acca53561dd3fdd13c77a5ec | waypoint | Dover Strait | model | 1.0 | 1.279142 | 50.889389 | 1.0 | 2020-01-07 00:31:03+00:00 | 2020-01-07 04:37:32+00:00 | cargo_waypoint_event | 554b2e1f3aebcd83d770b3b2053ddccac78fabdecbf78ea6fdc386e2ad4e41a2 | 703a4af533b42e86a0473f6b464ad2da1bb04cf899a167d2e452aa82de6bbb00 | waypoint | Cape Finisterre | model | 1.0 | -10.205057 | 43.336051 | 1.0 | 2020-01-04 14:01:11+00:00 | 2020-01-04 20:15:27+00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | abfa36f8232120037332e52025258f72ba29a3f382d73fb563ee165e09403ad8 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | 628218 | unloaded_state | e7b8cfdb2e097c1bf8898a44fe8130f2aae5a5f7f628fdd696af45e97613cccd | 311027700 | 9438858 | AMUNDSEN SPIRIT | 109290 | 119722 | aframax | NaN | NaN | NaN | NaN | NaN | 3f482132f947d985a70fb8d2fd84f71587251e853c281f518bce1b27f4be713e | TEEKAY | commercial_owner | 1.0 | external | 2021-05-04 11:52:38+00:00 | 2021-05-09 15:49:24+00:00 | False | c66f696159c00e61513260b05ac54219a3d066780c39e4de967e85091a08e94c | 2010 | BS | 3cd7b476b240ffbe6191879bcc27ce1cd02c8b6631f4d1b368840bad013c331e | vessel_flag_tag | 54af755a090118dcf9b0724c9a4e9f14745c26165385ffa7f1445bc768f06f11 | group | 0.597362 | model | Crude/Condensates | 6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653 | group_product | 0.597362 | model | Crude | 66a98cd9df06660555000f8d4de9bc075e651bce3b57a42fcef33d88c987fc73 | category | 0.597362 | model | Light-Sweet | 9888edcaf60f8a191362bba9818e586d953a7f611e34e46804ded658db3e73a2 | grade | 0.597362 | model | Skarv | cargo_port_load_event | 459d056652a0b7aa7f630bd2a26c97d192a61154e4c2c7afeaa06ce2880fc91f | country | Norway | model | 1.0 | 51623277a715eb5af2b9f4c620da81cdaef3916a6bfd26797c22c39317fc8381 | port | Skarv Field [NO] | model | 1.0 | f39d455f5d38907394d6da3a91da4e391f9a34bd6a17e826d6042761067e88f4 | region | Europe | model | 1.0 | 7fe5c7cd39e8e95bfab135ca495b1fb577367ae89e3f6148375b9122bd8c461a | shipping_region | UK Cont | model | 1.0 | f4bb0d1292ed0ea0fc32a7f2c93a54451f61ecbc3a5c5c9de12577aa485e1333 | trading_block | North Sea | model | 1.0 | 404adf58e8c570e2774157bba1a5583cae4ce2e4653f68d870303e58a09461f9 | trading_region | North West Europe (excl. ARA) | model | 1.0 | 459d056652a0b7aa7f630bd2a26c97d192a61154e4c2c7afeaa06ce2880fc91f | trading_subregion | Norway | model | 1.0 | d2160411a67ef4a9e142aae84d56af2889648475af2d8784a5950fd9fc099c0b | terminal | FPSO Skarv | model | 1.0 | 1.0 | 7.653672 | 65.697459 | 2021-05-04 11:52:38+00:00 | 2021-05-05 10:17:51+00:00 | cargo_port_unload_event | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | country | Netherlands | model | 1 | 68faf65af1345067f11dc6723b8da32f00e304a6f33c000118fccd81947deb4e | port | Rotterdam [NL] | model | 1 | f39d455f5d38907394d6da3a91da4e391f9a34bd6a17e826d6042761067e88f4 | region | Europe | model | 1 | 7fe5c7cd39e8e95bfab135ca495b1fb577367ae89e3f6148375b9122bd8c461a | shipping_region | UK Cont | model | 1 | 676c3cff1dffd971ae51cd350f231394eeb0ab94eff981432f6ee55c5219b913 | trading_block | UKC-Med region | model | 1 | a50f4a476665d3d507f54398b1a1aed1746c5469619c83c3398716724f8dda27 | trading_region | ARA Region | model | 1 | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | trading_subregion | Netherlands | model | 1 | efd6a58d6ad992e0ed4db29227332d65f56733a996f67bf19ff84ebcf85f88f5 | terminal | Maasvlakte Oil Terminal (MOT) | model | 1 | 1 | 4.069263 | 51.968379 | 2021-05-08 13:31:11+00:00 | 2021-05-09 15:49:24+00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | 670568 | unloaded_state | bf9d003aa3eda808893122831410fb6e977d0651d737d2edf0ae8c3de0fefbc9 | 636018682 | 9826720 | GAGARIN PROSPECT | 113906 | 126817 | aframax | 90cafe862ffc81ae8153b5cf63bdfffe93f02f972bbbc3973187c26e38feff62 | Shell | charterer | 1.0 | external | 90cafe862ffc81ae8153b5cf63bdfffe93f02f972bbbc3973187c26e38feff62 | Shell | commercial_owner | 1.0 | external | 2019-09-27 21:36:14+00:00 | 2019-10-16 11:25:36+00:00 | False | ad0319cdd0f852b6e3bc03fc998f3a22aaf41463a01a9ddab8fe70263e66b437 | 2018 | LR | 76044b057b5a5157476aff1aa4d2a6a7f5d0464cb5f5e6264ed6e3f9f27b01e3 | vessel_flag_tag | 54af755a090118dcf9b0724c9a4e9f14745c26165385ffa7f1445bc768f06f11 | group | 1.000000 | external | Crude/Condensates | 6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653 | group_product | 1.000000 | external | Crude | 87acdcdd0f1b2482eb808d5ea2afdc05266f27e4c9b0a5427c266e42d9bd36c4 | category | 1.000000 | model | Light-Sour | bb70cf56200f5b72ba69a90bda2c6b47ba29da23945c6f1994cfd4c2ef2fe0ff | grade | 1.000000 | model | CPC Blend | cargo_port_load_event | b996521be9c996db3560ca234a56286ac38f798d34be229437555fab4f12a6a5 | country | Russia | model | 1.0 | 70a33d32b536f72a3c4ef4a210121388b348d946af128f02b1f60ec0f2fb3d3b | port | Novorossiysk [RU] | model | 1.0 | b996521be9c996db3560ca234a56286ac38f798d34be229437555fab4f12a6a5 | region | Russia | model | 1.0 | 54c244fa8d2aae5a2318d3262422d2b2212a4ee46cd88619eadff653255823a5 | shipping_region | Black Sea | model | 1.0 | ce4978a70f57396f5084a2591666eccee49118565b0a7e29bf1bc072d0e56aed | trading_block | FSU | model | 1.0 | c7ed437dedaec3ea48a0efa5c3c78bd22bc71f9c6f9f44d667801ea633b059f1 | trading_region | Black Sea | model | 1.0 | 44a1b0bb0e2afdb98d07b20184550b77449745bb650cb31628fb4c6ceeb64603 | trading_subregion | Russia Black Sea | model | 1.0 | 14041fb50db4aeb386f82b2d2349b2f8088650fe9aa42347d562114f108612bf | terminal | Cpc-R Marine Terminal | model | 1.0 | 1.0 | 37.612799 | 44.629314 | 2019-09-27 21:36:14+00:00 | 2019-09-28 11:21:19+00:00 | cargo_port_unload_event | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | country | Netherlands | model | 1 | 68faf65af1345067f11dc6723b8da32f00e304a6f33c000118fccd81947deb4e | port | Rotterdam [NL] | model | 1 | f39d455f5d38907394d6da3a91da4e391f9a34bd6a17e826d6042761067e88f4 | region | Europe | model | 1 | 7fe5c7cd39e8e95bfab135ca495b1fb577367ae89e3f6148375b9122bd8c461a | shipping_region | UK Cont | model | 1 | 676c3cff1dffd971ae51cd350f231394eeb0ab94eff981432f6ee55c5219b913 | trading_block | UKC-Med region | model | 1 | a50f4a476665d3d507f54398b1a1aed1746c5469619c83c3398716724f8dda27 | trading_region | ARA Region | model | 1 | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | trading_subregion | Netherlands | model | 1 | efd6a58d6ad992e0ed4db29227332d65f56733a996f67bf19ff84ebcf85f88f5 | terminal | Maasvlakte Oil Terminal (MOT) | model | 1 | 1 | 4.069263 | 51.968379 | 2019-10-15 09:36:47+00:00 | 2019-10-16 11:25:36+00:00 | cargo_waypoint_event | bf9d003aa3eda808893122831410fb6e977d0651d737d2edf0ae8c3de0fefbc9 | 703a4af533b42e86a0473f6b464ad2da1bb04cf899a167d2e452aa82de6bbb00 | waypoint | Cape Finisterre | model | 1.0 | -10.205057 | 43.336051 | 1.0 | 2019-10-11 09:02:44+00:00 | 2019-10-11 14:25:38+00:00 | cargo_waypoint_event | bf9d003aa3eda808893122831410fb6e977d0651d737d2edf0ae8c3de0fefbc9 | 634325e75228b43f66414fb0c24573988edc123d3f47410c94bb0769d699643b | waypoint | Bosporus | model | 1.0 | 29.056152 | 41.125319 | 1.0 | 2019-10-01 03:45:18+00:00 | 2019-10-01 05:11:35+00:00 | cargo_waypoint_event | bf9d003aa3eda808893122831410fb6e977d0651d737d2edf0ae8c3de0fefbc9 | 23a0717f9b3a5b0196e3fab47f6240e8b1510e2ad1f1b98bba906b2d8416d3ca | waypoint | Dardanelles | model | 1.0 | 26.483579 | 40.241509 | 1.0 | 2019-10-03 10:35:28+00:00 | 2019-10-03 13:54:58+00:00 | cargo_waypoint_event | bf9d003aa3eda808893122831410fb6e977d0651d737d2edf0ae8c3de0fefbc9 | 5345fff6b9a8178d922c41c4ce9df0f0a81f1b237bec0c4e1d336ecfe2f6661b | waypoint | Strait of Sicily | model | 1.0 | 11.798111 | 37.325988 | 1.0 | 2019-10-06 10:58:54+00:00 | 2019-10-06 13:35:36+00:00 | cargo_waypoint_event | bf9d003aa3eda808893122831410fb6e977d0651d737d2edf0ae8c3de0fefbc9 | 084435d1e53d1e97b34e75c030c11be2c466e671acca53561dd3fdd13c77a5ec | waypoint | Dover Strait | model | 1.0 | 1.279142 | 50.889389 | 1.0 | 2019-10-13 15:32:22+00:00 | 2019-10-13 19:53:26+00:00 | NaN | 97761dc03ee03775 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | 163226 | unloaded_state | 878f66e19ff33c499eab052c5a3cc6fbf0d3159e2154d1904fdc945e6e43c9bf | 241132000 | 9592252 | MINERVA KYTHNOS | 115674 | 127515 | aframax | NaN | NaN | NaN | NaN | NaN | 5bf5da9164c8cbd3449282f99488c597510cd0214cd253c850ffe1c2867e32e1 | Kyklades Maritime | commercial_owner | 1.0 | external | 2019-12-07 23:02:13+00:00 | 2019-12-15 01:20:13+00:00 | False | 773f235db4e586c2c5f6a7ba67f22717887a25919525329b88a45413c97fc702 | 2011 | GR | b6be463f6999751d74c53b68865247ce565e003583579498f2537892bc13c69a | vessel_flag_tag | 54af755a090118dcf9b0724c9a4e9f14745c26165385ffa7f1445bc768f06f11 | group | 1.000000 | external | Crude/Condensates | 6f11b0724c9a4e85ffa7f1445bc768f054af755a090118dcf99f14745c261653 | group_product | 1.000000 | external | Crude | 66a98cd9df06660555000f8d4de9bc075e651bce3b57a42fcef33d88c987fc73 | category | 1.000000 | external | Light-Sweet | 951bf4b402c5b33cb95a159ef78c1907bcd8d705e653e579c75a22b5a5598177 | grade | 1.000000 | external | Bakken | cargo_port_load_event | 2d92cc08f22524dba59f6a7e340f132a9da0ce9573cca968eb8e3752ef17a963 | country | United States | model | 1.0 | 2770c6fd443c8be8465512385e2a40457bb7a0956859f6caabda12430f3f5b1f | port | Beaumont, TX [US] | model | 1.0 | ae06d7e47d6ca2a5bcd7625b8ad402d39e5e92fcc740157dc3301a6d2a6bb207 | region | North America | model | 1.0 | e0d68b7a4ac37c97e3387471644d8b5c2a4be16a50092676ec3bec08408a2ebb | shipping_region | US Gulf Coast / Gulf of Mexico | model | 1.0 | f3828f390df90583a5e5c1cc1f70870342b43a95c2d58f5df85a64e8892cc7b9 | trading_block | USAC/USGC | model | 1.0 | 4e79eb8e84d26f5c3c0006283bc1aa52c170b58d667be9848e136afea91a57e9 | trading_region | PADD 3 (US Gulf Coast) | model | 1.0 | 3663536da3c85053556bc0d1a803481aa137a854da8bc835f614e84e810b1bb7 | trading_subregion | Texas | model | 1.0 | 68000aa854e8373231b2858febc4f35d9738b81eda81ab48b6825a077b1dd7ed | terminal | Energy Transfer Nederland | model | 1.0 | 1.0 | -93.996154 | 30.011360 | 2019-12-07 23:02:13+00:00 | 2019-12-09 20:46:12+00:00 | cargo_port_unload_event | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | country | Netherlands | model | 1 | 68faf65af1345067f11dc6723b8da32f00e304a6f33c000118fccd81947deb4e | port | Rotterdam [NL] | model | 1 | f39d455f5d38907394d6da3a91da4e391f9a34bd6a17e826d6042761067e88f4 | region | Europe | model | 1 | 7fe5c7cd39e8e95bfab135ca495b1fb577367ae89e3f6148375b9122bd8c461a | shipping_region | UK Cont | model | 1 | 676c3cff1dffd971ae51cd350f231394eeb0ab94eff981432f6ee55c5219b913 | trading_block | UKC-Med region | model | 1 | a50f4a476665d3d507f54398b1a1aed1746c5469619c83c3398716724f8dda27 | trading_region | ARA Region | model | 1 | 2dfc3d43a21697c02ec3b2700b3b570a6ed1abb66d01c4fe6310ef362fcf6653 | trading_subregion | Netherlands | model | 1 | efd6a58d6ad992e0ed4db29227332d65f56733a996f67bf19ff84ebcf85f88f5 | terminal | Maasvlakte Oil Terminal (MOT) | model | 1 | 1 | 4.074772 | 51.966516 | 2020-01-01 05:22:51+00:00 | 2020-01-02 13:13:28+00:00 | cargo_waypoint_event | 94e7888aff165fe416e76808dd3c4e06218aae8217bf214ee399457d92a51c28 | 81fc010b7d67cb2fb22f33b31b157b00ab8af3d0cafe627d47116384bd50a4ec | waypoint | Strait of Florida | model | 1.0 | -80.815366 | 24.177013 | 1.0 | 2019-12-17 14:11:12+00:00 | 2019-12-17 22:27:55+00:00 | cargo_waypoint_event | 94e7888aff165fe416e76808dd3c4e06218aae8217bf214ee399457d92a51c28 | 084435d1e53d1e97b34e75c030c11be2c466e671acca53561dd3fdd13c77a5ec | waypoint | Dover Strait | model | 1.0 | 1.279142 | 50.889389 | 1.0 | 2019-12-31 16:03:12+00:00 | 2019-12-31 19:44:14+00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | 94e7888aff165fe416e76808dd3c4e06218aae8217bf214ee399457d92a51c28 | 538004316.0 | 9524449.0 | SUEZ FUZEYYA | 158574.0 | 173920.0 | suezmax | 96039552fb75629f9001daac756b1cc20acfe3faeb7d48b2856d9a229832cc34 | Phillips 66 | charterer | 1.0 | external | 5c0c641464b0317c552ff8dc1d54473b2c2d4b093ee3d8a89be47c02362e5006 | Trafigura | commercial_owner | 1.0 | external | 2019-12-14 00:51:50+00:00 | 2020-01-02 13:13:28+00:00 | a546ae814f571be16ca192a3cb43594fc49db437c1b5b15da05eab53cb78a48e | 2011.0 | 9390298f3fb0c5b1 | vessel_scrubber_tag | False | MH | e084d7507dab6604894c203b3834cd7ce8f16385daeae56e202cd9e930f788d2 | vessel_flag_tag | cargo_sts_event | 878f66e19ff33c499eab052c5a3cc6fbf0d3159e2154d1904fdc945e6e43c9bf | MINERVA KYTHNOS | 94e7888aff165fe416e76808dd3c4e06218aae8217bf214ee399457d92a51c28 | SUEZ FUZEYYA | 2d92cc08f22524dba59f6a7e340f132a9da0ce9573cca968eb8e3752ef17a963 | country | United States | model | 0.984043 | ae06d7e47d6ca2a5bcd7625b8ad402d39e5e92fcc740157dc3301a6d2a6bb207 | region | North America | model | 0.984043 | e0d68b7a4ac37c97e3387471644d8b5c2a4be16a50092676ec3bec08408a2ebb | shipping_region | US Gulf Coast / Gulf of Mexico | model | ... | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaT | NaT | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5 rows × 1630 columns
ARA_crude_imports_df.shape
(2439, 1630)
# Relabel the columns
new_labels = {
"cargo_movement_id": "cargo_movement_id",
"vessels.0.name": "vessel_name",
"vessels.0.vessel_class": "vessel_class",
"product.group.label": "product_group",
"product.grade.label": "product_grade",
"product.category.label": "product_category",
"quantity": "quantity",
"status": "status",
"events.cargo_port_load_event.0.location.port.label": "loading_port",
"events.cargo_port_load_event.0.end_timestamp": "loading_finish",
"events.cargo_port_unload_event.0.location.port.label": "unloading_port",
"events.cargo_port_unload_event.0.end_timestamp": "unloading_finish",
}
ARA_crude_imports_df = ARA_crude_imports_df[list(new_labels.keys())].rename(new_labels,axis=1)
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 |
# Get the categories of Crude grades
crude_ARA_category = ARA_crude_imports_df.groupby('product_category').size().to_frame().rename(columns={0: "Number of CMs"}).reset_index()
crude_ARA_category
product_category | Number of CMs | |
---|---|---|
0 | Heavy-Sour | 139 |
1 | Heavy-Sweet | 231 |
2 | Light-Sour | 239 |
3 | Light-Sweet | 857 |
4 | Medium-Sour | 575 |
5 | Medium-Sweet | 253 |
crude_category_id_mapping = products_df.loc[products_df["Name"].isin(crude_ARA_category["product_category"].values)]
crude_category_id_mapping = crude_category_id_mapping[["id", "Name"]]
crude_category_id_mapping
id | Name | |
---|---|---|
25 | a7e26956fbb91d786b1d55582981b0d199f72c050958fd3501b3991d24efa2d2 | Medium-Sour |
26 | 1c10c409e5412d5eee38bbbd529509d2fe0251fa99e29290c5a58766f8fa3728 | Medium-Sweet |
1477 | fc2e0746428ed6109045fc1195a4ee4ef2e339d55b7b6e3a0fb01ecf28efc4f7 | Heavy-Sour |
1478 | 3cb81242a4b490d97b78657e8f1d40b994c32d4334051f30369ab18d48b87e4d | Heavy-Sweet |
1656 | 87acdcdd0f1b2482eb808d5ea2afdc05266f27e4c9b0a5427c266e42d9bd36c4 | Light-Sour |
1657 | 66a98cd9df06660555000f8d4de9bc075e651bce3b57a42fcef33d88c987fc73 | Light-Sweet |
# The cargo unit for the time series (barrels)
TS_UNIT = 'bpd' # Measure in barrels
# The granularity of the time series
TS_FREQ = 'week' # Look at weekly imports
time_series_imports_per_product = []
for idx, row in crude_category_id_mapping.iterrows():
ARA_crude_imports_tm_df = CargoTimeSeries().search(
filter_activity = 'unloading_start',
filter_destinations=ARA_ID,
filter_products = row["id"],
timeseries_unit = TS_UNIT,
timeseries_frequency = TS_FREQ,
filter_time_min = two_years_ago, # Set the date range # quantity in bpd
filter_time_max = now).to_df().rename(columns = {"key": "date", "value": row["Name"]}).drop(columns=["count"]).set_index("date")
time_series_imports_per_product.append(ARA_crude_imports_tm_df)
time_series_imports_per_product_df = pd.concat(time_series_imports_per_product, axis=1)
time_series_imports_per_product_df.head()
Medium-Sour | Medium-Sweet | Heavy-Sour | Heavy-Sweet | Light-Sour | Light-Sweet | |
---|---|---|---|---|---|---|
date | ||||||
2019-05-27 00:00:00+00:00 | 1.179063e+06 | 309256.258283 | 154248.772638 | 139024.334655 | 388535.722047 | 498323.459030 |
2019-06-03 00:00:00+00:00 | 2.480964e+05 | 269172.857143 | 247195.285714 | 97048.857143 | 302030.714286 | 377445.000000 |
2019-06-10 00:00:00+00:00 | 7.706260e+05 | 158946.714286 | 0.000000 | 128820.428571 | 95608.428571 | 463073.571429 |
2019-06-17 00:00:00+00:00 | 8.456541e+05 | 0.000000 | 203749.857143 | 0.000000 | 45309.000000 | 306801.000000 |
2019-06-24 00:00:00+00:00 | 7.422839e+05 | 157450.714286 | 0.000000 | 141810.571429 | 366967.428571 | 576884.857143 |
time_series_imports_per_product_df = time_series_imports_per_product_df.fillna(0)
time_series_imports_per_product_df.head()
Medium-Sour | Medium-Sweet | Heavy-Sour | Heavy-Sweet | Light-Sour | Light-Sweet | |
---|---|---|---|---|---|---|
date | ||||||
2019-05-27 00:00:00+00:00 | 1.179063e+06 | 309256.258283 | 154248.772638 | 139024.334655 | 388535.722047 | 498323.459030 |
2019-06-03 00:00:00+00:00 | 2.480964e+05 | 269172.857143 | 247195.285714 | 97048.857143 | 302030.714286 | 377445.000000 |
2019-06-10 00:00:00+00:00 | 7.706260e+05 | 158946.714286 | 0.000000 | 128820.428571 | 95608.428571 | 463073.571429 |
2019-06-17 00:00:00+00:00 | 8.456541e+05 | 0.000000 | 203749.857143 | 0.000000 | 45309.000000 | 306801.000000 |
2019-06-24 00:00:00+00:00 | 7.422839e+05 | 157450.714286 | 0.000000 | 141810.571429 | 366967.428571 | 576884.857143 |
# Check if index is a date-time for plotting time-serries
type(time_series_imports_per_product_df.index)
pandas.core.indexes.datetimes.DatetimeIndex
import matplotlib as plt
time_series_imports_per_product_df.plot.area(figsize=(35, 10), lw=3, stacked=False, grid=True, ylabel=TS_UNIT, title="ARA Crude Imports")
<AxesSubplot:title={'center':'ARA Crude Imports'}, xlabel='date', ylabel='bpd'>
This shows the crudes imported into A.R.A. by category, so we can see the key categories are Medium-Sour (this will be some Middle Eastern Grades and also Russian Urals), and Light-Sweet (mostly WTI from US but also some North Sea blends)
Now suppose we want a more granular analysis; one that focusses on grades on top of categories. Let's return to one of our previous datasets ARA_crude_imports_df
. What do we have in there?
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 |
Suppose we want to look into the average-sulphur
and average-api
quantities in these cargoes and try to understand the trends. To do that, we need the sulphur
and api
percentage values available in products.
products_df[products_df["Parent"].isin(["Medium-Sour", "Medium-Sweet", "Heavy-Sour", "Heavy-Sweet", "Light-Sour", "Light-Sweet"])].head()
id | Name | Parent | Layer | Parent_Layer | Level_0 | Level_1 | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|
4 | a8822d5a0ca144fa881e7972dbc3b06b1b4ef97ba1ea44d19362f779588e7788 | Mariner | Heavy-Sour | grade | category | Heavy-Sour | Crude | 1.100 | NaN |
5 | adb6244e45c4f1ec18f8e4f2b9144c52833866316f20b0a216bf93e0fa08ae22 | Marlim | Heavy-Sour | grade | category | Heavy-Sour | Crude | 0.670 | 19.6 |
6 | b20cd165eb8a4dcab1c59e98a78b62c0c50efd17b42b4d83b32aa43b4feb09c6 | Marlim Leste | Heavy-Sour | grade | category | Heavy-Sour | Crude | 0.553 | 24.7 |
7 | a250444936b94aadb1cea3bb69daeee312f666a71cc8433e8811e341c39d6bfb | Marlim Sul | Heavy-Sour | grade | category | Heavy-Sour | Crude | 0.670 | NaN |
8 | fc053cfcf989782483e90828766691175c6ec7a898a8903d8c8fb8b7d822d87f | Mars Blend | Medium-Sour | grade | category | Medium-Sour | Crude | 1.910 | 30.3 |
These need to be multiplied with the quantities in cargo-movements so that we can get idea of their aggregates over time (always in relation to ARA imports). Let's revisit products though and look at the crudes we are interested in:
So, let's merge products_df
with ARA_crude_imports_df
:
ARA_crude_imports_df = ARA_crude_imports_df.merge(products_df[["Name", "Average_Sulphur", "Average_API"]], left_on="product_grade", right_on="Name", how="left")
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | Name | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 | Arab Heavy | 3.020 | 27.7 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 | Antan Blend | 0.270 | 26.4 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 | Skarv | 0.205 | 43.3 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 | CPC Blend | 0.560 | 45.3 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 | Bakken | 0.190 | 42.0 |
Let's do some quality assurance:
100*ARA_crude_imports_df["Average_Sulphur"].isnull().sum()/len(ARA_crude_imports_df)
6.806068060680607
100*ARA_crude_imports_df["Average_API"].isnull().sum()/len(ARA_crude_imports_df)
10.742107421074211
This is partly attributed to missing product_grade
values:
print(f"{len(ARA_crude_imports_df[ARA_crude_imports_df['product_grade'].isnull()])}/{len(ARA_crude_imports_df)}")
145/2439
So let's remove those rows:
ARA_crude_imports_df = ARA_crude_imports_df[ARA_crude_imports_df['product_grade'].notnull()]
print(f"{len(ARA_crude_imports_df[ARA_crude_imports_df['product_grade'].isnull()])}/{len(ARA_crude_imports_df)}")
0/2294
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | Name | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 | Arab Heavy | 3.020 | 27.7 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 | Antan Blend | 0.270 | 26.4 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 | Skarv | 0.205 | 43.3 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 | CPC Blend | 0.560 | 45.3 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 | Bakken | 0.190 | 42.0 |
Much better... so no nulls now?
ARA_crude_imports_df["Average_Sulphur"].isnull().sum()
21
ARA_crude_imports_df["Average_API"].isnull().sum()
117
Some times if the information is not available in grades
we can get it from the category
instead:
ARA_crude_imports_df = ARA_crude_imports_df.merge(products_df[["Name", "Average_Sulphur", "Average_API"]], left_on="product_category", right_on="Name", how="left", suffixes=("", "_Category"))
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | Name | Average_Sulphur | Average_API | Name_Category | Average_Sulphur_Category | Average_API_Category | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 | Arab Heavy | 3.020 | 27.7 | Medium-Sour | 1.88 | 27.41 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 | Antan Blend | 0.270 | 26.4 | Heavy-Sweet | 0.22 | 19.27 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 | Skarv | 0.205 | 43.3 | Light-Sweet | 0.15 | 41.07 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 | CPC Blend | 0.560 | 45.3 | Light-Sour | 1.21 | 35.93 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 | Bakken | 0.190 | 42.0 | Light-Sweet | 0.15 | 41.07 |
ARA_crude_imports_df["Average_Sulphur_Final"] = ARA_crude_imports_df["Average_Sulphur"].combine_first(ARA_crude_imports_df["Average_Sulphur_Category"])
ARA_crude_imports_df["Average_API_Final"] = ARA_crude_imports_df["Average_API"].combine_first(ARA_crude_imports_df["Average_API_Category"])
ARA_crude_imports_df = ARA_crude_imports_df.drop(columns=["Average_Sulphur_Category", "Average_API_Category", "Average_Sulphur", "Average_API", "Name_Category"]).rename(columns={"Average_API_Final": "Average_API", "Average_Sulphur_Final": "Average_Sulphur"})
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | Name | Average_Sulphur | Average_API | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 | Arab Heavy | 3.020 | 27.7 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 | Antan Blend | 0.270 | 26.4 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 | Skarv | 0.205 | 43.3 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 | CPC Blend | 0.560 | 45.3 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 | Bakken | 0.190 | 42.0 |
ARA_crude_imports_df["Average_API"].isnull().sum()
0
ARA_crude_imports_df["Average_Sulphur"].isnull().sum()
0
To create the charts we care about, we will need some additional columns:
Average_Sulphur_Quantity
Average_API_Quantity
unloading_finish_date
(in weeks), andunloading_finish_year
ARA_crude_imports_df["Average_Sulphur_Quantity"] = ARA_crude_imports_df["quantity"] * ARA_crude_imports_df["Average_Sulphur"]
ARA_crude_imports_df["Average_API_Quantity"] = ARA_crude_imports_df["quantity"] * ARA_crude_imports_df["Average_API"]
ARA_crude_imports_df["unloading_finish_date"] = pd.to_datetime(ARA_crude_imports_df["unloading_finish"].dt.date)
ARA_crude_imports_df["unloading_finish_week"] = ARA_crude_imports_df["unloading_finish"].dt.to_period('W-Mon').apply(lambda x: x.start_time)
/Users/chadjinik/.pyenv/versions/3.8.2/envs/webinar/lib/python3.8/site-packages/pandas/core/arrays/datetimes.py:1101: UserWarning: Converting to PeriodArray/Index representation will drop timezone information. warnings.warn(
ARA_crude_imports_df["unloading_finish_year"] = ARA_crude_imports_df["unloading_finish"].dt.to_period('Y')
ARA_crude_imports_df.head()
cargo_movement_id | vessel_name | vessel_class | product_group | product_grade | product_category | quantity | status | loading_port | loading_finish | unloading_port | unloading_finish | Name | Average_Sulphur | Average_API | Average_Sulphur_Quantity | Average_API_Quantity | unloading_finish_date | unloading_finish_week | unloading_finish_year | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 66eee047d295b8a8dde555efdb7e447266eee047d295b8a8dde555efdb7e4472 | FARHAH | vlcc_plus | Crude/Condensates | Arab Heavy | Medium-Sour | 742020 | unloaded_state | Juaymah Terminal [SA] | 2019-05-15 13:51:13+00:00 | Rotterdam [NL] | 2019-06-16 21:15:03+00:00 | Arab Heavy | 3.020 | 27.7 | 2240900.40 | 2.055395e+07 | 2019-06-16 | 2019-06-11 | 2019 |
1 | 66f686649794afae8e0a0f06a2bbb4bf66f686649794afae8e0a0f06a2bbb4bf | CLASSIC | suezmax | Crude/Condensates | Antan Blend | Heavy-Sweet | 934066 | unloaded_state | Antan Terminal [NG] | 2019-12-21 19:36:24+00:00 | Rotterdam [NL] | 2020-01-08 21:53:58+00:00 | Antan Blend | 0.270 | 26.4 | 252197.82 | 2.465934e+07 | 2020-01-08 | 2020-01-07 | 2020 |
2 | 66f6ada3f8c7e4af6815aaf532a90e1366f6ada3f8c7e4af6815aaf532a90e13 | AMUNDSEN SPIRIT | aframax | Crude/Condensates | Skarv | Light-Sweet | 628218 | unloaded_state | Skarv Field [NO] | 2021-05-05 10:17:51+00:00 | Rotterdam [NL] | 2021-05-09 15:49:24+00:00 | Skarv | 0.205 | 43.3 | 128784.69 | 2.720184e+07 | 2021-05-09 | 2021-05-04 | 2021 |
3 | 67097f03680e046772d66581403fd09767097f03680e046772d66581403fd097 | GAGARIN PROSPECT | aframax | Crude/Condensates | CPC Blend | Light-Sour | 670568 | unloaded_state | Novorossiysk [RU] | 2019-09-28 11:21:19+00:00 | Rotterdam [NL] | 2019-10-16 11:25:36+00:00 | CPC Blend | 0.560 | 45.3 | 375518.08 | 3.037673e+07 | 2019-10-16 | 2019-10-15 | 2019 |
4 | 671ff72139fff667f59d2e616fc7ebd7671ff72139fff667f59d2e616fc7ebd7 | MINERVA KYTHNOS | aframax | Crude/Condensates | Bakken | Light-Sweet | 163226 | unloaded_state | Beaumont, TX [US] | 2019-12-09 20:46:12+00:00 | Rotterdam [NL] | 2020-01-02 13:13:28+00:00 | Bakken | 0.190 | 42.0 | 31012.94 | 6.855492e+06 | 2020-01-02 | 2019-12-31 | 2020 |
So why do we need to normalise the quantities?
sulphur_daily_totals_df = ARA_crude_imports_df.groupby(["unloading_finish_week"]).agg({"quantity": "sum", "Average_Sulphur_Quantity": "sum"}).rename(columns={"quantity": "total_quantity", "Average_Sulphur_Quantity": "Total_Average_Sulphur_Quantity"})
sulphur_daily_totals_df.head()
total_quantity | Total_Average_Sulphur_Quantity | |
---|---|---|
unloading_finish_week | ||
2019-05-28 | 16994698 | 2.331715e+07 |
2019-06-04 | 11447951 | 1.108972e+07 |
2019-06-11 | 10155134 | 1.212826e+07 |
2019-06-18 | 10974990 | 1.373446e+07 |
2019-06-25 | 13897782 | 8.749122e+06 |
sulphur_daily_totals_df["average_sulphur"] = sulphur_daily_totals_df["Total_Average_Sulphur_Quantity"]/(sulphur_daily_totals_df["total_quantity"])
sulphur_daily_totals_df.head()
total_quantity | Total_Average_Sulphur_Quantity | average_sulphur | |
---|---|---|---|
unloading_finish_week | |||
2019-05-28 | 16994698 | 2.331715e+07 | 1.372025 |
2019-06-04 | 11447951 | 1.108972e+07 | 0.968708 |
2019-06-11 | 10155134 | 1.212826e+07 | 1.194299 |
2019-06-18 | 10974990 | 1.373446e+07 | 1.251433 |
2019-06-25 | 13897782 | 8.749122e+06 | 0.629534 |
sulphur_daily_totals_df["average_sulphur-rolling_mean"] = sulphur_daily_totals_df["average_sulphur"].rolling(7).mean().fillna(method="bfill")
sulphur_daily_totals_df.head()
total_quantity | Total_Average_Sulphur_Quantity | average_sulphur | average_sulphur-rolling_mean | |
---|---|---|---|---|
unloading_finish_week | ||||
2019-05-28 | 16994698 | 2.331715e+07 | 1.372025 | 1.10101 |
2019-06-04 | 11447951 | 1.108972e+07 | 0.968708 | 1.10101 |
2019-06-11 | 10155134 | 1.212826e+07 | 1.194299 | 1.10101 |
2019-06-18 | 10974990 | 1.373446e+07 | 1.251433 | 1.10101 |
2019-06-25 | 13897782 | 8.749122e+06 | 0.629534 | 1.10101 |
sulphur_daily_totals_df[["average_sulphur", "average_sulphur-rolling_mean"]].plot(figsize=(35, 10), lw=3, stacked=False, grid=True, ylabel="sulphur_percentage", title="Average Sulphur of Crude imports into A.R.A")
<AxesSubplot:title={'center':'Average Sulphur of Crude imports into A.R.A'}, xlabel='unloading_finish_week', ylabel='sulphur_percentage'>
api_daily_totals_df = ARA_crude_imports_df.groupby(["unloading_finish_week"]).agg({"quantity": "sum", "Average_API_Quantity": "sum"}).rename(columns={"quantity": "total_quantity", "Average_API_Quantity": "Total_Average_API_Quantity"})
api_daily_totals_df["average_API"] = api_daily_totals_df["Total_Average_API_Quantity"]/(api_daily_totals_df["total_quantity"])
api_daily_totals_df["average_API-rolling_mean"] = api_daily_totals_df["average_API"].rolling(7).mean().fillna(method="bfill")
api_daily_totals_df[["average_API", "average_API-rolling_mean"]].plot(figsize=(35, 10), lw=3, grid=True, ylabel="API_percentage", title="Average API of Crude imports into A.R.A")
<AxesSubplot:title={'center':'Average API of Crude imports into A.R.A'}, xlabel='unloading_finish_week', ylabel='API_percentage'>