Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add styling for page #3

Open
wants to merge 57 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
af53d3d
Impact7: minumal app with streamlit and example data
Nov 11, 2023
be05010
Initial example dataset
Nov 11, 2023
4184472
Fixed seed initial example dataset
Nov 11, 2023
c753c79
fixed ~
Nov 11, 2023
4ae419e
Merge branch 'minimal_app' of https://github.com/abuonau/hack-n-lead-…
Nov 11, 2023
483b2a7
Merge pull request #1 from abuonau/minimal_app
Rizalinko Nov 11, 2023
a92347c
Added uplad file button and a couple of fields
Nov 11, 2023
6963023
Merge branch 'main' of https://github.com/abuonau/hack-n-lead-starter…
Nov 11, 2023
0f14691
Adding Acitivities sample table
Nov 11, 2023
668dffe
Merge pull request #2 from abuonau/dataset_production
abuonau Nov 11, 2023
328b6c3
Added plotly for the charts and dashboards
Nov 11, 2023
33ea69c
Merge pull request #3 from abuonau/minimal_app
Rizalinko Nov 11, 2023
f1c7869
Adding Acitivities and Participant sample table
Nov 11, 2023
edd407a
Merge pull request #4 from abuonau/dataset_production
abuonau Nov 11, 2023
9ce9aef
Added index to OrganizationTable
Nov 11, 2023
808c165
Merge pull request #5 from abuonau/dataset_production
abuonau Nov 11, 2023
0e0958d
Updated tables with some vars for KPI estimations
Nov 11, 2023
59b446f
Merge pull request #6 from abuonau/dataset_production
abuonau Nov 11, 2023
ce26026
FEAT: Added table merging
Nov 11, 2023
370fc13
Merge pull request #7 from abuonau/dataset_production
abuonau Nov 11, 2023
093c0c2
Add the side bar with the description fo the data structure
Nov 12, 2023
68770da
Merge pull request #8 from abuonau/minimal_app
Rizalinko Nov 12, 2023
b5ff2e8
Add download example dataset option
Nov 12, 2023
5cc1a0a
Merge pull request #9 from abuonau/minimal_app
Rizalinko Nov 12, 2023
1e06544
Rstructure sttramlit_app.py
Nov 12, 2023
dc97dab
Merge pull request #10 from abuonau/minimal_app
Rizalinko Nov 12, 2023
405bf08
FIX + FEAT: Fixed issue with month column, added merge in separate sc…
Nov 12, 2023
f670c80
Merge pull request #11 from abuonau/dataset_production
abuonau Nov 12, 2023
b6d4fef
Add pie charts for the Participants
Nov 12, 2023
b584d9e
Merge pull request #12 from abuonau/minimal_app
Rizalinko Nov 12, 2023
e455127
Moved input info to the sidebar
Nov 12, 2023
663803d
Merge pull request #13 from abuonau/minimal_app
Rizalinko Nov 12, 2023
107fc2c
Add logo upload
Nov 12, 2023
984380a
Merge pull request #14 from abuonau/minimal_app
Rizalinko Nov 12, 2023
15c9f2e
FIX: fixed issue with monthly split
Nov 12, 2023
a880c9d
Merge pull request #15 from abuonau/dataset_production
abuonau Nov 12, 2023
8f191e9
FIX: uploaded non updated tot table
Nov 12, 2023
e01dc2d
Merge pull request #16 from abuonau/dataset_production
abuonau Nov 12, 2023
e2d71ae
add styling
subrockmann Nov 12, 2023
f3e65ae
Merge pull request #17 from abuonau/styling
subrockmann Nov 12, 2023
b779770
create column layout
subrockmann Nov 12, 2023
b97c2a9
Merge pull request #18 from abuonau/styling
subrockmann Nov 12, 2023
c6cd5d7
added input field for the impact
Nov 12, 2023
5236179
integrated to dashboard
Nov 12, 2023
93c001f
Merge branch 'main' into minimal_app
Rizalinko Nov 12, 2023
66c554e
Merge pull request #19 from abuonau/minimal_app
Rizalinko Nov 12, 2023
1febfc2
removed the import
Nov 12, 2023
e8f68fd
Merge branch 'minimal_app' of https://github.com/abuonau/hack-n-lead-…
Nov 12, 2023
048f8e7
Merge pull request #20 from abuonau/minimal_app
Rizalinko Nov 12, 2023
379e1e3
small fix
Nov 12, 2023
d7f29b1
Merge pull request #21 from abuonau/minimal_app
Rizalinko Nov 12, 2023
fcf4bcc
added tablefor the profession change
Nov 12, 2023
acb778c
Merge pull request #22 from abuonau/minimal_app
Rizalinko Nov 12, 2023
3eaed00
added career transition visualization
subrockmann Nov 12, 2023
648d85e
companies plot
Nov 12, 2023
14982f9
Merge pull request #23 from abuonau/minimal_app
Rizalinko Nov 12, 2023
99aee2f
Merge branch 'main' into styling
subrockmann Nov 12, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .streamlit/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[theme]

# Primary accent for interactive elements
primaryColor = '#36c2e2'#'#7792E3'

# Background color for the main content area
backgroundColor = '#FFFFFF' #'#270AA0' #'#498069' #'#273346'

# Background color for sidebar and most interactive widgets
secondaryBackgroundColor = '#36C3E2' #'#B9F1C0'

# Color used for almost all text
textColor = '#16065B'# '#FFFFFF'

# Font family for all text in the app, except code blocks
# Accepted values (serif | sans serif | monospace)
# Default: "sans serif"
font = "sans serif"
322 changes: 322 additions & 0 deletions CreateSampleDataset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,322 @@
#%%
import pandas as pd
import random
from random import randint
#from Parameters import *
from MergeDatasets import *

TotBeneficiaries = 2000
months = ['January', 'February', 'March', 'April','May', 'June'
, 'July','August','September','October', 'November', 'December']

years = ['2022','2023']

n_max_activity_year = {'2022':3,'2023':5}
activities_names = ['hackaton', 'workshop','networking','deploy(impact)','coffee']

# Seed for reproducibility
random.seed(1)

# Generate number of activities for each month
n_activities =[random.randint(1, 5) for month in months]

# Helper function to Generate supporter enterprises
def GenerateNSupporterEnterprises(months,n_activities):
random.seed(1)
supporters = [0]*len(months)
for i in range(len(months)):
if i==0:
supporters[i]=randint(1,5)
else:
supporters[i]=round(supporters[i-1]+(n_activities[i]*0.5),0)
return supporters

#print(GenerateNSupporterEnterprises(months,n_activities))
#%%
# Helper function to Generate total donations
def GenerateTotDonations(months,n_activities):
random.seed(1)
contributions = [0]*len(months)
nsup = GenerateNSupporterEnterprises(months,n_activities)
for i in range(len(months)):
contribution=0
for n in range(0,int(nsup[i])):
contribution+=2000*random.random()
contributions[i] = round(contribution,0)
return contributions

def GenerateActivityID(months, n_activities):
act_id = [0]*len(months)
for j in range(len(months)):
act_id[j] = []
for i in range(n_activities[j]):
act_id[j].append(i)
return act_id

# Organization table
staff_data = {
'Month': months
,'N_staff': [random.randint(5, 10) for _ in range(len(months))]
,'Tot_Donations (CHF)': GenerateTotDonations(months,n_activities)
,'N_Esupporters':GenerateNSupporterEnterprises(months,n_activities)
, 'N_volunteers':[randint(4, 15) for i in range(len(months))]
,'N_activities': n_activities
,'Activity_id':GenerateActivityID(months, n_activities)
}
df_org = pd.DataFrame.from_dict(staff_data)
df_org.head()
df_org.to_csv("data/OrganizationTable.csv")
#%%
'''
dict_org = {'N_staff': {month: randint(5, 10) for month in months}
, 'N_Esupporters': GenerateNSupporterEnterprises()
, 'Tot_Donations (CHF)': GenerateTotDonations()
, 'N_volunteers': {month: randint(0, 10) for month in months}
,'N_activities': n_activities
,'Activity_id': {month:[i for i in range(0,n_activities[month])] for month in months}
}

df_org = pd.DataFrame.from_dict(dict_org)
df_org.index.name='Month'
df_org.head()
df_org.to_csv("data/OrganizationTable.csv")
'''


#%%
# Activities table
activities_duration = [24,4,10,2,2]
activities_tperw = [2,1,1,3,1]
activities_budget = [20000,12000,5000,12000,500]
activities_cost = [18000,9034,3250,11060,450]
activities_npart = [120,50,100,60,20]
activities_nwaitlist = [20,10,1,12,0]
activities_nvolunteers = [6,4,3,6,4]
activities_nstaff = [5,6,6,6,2]

#%%
def checkPartID(partID, rnd):
if rnd in partID:
return 'True'
else:
return 'False'

def GenerateParticipantID(nmax, npart):
partID = [-99]*npart
for i in range(npart):
rnd = randint(0,nmax)
check = checkPartID(partID, rnd)
while(check=='True'):
rnd = randint(0,nmax)
check = checkPartID(partID, rnd)
partID[i] = rnd
return partID

#%%
def DefineDropOut(act_id):
rnd = random.uniform(0,1)
threshold={'0':0.7,'1':0.9,'2':0.85,'3':0.85,'4':0.9}
if rnd<threshold[str(act_id)]:
return 0 #Not dropped-out
if rnd>=threshold[str(act_id)]:
return 1 #Dropped-out

def GenerateParticipantDropOut(npart, act_id):
partDO = [-99]*npart
for i in range(0,npart):
partDO[i] = DefineDropOut(act_id)
return partDO

#%%
avg_participation = [0.77,0.82,0.93,0.94,0.95]

#%%


data = []

# Populate the list with dictionaries for each month
for j, month in enumerate(months):
if j<12:
n_act_month = n_activities[j]

#Create a dictionary for the current month
month_data = {'Month': [month] * n_act_month}
print(month_data)
month_data['Activity_id'] = [i for i in range(len(month_data['Month']))]
month_data['Tot_budget'] = [activities_budget[month_data['Activity_id'][i]]+randint(-2,2)*1000 for i in range(len(month_data['Month']))]
month_data['Tot_cost'] = [activities_cost[month_data['Activity_id'][i]]+randint(-2,2)*random.uniform(150,200) for i in range(len(month_data['Month']))]
month_data['n_beneficiaries'] = [activities_npart[month_data['Activity_id'][i]]+randint(-15,0) for i in range(len(month_data['Month']))]
month_data['n_volunteers'] = [activities_nvolunteers[month_data['Activity_id'][i]]+randint(-2,2) for i in range(len(month_data['Month']))]
month_data['n_staff'] = [activities_nstaff[month_data['Activity_id'][i]]+randint(-2,2) for i in range(len(month_data['Month']))]
month_data['beneficiary_id'] = [ GenerateParticipantID(TotBeneficiaries, activities_npart[month_data['Activity_id'][i]]) for i in range(len(month_data['Month']))]
month_data['beneficiary_dropout'] = [GenerateParticipantDropOut(activities_npart[month_data['Activity_id'][i]],i) for i in range(len(month_data['Month']))]

# Append the dictionary to the data list
data.append(month_data)

activities = data
'''
,'Activity_id': [i for i in range(0,5)]
,'name':[activities_names[i] for i in range(0,5)]
,'Tot. duration (hours)': [activities_duration[i] for i in range(5)]
,'times_per_week' : [activities_tperw[i] for i in range(5)]
,'Tot_budget' : [activities_budget[i] for i in range(5)]
,'Tot_cost' : [activities_cost[i] for i in range(5)]
}
'''
'''
for j in range(len(months)):
for i in range(0,5):
activity = {}
activity['id'] = i
activity['name'] = activities_names[i]
activity['Tot. duration (hours)'] = activities_duration[i]
activity['times_per_week'] = activities_tperw[i]
activity['Tot_budget'] = activities_budget[i]
activity['Tot_cost'] = activities_cost[i]
#activity['n_beneficiaries'] = activities_npart[i]
activity['n_volunteers'] = activities_nvolunteers[i]
activity['n_staff'] = activities_nstaff[i]
activity['n_waitlist'] = activities_nwaitlist[i]
activity['beneficiary_id'] = GenerateParticipantID(TotBeneficiaries, activities_npart[i])
activity['beneficiary_dropout'] = GenerateParticipantDropOut(activities_npart[i],i)
activity['average_participation'] = avg_participation[i]
activities['Month'].append(activity)
'''

# %%
df_act = pd.DataFrame.from_dict(activities)
column_list = []
for column in df_act.columns:
column_list.append(column)
df_act_dummy = df_act.explode(column_list).reset_index(drop=True)

df_act_dummy.head()


# %%
df_act_dummy.to_csv("data/ActivitiesTable.csv")
# %%
def GenerateGender():
rnd = random.uniform(0,1)
if rnd<0.7:
return 'F'
if rnd>=0.7 and rnd<0.88:
return 'M'
if rnd>=0.88 and rnd<0.95:
return 'nonbinary'
if rnd>0.95:
return 'NS'

def GenerateAge():
rnd = random.uniform(0,1)
if rnd<0.2:
return randint(20,30)
if rnd>=0.2 and rnd<0.65:
return randint(30,40)
if rnd>=0.65 and rnd<0.85:
return randint(40,50)
if rnd>=0.85 and rnd<0.97:
return randint(50,60)
if rnd>=0.97:
return randint(60,90)

def GenerateEducation():
rnd = random.uniform(0,1)
if rnd<0.1:
return 'HighSchool'
if rnd>=0.1 and rnd<0.4:
return 'Bachelor'
if rnd>=0.4 and rnd<0.75:
return 'Master'
if rnd>=0.75:
return 'PhD'

def GenerateEmploymentStatus():
rnd = random.uniform(0,1)
if rnd<0.5:
return 'Employed'
if rnd>=0.5:
return 'Unemployed'

#%%
start_fields = {'Business':0.1,'Construction':0.01,'Education':0.13,'Engineering':0.1,'Farming':0.01,'Health':0.02,'Hospitality':0.04,'Law':0.02,'Management':0.02,'Media':0.05,'Administration':0.02,'Science':0.18,'IT':0.3}
end_fields = {'Business':0.09,'Construction':0.008,'Education':0.09,'Engineering':0.05,'Farming':0.009,'Health':0.018,'Hospitality':0.036,'Law':0.016,'Management':0.02,'Media':0.046,'Administration':0.019,'Science':0.14,'IT':0.458}

def check_sum_to_one(di):
sum = 0
for key in di.keys():
sum+=di[key]
print(sum)
return

#check_sum_to_one(start_fields)
#check_sum_to_one(end_fields)
#%%
def GenerateStartField(start_fields):
rnd = random.uniform(0,1)
#print(rnd)
thr = [0]*(len(start_fields)+1)
for i,key in enumerate(start_fields):
thr[i+1]=thr[i]+start_fields[key]
#print(thr)
for i,key in enumerate(start_fields):
if rnd>thr[i] and rnd<=thr[i+1]:
#print(rnd, thr[i],thr[i+1])
return key


GenerateStartField(start_fields)
#%%
def GenerateEndField(start,start_fields,end_fields):
end = ''
if start!='IT':
rnd = random.uniform(0,1)
ratio = end_fields[start]/start_fields[start]
#print(ratio)
if rnd<=1-ratio:
end = 'IT'
else:
end = start
else:
end = start
return end




#%%
#Generate participants
participants = []
for i in range(0,TotBeneficiaries):
participant = {}
participant['id'] = i
participant['gender'] = GenerateGender()
participant['age'] = GenerateAge()
participant['education'] = GenerateEducation()
#participant['employment_status'] = GenerateEmploymentStatus()
participant['start_field'] = GenerateStartField(start_fields)
participant['end_field'] = GenerateEndField(participant['start_field'],start_fields,end_fields)
participants.append(participant)

df_part = pd.DataFrame.from_dict(participants)
df_part.head()
df_part.to_csv("data/ParticipantsTable.csv")

#%%
MergeTables(df_org, df_act_dummy, df_part)
# %%

#%%
'''
def MergeTables(df_org, df_act_dummy, df_part):
df_org_dummy = df_org.explode('Activity_id')
df_act_dummy = df_act_dummy.explode(['beneficiary_id','beneficiary_dropout']).reset_index(drop=True)
df_1 = pd.merge(df_org_dummy, df_act_dummy, how="left", on=["Month","Activity_id"])
df_tot = pd.merge(df_1, df_part, how="left", left_on="beneficiary_id", right_on = "id")
return df_tot
df_tot = MergeTables(df_org, df_act_dummy, df_part)
df_tot.head()
'''
# %%
Loading