diff --git a/predihood/classes/manual_assessment.csv b/predihood/classes/manual_assessment.csv new file mode 100644 index 0000000000000000000000000000000000000000..a596954497c5ab74bba61cfd2bf94a75a5258a93 --- /dev/null +++ b/predihood/classes/manual_assessment.csv @@ -0,0 +1 @@ +CODE,AREA,DENSITY,P14_POP,P14_POP0002,P14_POP0305,P14_POP0610,P14_POP1117,P14_POP1824,P14_POP2539,P14_POP4054,P14_POP5564,P14_POP6579,P14_POP80P,P14_POP0014,P14_POP1529,P14_POP3044,P14_POP4559,P14_POP6074,P14_POP75P,P14_POP0019,P14_POP2064,P14_POP65P,P14_POPH,P14_H0014,P14_H1529,P14_H3044,P14_H4559,P14_H6074,P14_H75P,P14_H0019,P14_H2064,P14_H65P,P14_POPF,P14_F0014,P14_F1529,P14_F3044,P14_F4559,P14_F6074,P14_F75P,P14_F0019,P14_F2064,P14_F65P,C14_POP15P,C14_POP15P_CS1,C14_POP15P_CS2,C14_POP15P_CS3,C14_POP15P_CS4,C14_POP15P_CS5,C14_POP15P_CS6,C14_POP15P_CS7,C14_POP15P_CS8,C14_H15P,C14_H15P_CS1,C14_H15P_CS2,C14_H15P_CS3,C14_H15P_CS4,C14_H15P_CS5,C14_H15P_CS6,C14_H15P_CS7,C14_H15P_CS8,C14_F15P,C14_F15P_CS1,C14_F15P_CS2,C14_F15P_CS3,C14_F15P_CS4,C14_F15P_CS5,C14_F15P_CS6,C14_F15P_CS7,C14_F15P_CS8,P14_POP_FR,P14_POP_ETR,P14_POP_IMM,P14_PMEN,P14_PHORMEN,P14_LOG,P14_RP,P14_RSECOCC,P14_LOGVAC,P14_MAISON,P14_APPART,P14_RP_1P,P14_RP_2P,P14_RP_3P,P14_RP_4P,P14_RP_5PP,P14_NBPI_RP,P14_RPMAISON,P14_NBPI_RPMAISON,P14_RPAPPART,P14_NBPI_RPAPPART,P14_RP_M30M2,P14_RP_3040M2,P14_RP_4060M2,P14_RP_6080M2,P14_RP_80100M2,P14_RP_100120M2,P14_RP_120M2P,P14_RP_ACHTOT,P14_RP_ACH19,P14_RP_ACH45,P14_RP_ACH70,P14_RP_ACH90,P14_RP_ACH05,P14_RP_ACH11,P14_RPMAISON_ACHTOT,P14_RPMAISON_ACH19,P14_RPMAISON_ACH45,P14_RPMAISON_ACH70,P14_RPMAISON_ACH90,P14_RPMAISON_ACH05,P14_RPMAISON_ACH11,P14_RPAPPART_ACHTOT,P14_RPAPPART_ACH19,P14_RPAPPART_ACH45,P14_RPAPPART_ACH70,P14_RPAPPART_ACH90,P14_RPAPPART_ACH05,P14_RPAPPART_ACH11,P14_MEN,P14_MEN_ANEM0002,P14_MEN_ANEM0204,P14_MEN_ANEM0509,P14_MEN_ANEM10P,P14_PMEN_ANEM0002,P14_PMEN_ANEM0204,P14_PMEN_ANEM0509,P14_PMEN_ANEM10P,P14_NBPI_RP_ANEM0002,P14_NBPI_RP_ANEM0204,P14_NBPI_RP_ANEM0509,P14_NBPI_RP_ANEM10P,P14_RP_PROP,P14_RP_LOC,P14_RP_LOCHLMV,P14_RP_GRAT,P14_NPER_RP,P14_NPER_RP_PROP,P14_NPER_RP_LOC,P14_NPER_RP_LOCHLMV,P14_NPER_RP_GRAT,P14_ANEM_RP,P14_ANEM_RP_PROP,P14_ANEM_RP_LOC,P14_ANEM_RP_LOCHLMV,P14_ANEM_RP_GRAT,P14_RP_SDB,P14_RP_CCCOLL,P14_RP_CCIND,P14_RP_CINDELEC,P14_RP_ELEC,P14_RP_EAUCH,P14_RP_BDWC,P14_RP_CHOS,P14_RP_CLIM,P14_RP_TTEGOU,P14_RP_GARL,P14_RP_VOIT1P,P14_RP_VOIT1,P14_RP_VOIT2P,NB_B101,NB_B102,NB_B103,NB_B201,NB_B202,NB_B203,NB_B204,NB_B205,NB_B206,NB_B301,NB_B302,NB_B303,NB_B304,NB_B305,NB_B306,NB_B307,NB_B308,NB_B309,NB_B310,NB_B311,NB_B312,NB_B313,NB_B315,NB_B316,DEC_PIMP14,DEC_TP6014,DEC_Q114,DEC_MED14,DEC_Q314,DEC_EQ14,DEC_D114,DEC_D214,DEC_D314,DEC_D414,DEC_D614,DEC_D714,DEC_D814,DEC_D914,DEC_RD14,DEC_S80S2014,DEC_GI14,DEC_PTSA14,DEC_PCHO14,DEC_PBEN14,DEC_PPEN14,DEC_PAUT14,note,NB_D201,NB_D202,NB_D203,NB_D204,NB_D205,NB_D206,NB_D207,NB_D208,NB_D209,NB_D210,NB_D211,NB_D212,NB_D213,NB_D221,NB_D231,NB_D232,NB_D233,NB_D235,NB_D236,NB_D237,NB_D238,NB_D239,NB_D240,NB_D242,NB_D243,C401,C402,C403,C409,C501,C502,C503,C504,C505,C505_NB_INT,C509,C601,C602,C603,C604,C605,C605_NB_INT,C609,C701,C702,C101,C101_NB_CANT,C101_NB_EP,C101_NB_RPIC,C102,C102_NB_CANT,C102_NB_EP,C104,C104_NB_CANT,C104_NB_PELEM,C104_NB_EP,C104_NB_RPIC,C105,C105_NB_CANT,C105_NB_PELEM,C105_NB_EP,NB_F101,NB_F101_NB_AIREJEU,NB_F101_NB_COU,NB_F101_NB_ECL,NB_F102,NB_F102_NB_AIREJEU,NB_F102_NB_COU,NB_F102_NB_ECL,NB_F103,NB_F103_NB_AIREJEU,NB_F103_NB_COU,NB_F103_NB_ECL,NB_F104,NB_F104_NB_AIREJEU,NB_F104_NB_COU,NB_F104_NB_ECL,NB_F105,NB_F105_NB_AIREJEU,NB_F105_NB_COU,NB_F105_NB_ECL,NB_F106,NB_F106_NB_AIREJEU,NB_F106_NB_COU,NB_F106_NB_ECL,NB_F107,NB_F107_NB_AIREJEU,NB_F107_NB_COU,NB_F107_NB_ECL,NB_F108,NB_F108_NB_AIREJEU,NB_F108_NB_COU,NB_F108_NB_ECL,NB_F109,NB_F109_NB_AIREJEU,NB_F109_NB_COU,NB_F109_NB_ECL,NB_F110,NB_F110_NB_AIREJEU,NB_F110_NB_COU,NB_F110_NB_ECL,NB_F111,NB_F111_NB_AIREJEU,NB_F111_NB_COU,NB_F111_NB_ECL,NB_F112,NB_F112_NB_AIREJEU,NB_F112_NB_COU,NB_F112_NB_ECL,NB_F113,NB_F113_NB_AIREJEU,NB_F113_NB_COU,NB_F113_NB_ECL,NB_F114,NB_F114_NB_AIREJEU,NB_F114_NB_COU,NB_F114_NB_ECL,NB_F116,NB_F116_NB_AIREJEU,NB_F116_NB_COU,NB_F116_NB_ECL,NB_F117,NB_F117_NB_AIREJEU,NB_F117_NB_COU,NB_F117_NB_ECL,NB_F118,NB_F118_NB_AIREJEU,NB_F118_NB_COU,NB_F118_NB_ECL,NB_F119,NB_F119_NB_AIREJEU,NB_F119_NB_COU,NB_F119_NB_ECL,NB_F120,NB_F120_NB_AIREJEU,NB_F120_NB_COU,NB_F120_NB_ECL,NB_F121,NB_F121_NB_AIREJEU,NB_F121_NB_COU,NB_F121_NB_ECL,NB_F201,NB_F201_NB_AIREJEU,NB_F202,NB_F202_NB_AIREJEU,NB_F203,NB_F203_NB_AIREJEU,NB_F302,NB_F302_NB_SALLES,NB_F303,NB_F303_NB_SALLES,NB_F304,NB_F305,NB_A101,NB_A104,NB_A105,NB_A106,NB_A107,NB_A108,NB_A109,NB_A115,NB_A119,NB_A120,NB_A121,NB_A122,NB_A123,NB_A124,NB_A125,NB_A203,NB_A205,NB_A206,NB_A207,NB_A208,NB_A301,NB_A302,NB_A303,NB_A304,NB_A401,NB_A402,NB_A403,NB_A404,NB_A405,NB_A406,NB_A501,NB_A502,NB_A503,NB_A504,NB_A505,NB_A506,NB_A507,P14_POP1564,P14_POP1524,P14_POP2554,P14_H1564,P14_H1524,P14_H2554,P14_H5564,P14_F1564,P14_F1524,P14_F2554,P14_F5564,P14_ACT1564,P14_ACT1524,P14_ACT2554,P14_ACT5564,P14_HACT1564,P14_HACT1524,P14_HACT2554,P14_HACT5564,P14_FACT1564,P14_FACT1524,P14_FACT2554,P14_FACT5564,P14_ACTOCC1564,P14_ACTOCC1524,P14_ACTOCC2554,P14_ACTOCC5564,P14_HACTOCC1564,P14_HACTOCC1524,P14_HACTOCC2554,P14_HACTOCC5564,P14_FACTOCC1564,P14_FACTOCC1524,P14_FACTOCC2554,P14_FACTOCC5564,P14_CHOM1564,P14_CHOM1524,P14_CHOM2554,P14_CHOM5564,P14_HCHOM1564,P14_FCHOM1564,P14_INACT1564,P14_HINACT1564,P14_FINACT1564,P14_ETUD1564,P14_HETUD1564,P14_FETUD1564,P14_RETR1564,P14_HRETR1564,P14_FRETR1564,P14_AINACT1564,P14_HAINACT1564,P14_FAINACT1564,C14_ACT1564,C14_ACT1564_CS1,C14_ACT1564_CS2,C14_ACT1564_CS3,C14_ACT1564_CS4,C14_ACT1564_CS5,C14_ACT1564_CS6,C14_ACTOCC1564,C14_ACTOCC1564_CS1,C14_ACTOCC1564_CS2,C14_ACTOCC1564_CS3,C14_ACTOCC1564_CS4,C14_ACTOCC1564_CS5,C14_ACTOCC1564_CS6,P14_ACTOCC15P,P14_HACTOCC15P,P14_FACTOCC15P,P14_SAL15P,P14_HSAL15P,P14_FSAL15P,P14_NSAL15P,P14_HNSAL15P,P14_FNSAL15P,P14_ACTOCC15P_TP,P14_SAL15P_TP,P14_HSAL15P_TP,P14_FSAL15P_TP,P14_NSAL15P_TP,P14_SAL15P_CDI,P14_SAL15P_CDD,P14_SAL15P_INTERIM,P14_SAL15P_EMPAID,P14_SAL15P_APPR,P14_NSAL15P_INDEP,P14_NSAL15P_EMPLOY,P14_NSAL15P_AIDFAM,P14_ACTOCC15P_ILT1,P14_ACTOCC15P_ILT2P,P14_ACTOCC15P_ILT2,P14_ACTOCC15P_ILT3,P14_ACTOCC15P_ILT4,P14_ACTOCC15P_ILT5,C14_ACTOCC15P,C14_ACTOCC15P_PAS,C14_ACTOCC15P_MAR,C14_ACTOCC15P_DROU,C14_ACTOCC15P_VOIT,C14_ACTOCC15P_TCOM,C201,C201_NB_CANT,C201_NB_EP,C201_NB_INT,C301,C301_NB_CANT,C301_NB_PGE,C301_NB_EP,C301_NB_INT,C302,C302_NB_CANT,C302_NB_PGE,C302_NB_EP,C302_NB_INT,C303,C303_NB_PGE,C303_NB_INT,C304,C304_NB_CANT,C304_NB_INT,C305,C305_NB_CANT,C305_NB_INT,NB_D401,NB_D402,NB_D403,NB_D404,NB_D405,NB_D502,NB_D601,NB_D602,NB_D603,NB_D604,NB_D605,NB_D606,NB_D701,NB_D702,NB_D703,NB_D704,NB_D705,NB_D709,NB_E101,NB_E102,NB_E103,NB_E106,NB_G101,NB_G102,NB_G103,NB_G104,C14_MEN,C14_MENPSEUL,C14_MENHSEUL,C14_MENFSEUL,C14_MENSFAM,C14_MENFAM,C14_MENCOUPSENF,C14_MENCOUPAENF,C14_MENFAMMONO,C14_PMEN,C14_PMEN_MENPSEUL,C14_PMEN_MENHSEUL,C14_PMEN_MENFSEUL,C14_PMEN_MENSFAM,C14_PMEN_MENFAM,C14_PMEN_MENCOUPSENF,C14_PMEN_MENCOUPAENF,C14_PMEN_MENFAMMONO,P14_POP15P,P14_POP5579,P14_POPMEN15P,P14_POPMEN1524,P14_POPMEN2554,P14_POPMEN5579,P14_POPMEN80P,P14_POP15P_PSEUL,P14_POP1524_PSEUL,P14_POP2554_PSEUL,P14_POP5579_PSEUL,P14_POP80P_PSEUL,P14_POP15P_MARIEE,P14_POP15P_NONMARIEE,C14_MEN_CS1,C14_MEN_CS2,C14_MEN_CS3,C14_MEN_CS4,C14_MEN_CS5,C14_MEN_CS6,C14_MEN_CS7,C14_MEN_CS8,C14_PMEN_CS1,C14_PMEN_CS2,C14_PMEN_CS3,C14_PMEN_CS4,C14_PMEN_CS5,C14_PMEN_CS6,C14_PMEN_CS7,C14_PMEN_CS8,C14_FAM,C14_COUPAENF,C14_FAMMONO,C14_COUPSENF,C14_NE24F0,C14_NE24F1,C14_NE24F2,C14_NE24F3,C14_NE24F4P,P14_POP0205,P14_POP1114,P14_POP1517,P14_POP2529,P14_POP30P,P14_SCOL0205,P14_SCOL0610,P14_SCOL1114,P14_SCOL1517,P14_SCOL1824,P14_SCOL2529,P14_SCOL30P,P14_NSCOL15P,P14_NSCOL15P_DIPLMIN,P14_NSCOL15P_CAPBEP,P14_NSCOL15P_BAC,P14_NSCOL15P_SUP,P14_HNSCOL15P,P14_HNSCOL15P_DIPLMIN,P14_HNSCOL15P_CAPBEP,P14_HNSCOL15P_BAC,P14_HNSCOL15P_SUP,P14_FNSCOL15P,P14_FNSCOL15P_DIPLMIN,P14_FNSCOL15P_CAPBEP,P14_FNSCOL15P_BAC,P14_FNSCOL15P_SUP,C15_POP01P_IRAN012,C15_POP01P_IRANAUT,C15_POP01P,building_type,building_usage,landscape,morphological_position,geographical_position,social_class diff --git a/predihood/config.py b/predihood/config.py index f34fd8cb4e2fec73c87428b74b85506b53934c0f..99a942f67ba09b77b234fa1abbed4fa8524d96f4 100644 --- a/predihood/config.py +++ b/predihood/config.py @@ -31,6 +31,7 @@ FILE_CLEANED_DATA = os.path.join(FOLDER_DATA, "cleaned_data.csv") FILE_ENV = os.path.join(FOLDER_DATASETS, "data.csv") FILE_SIMILARITIES = os.path.join(FOLDER_DATA, "similarities.csv") FILE_LIST_DISTRIBUTION = os.path.join(FOLDER_SELECTED_INDICATORS, "selection-distribution.csv") +FILE_MANUAL_ASSESSMENT = os.path.join(FOLDER_CLASSES, "manual_assessment.csv") ENVIRONMENT_VARIABLES = ["building_type", "building_usage", "landscape", "morphological_position", "geographical_position", "social_class"] RANDOM_STATE = 0 # make classifiers deterministic @@ -80,3 +81,93 @@ TRANSLATION = { "Moyen-sup": "Upper middle", "Sup": "Upper" } + +ENVIRONMENT_VALUES = { + "building_type": [ + ["Maisons", "Houses"], + ["Mixte", "Mixed"], + ["Immeubles", "Towers"], + ["Grand ensemble", "Housing estates"], + ["Lotissement", "Housing subdivisions"] + ], + "building_usage": [ + ["Résidentiel", "Housing"], + ["Commerçant", "Shopping"], + ["Autres activités", "Other activities"], + ], + "landscape": [ + ["Urbanisé", "Urban"], + ["Espaces verts", "Green areas"], + ["Arboré", "Forest"], + ["Agricole", "Countryside"], + ], + "morphological_position": [ + ["Central", "Central"], + ["Urbain", "Urban"], + ["Péri-urbain", "Peri-urban"], + ["Rural", "Rural"] + ], + "geographical_position": [ + ["Centre", "Centre"], + ["Nord", "North"], + ["Sud", "South"], + ["Est", "East"], + ["Ouest", "West"], + ["Nord-Est", "North East"], + ["Sud-Est", "South East"], + ["Nord-Ouest", "North West"], + ["Sud-Ouest", "South West"] + ], + "social_class": [ + ["Popu", "Lower"], + ["Moyen-inf", "Lower middle"], + ["Moyen", "Middle"], + ["Moyen-sup", "Upper middle"], + ["Sup", "Upper"] + ] +} + +ENVIRONMENT_VALUES_2 = { + "building_type": { + "Maisons": "Houses", + "Mixte": "Mixed", + "Immeubles": "Towers", + "Grand ensemble": "Housing estates", + "Lotissement": "Housing subdivisions" + }, + "building_usage": { + "Résidentiel": "Housing", + "Commerçant": "Shopping", + "Autres activités": "Other activities", + }, + "landscape": { + "Urbanisé": "Urban", + "Espaces verts": "Green areas", + "Arboré": "Forest", + "Agricole": "Countryside", + }, + "morphological_position": { + "Central": "Central", + "Urbain": "Urban", + "Péri-urbain": "Peri-urban", + "Rural": "Rural" + }, + "geographical_position": { + "Centre": "Centre", + "Nord": "North", + "Sud": "South", + "Est": "East", + "Ouest": "West", + "Nord-Est": "North East", + "Sud-Est": "South East", + "Nord-Ouest": "North West", + "Sud-Ouest": "South West" + }, + "social_class": { + "Popu": "Lower", + "Moyen-inf": "Lower middle", + "Moyen": "Middle", + "Moyen-sup": "Upper middle", + "Sup": "Upper" + } +} diff --git a/predihood/main.py b/predihood/main.py index 5f3730edd07140f188f44e5d6e1eede95a20c34c..0bd2cabe39a49f0073d3169e9c94febd09be8167 100644 --- a/predihood/main.py +++ b/predihood/main.py @@ -18,9 +18,9 @@ from sklearn.utils._testing import ignore_warnings from predihood import model from predihood.classes.Data import Data -from predihood.config import AVAILABLE_CLASSIFIERS, TOPS_K +from predihood.config import AVAILABLE_CLASSIFIERS, TOPS_K, ENVIRONMENT_VALUES_2, FILE_MANUAL_ASSESSMENT from predihood.predict import expe4, predict_one_iris -from predihood.utility_functions import signature, get_classifier, set_classifier +from predihood.utility_functions import signature, get_classifier, set_classifier, add_assessment_to_file app = Flask(__name__) app.config['JSON_SORT_KEYS'] = False @@ -157,6 +157,26 @@ def get_iris_from_name(): return json.dumps({'status': 'OK', 'geojson': iris}) +@app.route('/getEnvironmentValues', methods=["GET"]) +def get_environment_values(): + variables_with_values = {} + for env in ENVIRONMENT_VALUES_2: + temp = [] + for key in ENVIRONMENT_VALUES_2[env]: + temp.append(ENVIRONMENT_VALUES_2[env][key]) # get english values + variables_with_values[env] = temp + return json.dumps(variables_with_values) # {"result": variables_with_values} + + +@app.route('/add_iris_to_csv', methods=["GET"]) +def add_iris_to_csv(): + assessed_values = [] + for env in ENVIRONMENT_VALUES_2: + assessed_values.append(request.args[env]) + message = add_assessment_to_file(request.args['code_iris'], assessed_values) + return json.dumps({"status": message}) + + @app.route('/favicon.ico') @app.route('/<page>/favicon.ico') def favicon(): diff --git a/predihood/static/js/carto.js b/predihood/static/js/carto.js index f036a1b0ddd5469c8767af51252135257c37124b..20c711c1fb8617887e4878ec6ad4cf1f6ad9d083 100644 --- a/predihood/static/js/carto.js +++ b/predihood/static/js/carto.js @@ -15,7 +15,8 @@ let overlayLayers = null; // array of overlaying layers let osmLayer = null; // openstreetmap basic layer let irisLayer = null; // layer of displayed IRIS let previously_selected_algorithm = null; - +let environment_variables = getEnvironmentVariables(); // get the json corresponding to the list of environment variables with the possible values +console.log(environment_variables) /** * Initialize the map @@ -81,47 +82,93 @@ function displayPopup(e) { var code_iris = layer.feature.properties.CODE_IRIS let selected_algorithm = $("#selectAlgorithmTooltip option:selected").val(); let predictions = undefined; - if (selected_algorithm !== "undefined" && selected_algorithm !== undefined) { - predictions = predict(code_iris, selected_algorithm) - console.log(predictions) - } + // common part of the popup let divInformation = $("<div>"); - divInformation - .append("IRIS CODE: " + layer.feature.properties.CODE_IRIS).append($("<br>")) - .append("IRIS: " + layer.feature.properties.NOM_IRIS).append($("<br>")) - .append("TOWNSHIP: " + layer.feature.properties.NOM_COM).append($("<br>")) - let moreInfosLink = $("<a>"); - moreInfosLink - .prop("href", "details-iris.html?code_iris="+layer.feature.properties.CODE_IRIS) - .prop("target", "_blank") - .text("More details") - .append($("<br>")); - divInformation.append(moreInfosLink); - - let selectAlgorithm = $("<select>") - selectAlgorithm - .prop("id", "selectAlgorithmTooltip") - .append($("<option>").prop("value", "undefined").text("---")) - - for(let algorithm of classifiers) { - selectAlgorithm.append($("<option>").prop("value", algorithm).text(algorithm)); - } - previously_selected_algorithm = selected_algorithm; + divInformation + .append("IRIS CODE: " + layer.feature.properties.CODE_IRIS).append($("<br>")) + .append("IRIS: " + layer.feature.properties.NOM_IRIS).append($("<br>")) + .append("TOWNSHIP: " + layer.feature.properties.NOM_COM).append($("<br>")) + let moreInfosLink = $("<a>"); + moreInfosLink + .prop("href", "details-iris.html?code_iris="+layer.feature.properties.CODE_IRIS) + .prop("target", "_blank") + .text("More details") + .append($("<br>")); + divInformation.append(moreInfosLink); + + if($("#assessmentMode").is(":checked")) { + // alert("assessment mode"); + + for(let env in environment_variables) { + let env_values = environment_variables[env] + let div_container = $("<div>").prop("id", "assessment"+env) + let list_values = $("<select>"); + for(let value in env_values) { list_values.append($("<option>").prop("value", env_values[value]).text(env_values[value])) } + div_container.append(env).append(list_values) + divInformation.append(div_container) + } - let divPredictions = $("<div>").prop("id", "divPredictions") - if(predictions !== undefined) { - for(let key in predictions) { divPredictions.append(capitalizeFirstLetter(key.split("_").join(" "))+': ' + predictions[key]["most_frequent"] + " (" + predictions[key]["count_frequent"] + "/7)").append($('<br>')); } - } + let to_csv_button = $("<button>") + .text("Add to dataset") + .prop("id", "addAssessmentButton"); + + let messageTooltip = divInformation[0].outerHTML + to_csv_button[0].outerHTML; + layer.bindPopup(messageTooltip) + layer.bringToFront(); + layer.openPopup(); + + $("#addAssessmentButton").on("click", function() { + let data_param = {} + for(let env in environment_variables) { + data_param[env] = $("#assessment"+env)[0].children[0].value + } + data_param["code_iris"] = code_iris + console.log(data_param) + $.ajax({ + type: "GET", + url: "/add_iris_to_csv", + data: data_param, + "async": false, + contentType: 'application/json;charset=UTF-8', + success: function(result) { + alert(result) + }, + error: function(result, textStatus, errorThrown) { + console.log(errorThrown); + } + }); + }); + } else { + if (selected_algorithm !== "undefined" && selected_algorithm !== undefined) { + predictions = predict(code_iris, selected_algorithm) + console.log(predictions) + } - let messageTooltip = divInformation[0].outerHTML + selectAlgorithm[0].outerHTML + divPredictions[0].outerHTML; - console.log(messageTooltip) - layer.bindPopup(messageTooltip) - layer.bringToFront(); - layer.openPopup(); + let selectAlgorithm = $("<select>") + selectAlgorithm + .prop("id", "selectAlgorithmTooltip") + .append($("<option>").prop("value", "undefined").text("---")) - $("#selectAlgorithmTooltip").val(previously_selected_algorithm); // must be after binding the popup to be effective - $("#selectAlgorithmTooltip").on("click", function() { displayPopup(e)}) // update popup (env variables) when click on an algorithm + for(let algorithm of classifiers) { + selectAlgorithm.append($("<option>").prop("value", algorithm).text(algorithm)); + } + previously_selected_algorithm = selected_algorithm; + + let divPredictions = $("<div>").prop("id", "divPredictions") + if(predictions !== undefined) { + for(let key in predictions) { divPredictions.append(capitalizeFirstLetter(key.split("_").join(" "))+': ' + predictions[key]["most_frequent"] + " (" + predictions[key]["count_frequent"] + "/7)").append($('<br>')); } + } + + let messageTooltip = divInformation[0].outerHTML + selectAlgorithm[0].outerHTML + divPredictions[0].outerHTML; + console.log(messageTooltip) + layer.bindPopup(messageTooltip) + layer.bringToFront(); + layer.openPopup(); + + $("#selectAlgorithmTooltip").val(previously_selected_algorithm); // must be after binding the popup to be effective + $("#selectAlgorithmTooltip").on("click", function() { displayPopup(e)}) // update popup (env variables) when click on an algorithm + } } /** diff --git a/predihood/static/js/utils.js b/predihood/static/js/utils.js index dc5d8d223ab645e1a1373c5215cf43205f028bbc..139ddb85bf86df01d3642f6adf550cb9bb0b5425 100644 --- a/predihood/static/js/utils.js +++ b/predihood/static/js/utils.js @@ -145,7 +145,7 @@ function getMaxValueDict(dict, min_value) { } /** - * Parse string containg float in exponent representation in float. + * Parse string containing float in exponent representation in float. * @param str A string containing a float with an exponent, e.g. 3e-7 * @returns {number} The float number of type float, e.g. 0.0000003 */ @@ -173,3 +173,19 @@ function parseFloatComplex(str) { } } +function getEnvironmentVariables() { + let env_var = null; + $.ajax({ + type: "GET", + url: "/getEnvironmentValues", + async: false, + contentType: 'application/json;charset=UTF-8', + success: function(result){ + env_var = JSON.parse(result) + }, + error: function(result, textStatus, errorThrown) { + console.log(errorThrown); + } + }); + return env_var; +} \ No newline at end of file diff --git a/predihood/templates/form.html b/predihood/templates/form.html index 4637138e10f123c09d172d89128aab5702b3f156..956ed1cba58e8af034dce05aa459b6b2ddaef399 100644 --- a/predihood/templates/form.html +++ b/predihood/templates/form.html @@ -34,6 +34,8 @@ <img src="{{url_for('static', filename='css/package/build/svg/search.svg')}}" alt="Search" /> </button> </div> + <br><br><br> + Assessment mode: <input type="checkbox" id="assessmentMode"/> </div> diff --git a/predihood/utility_functions.py b/predihood/utility_functions.py index 63bbc6d2bd1d5ff705de29ef86b7d22efa1d7015..d7902f4a4052928444ffd3bd0166c17830e8c874 100644 --- a/predihood/utility_functions.py +++ b/predihood/utility_functions.py @@ -3,6 +3,9 @@ import inspect import json import logging import math + +from area import area + log_format = "[%(levelname)s] - %(filename)s::%(lineno)d \t %(message)s" logging.basicConfig(level='DEBUG', format=log_format) import os @@ -18,7 +21,7 @@ from predihood import model #################### iris function #################### from predihood.config import TOPS_K, FOLDER_SELECTED_INDICATORS, AVAILABLE_CLASSIFIERS, TRAIN_SIZE, TEST_SIZE, \ ENVIRONMENT_VARIABLES, FOLDER_FEATURE_SELECTION, FOLDER_DATASETS, FOLDER_DISTRIBUTION, TRANSLATION, OLD_PREFIX, \ - NEW_PREFIX + NEW_PREFIX, FILE_MANUAL_ASSESSMENT def address_to_code(address): @@ -404,6 +407,43 @@ def distribution_data(): logging.debug("Plot generated for %s", env) +def add_assessment_to_file(code_iris, values): + df = pd.read_csv(FILE_MANUAL_ASSESSMENT) + codes = df['CODE'].tolist() + codes_lst = [str(elem) for elem in codes] + if code_iris in codes_lst: + return "iris already assessed" + else: + iris_data = model.get_iris_from_code(code_iris) + iris_coords = model.get_coords_from_code(code_iris) + area_iris = area(iris_coords) / 1000000 if iris_coords is not None else None + density_iris = iris_data["properties"]["raw_indicators"]["P14_POP"] / area_iris if area_iris is not None and area_iris > 0 else None + + iris = [] + cols = ["CODE", "AREA", "DENSITY"] + # adding code, area and density + iris.append(code_iris) + iris.append(area_iris) + iris.append(density_iris) + + # adding insee indicators + indicators = model.get_indicators_list() + indicators_to_remove = ['IRIS', 'REG', 'DEP', 'UU2010', 'COM', 'LIBCOM', 'TRIRIS', 'GRD_QUART', 'LIBIRIS', + 'TYP_IRIS', 'MODIF_IRIS', 'LAB_IRIS', 'LIB_IRIS', 'LIB_COM', 'CODGEO', 'LIBGEO'] + for indicator in indicators_to_remove: + if indicator in indicators: + indicators.remove(indicator) + + for raw_indicator in indicators: + iris, cols = append_indicator(raw_indicator, iris_data, iris, True, cols) + + iris.extend(values) # adding assessed values + cols.extend(ENVIRONMENT_VARIABLES) + df = pd.DataFrame([iris]) #, columns=cols) + df.to_csv(FILE_MANUAL_ASSESSMENT, mode='a', index=False, header=False) # WARNING: don't erase header in the csv file + return "okay" + + if __name__ == '__main__': # print(indicator_full_to_short_label("Pop 0-2 ans en 2014 (princ)")) # print(indicator_short_to_full_label("P14_POP0002"))