Desenvolupament i posada a punt d’un
servidor per a visualitzar dades AIS
Treball Final de Grau
Facultat de Nàutica de Barcelona
Universitat Politècnica de Catalunya
Treball realitzat per:
Oscar Fuentes Colmenero
Dirigit per:
Anna Mujal Colilles
Jordi Fonollosa Magrinya
Grau en Enginyeria en Sistemes i Tecnologia Naval
Barcelona, 1 de Juliol del 2021
Departaments de Ciència i Enginyeria Nàutiques i d’Enginyeria de
Sistemas, Automàtica i Informàtica Industrial
2
Resum
Amb el gran augment de les dades informàtiques que es generen en l’actualitat sorgeix el terme Big Data. Les eines convencionals utilitzades fins al moment no son capaces de suportar els grans volums de dades, per tant, tenim de recórrer a les noves tecnologies del moment.
Aquest treball consisteix en el desenvolupament d’un servidor web que, a partir de tota la informació emmagatzemada a través de l’estació VHF situada al terrat de la Facultat de Nàutica de Barcelona, permet representar gràficament en un mapa totes els vaixells i les seves característiques essencials en un rang mig de 30 milles nàutiques.
Per a la implementació del servidor, s’han utilitzat múltiples tecnologies i llenguatges de programació de codi obert (Python, Flask, etc...) que ens han permès desenvolupar un sistema integral d’emmagatzematge, gestió i representació de dades. El mateix servidor web ofereix a l’usuari la possibilitat de seleccionar les variables i intervals temporals d’interès mitjançant la implementació d’elements de filtrat i classificació de la informació. Un cop establertes les variables, el sistema mostra en pantalla un mapa del Port de Barcelona amb les dades seleccionades i al fer clic en cada un dels icones s’activa un pop-up on ens indica informació essencial del vaixell (imatge, Shipname, MMSI, Grup i velocitat).
Les principals aplicacions d’aquesta eina es troben en l’àrea de la seguretat. Els vaixells han d’estar millor observats i has de ser capaços de reaccionar més ràpidament en cas d’emergència.
Aquest servidor web és accessible navegant a la IP http://10.5.148.21/ a través de la VPN de UPClink.
4
Abstract
In the recent years, increasing computer data has given rise to the big data term. Conventional tools used so far are not able to support large volumes of data, so you have to resort to new technologies of the moment.
This paper focuses on the development of a web server that, from all the information stored through the VHF station located on the roof of the Facultat de Nàutica de Barceona, allows to graphically represent on a map all the ships and their essential features in an average range of 30 nautical miles.
For the implementation of the server, multiple technologies and Open Source programming languages (Python, Flask, etc) have been used to develop a comprehensive system of data storage, management and representation. The web server itself offers the user the possibility to select the variables and time intervals of interest by implementing elements for filtering and classifying information. Once the variables have been set, the system displays a map of the Port de Barcelona with the selected data and clicking on each of the icons activates a pop-up indicating essential information about the ship (image, Shipname, MMSI , Group and speed).
The main applications of this tool are in the area of security. Boats need to be better observed and they need to be able to react more quickly in an emergency.
6
Taula de continguts
RESUM ...2 ABSTRACT ... 4 TAULA DE CONTINGUTS ... 6 LLISTAT DE FIGURES ... 8 LLISTAT DE CODIS ... 10 LLISTAT DE TAULES ... 11 CAPÍTOL 1. INTRODUCCIÓ ... 13 1.1. CONTEXT I MOTIVACIÓ ... 13 1.2. OBJECTIUS ... 141.3. ESTRUCTURA DEL DOCUMENT ... 14
CAPÍTOL 2. MARC TEÒRIC ... 16
2.1. BIG DATA ... 16 2.1.1. INTRODUCCIÓ ... 16 2.1.2. LES 5V’S DEL BIG DATA ... 17 2.1.3. FONTS DE DADES ... 18 2.1.4. PROPÒSITS I CASOS D’ÚS ... 18 2.1.5. MINERIA DE DADES ... 20 2.2. INFRAESTRUCTURA ... 23 2.2.1. AISDATA ... 23
2.2.2. NASSYNOLOGY (LINUX) ... 30
2.2.3. PYTHON ... 31 2.2.4. FLASK ... 33 2.2.5. FRONTEND ... 34 CAPÍTOL 3. IMPLEMENTACIÓ ... 35 3.1. INTRODUCCIÓ ... 35 3.2. ENTORN D’IMPLEMENTACIÓ ... 36
3.3. INTRODUCCIÓ DE LES DADES AIS ... 37
7
3.5. REPRESENTACIÓ GRÀFICA DE LES DADES ... 46
CAPÍTOL 4. RESULTATS ... 55
CAPÍTOL 5. CONCLUSIONS I FUTURES LÍNIES DE TREBALL ... 59
5.1. CONCLUSIONS ... 59
5.2. FUTURES LÍNIES DE TREBALL ... 60
REFERÈNCIES ... 61
ANNEX A1. DESENVOLUPAMENT DEL SOFTWARE PER A LA DESCODIFICACIÓ I FILTRAT DE DADES AIS ...65
A1.1. ARXIU DE CODI “ANAAIS_OSCAR.PY”... 65
A1.2. ARXIU DE CODI “MODMEU.PY” ... 69
A1.3. ARXIU DE CODI “FILTER_DYANMIC.PY” ... 75
A1.4. ARXIU DE CODI “PYAISM.PY” ... 79
ANNEX A2. DESENVOLUPAMENT DEL SOFTWARE PER A LA VISUALITZACIÓ DE DADES AIS .... 97
A2.1. ARXIU DE CODI “APP.PY” ... 97
A2.2. ARXIU DE CODI “FLASKAPP.CONF” ... 104
8
Llistat de Figures
Figura 1. Les 5V's del Big Data – Font
(https://mta.la-mejor-opcion.com/blog/nuestro-blog-1/post/las-cinco-caracteristicas-mas-importantes-de-big-data-en-los-negocios-12) ... 17
Figura 2. Procés de generació del model de mineria de dades - Font (ceupe.com) ... 21
Figura 3. Gestió de franges horàries de missatges AIS – Font(https://digitalyacht.es/claseb-sotdma/) ... 24
Figura 4. Popularitat dels llenguatges de programació – Font (http://cdn.statcdn.com/) ... 31
Figura 5. Esquema general del sistema Big Data - Font (i2ds.org) ... 36
Figura 6. Inici sessió WinSCP – Font pròpia ... 38
Figura 7. Funció Crontab – Font pròpia ... 40
Figura 8. Carpeta "in_ana" – Font pròpia ... 40
Figura 9. Dades AIS - Font pròpia ... 41
Figura 10. Llista de descodificació - Font pròpia ... 42
Figura 11. Execució del descodificador - Font pròpia ... 42
Figura 12. Resum descodificació - Font pròpia ... 42
Figura 13. Resultat descodificació ... 43
Figura 14. Missatges Codi 5 - Font pròpia ... 43
Figura 15. Missatges Codi 18 - Font pròpia ... 43
Figura 16. Missatges Codi 24A - Font pròpia ... 44
Figura 17. Missatges Codi 24B - Font pròpia ... 44
Figura 18. Missatges Codi 123 - Font pròpia ... 45
Figura 19. Exemple conjunt de dades AIS filtrat en format CSV - Font pròpia ... 45
Figura 20. Estructura de les dades a representar - Font pròpia ... 49
Figura 21. Representació gràfica inicial – Font pròpia ... 50
Figura 22. representació gràfica amb llegenda - Font pròpia ... 51
9
Figura 24. Pàgina web final amb selector de vaixells - Font pròpia ... 52
Figura 25. Pàgina web final amb selector de dates - Font pròpia ... 52
Figura 26. Arxiu de configuració Apache2 – Font pròpia ... 53
Figura 27. Arxiu de configuració WSGI – Font pròpia ... 54
Figura 28. Resultat servidor web – Font pròpia ... 55
Figura 29. Exemple 1 servidor web - Font pròpia ... 56
Figura 30. Exemple 2 servidor web – Font pròpia ... 57
10
Llistat de Codis
Codi 1. Connexió SSH ... 36
Codi 2. Versió Python 3 ... 36
Codi 3. Instal·lació Python 3.6 ... 36
Codi 4. Instal·lació Pip ... 37
Codi 5. Instal·lació Flask ... 37
Codi 6. Instal·lació llibreries ... 37
Codi 7. Instal·lació Rsync ... 38
Codi 8. Funció Rsync ... 38
Codi 9. Clau d'autorització SSH ... 39
Codi 10. Clau d'autorització servidor NAS ... 39
Codi 11. Arxiu Crontab ... 40
Codi 12. Funció Crontab ... 40
Codi 13. Llista de descodificació ... 41
Codi 14. Arxiu de descodificació ... 41
Codi 15. Estructura directori Flask ... 46
Codi 16. Exemple codi GeoJSON ... 47
Codi 17. Importar fitxer de dades filtrades CSV ... 48
Codi 18. Importar fitxer de dades missatge codi 5... 48
Codi 19. Assignar codi de colors ... 48
Codi 20. Codi per a generar mapa base ... 49
Codi 21. Vector buit ... 49
Codi 22. Bucle "for" ... 50
Codi 23. Instal·lació Apache2 ... 53
11
Llistat de Taules
Taula 1 Freqüència d’emissió AIS basada en la condició dinàmica - Font (ITU)... 25 Taula 2 Descripció dels missatges AIS – Font
(https://www.navcen.uscg.gov/?pageName=AISMessages) ... 26 Taula 3 Missatges 1, 2, 3: Informes de posició - Font (ITU) ... 27 Taula 4. Missatge 5: Dades estàtiques del vaixell i relacionades amb el trajecte - Font (ITU) ... 30
13
Capítol 1. Introducció
1.1. Context i motivació
Com a conseqüència de l'avanç de les tecnologies d'informació sorgeixen noves necessitats que les eines tradicionals són incapaços de suplir [1]. Això es deu a l'augment del volum de dades que fa del processat una etapa costosa a l'hora de buscar respostes.
Per aquesta raó, les organitzacions s'han hagut d'enfrontar a nous reptes per a l'obtenció de coneixement o informació que no pot aconseguir-se a priori a partir del gran conjunt de dades generades en l'actualitat. L'ús de les noves tecnologies els ajuda a fer una anàlisi, descobrir i poder entendre més enllà del que les eines convencionals els ofereix sobre les seves dades, i així augmentar la seva competència.
Aquest projecte, s'emmarca en el sector naval i s'utilitzen dades generades pel Sistema d'Identificació Automàtica, "AIS". L'objectiu fonamental de sistema AIS és permetre als vaixells comunicar la seva posició i altres informacions rellevants perquè altres vaixells o estacions puguin conèixer-la i evitar col·lisions. Es busca el processat d'aquestes dades amb tecnologies que els suportin, és a dir, tecnologies Big Data per extreure informació sobre les rutes més freqüents. Aquesta informació ajudaria a entendre el trànsit generat i a la presa de decisions estratègiques en el sector.
Per a l'obtenció de resultats, un usuari ha de ser capaç d'interactuar amb el sistema Big Data. En primer lloc, un cop extrets les dades de la font d'origen, han de ser carregats en el sistema per ser tractats posteriorment. El processament té com a finalitat tant la recollida de dades vàlides, així com el reformateig de les mateixes si fos necessari. Per tant, es realitza un procés de neteja on s'eliminen aquells registres considerats erronis, es mantenen els camps que van a ser utilitzats i es transformen en el cas que el sistema destí ho requereixi. Finalment, es realitza la visualització dels resultats, que en el cas d'aquest projecte seran rutes de bucs sobre un mapa.
14
1.2. Objectius
En el present projecte s’ha proposat el disseny de l’arquitectura software necessària per al desenvolupament de una plataforma web de representació de dades AIS, registrades gràcies a l’estació VHF situada al terrat de la Facultat de Nàutica de Barcelona, en forma de mapa actualitzat automàticament.
A partir del que s'ha esmentat anteriorment, els objectius principals d’aquest TFG son els següents:
• Estudi del context i la motivació que porten a la realització del projecte.
• Estudi de les tecnologies que seran utilitzades en el desenvolupament de sistema. • Disseny d'un sistema Big Data que s'adapti a les necessitats del projecte.
• Implementació del sistema basant-se el disseny del mateix. • Visualització dels resultats del processament de les dades. • Plantejament de línies futures oferint continuïtat al projecte.
1.3. Estructura del document
Per poder facilitar la lectura de la memòria, a continuació es detalla la seva estructura:
• Capítol 1: Introducció i objectius.
En aquest primer capítol s’exposen les motivacions del projecte i s’estableixen els objectius del mateix reconeixent la idea general del treball que es va a realitzar. També s’enuncia l’estructura de la memòria.
• Capítol 2: Marc teòric.
En el capítol 2, es detallen les tecnologies utilitzades en el desenvolupament del projecte, les quals han de ser conegudes pel lector prèviament a l’exposició de la solució tècnica. Aquest capítol descriu el disseny del sistema Big Data, així com els components que formen i la interacció entre ells.
• Capítol 3: Implementació.
El capítol 3 recull la descripció dels passos que ha seguit en el desenvolupament de la implementació del sistema dissenyat, des de la càrrega inicial de dades fins a la visualització dels resultats obtinguts en el procés.
15 • Capítol 4: Resultats.
En aquest capítol s’expliquen les proves que han realitzat per conèixer els límits de l’entorn i els temps d’execució assolits.
• Capítol 5: Conclusions i futures línies de treball.
En el capítol 5, es mostra l’anàlisi de la consecució dels objectius i les possibles línies futures de treball a realitzar.
16
Capítol 2. Marc teòric
2.1. Big data
2.1.1. Introducció
És un fet que en l'actualitat la generació de grans quantitats d'informació digital augmenta de manera vertiginosa. L'empresa IBM [2], una de les empreses amb gran força en el sector de les telecomunicacions i en consultoria afirma que la quantitat de dades generades al dia són 2,5 trilions de bytes, el que es tradueix en el fet que el 90% de les dades existents en el món avui en dia s'han creats durant els dos últims anys [3].
L'emmagatzematge de dades no és una pràctica nova, ni molt menys de l'actualitat. L'ésser humà porta fent-ho des temps immemorials. Ja esculpien els nostres avantpassats en les pedres i pintaven a les parets per portar un recompte dels subministraments que els quedaven per sobreviure. Per exemple, l'àbac va ser una eina d'anàlisi i que s'utilitzava en el càlcul quan la ment humana precisava d'ajuda per a això. Un altre paradigma, van ser les biblioteques, que són un clar exemple d'emmagatzematge d'informació [4].
De tot això, sorgeix el terme Big Data (o macrodades) com a conjunt d'eines capaces de processar i analitzar els grans volums de dades emmagatzemades tant estructurats com no estructurats o semiestructurats que no poden ser tractats de manera convencional amb les eines de programari tradicionals [5]. A més, es classifica com la tendència o moda en l'avanç de la tecnologia que implica un enfocament nou en la presa de decisions.
17
Figura 1. Les 5V's del Big Data – Font (https://mta.la-mejor- opcion.com/blog/nuestro-blog-1/post/las-cinco-caracteristicas-mas-importantes-de-big-data-en-los-negocios-12)
2.1.2. Les 5V’s del Big Data
El Big Data es defineix amb les 5V's (Figura 1). Encara que inicialment van ser 3, les 5V's de l'actualitat són les següents [6]:
• Volum: És la característica més evident pel que el propi nom Big Data indica. Aquest concepte no pot ser establert en quantitats fixes de bytes tals que romanguin invariant en el temps, ja que l'avanç tecnològic cada vegada permet el processament d'una quantitat de dades cada vegada més gran. Tot i així, avui dia aquest límit es determinat per la capacitat de les eines informàtiques i es parla de Pentabytes (1015) [7].
• Velocitat: És un repte que les dades siguin tractades en el menor temps possible. Las tecnologies tradicionals no poden fer-ho de forma immediata, per tant el Big Data és clau per a la presa de decisions, ja que permet donar resposta de forma ràpida. Fins i tot l'anàlisi de les dades es realitza en temps real, quan les necessitats ho requereixin.
• Varietat: Les dades poden provenir de diferents fonts d'origen. De tal manera que no hi ha homogeneïtat dins del conjunt d'aquests amb l'existència de dades estructurades la procedència són les bases de dades relacionals, dades semiestructurats com són els documents XML o les dades emmagatzemades en bases de dades SQL i no estructurats com ara les dades de les xarxes socials, correu electrònic o imatges per exemple [8]. Per aquesta raó, un dels primers passos en el seu tractat és donar uniformitat a tota la informació [9].
18
• Veracitat: Un altre factor important és garantir la qualitat de la dada, perquè determinats tipus poden ser intrínsecament incerts. Hi ha vegades que ni la neteja de les dades pot detectar la inexactitud pel que és fonamental ser previsor i fer un pla d'acció anticipat [10].
2.1.3. Fonts de dades
Ja s'ha esmentat anteriorment que les fonts d'origen de les dades poden ser molt variades, el que provoca la no homogeneïtat i caracteritza el Big Data. És difícil ser conscient de la quantitat d'informació digital que generem en la nostra vida quotidiana ja que vivim en un món en què la tecnologia avança a un ritme desenfrenat. Les oportunitats, beneficis i avantatges que ens proporciona l'ús d'aquestes tecnologies fan que no reparem en l'empremta digital que deixem en el dia a dia amb l'ús d'elles. [11]
La quantitat de dades generada tendeix a associar-se des del desconeixement a tot moviment relacionat amb els nostres smartphones o ordinadors. Però aquestes dades van més enllà dels dispositius mòbils i de l'ús d'Internet. Per exemple, quan fem servir la targeta bancària per pagar en centres comercials. També quan fem ús de del transport com agafar un vol, pagaments en peatges o fins i tot quan enviem un paquet per missatgeria. Quan truquem per telèfon a una empresa i diuen que la nostra conversa va ser gravada per seguretat. I per descomptat, totes les dades de les xarxes socials i compres online. Aquests són alguns dels exemples de generació de dades entre molts altres.
Com es pot veure, són activitats quotidianes i que cada vegada posem més en pràctica. A més, no només l'ésser humà genera dades, sinó també la comunicació M2M [12] (machine to machine o màquina a màquina). Els sensors són un exemple d'aquesta comunicació i contribueix a l'augment d'informació. Per exemple poden instal·lar-se a mitjans de transport per recollir la ruta seguida, o en carreteres per determinar el nombre de vehicles, poden mesurar precipitacions o consum elèctric entre d'altres, i són utilitzats per les companyies de tal manera que puguin explotar-se i obtenir informació extra a partir d'ells.
2.1.4. Propòsits i casos d’ús
Big Data, amb tot el comentat fins al moment apareix com un canvi disruptiu. Es pretén proporcionar una nova realitat dirigida a les organitzacions per donar un altre enfocament al mercat i generar així noves oportunitats en la seva capitalització [13].
L'objectiu més immediat és la recerca de coneixement a partir de les dades per ajudar a la presa correcta de decisions fins i tot en temps real, però també és una oportunitat de negoci. L'ús del Big Data a les empreses cada vegada abunda més, ja que a causa de la seva utilització es té una major percepció de les necessitats dels clients i permet millorar les prestacions dels productes i serveis oferts. [14] Fins i tot, s'obtenen beneficis gràcies a que es pot discernir el sentiment intern de l'empresa podent actuar dins de l'organització.
19 Moltes de les botigues de roba utilitzen Big Data per obtenir informació de les consultes a les seves pàgines web sobre els productes i analitzen tendències en les xarxes socials per a poder optimitzar així l'estoc dels seus magatzems o fer campanyes dirigides de màrqueting. A més, s'estableixen preus dinàmics sense necessitat de fer un estudi exhaustiu dels competidors o de les accions dels clients, només amb ajuda de les noves eines més potents per a l'anàlisi de la informació [4].
El grup Inditex [15], és un exemple de distribuïdor de moda que es beneficia dels avantatges que els proporciona l'ús del Big Data. Té un Data Center i una sala d'operacions des d'on extreuen informació en temps real de les tendències. Això els permet fer col·leccions adaptades al consumidor i així dissenyar-ho i posar-ho a la seva disposició en un temps rècord [16].
En relació a les entitats financeres, es planteja un repte important i una gran oportunitat per poder acabar amb les falles de seguretat, els delictes financers i el frau [9]. A més, com en el cas de la indústria tèxtil, busquen conèixer les necessitats dels seus clients i adaptar els serveis per satisfer-les.
Un altre sector que es beneficia de les noves tecnologies és el de les telecomunicacions, amb ajuda dels dispositius mòbils i de les seves xarxes. Extreuen informació sobre l'experiència dels usuaris a través del tràfic de veu i dades. D'aquesta manera, poden oferir tarifes personalitzades i fer-se fort en el mercat.
Telefónica, en concret el departament de I + D de Barcelona, ha participat en un projecte per al desenvolupament d'un algoritme predictiu de delictes comesos en una zona. S'ha aconseguit predir en un 70% els crims produïts a la ciutat de Londres [17]. Per tant, les forces de seguretat també s'uneixen a l'ús del Big Data ja que poden utilitzar-ho per a la detecció de crims o fins i tot combatre amb la lluita contra el terrorisme [9].
Tampoc es queda enrere la sanitat, amb l'encreuament d'informació d'historials clínics, entorn o fins i tot el clima poden obtenir models predictius i millor en qualitat tant el servei en centres com la previsió i detecció de malalties. Un altre exemple, són les Smart Cities (o ciutats intel·ligents), que permet la millora en la gestió de recursos a la ciutat gràcies a la informació proporcionada pels sensors.
Aquests són alguns casos d'ús del Big Data entre centenars que aprofiten les capacitats que ofereix. L'ús de les noves tecnologies s'adapta a les necessitats individuals, només cal entendre el negoci i tenir clares les expectatives que es van a manejar.
20
2.1.5. Mineria de dades
El Data Mining (o mineria de dades) [18] és el procés pel qual mitjançant un conjunt de tècniques i tecnologies s'extreu informació addicional de grans conjunts de dades. D'aquesta manera es poden extreure patrons repetitius, tendències o regles que les tecnologies tradicionals no poden detectar [19].
La mineria de dades sorgeix per ajudar a explicar el comportament de les dades dins d'un context determinat i buscar informació oculta. Això es fa mitjançant l'ús de pràctiques estadístiques, algorismes de cerca i xarxes neuronals per a la recerca de correlacions entre les dades [20]. A continuació es van a comentar els escenaris d'aplicació de la mineria de dades i la seva metodologia.
Escenaris d’aplicació
Els patrons, tendències i regles es defineixen com un model de Data Mining i els escenaris on s'apliquen poden ser [21]:
• Predictius: Per predir esdeveniments.
- Basats en classificació: Separació d'individus o esdeveniments en grups relacionats per poder analitzar i predir afinitats de cada conjunt. Per exemple, si un client d'una asseguradora donarà un part o no en un període de temps d'acord amb la seva descripció (sexe, edat i / o domicili).
- Basats en regressions: Càlculs destinats a la predicció. Per exemple, temps d'inactivitat d'un servidor amb les dades que es tenen de la seva inactivitat en un temps passat.
• Descriptius: Per especificar característiques.
- Basats en agrupació: Classificació d'individus en base a les seves característiques. Per exemple, el tipus de dolència que pot tenir un pacient pels antecedents clínics comuns amb altres pacients.
- Basat en regles d'associació: Establir un vincle entre determinades dades o camps. Per exemple, conèixer que un client que compra un determinat producte a més comprarà un altre.
- Basat en seqüenciació: Intentar predir el valor d'una variable en funció del temps. Per exemple, l'estudi de la demanda energètica.
21
Figura 2. Procés de generació del model de mineria de dades - Font (ceupe.com)
Metodologia
La generació del model de mineria de dades és un procés cíclic (vegeu Figura 2) i comprèn des de la formulació de la pregunta sobre les dades per a la recerca de respostes fins a la implementació del model en un entorn de treball. Després de l'exploració de les dades pot resultar que es descobreixi que són ineficients i per tant no serveixen per a la creació del model o es pot continuar amb la generació de diversos models i descobrir així que no responen al problema plantejat pel que ha de tornar-se a definir el problema. També pot succeir que sorgeixin noves dades a incorporar en el model pel que pot haver-hi diverses iteracions fins a crear el model definitiu [19].
Les fases de desenvolupament per a la generació final del model de mineria de dades són les següents [19]:
1. Definir el problema: Consisteix en l'estudi de l'ús de les dades per donar resposta al problema que es planteja. Per a això s'ha d'analitzar els requisits empresarials i definir l'àmbit del problema, les mètriques d'avaluació del model i els objectius del projecte.
2. Preparar les dades: S'han d’entendre les dades i preparar-los per a l'exploració. Les dades pot provenir de diferents orígens per la qual cosa cal preparar-los per determinar amb quina informació ens quedarem i que registres han de ser descartats per a l'anàlisi.
22
3. Explorar les dades: Per estudiar les dades normalment es calculen màxims i mínims, mitjanes o desviacions i s'examina la distribució de les dades. Un cop explorats, es poden desestimar les dades per ser insuficients o defectuosos o es pot continuar amb la generació del model i descobrir així comportaments típics.
4. Generar models: En la creació del model s'ha de determinar quins camps de les dades són utilitzats en l'entrada, l'atribut a predir, i els paràmetres que defineixen l'algoritme utilitzat per al processament de les dades. El processament d'un algoritme és conegut com a entrenament, ja que s'apliquen càlculs matemàtics a les dades d'entrada de forma iterativa per a l'extracció de patrons. Aquests patrons depenen de les dades d'entrenament i de l'algoritme utilitzat.
5. Validar models: La validació del model consisteix a provar el seu correcte funcionament abans de posar-ho en producció i triar la configuració amb la que s'obtenen resultats que més s'ajusten a la definició del problema.
6. Implementar i actualitzar models: Consisteix a posar en producció el model triat per a crear prediccions i poder establir presa de decisions en funció dels resultats, es poden consultar els resultats i recuperar estadístiques. També poden actualitzar els models després d'una revisió o anàlisis i això suposa iniciar el procés de nou.
Després de la breu explicació de la mineria de dades és fàcil vincular-ho amb el Big Data, ja que ajuda a l'extracció de coneixement no immediat després de l'anàlisi de les dades amb tècniques matemàtiques [22].
23
2.2. Infraestructura
2.2.1. AIS Data
L’OMI defineix els sistemes d’identificació automàtica com “aquells sistemes dissenyats per ser capaços de proporcionar informació sobre el vaixell a altres vaixells i a les autoritats costaneres automàticament.” És un sistema de rastreig de terminals VHF basat en vaixells que emet i rep automàticament dades tècniques i de viatge sobre la propietat i tots els altres vaixells circumdants dins del rang de VHF [23].
La regulació 19 del capítol V de SOLAS - Requisits de transport de sistemes i equips de navegació a bord, estableix l’equip de navegació que s’ha de transportar a bord dels vaixells, segons el tipus de vaixell. El 2000, l’OMI va adoptar un nou requisit perquè tots els vaixells portessin sistemes d’identificació automàtics.
La regulació exigeix que s’instal·li AIS a tots els vaixells de 300 tones brutes o més que facin viatges internacionals, els vaixells de càrrega a partir de 500 tones que no facin viatges internacionals i tots els vaixells de passatgers independentment de la seva mida. El requisit es va fer efectiu per a tots els vaixells el 31 de desembre de 2004.
El reglament exigeix que l'AIS [23]:
• Proporcioni informació, inclosa la identitat, el tipo de vaixell, la posició, el rumb, la velocitat, el estat de navegació i altre informació relacionada amb la seguretat del vaixell, automàticament a les estacions costeres, altres vaixells i aeronaus.
• Rebi automàticament informació d’altres vaixells. • Monitoritzi y rastregi vaixells.
• Intercanviï dades amb instal·lacions de terra.
El sistema AIS funciona en dos canals VHF dedicats, els anomenats AIS Ch.1 - VHF Ch.87b o 161.975MHz - i AIS Ch.2 - VHF Ch.88b o 162.025MHz, on aquestes freqüències no estan disponibles, els transceptors poden per canviar a les freqüències assignades localment [30]. L'estàndard de rendiment de l'OMI requereix un mínim de 2000 franges horàries per minut. Els estàndards actuals de la UIT divideixen un minut en 2250 franges horàries de 26,67ms cadascuna i una velocitat de transmissió de 9,6 kbps, el que significa un total de 256 bits enviats per interval, suficient per cobrir un missatge de transmissió AIS dinàmic complet [30].
El mode de transmissió AIS es basa en l’esquema d’accés SOTDMA, abreviatura d’accés múltiple de divisió de temps autoorganitzat. Això permet que la xarxa treballi contínuament en un mode de sobrecàrrega entre un 400% i un 500% i, tot i així, proporcioni prop del 100% de missatges sense errors per a les estacions del rang de 8 milles nàutiques (= 14,8 km) a 10 milles nàutiques (= 18,5 km) [30] [31]. Cada transmissió AIS, tal com s’explica a la Figura 3, també inclou una reserva de franja horària per al següent missatge que s’emetrà. Si el sistema està sobrecarregat, un filtre d’abandonament només adquireix informació d’estacions més properes a la unitat receptora.
24
Figura 3. Gestió de franges horàries de missatges AIS – Font(https://digitalyacht.es/claseb-sotdma/)
Fins ara s’han desenvolupat dos sistemes AIS diferents, és a dir, AIS Classe A i AIS Classe B (62). La informació i les funcionalitats varien entre els dos protocols. Per exemple, els sistemes de classe B funcionen a taxes de recepció-transmissió reduïdes mitjançant franges horàries lliures quan estan disponibles. [30]
La informació encriptada dins dels missatges AIS de classe A es classifica en dades estàtiques, dinàmiques, relacionades amb el viatge i relacionades amb la seguretat [31].
Informació estàtica: • Nombre OMI
• Distintiu de trucada i nom • Eslora i mànega
• Tipus de vaixell
• Ubicació de l'antena de posició del vaixell (popa i a babord / estribord de la línia central). La informació dinàmica inclou principalment dades adquirides automàticament dels sensors. És possible que algunes d’aquestes dades no estiguin disponibles si els sensors no estan connectats a la unitat transceptora AIS o si no estan disponibles a bord.
• Posició de l'vaixell amb indicació de precisió i estat d'integritat. • Hora UTC (Temps Universal Coordinat)
• Rumb sobre el terra (COG - course over ground).
25 • Rumb (Heading)
• Estat de navegació (per exemple, a la deriva, ancorat, etc. - subministrat manualment). • Índex de gir (ROT)
La informació relacionada amb el viatge inclou dades que l'usuari ha d'introduir manualment i que estan relacionades amb el viatge específic que realitza el vaixell.
• Calat del vaixell
• Carregament perillós (tipus; segons requereixi l'autoritat competent). • Destinació i hora d'arribada (a discreció del capità).
• Optatiu - Pla de ruta (punts del itinerari; dada no subministrat en el missatge bàsic) Les dades AIS de classe A s’emeten en diferents intervals de temps, segons el tipus d’informació, l’estat del vaixell i la seva velocitat [30]. En termes generals, la informació estàtica i relacionada amb el viatge s’emet cada 6 minuts o quan els paràmetres han canviat i els missatges relacionats amb la seguretat s’emeten a petició. Per a la informació dinàmica s’apliquen diferents temps d’emissió en funció d’una sèrie de condicions tal com s’indica a la Taula 1.
Condició dinàmica del vaixell Interval d'informació
Ancorat i amb SOG menor de 3 nusos 3 minuts
Ancorat i amb SOG major de 3 nusos 10 segons
SOG 0 – 14 nusos sense canvis de COG 10 segons
SOG 0 – 14 nusos amb canvis de COG 3.3 segons
SOG 14 – 23 nusos sense canvis de COG 6 segons
SOG 14 – 23 nusos amb canvis de COG 2 segons
SOG major de 23 nusos sense canvis de COG 3 segons
SOG major de 23 nusos amb canvis de COG 2 segons
Taula 1 Freqüència d’emissió AIS basada en la condició dinàmica - Font (ITU)
Els tipus de missatges AIS es classifiquen en 28 identificadors de missatges diferents [30] en funció de les dades transmeses, la prioritat, l’esquema d’accés i si es transmeten mitjançant una estació mòbil (vaixell) o una estació estàtica (terra).
Per al projecte, utilitzarem missatges AIS classificats amb els identificadors 1, 2, 3 (informes de posicions) i 5 (dades estàtiques i de viatge). A la Taula 2 es detallen les seves dades.
26
Identificador de missatge
Nom Descripció Prioritat
1 Informe de posició Informe programat de classe A. 1
2 Informe de posició Informe programat assignat de classe A 1
3 Informe de posició Informe de posició especial 1
5 Informació estàtica i relacionada amb el viatge
Informe programat de classe A. 4
Taula 2 Descripció dels missatges AIS – Font (https://www.navcen.uscg.gov/?pageName=AISMessages)
Els missatges 1, 2 i 3 són informes de posició que contenen essencialment la mateixa informació. Només difereixen pel motiu pel qual s’ha enviat el missatge [30]. Aquests missatges només s’emeten periòdicament per estacions mòbils equipades amb transceptors AIS de classe A i inclouen la informació que es proporciona a la Taula 3. Com s’ha comentat anteriorment a la Taula 1, aquests missatges s’emeten cada 2 segons a 3 minuts, en funció de la condició dinàmica del vaixell.
Paràmetres Bits Descripció
ID de missatge 6 Identificador de missatge, 1, 2 o 3
Equip terminal de dades (DTE) 1 Terminal de dades operatiu (0 = disponible, 1 = no disponible)
Indicador de dades 1 Indica les dades disponibles per a transmetre (0 = no disponible, 1 = disponible)
ID d'usuari 30 Número de MMSI
Situació de navegació 2
0 = en ruta 1 = ancorat 2 = a la deriva
3 = capacitat de maniobra limitada
Índex de gir 8
Pot prendre qualsevol valor des de -128 fins a +126, on: De 0 a +126 = girant a la dreta fins a 708º/ min;
0 a -126 = girant a l'esquerra fins a 708 º/ min; +127 = girant a la dreta a més de 5º per 30 s; -127 = girant a l'esquerra a més de 5º per 30 s; -128 = Informació ROT no disponible (per defecte)
27
SOG 10
Pot prendre qualsevol valor de 0 a 1023, on: 1022 = 102,4 nusos o més;
1023 = velocitat no disponible.
Precisió de la posició 1
Pot prendre qualsevol valor de 0 a 1, on: 0 = poca precisió (> 10 m);
1 = alta precisió (<10 m).
Longitud 28
Pot prendre qualsevol valor des de -180º fins a + 180º, on: 0 a +180 = longituds de Setmana Santa;
0 a -180 = longituds de l'oest;
181 = longitud no disponible (per defecte)
Latitud 27
Pot prendre qualsevol valor des de -90º fins a + 90º, on: De 0 a +90 = latituds del nord;
0 a -90 = latituds sud;
91 = latitud no disponible (per defecte)
COG 12
Pot prendre qualsevol valor de 0 a 4095, on: 0 - 3599 = COG vàlid;
3600 = COG no disponible (per defecte); 3601 - 4095 = no s'utilitza
Rumb 9
Pot prendre qualsevol valor de 0 a 511, on: 0 - 359 = encapçalaments vàlids;
360 - 510 = no s’utilitza;
511 = capçalera no disponible (per defecte)
Segell de temps 6
Pot prendre qualsevol valor del 0 al 63, on: 0 - 59 = segon informe vàlid;
60 = segell de temps no disponible;
61 = sistema de posicionament en mode d'entrada manual; 62 = sistema de posicionament en mode de càlcul mort; 63 = sistema de posicionament inoperatiu.
Reserva 9 No utilitzat
Estat de comunicació 18 Missatge de dades que conté protocols SOTDMA i ITDMA.
Nombre total de Bits 168
28
El missatge 5 conté dades estàtiques i dades relacionades amb el viatge del vaixell equipat amb un transceptor AIS de classe A [30]. Aquests missatges s’emeten cada 6 minuts i s’han de transmetre immediatament quan canvia un dels paràmetres del vaixell. Tota la informació continguda al missatge 5 apareix a la Taula 4.
Paràmetres Bits Descripció
ID del missatge 6 Identificador de missatge, 1, 2 o 3
Indicador de repetició 2
Pot prendre qualsevol valor del 0 al 3, on: 0 = predeterminat;
3 = no repetiu més.
ID d’usuari 30 MMSI únic
Versió d’AIS 2
Pot prendre qualsevol valor del 0 al 3, on: 0 = compleix amb la UIT-RM.1371-1; 1 = compleix amb la UIT-RM.1371-3; 2 = compleix amb la UIT-RM.1371-5; 3 = no s'utilitza.
Nombre OMI 30
Pot prendre qualsevol valor del 0 al 1073741823, on: 0 = número IMO no disponible (per defecte); 0000000001 - 0000999999 = no s’utilitza; 0001000000 - 0009999999 = número IMO vàlid;
0010000000 - 1073741823 = número oficial de l'estat de la bandera.
Distintiu de trucada 36 6 × 6 caràcters de 6 bits ASCII
Nom 120 20 caràcters de 6 bits ASCII com a màxim
Tipus del vaixell i tipus de
carregament 8
Pot prendre qualsevol valor de 0 a 255, on: 0 = tipus de vaixell no disponible (per defecte); 10 - 19 = no s’utilitza;
20 - 28 = ala en terra (WIG) avió; 29 = avions de cerca i rescat (SAR); 30 = pesca;
31 - 32 = remolcador; 33 = remolcador;
29 34 = vaixell de busseig; 35 = vaixell militar; 36 = vaixell de vela; 37 = embarcacions d'esbarjo; 38 - 39 = no s’utilitza;
40 - 49 = embarcacions d'alta velocitat (HSC); 50 = vaixell pilot; 51 = vaixell SAR; 52 = remolcador; 53 = “Port tender”; 54 = embarcacions anticontaminació; 55 = vaixell policial; 56 - 57 = vaixell local; 58 = transport sanitari; 59 = embarcació especial; 60 - 69 = vaixell de passatgers; 70 - 79 = vaixell de càrrega; 80 - 89 = vaixell cisterna; 90 - 99 = altres;
100 - 199 = ajudes i marques de navegació (inclòs VTS); 200 - 255 = no s’utilitza.
Posició de l’antena del GNSS 30
Es donen 4 distàncies (A, B, C i D), on:
A = longitud cap endavant; 0 - 511; 511 = 511 m o més; B = longitud de popa; 0 - 511; 511 = 511 m o més; C = feix de port; 0 - 61; 61 = 61 m o més;
D = biga estribord; 0 - 61; 61 = 61 m o més.
Tipus de sensor de navegació 4
Pot prendre qualsevol valor del 0 al 15, on: 0 = Tipus no disponible (per defecte); 1 = GPS;
2 = GLONASS;
3 = GPS + GLONASS combinats; 4 = Loran-C;
30
5 = Chayka;
6 = Sistema de navegació integrat; 7 = Reconeixement;
8 = Galileu; 9-14 = No s’utilitza; 15 = GNSS intern.
Hora prevista d'arribada (ETA) 20
Bits 19 - 16: mes; 1-12; 0 = no disponible (per defecte); Bits 15 - 11: dia; 1 - 31; 0 = no disponible (per defecte); Bits 10 - 6: hora; 0 - 23; 0 = no disponible (per defecte); Bits 5 - 0: minut; 0 - 59; 60 = no disponible (per defecte).
Calat real 8
Pot prendre qualsevol valor de 0 a 255, on: 0 = esborrany no disponible (per defecte); 255 = calat de 25,5 m o superior.
Destí 120 20 caràcters com a màxim
Nombre total de bits 416
Taula 4. Missatge 5: Dades estàtiques del vaixell i relacionades amb el trajecte - Font (ITU)
Aquesta gran quantitat de dades s’envia constantment i implica avenços especialment importants per als futurs sistemes integrats de gestió del trànsit marítim. Des del punt de vista acadèmic, és una font interessant per a l’estudi del trànsit i el desenvolupament de nous programes relacionats en poder rebre i processar dades simultàniament.
2.2.2. NAS Synology (Linux)
Un NAS (Network Attached Storage) és un sistema d’emmagatzematge connectat a internet, en el qual introduirem discs durs, i es compartiran aplicant una sèrie de permisos d’accés. Els consums d’energia solen ser baixos i els seus components son de alta qualitat.
No només s'utilitzen únicament per fer còpies de seguretat en ells, sinó que també es fan servir per treballar de forma contínua. Un avantatge de treballar amb un NAS és el poder ometre l'haver de compartir arxius locals, amb carpetes compartides, establint polítiques de seguretat per a cada ordinador de cada treballador. Amb la posada en marxa d'un servidor NAS i aplicant una sèrie de polítiques generals, aquest tema es solucionaria i centralitzaria.
Quant a la seva compatibilització, no tindrem problema d’utilitzar qualsevol sistema operatiu en el nostre entorn, és independent de la plataforma que estiguem utilitzant, és a dir, és compatible amb tots. Es podria estar treballant amb un sistema operatiu Windows en un equip, un altre que
31
Figura 4. Popularitat dels llenguatges de programació – Font (http://cdn.statcdn.com/)
fos Linux, i un altre que fos macOS, i cap tindria problemes d'utilització de fitxers ni d'accés. Altres avantatges que té utilitzar un servidor NAS és que es minimitza el risc de pèrdua de dades, es disposa de diverses versions de la còpia de seguretat dels arxius, facilita la velocitat d'accés des de qualsevol plataforma, simplifica processos i estalvia costos.
2.2.3. Python
El llenguatge que utilitzem per a realitzar el backend s’anomena Python, en concret la versió 3. Es un llenguatge orientat a objectes i interpretació, molt versàtil, senzill i dinàmic. La sintaxi és simple, clara i senzilla, això permet realitzar programes compactes i llegibles.
El llenguatge és interpretat, això estalvia molt de temps durant el desenvolupament ja que no cal compilar ni enllaçar. L'intèrpret pot utilitzar-se interactivament, el que facilita experimentar amb característiques del llenguatge, escriure programes provisionals o provar funcions.
Disposa de assignant dinàmic de variables, de manera que no cal declarar el tipus de dada que va a contenir una determinada variable, sinó que el seu tipus es determinarà en temps d'execució segons el tipus de la valor a què s'assigni. Al seu torn, el tipus d'aquesta variable pot canviar si se li assigna un valor d'un altre tipus posteriorment.
L'intèrpret de Python està disponible en multitud de plataformes (UNIX, Linux, Windows, Mac OS, etc.) per tant, si no utilitzem llibreries específiques de cada plataforma, el nostre programa podrà córrer en tots aquests sistemes sense grans canvis.
Es reconegut com un dels llenguatges d’iniciació més utilitzats. La seva veterania i constant evolució fan que compti amb una gran comunitat d'usuaris [24] i per tant molta diversitat d'API i llibreries, que faciliten enormement el desenvolupament, com les que s'esmenten al llarg d'aquest TFG.
32
Una de les llibreries que utilitzarem s’anomena Pandas (Panel Data: panel data es refereix a dades que combinen una dimensió temporal amb una altra transversal). Proporciona estructures de dades d'alt rendiment i fàcils de utilitzar, a més d'eines d'anàlisi de dades per al llenguatge de programació Python.[27]
Python està molt optimitzat per a tasques de recopilació i preparació de dades, però no tant per a l'anàlisi i modelatge dels mateixos. Pandas resol aquest problema, ja que permet que Python dugui a terme tot el flux de treball d'anàlisi de dades sense haver de canviar a un llenguatge de programació més específic, com per exemple és R. [28]
Els aspectes més destacats de la llibreria són els següents:
• Objecte DataFrame amb indexació integrada, ràpid i eficient.
• Eines per a lectura i escriptura de dades entre estructures de dades en memòria i diferents formats: csv, fitxers de text, Microsoft Excel, bases de dades SQL, etc.
• Alineació eficient de dades i indexació jeràrquica.
• Nombroses funcionalitats per a sèries temporals (generació de rangs de dates, conversió de freqüències, etc.).
• Optimització de totes les operacions amb les estructures de dades. [28]
Una altre llibreria utilitzada és Numpy. És una llibreria de Python ("Numerical Python") i és la principal per al càlcul científic ja que proporciona potents estructures de dades, implementant matrius N - dimensionals, que garanteixen càlculs eficients amb matrius ja que són més compactes, a més de tenir accessos per a lectures i escriptures més ràpides i eficients. NumPy conté un potent conjunt d'eines i tècniques que poden ser utilitzades per a resoldre models matemàtics de problemes en ciència i enginyeria. [29]
L'estructura de dades central de la biblioteca NumPy és la matriu d'NumPy (ndarray) o la matriu N - dimensional. Un ndarray és una col·lecció, en general, homogènia d'elements; és a dir, tots ells han de ser del mateix tipus, de manera que cada un ocupa la mateixa mida de bloc en memòria i cada bloc de memòria de l'array és interpretat exactament de la mateixa manera.
Els arrays de NumPy poden executar operacions de vectors de manera molt eficient, com processar una matriu completa, a diferència de les llistes de Python on cal iterar sobre la llista i operar element per element. A més, els ndarrays estan indexats i, a l'igual que les llistes de Python, el primer índex és el 0. Un altre aspecte per tenir en compte és que quan un array de NumPy és inicialitzat, la seva mida és fixa, no canvia mai. Per definir un ndarray cal definir les dimensions de l'array i el tipus d'elements dels que estarà compost l'array. La dimensió és una tupla de N nombres enters (un per cada dimensió) que proporcionen informació de la longitud d'aquesta dimensió de l'array. Aquesta dimensió pot canviar de múltiples maneres, depenent del
33 problema que vulguem resoldre. Per a això existeixen diferents tècniques convencionals, com stacking, resizing, reshaping i splitting.
2.2.4. Flask
Flask [26] és un microframework lleuger codificat en Python. Permet codificar un servidor de manera ràpida i senzilla, també és utilitzat per grans companyies com ara Netflix [25].
Creat per facilitar el desenvolupament d'aplicacions web basant-se el patró MVC (model vista controlador). La paraula "micro" vol dir que a l'instal·lar Flask, l'usuari disposa de les eines necessàries per crear una aplicació web funcional. Però si necessita, en algun moment, una nova funcionalitat hi ha un conjunt molt ampli d'extensions (plugins) que es poden instal·lar i et permeten disposar de més funcionalitats. Això vol dir que en ell "tindràs únicament i exclusivament aquells components que necessites".
El patró MVC (model vista controlador) és un patró d'arquitectura de software que separa les dades i la lògica d'una aplicació de la seva representació visual.
Aprofundint una mica més en la definició de Flask proporcionada en el paràgraf anterior, un framework és una eina que proporciona un esquema de treball i un seguit d'utilitats i funcions que faciliten la realització d'una determinada tasca. En general, els frameworks estan associats a llenguatges de programació. En el món de Python, el més conegut és Django, però la seva corba d'aprenentatge és més elevada que la de Flask, tot i que aquest últim possibilita també la creació d'aplicacions web igual de complexes que les que permet crear Django.
L'ús de Flask grans avantatges que motiven el seu ús [26]:
• Servidor web de desenvolupament, és a dir, no és necessària una infraestructura per provar les aplicacions.
• Conté un depurador i suport integrat per proves unitàries. • És compatible amb l’última versió de Python.
• Facilita el control de rutes.
• Té suport natiu per a l'ús de cookies segures. • Permet utilitzar sessions HTTP.
• És Open Source (codi obert).
• Disposa de gran quantitat de documentació i fòrums.
Els motius pels quals he decidit utilitzar Flask en aquest projecte han estat per les característiques aquí descrites, principalment la facilitat per crear un servidor, començar a provar-ho, poder ajustar-lo i estendre'l a les necessitats concretes. A més, al no haver treballat prèviament amb Flask ha servit també com a fase d'aprenentatge d'un nou framework molt utilitzat actualment.
34
2.2.5. Frontend
El frontend son aquelles tecnologies de desenvolupament web del costat del usuari, és dir, les que s’executen al navegador de l’usuari i que son bàsicament tres: HTML, CSS i JavaScript. El frontend s’enfoca en l’usuari, en tot amb el que pot interactuar i el que veu mentre navega.
Tot i que hi ha diversos llenguatges que s’utilitzen en el frontend, nosaltres n’utilitzarem tres: HTML, CSS i JavaScript.
HTML és un llenguatge de marcat dels continguts d'un lloc web, és a dir, per designar la funció de cada element dins de la pàgina: titulars, paràgrafs, llistes, taules, etc. És l'esquelet de la web i la base de tot.
CSS és un llenguatge de fulls d'estil creat per controlar la presentació de la pàgina definint colors, mides, tipus de lletres, posicions, espaiats, etc.
JavaScript és un llenguatge de programació interpretat que s'encarrega del comportament d'una pàgina web i de la interactivitat amb l'usuari.
A part, al costat del client també tenim els frameworks, les llibreries, els preprocessadors, els connectors... Però tot gira al voltant d'HTML, CSS i JavaScript.
35
Capítol 3. Implementació
3.1. Introducció
Un cop fet l'anàlisi de les tecnologies que ens permetran dur a terme la implementació del nostre sistema Big Data, ens centrarem en el disseny del mateix, establint una correspondència entre els components del disseny i els elements concrets de la tecnologia empleada. En primer lloc es presentarà una visió general de sistema detallant els tres nuclis de funcionament. Després, descriurem els components que integren el sistema. Finalment, s'il·lustraran les interaccions entre els components per entendre el funcionament intern de sistema.
La descomposició de funcionalitats que caracteritzen el sistema donen lloc als tres nuclis de funcionament de sistema (veure Figura 5):
1. Càrrega de dades: L'usuari és capaç de carregar en el sistema els arxius de dades amb les traces a processar, en aquest projecte les traces corresponen a fitxers de dades AIS. Aquestes procedeixen del Raspberry Pi a través de l’estació VHF situada al terrat de la FNB.
2. Processament de dades: Les dades han de patir un procés de transformació i neteja. En aquest nucli es tracta de donar format a les dades i rebutjar aquells que no són vàlides.
3. Visualització de dades: La representació de les dades posterior al seu processat pot seguir dos vies d'interpretació. Es pot tenir una representació de resultats obtinguts en el seu processament, és a dir, es pot buscar el resultat abans de la representació o es pot procedir a l'explotació de la dada per obtenir coneixement no trivial el que s'anomena mineria de dades. Un dels objectius del projecte és la visualització de les dades després de la seva processat, en concret, es vol veure un mapa amb la representació gràfica de tots els vaixells dins del rang en un temps en concret.
36
Figura 5. Esquema general del sistema Big Data - Font (i2ds.org)
3.2. Entorn d’implementació
El projecte s’implanta en un sistema operatiu Debian Linux 9 facilitat per la tutora del projecte Anna Mujal. El primer que farem serà instal·lar tots els programes y llibreries que utilitzarem durant el projecte.
Comencem creant una connexió SSH a través d’un programa anomenat PuTTY o el CMD, aquesta connexió es realitza mitjançant un codi en el que hem d’especificar el nom d’usuari, la IP i la contrasenya d’accés (veure Codi 1).
ssh usuari@IP
usuari@IP password:****
Codi 1. Connexió SSH
Un cop creada la connexió, ja tenim accés al dispositiu Linux. El següent pas consisteix en verificar si tenim Python 3 instal·lat i en casi afirmatiu, quina versió (veure Codi 2)
Python3 --version
Codi 2. Versió Python 3
A continuació actualitzem Python 3 (veure Codi 3) Sudo apt-get Update
Sudo apt-get install python 3.6
37 Per administrar les llibreries de Python necessitem instal·lar Pip (veure Codi 4)
Sudo apt-get install -y python3-pip
Codi 4. Instal·lació Pip
Seguidament instal·lem la llibreria Flask (veure Codi 5) Python get-pip.py
Pip3 install flask Pip3 install requests
Codi 5. Instal·lació Flask
Finalment instal·lem les demés llibreries comentades anteriorment (veure Codi 6) Pip3 install matplotlib
Pip3 install pandes Pip3 install numpy Pip3 install folium
Codi 6. Instal·lació llibreries
3.3. Introducció de les dades AIS
La Facultat de Nàutica de Barcelona disposa de una estació VHF situada al terrat de la facultat. L’estació emmagatzema dades en un rang màxim de 120 milles nàutiques i un rang mig de 30 milles nàutiques. Els missatges que es reben per hora són de l’ordre de 30.000 missatges. Aquestes dades es reben a través d’un hardware anomenat Raspberry Pi.
Les dades es reben en forma de fitxer “.txt” de forma periòdica (cada hora) a través del hardware Raspberry PI i s’emmagatzemen automàticament en un servidor Nas Synology (Network Attached Storage). El NAS és un dispositiu d’emmagatzematge intel·ligent connectat a la seva xarxa domèstica o d’oficina. Mitjançant un explorador web o aplicacions mòbils, podem accedir als arxius i utilitzar diversos serveis proporcionats pel NAS a través d’Internet.
En aquest apartat veurem com accedir als arxius de dades AIS i copiar-los en el nostre sistema operatiu de forma automatitzada.
38
Per a realitzar aquesta tasca, utilitzem la funció Rsync. Aquesta funció sincronitza directoris i arxius, ja sigui en el mateix ordinador o altres ordinadors. Qualsevol canvi que es faci en el NAS, es veurà reflectit en el nostre sistema.
El primer pas consisteix en instal·lar la funció Rsync (veure Codi 7. Instal·lació Rsync) Sudo apt install rsync grsync
Codi 7. Instal·lació Rsync
A continuació creem el directori on emmagatzemar tots els arxius transferits, en el nostre cas és una carpeta anomenada “in_ana”. Per poder-ho fer, utilitzem un client FTP anomenat WinSCP en el qual hem de introduir la IP, el port d’accés, usuari i contrasenya. (Veure Figura 6)
Figura 6. Inici sessió WinSCP – Font pròpia
Un cop iniciada la sessió, creem la carpeta “in_ana”.
El codi de la funció Rsync que utilitzem és el següent (veure Codi 8).
Rsync -r --ignore-existing
usuari@IP:/volume1/homes/ais-backup/AIS2/data_AIS/*.txt /home/aisweb/TFG/test_inicial/in_ana
39 Els paràmetres d’aquesta funció són:
• El paràmetre -r li diu al sistema d'arxius que descarregui recursivament el conjunt d’arxius i els reprodueixi en un nou directori.
• El paràmetre -ignore-existing ens permet ometre els arxius ja existents en el directori de destí.
• A continuació tenim usuari@IP que son el usuari i la IP que ja havíem configurat anteriorment en la connexió SSH.
• Mes endavant tenim el directori d’origen /volume1/homes/ais-backup/AIS2/data_AIS/ • Al final de la ruta del directori d’origen, especifiquem el format dels arxius que volem
sincronitzar *.txt .
• Finalment indiquem el directori de destí /home/aisweb/TFG/test_inicial/in_ana/
Per últim, creem un arxiu amb el bloc de notes, escrivim la funció anterior i guardem l’arxiu amb el nom “sincronizar.sh” .
Per poder executar l’arxiu de forma automàtica sense haver d’introduir la contrasenya d’accés cada vegada, necessitem crear una clau d’autorització (veure Codi 9).
$ ssh-keygen
Codi 9. Clau d'autorització SSH
Aquesta clau l’hem de copiar en el servidor NAS mitjançant la connexió SSH executant el següent codi (veure Codi 10).
ssh USUARI@IP "echo \"`cat ~/.ssh/id_rsa.pub`\" >> .ssh/authorized_keys"
Codi 10. Clau d'autorització servidor NAS
D’aquesta forma podem automatitzar les funcions sense haver d’introduir contrasenyes de forma manual.
Un cop tenim la funció Rsync, hem de fer que s’executi de forma automàtica cada hora. Això ho aconseguim amb la funció Crontab.
40
Figura 7. Funció Crontab – Font pròpia
Figura 8. Carpeta "in_ana" – Font pròpia
El primer pas és obrir l’arxiu amb el següent codi (veure Codi 11) Crontab -e
Codi 11. Arxiu Crontab
Un cop dins de l’arxiu, hem d’afegir la següent línia de codi (veure Codi 12) */60**** /home/aisweb/TFG/test_inicial/sincronitzar.sh
Codi 12. Funció Crontab
Aquesta funció executarà el l’arxiu “sincronitzar.sh” cada 60 minuts.
Passades unes hores podem veure el correcte funcionament de totes les funcions que hem programat anteriorment, ja que la carpeta “in_ana” esta rebent els arxius de dades AIS (veure Figura 8)
41
Figura 9. Dades AIS - Font pròpia
3.4. Tractament de les dades AIS (Filtrat i
Vectoritzat)
Inicialment, tots els arxius de dades AIS que ens arriben de forma automàtica tenen la següent forma (veure Figura 9):
Abans de procedir amb l’anàlisi de les dades, el que es fa és una descodificació d’aquestes, utilitzant un codi lliure per a Python (pyAIS). Aquest codi esta programat per a descodificar un arxiu de dades, per tant, hem d’afegir un codi perquè ens permeti descodificar tots els arxius. Primerament, guardarem en una variable anomenada “llista_AIS” el nom de tots els arxius que volem descodificar (veure Codi 13):
With os.scandir('/Users/Oscar/TFG/test_inicial/in_ana') as arxius: llista_AIS = [arxiu.name for arxiu in arxius if
arxiu.is_file()][:-1]
Codi 13. Llista de descodificació
Un cop tenim la llista d’arxius, crearem un arxius en bloc de notes “.txt” que contindrà tota la llista anterior (veure Codi 14):
llista_arx =
open("/Users/Oscar/TFG/test_inicial/in_ana/llista_arx.txt","w") for line in llista_AIS:
llista_arx.write(line) llista_arx.write("\n") llista_arx.close()
42
Figura 12. Resum descodificació - Font pròpia Figura 11. Execució del descodificador - Font pròpia
Figura 10. Llista de
descodificació - Font pròpia
El resultat d’aquests dos codis es el següent (veure Figura 10):
El següent pas consisteix en executar el descodificador (el nom de l’arxiu és anaAIS_oscar.py). Veurem com es carreguen tots els arxius de la llista (veure Figura 11).
Un cop acabada la descodificació, ens dona un resum de la descodificació i 5 arxius bloc de notes, cada un corresponent als missatges 5, 18, 24A, 24B i 123 (missatges 1, 2 i 3) (veure Figura 12 i Figura 13).
43
Figura 14. Missatges Codi 5 - Font pròpia Figura 13. Resultat descodificació
Figura 15. Missatges Codi 18 - Font pròpia
Els missatges AIS 5 es guarden en un fitxer de text (.txt), amb tota la informació filtrada inicialment. Es pot accedir fàcilment a aquest fitxer mitjançant Python com a marc de dades. La Figura 14 és una mostra del missatge 5 de classe A. Conté la data de recepció (UTC), identificador del missatge, MMSI de l'estació, nom de l'estació, longitud directa de l'antena, longitud de popa de l'antena, amplària del port de l'antena, amplària de tribord de l'antena, calat i destinació.
44
Figura 16. Missatges Codi 24A - Font pròpia
45
Figura 18. Missatges Codi 123 - Font pròpia
Figura 19. Exemple conjunt de dades AIS filtrat en format CSV - Font pròpia
Per últim, filtrem les dades obtingudes en el pas anterior dels missatges AIS 1 2 i 3, substituint la informació en blanc o caràcters erronis per dades “NaN”, executant l’arxiu filtre_dynamic_Oscar.py . Com a resultat, obtenim un únic fitxer de valor separat per comes (.csv), amb tota la informació filtrada. Aquest fitxer està a punt per ser importat a Python com a Dataframe. La Figura 19 mostra una mostra dels missatges 1, 2 i 3 de classe A, que conté la data de recepció (UTC), segon enviat, estació MMSI, velocitat, longitud, latitud, rumb sobre terra i rumb.
46
3.5. Representació gràfica de les dades
Per últim, representarem les dades anteriorment filtrades en un mapa. Aquest apartat el dividim en dues parts, el backend (tractament de dades no visible per l’usuari) i el frontend (tot el què l’usuari veu i interactua).
El primer pas pel backend consisteix en crear un directori amb la següent estructura: /app /__init__.py /views.py /Flask_map.py /static/ /IMO.jpg ... /templates/ /index.html /layout.html /map.html /select.html
Codi 15. Estructura directori Flask
On:
• __init__.py: inicialitza l'aplicació creant una instància d'aplicació Flask. • views.py: aquí es defineixen les rutes.
• Flask_map.py: aquí és on definim el model de l’aplicació. • static: conté fitxers estàtics, és a dir, CSS, Javascript, imatges.
• templates: aquí és on emmagatzemeu les plantilles HTML, és a dir, index.html, layout.html
Abans de començar amb l'escriptura del codi amb Python (Flask_map.py), necessitem instal·lar varies llibreries que permetin connectar l’ordinador amb el servidor on carregar les dades. Es necessita la instal·lació de la llibreria per a les peticions HTTP anomenada "Requests" i també la llibreria per a la representació dels punts en un mapa, anomenat “Folium”. A l'hora d'utilitzar
47 aquestes dues llibreries al codi dels programes, hem d’escriure, al principi del programa, 'import Requests' o en el cas de Folium, 'import folium', molt habitual en l'entorn Python.
Sabent les dades que es van a utilitzar durant l’execució del projecte es procedeix a la creació de fitxers GeoJSON. Aquest format permet intercanviar dades d'una manera senzilla, llegible i fàcil de comprendre. Al seu torn, són formats molt útils per treballar amb aplicacions “WebMapping” ja que el GeoJSON conté objectes features i aquest al seu torn diferents entitats dividides en geometry i properties.
En aquest tipus de fitxers podem trobar diversos tipus de geometria que podrem utilitzar per a crear el fitxer GeoJSON:
• Punt i multi-punt. • Línia i multi-línia • Polígon i multi-polígon • Col·lecció de Geometria
Un exemple on es representa un polígon amb les seves coordenades i propietats en un GeoJSON és el següent (veure Codi 16):
{ "geometry": { "type": "Point", "coordinates": [ -0.402776519236904, 39.458628918607 ] }, "type": "Feature", "properties": { "GID": "(17959, 12945)", "PID": "1175" } }
48
Un cop clar el concepte d'un fitxer GeoJSON podem continuar programant el codi Python.
El programa el dividim en dues parts. En la primera part importarem totes les dades filtrades, i en la segona part les representem gràficament.
El primer pas consisteix en importar l’arxiu CSV (dades dinàmiques) mitjançant la llibreria Pandas i seleccionar les columnes que utilitzarem (date, mmsi, lat, lon, speed) (veure Codi 17):
t = pd.read_csv('Clean.csv', sep=",", usecols = ['date','mmsi','lat','lon', 'speed'])
Codi 17. Importar fitxer de dades filtrades CSV
A continuació importem i ajuntem les dades dinàmiques anteriors amb les dades estàtiques, comparant el “mmsi” (arxiu missatges codi 5) (veure Codi 18):
aux = pd.read_csv('/Users/TFG/test_inicial/out/llista_arx_5.txt', sep = ",")
aux.columns
=['date','type','mmsi','IMO','shipname','shiptype','to_bow','to_st ern','to_port','to_starboard','draught', 'destination']
Codi 18. Importar fitxer de dades missatge codi 5
Tenint totes les dades carregades, assignem un codi de colors per a cada tipus de vaixell: • Cargo – Verd
• Tankers – Vermell • Passagner – Blau
e['fillColor'] = labelColor[0]
e.fillColor.loc[e.group == 'Tankers'] = labelColor[2] e.fillColor.loc[e.group == 'Cargo'] = labelColor[1]
Codi 19. Assignar codi de colors
49
Figura 20. Estructura de les dades a representar - Font pròpia
La segona part del programa, consisteix en dues funcions. La primera funció ens serveix per generar un mapa en unes coordenades en una localització en concret. Les coordenades del port de Barcelona són latitud: 41.32 i longitud: 2.205039 . Le codi per a generar el mapa es el següent (veure Codi 20):
def generateBaseMap(default_location=[41.32, 2.205039], default_zoom_start=12)
Codi 20. Codi per a generar mapa base
Amb la segona funció, vectoritzem les dades i les inserim en el mapa. Per a vectoritzar les dades, primer necessitem un vector buit (veure Codi 21):
features = []
Codi 21. Vector buit
A continuació, hem de crear un bucle “for” que repeteixi un algoritme per a cada fila de dades.
Per a cada fila de dades, hem de representar un punt en el mapa, i al fer clic en ell, ha d’aparèixer un pop-up amb l’informació del vaixell (imatge, Shipname, MMSI, Grup i velocitat). Les imatges s’extreuen de la pàgina web oficial de MarineTraffic de forma automàtica a través d’un mètode de scraping. Tota aquesta informació s’ha de guardar en un format GeoJSON i inserir-la en el mapa.
for _, row in selected_data.iterrows(): feature = {
'type': 'Feature', 'geometry': {
50
Figura 21. Representació gràfica inicial – Font pròpia
'type':'Point',
'coordinates':[row['lon'],row['lat']] },
'properties': {
'time': pd.to_datetime(row['date']).__str__(), 'popup': "<img src=/static/" +
row['IMO'].__str__() +".jpg" + " width = '250'
height='200'/>"+'<br>'+'<br>'+'Shipname:'+row['shipname'].__str__( ) +'<br>'+ 'MMSI: '+row['mmsi'].__str__() +'<br>' + 'Group:
'+row['group'].__str__() +'<br>''Speed: '+row['speed'].__str__()+' knots', 'style': {'color' : ''}, 'icon': 'circle', 'iconstyle':{ 'fillColor': row['fillColor'], 'fillOpacity': 0.8, 'radius': 5 } } }
Codi 22. Bucle "for"