SPACEX FALCON 9 – esempio di previsione del successo o meno dell’atterraggio del primo stadio sulla base di alcuni dati di input – I parte –

SPACEX FALCON 9 – esempio di previsione del successo o meno dell’atterraggio del primo stadio sulla base di alcuni dati di input – I parte –

Settembre 6, 2023 0 Di Ruggero Grando

Quindi, proseguendo con il discorso potremmo ridurre le righe del datasets “data_launches_subdataset” con le seguenti considerazioni:

  • Si devono rimuovere le righe che contengono più “Cores”
  • Si devono eliminare le righe che contengono più di un “Payloads”, perché i primi sono dei razzi multipli tipo il Falcon_Heavy e i secondi hanno più di un “PayLoads”, ossia quei razzi che sono in grado di trasportare più carichi differenti.

Le seguenti righe di codice eseguono tale operazione. Il tutto per estrarre un campione di razzi significativo con caratteristiche omogenee.

data_launches_subdataset = data_launches_subdataset[data_launches_subdataset['cores'].map(len)==1] data_launches_subdataset .to_csv('PrimaEsportazione_senza_Core.csv') data_launches_subdataset = data_launches_subdataset[data_launches_subdataset['payloads'].map(len)==1] data_launches_subdataset .to_csv('PrimaEsportazione_senza_Core_Payloads.csv')

Per quando concerne il campo “Payloads” ho cancellato quelle righe che ne contenevano più di uno direttamente dal database. Come si vede nell’ultima riga del codice appena descritto si esporta in formato csv il risultato delle operazioni precedenti.

Operazione di rimozione delle righe con più "Payloads".
Figura 13.
(Rimozione delle righe con più Payloads indicate in giallo).

Di fatto, non ci sono righe con più “Cores” e quindi le uniche righe rimosse sono quelle con più “Payloads”.

data_launches_subdataset['date'] = pd.to_datetime(data_launches_subdataset['date_utc']).dt.date

#data = data_launches_subdataset[data_launches_subdataset['date'] <= datetime.date(2020, 11, 13)]

Fatto questo, eseguiamo alcune operazioni sulla data: con la prima riga la rendiamo leggibile, mentre con la seconda scegliamo soltanto le righe fino a una certa data.

A questo punto, ci servono altre informazioni. In particolare, vogliamo sapere il nome del razzo “Rocket”, e altre specifiche del carico “Payload”. Di quest’ultimo, vogliamo anche conoscere la massa e la destinazione orbitale. Inoltre, relativamente alla piattaforma di lancio “LaunchPad” vogliamo sapere il nome del sito, le coordinate di longitudine e latitudine. Infine, per quanto concerne i “Cores” vorremmo conoscere l’esito dell’atterraggio, il tipo di atterraggio, se sono state impiegate le alette “griglie di atteraggio”, e se sono state utilizzate le gambe di atterraggio. Inoltre, sarebbe importante capire se il “Core” è stato riutilizzato.

Purtroppo, i campi “Rocket”, “Payload”, “Launchpad” dal dataset estratto “data_launches_subdataset” riportano solamente l’informazione dell’UUID, ossia dell’identificativo dell’oggetto indicato, quindi dovremmo eseguire delle altre chiamate per poter aggiungere altre informazioni. Mentre, il campo “Cores” presente nel dataset estratto contiene le seguenti informazioni più che esaustive:

[{‘core’: ‘5e9e289df35918033d3b2623′, ‘flight’: 1, ‘gridfins’: False, ‘legs’: False, ‘reused’: False, ‘landing_attempt’: False, ‘landing_success’: None, ‘landing_type’: None, ‘landpad’: None}]

In particolare, ecco una descrizione più dettagliata del campo “Cores”:
Il campo ‘Cores’ indica l’UUID del Core, il numero del volo, l’utilizzo delle alette di manovra, l’utilizzo delle gambe di atterraggio, se è stato riutilizzato, se vi è stato un tentativo di atterraggio, se vi è stato un atterraggio con successo ,il tipo di atterraggio e infine la piattaforma di atterraggio.

Elementi del CoreDescrizione
coreIdentificativo UUID del Core
flightNumero del volo
gridfinsSono state utilizzate le alette di rientro?
legsSono state utilizzate le gambe di atterraggio?
reusedIl core è stato riutilizzato?
landing_attemptE’ stato provato un tentativo di atterraggio?
landing_successL’atterraggio è andato a buon fine?
landing_typeTipo di atterraggio.
landpadPiattaforma di atterraggio.
Tabella 2
(Caratteristiche del campo “Cores” presente nel dataset).

Ora, dopo aver descritto in parte le informazioni di cui disponiamo, dovremmo sviluppare una funzione specifica per aggiungerne altre. La seguente funzione permette di aggiungere le altre specifiche che ci mancano.

8 def getElement(data,apielement,element):
9    
10    for x in data[element]:
11        response =requests.get("https://api.spacexdata.com/v4/"+apielement+'/'+str(x)).json()
12        if element == 'rocket' :
13            time.sleep(0.5) #add pause         
14            data['Name Rocket'] = response['name']
15            data['Stages'] = response['stages']
16        return data

Con la riga otto definiamo una nuova funzione “getElement” a cui passiamo il dataframe data, l’elemento da aggiungere alla richiesta “apielement” (non è altro che l’elemento che mi serve per comporre l’endpoint in maniera dinamica) e infine, l’elemento “element” che si passa come parte identificativa dell’elemento di interesse (rocket, payload e via dicendo).

Le righe quattordici e quindici estrapolano due informazioni aggiuntive: il nome del razzo e il numero di stadi del razzo grazie alle istruzioni response[‘name’] e response[‘stages’].
A questo punto, per suddividere le varie informazioni aggiuntive aggiungerò una desinenza all’informazione che voglio estrarre con le API che sarà quella dell’elemento da cui le derivo, come in questo caso il ‘rocket’.

Per il momento vorrei estrarre con le API e quindi le informazioni aggiuntive relative al ‘rocket’, ricordate la riga nel codice precedente “if element == “rocket” le seguenti informazioni.

Nome identificativo Elemento ‘rocket’DescrizioneCodice
ro_nameNome del razzoresponse[‘name’]
ro_stagesNumero degli stadi del razzoresponse[‘stages’]
ro_boostersNumero di motori ausiliariresponse[‘boosters’]
ro_cost_per_launchCosto del lancioresponse[‘cost_per_launch’]
ro_first_flightPrimo lancioresponse[‘first_flight’]
ro_landing_legs_numberNumero di gambe per l’atteraggioresponse[‘landing_legs’][‘number’]
ro_landing_legs_materialMateriale delle gambe di atterraggioresponse[‘landing_legs’][material’]
ro_engines_numberNumero dei motoriresponse[‘engines’][‘number’]
ro_engines_typeTipo di motoriresponse[‘engines’][‘type’]
ro_engine_versioneVersione dei motoriresponse[‘engines’][version’]
ro_engine_propellant_1Propellente motori 1response[‘engines’][‘propellant_1’]
ro_engine_propellant_2Propellente motori 2response[‘engines’][‘propellant_2’]
ro_engine_layoutLayout della disposizione dei motori.response[‘engines’][‘layout’]
Tabella 3
(Caratteristiche del razzo estratte con la richiesta API specifica).

Per quanto concerne le caratteristiche del razzo dovremmo aver ottenuto tutte le informazioni che ci servono.

Pagina Successiva | Pagina Precedente

No votes yet.
Please wait...

Pagine: 1 2 3 4 5 6 7 8 9 10