from streamlit.components.v1 import html
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt
import io
import pandas as pd
def click_element(element):
open_script = f""
html(open_script, width=0, height=0)
sample = {'Body Type': 2,
'Sex': 0,
'How Often Shower': 1,
'Social Activity': 2,
'Monthly Grocery Bill': 230,
'Frequency of Traveling by Air': 2,
'Vehicle Monthly Distance Km': 210,
'Waste Bag Size': 2,
'Waste Bag Weekly Count': 4,
'How Long TV PC Daily Hour': 7,
'How Many New Clothes Monthly': 26,
'How Long Internet Daily Hour': 1,
'Energy efficiency': 0,
'Do You Recyle_Paper': 0,
'Do You Recyle_Plastic': 0,
'Do You Recyle_Glass': 0,
'Do You Recyle_Metal': 1,
'Cooking_with_stove': 1,
'Cooking_with_oven': 1,
'Cooking_with_microwave': 0,
'Cooking_with_grill': 0,
'Cooking_with_airfryer': 1,
'Diet_omnivore': 0,
'Diet_pescatarian': 1,
'Diet_vegan': 0,
'Diet_vegetarian': 0,
'Heating Energy Source_coal': 1,
'Heating Energy Source_electricity': 0,
'Heating Energy Source_natural gas': 0,
'Heating Energy Source_wood': 0,
'Transport_private': 0,
'Transport_public': 1,
'Transport_walk/bicycle': 0,
'Vehicle Type_None': 1,
'Vehicle Type_diesel': 0,
'Vehicle Type_electric': 0,
'Vehicle Type_hybrid': 0,
'Vehicle Type_lpg': 0,
'Vehicle Type_petrol': 0}
def input_preprocessing(data):
data["Body Type"] = data["Body Type"].map({'underweight':0, 'normal':1, 'overweight':2, 'obese':3})
data["Sex"] = data["Sex"].map({'female':0, 'male':1})
data = pd.get_dummies(data, columns=["Diet","Heating Energy Source","Transport","Vehicle Type"], dtype=int)
data["How Often Shower"] = data["How Often Shower"].map({'less frequently':0, 'daily':1, "twice a day":2, "more frequently":3})
data["Social Activity"] = data["Social Activity"].map({'never':0, 'sometimes':1, "often":2})
data["Frequency of Traveling by Air"] = data["Frequency of Traveling by Air"].map({'never':0, 'rarely':1, "frequently":2, "very frequently":3})
data["Waste Bag Size"] = data["Waste Bag Size"].map({'small':0, 'medium':1, "large":2, "extra large":3})
data["Energy efficiency"] = data["Energy efficiency"].map({'No':0, 'Sometimes':1, "Yes":2})
return data
def hesapla(model,ss, sample_df):
copy_df = sample_df.copy()
travels = copy_df[["Frequency of Traveling by Air",
"Vehicle Monthly Distance Km",
'Transport_private',
'Transport_public',
'Transport_walk/bicycle',
'Vehicle Type_None',
'Vehicle Type_diesel',
'Vehicle Type_electric',
'Vehicle Type_hybrid',
'Vehicle Type_lpg',
'Vehicle Type_petrol']]
copy_df[list(set(copy_df.columns) - set(travels.columns))] = 0
travel = np.exp(model.predict(ss.transform(copy_df)))
copy_df = sample_df.copy()
energys = copy_df[[ 'Heating Energy Source_coal','How Often Shower', 'How Long TV PC Daily Hour',
'Heating Energy Source_electricity','How Long Internet Daily Hour',
'Heating Energy Source_natural gas',
'Cooking_with_stove',
'Cooking_with_oven',
'Cooking_with_microwave',
'Cooking_with_grill',
'Cooking_with_airfryer',
'Heating Energy Source_wood','Energy efficiency']]
copy_df[list(set(copy_df.columns) - set(energys.columns))] = 0
energy = np.exp(model.predict(ss.transform(copy_df)))
copy_df = sample_df.copy()
wastes = copy_df[[ 'Do You Recyle_Paper','How Many New Clothes Monthly',
'Waste Bag Size',
'Waste Bag Weekly Count',
'Do You Recyle_Plastic',
'Do You Recyle_Glass',
'Do You Recyle_Metal',
'Social Activity',]]
copy_df[list(set(copy_df.columns) - set(wastes.columns))] = 0
waste = np.exp(model.predict(ss.transform(copy_df)))
copy_df = sample_df.copy()
diets = copy_df[[ 'Diet_omnivore',
'Diet_pescatarian',
'Diet_vegan',
'Diet_vegetarian', 'Monthly Grocery Bill','Transport_private',
'Transport_public',
'Transport_walk/bicycle',
'Heating Energy Source_coal',
'Heating Energy Source_electricity',
'Heating Energy Source_natural gas',
'Heating Energy Source_wood',
]]
copy_df[list(set(copy_df.columns) - set(diets.columns))] = 0
diet = np.exp(model.predict(ss.transform(copy_df)))
hesap = {"Travel": travel[0], "Energy": energy[0], "Waste": waste[0], "Diet": diet[0]}
return hesap
def chart(model, scaler,sample_df, prediction):
p = hesapla(model, scaler,sample_df)
bbox_props = dict(boxstyle="round", facecolor="white", edgecolor="white", alpha=0.7)
plt.figure(figsize=(10, 10))
patches, texts = plt.pie(x=p.values(),
labels=p.keys(),
explode=[0.03] * 4,
labeldistance=0.75,
colors=["#29ad9f", "#1dc8b8", "#99d9d9", "#b4e3dd" ], shadow=True,
textprops={'fontsize': 20, 'weight': 'bold', "color": "#000000ad"})
for text in texts:
text.set_horizontalalignment('center')
data = io.BytesIO()
plt.savefig(data, transparent=True)
background = Image.open("./media/default.png")
draw = ImageDraw.Draw(background)
font1 = ImageFont.truetype(font="./style/ArchivoBlack-Regular.ttf", size=50)
font = ImageFont.truetype(font="./style/arialuni.ttf", size=50)
draw.text(xy=(320, 50), text=f" How big is your\nCarbon Footprint?", font=font1, fill="#039e8e", stroke_width=1, stroke_fill="#039e8e")
draw.text(xy=(370, 250), text=f"Monthly Emission \n\n {prediction:.0f} kgCO₂e", font=font, fill="#039e8e", stroke_width=1, stroke_fill="#039e8e")
data_back = io.BytesIO()
background.save(data_back, "PNG")
background = Image.open(data_back).convert('RGBA')
piechart = Image.open(data)
ayak = Image.open("./media/ayak.png").resize((370, 370))
bg_width, bg_height = piechart.size
ov_width, ov_height = ayak.size
x = (bg_width - ov_width) // 2
y = (bg_height - ov_height) // 2
piechart.paste(ayak, (x, y), ayak.convert('RGBA'))
background.paste(piechart, (40, 200), piechart.convert('RGBA'))
data2 = io.BytesIO()
background.save(data2, "PNG")
background = Image.open(data2).resize((700, 700))
data3 = io.BytesIO()
background.save(data3, "PNG")
return data3