SantanuBanerjee commited on
Commit
7f91fc3
·
verified ·
1 Parent(s): 77698e2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -32
app.py CHANGED
@@ -3,41 +3,62 @@ import pandas as pd
3
 
4
  def data_pre_processing(file_responses):
5
  # Financial Weights can be anything (ultimately the row-wise weights are aggregated and the corresponding fractions are obtained from that rows' total tax payed)
6
-
7
- # Define the columns to be processed
8
- try:
9
 
 
10
  # Convert columns to numeric and fill NaN values with 0
11
-
12
-
13
  file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] = pd.to_numeric(file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'], errors='coerce').fillna(0)
14
  file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] = pd.to_numeric(file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'], errors='coerce').fillna(0)
15
  file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'] = pd.to_numeric(file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'], errors='coerce').fillna(0)
16
  file_responses['Latest estimated Tax payment?'] = pd.to_numeric(file_responses['Latest estimated Tax payment?'], errors='coerce').fillna(0)
17
 
18
-
19
-
20
-
21
-
22
-
23
-
24
- # Adding a new column 'Total Allocation' by summing specific columns by their names
25
  file_responses['TotalWeightageAllocated'] = file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] + file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] + file_responses['Personal_TaxDirection_3_TaxWeightageAllocated']
26
-
27
- # Calculating the actual TaxAmount to be allocated against each WISH (by rewriting the existing columns)
28
- file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] = file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] * file_responses['Latest estimated Tax payment?'] / file_responses['TotalWeightageAllocated']
29
- file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] = file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] * file_responses['Latest estimated Tax payment?'] / file_responses['TotalWeightageAllocated']
30
- file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'] = file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'] * file_responses['Latest estimated Tax payment?'] / file_responses['TotalWeightageAllocated']
31
-
32
-
33
 
 
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
 
37
- file_responses = file_responses[[
38
- "Personal_TaxDirection_1_Wish",
39
- "Personal_TaxDirection_2_TaxWeightageAllocated"
40
- ]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
 
43
 
@@ -64,7 +85,7 @@ def data_pre_processing(file_responses):
64
  # file_responses[tax_payment_col] * file_responses[col] / file_responses['Total Allocation']
65
  # ).fillna(0)
66
 
67
- return file_responses
68
  except Exception as e:
69
  return str(e)
70
 
@@ -119,20 +140,17 @@ interface = gr.Interface(
119
 
120
  description=(
121
  "<p style='font-weight: bold; font-size: 15px;'>Upload an Excel file to process and download the result or use the Example files:</p>"
122
- "<p style='font-weight: bold; font-size: 15px;'>(click on any of them to directly process the file and Download the result)</p>"
123
 
124
  "<p style='font-weight: bold; font-size: 15px; text-align: right;'>Processed output contains a Project Proposal for each Location~Problem paired combination (i.e. each cell).</p>"
125
- "<p style='font-weight: bold; font-size: 15px; text-align: right;'>Corresponding Budget Allocation and estimated Project Completion Time are provided in different sheets.</p>"
126
 
 
127
 
128
- "<p style='font-weight: bold; font-size: 15px; text-align: justify;'>This tool allows for the systematic evaluation and proposal of solutions tailored to specific location-problem pairs, ensuring efficient resource allocation and project planning.</p>"
129
-
130
 
131
 
132
- "<p style='font-size: 11px; color: gray; text-align: center'>Note: The example files provided above are for demonstration purposes. "
133
- "Feel free to upload your own Excel files to see the results. If you have any questions, refer to the documentation-links or contact "
134
- "<a href='https://www.change.org/p/democracy-evolution-ensuring-humanity-s-eternal-existence-through-taxdirection' target='_blank'>support</a>."
135
- "\t For more information, visit <a href='https://santanban.github.io/TaxDirection/' target='_blank'>#TaxDirection weblink</a>.</p>"
136
  ) # Solid description with right-aligned second sentence
137
 
138
  )
 
3
 
4
  def data_pre_processing(file_responses):
5
  # Financial Weights can be anything (ultimately the row-wise weights are aggregated and the corresponding fractions are obtained from that rows' total tax payed)
6
+
7
+ try: # Define the columns to be processed
 
8
 
9
+ # Developing Numeric Columns
10
  # Convert columns to numeric and fill NaN values with 0
 
 
11
  file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] = pd.to_numeric(file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'], errors='coerce').fillna(0)
12
  file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] = pd.to_numeric(file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'], errors='coerce').fillna(0)
13
  file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'] = pd.to_numeric(file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'], errors='coerce').fillna(0)
14
  file_responses['Latest estimated Tax payment?'] = pd.to_numeric(file_responses['Latest estimated Tax payment?'], errors='coerce').fillna(0)
15
 
16
+ # Adding a new column 'TotalWeightageAllocated' by summing specific columns by their names
 
 
 
 
 
 
17
  file_responses['TotalWeightageAllocated'] = file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] + file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] + file_responses['Personal_TaxDirection_3_TaxWeightageAllocated']
 
 
 
 
 
 
 
18
 
19
+
20
 
21
+ # Creating Datasets (we assume everything has been provided to us in English, or the translations have been done already)
22
+ # Renaming the datasets into similar column headings
23
+ initial_dataset_1 = file_responses.rename(columns={
24
+ 'Personal_TaxDirection_1_Wish': 'Problem_Description',
25
+ 'Personal_TaxDirection_1_GeographicalLocation': 'Geographical_Location',
26
+ 'Personal_TaxDirection_1_TaxWeightageAllocated': 'Financial_Weight'
27
+ })[['Problem_Description', 'Geographical_Location', 'Financial_Weight']]
28
+
29
+ initial_dataset_2 = file_responses.rename(columns={
30
+ 'Personal_TaxDirection_2_Wish': 'Problem_Description',
31
+ 'Personal_TaxDirection_2_GeographicalLocation': 'Geographical_Location',
32
+ 'Personal_TaxDirection_2_TaxWeightageAllocated': 'Financial_Weight'
33
+ })[['Problem_Description', 'Geographical_Location', 'Financial_Weight']]
34
+
35
+ initial_dataset_3 = file_responses.rename(columns={
36
+ 'Personal_TaxDirection_3_Wish': 'Problem_Description',
37
+ 'Personal_TaxDirection_3_GeographicalLocation': 'Geographical_Location',
38
+ 'Personal_TaxDirection_3_TaxWeightageAllocated': 'Financial_Weight'
39
+ })[['Problem_Description', 'Geographical_Location', 'Financial_Weight']]
40
 
41
 
42
+
43
+ # Calculating the actual TaxAmount to be allocated against each WISH (by overwriting the newly created columns)
44
+ initial_dataset_1['Financial_Weight'] = file_responses['Personal_TaxDirection_1_TaxWeightageAllocated'] * file_responses['Latest estimated Tax payment?'] / file_responses['TotalWeightageAllocated']
45
+ initial_dataset_2['Financial_Weight'] = file_responses['Personal_TaxDirection_2_TaxWeightageAllocated'] * file_responses['Latest estimated Tax payment?'] / file_responses['TotalWeightageAllocated']
46
+ initial_dataset_3['Financial_Weight'] = file_responses['Personal_TaxDirection_3_TaxWeightageAllocated'] * file_responses['Latest estimated Tax payment?'] / file_responses['TotalWeightageAllocated']
47
+
48
+ # Removing useless rows
49
+ # Drop rows where Problem_Description is NaN or an empty string
50
+ initial_dataset_1 = initial_dataset_1.dropna(subset=['Problem_Description'], axis=0)
51
+ initial_dataset_2 = initial_dataset_2.dropna(subset=['Problem_Description'], axis=0)
52
+ initial_dataset_3 = initial_dataset_3.dropna(subset=['Problem_Description'], axis=0)
53
+
54
+ # Convert 'Problem_Description' column to string type
55
+ initial_dataset_1['Problem_Description'] = initial_dataset_1['Problem_Description'].astype(str)
56
+ initial_dataset_2['Problem_Description'] = initial_dataset_2['Problem_Description'].astype(str)
57
+ initial_dataset_3['Problem_Description'] = initial_dataset_3['Problem_Description'].astype(str)
58
+
59
+ # Merging the Datasets
60
+ # Vertically concatenating (merging) the 3 DataFrames
61
+ merged_dataset = pd.concat([initial_dataset_1, initial_dataset_2, initial_dataset_3], ignore_index=True)
62
 
63
 
64
 
 
85
  # file_responses[tax_payment_col] * file_responses[col] / file_responses['Total Allocation']
86
  # ).fillna(0)
87
 
88
+ return merged_dataset
89
  except Exception as e:
90
  return str(e)
91
 
 
140
 
141
  description=(
142
  "<p style='font-weight: bold; font-size: 15px;'>Upload an Excel file to process and download the result or use the Example files:</p>"
 
143
 
144
  "<p style='font-weight: bold; font-size: 15px; text-align: right;'>Processed output contains a Project Proposal for each Location~Problem paired combination (i.e. each cell).</p>"
 
145
 
146
+ "<p style='font-weight: bold; font-size: 15px;'>(click on any of them to directly process the file and Download the result)</p>"
147
 
148
+ "<p style='font-weight: bold; font-size: 15px; text-align: right;'>Corresponding Budget Allocation and estimated Project Completion Time are provided in different sheets.</p>"
 
149
 
150
 
151
+ "<p style='font-size: 12px; color: gray; text-align: center'>This tool allows for the systematic evaluation and proposal of solutions tailored to specific location-problem pairs, ensuring efficient resource allocation and project planning.</p>"
152
+ "<p style='font-size: 12px; color: gray; text-align: center'>Note: The example files provided above are for demonstration purposes. Feel free to upload your own Excel files to see the results. If you have any questions, refer to the documentation-links or contact <a href='https://www.change.org/p/democracy-evolution-ensuring-humanity-s-eternal-existence-through-taxdirection' target='_blank'>support</a>.</p>"
153
+ "<p style='font-size: 12px; color: gray; text-align: center'>For more information, visit <a href='https://santanban.github.io/TaxDirection/' target='_blank'>#TaxDirection weblink</a>.</p>"
 
154
  ) # Solid description with right-aligned second sentence
155
 
156
  )