Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nf26_projet
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Romain Creuzenet
nf26_projet
Commits
33948738
Commit
33948738
authored
Jun 14, 2019
by
Romain Creuzenet
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'branche_base_lorys' into 'master'
Branche base lorys See merge request
!1
parents
6dabbbad
659e9ac8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
114 additions
and
71 deletions
+114
-71
main.py
main.py
+107
-68
parameters.py
parameters.py
+7
-3
No files found.
main.py
View file @
33948738
"""File to execute to show results"""
#Data
from
parameters
import
SESSION
#Basics
import
re
from
datetime
import
datetime
,
timedelta
import
matplotlib.dates
as
mdates
import
numpy
as
np
import
matplotlib.pyplot
as
plt
from
datetime
import
datetime
,
timedelta
from
parameters
import
SESSION
from
pandas.plotting
import
register_matplotlib_converters
register_matplotlib_converters
()
#Stats
import
statsmodels.graphics
as
stm_graphs
import
pandas
as
pd
import
statsmodels.api
as
stm
#Graph map
from
mpl_toolkits.basemaps
import
Basemap
def
execute_query
(
query
):
...
...
@@ -16,6 +30,28 @@ def ask_q(possibilities, text=">>> "):
answer
=
input
(
text
)
return
answer
def
ask_d
(
text
=
">>> "
):
t
=
input
(
text
)
done
=
False
date_parser
=
re
.
compile
(
r"(?P<year>\d+)-(?P<month>\d+)-(?P<day>\d+) (?P<hour>\d+):(?P<minute>\d+)"
)
match
=
False
result
=
None
while
(
match
==
False
):
match
=
date_parser
.
match
(
t
)
if
not
match
:
print
(
"Veuillez suivre le format demandé"
)
continue
m
=
match
.
groupdict
()
result
=
(
int
(
m
[
'year'
]),
int
(
m
[
'month'
]),
int
(
m
[
'day'
]),
int
(
m
[
'hour'
]),
int
(
m
[
'minute'
]))
return
result
class
Manager
:
table
=
None
# table name use by the function
...
...
@@ -61,80 +97,83 @@ class Manager:
print
(
"
\t
-"
,
text
,
":"
,
code
)
attr
=
ask_q
(
decision
.
keys
())
x
=
[]
y
=
[]
saisons
=
{
'spring'
:
{
'n'
:
0
,
'somme'
:
0
,
'month'
:
[
3
,
4
,
5
],
# March - May
'end'
:
lambda
dt
:
datetime
(
dt
.
year
,
6
,
1
)
-
timedelta
(
days
=
1
),
'legend'
:
False
,
'color'
:
'r'
},
'summer'
:
{
'n'
:
0
,
'somme'
:
0
,
'month'
:
[
6
,
7
,
8
],
# June - August
'end'
:
lambda
dt
:
datetime
(
dt
.
year
,
9
,
1
)
-
timedelta
(
days
=
1
),
'legend'
:
False
,
'color'
:
'y'
},
'automne'
:
{
'n'
:
0
,
'somme'
:
0
,
'month'
:
[
9
,
10
,
11
],
# September - November
'end'
:
lambda
dt
:
datetime
(
dt
.
year
,
12
,
1
)
-
timedelta
(
days
=
1
),
'legend'
:
False
,
'color'
:
'm'
},
'winter'
:
{
'n'
:
0
,
'somme'
:
0
,
'month'
:
[
12
,
1
,
2
],
# December - Febrarie
'end'
:
lambda
dt
:
datetime
(
dt
.
year
+
1
,
3
,
1
)
-
timedelta
(
days
=
1
),
'legend'
:
False
,
'color'
:
'k'
}
}
query
=
"SELECT * FROM {} WHERE station={}"
.
format
(
self
.
table
,
station
.
__repr__
())
ts
=
pd
.
Series
()
query
=
"SELECT time,{} FROM {} WHERE station={}"
.
format
(
attr
,
self
.
table
,
station
.
__repr__
())
for
row
in
execute_query
(
query
):
value
=
getattr
(
row
,
attr
)
if
value
is
None
:
continue
x
.
append
(
datetime
(
*
list
(
row
.
time
)))
y
.
append
(
value
)
# For saison
for
saison
,
d
in
saisons
.
items
():
if
row
.
time
[
1
]
in
d
[
'month'
]:
d
[
'n'
]
+=
1
d
[
'somme'
]
+=
value
break
date
,
last_date
=
x
[
0
],
x
[
-
1
]
# first date and last date, initialisation
x
=
np
.
array
(
x
)
y
=
np
.
array
(
y
)
plt
.
plot
(
x
,
y
,
label
=
attr
)
# Mark saison
while
date
<
last_date
:
for
saison
,
d
in
saisons
.
items
():
if
date
.
month
in
d
[
'month'
]:
next_date
=
min
(
last_date
,
d
[
'end'
](
date
))
moyenne
=
d
[
'somme'
]
/
d
[
'n'
]
if
d
[
'legend'
]:
plt
.
plot
([
date
,
next_date
],
[
moyenne
,
moyenne
],
d
[
'color'
],
linewidth
=
4
)
else
:
plt
.
plot
([
date
,
next_date
],
[
moyenne
,
moyenne
],
d
[
'color'
],
label
=
saison
,
linewidth
=
4
)
d
[
'legend'
]
=
True
date
=
next_date
+
timedelta
(
days
=
1
)
break
plt
.
title
(
station
)
ts
.
loc
[
datetime
(
*
list
(
row
.
time
))]
=
value
figure
=
plt
.
figure
(
figsize
=
(
25
,
16
))
axes
=
plt
.
subplot
()
axes
.
xaxis
.
set_major_formatter
(
mdates
.
DateFormatter
(
'%Y-%m-%d %H:%M'
))
_
=
plt
.
xticks
(
rotation
=
90
)
plt
.
plot
(
ts
,
label
=
attr
)
plt
.
title
(
"Donnees de "
+
str
(
attr
)
+
" pour la station : "
+
station
)
plt
.
legend
()
plt
.
show
()
plt
.
savefig
(
'./out/graph_'
+
station
+
'_'
+
str
(
attr
)
+
'.png'
)
res
=
stm
.
tsa
.
seasonal_decompose
(
ts
,
freq
=
15
,
extrapolate_trend
=
'freq'
)
res
.
plot
()
plt
.
show
()
plt
.
savefig
(
'./out/decompose_'
+
station
+
'_'
+
str
(
attr
)
+
'.png'
)
ACF
=
stm_graphs
.
tsaplots
.
plot_acf
(
ts
,
lags
=
30
)
plt
.
show
()
plt
.
savefig
(
'./out/acf_'
+
station
+
'_'
+
str
(
attr
)
+
'.png'
)
def
map
(
self
):
print
(
"Cette fonction n'est pas implémentée"
)
self
.
table
=
"TABLE_TIME"
#Ask Date
print
(
"Entrez une date sous la forme YYYY-MM-DD HH:mm"
)
date
=
ask_d
()
# Search element
decision
=
{
"tmpf"
:
"La témparature"
,
"relh"
:
"L'humidité"
}
print
(
"Choisissez un élément parmis les suivant :"
)
for
code
,
text
in
decision
.
items
():
print
(
"
\t
-"
,
text
,
":"
,
code
)
attr
=
ask_q
(
decision
.
keys
())
df
=
pd
.
DataFrame
()
query
=
"SELECT station,lon,lat,{} FROM {} WHERE time={}"
.
format
(
attr
,
self
.
table
,
date
)
print
(
query
)
for
row
in
execute_query
(
query
):
if
getattr
(
row
,
"station"
)
is
None
:
continue
print
(
getattr
(
row
,
"station"
))
df
=
df
.
append
({
"station"
:
getattr
(
row
,
"station"
),
"lon"
:
getattr
(
row
,
"lon"
),
"lat"
:
getattr
(
row
,
"lat"
),
"val"
:
getattr
(
row
,
attr
)},
ignore_index
=
True
)
map
=
Basemap
(
projection
=
'mill'
,
lat_0
=
26.281898
,
lon_0
=-
16.42
,
lat_1
=
43.08
,
lon_1
=
7.35
,
resolution
=
'l'
)
# draw coastlines, country boundaries, fill continents.
map
.
drawcoastlines
(
linewidth
=
0.25
)
map
.
drawcountries
(
linewidth
=
0.25
)
map
.
fillcontinents
(
color
=
'coral'
,
lake_color
=
'aqua'
)
# draw the edge of the map projection region (the projection limb)
map
.
drawmapboundary
(
fill_color
=
'aqua'
)
# draw lat/lon grid lines every 30 degrees.
map
.
drawmeridians
(
np
.
arange
(
0
,
360
,
30
))
map
.
drawparallels
(
np
.
arange
(
-
90
,
90
,
30
))
plt
.
title
(
'Map'
)
plt
.
show
()
plt
.
savefig
(
'./out/map.png'
)
def
cluster
(
self
):
print
(
"Cette fonction n'est pas implémentée"
)
...
...
parameters.py
View file @
33948738
...
...
@@ -7,7 +7,7 @@ from collections import OrderedDict
import
os
import
datetime
# Can be specified
KEY_SPACE
=
"
nf26
"
KEY_SPACE
=
"
lhamadac_projet
"
TABLE
=
"Spain"
# Don't change
...
...
@@ -22,12 +22,17 @@ COLUMNS = OrderedDict([
(
'lon'
,
float
),
(
'lat'
,
float
),
(
'tmpf'
,
float
),
(
'tmpc'
,
float
),
(
'dwpf'
,
float
),
(
'dwpc'
,
float
),
(
'relh'
,
float
),
(
'drct'
,
float
),
(
'sknt'
,
float
),
(
'sped'
,
float
),
(
'alti'
,
float
),
(
'mslp'
,
float
),
# ('p01m',float), all null
# ('p01i',float), all null
(
'vsby'
,
float
),
(
'gust'
,
float
),
(
'skyc1'
,
str
),
...
...
@@ -45,8 +50,7 @@ COLUMNS = OrderedDict([
# ('peak_wind_gust', ), all null
# ('peak_wind_drct', ), all null
# ('peak_wind_time', ), all null
(
'feel'
,
float
),
(
'metar'
,
str
)
(
'feel'
,
float
)
])
# Name of table -> Primary key
TABLES
=
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment