diff --git a/biblio.bib b/biblio.bib index 80b91c5e6ee7e7822b2e92d882b8b39ae80ded9a..27480653e4362cf98fbcfa1d200688f2c158d578 100644 --- a/biblio.bib +++ b/biblio.bib @@ -1,79 +1,44 @@ -@inproceedings{wang2013location, - title={Location recommendation in location-based social networks using user check-in data}, - author={Wang, Hao and Terrovitis, Manolis and Mamoulis, Nikos}, - booktitle={SIGSPATIAL}, - pages={374--383}, - year={2013}, - organization={ACM} +@INPROCEEDINGS{egc19-demo, + author = {Nelly Barret and Fabien Duchateau and Franck Favetta and Maryvonne Miquel and Aurélien Gentil and Loïc Bonneval}, + year = {2019}, + title = {À la recherche du quartier idéal}, + booktitle = {Extraction et Gestion des Connaissances (EGC)}, + pages = {429–432}, } -@inproceedings{yuan2012discovering, - title={Discovering regions of different functions in a city using human mobility and POIs}, - author={Yuan, Jing and Zheng, Yu and Xie, Xing}, - booktitle={Proceedings of the 18th ACM SIGKDD international conference on Knowledge discovery and data mining}, - pages={186--194}, +@book{christen2012data, + title={Data matching: concepts and techniques for record linkage, entity resolution, and duplicate detection}, + author={Christen, Peter}, year={2012}, - organization={ACM} -} - -@article{pan2005representation, - title={La repr{\'e}sentation des habitants de leur quartier: entre bien-{\^e}tre et repli}, - author={Pan K{\'e} Shon, Jean-Louis}, - journal={{\'E}conomie et statistique}, - volume={386}, - number={1}, - pages={3--35}, - year={2005}, - publisher={Institut national de la statistique et des {\'e}tudes {\'e}conomiques} -} - - -@article{maurin2004ghetto, - title={Le ghetto fran{\c{c}}ais}, - author={Maurin, Eric}, - journal={Enqu{\^e}te sur le s{\'e}paratisme social}, - year={2004} -} - -@article{mayer1999automatic, - title={Automatic object extraction from aerial imagery?a survey focusing on buildings}, - author={Mayer, Helmut}, - journal={Computer vision and image understanding}, - volume={74}, - number={2}, - pages={138--149}, - year={1999}, - publisher={Elsevier} + publisher={Springer Science \& Business Media} } -@article{huang2015spatiotemporal, - title={Spatiotemporal detection and analysis of urban villages in mega city regions of China using high-resolution remotely sensed imagery}, - author={Huang, Xin and Liu, Hui and Zhang, Liangpei}, - journal={IEEE Transactions on Geoscience and Remote Sensing}, - volume={53}, - number={7}, - pages={3639--3657}, - year={2015}, - publisher={IEEE} +@article{RealEstate2013, +title = "Toward a user-oriented recommendation system for real estate websites", +journal = "Information Systems", +volume = "38", +number = "2", +pages = "231-243", +year = "2013", +issn = "0306-4379", +doi = "https://doi.org/10.1016/j.is.2012.08.004", +url = "http://www.sciencedirect.com/science/article/pii/S0306437912001081", +author = "Xiaofang Yuan and Ji-Hyun Lee and Sun-Joong Kim and Yoon-Hyun Kim", +keywords = "Home buyer, Real estate website, Housing search behavior, Case-based recommendation system, Ontology" } -@article{du2015semantic, - title={Semantic classification of urban buildings combining VHR image and GIS data: An improved random forest approach}, - author={Du, Shihong and Zhang, Fangli and Zhang, Xiuyuan}, - journal={ISPRS journal of photogrammetry and remote sensing}, - volume={105}, - pages={107--119}, - year={2015}, - publisher={Elsevier} +@article{le2015soho, + title={{Where Is the Soho of Rome? Measures and Algorithms for Finding Similar Neighborhoods in Cities}}, + author={Le Falher, G{\'e}raud and Gionis, Aristides and Mathioudakis, Michael}, + journal={ICWSM}, + volume={2}, + pages={3--2}, + year={2015} } -@article{kang2018building, - title={Building instance classification using street view images}, - author={Kang, Jian and K{\"o}rner, Marco and Wang, Yuanyuan and Taubenb{\"o}ck, Hannes and Zhu, Xiao Xiang}, - journal={ISPRS Journal of Photogrammetry and Remote Sensing}, - year={2018}, - url = {http://www.sciencedirect.com/science/article/pii/S0924271618300352}, - publisher={Elsevier} +@misc{datafrance, + author={DataFrance}, + title={} } @inproceedings{airbnb2017, @@ -83,31 +48,6 @@ year={2017} } -@book{miller2009geographic, - title={Geographic data mining and knowledge discovery}, - author={Miller, Harvey J and Han, Jiawei}, - year={2009}, - publisher={CRC Press} -} - -@article{leidner2011detecting, - title={Detecting geographical references in the form of place names and associated spatial natural language}, - author={Leidner, Jochen L and Lieberman, Michael D}, - journal={SIGSPATIAL Special}, - volume={3}, - number={2}, - pages={5--11}, - year={2011}, - publisher={ACM} -} - -@book{christen2012data, - title={Data matching: concepts and techniques for record linkage, entity resolution, and duplicate detection}, - author={Christen, Peter}, - year={2012}, - publisher={Springer Science \& Business Media} -} - @misc{tang2015neighborhood, title={Neighborhood and price prediction for San Francisco Airbnb listings}, author={Tang, Emily and Sangani, Kunal}, @@ -115,91 +55,6 @@ publisher={Stanford Univ., Stanford, CA, USA, Tech. Rep} } -@inproceedings{actif2013quartiers, - title={Des quartiers in{\'e}gaux face {\`a} la pr{\'e}carit{\'e}}, - author={Actif, Nelly and Levet, Anne and Hoarau, Sylvie and Maillot, Hugues and Andy, Fabrice and Boyer, Max and Calteau, Claris and Trentin, Lydia and Ory, Catherine}, - year={2013}, - booktitle = {Cartographie sociale des territoires}, - publisher={Insee} -} - -@inproceedings{kittur2008crowdsourcing, - title={Crowdsourcing user studies with Mechanical Turk}, - author={Kittur, Aniket and Chi, Ed H and Suh, Bongwon}, - booktitle={Proceedings of the SIGCHI conference on human factors in computing systems}, - pages={453--456}, - year={2008}, - organization={ACM} -} - -@article{kumar2015visual, - title={Visual overlay on OpenStreetMap data to support spatial exploration of urban environments}, - author={Kumar, Chandan and Heuten, Wilko and Boll, Susanne}, - journal={ISPRS International Journal of Geo-Information}, - volume={4}, - number={1}, - pages={87--104}, - year={2015}, - publisher={Multidisciplinary Digital Publishing Institute} -} - -@inproceedings{smarzaro2017could, - title={Could Data from Location-Based Social Networks Be Used to Support Urban Planning?}, - author={Smarzaro, Rodrigo and Lima, Tiago Fran{\c{c}}a de Melo and Davis Jr, Clodoveu A}, - booktitle={Proceedings of the 26th International Conference on World Wide Web Companion}, - pages={1463--1468}, - year={2017}, - organization={International World Wide Web Conferences Steering Committee} -} - -@inproceedings{kennedy2008generating, - title={Generating diverse and representative image search results for landmarks}, - author={Kennedy, Lyndon S and Naaman, Mor}, - booktitle={Proceedings of the 17th international conference on World Wide Web}, - pages={297--306}, - year={2008}, - organization={ACM} -} - -@article{lovejoy2010neighborhood, - title={{Neighborhood satisfaction in suburban versus traditional environments: An evaluation of contributing characteristics in eight California neighborhoods}}, - author={Lovejoy, Kristin and Handy, Susan and Mokhtarian, Patricia}, - journal={Landscape and Urban Planning}, - volume={97}, - number={1}, - pages={37--48}, - year={2010}, - publisher={Elsevier} -} - -@article{saelens2003neighborhood, - title={Neighborhood-based differences in physical activity: an environment scale evaluation}, - author={Saelens, Brian E and Sallis, James F and Black, Jennifer B and Chen, Diana}, - journal={American journal of public health}, - volume={93}, - number={9}, - pages={1552--1558}, - year={2003}, - publisher={American Public Health Association} -} - - -@inproceedings{egcDemo2019, - author = {Nelly Barret and Fabien Duchateau and Franck Favetta and Maryvonne Miquel and Aur{\'e}lien Gentil and Loic Bonneval}, - year = {2019}, - booktitle={EGC ({\`a} paraitre)}, - title = {{\`A} la recherche du quartier id{\'e}al} -} - -@article{le2015soho, - title={{Where Is the Soho of Rome? Measures and Algorithms for Finding Similar Neighborhoods in Cities}}, - author={Le Falher, G{\'e}raud and Gionis, Aristides and Mathioudakis, Michael}, - journal={ICWSM}, - volume={2}, - pages={3--2}, - year={2015} -} - @article{preteceille2009segregation, title={La s{\'e}gr{\'e}gation ethno-raciale a-t-elle augment{\'e} dans la m{\'e}tropole parisienne?}, author={Pr{\'e}teceille, Edmond}, @@ -211,132 +66,6 @@ publisher={Editions Technip \& Ophrys} } - -@article{cranshaw2012livehoods, - title={The livehoods project: Utilizing social media to understand the dynamics of a city}, - author={Cranshaw, Justin and Schwartz, Raz and Hong, Jason and Sadeh, Norman}, - booktitle={AAAI}, - year={2012} -} - -@inproceedings{brindley2014data, - title={A data driven approach to mapping urban neighbourhoods}, - author={Brindley, Paul and Goulding, James and Wilson, Max L}, - booktitle={SIGSPATIAL}, - pages={437--440}, - year={2014}, - organization={ACM} -} - -@inproceedings{zhang2013hoodsquare, - title={Hoodsquare: Modeling and recommending neighborhoods in location-based social networks}, - author={Zhang, Amy X and Noulas, Anastasios and Scellato, Salvatore and Mascolo, Cecilia}, - booktitle={Social Computing}, - pages={69--74}, - year={2013}, - organization={IEEE} -} - -@article{morland2002neighborhood, - title={Neighborhood characteristics associated with the location of food stores and food service places}, - author={Morland, Kimberly and Wing, Steve and Roux, Ana Diez and Poole, Charles}, - journal={American journal of preventive medicine}, - volume={22}, - number={1}, - pages={23--29}, - year={2002}, - publisher={Elsevier} -} - -@inproceedings{lin1998information, - title={An information-theoretic definition of similarity}, - author={Lin, Dekang and others}, - booktitle={{ICML}}, - volume={98}, - number={1998}, - pages={296--304}, - year={1998}, - organization={Citeseer} -} - -@article{yu2016string, - title={String similarity search and join: a survey}, - author={Yu, Minghe and Li, Guoliang and Deng, Dong and Feng, Jianhua}, - journal={Frontiers of Computer Science}, - volume={10}, - number={3}, - pages={399--417}, - year={2016}, - publisher={Springer} -} - -@book{bellahsene2011schema, - title={Schema matching and mapping}, - author={Bellahs{\`e}ne, Zohra and Bonifati, Angela and Rahm, Erhard}, - year={2011}, - publisher={Springer} -} - -@article{zhang2012review, - title={A review on automatic image annotation techniques}, - author={Zhang, Dengsheng and Islam, Md Monirul and Lu, Guojun}, - journal={Pattern Recognition}, - volume={45}, - number={1}, - pages={346--362}, - year={2012}, - publisher={Elsevier} -} - -@article{chen2018biggorilla, - title={{BigGorilla: An Open-Source Ecosystem for Data Preparation and Integration}}, - author={Chen, Chen and Golshan, Behzad and Halevy, Alon Y and Tan, Wang-Chiew and Doan, AnHai}, - journal={IEEE Data Eng. Bull.}, - volume={41}, - number={2}, - pages={10--22}, - year={2018} -} - -@inproceedings{gupta2012karma, - title={Karma: A system for mapping structured sources into the Semantic Web}, - author={Gupta, Shubham and Szekely, Pedro and Knoblock, Craig A and Goel, Aman and Taheriyan, Mohsen and Muslea, Maria}, - booktitle={Extended Semantic Web Conference}, - pages={430--434}, - year={2012}, - organization={Springer} -} - -@inproceedings{strotgen2010extraction, - title={Extraction and exploration of spatio-temporal information in documents}, - author={Str{\"o}tgen, Jannik and Gertz, Michael and Popov, Pavel}, - booktitle={Workshop on Geographic Information Retrieval}, - pages={16}, - year={2010}, - organization={ACM} -} - -@article{shen2015entity, - title={Entity linking with a knowledge base: Issues, techniques, and solutions}, - author={Shen, Wei and Wang, Jianyong and Han, Jiawei}, - journal={Knowledge and Data Engineering, IEEE Transactions on}, - volume={27}, - number={2}, - pages={443--460}, - year={2015}, - publisher={IEEE} -} - -@article{chenu1993transformations, - title={Les transformations socioprofessionnelles du territoire fran{\c{c}}ais, 1982-1990}, - author={Chenu, Alain and Tabard, Nicole}, - journal={Population (french edition)}, - pages={1735--1769}, - year={1993}, - publisher={JSTOR}, - url={https://www.persee.fr/doc/pop_0032-4663_1993_num_48_6_4122} -} - @article{authier2008citadins, title={Les citadins et leur quartier.}, author={Authier, Jean-Yves}, @@ -349,110 +78,6 @@ url={https://www.cairn.info/revue-l-annee-sociologique-2008-1-page-21.html} } -@book{devernois2014gestion, - title={Gestion du patrimoine urbain et revitalisation des quartiers anciens: l'{\'e}clairage de l'exp{\'e}rience fran{\c{c}}aise}, - author={Devernois, Nils and Muller, Sara and Le Bihan, G{\'e}rard}, - year={2014}, - publisher={Agence fran{\c{c}}aise de d{\'e}veloppement (AFD)} -} - -@inproceedings{perez2016outil, - title={Outil d'aide {\`a} la d{\'e}cision multicrit{\`e}re pour la conception de syst{\`e}mes {\'e}nerg{\'e}tiques {\`a} l'{\'e}chelle du quartier}, - author={Perez, Nicolas and Mailhac, Ad{\'e}la{\"\i}de and Inard, Christian and Riederer, Peter}, - booktitle={{IBPSA France Conference}}, - year=2016 -} - -@article{pardoen2015oreilles, - title={Les oreilles {\`a} l'aff{\^u}t! Restitution d'un paysage sonore: {\oe}uvre de l'imaginaire ou recherche d'authenticit{\'e}}, - author={Pardoen, Myl{\`e}ne}, - journal={Silences et bruits du Moyen {\^A}ge {\`a} nos jours: Perceptions, identit{\'e}s sonores et patrimonialisation. L'Harmattan}, - year={2015} -} - -@article{chaix2014quartiers, - title={Quartiers, mobilit{\'e} et sant{\'e}: l'{\'E}tude RECORD}, - author={Chaix, Basile}, - journal={Les Cahiers de l'IAU}, - pages={170--171}, - year={2014} -} - -@incollection{humain20073, - title={Le quartier comme objet en g{\'e}ographie}, - author={Humain-Lamoure, Anne-Lise}, - booktitle={Le quartier}, - pages={41--51}, - year={2007}, - publisher={La D{\'e}couverte} -} - -@TECHREPORT{dev-EVS-LIRIS13, - author = {Bilal Berjawi and Maxime Colomb and Thierry Joliveau and Franck Favetta and Fabien Duchateau and Maryvonne Miquel}, - year = {2013}, - title = {Outil de repérage urbain à travers la prise de points de repère}, - url = {http://evs.host-ed.me/}, - institution = {Laboratoires EVS et LIRIS}, - type = {Prototype} -} - -@inproceedings{li2016point, - title={Point-of-interest recommendations: Learning potential check-ins from friends}, - author={Li, Huayu and Ge, Yong and Hong, Richang and Zhu, Hengshu}, - booktitle={SIGKDD}, - pages={975--984}, - year={2016}, - organization={ACM} -} - -@inproceedings{IntegrationTeenageYears, -author = "Halevy, Alon and Rajaraman, Anand and Ordille, Joann", booktitle = "VLDB '06: Proceedings of the 32nd international conference on Very large data bases", pages = "9--16", publisher = "VLDB Endowment", title = "Data integration: the teenage years", url = "http://portal.acm.org/citation.cfm?id=1164127.1164130", year = "2006" } - -@book{book-recommender2011, - title={Recommender systems handbook}, - author={Ricci, Francesco and Rokach, Lior and Shapira, Bracha and Paul B., Kantor}, - booktitle={Recommender systems handbook}, - pages={872}, - year={2011}, - publisher={Springer} -} - -@Article{Beel2016, -author="Beel, Joeran -and Gipp, Bela -and Langer, Stefan -and Breitinger, Corinna", -title="Research-paper recommender systems: a literature survey", -journal="International Journal on Digital Libraries", -year="2016", -volume="17", -number="4", -pages="305--338", -doi="10.1007/s00799-015-0156-0", -url="https://doi.org/10.1007/s00799-015-0156-0" -} - -@book{quartier2007, - author={Authier, Jean-Yves and Bacqué, Marie-Hélène and Guérin-Pace, France}, - title={Le quartier}, - year={2007}, - publisher={La D{\'e}couverte}, - pages = {304}, - url = {https://www.cairn.info/le-quartier--9782707150714.htm} -} - -@article{RSstateOfArt, author = "Aamir, Mohammad and Bhusry, Mamta", year = "2015", month = "06", pages = "25-32", title = "Recommendation System: State of the Art Approach", volume = "120", booktitle = "International Journal of Computer Applications" } - -@article{RSsurvey, title = "Recommender systems survey", journal = "Knowledge-Based Systems", volume = "46", pages = "109 - 132", year = "2013", issn = "0950-7051", doi = "https://doi.org/10.1016/j.knosys.2013.03.012", url = "http://www.sciencedirect.com/science/article/pii/S0950705113001044", author = "J. Bobadilla and F. Ortega and A. Hernando and A. Gutiérrez", keywords = "Recommender systems, Collaborative filtering, Similarity measures, Evaluation metrics, Prediction, Recommendation, Hybrid, Social, Internet of things, Cold-start" } - -@article{RSprinciples, title = "Recommendation systems: Principles, methods and evaluation", journal = "Egyptian Informatics Journal", volume = "16", number = "3", pages = "261 - 273", year = "2015", issn = "1110-8665", doi = "https://doi.org/10.1016/j.eij.2015.06.005", url = "http://www.sciencedirect.com/science/article/pii/S1110866515000341", author = "F.O. Isinkaye and Y.O. Folajimi and B.A. Ojokoh", keywords = "Collaborative filtering, Content-based filtering, Hybrid filtering technique, Recommendation systems, Evaluation" } - -@inbook{RSchap9, place = "Cambridge", edition = "2", title = "Recommendation Systems", DOI = "10.1017/CBO9781139924801.010", booktitle = "Mining of Massive Datasets", publisher = "Cambridge University Press", author = "Leskovec, Jure and Rajaraman, Anand and Ullman, Jeffrey David", year = "2014", pages = "292?324" } - -@inproceedings{RScontent, title = "Content-Based Recommendation Systems", author = "Michael J. Pazzani and Daniel Billsus", booktitle = "The Adaptive Web", year = "2007" } @inproceedings{RScollabo, title = "A Survey of Collaborative Filtering Techniques", journal = "Advances in Artificial Intelligence", year = "2009", author = "Xiaoyuan Su and Taghi M. Khoshgoftaar", DOI = "10.1155/2009/421425", url = "http://dx.doi.org/10.1155/2009/421425" } -@article{RealEstate, title = "Toward a user-oriented recommendation system for real estate websites", journal = "Information Systems", volume = "38", number = "2", pages = "231 - 243", year = "2013", issn = "0306-4379", doi = "https://doi.org/10.1016/j.is.2012.08.004", url = "http://www.sciencedirect.com/science/article/pii/S0306437912001081", author = "Xiaofang Yuan and Ji-Hyun Lee and Sun-Joong Kim and Yoon-Hyun Kim", keywords = "Home buyer, Real estate website, Housing search behavior, Case-based recommendation system, Ontology" } -@book{svdRef, author = "Alan Kaylor Cline AND Inderjit S. Dhillon", title = "Computation of the Singular Value Decomposition", booktitle = "Handbook of Linear Algebra", publisher = "CRC Press", publisher = "CRC Press", page = "45?1?-45?13", year = "2006", month = "jan", abstract = "Computation of the Singular Value Decomposition" } -@article{nmfRef, author = {Yu-xiong Wang and Yu-jin Zhang}, title = {Nonnegative Matrix Factorization: A Comprehensive Review}, journal = {IEEE TRANS. KNOWLEDGE AND DATA ENG}, year = {2013}, pages = {1336--1353} } diff --git a/mongiris/data/example-iris.json b/mongiris/data/example-iris.json new file mode 100644 index 0000000000000000000000000000000000000000..37715c3223ba3788186c0989f4a28dc41946d115 --- /dev/null +++ b/mongiris/data/example-iris.json @@ -0,0 +1,876 @@ +{ + "_id": { + "$oid": "5be32b56f3f0b960b1f8661b" + }, + "geometry": { + "coordinates": [ + [ + [ + 3.0679927, + 50.6395268 + ], + [ + 3.066948, + 50.6392617 + ], + [ + 3.0660968, + 50.6390441 + ], + [ + 3.0659867, + 50.6390109 + ], + [ + 3.0658299, + 50.6389222 + ], + [ + 3.0654964, + 50.6386083 + ], + [ + 3.0653254, + 50.638393 + ], + [ + 3.0652024, + 50.6382135 + ], + [ + 3.0649564, + 50.6378448 + ], + [ + 3.0648079, + 50.6376484 + ], + [ + 3.0647995, + 50.6376439 + ], + [ + 3.0647063, + 50.6375982 + ], + [ + 3.0646569, + 50.6375856 + ], + [ + 3.0646117, + 50.6375785 + ], + [ + 3.0645595, + 50.6375776 + ], + [ + 3.0645143, + 50.6375794 + ], + [ + 3.0644593, + 50.6375929 + ], + [ + 3.0632395, + 50.6382881 + ], + [ + 3.0623121, + 50.6391798 + ], + [ + 3.0621641, + 50.6393701 + ], + [ + 3.062088, + 50.6394563 + ], + [ + 3.0620542, + 50.639494 + ], + [ + 3.0619132, + 50.6396152 + ], + [ + 3.0612751, + 50.6399978 + ], + [ + 3.0607555, + 50.6403041 + ], + [ + 3.0596385, + 50.6409517 + ], + [ + 3.0595694, + 50.6409813 + ], + [ + 3.0596315, + 50.6410181 + ], + [ + 3.0603094, + 50.641366 + ], + [ + 3.0603334, + 50.6413776 + ], + [ + 3.060668, + 50.6415354 + ], + [ + 3.0607754, + 50.6415811 + ], + [ + 3.0605436, + 50.642502 + ], + [ + 3.0598498, + 50.6429878 + ], + [ + 3.0599007, + 50.6430093 + ], + [ + 3.062383, + 50.6440186 + ], + [ + 3.0628123, + 50.6441988 + ], + [ + 3.0629984, + 50.6440479 + ], + [ + 3.0649601, + 50.6421698 + ], + [ + 3.0669823, + 50.6406608 + ], + [ + 3.0675335, + 50.6401992 + ], + [ + 3.0679716, + 50.6395591 + ], + [ + 3.0679927, + 50.6395268 + ] + ] + ], + "type": "Polygon" + }, + "properties": { + "CODE_IRIS": "593500203", + "DEP": "59", + "GRD_QUART": "5935002", + "INSEE_COM": "59350", + "IRIS": "0203", + "LAB_IRIS": "1", + "LIBIRIS": "vieux lille 3", + "MODIF_IRIS": "0", + "NOM_COM": "Lille", + "NOM_IRIS": "vieux lille 3", + "REG": "32", + "TRIRIS": "591621", + "TYP_IRIS": "H", + "UU2010": "59702", + "grouped_indicators": { + "animation-commerce-alimentaire-grandesurface": 0.0, + "animation-commerce-alimentaire-proximite": 10.0, + "animation-commerce-nonalimentaire": 221.0, + "animation-culturel": 0.0, + "animation-divertissement": 63.0, + "csp": 0.0, + "education-creche": 0.0, + "education-primaire-prive": 0.0, + "education-primaire-public": 0.0, + "education-secondaire-cycle1-prive": 0.0, + "education-secondaire-cycle1-public": 1.0, + "education-secondaire-cycle2-general-prive": 0.0, + "education-secondaire-cycle2-general-public": 1.0, + "education-secondaire-cycle2-professionnel-prive": 0.0, + "education-secondaire-cycle2-professionnel-public": 0.0, + "education-superieur-prive": 0.0, + "education-superieur-public": 5.0, + "espacevert": 0.0, + "logement-annee": 0.0, + "logement-residence": 0.0, + "logement-resident": 0.0, + "logement-type": 0.0, + "loisir": 1.0, + "securite": 0.0, + "service-actionsociale": 0.0, + "service-divers-prive": 32.0, + "service-divers-public": 1.0, + "service-emploi": 4.0, + "service-justice": 2.0, + "service-sante": 0.0, + "transport-busmetrotram": 0.0, + "transport-longuedistance": 0.0, + "transport-velo": 0.0 + }, + "raw_indicators": { + "C101": 0.0, + "C101_NB_CANT": 0.0, + "C101_NB_EP": 0.0, + "C101_NB_RPIC": 0.0, + "C102": 0.0, + "C102_NB_CANT": 0.0, + "C102_NB_EP": 0.0, + "C104": 0.0, + "C104_NB_CANT": 0.0, + "C104_NB_EP": 0.0, + "C104_NB_PELEM": 0.0, + "C104_NB_RPIC": 0.0, + "C105": 0.0, + "C105_NB_CANT": 0.0, + "C105_NB_EP": 0.0, + "C105_NB_PELEM": 0.0, + "C14_ACT1564": 1648.8067853027935, + "C14_ACT1564_CS1": 0.0, + "C14_ACT1564_CS2": 91.4353266501884, + "C14_ACT1564_CS3": 660.1414954036177, + "C14_ACT1564_CS4": 497.29798497929255, + "C14_ACT1564_CS5": 327.8370969642264, + "C14_ACT1564_CS6": 50.68686769818338, + "C14_ACTOCC1564": 1409.071078697983, + "C14_ACTOCC1564_CS1": 0.0, + "C14_ACTOCC1564_CS2": 71.5360475800934, + "C14_ACTOCC1564_CS3": 632.8441449323466, + "C14_ACTOCC1564_CS4": 416.8605991122668, + "C14_ACTOCC1564_CS5": 247.3710661036388, + "C14_ACTOCC1564_CS6": 40.45922096963743, + "C14_ACTOCC15P": 1419.256519156833, + "C14_ACTOCC15P_DROU": 54.24338853807423, + "C14_ACTOCC15P_MAR": 356.6420611897365, + "C14_ACTOCC15P_PAS": 46.06775626417813, + "C14_ACTOCC15P_TCOM": 406.7158554982995, + "C14_ACTOCC15P_VOIT": 555.5874576665447, + "C14_COUPAENF": 103.4686393371699, + "C14_COUPSENF": 274.40912184294484, + "C14_F15P": 1284.984552753, + "C14_F15P_CS1": 0.0, + "C14_F15P_CS2": 20.53449394050125, + "C14_F15P_CS3": 279.648814900139, + "C14_F15P_CS4": 290.6031561317331, + "C14_F15P_CS5": 179.86637204048628, + "C14_F15P_CS6": 13.23653730951128, + "C14_F15P_CS7": 78.69908610670763, + "C14_F15P_CS8": 422.39609232392127, + "C14_FAM": 454.7784231840584, + "C14_FAMMONO": 76.90066200394364, + "C14_H15P": 1116.3531878537135, + "C14_H15P_CS1": 0.0, + "C14_H15P_CS2": 70.90083270968714, + "C14_H15P_CS3": 383.9686392597848, + "C14_H15P_CS4": 206.69482884755945, + "C14_H15P_CS5": 154.68020662628413, + "C14_H15P_CS6": 37.4503303886721, + "C14_H15P_CS7": 52.40635785870913, + "C14_H15P_CS8": 210.25199216301704, + "C14_MEN": 1776.265683124324, + "C14_MENCOUPAENF": 103.4686393371699, + "C14_MENCOUPSENF": 274.40912184294484, + "C14_MENFAM": 454.7784231840584, + "C14_MENFAMMONO": 76.90066200394364, + "C14_MENFSEUL": 679.911839186028, + "C14_MENHSEUL": 506.1058697044923, + "C14_MENPSEUL": 1186.0177088905202, + "C14_MENSFAM": 135.46955104974543, + "C14_MEN_CS1": 0.0, + "C14_MEN_CS2": 80.4764812947404, + "C14_MEN_CS3": 522.9305197348606, + "C14_MEN_CS4": 365.8287234131342, + "C14_MEN_CS5": 235.1647101314125, + "C14_MEN_CS6": 40.3591061994513, + "C14_MEN_CS7": 106.8633213584972, + "C14_MEN_CS8": 424.642820992228, + "C14_NE24F0": 287.9704062879149, + "C14_NE24F1": 93.70663795368154, + "C14_NE24F2": 48.85925633554244, + "C14_NE24F3": 14.367149883017, + "C14_NE24F4P": 9.87497272390255, + "C14_PMEN": 2594.338128940044, + "C14_PMEN_CS1": 0.0, + "C14_PMEN_CS2": 116.01273301925887, + "C14_PMEN_CS3": 834.0395111563456, + "C14_PMEN_CS4": 527.8121225758268, + "C14_PMEN_CS5": 363.7261088859278, + "C14_PMEN_CS6": 70.69390605271015, + "C14_PMEN_CS7": 158.61730337757132, + "C14_PMEN_CS8": 523.4364438724036, + "C14_PMEN_MENCOUPAENF": 389.15382031174704, + "C14_PMEN_MENCOUPSENF": 548.8182436858897, + "C14_PMEN_MENFAM": 1130.408108454502, + "C14_PMEN_MENFAMMONO": 192.43604445686498, + "C14_PMEN_MENFSEUL": 679.911839186028, + "C14_PMEN_MENHSEUL": 506.1058697044923, + "C14_PMEN_MENPSEUL": 1186.0177088905202, + "C14_PMEN_MENSFAM": 277.9123115950221, + "C14_POP15P": 2401.3377406067134, + "C14_POP15P_CS1": 0.0, + "C14_POP15P_CS2": 91.4353266501884, + "C14_POP15P_CS3": 663.6174541599238, + "C14_POP15P_CS4": 497.29798497929255, + "C14_POP15P_CS5": 334.5465786667704, + "C14_POP15P_CS6": 50.68686769818338, + "C14_POP15P_CS7": 131.10544396541675, + "C14_POP15P_CS8": 632.6480844869383, + "C201": 1.0, + "C201_NB_CANT": 1.0, + "C201_NB_EP": 0.0, + "C201_NB_INT": 0.0, + "C301": 1.0, + "C301_NB_CANT": 1.0, + "C301_NB_EP": 0.0, + "C301_NB_INT": 1.0, + "C301_NB_PGE": 1.0, + "C302": 0.0, + "C302_NB_CANT": 0.0, + "C302_NB_EP": 0.0, + "C302_NB_INT": 0.0, + "C302_NB_PGE": 0.0, + "C303": 0.0, + "C303_NB_INT": 0.0, + "C303_NB_PGE": 0.0, + "C304": 0.0, + "C304_NB_CANT": 0.0, + "C304_NB_INT": 0.0, + "C305": 0.0, + "C305_NB_CANT": 0.0, + "C305_NB_INT": 0.0, + "C401": 1.0, + "C402": 0.0, + "C403": 0.0, + "C409": 2.0, + "C501": 0.0, + "C502": 0.0, + "C503": 0.0, + "C504": 0.0, + "C505": 0.0, + "C505_NB_INT": 0.0, + "C509": 0.0, + "C601": 2.0, + "C602": 0.0, + "C603": 0.0, + "C604": 0.0, + "C605": 0.0, + "C605_NB_INT": 0.0, + "C609": 0.0, + "C701": 0.0, + "C702": 0.0, + "COM": "59350", + "DEC_D114": 5810.0, + "DEC_D214": 11126.0, + "DEC_D314": 15558.0, + "DEC_D414": 19406.0, + "DEC_D614": 29126.0, + "DEC_D714": 34768.0, + "DEC_D814": 41934.0, + "DEC_D914": 61014.0, + "DEC_EQ14": 1.0016250677111547, + "DEC_GI14": 0.4368578399, + "DEC_MED14": 23999.0, + "DEC_PAUT14": 9.0, + "DEC_PBEN14": 6.6, + "DEC_PCHO14": 3.3, + "DEC_PIMP14": 62.95986622073578, + "DEC_PPEN14": 13.4, + "DEC_PTSA14": 67.7, + "DEC_Q114": 13624.0, + "DEC_Q314": 37662.0, + "DEC_RD14": 10.501549053356282, + "DEC_S80S2014": 13.672066984332412, + "DEC_TP6014": 22.027239392352016, + "GRD_QUART": "5935002", + "LAB_IRIS": "1", + "LIBCOM": "Lille", + "LIBIRIS": "vieux lille 3", + "LIB_COM": "Lille", + "LIB_IRIS": "vieux lille 3", + "MODIF_IRIS": "0", + "NB_A101": 0.0, + "NB_A104": 0.0, + "NB_A105": 0.0, + "NB_A106": 1.0, + "NB_A107": 1.0, + "NB_A108": 0.0, + "NB_A109": 0.0, + "NB_A115": 0.0, + "NB_A119": 0.0, + "NB_A120": 0.0, + "NB_A121": 0.0, + "NB_A122": 0.0, + "NB_A123": 0.0, + "NB_A124": 0.0, + "NB_A125": 0.0, + "NB_A203": 8.0, + "NB_A205": 0.0, + "NB_A206": 1.0, + "NB_A207": 0.0, + "NB_A208": 0.0, + "NB_A301": 0.0, + "NB_A302": 0.0, + "NB_A303": 0.0, + "NB_A304": 0.0, + "NB_A401": 0.0, + "NB_A402": 1.0, + "NB_A403": 2.0, + "NB_A404": 0.0, + "NB_A405": 2.0, + "NB_A406": 1.0, + "NB_A501": 6.0, + "NB_A502": 0.0, + "NB_A503": 4.0, + "NB_A504": 63.0, + "NB_A505": 10.0, + "NB_A506": 0.0, + "NB_A507": 4.0, + "NB_B101": 0.0, + "NB_B102": 0.0, + "NB_B103": 0.0, + "NB_B201": 3.0, + "NB_B202": 4.0, + "NB_B203": 2.0, + "NB_B204": 1.0, + "NB_B205": 0.0, + "NB_B206": 0.0, + "NB_B301": 6.0, + "NB_B302": 146.0, + "NB_B303": 8.0, + "NB_B304": 23.0, + "NB_B305": 1.0, + "NB_B306": 3.0, + "NB_B307": 2.0, + "NB_B308": 3.0, + "NB_B309": 2.0, + "NB_B310": 6.0, + "NB_B311": 7.0, + "NB_B312": 3.0, + "NB_B313": 4.0, + "NB_B315": 1.0, + "NB_B316": 0.0, + "NB_D201": 4.0, + "NB_D202": 0.0, + "NB_D203": 1.0, + "NB_D204": 2.0, + "NB_D205": 0.0, + "NB_D206": 0.0, + "NB_D207": 0.0, + "NB_D208": 0.0, + "NB_D209": 0.0, + "NB_D210": 0.0, + "NB_D211": 0.0, + "NB_D212": 0.0, + "NB_D213": 0.0, + "NB_D221": 10.0, + "NB_D231": 0.0, + "NB_D232": 1.0, + "NB_D233": 5.0, + "NB_D235": 4.0, + "NB_D236": 0.0, + "NB_D237": 0.0, + "NB_D238": 0.0, + "NB_D239": 0.0, + "NB_D240": 0.0, + "NB_D242": 0.0, + "NB_D243": 4.0, + "NB_D401": 0.0, + "NB_D402": 0.0, + "NB_D403": 0.0, + "NB_D404": 0.0, + "NB_D405": 0.0, + "NB_D502": 0.0, + "NB_D601": 0.0, + "NB_D602": 0.0, + "NB_D603": 0.0, + "NB_D604": 0.0, + "NB_D605": 0.0, + "NB_D606": 0.0, + "NB_D701": 0.0, + "NB_D702": 2.0, + "NB_D703": 0.0, + "NB_D704": 0.0, + "NB_D705": 0.0, + "NB_D709": 0.0, + "NB_E101": 1.0, + "NB_E102": 0.0, + "NB_E103": 0.0, + "NB_E106": 0.0, + "NB_F101": 0.0, + "NB_F101_NB_AIREJEU": 0.0, + "NB_F101_NB_COU": 0.0, + "NB_F101_NB_ECL": 0.0, + "NB_F102": 0.0, + "NB_F102_NB_AIREJEU": 0.0, + "NB_F102_NB_COU": 0.0, + "NB_F102_NB_ECL": 0.0, + "NB_F103": 0.0, + "NB_F103_NB_AIREJEU": 0.0, + "NB_F103_NB_COU": 0.0, + "NB_F103_NB_ECL": 0.0, + "NB_F104": 0.0, + "NB_F104_NB_AIREJEU": 0.0, + "NB_F104_NB_COU": 0.0, + "NB_F104_NB_ECL": 0.0, + "NB_F105": 0.0, + "NB_F105_NB_AIREJEU": 0.0, + "NB_F105_NB_COU": 0.0, + "NB_F105_NB_ECL": 0.0, + "NB_F106": 0.0, + "NB_F106_NB_AIREJEU": 0.0, + "NB_F106_NB_COU": 0.0, + "NB_F106_NB_ECL": 0.0, + "NB_F107": 0.0, + "NB_F107_NB_AIREJEU": 0.0, + "NB_F107_NB_COU": 0.0, + "NB_F107_NB_ECL": 0.0, + "NB_F108": 0.0, + "NB_F108_NB_AIREJEU": 0.0, + "NB_F108_NB_COU": 0.0, + "NB_F108_NB_ECL": 0.0, + "NB_F109": 0.0, + "NB_F109_NB_AIREJEU": 0.0, + "NB_F109_NB_COU": 0.0, + "NB_F109_NB_ECL": 0.0, + "NB_F110": 0.0, + "NB_F110_NB_AIREJEU": 0.0, + "NB_F110_NB_COU": 0.0, + "NB_F110_NB_ECL": 0.0, + "NB_F111": 1.0, + "NB_F111_NB_AIREJEU": 1.0, + "NB_F111_NB_COU": 0.0, + "NB_F111_NB_ECL": 1.0, + "NB_F112": 0.0, + "NB_F112_NB_AIREJEU": 0.0, + "NB_F112_NB_COU": 0.0, + "NB_F112_NB_ECL": 0.0, + "NB_F113": 0.0, + "NB_F113_NB_AIREJEU": 0.0, + "NB_F113_NB_COU": 0.0, + "NB_F113_NB_ECL": 0.0, + "NB_F114": 0.0, + "NB_F114_NB_AIREJEU": 0.0, + "NB_F114_NB_COU": 0.0, + "NB_F114_NB_ECL": 0.0, + "NB_F116": 0.0, + "NB_F116_NB_AIREJEU": 0.0, + "NB_F116_NB_COU": 0.0, + "NB_F116_NB_ECL": 0.0, + "NB_F117": 0.0, + "NB_F117_NB_AIREJEU": 0.0, + "NB_F117_NB_COU": 0.0, + "NB_F117_NB_ECL": 0.0, + "NB_F118": 0.0, + "NB_F118_NB_AIREJEU": 0.0, + "NB_F118_NB_COU": 0.0, + "NB_F118_NB_ECL": 0.0, + "NB_F119": 0.0, + "NB_F119_NB_AIREJEU": 0.0, + "NB_F119_NB_COU": 0.0, + "NB_F119_NB_ECL": 0.0, + "NB_F120": 0.0, + "NB_F120_NB_AIREJEU": 0.0, + "NB_F120_NB_COU": 0.0, + "NB_F120_NB_ECL": 0.0, + "NB_F121": 0.0, + "NB_F121_NB_AIREJEU": 0.0, + "NB_F121_NB_COU": 0.0, + "NB_F121_NB_ECL": 0.0, + "NB_F201": 0.0, + "NB_F201_NB_AIREJEU": 0.0, + "NB_F202": 0.0, + "NB_F202_NB_AIREJEU": 0.0, + "NB_F203": 0.0, + "NB_F203_NB_AIREJEU": 0.0, + "NB_F302": 0.0, + "NB_F302_NB_SALLES": 0.0, + "NB_F303": 0.0, + "NB_F303_NB_SALLES": 0.0, + "NB_F304": 1.0, + "NB_F305": 1.0, + "NB_G101": 3.0, + "NB_G102": 1.0, + "NB_G103": 0.0, + "NB_G104": 0.0, + "P14_ACT1524": 309.7314476337856, + "P14_ACT1564": 1648.8067853027935, + "P14_ACT2554": 1247.385031631575, + "P14_ACT5564": 91.69030603743322, + "P14_ACTOCC1524": 224.52807065817643, + "P14_ACTOCC1564": 1409.071078697983, + "P14_ACTOCC15P": 1419.256519156833, + "P14_ACTOCC15P_ILT1": 721.9844175746337, + "P14_ACTOCC15P_ILT2": 547.9507287352801, + "P14_ACTOCC15P_ILT2P": 697.2721015821994, + "P14_ACTOCC15P_ILT3": 63.31215539569489, + "P14_ACTOCC15P_ILT4": 62.27677194791554, + "P14_ACTOCC15P_ILT5": 23.73244550330887, + "P14_ACTOCC15P_TP": 233.23474243268288, + "P14_ACTOCC2554": 1109.7476241637671, + "P14_ACTOCC5564": 74.79538387603914, + "P14_AINACT1564": 50.26368285851711, + "P14_ANEM_RP": 8881.541737207943, + "P14_ANEM_RP_GRAT": 367.6803489256584, + "P14_ANEM_RP_LOC": 5300.484675590601, + "P14_ANEM_RP_LOCHLMV": 1799.8641446507863, + "P14_ANEM_RP_PROP": 3213.376712691685, + "P14_APPART": 1963.0279132157332, + "P14_CHOM1524": 85.20337697560916, + "P14_CHOM1564": 239.7357066048108, + "P14_CHOM2554": 137.63740746780752, + "P14_CHOM5564": 16.89492216139407, + "P14_ETUD1564": 547.1424874754786, + "P14_F0014": 65.98584840704873, + "P14_F0019": 228.91960260518357, + "P14_F1524": 475.500711410874, + "P14_F1529": 729.9886675368745, + "P14_F1564": 1195.4534440991922, + "P14_F2064": 1032.5196899010575, + "P14_F2554": 642.2981945121777, + "P14_F3044": 298.72860713894084, + "P14_F4559": 130.32294676185828, + "P14_F5564": 77.6545381761405, + "P14_F6074": 97.31138143616737, + "P14_F65P": 92.53111092707276, + "P14_F75P": 31.632952152424068, + "P14_FACT1524": 142.01852062598152, + "P14_FACT1564": 801.8001371904311, + "P14_FACT2554": 608.6653283259252, + "P14_FACT5564": 51.11628823852438, + "P14_FACTOCC1524": 110.9992620877809, + "P14_FACTOCC1564": 683.4379375184105, + "P14_FACTOCC15P": 686.9351882576357, + "P14_FACTOCC2554": 534.7200586142741, + "P14_FACTOCC5564": 37.71861681635548, + "P14_FAINACT1564": 43.67560790907834, + "P14_FCHOM1564": 118.36219967202057, + "P14_FETUD1564": 343.4785702619003, + "P14_FINACT1564": 393.6533069087611, + "P14_FNSAL15P": 49.1728349124712, + "P14_FNSCOL15P": 846.92149519763, + "P14_FNSCOL15P_BAC": 114.95534293716644, + "P14_FNSCOL15P_CAPBEP": 61.99878971684883, + "P14_FNSCOL15P_DIPLMIN": 97.73874721438746, + "P14_FNSCOL15P_SUP": 572.2286153292273, + "P14_FRETR1564": 6.49912873778261, + "P14_FSAL15P": 637.7623533451645, + "P14_FSAL15P_TP": 134.6762407328356, + "P14_H0014": 143.01455205036316, + "P14_H0019": 216.43196351746568, + "P14_H1524": 361.3804647443746, + "P14_H1529": 557.6508565345168, + "P14_H1564": 1071.651238117438, + "P14_H2064": 998.2338266503356, + "P14_H2554": 655.3041577320963, + "P14_H3044": 353.0335387785199, + "P14_H4559": 128.99486411600716, + "P14_H5564": 54.96661564096701, + "P14_H6074": 66.32487494301868, + "P14_H65P": 44.70194973627585, + "P14_H75P": 10.34905348165118, + "P14_HACT1524": 167.71292700780407, + "P14_HACT1564": 847.0066481123627, + "P14_HACT2554": 638.7197033056498, + "P14_HACT5564": 40.57401779890883, + "P14_HACTOCC1524": 113.52880857039553, + "P14_HACTOCC1564": 725.6331411795725, + "P14_HACTOCC15P": 732.3213308991974, + "P14_HACTOCC2554": 575.0275655494933, + "P14_HACTOCC5564": 37.07676705968366, + "P14_HAINACT1564": 6.58807494943877, + "P14_HCHOM1564": 121.3735069327902, + "P14_HETUD1564": 203.6639172135783, + "P14_HINACT1564": 224.64459000507526, + "P14_HNSAL15P": 149.34447801321994, + "P14_HNSCOL15P": 798.0346996345332, + "P14_HNSCOL15P_BAC": 81.57463332679706, + "P14_HNSCOL15P_CAPBEP": 38.57681194848748, + "P14_HNSCOL15P_DIPLMIN": 93.67220884265105, + "P14_HNSCOL15P_SUP": 584.2110455165977, + "P14_HRETR1564": 14.39259784205818, + "P14_HSAL15P": 582.9768528859775, + "P14_HSAL15P_TP": 53.46478253121339, + "P14_INACT1564": 618.2978969138366, + "P14_LOG": 2048.0013459733186, + "P14_LOGVAC": 168.31736586380876, + "P14_MAISON": 84.97343275758529, + "P14_MEN": 1776.265683124324, + "P14_MEN_ANEM0002": 711.4955208502483, + "P14_MEN_ANEM0204": 523.718110277868, + "P14_MEN_ANEM0509": 229.60602621905429, + "P14_MEN_ANEM10P": 311.4460257771536, + "P14_NBPI_RP": 4156.184898512361, + "P14_NBPI_RPAPPART": 3864.493864309066, + "P14_NBPI_RPMAISON": 291.691034203295, + "P14_NBPI_RP_ANEM0002": 1473.7811590235578, + "P14_NBPI_RP_ANEM0204": 1148.934485852665, + "P14_NBPI_RP_ANEM0509": 580.1601882376875, + "P14_NBPI_RP_ANEM10P": 953.3090653984506, + "P14_NPER_RP": 2594.338128940044, + "P14_NPER_RP_GRAT": 61.201236231046, + "P14_NPER_RP_LOC": 2031.296916456316, + "P14_NPER_RP_LOCHLMV": 296.7457708639684, + "P14_NPER_RP_PROP": 501.8399762526821, + "P14_NSAL15P": 198.51731292569116, + "P14_NSAL15P_AIDFAM": 3.21223096331883, + "P14_NSAL15P_EMPLOY": 80.59959007625596, + "P14_NSAL15P_INDEP": 114.70549188611636, + "P14_NSAL15P_TP": 45.09371916863389, + "P14_NSCOL15P": 1644.9561948321632, + "P14_NSCOL15P_BAC": 196.52997626396348, + "P14_NSCOL15P_CAPBEP": 100.57560166533632, + "P14_NSCOL15P_DIPLMIN": 191.41095605703848, + "P14_NSCOL15P_SUP": 1156.4396608458248, + "P14_PHORMEN": 19.00001439734652, + "P14_PMEN": 2594.338128940044, + "P14_PMEN_ANEM0002": 989.9007512382263, + "P14_PMEN_ANEM0204": 737.3767548649073, + "P14_PMEN_ANEM0509": 390.6555084716053, + "P14_PMEN_ANEM10P": 476.4051143653053, + "P14_POP": 2613.33814333739, + "P14_POP0002": 59.34399597081006, + "P14_POP0014": 209.0004004574119, + "P14_POP0019": 445.3515661226492, + "P14_POP0205": 56.87270936264008, + "P14_POP0305": 43.14781189486896, + "P14_POP0610": 62.4561371263745, + "P14_POP1114": 44.05245546535839, + "P14_POP1117": 78.43325362673599, + "P14_POP1517": 34.3807981613776, + "P14_POP1524": 836.8811761552486, + "P14_POP1524_PSEUL": 465.1330447651116, + "P14_POP1529": 1287.6395240713914, + "P14_POP1564": 2267.1046822166304, + "P14_POP15P": 2404.337742879979, + "P14_POP15P_MARIEE": 369.58349020687217, + "P14_POP15P_NONMARIEE": 2034.7542526731067, + "P14_POP15P_PSEUL": 1186.0177088905205, + "P14_POP1824": 802.500377993871, + "P14_POP2064": 2030.753516551393, + "P14_POP2529": 450.7583479161427, + "P14_POP2539": 949.7273677798833, + "P14_POP2554": 1297.602352244274, + "P14_POP2554_PSEUL": 601.5327623949571, + "P14_POP3044": 651.7621459174608, + "P14_POP30P": 1116.6982188085876, + "P14_POP4054": 347.8749844643908, + "P14_POP4559": 259.31781087786544, + "P14_POP5564": 132.6211538171075, + "P14_POP5579": 238.34266908113727, + "P14_POP5579_PSEUL": 91.21620031725284, + "P14_POP6074": 163.63625637918605, + "P14_POP6579": 105.72151526402978, + "P14_POP65P": 137.23306066334862, + "P14_POP75P": 41.98200563407525, + "P14_POP80P": 31.51154539931884, + "P14_POP80P_PSEUL": 28.1357014131989, + "P14_POPF": 1353.9704034333138, + "P14_POPH": 1259.3677399040769, + "P14_POPMEN1524": 817.8811617579022, + "P14_POPMEN15P": 2385.3377284826324, + "P14_POPMEN2554": 1297.602352244274, + "P14_POPMEN5579": 238.34266908113727, + "P14_POPMEN80P": 31.51154539931884, + "P14_POP_ETR": 169.40719672080567, + "P14_POP_FR": 2443.930946616585, + "P14_POP_IMM": 211.6162886678653, + "P14_RETR1564": 20.89172657984079, + "P14_RP": 1776.265683124324, + "P14_RPAPPART": 1709.245583596408, + "P14_RPAPPART_ACH05": 328.85630570679774, + "P14_RPAPPART_ACH11": 20.39880778688481, + "P14_RPAPPART_ACH19": 540.4920068221271, + "P14_RPAPPART_ACH45": 131.71378804649865, + "P14_RPAPPART_ACH70": 233.4142765232376, + "P14_RPAPPART_ACH90": 429.953519485043, + "P14_RPAPPART_ACHTOT": 1684.8287043705889, + "P14_RPMAISON": 67.02009952791634, + "P14_RPMAISON_ACH05": 7.86802114523439, + "P14_RPMAISON_ACH11": 0.0, + "P14_RPMAISON_ACH19": 40.94512718018552, + "P14_RPMAISON_ACH45": 10.44916825183731, + "P14_RPMAISON_ACH70": 0.0, + "P14_RPMAISON_ACH90": 7.75778295065913, + "P14_RPMAISON_ACHTOT": 67.02009952791634, + "P14_RP_100120M2": 114.59039300951306, + "P14_RP_120M2P": 79.31964388046033, + "P14_RP_1P": 409.7211260043776, + "P14_RP_2P": 732.5138704736752, + "P14_RP_3040M2": 388.9467846130259, + "P14_RP_3P": 389.40236665080647, + "P14_RP_4060M2": 469.5739997578953, + "P14_RP_4P": 152.04112605675925, + "P14_RP_5PP": 92.5871939387058, + "P14_RP_6080M2": 275.8449876226639, + "P14_RP_80100M2": 140.7096478785092, + "P14_RP_ACH05": 336.72432685203216, + "P14_RP_ACH11": 20.39880778688481, + "P14_RP_ACH19": 581.4371340023126, + "P14_RP_ACH45": 142.16295629833596, + "P14_RP_ACH70": 233.4142765232376, + "P14_RP_ACH90": 437.7113024357021, + "P14_RP_ACHTOT": 1751.8488038985054, + "P14_RP_BDWC": "", + "P14_RP_CCCOLL": 111.94003096474032, + "P14_RP_CCIND": 411.8683214216369, + "P14_RP_CHOS": "", + "P14_RP_CINDELEC": 1238.996161063163, + "P14_RP_CLIM": "", + "P14_RP_EAUCH": "", + "P14_RP_ELEC": "", + "P14_RP_GARL": 451.312387775808, + "P14_RP_GRAT": 57.98900526772717, + "P14_RP_LOC": 1428.5365297273875, + "P14_RP_LOCHLMV": 166.50918024865155, + "P14_RP_M30M2": 307.28022636225654, + "P14_RP_PROP": 289.7401481292096, + "P14_RP_SDB": 1630.2847987348869, + "P14_RP_TTEGOU": "", + "P14_RP_VOIT1": 783.9755501202808, + "P14_RP_VOIT1P": 898.7340898248593, + "P14_RP_VOIT2P": 114.75853970457857, + "P14_RSECOCC": 103.41829698518575, + "P14_SAL15P": 1220.739206231142, + "P14_SAL15P_APPR": 74.12802281699138, + "P14_SAL15P_CDD": 160.53384753339714, + "P14_SAL15P_CDI": 976.0809564037456, + "P14_SAL15P_EMPAID": 6.709481702544, + "P14_SAL15P_INTERIM": 3.28689777446378, + "P14_SAL15P_TP": 188.14102326404895, + "P14_SCOL0205": 39.65056115564379, + "P14_SCOL0610": 59.16923935191072, + "P14_SCOL1114": 44.05245546535839, + "P14_SCOL1517": 34.3807981613776, + "P14_SCOL1824": 627.2128337448103, + "P14_SCOL2529": 87.72388243588291, + "P14_SCOL30P": 10.06403370574484, + "TRIRIS": "591621", + "UU2010": "59702", + "note": 0.0 + } + }, + "type": "Feature" +} diff --git a/mongiris/data/img/screenshot-mapiris.jpg b/mongiris/data/img/screenshot-mapiris.jpg new file mode 100644 index 0000000000000000000000000000000000000000..573e9c4b9a05bda524b5224d382fd3af487462ea Binary files /dev/null and b/mongiris/data/img/screenshot-mapiris.jpg differ diff --git a/mongiris/data/img/screenshot-vizliris-clustering.png b/mongiris/data/img/screenshot-vizliris-clustering.png new file mode 100644 index 0000000000000000000000000000000000000000..8bcb8cdd8645c76c46465becd9377efd1a1afe96 Binary files /dev/null and b/mongiris/data/img/screenshot-vizliris-clustering.png differ diff --git a/mongiris/data/img/screenshot-vizliris-recommandation.png b/mongiris/data/img/screenshot-vizliris-recommandation.png new file mode 100644 index 0000000000000000000000000000000000000000..64f302a30dc1a7047dfee24b46951c8147f5c646 Binary files /dev/null and b/mongiris/data/img/screenshot-vizliris-recommandation.png differ diff --git a/mongiris/main.py b/mongiris/main.py index f4928f2d4fb5b7e952938e69afc4bd3ee29fe83b..6c3c56a26e71e337ef093fb3502935f6914656c1 100755 --- a/mongiris/main.py +++ b/mongiris/main.py @@ -14,6 +14,30 @@ from mongiris import config class Mongiris: + """ + The Mongiris class is an API to manipulate data from the MongoDB 'dbinsee' datatase. + + Several methods accepts a 'collection' parameter for flexibility (i.e., be able to query other collections than the + iris collection). + Most methods convert resulting documents from the BSON format (MongoDB) to JSON. This mainly avoids the issue of + ObjectId type (for MongoDB '_id' field). + + The constructor initializes the logger and it automatically connects to the database. + The name of the database and of the three collections + are based on the default names (the ones from the dump). If the names are changed in MongoDB, they should be changed + in the `mongiris/config.py` file. + + Examples of usages, including testing geospatial queries, are available in the `mongiris.tests.mongiris_test.py` + file. + + An example of IRIS following the GeoJSON format is provided in `mongiris.data.example-iris.json`. + + Additional resources: + - [MongoDB documentation](http://www.mongodb.org/) + - [GeoJSON format specifications](https://geojson.org/) + - [pymongo](http://api.mongodb.com/python/current/) + + """ def __init__(self): logging.basicConfig(format='[%(levelname)s] - %(name)s - %(asctime)s : %(message)s') @@ -28,9 +52,13 @@ class Mongiris: @staticmethod def bson_to_json(doc_bson): """ - Converts the bson data to valid JSON (including the ObjectId type converted to {"$oid": <string>}) - :param doc_bson: the BSON data to be converted - :return: a JSON object + Converts the bson data to valid JSON (including the ObjectId type converted to {"$oid": <string>}). + + Args: + doc_bson: the BSON data to be converted + + Returns: + doc_json: a JSON object """ doc_json = json.loads(json_util.dumps(doc_bson, json_options=json_util.RELAXED_JSON_OPTIONS)) return doc_json @@ -39,7 +67,10 @@ class Mongiris: """ Tries to connect to MongoDB. The output connection object do not provide reliable connection status, only the boolean connection_status indicates whether the connection is working or not. - :return: connection (an object with information about the connection), connection_status (boolean) + + Returns: + connection: an object with information about the connection + connection_status: a boolean indicating whether the connection is a success or a failure """ connection_status = True # by default, connection is ok connection = None @@ -53,6 +84,7 @@ class Mongiris: @staticmethod def _parse_json_to_dict(json_file_path): + """ Converts a JSON file denoted by json_file_path into a Python dictionary. """ with open(json_file_path) as data_file: data = json.load(data_file) data_file.close() @@ -60,30 +92,39 @@ class Mongiris: @staticmethod def _save_dict_to_json(json_file_path, dict_geo): + """ Converts and saves a Python dictionary into a JSON file denoted by json_file_path. """ with open(json_file_path, 'w') as data_file: json.dump(dict_geo, data_file) def create_index(self, iris_collection): - # this method is used in case of restoration/import + """ Rebuilds a geospatial index on the iris collection. Only used in case of restoration/import. """ self.logger.info("Creating index on 'geometry' using " + pymongo.GEOSPHERE) iris_collection.create_index([("geometry", pymongo.GEOSPHERE)]) self.logger.info("Index created") def count_documents(self, collection, json_query): """ - Counts the number of documents that satisfy json_query in the given collection - :param collection: the collection to count in - :param json_query: the query criteria - :return: the number of documents + Counts the number of documents that satisfy json_query in the given collection. + + Args: + collection: a string representing the collection name + json_query: a dict containing the query criteria (https://docs.mongodb.com/manual/tutorial/query-documents/) + + Returns: + count: an integer representing the number of documents """ return collection.count_documents(json_query) def find_one_document(self, collection, json_query): """ - Finds the first document in the given collection that satisfies json_query - :param collection: the collection to search in - :param json_query: the query criteria - :return: a json document or None + Finds the first document in the given collection that satisfies json_query. + + Args: + collection: a string representing the collection name + json_query: a dict containing the query criteria (https://docs.mongodb.com/manual/tutorial/query-documents/) + + Returns: + doc_json: a dictionary representing an iris, or None """ doc = collection.find_one(json_query) doc_json = Mongiris.bson_to_json(doc) @@ -91,81 +132,109 @@ class Mongiris: def get_iris_from_code(self, code_iris): """ - Returns the iris identified by the given code_iris - :param code_iris: the code of the searched iris - :return: an iris, or None + Returns the iris identified by the given code_iris. + + Args: + code_iris: a string containing the code of the searched iris + + Returns: + iris: a dictionary representing an iris, or None """ iris = self.find_one_document(self.collection_iris, {"properties.CODE_IRIS": code_iris}) return iris def find_documents(self, collection, json_query, json_projection=None): """ - Finds the first document in the given collection that satisfies json_query - :param collection: the collection to search in - :param json_query: the query criteria - :param json_projection: a json document indicating the fields that appear in the results - :return: a cursor (set of documents) + Finds the first document in the given collection that satisfies json_query. + + Args: + collection: a string representing the collection name + json_query: a dict containing the query criteria (https://docs.mongodb.com/manual/tutorial/query-documents/) + json_projection: a json document indicating the fields that appear in the results + + Returns: + doc_json: a cursor (set of documents) """ cursor = collection.find(json_query, json_projection) doc_json = Mongiris.bson_to_json(cursor) return doc_json def get_random_document(self, collection): - # return a random document from the given collection + """ Returns a random document from the given collection. """ random_iris = collection.aggregate([{"$sample": {"size": 1}}]).next() doc_json = Mongiris.bson_to_json(random_iris) return doc_json def update_one_document(self, collection, json_query, json_updates): """ - Updates the first document satisfying json_query by setting new values from json_updates - :param collection: the collection to update into - :param json_query: the query criteria - :param json_updates: a json document containing values to be updates (using $set operator) - :return: json_result: an UpdateResult json document containing information about the update + Updates the first document satisfying json_query by setting new values from json_updates. + + Args: + collection: a string representing the collection name + json_query: a dict containing the query criteria (https://docs.mongodb.com/manual/tutorial/query-documents/) + json_updates: a json document containing values to be updates (using $set operator) + + Returns: + json_result: an UpdateResult json document containing information about the operation """ json_result = collection.update_one(json_query, json_updates) return json_result def replace_one_document(self, collection, json_query, json_replace_doc, upsert=False): """ - Replaces the first document satisfying json_query by the document json_replace_doc (their _id are identical) - :param collection: the collection to replace into - :param json_query: the query criteria - :param json_replace_doc: the replacement doc (if _id set, should be the same _id as the doc matching json_query) - :param upsert: boolean, whether the json_replace_doc should be inserted if no document match json_query - :return: json_result: an UpdateResult json document containing information about the replacement + Replaces the first document satisfying json_query by the document json_replace_doc (their _id are identical). + + Args: + collection: a string representing the collection name + json_query: a dict containing the query criteria (https://docs.mongodb.com/manual/tutorial/query-documents/) + json_replace_doc: the replacement doc (if _id set, should be the same _id as the doc matching json_query) + upsert: a boolean, whether the json_replace_doc should be inserted if no document match json_query + + Returns: + json_result: an UpdateResult json document containing information about the operation """ json_result = collection.replace_one(json_query, json_replace_doc, upsert) return json_result def insert_one_document(self, collection, doc): """ - Insert a new document in the collection - :param collection: the collection to add in - :param doc: the document to be added - :return: json_result: an InsertOneResult json document containing information about the insertion + Inserts a new document in the collection. + + Args: + collection: a string representing the collection name + doc: a dict representing the document to be added + + Returns: + json_result: an InsertOneResult json document containing information about the operation """ json_result = collection.insert_one(doc) return json_result # eg, the new _id is in json_result.inserted_id def delete_all(self, collection): """ - Delete all document in the collection. Careful - :param collection: the collection to empty - :return: + Deletes all documents in the collection. + + Args: + collection: a string representing the collection name + + Returns: + json_result: an DeleteResult json document containing information about the operation """ - collection.delete_many({}) # empty collection - return True + json_result = collection.delete_many({}) # empty collection + return json_result def geo_within(self, collection, geometry, json_projection=None): """ - Find all documents from given collection and which contain totally the given geometry - Cannot be used to find the IRIS containing a point (geometry must be a polygon) - :param collection: the collection to search in - :param geometry: a geojson geometry ("Polygon", "$box" or "MultiPolygon", NO "Point") - :param json_projection: a json document indicating the fields that appear in the results - :return: a cursor (set of documents) + Finds all documents from given collection and which contain totally the given geometry. + Cannot be used to find the IRIS containing a point (geometry must be a polygon). + + Args: + collection: a string representing the collection name + geometry: a geojson geometry ("Polygon", "$box" or "MultiPolygon", NO "Point") + json_projection: a json document indicating the fields that appear in the results + + Returns: + doc_json: a cursor (set of documents) """ cursor = self.find_documents(collection, {"geometry": {"$geoWithin": {"$geometry": geometry}}}, json_projection) doc_json = Mongiris.bson_to_json(cursor) @@ -173,12 +242,16 @@ class Mongiris: def geo_within_sphere(self, collection, sphere, json_projection=None): """ - Find all documents from given collection and which contain totally the given sphere - Cannot be used to find the IRIS containing a point (geometry must be a polygon, with min. 3 points) - :param collection: the collection to search in - :param sphere: a geojson geometry defined by a center and a radius in radians - :param json_projection: a json document indicating the fields that appear in the results - :return: a cursor (set of documents) + Finds all documents from given collection and which contain totally the given sphere. + Cannot be used to find the IRIS containing a point (geometry must be a polygon, with min. 3 points). + + Args: + collection: a string representing the collection name + sphere: a geojson geometry defined by a center and a radius in radians + json_projection: a json document indicating the fields that appear in the results + + Returns: + doc_json: a cursor (set of documents) """ cursor = self.find_documents(collection, {"geometry": {"$geoWithin": sphere}}, json_projection) doc_json = Mongiris.bson_to_json(cursor) @@ -186,11 +259,15 @@ class Mongiris: def intersect(self, collection, geometry, json_projection=None): """ - Find all documents from given collection and which intersect the given geometry - :param collection: the collection to search in - :param geometry: a geojson geometry - :param json_projection: a json document indicating the fields that appear in the results - :return: a cursor (set of documents) + Finds all documents from given collection and which intersect the given geometry. + + Args: + collection: a string representing the collection name + geometry: a geojson geometry + json_projection: a json document indicating the fields that appear in the results + + Returns: + doc_json: a cursor (set of documents) """ cursor = self.find_documents(collection, {"geometry": {"$geoIntersects": { "$geometry": geometry}}}, json_projection) @@ -201,8 +278,12 @@ class Mongiris: def get_geojson_point(coordinates): """ Builds a dictionary with GeoJSON syntax for a point using the given coordinates. - :param coordinates: the coordinates (long, lat) as a list, e.g. [4.8, 45.7] - :return: a dictionary with GeoJSON syntax for a Point + + Args: + coordinates: the coordinates (long, lat) as a list, e.g. [4.8, 45.7] + + Returns: + point: a dictionary with GeoJSON syntax for a Point """ return {"type": "Point", "coordinates": coordinates} @@ -213,11 +294,15 @@ class Mongiris: This method builds the polygon by adding 2 missing points (north-west and south-east) and adds the starting point (south-west) to end the loop. The MongoDB $box operator is not supported with 2d-spherical indexes. - :param lng1 longitude of the first point (south-west) of the box - :param lat1 latitude of the first point (south-west) of the box - :param lng2 longitude of the second point (north-east) of the box - :param lat2 latitude of the second point (north-east) of the box - :return: a dictionary with GeoJSON syntax for a Box + + Args: + lng1: longitude of the first point (south-west) of the box + lat1: latitude of the first point (south-west) of the box + lng2: longitude of the second point (north-east) of the box + lat2: latitude of the second point (north-east) of the box + + Returns: + box: a dictionary with GeoJSON syntax for a Box """ coordinates = [[[lng1, lat1], [lng1, lat2], [lng2, lat2], [lng2, lat1], [lng1, lat1]]] return Mongiris.get_geojson_polygon(coordinates) @@ -226,18 +311,28 @@ class Mongiris: def get_geojson_polygon(coordinates): """ Builds a dictionary with GeoJSON syntax for a polygon using the given coordinates. - CAREFUL: polygons must be closed ! (first coordinate must be identical to last coordinate) - :param coordinates: the coordinates (long, lat) as a list of list, e.g. [[[4.8, 45.7], [4.9, 47.8]]] - :return: a dictionary with GeoJSON syntax for a Polygon + Careful: polygons must be closed ! (first coordinate must be identical to last coordinate) + + Args: + coordinates: the coordinates (long, lat) as a list of list, e.g. [[[4.8, 45.7], [4.9, 47.8]]] + + Returns: + polygon: a dictionary with GeoJSON syntax for a Polygon """ return {"type": "Polygon", "coordinates": coordinates} def point_in_which_iris(self, coordinates, json_projection=None): """ - Find the document (IRIS) containing the given coordinates. Uses near() since geo_within() requires a Polygon. - :param coordinates: an array of coordinates (LONGITUDE, LATITUDE) - :param json_projection: a json document indicating the fields that appear in the results - :return: a json document or None + Finds the document (IRIS) containing the given coordinates. Uses near() since geo_within() requires a Polygon. + Careful: the near() operator may return several iris (low probability since distance = 1 meter) and only the + first one is returned. + + Args: + coordinates: an array of coordinates (long, lat) + json_projection: a json document indicating the fields that appear in the results + + Returns: + doc_json: a json document or None """ results = self.near(self.collection_iris, coordinates, json_projection, 1) # distance = 1 meter if len(results) == 0: @@ -246,12 +341,16 @@ class Mongiris: def near(self, collection, coordinates, json_projection=None, distance_max=2000): """ - Find all documents from given collection and which are near the given geometry (according to distance_max) - :param collection: the collection to search in - :param coordinates: an array of coordinates (LONGITUDE, LATITUDE) - near only accepts Point - :param json_projection: a json document indicating the fields that appear in the results - :param distance_max: the maximum distance of resulting iris, in meters - :return: a cursor (set of documents) + Finds all documents from given collection and which are near the given geometry (according to distance_max). + + Args: + collection: a string representing the collection name + coordinates: an array of coordinates (long, lat) - near only accepts Point + json_projection: a json document indicating the fields that appear in the results + distance_max: the maximum distance of resulting iris, in meters + + Returns: + doc_json: a cursor (set of documents) """ geometry = Mongiris.get_geojson_point(coordinates) cursor = self.find_documents(collection, {"geometry": {"$near": { @@ -262,15 +361,19 @@ class Mongiris: @staticmethod def adjacent(collection, geometry, json_projection=None, distance=20, exclude_geometry_iris=None): """ - Find all adjacent neighbors of an iris represented by geometry. + Finds all adjacent neighbors of an iris represented by geometry. No adjacent function, so use all coordinates of an iris and find the closest iris (according to distance). Could be done directly with near(), but near() is less accurate and thus incomplete. - :param collection: the collection to search in - :param geometry: a geojson geometry (Point, Polygon, etc.) - :param json_projection: a json document indicating the fields that appear in the results - :param distance: the maximum distance for an adjacent neighbour, in meters (10 to 50 meters are fine) - :param exclude_geometry_iris: the document _id of the iris represented by geometry, if it needs to be excluded - :return: a cursor (set of documents) + + Args: + collection: a string representing the collection name + geometry: a geojson geometry (Point, Polygon, etc.) + json_projection: a json document indicating the fields that appear in the results + distance: the maximum distance for an adjacent neighbour, in meters (10 to 50 meters are fine) + exclude_geometry_iris: the document _id of the iris represented by geometry, if it needs to be excluded + + Returns: + doc_json: a cursor (set of documents) """ results = list() results_ids = list() diff --git a/mongiris/tests/dummy.py b/mongiris/tests/dummy.py index 0596468f0d828c46c9278c371634f16d44b54e63..32bedfa29ec13daef461aed6a8e2d256c0531c87 100644 --- a/mongiris/tests/dummy.py +++ b/mongiris/tests/dummy.py @@ -1,5 +1,6 @@ from mongiris.main import Mongiris +import json db = Mongiris() @@ -17,4 +18,4 @@ print(counts) print(iris) print(iris2) - +#print(json.dumps(iris, indent=4, sort_keys=True)) diff --git a/mongiris/tests/mongiris_tests.py b/mongiris/tests/mongiris_tests.py index a88057c13b568c45e0f61e3d73b6cafd7bafef1f..d31199aeaa641c10d4f949243dbbf246a585a659 100644 --- a/mongiris/tests/mongiris_tests.py +++ b/mongiris/tests/mongiris_tests.py @@ -2,7 +2,6 @@ # encoding: utf-8 # ============================================================================= # Unit tests for mongiris. -# Some tests select a random iris in the collection,so there is no assert check. # ============================================================================= from mongiris.main import Mongiris @@ -12,6 +11,10 @@ import re class TestCase(unittest.TestCase): + """ + A class for Mongiris unit tests. + Some tests select a random iris in the collection,so there is no assert check. + """ def setUp(self): # a setup (connection to MongoDB) executed before each test diff --git a/paper.md b/paper.md index e5c63eb7538f2780500baf171365270d09073f3e..d0aff7f9c518a89bdc6be147b0f69e8a4ad0d78c 100644 --- a/paper.md +++ b/paper.md @@ -1,5 +1,5 @@ --- -title: 'Mongiris: a package for integrating ' +title: 'Mongiris: a package for manipulating French IRIS' tags: - Python - MongoDB @@ -9,89 +9,52 @@ tags: authors: - name: Fabien Duchateau orcid: 0000-0001-6803-917X - affiliation: "1, 2" # (Multiple affiliations must be quoted) - - name: Author 2 + affiliation: 1 + - name: Franck Favetta orcid: 0000-0000-0000-0000 - affiliation: 2 + affiliation: 1 affiliations: - name: LIRIS, UMR5205 Université Claude Bernard Lyon 1, Lyon, France index: 1 -date: 08 August 2019 +date: 11 August 2019 bibliography: paper.bib --- -# Summary - -Data integration is a crucial step when working with heterogenous data sources. - - -Many disciplines require the +# Statement of Need -social sciences studies, -recommender systems (for tourists), accomodation search (for finding a suitable neighborhood) +When studying geographical areas such as neighborhoods, it is necessary to collect various data according to the application domain (e.g., types of neighborhood, statistics such as criminality or unmployment rates, points of interests). +For instance, social science researchers study the relationship between citizens and their living area [@preteceille2009segregation;@authier2008citadins] or how they describe their neighborhood [@airbnb2017]. Computer science researchers are interested in recommending the most relevant neighborhood when buying a house [@RealEstate2013], in predicting price and types of neighborhoods [@tang2015neighborhood] or in detecting similar areas between different cities [@le2015soho]. -DataFrance `[@datafrance]` +National institutions (e.g., Open Data initiatives, INSEE in France) may produce data about neighborhoods, but they are usually spread in heterogenous files (databases, spreadsheets). Initiatives such as DataFrance [@datafrance] enable their visualization on a map, but their authors do not share collected data. +Thus, researchers have to manually collect and integrate raw data from national institutions, a challenging issue refered to as `data integration` [@christen2012data]. Although some tools such as OpenRefine or Talend facilitates this integration, they require expert knowledge and programming skills. +For these reasons, we propose the package Mongiris, which includes integrated data about French neighborhhods (IRIS) and an API for manipulating this data. +# Summary -The forces on stars, galaxies, and dark matter under external gravitational -fields lead to the dynamical evolution of structures in the universe. The orbits -of these bodies are therefore key to understanding the formation, history, and -future state of galaxies. The field of "galactic dynamics," which aims to model -the gravitating components of galaxies to study their structure and evolution, -is now well-established, commonly taught, and frequently used in astronomy. -Aside from toy problems and demonstrations, the majority of problems require -efficient numerical tools, many of which require the same base code (e.g., for -performing numerical orbit integration). - -``Gala`` is an Astropy-affiliated Python package for galactic dynamics. Python -enables wrapping low-level languages (e.g., C) for speed without losing -flexibility or ease-of-use in the user-interface. The API for ``Gala`` was -designed to provide a class-based and user-friendly interface to fast (C or -Cython-optimized) implementations of common operations such as gravitational -potential and force evaluation, orbit integration, dynamical transformations, -and chaos indicators for nonlinear dynamics. ``Gala`` also relies heavily on and -interfaces well with the implementations of physical units and astronomical -coordinate systems in the ``Astropy`` package [@astropy] (``astropy.units`` and -``astropy.coordinates``). +The package is composed of two modules: integration and API. -``Gala`` was designed to be used by both astronomical researchers and by -students in courses on gravitational dynamics or astronomy. It has already been -used in a number of scientific publications [@Pearson:2017] and has also been -used in graduate courses on Galactic dynamics to, e.g., provide interactive -visualizations of textbook material [@Binney:2008]. The combination of speed, -design, and support for Astropy functionality in ``Gala`` will enable exciting -scientific explorations of forthcoming data releases from the *Gaia* mission -[@gaia] by students and experts alike. +discuss the integration (evolution of data) -> need to comment integrator + simplify the __main__ +dire que integration = juste pour evolution , mais dum deja fourni - cf stats sur les indicateurs : +{350: 36530, 638: 11738, 615: 1057, 373: 79} -# Mathematics +API: ... most important funct + spatial queries (adjacent, ex for computing average statistics by taking into account close neighborhoods) -Single dollars ($) are required for inline mathematics e.g. $f(x) = e^{\pi/x}$ -Double dollars make self-standing equations: +used in MapIRIS, a tool for visualizing and searching for IRIS -$$\Theta(x) = \left\{\begin{array}{l} -0\textrm{ if } x < 0\cr -1\textrm{ else} -\end{array}\right.$$ + -# Citations +also used in recommending neighborhhods according to start neighborhhodd [@egc19-demo] -Citations to entries in paper.bib should be in -[rMarkdown](http://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html) -format. + + -For a quick reference, the following citation commands can be used: -- `@author:2001` -> "Author et al. (2001)" -- `[@author:2001]` -> "(Author et al., 2001)" -- `[@author1:2001; @author2:2001]` -> "(Author1 et al., 2001; Author2 et al., 2002)" -# Figures -Figures can be included like this:  # Acknowledgements - +This work has been partially funded by LABEX IMU (ANR-10-LABX-0088) from Université de Lyon, in the context of the program "Investissements d'Avenir" (ANR-11-IDEX-0007) from the French Research Agency (ANR). # References diff --git a/setup.py b/setup.py index ba004823a6dfcb2b78bb38b207133cde825fcb1b..805e8d84380775c00eddd4bfaf4e427243371b69 100644 --- a/setup.py +++ b/setup.py @@ -1,11 +1,11 @@ #!/usr/bin/env python # mongiris setup.py (uses setup.cfg) +# pdoc --force --html mongiris/main.py # python3 -m setup bdist_wheel sdist # python3 -m pip install -e mongiris/ # python3 -m pip install git+https://fduchate@gitlab.liris.cnrs.fr/fduchate/mongiris.git#egg=mongiris - from setuptools import setup import shutil