Commit 440f3cd9 authored by Romain Creuzenet's avatar Romain Creuzenet

correction Orthographe

parent af286816
/__pycache__/* /__pycache__/*
*/__pycache__/*
/env_nf26/* /env_nf26/*
*.~lock.* *.~lock.*
/out /out
/out/* /out/*
*.pyc
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="dec891dc-2fad-4291-af33-64d4fd64029d" name="Default Changelist" comment=""> <list default="true" id="dec891dc-2fad-4291-af33-64d4fd64029d" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/diapo.odp" beforeDir="false" afterPath="$PROJECT_DIR$/diapo.odp" afterDir="false" /> <change beforePath="$PROJECT_DIR$/livrables/Rapport-LATEX/main.tex" beforeDir="false" afterPath="$PROJECT_DIR$/livrables/Rapport-LATEX/main.tex" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/scripts/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/scripts/main.py" afterDir="false" />
</list> </list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
...@@ -15,19 +15,10 @@ ...@@ -15,19 +15,10 @@
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/create_table.py"> <entry file="file://$PROJECT_DIR$/scripts/main.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="912"> <state relative-caret-position="-3152">
<caret line="51" column="17" selection-start-line="51" selection-start-column="17" selection-end-line="51" selection-end-column="17" /> <caret line="243" column="66" selection-start-line="243" selection-start-column="66" selection-end-line="243" selection-end-column="66" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="184">
<caret line="62" column="54" lean-forward="true" selection-start-line="62" selection-start-column="54" selection-end-line="62" selection-end-column="54" />
<folding> <folding>
<element signature="e#45#107#0" expanded="true" /> <element signature="e#45#107#0" expanded="true" />
</folding> </folding>
...@@ -36,20 +27,20 @@ ...@@ -36,20 +27,20 @@
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/download_data.py"> <entry file="file://$PROJECT_DIR$/scripts/create_table.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="95"> <state>
<caret line="5" column="52" selection-start-line="5" selection-start-column="52" selection-end-line="5" selection-end-column="52" /> <folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file pinned="false" current-in-tab="false"> <file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/parameters.py"> <entry file="file://$PROJECT_DIR$/scripts/download_data.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="228"> <state relative-caret-position="-804" />
<caret line="15" column="1" selection-start-line="15" selection-start-column="1" selection-end-line="15" selection-end-column="1" />
</state>
</provider> </provider>
</entry> </entry>
</file> </file>
...@@ -68,6 +59,7 @@ ...@@ -68,6 +59,7 @@
<find>service</find> <find>service</find>
<find>figure</find> <find>figure</find>
<find>print</find> <find>print</find>
<find>query3</find>
</findStrings> </findStrings>
<replaceStrings> <replaceStrings>
<replace>SESSION</replace> <replace>SESSION</replace>
...@@ -83,6 +75,7 @@ ...@@ -83,6 +75,7 @@
<option value="$PROJECT_DIR$/create_table.py" /> <option value="$PROJECT_DIR$/create_table.py" />
<option value="$PROJECT_DIR$/parameters.py" /> <option value="$PROJECT_DIR$/parameters.py" />
<option value="$PROJECT_DIR$/main.py" /> <option value="$PROJECT_DIR$/main.py" />
<option value="$PROJECT_DIR$/scripts/main.py" />
</list> </list>
</option> </option>
</component> </component>
...@@ -100,7 +93,6 @@ ...@@ -100,7 +93,6 @@
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="Scope" />
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<expand> <expand>
...@@ -108,10 +100,16 @@ ...@@ -108,10 +100,16 @@
<item name="nf26_projet" type="b2602c69:ProjectViewProjectNode" /> <item name="nf26_projet" type="b2602c69:ProjectViewProjectNode" />
<item name="nf26_projet" type="462c0819:PsiDirectoryNode" /> <item name="nf26_projet" type="462c0819:PsiDirectoryNode" />
</path> </path>
<path>
<item name="nf26_projet" type="b2602c69:ProjectViewProjectNode" />
<item name="nf26_projet" type="462c0819:PsiDirectoryNode" />
<item name="scripts" type="462c0819:PsiDirectoryNode" />
</path>
</expand> </expand>
<select /> <select />
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
...@@ -252,13 +250,37 @@ ...@@ -252,13 +250,37 @@
</entry> </entry>
<entry file="file://$PROJECT_DIR$/main.py"> <entry file="file://$PROJECT_DIR$/main.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="184"> <state relative-caret-position="874">
<caret line="62" column="54" lean-forward="true" selection-start-line="62" selection-start-column="54" selection-end-line="62" selection-end-column="54" /> <caret line="62" column="54" selection-start-line="62" selection-start-column="54" selection-end-line="62" selection-end-column="54" />
<folding> <folding>
<element signature="e#45#107#0" expanded="true" /> <element signature="e#45#107#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/scripts/main.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-3152">
<caret line="243" column="66" selection-start-line="243" selection-start-column="66" selection-end-line="243" selection-end-column="66" />
<folding>
<element signature="e#45#107#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/scripts/create_table.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<folding>
<element signature="e#0#64#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/scripts/download_data.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-804" />
</provider>
</entry>
</component> </component>
</project> </project>
\ No newline at end of file
...@@ -2,49 +2,54 @@ ...@@ -2,49 +2,54 @@
Authors : Lorys Hamadache et Romain Creuzenet Authors : Lorys Hamadache et Romain Creuzenet
## Organisation générale du projet
- livrables : contient le rapport PDF et le Diapo PDF
- scripts : contient le code python concernant le projet
### ToDos ### ToDos
1. Verifier l'orthographe 1. Verifier l'orthographe : Ok
2. Rendre le projet public 2. Rendre le projet public :
3. Confirmer les nouvelles versions rapports + code 3. Confirmer les nouvelles versions rapports + code: Romain : Ok
4. Fichier Asos vs CSVs? 4. Fichier Asos vs CSVs? : Romain -> CSV
5. Envoyer au prof 5. Envoyer au prof
## Comment utiliser le projet ## Comment utiliser le projet
Pour installer le projet : - Pour installer le projet :
télécharcher toutes les librairies python listées dans requirements.txt télécharcher toutes les librairies python listées dans requirements.txt
Pour initialiser les données (la première fois quand les tables sont vides): - Pour initialiser les données (la première fois quand les tables sont vides):
1. Executer download_data.py qui va télécharger tous les fichiers CSV nécessaires 1. Executer download_data.py qui va télécharger tous les fichiers CSV nécessaires
2. Executer create_table.py qui va créer et remplir les tables avec le contenu des fichiers CSV téléchargés 2. Executer create_table.py qui va créer et remplir les tables avec le contenu des fichiers CSV téléchargés
Pour exploiter l'un des 3 objectif du projet: - Pour exploiter l'un des 3 objectif du projet:
exécuter main.py. Une interface dans le terminal va vous guider exécuter main.py. Une interface dans le terminal va vous guider
## Objectifs du projets ## Objectifs du projets
• Pour un point donné de l’espace, je veux pouvoir avoir un historique du passé, avec des courbes adaptés. Je vous pouvoir mettre en évidence la saisonnalité et les écarts à la saisonnalité. - Pour un point donné de l’espace, je veux pouvoir avoir un historique du passé, avec des courbes adaptés. Je vous pouvoir mettre en évidence la saisonnalité et les écarts à la saisonnalité.
• À un instant donné je veux pouvoir obtenir une carte me représentant n’importe quel indicateur.
• Pour une période de temps donnée, je veux pouvoir obtenir clusteriser l’espace, et représenter cette clusterisation. - À un instant donné je veux pouvoir obtenir une carte me représentant n’importe quel indicateur.
## Architecture du projet - Pour une période de temps donnée, je veux pouvoir obtenir clusteriser l’espace, et représenter cette clusterisation.
• Le fichier « parameters.py » :
Il permet de stoker la configuration du projet (pays concerné, période de temps étudiée…). Il possède également les informations utiles à tout le projet.
• Le fichier « requierments.txt » : ## Architecture précise du projet
- Le fichier « requierments.txt » :
Ce fichier permet d’obtenir toutes les librairies à installer pour faire fonctionner le projet. Ce fichier permet d’obtenir toutes les librairies à installer pour faire fonctionner le projet.
- livrables : contient le rapport PDF et le Diapo PDF
- scripts : contient le code python concernant le projet
- Le fichier « parameters.py » :
Il permet de stoker la configuration du projet (pays concerné, période de temps étudiée…). Il possède également les informations utiles à tout le projet.
Le fichier « download_data.py » : - Le fichier « download_data.py » :
Ce fichier permet de télécharger les données du pays concerné sur la période temps étudiée depuis le site internet où elles sont stockées. Ces informations seront ensuite placées dans des fichiers « csv » par station dans le dossier « out ». Le code est inspiré de celui trouvé sur le site internet gardant les données. Ce fichier n’est utilisé que très rarement, à une initialisation. Il suffit de l’exécuter pour appeler les bonnes fonctions. Ce fichier permet de télécharger les données du pays concerné sur la période temps étudiée depuis le site internet où elles sont stockées. Ces informations seront ensuite placées dans des fichiers « csv » par station dans le dossier « out ». Le code est inspiré de celui trouvé sur le site internet gardant les données. Ce fichier n’est utilisé que très rarement, à une initialisation. Il suffit de l’exécuter pour appeler les bonnes fonctions.
Le fichier « create_table.py » : - Le fichier « create_table.py » :
Ce fichier crée les différentes tables utilisées durant le projet et les remplie des informations contenues dans tous les fichiers « csv » du dossier « out ». Ce fichier n’est utilisé que très rarement, à une initialisation. Il suffit de l’exécuter pour appeler les bonnes fonctions. Ce fichier crée les différentes tables utilisées durant le projet et les remplie des informations contenues dans tous les fichiers « csv » du dossier « out ». Ce fichier n’est utilisé que très rarement, à une initialisation. Il suffit de l’exécuter pour appeler les bonnes fonctions.
Le fichier « main.py » : - Le fichier « main.py » :
Ce fichier gère l’exploitation des données. Il est utilisé fréquemment. Son exécution permet d’obtenir une interface dans le terminal pour choisir son objectif, les éléments nécessaires et obtenir les résultats. Ce fichier gère l’exploitation des données. Il est utilisé fréquemment. Son exécution permet d’obtenir une interface dans le terminal pour choisir son objectif, les éléments nécessaires et obtenir les résultats.
• Le dossier « out » : - Le dossier « data » :
Ce dossier stocke les graphiques issues de l’exploitation des données. Les fichiers qu’il contient peuvent être consulté plus tard, par l’utilisateur
• Le dossier « data » :
Ce dossier contient tous les fichiers « csv » contenant toutes les informations, sur les différentes stations, qui devront être mises dans Cassandra. Ce dossier n’est pas censé être exploité manuellement par l’utilisateur. Ce dossier contient tous les fichiers « csv » contenant toutes les informations, sur les différentes stations, qui devront être mises dans Cassandra. Ce dossier n’est pas censé être exploité manuellement par l’utilisateur.
- Le dossier « imgs » :
Ce dossier contient toutes les images utilisées pour les rapports
This diff is collapsed.
...@@ -8,7 +8,7 @@ import warnings ...@@ -8,7 +8,7 @@ import warnings
import re import re
import os import os
import random import random
#parallelize # parallelize
from pyspark import SparkContext from pyspark import SparkContext
# Stats # Stats
import statsmodels.graphics as stm_graphs import statsmodels.graphics as stm_graphs
...@@ -147,7 +147,6 @@ class Manager: ...@@ -147,7 +147,6 @@ class Manager:
station = ask_q(stations) station = ask_q(stations)
attr = chose_attr() attr = chose_attr()
# Base # Base
ts = pd.Series() ts = pd.Series()
query = "SELECT time, {} FROM {} WHERE station={}".format(attr, self.table, station.__repr__()) query = "SELECT time, {} FROM {} WHERE station={}".format(attr, self.table, station.__repr__())
...@@ -169,55 +168,71 @@ class Manager: ...@@ -169,55 +168,71 @@ class Manager:
plt.savefig(path) plt.savefig(path)
plt.show() plt.show()
# Initialisation SPARK
#Initialisation SPARK
sc = SparkContext() sc = SparkContext()
#INITIALISATION BY DAY # INITIALISATION BY DAY
plt.figure(figsize=(25, 16)) plt.figure(figsize=(25, 16))
axes = plt.subplot() axes = plt.subplot()
axes.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) axes.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=90) plt.xticks(rotation=90)
date_rng = pd.date_range(start='2011-01-01', end='2013-12-31', freq='D') date_rng = pd.date_range(start='2011-01-01', end='2013-12-31', freq='D')
# Maximum of the Day
ts_max = pd.Series(index = date_rng)
query = "SELECT time, {} FROM {} WHERE station={}".format(attr, self.table, station.__repr__()) query = "SELECT time, {} FROM {} WHERE station={}".format(attr, self.table, station.__repr__())
# Maximum of the Day
ts_max = pd.Series(index=date_rng)
gen_max = sc.parallelize(execute_query(query)) gen_max = sc.parallelize(execute_query(query))
gen_max = gen_max.map(lambda line: ((getattr(line,"time")[0],getattr(line,"time")[1],getattr(line,"time")[2]), getattr(line,attr))).reduceByKey(lambda x,y: max(x,y)).collect() gen_max = gen_max.map(lambda line: (
(
getattr(line, "time")[0],
getattr(line, "time")[1],
getattr(line, "time")[2]
),
getattr(line, attr)
)).reduceByKey(lambda x, y: max(x, y)).collect()
for a,b in gen_max: for a, b in gen_max:
ts_max.loc[datetime(*list(a))] = b ts_max.loc[datetime(*list(a))] = b
ts_max = ts_max.sort_index() ts_max = ts_max.sort_index()
ts_max = ts_max.interpolate() ts_max = ts_max.interpolate()
plt.plot(ts_max , label="Maximum") plt.plot(ts_max, label="Maximum")
# Minimum of the Day # Minimum of the Day
ts_min = pd.Series(index = date_rng) ts_min = pd.Series(index=date_rng)
query2 = "SELECT time, {} FROM {} WHERE station={}".format(attr, self.table, station.__repr__()) gen_min = sc.parallelize(execute_query(query))
gen_min = sc.parallelize(execute_query(query2)) gen_min = gen_min.map(lambda line: (
gen_min = gen_min.map(lambda line: ((getattr(line,"time")[0],getattr(line,"time")[1],getattr(line,"time")[2]), getattr(line,attr))).reduceByKey(lambda x,y: min(x,y)).collect() (
getattr(line, "time")[0],
getattr(line, "time")[1],
getattr(line, "time")[2]
),
getattr(line, attr)
)).reduceByKey(lambda x, y: min(x, y)).collect()
for a,b in gen_min: for a, b in gen_min:
ts_min.loc[datetime(*list(a))] = b ts_min.loc[datetime(*list(a))] = b
ts_min = ts_min.sort_index() ts_min = ts_min.sort_index()
ts_min = ts_min.interpolate() ts_min = ts_min.interpolate()
plt.plot(ts_min , label="Minimum") plt.plot(ts_min, label="Minimum")
# Average of the Day # Average of the Day
ts_avg = pd.Series(index = date_rng) ts_avg = pd.Series(index=date_rng)
query3 = "SELECT time, {} FROM {} WHERE station={}".format(attr, self.table, station.__repr__()) gen_avg = sc.parallelize(execute_query(query))
gen_avg = sc.parallelize(execute_query(query2)) gen_avg = gen_avg.map(lambda line: (
gen_avg = gen_avg.map(lambda line: ((getattr(line,"time")[0],getattr(line,"time")[1],getattr(line,"time")[2]), (getattr(line,attr),1))).reduceByKey(lambda x,y: (x[0] +y[0], x[1]+ y[1])).map(lambda x: (x[0],x[1][0]/x[1][1])).collect() (
for a,b in gen_avg: getattr(line, "time")[0],
getattr(line, "time")[1],
getattr(line, "time")[2]
),
(getattr(line, attr), 1)
)).reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1])).map(lambda x: (x[0], x[1][0]/x[1][1])).collect()
for a, b in gen_avg:
ts_avg.loc[datetime(*list(a))] = b ts_avg.loc[datetime(*list(a))] = b
ts_avg = ts_avg.sort_index() ts_avg = ts_avg.sort_index()
ts_avg = ts_avg.interpolate() ts_avg = ts_avg.interpolate()
plt.plot(ts_avg , label="Moyenne") plt.plot(ts_avg, label="Moyenne")
# Global Plotting # Global Plotting
plt.title("Donnees de {} pour la station : {}".format(attr, station)) plt.title("Donnees de {} pour la station : {}".format(attr, station))
...@@ -226,7 +241,7 @@ class Manager: ...@@ -226,7 +241,7 @@ class Manager:
plt.savefig(path) plt.savefig(path)
plt.show() plt.show()
res = stm.tsa.seasonal_decompose(ts_avg.dropna(), freq=365 , extrapolate_trend='freq') res = stm.tsa.seasonal_decompose(ts_avg.dropna(), freq=365, extrapolate_trend='freq')
res.plot() res.plot()
path = os.path.join(DIR_OUT, 'decompose_{}_{}.png'.format(station, attr)) path = os.path.join(DIR_OUT, 'decompose_{}_{}.png'.format(station, attr))
plt.savefig(path) plt.savefig(path)
...@@ -236,8 +251,6 @@ class Manager: ...@@ -236,8 +251,6 @@ class Manager:
path = os.path.join(DIR_OUT, 'acf_{}_{}.png'.format(station, attr)) path = os.path.join(DIR_OUT, 'acf_{}_{}.png'.format(station, attr))
plt.savefig(path) plt.savefig(path)
plt.show() plt.show()
def map(self): def map(self):
self.table = "TABLE_TIME" self.table = "TABLE_TIME"
......
...@@ -27,9 +27,9 @@ for key in KEY_SPACE: ...@@ -27,9 +27,9 @@ for key in KEY_SPACE:
if SESSION is None: if SESSION is None:
raise NoHostAvailable("Erreur de connection à cassandra", None) raise NoHostAvailable("Erreur de connection à cassandra", None)
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # path of project BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # path of project
DIR_DATA = os.path.join(BASE_DIR, "data") # folder with all data station DIR_DATA = os.path.join(BASE_DIR, "data") # folder with all data station
DIR_OUT = os.path.join(BASE_DIR, "out") # folder with all data station DIR_OUT = os.path.join(BASE_DIR, "out") # folder with all graphics
NETWORK = "ES__ASOS" # Change NETWORK = "ES__ASOS" # Change
START = datetime.datetime(2011, 1, 1) # 1 janvier 2001 START = datetime.datetime(2011, 1, 1) # 1 janvier 2001
END = datetime.datetime(2013, 12, 31) # 31 décembre 2010 END = datetime.datetime(2013, 12, 31) # 31 décembre 2010
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment