Brick_Kilns_Evolution / fcb_zigzag.py
rishabh99's picture
Upload 3 files
41896b8 verified
raw
history blame
5.98 kB
import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objs as go
# Load the CSV file
file = "brick_kiln_lucknow_v1.csv" # Replace with the correct path to your CSV file
data = pd.read_csv(file)
# Streamlit app title
st.markdown("<h2 style='text-align: center;'>Brick Kiln Location and Conversion Visualization</h2>", unsafe_allow_html=True)
# Slider to select the year
year_selected = st.slider("Select the Year", min_value=int(data["Year made"].min()), max_value=int(data["fcb to zigzag"].max()), value=int(data["Year made"].min()), step=1)
filtered_data = data[data["Year made"] <= year_selected]
# # Calculate the change in fcbk to zigzag by checking the 'fcb to zigzag' column
filtered_data["Conversion"] = filtered_data.apply(
lambda row: "Converted" if row["Year made"] != row["fcb to zigzag"] else "No Conversion", axis=1
)
# Function to determine the status of each kiln based on the selected year
def get_status(row, year_selected):
if row["fcb to zigzag"]==2009:
return "fcbk"
elif year_selected == row["fcb to zigzag"]:
return "converted"
else:
return "zigzag"
# Apply the status function to each row
data["Status"] = data.apply(lambda row: get_status(row, year_selected), axis=1)
filtered_data_conv = data[data["Year made"] <= year_selected]
filtered_data_conv["Type"] = filtered_data_conv["Type"].map({0: "fcbk", 1: "zigzag"})
filtered_data["Type"] = filtered_data["Type"].map({0: "fcbk", 1: "Zigzag"})
# Count the total brick kilns, fcbk, zigzag, and conversions
total_kilns = len(filtered_data)
fcbk_count = filtered_data[(filtered_data["Type"] == "fcbk")].shape[0]
zigzag_count = filtered_data_conv[(filtered_data_conv["Type"] == 'zigzag')].shape[0]
converted_count = filtered_data_conv[filtered_data_conv["Status"] == "converted"].shape[0]
# Display the total count and conversions
st.subheader(f"Total Brick Kilns up to Year {year_selected}: {total_kilns}")
st.write(f"Fcbk: {fcbk_count}",' and ' f"Zigzag: {zigzag_count}")
# st.write(f"fcbk: {fcbk_count}")
# st.write(f"zigzag: {zigzag_count}")
st.write(f"Converted from fcbk to zigzag: {converted_count}")
# Plotting the filtered data points on a map, with different colors for statuses
fig_filtered = px.scatter_mapbox(
data,
lat="Lat",
lon="Lon",
color="Status",
color_discrete_map={"fcbk": "blue", "converted": "green", "zigzag": "red"}, # Set colors for fcbk, converted, and zigzag kilns
mapbox_style="carto-positron",
hover_name="Type",
zoom=8.5,
center={"lat": 26.8467, "lon": 80.9462},
title=f"Brick Kiln Locations and Status up to Year {year_selected}",
height=600,
width=600
)
# # Display the map in Streamlit
# st.plotly_chart(fig_filtered)
# Yearly count of fcbk and zigzag kilns up to the selected year
yearly_summary = filtered_data.groupby("Year made")["Type"].value_counts().unstack(fill_value=0)
# Adjust the layout to display the table next to the map
col1, col2 = st.columns([3, 1.5])
with col1:
st.plotly_chart(fig_filtered)
with col2:
st.subheader("Yearly Kiln Made")
st.dataframe(yearly_summary)
# Historical data for brick kilns
years = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022]
brick_kilns_total = [117, 314, 376, 396, 408, 432, 433, 454, 461, 466, 470, 477, 478]
brick_kilns_fcb = [52, 127, 159, 171, 178, 191, 192, 206, 208, 209, 209, 209, 209]
brick_kilns_zigzag = [65, 187, 217, 225, 230, 241, 241, 248, 253, 257, 261, 268, 269]
# Creating the line plot for the number of brick kilns over the years
fig_line = go.Figure()
fig_line.add_trace(go.Scatter(x=years, y=brick_kilns_total, mode='lines+markers', name='Total Brick Kilns', line=dict(color='red')))
fig_line.add_trace(go.Scatter(x=years, y=brick_kilns_fcb, mode='lines+markers', name='FCBTK', line=dict(color='blue')))
fig_line.add_trace(go.Scatter(x=years, y=brick_kilns_zigzag, mode='lines+markers', name='Zigzag Brick Kilns', line=dict(color='green')))
# Adding labels and title to the line chart
fig_line.update_layout(
title="Number of Brick Kilns Over Years in Lucknow",
xaxis_title="Years",
yaxis_title="Number of Brick Kilns",
yaxis=dict(tickmode='linear', tick0=0, dtick=25,showgrid=False),
width=900
)
# Adding vertical line for the selected year
fig_line.add_vline(x=year_selected, line_dash="dash", line_color="black", annotation_text=f"Year {year_selected}")
# Displaying the line chart
st.plotly_chart(fig_line)
# # Emission factors
# emission_factor_pm25_fcb = 15000 * 6.8 # grams/day per FCB kiln
# emission_factor_pm10_fcb = 15000 * 4.08 # grams/day per FCB kiln
# emission_factor_pm25_zigzag = 15000 * 3.5 # grams/day per Zigzag kiln
# emission_factor_pm10_zigzag = 15000 * 2.1 # grams/day per Zigzag kiln
# # Calculating annual emissions for each year
# emission_pm25 = []
# emission_pm10 = []
# for fcb, zigzag in zip(brick_kilns_fcb, brick_kilns_zigzag):
# annual_emission_pm25 = (fcb * emission_factor_pm25_fcb + zigzag * emission_factor_pm25_zigzag) * 365 / 1e6 # Convert to metric tons
# annual_emission_pm10 = (fcb * emission_factor_pm10_fcb + zigzag * emission_factor_pm10_zigzag) * 365 / 1e6 # Convert to metric tons
# emission_pm25.append(annual_emission_pm25)
# emission_pm10.append(annual_emission_pm10)
# # Creating the plot
# fig = go.Figure()
# fig.add_trace(go.Scatter(x=years, y=emission_pm25, mode='lines+markers', name='PM2.5 Emissions', line=dict(color='orange')))
# fig.add_trace(go.Scatter(x=years, y=emission_pm10, mode='lines+markers', name='PM10 Emissions', line=dict(color='blue')))
# # Adding labels and title to the line chart
# fig.update_layout(
# title="Annual PM2.5 and PM10 Emissions from Brick Kilns in Lucknow",
# xaxis_title="Year",
# yaxis_title="Annual Emissions (Metric Tons)",
# yaxis=dict(tickmode='linear', tick0=0, dtick=50),
# width=900
# )
# # Displaying the plot
# fig.show()