Spaces:
Running
Running
File size: 6,163 Bytes
c717908 |
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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import streamlit as st
import pandas as pd
import numpy as np
import seaborn as sns
from PIL import Image
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics
st.sidebar.header("Dashboard")
st.sidebar.markdown("---")
app_mode = st.sidebar.selectbox('Select Page',['Introduction','Visualization','Prediction'])
df = pd.read_csv("transactions_dataset.csv")
tech_df = df.loc[df['sector'] == 'TECH']
if app_mode == "Introduction":
st.title("Introduction")
st.markdown("### Welcome to our ESG rankings Dashboard!")
#st.image("veh.jpeg", use_column_width=True)
st.markdown("#### Wondering what is ESG rankings relative to Investments")
st.markdown("Our company is a Health insurance company who is looking to improve their revenue model by expanding into a new sector: Vehicle Insurance.")
st.markdown("##### Objectives")
st.markdown("- Using other variables that contribute to investment over the years")
st.markdown("- Points that can be made: ESG growth over the years; correlation w Investment & social pressures")
st.markdown("- Does an increase ESG lead to increase in Investment? ")
num = st.number_input('No. of Rows', 5, 10)
head = st.radio('View from top (head) or bottom (tail)', ('Head', 'Tail'))
if head == 'Head':
st.dataframe(df.head(num))
else:
st.dataframe(df.tail(num))
st.text('(Rows,Columns)')
st.write(df.shape)
st.markdown("##### Key Variables")
st.dataframe(df.describe())
st.markdown("### Missing Values")
st.markdown("Null or NaN values.")
dfnull = df.isnull().sum()/len(df)*100
totalmiss = dfnull.sum().round(2)
st.write("Percentage of total missing values:",totalmiss)
st.write(dfnull)
if totalmiss <= 30:
st.success("We have less then 30 percent of missing values, which is good. This provides us with more accurate data as the null values will not significantly affect the outcomes of our conclusions. And no bias will steer towards misleading results. ")
else:
st.warning("Poor data quality due to greater than 30 percent of missing value.")
st.markdown(" > Theoretically, 25 to 30 percent is the maximum missing values are allowed, there's no hard and fast rule to decide this threshold. It can vary from problem to problem.")
st.markdown("### Completeness")
st.markdown(" The ratio of non-missing values to total records in dataset and how comprehensive the data is.")
st.write("Total data length:", len(df))
nonmissing = (df.notnull().sum().round(2))
completeness= round(sum(nonmissing)/len(df),2)
st.write("Completeness ratio:",completeness)
st.write(nonmissing)
if completeness >= 0.80:
st.success("We have completeness ratio greater than 0.85, which is good. It shows that the vast majority of the data is available for us to use and analyze. ")
else:
st.success("Poor data quality due to low completeness ratio( less than 0.85).")
elif app_mode == "Visualization":
st.title("Visualization")
# DATA VISUALISATION
tab1, tab2, tab3, tab4 = st.tabs(["SNS Plot", "Bar Chart", "Line Chart", "Pie Plot"])
#SNS plot
tab1.subheader("SNS plot")
tech_df = tech_df.sample(n=10000)
fig = sns.pairplot(tech_df)
tab1.pyplot(fig)
#Bar Graph
# User input for x-variable
columns = ['Region_Code', 'Gender', 'Vehicle_Age']
x_variable = tab2.selectbox("Select x-variable:", columns)
tab2.subheader(f"{x_variable} vs Price (INR)")
#data_by_variable = df.groupby(x_variable)['Annual_Premium'].mean()
#tab2.bar_chart(data_by_variable)
#Line Graph
tab3.subheader("Age vs Price")
#age_by_price = df.groupby('Age')['Annual_Premium'].mean()
#tab3.line_chart(age_by_price)
'''
tab4.subheader("Pie plot")
tab4.subheader("Response distribution by Vehicle Damage")
response_counts = df.groupby(['Vehicle_Damage', 'Response']).size().unstack(fill_value=0)
fig, ax = plt.subplots()
colors = ['#ff9999','#66b3ff']
damage_counts = response_counts.loc[1]
percentages = (damage_counts.values / damage_counts.sum()) * 100
labels = ['Yes', 'No']
ax.pie(percentages, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
ax.axis('equal')
tab4.pyplot(fig)
#Pie Plot2
tab4.subheader("Response Distribution by Not Previously Insured")
response_counts = df.groupby(['Previously_Insured', 'Response']).size().unstack(fill_value=0)
fig, ax = plt.subplots()
colors = ['#ff9999','#66b3ff']
prev_insurance_counts = response_counts.loc[0]
percentages = (prev_insurance_counts.values / prev_insurance_counts.sum()) * 100
labels = ['Yes', 'No']
ax.pie(percentages, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
ax.axis('equal')
tab4.pyplot(fig)
tab1, tab2, tab3, tab4 = st.tabs(["SNS Plot", "Bar Chart", "Line Chart", "Pie Plot"])
fig = sns.pairplot(df)
tab1.pyplot(fig)
'''
elif app_mode == "Prediction":
st.markdown("Prediction")
'''
# Changing "Yes" and "No" to 1 and 0
df.loc[df['Vehicle_Damage'] == "Yes", 'Vehicle_Damage'] = 1
df.loc[df['Vehicle_Damage'] == "No", 'Vehicle_Damage'] = 0
st.title("Prediction")
X = df[['Age', 'Region_Code', 'Driving_License','Vehicle_Damage', 'Previously_Insured']]
y = df['Annual_Premium']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
pred = lin_reg.predict(X_test)
plt.figure(figsize=(10,7))
plt.title("Actual vs. predicted Annual Premiums",fontsize=25)
plt.xlabel("Actual test set Annual Premiums",fontsize=18)
plt.ylabel("Predicted Annual Premiums", fontsize=18)
plt.scatter(x=y_test,y=pred)
plt.savefig('prediction.png')
st.image('prediction.png')
# Model Evaluation
st.markdown("Evaluation")
coeff_df = pd.DataFrame(lin_reg.coef_, X.columns, columns=['Coefficient'])
st.dataframe(coeff_df)
MAE = metrics.mean_absolute_error(y_test, pred)
MSE = metrics.mean_squared_error(y_test, pred)
RMSE = np.sqrt(metrics.mean_squared_error(y_test, pred))
st.write('MAE:', MAE)
st.write('MSE:', MSE)
st.write('RMSE:', RMSE)
''' |