|
import requests |
|
import streamlit as st |
|
import time |
|
import math |
|
import pickle as pk |
|
import seaborn as sns |
|
import matplotlib.pyplot as plt |
|
import pandas as pd |
|
import numpy as np |
|
import streamlit as st |
|
import plotly.express as px |
|
import pandas as pd |
|
|
|
def get_weather_details(city_name): |
|
base_url = "https://api.openweathermap.org/data/2.5/weather" |
|
params = { |
|
'q': city_name, |
|
'appid': "d73ec4f18aca81c32b1836a8ac2506e0" |
|
} |
|
|
|
try: |
|
response = requests.get(base_url, params=params) |
|
data = response.json() |
|
|
|
|
|
if response.status_code == 200: |
|
|
|
weather_details = { |
|
'city': city_name, |
|
'temperature': data['main']['temp'], |
|
'description': data['weather'][0]['description'], |
|
'humidity': data['main']['humidity'], |
|
'wind_speed': data['wind']['speed'] |
|
} |
|
return weather_details |
|
else: |
|
st.write("Error {}: {}".format(response.status_code, data['message'])) |
|
return None |
|
except Exception as e: |
|
st.write("An error occurred:", e) |
|
return None |
|
|
|
|
|
|
|
def run_weather_app(): |
|
st.title("City Weather Overview") |
|
try: |
|
global city_name |
|
city_name = st.selectbox('Enter City',("Bagalkot", "Ballari", "Belagavi", "Bidar", "Chikkaballapur", "Chikkamagaluru", "Chitradurga", "Davanagere", "Dharwad", "Gadag", "Hassan", "Haveri", "Kalaburagi", "Kodagu", "Kolar", "Koppal", "Mandya", "Mysuru", "Raichur", "Ramanagara", "Shivamogga", "Tumakuru", "Udupi", "Uttara Kannada", "Vijayapura","Yadgir"),key="unique_key_2") |
|
|
|
if city_name: |
|
|
|
|
|
|
|
prediction = '' |
|
if st.button('Show'): |
|
progress = st.progress(0) |
|
for i in range(100): |
|
time.sleep(0.005) |
|
progress.progress(i+1) |
|
|
|
weather_data = get_weather_details(city_name) |
|
if weather_data: |
|
column1, column2 = st.columns(2) |
|
column1.metric("City", weather_data['city'].capitalize()) |
|
column1.metric("Temperature",value=f"{ round(weather_data['temperature'] - 273.15, 2) } °C",delta= weather_data['description']) |
|
|
|
column1.metric("Humidity",value= f"{weather_data['humidity']} %") |
|
column1.metric("Wind Speed",value= f"{math.ceil(weather_data['wind_speed']*3.6)} km/hr") |
|
else: |
|
st.error("Invalid City Name") |
|
|
|
except Exception as e: |
|
st.error("An error occurred:", e) |
|
|
|
return None |
|
|
|
forecast_model = pk.load(open('rain_forecast_model.pkl','rb')) |
|
|
|
def run_forecast(): |
|
global forecast_data |
|
num_months = st.number_input('Enter the number of months to forecast', min_value=1, max_value=48, value=1, step=1) |
|
|
|
forecast_data = forecast_model.forecast(steps = 12+num_months) |
|
st.title('Monthly Rainfall Overview') |
|
df = pd.DataFrame({'Month': forecast_data.index.strftime('%Y-%m'), 'Values': np.round(forecast_data.values, 2)}) |
|
|
|
fig = px.bar(df, x='Month', y='Values', text='Values', color='Values', |
|
labels={'Values': 'Precipitation'}, |
|
title='Monthly Forecast Data', |
|
template='plotly', |
|
color_continuous_scale='viridis') |
|
|
|
fig.update_traces(texttemplate='%{text:.2f}', textposition='outside') |
|
|
|
|
|
|
|
st.plotly_chart(fig) |
|
|
|
|
|
|
|
def india_precipitation(): |
|
st.title('India Monthly Precipitation') |
|
|
|
data = pd.DataFrame({'Month': forecast_data.index.strftime('%Y-%m'), 'Precipitation': np.round(forecast_data.values, 2)}) |
|
|
|
fig = px.choropleth(data, locations=["India"] * len(data), |
|
locationmode="country names", |
|
color='Precipitation', |
|
hover_name='Month', |
|
animation_frame='Month', |
|
range_color=[forecast_data.min(), forecast_data.max()], |
|
color_continuous_scale='Viridis' |
|
) |
|
|
|
st.plotly_chart(fig) |
|
|
|
|
|
|
|
|
|
def forecast_data_for_tab(): |
|
forecast_df = pd.DataFrame() |
|
forecast_df['Months'] = forecast_data.index.strftime('%Y-%m') |
|
forecast_df['Precipitation'] = forecast_data.values |
|
st.table(forecast_df) |
|
|
|
|
|
csv_button = st.download_button( |
|
label="Download Forecast Data as CSV", |
|
data=forecast_df.to_csv(index=False).encode('utf-8'), |
|
file_name='forecast_data.csv', |
|
mime='text/csv' |
|
) |
|
|
|
|
|
|
|
def weather_forecast_app(): |
|
|
|
if True: |
|
run_weather_app() |
|
if True: |
|
tab1, tab2, tab3 = st.tabs(['Forecast Barplot', 'Forecast data', 'Map']) |
|
with tab1: |
|
run_forecast() |
|
with tab2: |
|
forecast_data_for_tab() |
|
with tab3: |
|
india_precipitation() |
|
|
|
|
|
|