/
DeprivationScore.py
61 lines (52 loc) · 1.85 KB
/
DeprivationScore.py
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
from data_reader import DataReader
class DeprivationModule:
def __init__(self):
data_obj = DataReader()
self.df = data_obj.get_pandas_df()
self.pk = "NAGcode_1"
self.selected_columns = ['statesup', 'defacto']
self.write_columns = ["{}_dep_score".format(column) for column in self.selected_columns]
def print_columns(self):
return self.df.columns
def get_unique(self, header):
return self.df[header].unique()
@staticmethod
def calculated_weighted_mean(a):
n = len(a)
count = 1
num, denum = 0, 0
for i in a:
if i == 0:
num += count / n
denum += count / n
count += 1
return num / float(denum)
@staticmethod
def availability(a):
n = len(a)
count = 1
num, denum = 0, 0
for i in a:
if i >= 1:
num += count / n
denum += count / n
count += 1
return num / float(denum)
def get_deprivation_score(self, nag_id):
df = self.df[self.df[self.pk] == nag_id]
df = df.groupby('Year')[self.selected_columns].sum().reset_index()
df = df.sort_values('Year')
deprivation_object = {}
for column in self.selected_columns:
timeline = df[column].tolist()
deprivation_score = self.calculated_weighted_mean(timeline)
column1 = "{}_dep_score".format(column)
availability_score = self.availability(timeline)
column2 = "{}_avail_score".format(column)
deprivation_object[column1] = deprivation_score
deprivation_object[column2] = availability_score
return deprivation_object
if __name__ == "__main__":
obj = DeprivationModule()
print(obj.get_deprivation_score(1))
#print (obj.get_deprivation_score(2))