From d35f1b55b5bf4067294eb05b3dddbd24a26be065 Mon Sep 17 00:00:00 2001 From: mathieu-chouchou Date: Mon, 6 Jan 2020 15:21:54 +0100 Subject: [PATCH] Clean fixture + added some more filter on data --- api/src/DataFixtures/AppFixtures.php | 83 -------------------- api/src/DataFixtures/PropertySaleFixture.php | 81 +++++++++++++++++++ 2 files changed, 81 insertions(+), 83 deletions(-) delete mode 100755 api/src/DataFixtures/AppFixtures.php create mode 100755 api/src/DataFixtures/PropertySaleFixture.php diff --git a/api/src/DataFixtures/AppFixtures.php b/api/src/DataFixtures/AppFixtures.php deleted file mode 100755 index 38c24e6..0000000 --- a/api/src/DataFixtures/AppFixtures.php +++ /dev/null @@ -1,83 +0,0 @@ -getConnection()->getConfiguration()->setSQLLogger(null); - // create 20 products! Bam! - for($annee = 2015;$annee<=2019;$annee++){ - echo "chargement des données de l'année ".$annee."\n\n"; - $json = file_get_contents(__DIR__.'/deps.json'); - $deps = json_decode($json,true); - $file = fopen(__DIR__."/valeursfoncieres-".$annee.".txt","r"); - $cpt = 1; - $nbelt = 43; - $percent = 0; - $line = fgetcsv($file,1024,"|");//enleve la premiere ligne contenant le descriptif des ventes - - $depToRegion = array(); - foreach ($deps as $key => $value) { - $depToRegion[$value["code"]] = $value["nomRegion"]; - }; - - while(!feof($file)){ - - $line = fgetcsv($file,1024,"|"); - // on ne prend en compte que les ventes, tout autre élément est ignoré car l'evenement peut influer sur le prix - // puisque le nombre de vente est tres supérieur aux autre type de mutation le résultat n'en sera affecté que de façon négligeable - if( strcmp($line[36],'Maison')==0 || strcmp($line[36],'Appartement')==0){ - $propertysale = new PropertySale(); - $propertysale->price = doubleval($line[10]); - $propertysale->surface = $line[38]==''?0:intval($line[38]); - //$pieces = explode(" ", $line[8]); - $pieces2 = explode("/", $line[8]); - $format = "d/m/Y"; - $propertysale->date = DateTime::createFromFormat($format, $line[8]); - $propertysale->department = $line[18]; - $propertysale->region = $depToRegion[$line[18]];//TODO : "la surface ne nous interresse pas dans ce projet, je le remplace par le type de local, il faudra remplacer le nom de la-dite variable" - $manager->persist($propertysale); - } - if($cpt++%2751==0){// on limite le nombre de données acquise pour éviter une surcharge mémoire => meme en allouant 2G de memoire a php, l'acquisition de 100 000 données n'était pas possible - - $percent += 0.1; - $manager->flush(); - $manager->clear(); - echo $percent." done\n"; - //break;//fseek($file,0,SEEK_END); - } - } - echo "END"; - $manager->flush(); - $manager->clear(); - fclose($file); - - - } - - - //$propertysale->id = $i; - - /*for ($i = 0; $i < 20; $i++) { - $propertysale = new PropertySale(); - //$propertysale->id = $i; - $propertysale->price = 15; - $propertysale->surface = 15; - $propertysale->date = new DateTime('2012/12/12');; - $propertysale->department = 'DPT'; - $propertysale->region = 'RGN'; - $manager->persist($propertysale); - }*/ - - - } -} diff --git a/api/src/DataFixtures/PropertySaleFixture.php b/api/src/DataFixtures/PropertySaleFixture.php new file mode 100755 index 0000000..88f7e4f --- /dev/null +++ b/api/src/DataFixtures/PropertySaleFixture.php @@ -0,0 +1,81 @@ +getConnection()->getConfiguration()->setSQLLogger(null); + $batch_size = 1000; + + $deps_json = file_get_contents(__DIR__.'/deps.json'); + $deps = json_decode($deps_json, true); + + $depToRegion = array(); + foreach ($deps as $key => $value) { + $depToRegion[$value["code"]] = $value["nomRegion"]; + }; + + $date_format = "d/m/Y"; + + for($annee = 2015 ; $annee <= 2019 ; $annee++) { + echo "Chargement des données de l'année ".$annee."\n\n"; + + $file = fopen(__DIR__."/valeursfoncieres-".$annee.".txt", "r"); + $cpt = 1; + $line = fgetcsv($file,1024,"|");//enleve la premiere ligne contenant le descriptif des ventes + + while(!feof($file)){ + $line = fgetcsv($file,1024,"|"); + // on ne prend en compte que les ventes, tout autre élément est ignoré car l'evenement peut influer sur le prix + + $mutation_nature = $line[9]; + $type = $line[36]; + + $str_date = $line[8]; + $price = $line[10]; + $dep_code = $line[18]; + $surface = $line[38]; + + + if(PropertySaleFixture::isDataCorrect($mutation_nature, $type, $str_date, $price, $dep_code, $surface)){ + $propertysale = new PropertySale(); + $propertysale->price = doubleval($price); + $propertysale->surface = intval($surface); + $propertysale->date = DateTime::createFromFormat($date_format, $str_date); + $propertysale->department = $dep_code; + $propertysale->region = $depToRegion[$dep_code]; + + $manager->persist($propertysale); + + if($cpt++%$batch_size==0){ + // on limite le nombre de données acquise pour éviter une surcharge mémoire + $manager->flush(); + $manager->clear(); + echo $batch_size." lignes ajoutées (".$cpt." en tout) à la base de données\n"; + } + } + } + + echo "Fin de l'ajout des données, ".$cpt." lignes ajoutées\n\n"; + $manager->flush(); + $manager->clear(); + fclose($file); + } + } + + private static function isDataCorrect($mutation_nature, $type, $date, $price, $department_code, $surface) { + return strpos(strtolower($mutation_nature), "vente") !== false && + (strcmp($type, 'Maison') == 0 || strcmp($type, 'Appartement') == 0) && + $date != null && $date != "" && + $price != null && $price != "0" && $price != "" && + $surface != null && $surface != "0" && $surface != "" && + $department_code != null && $department_code != ""; + } +} -- GitLab