EDA del set di dati sulla corsa allo spazio
Ti presentiamo gli sforzi del "lancio di razzi" dell'umanità. Scopriamo
il "come" in quanto tempo tentiamo davvero l'arte incredibilmente complicata del "lancio del razzo", da dove preferiamo lanciare questi cuccioli, chi è anche questo "noi" e quanto costa davvero tuttocosto?
1.0 I contendenti
Prima raffica di informazioni. Wordcloud disegna il panorama e presenta le aziende nel modo più efficiente possibile.
Tuttavia tende a mancare di un senso di profondità, quindi daremo anche un'occhiata a un grafico più tradizionale, che consentirà di aggiungere alcuni numeri concreti nel mix.
from wordcloud import WordCloud
company_counts = df['Company Name'].value_counts()
company_dict = company_counts.to_dict()
wordcloud = WordCloud(width=800, height=400, background_color='white', colormap='viridis').generate_from_frequencies(company_dict)
plt.figure(figsize=(16, 6))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
plt.figure(figsize=(16,6))
sns.countplot(data=df, x="Company Name", order=df["Company Name"].value_counts().index)
plt.xticks(rotation=90)
plt.ylabel("Cummulative Missions")
plt.show()
I russi stanno perseguendo incessantemente la loro fame per una missione di atterraggio sulla luna di successo. Ma... è davvero tutta la storia?
1.1 La cronologia degli sforzi della missione
def extract_year(datum):
parts = datum.split(" ")
year = parts[3].strip()
year = int(year)
return year
df['Year'] = df['Datum'].apply(extract_year)
plt.figure(figsize=(7,11))
sns.scatterplot(data=df, y="Company Name", x="Year", hue="Status Mission")
plt.show()
— RVSN L'URSS ha smesso di lanciare razzi molto tempo fa. Espandiamo la profondità aggiungendo l'intensità degli sforzi annuali nel mix
cumulative_entries = df.groupby(['Year', 'Company Name']).cumcount() + 1
df_cumulative = df[['Year', 'Company Name']].copy()
df_cumulative['Cumulative Entries'] = cumulative_entries
plt.figure(figsize=(7, 11))
sns.scatterplot(data=df, y="Company Name", x="Year", hue="Status Mission", size=df_cumulative['Cumulative Entries'], size_norm=None)
handles, labels = plt.gca().get_legend_handles_labels()
plt.title('Space Missions by Company and Year')
plt.show()
L'intensità dello sforzo proveniente dai nuovi contendenti del gioco Rocket Launch è ben osservata nella trama sopra.
1.2 Il “Dove”
Diamo un'occhiata ai siti di lancio e ai paesi che venivano lanciati frequentemente.
Per questa visualizzazione vengono presi in considerazione solo i paesi con più di 10 lanci.
country_missions = df.groupby('Country').size().reset_index(name='Total Missions')
filtered_countries = country_missions[country_missions['Total Missions'] > 10]['Country']
filtered_df = df[df['Country'].isin(filtered_countries)]
yearly_missions = filtered_df.groupby(['Year', 'Country']).size().reset_index(name='Missions')
yearly_missions['Cumulative Missions'] = yearly_missions.groupby('Country')['Missions'].cumsum()
fig, ax = plt.subplots(figsize=(13, 7.6))
sns.lineplot(x='Year', y='Cumulative Missions', hue='Country', style='Country', data=yearly_missions)
plt.title('Countries and their utilization as a Launch Location')
plt.show()
La prospettiva si trova anche di seguito.
colors = ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b']
cmap = ListedColormap(colors)
worldmap = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
country_missions.loc[country_missions['Country'] == 'USA', 'Country'] = 'United States of America'
worldmap['Country'] = worldmap['name']
merged_worldmap = worldmap.merge(country_missions, on='Country', how='left')
fig, ax = plt.subplots(figsize=(12, 6))
merged_worldmap.plot(column='Total Missions', cmap=cmap, linewidth=0.8, edgecolor='0.8', legend=True, ax=ax, legend_kwds={'label': "Total Missions"}, missing_kwds={'color': "white"})
ax.set_title('Countries and their utilization as a Launch Location')
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
plt.show()
Quanto spesso la missione ha successo? È sicuro?
BENE..
launch_counts = df.groupby(['Year', 'Status Mission']).size().reset_index(name='Count')
pivot_counts = launch_counts.pivot(index='Year', columns='Status Mission', values='Count').fillna(0)
sns.set_style('whitegrid')
plt.figure(figsize=(14, 5.6))
sns.barplot(x=pivot_counts.index, y=pivot_counts['Success'], color='g', label='Success')
sns.barplot(x=pivot_counts.index, y=pivot_counts['Failure'], bottom=pivot_counts['Success'], color='r', label='Failure')
plt.xlabel('Year')
plt.ylabel('Number of Launches')
plt.title('Number of Successful vs. "Failure" Launches Each Year')
plt.xticks(rotation=45)
plt.legend()
plt.show()
Companies and their track record | 4 row subplotted barplot
Osservando la distribuzione del successo di cui sopra, si noti gentilmente che la Marina degli Stati Uniti ha tentato solo il lancio di razzi all'inizio (anni '50). Con questa parte avvolta, diamo un'occhiata al costo $.
1.4 Il costo
def millions_formatter(x):
return f"{round(x * 1e-3):,.0f}B$"
grouped_data = df.groupby('Company Name')[' Rocket'].sum().reset_index()
fig.update_layout(title='Distribution of Rocket Costs by Company')
fig.show()
from matplotlib.ticker import FuncFormatter
grouped_data = df.groupby('Year')[' Rocket'].sum().reset_index()
grouped_data[' Rocket'] = grouped_data[' Rocket'] / 1000
plt.figure(figsize=(12, 8))
sns.barplot(x='Year', y=' Rocket', data=grouped_data, color="b")
plt.xticks(rotation=45)
plt.xlabel('Year')
plt.ylabel('Expenditure in USD')
plt.title('Sum of Documented* expenses per Year')
def billions_formatter(x, pos):
return f"{x * 1000000000 :,.0f}$"
ax = plt.gca()
ax.yaxis.set_major_formatter(FuncFormatter(billions_formatter))
plt.show()
Spendere miliardi di dollari USA può sembrare un grande investimento.
Tuttavia, non è niente , se confrontato con la stima di 1,42 trilioni di dollari USA che il mercato farmaceutico genera solo nel 2021 (concesso: phara è noto per "stampare denaro" in alcuni casi). Inoltre, l'industria manifatturiera automobilistica ha generato entrate per circa 2,86 trilioni di dollari USA nel 2021. Il trasporto spaziale ha quindi ancora la sua giusta parte di strada da percorrere.
1.5 I dati di origine
nextspaceflight.com
Decollo! Grazie per aver letto.
# U S E D L I B R A R I E S
import pandas as pd
import geopandas as gpd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
from wordcloud import WordCloud
import plotly.graph_objects as go