Navya-Sree commited on
Commit
2fefb50
·
verified ·
1 Parent(s): d040e61

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -61
app.py CHANGED
@@ -6,16 +6,16 @@ import plotly.graph_objects as go
6
  import gradio as gr
7
  from datetime import datetime
8
 
9
- # Constants - Updated for NASA's new format
10
  NASA_DATA_URL = "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv"
11
  CURRENT_YEAR = datetime.now().year
12
  MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
13
  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
14
 
15
  def load_and_process_data():
16
- """Load and process NASA temperature data with updated format handling"""
17
  try:
18
- # Read NASA data with updated parameters
19
  df = pd.read_csv(
20
  NASA_DATA_URL,
21
  skiprows=1,
@@ -23,18 +23,12 @@ def load_and_process_data():
23
  engine='python'
24
  )
25
 
26
- # Clean and reshape data - handle new column format
27
  df = df[df['Year'] >= 1880]
28
-
29
- # Select only year and month columns (new format uses month names)
30
  df = df[['Year'] + MONTHS]
31
 
32
- # Melt to long format using month names
33
- df = df.melt(
34
- id_vars='Year',
35
- var_name='Month',
36
- value_name='Anomaly'
37
- )
38
 
39
  # Convert month names to numeric values
40
  month_map = {name: f"{i:02d}" for i, name in enumerate(MONTHS, 1)}
@@ -43,11 +37,12 @@ def load_and_process_data():
43
  # Create date column
44
  df['Date'] = pd.to_datetime(
45
  df['Year'].astype(str) + '-' + df['Month_Num'],
46
- format='%Y-%m'
 
47
  )
48
 
49
  # Clean and process anomalies
50
- df = df.dropna(subset=['Anomaly'])
51
  df['Anomaly'] = df['Anomaly'].astype(float)
52
  df['Decade'] = (df['Year'] // 10) * 10
53
 
@@ -62,7 +57,7 @@ def load_and_process_data():
62
  print(f"Data loading error: {e}")
63
  return pd.DataFrame()
64
 
65
- # ... [rest of visualization functions remain unchanged] ...
66
 
67
  def create_dashboard():
68
  """Create Gradio dashboard with fixed components"""
@@ -70,74 +65,80 @@ def create_dashboard():
70
 
71
  with gr.Blocks(title="NASA Climate Viz", theme=gr.themes.Soft()) as demo:
72
  gr.Markdown("# 🌍 Earth's Surface Temperature Analysis")
 
73
 
74
- # ... [header remains unchanged] ...
 
 
 
 
 
75
 
76
  with gr.Tab("Time Series Analysis"):
77
  gr.Markdown("## Global Temperature Anomalies Over Time")
78
  with gr.Row():
79
- show_uncertainty = gr.Checkbox(label="Show Uncertainty Bands")
80
- # FIXED: Use new Slider syntax with range=True
81
- year_range = gr.Slider(
82
- minimum=1880,
83
- maximum=CURRENT_YEAR,
84
- value=[1950, CURRENT_YEAR],
85
- label="Year Range",
86
- step=1,
87
- interactive=True,
88
- range=True # This creates dual-handle range slider
89
  )
 
 
 
 
 
90
  time_series = gr.Plot()
91
 
92
  with gr.Tab("Decadal Heatmap"):
93
  gr.Markdown("## Monthly Anomalies by Decade")
94
- # FIXED: Updated slider syntax
95
- decade_range = gr.Slider(
96
- minimum=1880,
97
- maximum=CURRENT_YEAR - (CURRENT_YEAR % 10),
98
- value=[1950, CURRENT_YEAR - (CURRENT_YEAR % 10)],
99
- step=10,
100
- label="Decade Range",
101
- interactive=True,
102
- range=True # Dual-handle range slider
103
- )
104
  heatmap = gr.Plot()
105
 
106
  # ... [other tabs remain unchanged] ...
107
 
108
- # Event handling with fixed input parameters
109
- show_uncertainty.change(
110
- fn=lambda u, y: create_time_series_plot(
111
- df[(df['Year'] >= y[0]) & (df['Year'] <= y[1])],
112
- u
113
- ),
114
- inputs=[show_uncertainty, year_range],
115
- outputs=time_series
116
- )
117
-
118
- year_range.input( # Use .input instead of .change for realtime updates
119
- fn=lambda y, u: create_time_series_plot(
120
- df[(df['Year'] >= y[0]) & (df['Year'] <= y[1])],
121
- u
122
- ),
123
- inputs=[year_range, show_uncertainty],
124
- outputs=time_series
125
- )
126
 
127
- decade_range.input(
128
- fn=lambda dr: create_heatmap(df, (dr[0], dr[1])),
129
- inputs=decade_range,
130
- outputs=heatmap
131
- )
 
 
132
 
133
  # Initial renders
134
  demo.load(
135
- fn=lambda: create_time_series_plot(df[(df['Year'] >= 1950) & (df['Year'] <= CURRENT_YEAR)]),
136
  outputs=time_series
137
  )
138
 
139
  demo.load(
140
- fn=lambda: create_heatmap(df, (1950, CURRENT_YEAR)),
141
  outputs=heatmap
142
  )
143
 
 
6
  import gradio as gr
7
  from datetime import datetime
8
 
9
+ # Constants
10
  NASA_DATA_URL = "https://data.giss.nasa.gov/gistemp/tabledata_v4/GLB.Ts+dSST.csv"
11
  CURRENT_YEAR = datetime.now().year
12
  MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
13
  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
14
 
15
  def load_and_process_data():
16
+ """Load and process NASA temperature data"""
17
  try:
18
+ # Read NASA data
19
  df = pd.read_csv(
20
  NASA_DATA_URL,
21
  skiprows=1,
 
23
  engine='python'
24
  )
25
 
26
+ # Clean and reshape data
27
  df = df[df['Year'] >= 1880]
 
 
28
  df = df[['Year'] + MONTHS]
29
 
30
+ # Melt to long format
31
+ df = df.melt(id_vars='Year', var_name='Month', value_name='Anomaly')
 
 
 
 
32
 
33
  # Convert month names to numeric values
34
  month_map = {name: f"{i:02d}" for i, name in enumerate(MONTHS, 1)}
 
37
  # Create date column
38
  df['Date'] = pd.to_datetime(
39
  df['Year'].astype(str) + '-' + df['Month_Num'],
40
+ format='%Y-%m',
41
+ errors='coerce'
42
  )
43
 
44
  # Clean and process anomalies
45
+ df = df.dropna(subset=['Anomaly', 'Date'])
46
  df['Anomaly'] = df['Anomaly'].astype(float)
47
  df['Decade'] = (df['Year'] // 10) * 10
48
 
 
57
  print(f"Data loading error: {e}")
58
  return pd.DataFrame()
59
 
60
+ # Visualization functions remain the same as before
61
 
62
  def create_dashboard():
63
  """Create Gradio dashboard with fixed components"""
 
65
 
66
  with gr.Blocks(title="NASA Climate Viz", theme=gr.themes.Soft()) as demo:
67
  gr.Markdown("# 🌍 Earth's Surface Temperature Analysis")
68
+ gr.Markdown("### Visualization of NASA's Global Temperature Data")
69
 
70
+ with gr.Row():
71
+ gr.Markdown(f"""
72
+ **Data Source**: [NASA Goddard Institute for Space Studies](https://data.giss.nasa.gov/gistemp/)
73
+ **Last Update**: {CURRENT_YEAR}
74
+ **Base Period**: 1951-1980
75
+ """)
76
 
77
  with gr.Tab("Time Series Analysis"):
78
  gr.Markdown("## Global Temperature Anomalies Over Time")
79
  with gr.Row():
80
+ show_uncertainty = gr.Checkbox(label="Show Uncertainty Bands", value=False)
81
+
82
+ with gr.Row():
83
+ min_year = gr.Slider(
84
+ 1880, CURRENT_YEAR, value=1950,
85
+ label="Start Year", step=1
 
 
 
 
86
  )
87
+ max_year = gr.Slider(
88
+ 1880, CURRENT_YEAR, value=CURRENT_YEAR,
89
+ label="End Year", step=1
90
+ )
91
+
92
  time_series = gr.Plot()
93
 
94
  with gr.Tab("Decadal Heatmap"):
95
  gr.Markdown("## Monthly Anomalies by Decade")
96
+ with gr.Row():
97
+ min_decade = gr.Slider(
98
+ 1880, CURRENT_YEAR, value=1950,
99
+ label="Start Decade", step=10
100
+ )
101
+ max_decade = gr.Slider(
102
+ 1880, CURRENT_YEAR, value=CURRENT_YEAR,
103
+ label="End Decade", step=10
104
+ )
 
105
  heatmap = gr.Plot()
106
 
107
  # ... [other tabs remain unchanged] ...
108
 
109
+ # Helper functions for updates
110
+ def update_time_series(show_unc, min_yr, max_yr):
111
+ filtered = df[(df['Year'] >= min_yr) & (df['Year'] <= max_yr)]
112
+ return create_time_series_plot(filtered, show_unc)
113
+
114
+ def update_heatmap(min_dec, max_dec):
115
+ return create_heatmap(df, (min_dec, max_dec))
116
+
117
+ # Event handling
118
+ inputs = [show_uncertainty, min_year, max_year]
119
+ for component in inputs:
120
+ component.change(
121
+ update_time_series,
122
+ inputs=inputs,
123
+ outputs=time_series
124
+ )
 
 
125
 
126
+ decade_inputs = [min_decade, max_decade]
127
+ for component in decade_inputs:
128
+ component.change(
129
+ update_heatmap,
130
+ inputs=decade_inputs,
131
+ outputs=heatmap
132
+ )
133
 
134
  # Initial renders
135
  demo.load(
136
+ fn=lambda: update_time_series(False, 1950, CURRENT_YEAR),
137
  outputs=time_series
138
  )
139
 
140
  demo.load(
141
+ fn=lambda: update_heatmap(1950, CURRENT_YEAR),
142
  outputs=heatmap
143
  )
144