Skip to content

Commit

Permalink
Latest version.
Browse files Browse the repository at this point in the history
  • Loading branch information
davidcampos committed Apr 3, 2019
1 parent 0c0c211 commit 94ec8d3
Show file tree
Hide file tree
Showing 2 changed files with 161 additions and 136 deletions.
293 changes: 158 additions & 135 deletions calculate_life_quality_measure.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import multiprocessing as mp

import numpy
from elasticsearch import Elasticsearch

Expand Down Expand Up @@ -239,63 +241,147 @@ def is_poi_available(type, lat, long, distance):
return len(res['hits']['hits']) > 0


def calculate_life_quality(lat, lon):
# GreenZone
greenzone = impact_poi_positive('GreenZone', lat, lon, config['GreenZone']['distance'])
# print("GreenZone: ", Impact(greenzone))

# School
school = impact_poi_positive('School', lat, lon, config['School']['distance'])
# print("School: ", Impact(school))

# Market
market = impact_poi_positive('Market', lat, lon, config['Market']['distance'])
# print("Market: ", Impact(market))

# Market
health = impact_poi_positive('Health', lat, lon, config['Health']['distance'])
# print("Health: ", Impact(health))

# Bairros
bairros = impact_poi_negative('Bairros', lat, lon, config['Bairros']['distance'])
# print("Bairros: ", Impact(bairros))

# Air
avg_co = get_iot_average('CO', lat, lon, config['air']['distance'])
co = impact_air_co2(avg_co)
# print('CO2: %s' % Impact(impact_air_co2(avg_co)))

avg_o3 = get_iot_average('O3', lat, lon, config['air']['distance'])
o3 = impact_air_o3(avg_o3)
# print('O3: %s' % Impact(impact_air_o3(avg_o3)))

avg_pm25 = get_iot_average('PM25', lat, lon, config['air']['distance'])
pm25 = impact_air_pm25(avg_pm25)
# print('PM25: %s' % Impact(impact_air_pm25(avg_pm25)))

avg_pm10 = get_iot_average('PM10', lat, lon, config['air']['distance'])
pm10 = impact_air_pm10(avg_pm10)
# print('PM10: %s' % Impact(impact_air_pm10(avg_pm10)))

avg_no2 = get_iot_average('NO2', lat, lon, config['air']['distance'])
no2 = impact_air_no2(avg_no2)
# print('NO2: %s' % Impact(impact_air_no2(avg_no2)))

# air_quality = 5 - numpy.sqrt(
# ((5 - co) ^ 2 + (5 - o3) ^ 2 + (5 - pm25) ^ 2 + (5 - pm10) ^ 2 + (5 - no2) ^ 2) / 5)
air_quality = (co + o3 + pm25 + pm10 + no2) / 5
# print('AIR QUALITY: %s' % air_quality)

# Noise
avg_noise = get_iot_average('LAeq', lat, lon, config['noise']['distance'])
noise = impact_noise(avg_noise)

# print('NOISE: %s' % Impact(noise))

life_quality = \
config['GreenZone']['weight'] * greenzone + \
config['School']['weight'] * school + \
config['Market']['weight'] * market + \
config['Health']['weight'] * health + \
config['Bairros']['weight'] * bairros + \
config['air']['weight'] * air_quality + \
config['noise']['weight'] * noise

# print("LIFE QUALITY: ", life_quality)

doc = {
"location": {
"lat": lat,
"lon": lon
},
"value": life_quality,
"GreenZone": greenzone,
"School": school,
"Market": market,
"Health": health,
"Bairros": bairros,
"AirQuality": air_quality,
"NoiseLevelObserved": noise
}

res = es.index(index=ELASTIC_INDEX_RESULT, doc_type='doc', body=doc)
print(res['result'])
return True


ELASTIC_URI = "http://10.250.0.239:9200"
ELASTIC_INDEX_IOT = "hackacity-iot"
ELASTIC_INDEX_POI = "hackacity-poi"
ELASTIC_INDEX_RESULT = "hackacity-result"

es = Elasticsearch([ELASTIC_URI])


def main():
# Distances in KM
config = {
'air': {
'distance': '4km',
'weight': 0.25
},
'weather': {
'distance': 2,
'weight': 0.1
},
'traffic': {
'distance': 3,
'weight': 0.1
},
'noise': {
'distance': '1km',
'weight': 0.1
},
'transports': {
'distance': 1,
'weight': 0.1
},
'risks': {
'distance': 2,
'weight': 0.1
},
'Market': {
'distance': 0.5,
'weight': 0.1
},
'School': {
'distance': 0.5,
'weight': 0.1
},
'Health': {
'distance': 1,
'weight': 0.1
},
'GreenZone': {
'distance': 0.25,
'weight': 0.1
},
'Bairros': {
'distance': 0.1,
'weight': 0.25
}
# Distances in KM
config = {
'air': {
'distance': '4km',
'weight': 0.15
},
'weather': {
'distance': 2,
'weight': 0.1
},
'traffic': {
'distance': 3,
'weight': 0.1
},
'noise': {
'distance': '1km',
'weight': 0.1
},
'transports': {
'distance': 1,
'weight': 0.1
},
'risks': {
'distance': 2,
'weight': 0.1
},
'Market': {
'distance': 0.5,
'weight': 0.1
},
'School': {
'distance': 0.5,
'weight': 0.15
},
'Health': {
'distance': 1,
'weight': 0.15
},
'GreenZone': {
'distance': 0.25,
'weight': 0.1
},
'Bairros': {
'distance': 0.1,
'weight': 0.25
}
}


def main():
# GreenZone

# for hit in res['hits']['hits']:
Expand All @@ -316,96 +402,33 @@ def main():
# Left Bottom: 41.131386, -8.712680
# Right Top: 41.208026, -8.559292
# Right Bottom: 41.135018, -8.558663
i = 0
for lat in numpy.arange(41.131386, 41.208026, 0.0045):
for lon in numpy.arange(-8.712680, -8.558663, 0.00625):
i = i + 1
# print("%s, %s" % (lat, lon))

# GreenZone
greenzone = impact_poi_positive('GreenZone', lat, lon, config['GreenZone']['distance'])
print("GreenZone: ", Impact(greenzone))

# School
school = impact_poi_positive('School', lat, lon, config['School']['distance'])
print("School: ", Impact(school))

# Market
market = impact_poi_positive('Market', lat, lon, config['Market']['distance'])
print("Market: ", Impact(market))

# Market
health = impact_poi_positive('Health', lat, lon, config['Health']['distance'])
print("Health: ", Impact(health))

# Bairros
bairros = impact_poi_negative('Bairros', lat, lon, config['Bairros']['distance'])
print("Bairros: ", Impact(bairros))

# Air
avg_co = get_iot_average('CO', lat, lon, config['air']['distance'])
co = impact_air_co2(avg_co)
# print('CO2: %s' % Impact(impact_air_co2(avg_co)))

avg_o3 = get_iot_average('O3', lat, lon, config['air']['distance'])
o3 = impact_air_o3(avg_o3)
# print('O3: %s' % Impact(impact_air_o3(avg_o3)))

avg_pm25 = get_iot_average('PM25', lat, lon, config['air']['distance'])
pm25 = impact_air_pm25(avg_pm25)
# print('PM25: %s' % Impact(impact_air_pm25(avg_pm25)))

avg_pm10 = get_iot_average('PM10', lat, lon, config['air']['distance'])
pm10 = impact_air_pm10(avg_pm10)
# print('PM10: %s' % Impact(impact_air_pm10(avg_pm10)))

avg_no2 = get_iot_average('NO2', lat, lon, config['air']['distance'])
no2 = impact_air_no2(avg_no2)
# print('NO2: %s' % Impact(impact_air_no2(avg_no2)))

# air_quality = 5 - numpy.sqrt(
# ((5 - co) ^ 2 + (5 - o3) ^ 2 + (5 - pm25) ^ 2 + (5 - pm10) ^ 2 + (5 - no2) ^ 2) / 5)
air_quality = (co + o3 + pm25 + pm10 + no2) / 5
print('AIR QUALITY: %s' % air_quality)

# Noise
avg_noise = get_iot_average('LAeq', lat, lon, config['noise']['distance'])
noise = impact_noise(avg_noise)

print('NOISE: %s' % Impact(noise))

life_quality = \
config['GreenZone']['weight'] * greenzone + \
config['School']['weight'] * school + \
config['Market']['weight'] * market + \
config['Health']['weight'] * health + \
config['Bairros']['weight'] * bairros + \
config['air']['weight'] * air_quality + \
config['noise']['weight'] * noise

print("LIFE QUALITY: ", life_quality)

doc = {
"location": {
"lat": lat,
"lon": lon
},
"value": life_quality,
"GreenZone": greenzone,
"School": school,
"Market": market,
"Health": health,
"Bairros": bairros,
"AirQuality": air_quality,
"NoiseLevelObserved": noise
}
coords = []

# NOT SO BAD
# for lat in numpy.arange(41.131386, 41.208026, 0.0018):
# for lon in numpy.arange(-8.712680, -8.558663, 0.0025):

for lat in numpy.arange(41.131386, 41.208026, 0.0015):
for lon in numpy.arange(-8.712680, -8.558663, 0.0015):
coords.append((lat, lon))

print("TOTAL: ", len(coords))

# Step 1: Init multiprocessing.Pool()
pool = mp.Pool(32)
results = [pool.apply_async(calculate_life_quality, args=(lat, lon)) for (lat, lon) in coords]
pool.close()
pool.join()


# parallel(n_jobs=8)(delayed(calculate_life_quality)(lat, lon) for lat, lon in coords)

# Parallel(n_jobs=8)(delayed(calculate_life_quality)(lat, lon) for (lat, lon) in coords)

res = es.index(index=ELASTIC_INDEX_RESULT, doc_type='doc', body=doc)
print(res['result'])

print()
# print(res['result'])

print(i)
# print()


main()
4 changes: 3 additions & 1 deletion requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ requests==2.21.0
pandas==0.24.2
elasticsearch==6.3.1
jupyter==1.0.0
numpy==1.16.2
numpy==1.16.2
progressbar2==3.39.3
joblib==0.13.2

0 comments on commit 94ec8d3

Please sign in to comment.