-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspacex-dash-visualization.py
More file actions
131 lines (119 loc) · 5.58 KB
/
spacex-dash-visualization.py
File metadata and controls
131 lines (119 loc) · 5.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Import required libraries
import pandas as pd
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
import plotly.express as px
# Read the airline data into pandas dataframe
spacex_df = pd.read_csv("spacex_launch_dash.csv")
max_payload = spacex_df['Payload Mass (kg)'].max()
min_payload = spacex_df['Payload Mass (kg)'].min()
# Create a dash application
app = dash.Dash(__name__)
# Create an app layout
app.layout = html.Div(children=[html.H1('SpaceX Launch Records Dashboard',
style={'textAlign': 'center', 'color': '#503D36',
'font-size': 40}),
# TASK 1: Add a dropdown list to enable Launch Site selection
# The default select value is for ALL sites
html.Div(dcc.Dropdown(id='site-dropdown',
options=[
{
'label': 'All Sites',
'value': 'ALL'
},
{
'label': 'CCAFS LC-40',
'value': 'CCAFS LC-40'
},
{
'label': 'VAFB SLC-4E',
'value': 'VAFB SLC-4E'
},
{
'label': 'KSC LC-39A',
'value': 'KSC LC-39A'
},
{
'label': 'CCAFS SLC-40',
'value': 'CCAFS SLC-40'
},
],
value='ALL',
placeholder="Select a Launch Site here",
searchable=True
)),
html.Br(),
# TASK 2: Add a pie chart to show the total successful launches count for all sites
# If a specific launch site was selected, show the Success vs. Failed counts for the site
html.Div(dcc.Graph(id='success-pie-chart')),
html.Br(),
html.P("Payload range (Kg):"),
# TASK 3: Add a slider to select payload range
html.Div(dcc.RangeSlider(id='payload-slider',
min=0,
max=10000,
step=1000,
marks={0: '0 kg',
10000: '10000 kg'},
value=[min_payload, max_payload]
)),
# TASK 4: Add a scatter chart to show the correlation between payload and launch success
html.Div(
dcc.Graph(id='success-payload-scatter-chart')),
])
# TASK 2:
# Add a callback function for `site-dropdown` as input, `success-pie-chart` as output
@app.callback(Output(component_id='success-pie-chart', component_property='figure'),
Input(component_id='site-dropdown', component_property='value'))
def get_pie_chart(entered_site):
filtered_df = spacex_df
if entered_site == 'ALL':
fig = px.pie(filtered_df.loc[filtered_df['class'] == 1],
values='class',
names='Launch Site',
title='Successes')
return fig
else:
filtered_df = filtered_df.loc[filtered_df['Launch Site']
== entered_site]
# filtered_df.groupby(['class'])
fig = px.pie(filtered_df,
# values='Launch Site',
names='class',
title=f'Success & Failure: {entered_site}')
return fig
# TASK 4:
# Add a callback function for `site-dropdown` and `payload-slider` as inputs, `success-payload-scatter-chart` as output
@app.callback(Output(component_id='success-payload-scatter-chart', component_property='figure'),
[Input(component_id='site-dropdown', component_property='value'),
Input(component_id="payload-slider", component_property="value")])
def get_scattered_plot(entered_site, slider_range):
filtered_df = spacex_df
low, high = slider_range
if entered_site == 'ALL':
mask = (filtered_df['Payload Mass (kg)'] > low) & (filtered_df['Payload Mass (kg)'] < high)
fig = px.scatter(
filtered_df[mask],
x="Payload Mass (kg)",
y="class",
color="Booster Version Category",
size='Payload Mass (kg)'
)
return fig
else:
filtered_df = filtered_df.loc[filtered_df['Launch Site']
== entered_site]
mask = (filtered_df['Payload Mass (kg)'] > low) & (filtered_df['Payload Mass (kg)'] < high)
fig = px.scatter(
filtered_df[mask],
x="Payload Mass (kg)",
y="class",
color="Booster Version Category",
size='Payload Mass (kg)'
)
return fig
# Run the app
if __name__ == '__main__':
app.run_server()