{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# AIS Workbook\n", "### This workbook utilizes AIS Data to establish travel time distributions for iron ore carriers through specified segments of the Great Lakes waterway.\n", "#### Source of data https://marinecadastre.gov/ais/\n", "#### Index of Universal Transverse Mercator Zone at https://marinecadastre.gov/AIS/AIS%20Documents/UTMZoneMap2014.png\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The U.S. Coast Guard collects Automatic Identification System (AIS) data through an onboard navigation safety device. The AIS transmits the location and characteristics of vessels in real time. The Bureau of Ocean Energy Management (BOEM) and the National Oceanic and Atmospheric Administration (NOAA) jointly make available some of the historical data from the network of AIS receivers. Information such as location, time, ship type, speed, length, beam, and draft have been extracted from the raw data and prepared for researchers.\n", "\n", "Data for this analysis were assembled for UTM zones 15-18 covering the period March 2013 to Jan 2018. Monthly data files were trimmed to only include the Great Lakes Region and appended into a single monthly file. Monthly files were later appended into a single database for Great Lakes traffic (to be published under Data in Brief). " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# importing required packages\n", "\n", "import matplotlib.pyplot as plt #for plotting \n", "\n", "import os\n", "import conda\n", "\n", "conda_file_dir = conda.__file__\n", "conda_dir = conda_file_dir.split('lib')[0]\n", "proj_lib = os.path.join(os.path.join(conda_dir, 'share'), 'proj')\n", "os.environ[\"PROJ_LIB\"] = proj_lib\n", "\n", "from mpl_toolkits.basemap import Basemap\n", "import matplotlib.colors as colors\n", "import matplotlib.cm as cmx #for colormap \n", "from matplotlib.collections import LineCollection\n", "#from matplotlib.patches import Polygon\n", "import scipy.stats as stats\n", "import itertools\n", "\n", "import pandas as pd #for analyzing data\n", "import numpy as np #for numpy mean & accuracy\n", "import datetime as dt #for datetime objects\n", "from datetime import datetime, timedelta\n", "import seaborn as sns\n", "\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NY2015 loaded with 13228824 lines.\n", "NY2016 loaded with 18782779 lines.\n", "NY2017 loaded with 16816603 lines.\n", "Files appended\n", "There are 48828206 original lines of data in the Dataframe.\n", "There are 2205 unique vessels in the dataset.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MMSILATLONSOGVesselNameStatusDraftCargo
BaseDateTime
2015-03-01 00:00:0231600312442.02662-82.601840.0PELEE ISLANDERundefined2.33NaN
2015-03-01 00:00:0331600223846.50399-84.326880.0ANGLIAN LADYundefined4.2752.0
2015-03-01 00:00:0331600223846.50399-84.326880.0ANGLIAN LADYundefined4.2752.0
2015-03-01 00:00:0336706324046.48492-84.297520.0SUGAR ISLANDER IIunder way using engine0.0060.0
2015-03-01 00:00:0336706324046.48492-84.297520.0SUGAR ISLANDER IIunder way using engine0.0060.0
\n", "
" ], "text/plain": [ " MMSI LAT LON SOG VesselName \\\n", "BaseDateTime \n", "2015-03-01 00:00:02 316003124 42.02662 -82.60184 0.0 PELEE ISLANDER \n", "2015-03-01 00:00:03 316002238 46.50399 -84.32688 0.0 ANGLIAN LADY \n", "2015-03-01 00:00:03 316002238 46.50399 -84.32688 0.0 ANGLIAN LADY \n", "2015-03-01 00:00:03 367063240 46.48492 -84.29752 0.0 SUGAR ISLANDER II \n", "2015-03-01 00:00:03 367063240 46.48492 -84.29752 0.0 SUGAR ISLANDER II \n", "\n", " Status Draft Cargo \n", "BaseDateTime \n", "2015-03-01 00:00:02 undefined 2.33 NaN \n", "2015-03-01 00:00:03 undefined 4.27 52.0 \n", "2015-03-01 00:00:03 undefined 4.27 52.0 \n", "2015-03-01 00:00:03 under way using engine 0.00 60.0 \n", "2015-03-01 00:00:03 under way using engine 0.00 60.0 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Importing Previously processed AIS Data for the Great Lakes \n", "#NY2014 = pd.read_csv('./Data/Trimmed_NY2014.csv')\n", "#print(f'NY2014 loaded with {len(NY2014)} lines.')\n", "NY2015 = pd.read_csv('./Data/Trimmed_NY2015_new.csv')\n", "print(f'NY2015 loaded with {len(NY2015)} lines.')\n", "NY2016 = pd.read_csv('./Data/Trimmed_NY2016_new.csv')\n", "print(f'NY2016 loaded with {len(NY2016)} lines.')\n", "NY2017 = pd.read_csv('./Data/Trimmed_NY2017_new.csv')\n", "print(f'NY2017 loaded with {len(NY2017)} lines.')\n", "AIS = NY2015.append([NY2016, NY2017])\n", "print('Files appended')\n", "\n", "print(f\"There are {len(AIS)} original lines of data in the Dataframe.\")\n", "\n", "#Renaming select entries to match records in the LPMS\n", "AIS['VesselName'] = AIS['VesselName'].str.replace('JOETHOMPSON','JOSEPH H THOMPSON JR')\n", "AIS['VesselName'] = AIS['VesselName'].str.replace('CLYDE S VAN ENKEVORT','TUG CLYDE S VANENKEVORT')\n", "AIS = AIS.set_index(pd.to_datetime(AIS['BaseDateTime']), drop=True) #set index to Datetime\n", "\n", "#print(f\"There are {len(AIS)} lines of data with unnamed vessels removed.\")\n", "print(f\"There are {len(np.unique(AIS['MMSI']))} unique vessels in the dataset.\")\n", "\n", "#Reducing the dataframe to only include columns listed below. \n", "AIS=AIS[['MMSI','LAT','LON','SOG','VesselName','Status','Draft','Cargo']] \n", "AIS.head()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lock Data was obtained from the Soo Locks facility in Sault Ste Marie, MI in its raw form. Vessel Names and identification numbers have been obscured to protect proprietary information for shipping companies. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "55342\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VesselNameCountryOriginDestinationCodeTonsCargo
BaseDateTime
2005-03-25 00:01:00INDIANA HARBOR840STURGEON BAY, WITWO HARBORS, MN10Empty Barges
2005-03-25 02:56:00AMERICAN SPIRIT840SUPERIOR, WIGARY, IN441053952Iron Ore
2005-03-25 11:25:00PRESQUE ISLE840TWO HARBORS, MNGARY, IN441055608Iron Ore
2005-03-25 13:14:00CHARLES M BEEGHLY840CALUMET HARBOR, ILPRESQUE ISLE, MI110022287Coal Lignite
2005-03-25 14:33:00LEE A TREGURTHA840PORT LAMBTON CANDULUTH, MN10Empty Barges
\n", "
" ], "text/plain": [ " VesselName Country Origin \\\n", "BaseDateTime \n", "2005-03-25 00:01:00 INDIANA HARBOR 840 STURGEON BAY, WI \n", "2005-03-25 02:56:00 AMERICAN SPIRIT 840 SUPERIOR, WI \n", "2005-03-25 11:25:00 PRESQUE ISLE 840 TWO HARBORS, MN \n", "2005-03-25 13:14:00 CHARLES M BEEGHLY 840 CALUMET HARBOR, IL \n", "2005-03-25 14:33:00 LEE A TREGURTHA 840 PORT LAMBTON CAN \n", "\n", " Destination Code Tons Cargo \n", "BaseDateTime \n", "2005-03-25 00:01:00 TWO HARBORS, MN 1 0 Empty Barges \n", "2005-03-25 02:56:00 GARY, IN 4410 53952 Iron Ore \n", "2005-03-25 11:25:00 GARY, IN 4410 55608 Iron Ore \n", "2005-03-25 13:14:00 PRESQUE ISLE, MI 1100 22287 Coal Lignite \n", "2005-03-25 14:33:00 DULUTH, MN 1 0 Empty Barges " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Importing Maritime Traffic Data from the Soo Locks and removing unused columns \n", "LPMS = pd.read_csv('./Data/Combined Soo Locks Data.csv')\n", "#Delete unused columns from the original data\n", "del LPMS['VESSEL_FUNCTION_TYPE']\n", "del LPMS['BARGE_ID']\n", "del LPMS['CHMBR_NO']\n", "del LPMS['LOCK_RESTRICTION']\n", "del LPMS['EROC']\n", "del LPMS['RIVER_CODE']\n", "del LPMS['VESSEL_NO']\n", "#Renaming columns to be more intuitive\n", "LPMS = LPMS.rename(columns={\"VESSEL_NAME\":\"VesselName\",'VESSEL_FLAG':'Country', \n", " 'SOL_DATE':'BaseDateTime',\"ORIGIN\":\"Origin\", \"DESTINATION\":\"Destination\", \n", " \"COMM_CODE\":\"Code\", 'COMMODITY_TONS':'Tons', \"COMM_DESC\":\"Cargo\"})\n", "#Renaming select names to match the AIS dataframe\n", "LPMS['VesselName'] = LPMS['VesselName'].str.replace('.','')\n", "LPMS['VesselName'] = LPMS['VesselName'].str.replace('G3 MARQUIS','G3 MARQUIS')\n", "LPMS['VesselName'] = LPMS['VesselName'].str.replace('ST CLAIR ','ST CLAIR')\n", "LPMS['VesselName'] = LPMS['VesselName'].str.replace('ALGOMA BUFFALO','BUFFALO')\n", "#LPMS['VesselName'] = LPMS['VesselName'].str.replace('DEFIANCE','TUG DEFIANCE') #\n", "LPMS['VesselName'] = LPMS['VesselName'].str.replace('CSL ST LAURENT','CSL ST-LAURENT')\n", "\n", "#Setting timestamp as index and deleting the redundant column\n", "LPMS = LPMS.set_index(pd.to_datetime(LPMS['BaseDateTime']), drop=True)\n", "del LPMS['BaseDateTime']\n", "print(len(LPMS))\n", "LPMS.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "11032\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VesselNameCountryOriginDestinationCodeTonsCargo
BaseDateTime
2015-03-25 20:09:00EDWIN H GOTT840MILWAUKEE, WITWO HARBORS, MN10Empty Barges
2015-03-26 01:12:00ROGER BLOUGH840ERIE, PATWO HARBORS, MN10Empty Barges
2015-03-27 18:22:00JOHN G MUNSON840DULUTH, MNGARY, IN441026837Iron Ore
2015-03-29 08:05:00ALGOMA OLYMPIC124SARNIA CANSUPERIOR, WI10Empty Barges
2015-03-30 19:40:00PHILIP R CLARKE840TOLEDO, OHTWO HARBORS, MN10Empty Barges
\n", "
" ], "text/plain": [ " VesselName Country Origin Destination \\\n", "BaseDateTime \n", "2015-03-25 20:09:00 EDWIN H GOTT 840 MILWAUKEE, WI TWO HARBORS, MN \n", "2015-03-26 01:12:00 ROGER BLOUGH 840 ERIE, PA TWO HARBORS, MN \n", "2015-03-27 18:22:00 JOHN G MUNSON 840 DULUTH, MN GARY, IN \n", "2015-03-29 08:05:00 ALGOMA OLYMPIC 124 SARNIA CAN SUPERIOR, WI \n", "2015-03-30 19:40:00 PHILIP R CLARKE 840 TOLEDO, OH TWO HARBORS, MN \n", "\n", " Code Tons Cargo \n", "BaseDateTime \n", "2015-03-25 20:09:00 1 0 Empty Barges \n", "2015-03-26 01:12:00 1 0 Empty Barges \n", "2015-03-27 18:22:00 4410 26837 Iron Ore \n", "2015-03-29 08:05:00 1 0 Empty Barges \n", "2015-03-30 19:40:00 1 0 Empty Barges " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This clips the LPMS data the navigation years of interest. \n", "#A navigation year in the Great Lakes is 25 March to 15 Jan. I have assigned a 5 days buffer.\n", "NY = LPMS.loc[(LPMS.index>'2015-3-20')&(LPMS.index<'2018-1-20')]\n", "print(len(NY))\n", "NY.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VesselNameCountryOriginDestinationCodeTonsCargo
BaseDateTime
2018-01-13 20:24:00TUG ANGLIAN LADY124SAULT STE MARIE (ABOVE) CANDETROIT, MI533010108Iron and Steel Plates and Sheets
2018-01-14 15:03:00JOSEPH L BLOCK840SUPERIOR, WIBURNS HARBOR, IN441031360Iron Ore
2018-01-14 16:16:00AMERICAN MARINER840TWO HARBORS, MNDETROIT, MI441030838Iron Ore
2018-01-15 09:49:00JOYCE L VANENKEVORT840TWO HARBORS, MNCONNEAUT, OH441032206Iron Ore
2018-01-15 14:23:00EDWIN H GOTT840DETROIT, MIDULUTH, MN10Empty Barges
\n", "
" ], "text/plain": [ " VesselName Country Origin \\\n", "BaseDateTime \n", "2018-01-13 20:24:00 TUG ANGLIAN LADY 124 SAULT STE MARIE (ABOVE) CAN \n", "2018-01-14 15:03:00 JOSEPH L BLOCK 840 SUPERIOR, WI \n", "2018-01-14 16:16:00 AMERICAN MARINER 840 TWO HARBORS, MN \n", "2018-01-15 09:49:00 JOYCE L VANENKEVORT 840 TWO HARBORS, MN \n", "2018-01-15 14:23:00 EDWIN H GOTT 840 DETROIT, MI \n", "\n", " Destination Code Tons \\\n", "BaseDateTime \n", "2018-01-13 20:24:00 DETROIT, MI 5330 10108 \n", "2018-01-14 15:03:00 BURNS HARBOR, IN 4410 31360 \n", "2018-01-14 16:16:00 DETROIT, MI 4410 30838 \n", "2018-01-15 09:49:00 CONNEAUT, OH 4410 32206 \n", "2018-01-15 14:23:00 DULUTH, MN 1 0 \n", "\n", " Cargo \n", "BaseDateTime \n", "2018-01-13 20:24:00 Iron and Steel Plates and Sheets \n", "2018-01-14 15:03:00 Iron Ore \n", "2018-01-14 16:16:00 Iron Ore \n", "2018-01-15 09:49:00 Iron Ore \n", "2018-01-15 14:23:00 Empty Barges " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "NY.tail()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There were 2862 shipments of iron ore in this time period.\n", "83 unique vessels carried iron ore.\n" ] } ], "source": [ "iron = NY.loc[NY.Cargo=='Iron Ore'] #subsets LPMS data to only include vessels that have carried iron ore in the specified year\n", "print(f'There were {len(iron)} shipments of iron ore in this time period.')\n", "vessels = iron.VesselName.unique() #list of iron carrying vessels\n", "print(f'{len(vessels)} unique vessels carried iron ore.')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n" ] }, { "data": { "text/plain": [ "Index(['AMERICAN CENTURY', 'AMERICAN INTEGRITY', 'AMERICAN SPIRIT', 'BUFFALO',\n", " 'BURNS HARBOR', 'CASON J CALLAWAY', 'CSL ASSINIBOINE', 'CSL LAURENTIEN',\n", " 'CSL NIAGARA', 'EDGAR B SPEER', 'EDWIN H GOTT', 'HERBERT C JACKSON',\n", " 'HON JAMES L OBERSTAR', 'JAMES R BARKER', 'JOHN G MUNSON',\n", " 'JOSEPH L BLOCK', 'JOYCE L VANENKEVORT', 'KAYE E BARKER',\n", " 'LEE A TREGURTHA', 'MESABI MINER', 'PHILIP R CLARKE', 'PRESQUE ISLE',\n", " 'ROGER BLOUGH', 'RT HON PAUL J MARTIN', 'SAM LAUD', 'STEWART J CORT',\n", " 'THUNDER BAY', 'TUG CLYDE S VANENKEVORT', 'VICTORY',\n", " 'WALTER J MCCARTHY JR'],\n", " dtype='object', name='VesselName')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Creating list of vessels that carry iron ore\n", "vessels = iron.VesselName.unique()\n", "\n", "#Restricting the list of vessels to those that have made 10 or more trips with iron ore.\n", "#I wanted the data to mostly reflect vessesl that are making the back and forth runs between lakes. \n", "count=iron.groupby(iron.VesselName)['Tons'].count()\n", "shipper = count.loc[(count>30)==True]\n", "vessels=shipper.index #list of vessels with >10 iron trips\n", "print(len(vessels))\n", "vessels\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 2271 trips of iron ore in the dataset.\n", "There are 10 vessels larger than 65,000 Tons.\n", "There are 10 vessels smaller than 35,000 Tons.\n", "There are 10 vessels between 35,000 and 65,000 Tons.\n", "There are 837 records for big vessels.\n", "There are 606 records for medium vessels.\n", "There are 828 records for small vessels.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
VesselNameCountryOriginDestinationCodeTonsCargo
BaseDateTime
2015-04-02 13:20:00EDWIN H GOTT840TWO HARBORS, MNGARY, IN441066157Iron Ore
2015-04-09 22:28:00STEWART J CORT840SUPERIOR, WIBURNS HARBOR, IN441062526Iron Ore
2015-04-12 02:28:00AMERICAN INTEGRITY840SILVER BAY, MNCLEVELAND, OH441063499Iron Ore
2015-04-13 04:46:00JAMES R BARKER840DULUTH, MNINDIANA HARBOR, IN441066136Iron Ore
2015-04-13 09:05:00EDGAR B SPEER840TWO HARBORS, MNGARY, IN441067376Iron Ore
\n", "
" ], "text/plain": [ " VesselName Country Origin \\\n", "BaseDateTime \n", "2015-04-02 13:20:00 EDWIN H GOTT 840 TWO HARBORS, MN \n", "2015-04-09 22:28:00 STEWART J CORT 840 SUPERIOR, WI \n", "2015-04-12 02:28:00 AMERICAN INTEGRITY 840 SILVER BAY, MN \n", "2015-04-13 04:46:00 JAMES R BARKER 840 DULUTH, MN \n", "2015-04-13 09:05:00 EDGAR B SPEER 840 TWO HARBORS, MN \n", "\n", " Destination Code Tons Cargo \n", "BaseDateTime \n", "2015-04-02 13:20:00 GARY, IN 4410 66157 Iron Ore \n", "2015-04-09 22:28:00 BURNS HARBOR, IN 4410 62526 Iron Ore \n", "2015-04-12 02:28:00 CLEVELAND, OH 4410 63499 Iron Ore \n", "2015-04-13 04:46:00 INDIANA HARBOR, IN 4410 66136 Iron Ore \n", "2015-04-13 09:05:00 GARY, IN 4410 67376 Iron Ore " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Trisecting data by vessel class \n", "begin= pd.datetime(year=2015, month = 3, day = 25) #beginning of navigation year 2005\n", "end = pd.datetime(year=2018, month = 1, day = 15) # end of navigation year 2017\n", "#subsets iron ore data for 44 vessels operating in navigation years 2005-2017\n", "iron=iron.loc[((iron.VesselName.isin(vessels))&(iron.index>begin)&(iron.index65000)==True]\n", "print(f'There are {len(Bigs)} vessels larger than 65,000 Tons.')\n", "Smalls = MaxLoad.loc[(MaxLoad<35000)==True]\n", "print(f'There are {len(Smalls)} vessels smaller than 35,000 Tons.')\n", "Mediums = MaxLoad.loc[((MaxLoad>35000)&(MaxLoad<65000))==True]\n", "print(f'There are {len(Mediums)} vessels between 35,000 and 65,000 Tons.')\n", "\n", "\n", "BIG= iron.loc[iron.VesselName.isin(Bigs.index)]\n", "print(f'There are {len(BIG)} records for big vessels.')\n", "MEDIUM= iron.loc[iron.VesselName.isin(Mediums.index)]\n", "print(f'There are {len(MEDIUM)} records for medium vessels.')\n", "SMALL= iron.loc[iron.VesselName.isin(Smalls.index)]\n", "print(f'There are {len(SMALL)} records for small vessels.')\n", "BIG.head()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30\n" ] }, { "data": { "text/plain": [ "array([366971350, 316001635, 366904880, 366904910, 366930730, 366971360,\n", " 367082230, 366972030, 366971370, 366983440, 367480260, 367050550,\n", " 366904950, 366904930, 367057570, 366971330, 366901880, 366971340,\n", " 366905890, 316029000, 367120990, 316023339, 366904890, 316001637,\n", " 367121010, 366906610, 366938760, 316001633, 366938740, 338888000])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Identifying MMSI for each of the iron vessels. The MMSI is necessary to identify ships in the AIS data before 2015. \n", "#Three vessels have no listed MMSI, and two have multiple listings \n", "ais=AIS.loc[AIS.VesselName.isin(vessels)]\n", "MMSIs=ais.MMSI.unique()\n", "print(len(MMSIs))\n", "MMSIs" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"Iron=pd.DataFrame()\\nfor MMSI in MMSIs:\\n subset = AIS.loc[(AIS.MMSI==MMSI)]\\n #creates timedelta between each point in the dataframe for given vessel, units of hours\\n subset['Duration']=subset.index.to_series().diff().astype('timedelta64[h]') \\n subset['from_LAT']=subset.LAT.shift() # this records the last position from which the timedelta is calculated\\n subset['from_LON']=subset.LON.shift() # this records the last position from which the timedelta is calculated\\n #filling Vessel Names for nan values in the AIS data\\n subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].bfill() # backfill\\n subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].ffill() # forward fill\\n #subsets the data further for dt > specified # hours. \\n subset=subset.loc[(subset.Duration>0.5)]\\n Iron = Iron.append(subset)\\n #print(f'{MMSI} has {len(subset)} data points.')\\nIron = Iron.sort_index()\\nprint(len(Iron))\\nIron.head()\\n\\n#resetting vessel list to names. I prefer to use names in the analysis because it is more intuitive. MMSI would also work. \\nvessels=Iron.VesselName.unique()\\nprint(f'There are {len(vessels)} vessels that we will analyze movements.')\\nvessels\\n\"" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This cell is written to fill VesselName data for AIS record prior to 2015. \n", "#IT DOES NOT WORK - MMSIs were encrypted by the USCG until 2015 and the records do not match those for 2015-2017.\n", "#The Expansion of this dataset into those earlier years require the encryption key from the USCG. \n", "\n", "'''Iron=pd.DataFrame()\n", "for MMSI in MMSIs:\n", " subset = AIS.loc[(AIS.MMSI==MMSI)]\n", " #creates timedelta between each point in the dataframe for given vessel, units of hours\n", " subset['Duration']=subset.index.to_series().diff().astype('timedelta64[h]') \n", " subset['from_LAT']=subset.LAT.shift() # this records the last position from which the timedelta is calculated\n", " subset['from_LON']=subset.LON.shift() # this records the last position from which the timedelta is calculated\n", " #filling Vessel Names for nan values in the AIS data\n", " subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].bfill() # backfill\n", " subset.loc[:,'VesselName']=subset.loc[:,'VesselName'].ffill() # forward fill\n", " #subsets the data further for dt > specified # hours. \n", " subset=subset.loc[(subset.Duration>0.5)]\n", " Iron = Iron.append(subset)\n", " #print(f'{MMSI} has {len(subset)} data points.')\n", "Iron = Iron.sort_index()\n", "print(len(Iron))\n", "Iron.head()\n", "\n", "#resetting vessel list to names. I prefer to use names in the analysis because it is more intuitive. MMSI would also work. \n", "vessels=Iron.VesselName.unique()\n", "print(f'There are {len(vessels)} vessels that we will analyze movements.')\n", "vessels\n", "'''" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
WestEastNorthSouth
Two Harbors-91.713-91.60147.06446.958
Silver Bay-91.277-91.19947.29247.239
Duluth-Superior-92.160-91.85246.92646.633
Presque Isle-87.395-87.35746.58246.561
St Marys River-84.996-83.95546.77046.107
\n", "
" ], "text/plain": [ " West East North South\n", "Two Harbors -91.713 -91.601 47.064 46.958\n", "Silver Bay -91.277 -91.199 47.292 47.239\n", "Duluth-Superior -92.160 -91.852 46.926 46.633\n", "Presque Isle -87.395 -87.357 46.582 46.561\n", "St Marys River -84.996 -83.955 46.770 46.107" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features=pd.DataFrame(columns=['West','East','North','South'])\n", "features.loc['Two Harbors'] =[-91.713,-91.601,47.064,46.958]\n", "features.loc['Silver Bay'] =[-91.277,-91.199,47.292,47.239]\n", "features.loc['Duluth-Superior']=[-92.160,-91.852,46.926,46.633]\n", "features.loc['Presque Isle'] =[-87.395,-87.357,46.582,46.561]\n", "\n", "#features.loc['St Marys River'] =[-84.584,-83.955,46.561,46.107]\n", "features.loc['St Marys River'] =[-84.996,-83.955,46.770,46.107] #including Whitefish Bay\n", "features.loc['St Clair'] =[-82.466,-82.375,43.015,43.009]\n", "features.loc['Detroit River'] =[-83.219,-83.062,42.075,42.064]\n", "features.loc['W Lake Erie'] =[-82.671,-82.572,42.057,41.406]\n", "\n", "features.loc['Welland Canal'] =[-79.261,-79.182,43.220,42.868]\n", "features.loc['Mackinaw Straits']=[-84.753,-84.725,45.857,45.766]\n", "#features.loc['Whitefish Bay'] =[-84.996,-84.541,46.770,46.763]\n", "features.loc['S.Lake Michigan']=[-87.548,-86.847,41.750,41.743]\n", "\n", "features.loc['E.Lake Ontario'] =[-76.599,-76.592,44.274,43.421]\n", "features.loc['Thunder Bay'] =[-89.267,-89.092,48.476,48.311]\n", "features.loc['Nanticoke'] =[-80.054,-80.029,42.802,42.766]\n", "features.loc['Hamilton'] =[-79.780,-79.802,43.262,43.303]\n", "\n", "features.loc['Indiana Harbor'] =[-87.496,-87.429,41.682,41.641]\n", "features.loc['Gary'] =[-87.329,-87.319,41.628,41.609]\n", "features.loc['Burns Harbor'] =[-87.153,-87.144,41.647,41.634]\n", "features.loc['Detroit'] =[-83.110,-83.106,42.281,42.278]\n", "\n", "features.loc['Dearborn'] =[-83.161,-83.153,42.307,42.297]\n", "features.loc['Toledo'] =[-83.543,-83.333,41.769,41.460]\n", "features.loc['Cleveland'] =[-81.725,-81.663,41.514,41.460]\n", "features.loc['Ashtabula'] =[-80.804,-80.781,41.919,41.878]\n", "features.loc['Conneaut'] =[-80.598,-80.540,42.008,41.951]\n", "\n", "features.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "AMERICAN CENTURY has 351627 data points.\n", "AMERICAN INTEGRITY has 353867 data points.\n", "AMERICAN SPIRIT has 288205 data points.\n", "BUFFALO has 399908 data points.\n", "BURNS HARBOR has 431646 data points.\n", "CASON J CALLAWAY has 190759 data points.\n", "CSL ASSINIBOINE has 188342 data points.\n", "CSL LAURENTIEN has 230878 data points.\n", "CSL NIAGARA has 218725 data points.\n", "EDGAR B SPEER has 327319 data points.\n", "EDWIN H GOTT has 310941 data points.\n", "HERBERT C JACKSON has 150046 data points.\n", "HON JAMES L OBERSTAR has 339177 data points.\n", "JAMES R BARKER has 254150 data points.\n", "JOHN G MUNSON has 121463 data points.\n", "JOSEPH L BLOCK has 237300 data points.\n", "JOYCE L VANENKEVORT has 266940 data points.\n", "KAYE E BARKER has 266818 data points.\n", "LEE A TREGURTHA has 234481 data points.\n", "MESABI MINER has 259098 data points.\n", "PHILIP R CLARKE has 285600 data points.\n", "PRESQUE ISLE has 320117 data points.\n", "ROGER BLOUGH has 249487 data points.\n", "RT HON PAUL J MARTIN has 206186 data points.\n", "SAM LAUD has 252461 data points.\n", "STEWART J CORT has 273407 data points.\n", "THUNDER BAY has 269086 data points.\n", "TUG CLYDE S VANENKEVORT has 79822 data points.\n", "VICTORY has 319265 data points.\n", "WALTER J MCCARTHY JR has 287467 data points.\n", "7964588\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
MMSILATLONSOGVesselNameStatusDraftCargoDurationfrom_LATfrom_LON
BaseDateTime
2015-03-01 03:14:0036697135041.69872-83.450460.1PHILIP R CLARKEunder way using engine8.0370.0NaNNaNNaN
2015-03-02 16:50:0131600163542.88318-79.248480.0RT HON PAUL J MARTINunder way sailing9.010.0NaNNaNNaN
2015-03-02 16:51:1131600163542.88317-79.248540.0RT HON PAUL J MARTINunder way sailing9.010.01.042.88318-79.24848
2015-03-02 16:52:1331600163542.88316-79.248540.0RT HON PAUL J MARTINunder way sailing9.010.01.042.88317-79.24854
2015-03-02 16:53:2231600163542.88314-79.248490.0RT HON PAUL J MARTINunder way sailing9.010.01.042.88316-79.24854
\n", "
" ], "text/plain": [ " MMSI LAT LON SOG VesselName \\\n", "BaseDateTime \n", "2015-03-01 03:14:00 366971350 41.69872 -83.45046 0.1 PHILIP R CLARKE \n", "2015-03-02 16:50:01 316001635 42.88318 -79.24848 0.0 RT HON PAUL J MARTIN \n", "2015-03-02 16:51:11 316001635 42.88317 -79.24854 0.0 RT HON PAUL J MARTIN \n", "2015-03-02 16:52:13 316001635 42.88316 -79.24854 0.0 RT HON PAUL J MARTIN \n", "2015-03-02 16:53:22 316001635 42.88314 -79.24849 0.0 RT HON PAUL J MARTIN \n", "\n", " Status Draft Cargo Duration from_LAT \\\n", "BaseDateTime \n", "2015-03-01 03:14:00 under way using engine 8.03 70.0 NaN NaN \n", "2015-03-02 16:50:01 under way sailing 9.01 0.0 NaN NaN \n", "2015-03-02 16:51:11 under way sailing 9.01 0.0 1.0 42.88318 \n", "2015-03-02 16:52:13 under way sailing 9.01 0.0 1.0 42.88317 \n", "2015-03-02 16:53:22 under way sailing 9.01 0.0 1.0 42.88316 \n", "\n", " from_LON \n", "BaseDateTime \n", "2015-03-01 03:14:00 NaN \n", "2015-03-02 16:50:01 NaN \n", "2015-03-02 16:51:11 -79.24848 \n", "2015-03-02 16:52:13 -79.24854 \n", "2015-03-02 16:53:22 -79.24854 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Iron=pd.DataFrame()\n", "for vessel in vessels:\n", " subset = ais.loc[ais.VesselName==vessel]\n", " subset['Duration']=subset.index.to_series().diff().astype('timedelta64[m]') \n", " subset['from_LAT']=subset.LAT.shift() # this records the last position from which the timedelta is calculated\n", " subset['from_LON']=subset.LON.shift() # this records the last position from which the timedelta is calculated\n", " print(f'{vessel} has {len(subset)} data points.')\n", " Iron = Iron.append(subset)\n", "Iron = Iron.sort_index()\n", "print(len(Iron))\n", "Iron.head() " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data=Iron\n", "fig = plt.figure(figsize=(15, 7))\n", "m = Basemap(projection='merc',llcrnrlon=-93,llcrnrlat=41,urcrnrlon=-74,urcrnrlat=49.1, lat_ts=0, resolution='l')\n", "ax = fig.add_subplot(111)\n", "\n", "lat = data['LAT'].values\n", "lon = data['LON'].values\n", "\n", "m.scatter(lon, lat, latlon=True, c='r', label='O', s=50)#cmap='Reds', alpha=0.5)\n", "m.drawparallels(np.arange(40,60,2),labels=[True,True,False,False],dashes=[2,2])\n", "m.drawmeridians(np.arange(-95,-70,5),labels=[False,False,False,True],dashes=[2,2])\n", "\n", "m.drawcountries(linewidth=1)\n", "m.drawcoastlines()\n", "m.drawstates()\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Two Harbors', 'Silver Bay', 'Duluth-Superior', 'Presque Isle',\n", " 'St Marys River', 'St Clair', 'Detroit River', 'W Lake Erie',\n", " 'Welland Canal', 'Mackinaw Straits', 'S.Lake Michigan',\n", " 'E.Lake Ontario', 'Thunder Bay', 'Nanticoke', 'Hamilton',\n", " 'Indiana Harbor', 'Gary', 'Burns Harbor', 'Detroit', 'Dearborn',\n", " 'Toledo', 'Cleveland', 'Ashtabula', 'Conneaut'],\n", " dtype='object')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features.index" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "155\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CargoDraftDurationLATLONMMSIPositionSOGStatusVesselNamefrom_LATfrom_LON
2015-04-15 13:29:1470.010.38783.046.10950-84.01477366906610.0Arrive St Marys River10.8under way using engineWALTER J MCCARTHY JR45.81536-84.72834
2015-04-19 16:50:2670.010.382107.046.76845-84.90162366906610.0Arrive St Marys River8.7under way using engineWALTER J MCCARTHY JR47.01222-91.60329
2015-04-23 23:08:5270.010.38342.046.10766-84.01453366906610.0Arrive St Marys River10.6under way using engineWALTER J MCCARTHY JR45.81527-84.72916
2015-04-27 22:50:0770.010.381507.046.76988-84.90471366906610.0Arrive St Marys River5.1under way using engineWALTER J MCCARTHY JR46.77000-91.85316
2015-05-02 10:49:5470.010.38238.046.10943-84.01445366906610.0Arrive St Marys River11.8under way using engineWALTER J MCCARTHY JR45.81613-84.72865
.......................................
2017-12-11 10:28:4570.010.401014.046.10752-84.01467366906610.0Arrive St Marys River11.4under way using engineWALTER J MCCARTHY JR43.01278-82.41584
2017-12-14 23:02:2770.010.401531.046.76843-84.90160366906610.0Arrive St Marys River11.9under way using engineWALTER J MCCARTHY JR46.98976-91.60309
2017-12-19 23:18:3670.010.401143.046.10826-84.01460366906610.0Arrive St Marys River9.1at anchorWALTER J MCCARTHY JR43.01399-82.41614
2017-12-23 15:31:1770.010.401431.046.76912-84.90166366906610.0Arrive St Marys River12.0at anchorWALTER J MCCARTHY JR47.01153-91.60700
2017-12-27 21:35:2170.010.40254.046.10772-84.01464366906610.0Arrive St Marys River9.1under way using engineWALTER J MCCARTHY JR45.81556-84.72633
\n", "

155 rows × 12 columns

\n", "
" ], "text/plain": [ " Cargo Draft Duration LAT LON MMSI \\\n", "2015-04-15 13:29:14 70.0 10.38 783.0 46.10950 -84.01477 366906610.0 \n", "2015-04-19 16:50:26 70.0 10.38 2107.0 46.76845 -84.90162 366906610.0 \n", "2015-04-23 23:08:52 70.0 10.38 342.0 46.10766 -84.01453 366906610.0 \n", "2015-04-27 22:50:07 70.0 10.38 1507.0 46.76988 -84.90471 366906610.0 \n", "2015-05-02 10:49:54 70.0 10.38 238.0 46.10943 -84.01445 366906610.0 \n", "... ... ... ... ... ... ... \n", "2017-12-11 10:28:45 70.0 10.40 1014.0 46.10752 -84.01467 366906610.0 \n", "2017-12-14 23:02:27 70.0 10.40 1531.0 46.76843 -84.90160 366906610.0 \n", "2017-12-19 23:18:36 70.0 10.40 1143.0 46.10826 -84.01460 366906610.0 \n", "2017-12-23 15:31:17 70.0 10.40 1431.0 46.76912 -84.90166 366906610.0 \n", "2017-12-27 21:35:21 70.0 10.40 254.0 46.10772 -84.01464 366906610.0 \n", "\n", " Position SOG Status \\\n", "2015-04-15 13:29:14 Arrive St Marys River 10.8 under way using engine \n", "2015-04-19 16:50:26 Arrive St Marys River 8.7 under way using engine \n", "2015-04-23 23:08:52 Arrive St Marys River 10.6 under way using engine \n", "2015-04-27 22:50:07 Arrive St Marys River 5.1 under way using engine \n", "2015-05-02 10:49:54 Arrive St Marys River 11.8 under way using engine \n", "... ... ... ... \n", "2017-12-11 10:28:45 Arrive St Marys River 11.4 under way using engine \n", "2017-12-14 23:02:27 Arrive St Marys River 11.9 under way using engine \n", "2017-12-19 23:18:36 Arrive St Marys River 9.1 at anchor \n", "2017-12-23 15:31:17 Arrive St Marys River 12.0 at anchor \n", "2017-12-27 21:35:21 Arrive St Marys River 9.1 under way using engine \n", "\n", " VesselName from_LAT from_LON \n", "2015-04-15 13:29:14 WALTER J MCCARTHY JR 45.81536 -84.72834 \n", "2015-04-19 16:50:26 WALTER J MCCARTHY JR 47.01222 -91.60329 \n", "2015-04-23 23:08:52 WALTER J MCCARTHY JR 45.81527 -84.72916 \n", "2015-04-27 22:50:07 WALTER J MCCARTHY JR 46.77000 -91.85316 \n", "2015-05-02 10:49:54 WALTER J MCCARTHY JR 45.81613 -84.72865 \n", "... ... ... ... \n", "2017-12-11 10:28:45 WALTER J MCCARTHY JR 43.01278 -82.41584 \n", "2017-12-14 23:02:27 WALTER J MCCARTHY JR 46.98976 -91.60309 \n", "2017-12-19 23:18:36 WALTER J MCCARTHY JR 43.01399 -82.41614 \n", "2017-12-23 15:31:17 WALTER J MCCARTHY JR 47.01153 -91.60700 \n", "2017-12-27 21:35:21 WALTER J MCCARTHY JR 45.81556 -84.72633 \n", "\n", "[155 rows x 12 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for vessel in vessels:\n", " df=Iron.loc[Iron.VesselName==vessel] #subset of data for single vessel\n", " Points=pd.DataFrame()\n", " feature='St Marys River' \n", " #boundaries from the feature matrix\n", " E=features.loc[feature,'East']\n", " W=features.loc[feature,'West']\n", " N=features.loc[feature,'North']\n", " S=features.loc[feature,'South']\n", "\n", " df1=df.loc[(df.LAT<=N)&(df.LAT>=S)&(df.LON<=E)&(df.LON>=W)] #subset of data for single geographic feature\n", "\n", " #creating a list of unique dates in the index\n", " datelist=np.unique(df1.index.date)\n", " #This eliminates the second of any two contiguos dates. Necessary when vessels are in a feature overnight\n", " dates=datelist[(datelist-np.roll(datelist,1))!=pd.Timedelta(days=1)] \n", "\n", " for date in dates:\n", " #identifying the minimum timestamp for each date and recording it, along with a position description\n", " df2=df1.loc[(df1.index.date==date)]\n", " arrive=df2.loc[min(df2.index)]\n", " arrive['Position']=f'Arrive {feature}'\n", " Points=Points.append(arrive)\n", "print(len(Points))\n", "Points" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "AMERICAN CENTURY has 1158 points.\n", "AMERICAN INTEGRITY has 1238 points.\n", "AMERICAN SPIRIT has 1106 points.\n", "BUFFALO has 995 points.\n", "BURNS HARBOR has 1166 points.\n", "CASON J CALLAWAY has 1027 points.\n", "CSL ASSINIBOINE has 885 points.\n", "CSL LAURENTIEN has 921 points.\n", "CSL NIAGARA has 918 points.\n", "EDGAR B SPEER has 1395 points.\n", "EDWIN H GOTT has 1511 points.\n", "HERBERT C JACKSON has 886 points.\n", "HON JAMES L OBERSTAR has 1388 points.\n", "JAMES R BARKER has 1090 points.\n", "JOHN G MUNSON has 549 points.\n", "JOSEPH L BLOCK has 1032 points.\n", "JOYCE L VANENKEVORT has 1269 points.\n", "KAYE E BARKER has 1257 points.\n", "LEE A TREGURTHA has 1285 points.\n", "MESABI MINER has 1197 points.\n", "PHILIP R CLARKE has 1007 points.\n", "PRESQUE ISLE has 1108 points.\n", "ROGER BLOUGH has 1218 points.\n", "RT HON PAUL J MARTIN has 856 points.\n", "SAM LAUD has 913 points.\n", "STEWART J CORT has 1294 points.\n", "THUNDER BAY has 985 points.\n", "TUG CLYDE S VANENKEVORT has 408 points.\n", "VICTORY has 1116 points.\n", "WALTER J MCCARTHY JR has 869 points.\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CargoDraftDurationLATLONMMSIPositionSOGStatusVesselNamefrom_LATfrom_LONFrom
2015-03-01 03:14:0070.08.030 days 00:00:0041.69872-83.45046366971350.0Depart Toledo0.1under way using enginePHILIP R CLARKENaNNaNArrive Toledo
2015-03-01 03:14:0070.08.03NaT41.69872-83.45046366971350.0Arrive Toledo0.1under way using enginePHILIP R CLARKENaNNaNNaN
2015-03-02 16:50:010.09.01NaT42.88318-79.24848316001635.0Arrive Welland Canal0.0under way sailingRT HON PAUL J MARTINNaNNaNNaN
2015-03-02 19:26:230.09.010 days 02:36:2242.88314-79.24848316001635.0Depart Welland Canal0.0under way sailingRT HON PAUL J MARTIN42.88314-79.24848Arrive Welland Canal
2015-03-03 11:28:4170.08.032 days 08:14:4141.69873-83.45055366971350.0Arrive Toledo0.1under way using enginePHILIP R CLARKE41.69872-83.45046Depart Toledo
\n", "
" ], "text/plain": [ " Cargo Draft Duration LAT LON \\\n", "2015-03-01 03:14:00 70.0 8.03 0 days 00:00:00 41.69872 -83.45046 \n", "2015-03-01 03:14:00 70.0 8.03 NaT 41.69872 -83.45046 \n", "2015-03-02 16:50:01 0.0 9.01 NaT 42.88318 -79.24848 \n", "2015-03-02 19:26:23 0.0 9.01 0 days 02:36:22 42.88314 -79.24848 \n", "2015-03-03 11:28:41 70.0 8.03 2 days 08:14:41 41.69873 -83.45055 \n", "\n", " MMSI Position SOG \\\n", "2015-03-01 03:14:00 366971350.0 Depart Toledo 0.1 \n", "2015-03-01 03:14:00 366971350.0 Arrive Toledo 0.1 \n", "2015-03-02 16:50:01 316001635.0 Arrive Welland Canal 0.0 \n", "2015-03-02 19:26:23 316001635.0 Depart Welland Canal 0.0 \n", "2015-03-03 11:28:41 366971350.0 Arrive Toledo 0.1 \n", "\n", " Status VesselName from_LAT \\\n", "2015-03-01 03:14:00 under way using engine PHILIP R CLARKE NaN \n", "2015-03-01 03:14:00 under way using engine PHILIP R CLARKE NaN \n", "2015-03-02 16:50:01 under way sailing RT HON PAUL J MARTIN NaN \n", "2015-03-02 19:26:23 under way sailing RT HON PAUL J MARTIN 42.88314 \n", "2015-03-03 11:28:41 under way using engine PHILIP R CLARKE 41.69872 \n", "\n", " from_LON From \n", "2015-03-01 03:14:00 NaN Arrive Toledo \n", "2015-03-01 03:14:00 NaN NaN \n", "2015-03-02 16:50:01 NaN NaN \n", "2015-03-02 19:26:23 -79.24848 Arrive Welland Canal \n", "2015-03-03 11:28:41 -83.45046 Depart Toledo " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This cell records minimum and maximum (for infrastructure only) times for each ship in each feature\n", "\n", "Inf = ['Two Harbors','Silver Bay','Duluth-Superior','Presque Isle','St Marys River','Welland Canal',\n", " 'Thunder Bay','Nanticoke','Hamilton','Indiana Harbor','Gary','Burns Harbor','Detroit','Dearborn',\n", " 'Toledo','Cleveland','Ashtabula','Conneaut']\n", "Trips=pd.DataFrame()\n", "for vessel in vessels:\n", " df=Iron.loc[Iron.VesselName==vessel] #subset of data for single vessel\n", " Points=pd.DataFrame()\n", " for feature in features.index: \n", " #boundaries from the feature matrix\n", " E=features.loc[feature,'East']\n", " W=features.loc[feature,'West']\n", " N=features.loc[feature,'North']\n", " S=features.loc[feature,'South']\n", "\n", " df1=df.loc[(df.LAT<=N)&(df.LAT>=S)&(df.LON<=E)&(df.LON>=W)] #subset of data for single geographic feature\n", " \n", " #creating a list of unique dates in the index\n", " datelist=np.unique(df1.index.date)\n", " #This eliminates the second of any two contiguos dates. Necessary when vessels are in a feature overnight\n", " dates=datelist[(datelist-np.roll(datelist,1))!=pd.Timedelta(days=1)] \n", " \n", " for date in dates:\n", " #identifying the minimum timestamp for each date and recording it, along with a position description\n", " df2=df1.loc[(df1.index.date==date)]\n", " arrive=df2.loc[min(df2.index)]\n", " arrive['Position']=f'Arrive {feature}'\n", " Points=Points.append(arrive)\n", "\n", " #Conditional statement for harbors and lock infrastructure. Only record a departure time for thos features \n", " if feature in Inf:\n", " datelist=np.unique(df1.index.date)\n", " #This eliminates the first of any two contiguos dates. Necessary when vessels are in a feature overnight\n", " dates=datelist[(datelist-np.roll(datelist,-1))!=pd.Timedelta(days=-1)]\n", " for date in dates:\n", " #identifying the minimum timestamp for each date and recording it, along with a position description\n", " df2=df1.loc[(df1.index.date==date)]\n", " depart=df2.loc[max(df2.index)]\n", " depart['Position']=f'Depart {feature}'\n", " Points=Points.append(depart)\n", "\n", " print(f'{vessel} has {len(Points)} points.')\n", " Points=Points.sort_index()\n", " Points.Duration=Points.index.to_series().diff() #recalculating trip duration based on the captured data\n", " Points['From']=Points.Position.shift()\n", " Trips=Trips.append(Points)\n", "Trips=Trips.sort_index()\n", "Trips.head()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "32047" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(Trips)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4604\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CargoDraftDurationLATLONMMSIPositionSOGStatusVesselNamefrom_LATfrom_LONFrom
2015-03-26 18:36:4875.09.772 days 13:31:4446.76976-84.90145366971370.0Depart St Marys River6.8under way using engineEDWIN H GOTT46.76789-84.89990Arrive St Marys River
2015-03-26 18:46:3670.08.512 days 06:05:2846.76783-84.89953366972030.0Depart St Marys River9.9under way using engineROGER BLOUGH46.76527-84.89710Arrive St Marys River
2015-03-28 19:27:1770.08.151 days 00:38:5146.10724-84.01422366971360.0Depart St Marys River8.3under way using engineJOHN G MUNSON46.10983-84.01380Arrive St Marys River
2015-03-31 14:15:1670.08.032 days 05:39:0046.76920-84.90083366971350.0Depart St Marys River6.7under way using enginePHILIP R CLARKE46.76751-84.89928Arrive St Marys River
2015-04-02 14:56:0370.08.521 days 18:08:2046.76925-84.90090367050550.0Depart St Marys River10.3under way using engineSTEWART J CORT46.76687-84.89865Arrive St Marys River
..........................................
2017-12-31 08:35:4670.08.200 days 07:36:2746.76726-84.85710366971360.0Depart St Marys River14.4under way using engineJOHN G MUNSON46.75920-84.85346Arrive St Marys River
2017-12-31 15:15:5070.09.000 days 13:13:5946.10797-84.01491316029000.0Depart St Marys River8.3under way using engineCSL NIAGARA46.11064-84.01456Arrive St Marys River
2017-12-31 17:38:25NaNNaN0 days 12:52:5046.10703-84.01505366930730.0Depart St Marys River7.3under way using engineAMERICAN SPIRIT46.11168-84.01447Arrive St Marys River
2017-12-31 23:58:46NaNNaN0 days 12:38:1946.46353-84.57252366971340.0Depart St Marys River0.1at anchorCASON J CALLAWAY46.46355-84.57252Arrive St Marys River
2017-12-31 23:58:52NaNNaN0 days 11:37:4046.56716-84.68026316023339.0Depart St Marys River6.7under way using engineTHUNDER BAY46.56533-84.67849Arrive St Marys River
\n", "

4604 rows × 13 columns

\n", "
" ], "text/plain": [ " Cargo Draft Duration LAT LON \\\n", "2015-03-26 18:36:48 75.0 9.77 2 days 13:31:44 46.76976 -84.90145 \n", "2015-03-26 18:46:36 70.0 8.51 2 days 06:05:28 46.76783 -84.89953 \n", "2015-03-28 19:27:17 70.0 8.15 1 days 00:38:51 46.10724 -84.01422 \n", "2015-03-31 14:15:16 70.0 8.03 2 days 05:39:00 46.76920 -84.90083 \n", "2015-04-02 14:56:03 70.0 8.52 1 days 18:08:20 46.76925 -84.90090 \n", "... ... ... ... ... ... \n", "2017-12-31 08:35:46 70.0 8.20 0 days 07:36:27 46.76726 -84.85710 \n", "2017-12-31 15:15:50 70.0 9.00 0 days 13:13:59 46.10797 -84.01491 \n", "2017-12-31 17:38:25 NaN NaN 0 days 12:52:50 46.10703 -84.01505 \n", "2017-12-31 23:58:46 NaN NaN 0 days 12:38:19 46.46353 -84.57252 \n", "2017-12-31 23:58:52 NaN NaN 0 days 11:37:40 46.56716 -84.68026 \n", "\n", " MMSI Position SOG \\\n", "2015-03-26 18:36:48 366971370.0 Depart St Marys River 6.8 \n", "2015-03-26 18:46:36 366972030.0 Depart St Marys River 9.9 \n", "2015-03-28 19:27:17 366971360.0 Depart St Marys River 8.3 \n", "2015-03-31 14:15:16 366971350.0 Depart St Marys River 6.7 \n", "2015-04-02 14:56:03 367050550.0 Depart St Marys River 10.3 \n", "... ... ... ... \n", "2017-12-31 08:35:46 366971360.0 Depart St Marys River 14.4 \n", "2017-12-31 15:15:50 316029000.0 Depart St Marys River 8.3 \n", "2017-12-31 17:38:25 366930730.0 Depart St Marys River 7.3 \n", "2017-12-31 23:58:46 366971340.0 Depart St Marys River 0.1 \n", "2017-12-31 23:58:52 316023339.0 Depart St Marys River 6.7 \n", "\n", " Status VesselName from_LAT \\\n", "2015-03-26 18:36:48 under way using engine EDWIN H GOTT 46.76789 \n", "2015-03-26 18:46:36 under way using engine ROGER BLOUGH 46.76527 \n", "2015-03-28 19:27:17 under way using engine JOHN G MUNSON 46.10983 \n", "2015-03-31 14:15:16 under way using engine PHILIP R CLARKE 46.76751 \n", "2015-04-02 14:56:03 under way using engine STEWART J CORT 46.76687 \n", "... ... ... ... \n", "2017-12-31 08:35:46 under way using engine JOHN G MUNSON 46.75920 \n", "2017-12-31 15:15:50 under way using engine CSL NIAGARA 46.11064 \n", "2017-12-31 17:38:25 under way using engine AMERICAN SPIRIT 46.11168 \n", "2017-12-31 23:58:46 at anchor CASON J CALLAWAY 46.46355 \n", "2017-12-31 23:58:52 under way using engine THUNDER BAY 46.56533 \n", "\n", " from_LON From \n", "2015-03-26 18:36:48 -84.89990 Arrive St Marys River \n", "2015-03-26 18:46:36 -84.89710 Arrive St Marys River \n", "2015-03-28 19:27:17 -84.01380 Arrive St Marys River \n", "2015-03-31 14:15:16 -84.89928 Arrive St Marys River \n", "2015-04-02 14:56:03 -84.89865 Arrive St Marys River \n", "... ... ... \n", "2017-12-31 08:35:46 -84.85346 Arrive St Marys River \n", "2017-12-31 15:15:50 -84.01456 Arrive St Marys River \n", "2017-12-31 17:38:25 -84.01447 Arrive St Marys River \n", "2017-12-31 23:58:46 -84.57252 Arrive St Marys River \n", "2017-12-31 23:58:52 -84.67849 Arrive St Marys River \n", "\n", "[4604 rows x 13 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We had some problems with the St Marys river Collection because it allowed min and max times to take place\n", "#anywhere along the channel. We needed to place strict boundaries at the entry and exit to reduce noise.\n", "\n", "df=Trips.loc[(Trips.Position=='Depart St Marys River')&((Trips.LON<-84.57)|(Trips.LAT<46.12))&\n", " ((Trips.from_LON<-84.57)|(Trips.from_LAT<46.12))]\n", "print(len(df))\n", "Trips.drop(Trips[Trips.Position=='Depart St Marys River'].index, inplace = True)\n", "Trips=Trips.append(df)\n", "Trips.loc[Trips.Position=='Depart St Marys River']" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "736687\n", "AMERICAN CENTURY complete.\n", "AMERICAN INTEGRITY complete.\n", "AMERICAN SPIRIT complete.\n", "BUFFALO complete.\n", "BURNS HARBOR complete.\n", "CASON J CALLAWAY complete.\n", "CSL ASSINIBOINE complete.\n", "CSL LAURENTIEN complete.\n", "CSL NIAGARA complete.\n", "EDGAR B SPEER complete.\n", "EDWIN H GOTT complete.\n", "HERBERT C JACKSON complete.\n", "HON JAMES L OBERSTAR complete.\n", "JAMES R BARKER complete.\n", "JOHN G MUNSON complete.\n", "JOSEPH L BLOCK complete.\n", "JOYCE L VANENKEVORT complete.\n", "KAYE E BARKER complete.\n", "LEE A TREGURTHA complete.\n", "MESABI MINER complete.\n", "PHILIP R CLARKE complete.\n", "PRESQUE ISLE complete.\n", "ROGER BLOUGH complete.\n", "RT HON PAUL J MARTIN complete.\n", "SAM LAUD complete.\n", "STEWART J CORT complete.\n", "THUNDER BAY complete.\n", "TUG CLYDE S VANENKEVORT complete.\n", "VICTORY complete.\n", "WALTER J MCCARTHY JR complete.\n", "10073\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CargoDraftDurationLATLONMMSIPositionSOGStatusVesselNamefrom_LATfrom_LONFromOriginDestinationTons
2015-03-25 12:53:46Empty Barges9.77NaT46.48675-84.30111366971370.0Arrive Soo Locks5.8under way using engineEDWIN H GOTT46.48497-84.29975NaNMILWAUKEE, WITWO HARBORS, MN0
2015-03-25 13:25:30Empty Barges8.51NaT46.48563-84.30025366972030.0Arrive Soo Locks4.0under way using engineROGER BLOUGH46.48460-84.29943NaNERIE, PATWO HARBORS, MN0
2015-03-26 01:40:38Empty Barges9.7712:46:5246.49918-84.39629366971370.0Depart Soo Locks9.6under way using engineEDWIN H GOTT46.49979-84.39251Arrive Soo LocksMILWAUKEE, WITWO HARBORS, MN0
2015-03-26 06:30:06Empty Barges8.5117:04:3646.49870-84.39973366972030.0Depart Soo Locks9.5under way using engineROGER BLOUGH46.49947-84.39552Arrive Soo LocksERIE, PATWO HARBORS, MN0
2015-03-27 22:10:47Iron Ore8.15NaT46.50180-84.37771366971360.0Arrive Soo Locks2.9under way using engineJOHN G MUNSON46.49484-84.41891NaNDULUTH, MNGARY, IN26837
\n", "
" ], "text/plain": [ " Cargo Draft Duration LAT LON \\\n", "2015-03-25 12:53:46 Empty Barges 9.77 NaT 46.48675 -84.30111 \n", "2015-03-25 13:25:30 Empty Barges 8.51 NaT 46.48563 -84.30025 \n", "2015-03-26 01:40:38 Empty Barges 9.77 12:46:52 46.49918 -84.39629 \n", "2015-03-26 06:30:06 Empty Barges 8.51 17:04:36 46.49870 -84.39973 \n", "2015-03-27 22:10:47 Iron Ore 8.15 NaT 46.50180 -84.37771 \n", "\n", " MMSI Position SOG \\\n", "2015-03-25 12:53:46 366971370.0 Arrive Soo Locks 5.8 \n", "2015-03-25 13:25:30 366972030.0 Arrive Soo Locks 4.0 \n", "2015-03-26 01:40:38 366971370.0 Depart Soo Locks 9.6 \n", "2015-03-26 06:30:06 366972030.0 Depart Soo Locks 9.5 \n", "2015-03-27 22:10:47 366971360.0 Arrive Soo Locks 2.9 \n", "\n", " Status VesselName from_LAT \\\n", "2015-03-25 12:53:46 under way using engine EDWIN H GOTT 46.48497 \n", "2015-03-25 13:25:30 under way using engine ROGER BLOUGH 46.48460 \n", "2015-03-26 01:40:38 under way using engine EDWIN H GOTT 46.49979 \n", "2015-03-26 06:30:06 under way using engine ROGER BLOUGH 46.49947 \n", "2015-03-27 22:10:47 under way using engine JOHN G MUNSON 46.49484 \n", "\n", " from_LON From Origin \\\n", "2015-03-25 12:53:46 -84.29975 NaN MILWAUKEE, WI \n", "2015-03-25 13:25:30 -84.29943 NaN ERIE, PA \n", "2015-03-26 01:40:38 -84.39251 Arrive Soo Locks MILWAUKEE, WI \n", "2015-03-26 06:30:06 -84.39552 Arrive Soo Locks ERIE, PA \n", "2015-03-27 22:10:47 -84.41891 NaN DULUTH, MN \n", "\n", " Destination Tons \n", "2015-03-25 12:53:46 TWO HARBORS, MN 0 \n", "2015-03-25 13:25:30 TWO HARBORS, MN 0 \n", "2015-03-26 01:40:38 TWO HARBORS, MN 0 \n", "2015-03-26 06:30:06 TWO HARBORS, MN 0 \n", "2015-03-27 22:10:47 GARY, IN 26837 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This algorithm collects start and complete positions for each ship in the Soo Locks \n", "#3-4) Arrival and departure from the Soo Locks in Sault Ste Marie\n", "\n", "df=Iron\n", "W,E,N,S=features.loc['St Marys River']\n", "W,E=-84.4,-84.3 #placing stricter boundaries around the Soo Locks\n", "df1=df.loc[(df.LAT<=N)&(df.LAT>=S)&(df.LON<=E)&(df.LON>=W)] #subset of data for single geographic feature\n", "\n", "print(len(df1))\n", "\n", "Locks=pd.DataFrame() #empty data frame to collect data points\n", "for vessel in vessels:\n", " df2 = df1.loc[(df1.VesselName==vessel)]#&(df1.SOG<0.2)]\n", " \n", " Lock=pd.DataFrame() #empty data frame to collect data points\n", "\n", " datelist=np.unique(df2.index.date)\n", " dates=datelist[(datelist-np.roll(datelist,1))!=pd.Timedelta(days=1)]\n", "\n", " for date in dates:\n", " df3=df2.loc[df2.index.date==date]\n", " add=df3.loc[min(df3.index)]\n", " add['Position']='Arrive Soo Locks'\n", " Lock=Lock.append(add)\n", "\n", " dates=datelist[(datelist-np.roll(datelist,-1))!=pd.Timedelta(days=-1)]\n", " for date in dates:\n", " df3=df2.loc[df2.index.date==date]\n", " add=df3.loc[max(df3.index)]\n", " add['Position']='Depart Soo Locks'\n", " Lock=Lock.append(add)\n", "\n", "\n", " Lock= Lock.sort_index()\n", " Lock['Duration']=Lock.index.to_series().diff()\n", " Lock['From']=Lock.Position.shift()\n", " lpms= LPMS.loc[(LPMS.VesselName==vessel)]\n", " dates=np.unique(lpms.index.date) \n", " for date in dates:\n", " df4=Lock.loc[(Lock.index.date>=(date-dt.timedelta(days=1)))&(Lock.index.date<=(date+dt.timedelta(days=1)))]\n", " df5=lpms.loc[lpms.index.date==date].reset_index()\n", " df4['Origin']=df5.loc[0,'Origin']\n", " df4['Destination']=df5.loc[0,'Destination']\n", " df4['Cargo']=df5.loc[0,'Cargo']\n", " df4['Tons']=df5.loc[0,'Tons']\n", " Locks=Locks.append(df4).sort_index()\n", " print(f'{vessel} complete.')\n", "\n", "Locks = Locks.sort_index()\n", "print(len(Locks))\n", "Locks.head()\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "42021\n", "42021\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
CargoDraftDurationLATLONMMSIPositionSOGStatusVesselNamefrom_LATfrom_LONFromOriginDestinationTons
2015-03-01 03:14:00NaN8.030.041.69872-83.45046366971350.0Depart Toledo0.1under way using enginePHILIP R CLARKENaNNaNArrive ToledoNaNNaNNaN
2015-03-01 03:14:00NaN8.03NaN41.69872-83.45046366971350.0Arrive Toledo0.1under way using enginePHILIP R CLARKENaNNaNNaNNaNNaNNaN
2015-03-02 16:50:01NaN9.01NaN42.88318-79.24848316001635.0Arrive Welland Canal0.0under way sailingRT HON PAUL J MARTINNaNNaNNaNNaNNaNNaN
2015-03-02 19:26:23NaN9.01156.042.88314-79.24848316001635.0Depart Welland Canal0.0under way sailingRT HON PAUL J MARTIN42.88314-79.24848Arrive Welland CanalNaNNaNNaN
2015-03-03 11:28:41NaN8.033374.041.69873-83.45055366971350.0Arrive Toledo0.1under way using enginePHILIP R CLARKE41.69872-83.45046Depart ToledoNaNNaNNaN
\n", "
" ], "text/plain": [ " Cargo Draft Duration LAT LON MMSI \\\n", "2015-03-01 03:14:00 NaN 8.03 0.0 41.69872 -83.45046 366971350.0 \n", "2015-03-01 03:14:00 NaN 8.03 NaN 41.69872 -83.45046 366971350.0 \n", "2015-03-02 16:50:01 NaN 9.01 NaN 42.88318 -79.24848 316001635.0 \n", "2015-03-02 19:26:23 NaN 9.01 156.0 42.88314 -79.24848 316001635.0 \n", "2015-03-03 11:28:41 NaN 8.03 3374.0 41.69873 -83.45055 366971350.0 \n", "\n", " Position SOG Status \\\n", "2015-03-01 03:14:00 Depart Toledo 0.1 under way using engine \n", "2015-03-01 03:14:00 Arrive Toledo 0.1 under way using engine \n", "2015-03-02 16:50:01 Arrive Welland Canal 0.0 under way sailing \n", "2015-03-02 19:26:23 Depart Welland Canal 0.0 under way sailing \n", "2015-03-03 11:28:41 Arrive Toledo 0.1 under way using engine \n", "\n", " VesselName from_LAT from_LON \\\n", "2015-03-01 03:14:00 PHILIP R CLARKE NaN NaN \n", "2015-03-01 03:14:00 PHILIP R CLARKE NaN NaN \n", "2015-03-02 16:50:01 RT HON PAUL J MARTIN NaN NaN \n", "2015-03-02 19:26:23 RT HON PAUL J MARTIN 42.88314 -79.24848 \n", "2015-03-03 11:28:41 PHILIP R CLARKE 41.69872 -83.45046 \n", "\n", " From Origin Destination Tons \n", "2015-03-01 03:14:00 Arrive Toledo NaN NaN NaN \n", "2015-03-01 03:14:00 NaN NaN NaN NaN \n", "2015-03-02 16:50:01 NaN NaN NaN NaN \n", "2015-03-02 19:26:23 Arrive Welland Canal NaN NaN NaN \n", "2015-03-03 11:28:41 Depart Toledo NaN NaN NaN " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Trips.Cargo=np.nan\n", "Combo=Locks.append(Trips).sort_index()\n", "print(len(Combo))\n", "Filled=pd.DataFrame()\n", "for vessel in vessels:\n", " df=Combo.loc[Combo.VesselName==vessel]\n", " dates=np.unique(df.index.date)\n", " date=min(dates)\n", " #df=df.ffill(limit=3).bfill(limit=3)\n", " #df=df.ffill(limit=2).bfill()\n", " Filled=Filled.append(df).sort_index()\n", "\n", "print(len(Filled))\n", "Filled.Duration=Filled.Duration.astype('timedelta64[m]')\n", "Filled.to_csv('Merged_Data_new.csv')\n", "Filled.head()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }