From 10ec5fbbf5f7bb452b16d33c2fe4b254d26176f8 Mon Sep 17 00:00:00 2001 From: christian Date: Sun, 27 Oct 2019 06:45:07 +0100 Subject: [PATCH 1/2] add prediction --- mobile/climate_heidelberg_tima_and_date.csv | 13 + mobile/predict.py | 60 ++++ mobile/temp | 300 ++++++++++++++++++++ mobile/templates/mobile/index.html | 8 +- mobile/views.py | 6 +- mobile/wachstumsgradtag.csv | 18 ++ 6 files changed, 400 insertions(+), 5 deletions(-) create mode 100644 mobile/climate_heidelberg_tima_and_date.csv create mode 100644 mobile/predict.py create mode 100644 mobile/temp create mode 100644 mobile/wachstumsgradtag.csv diff --git a/mobile/climate_heidelberg_tima_and_date.csv b/mobile/climate_heidelberg_tima_and_date.csv new file mode 100644 index 0000000..5d024ac --- /dev/null +++ b/mobile/climate_heidelberg_tima_and_date.csv @@ -0,0 +1,13 @@ +Month Min Max +1 1 5 +2 1 7 +3 4 12 +4 7 16 +5 11 21 +6 14 24 +7 16 26 +8 16 26 +9 12 21 +10 8 16 +11 4 9 +12 2 6 diff --git a/mobile/predict.py b/mobile/predict.py new file mode 100644 index 0000000..34eb898 --- /dev/null +++ b/mobile/predict.py @@ -0,0 +1,60 @@ +from datetime import datetime + +import pandas as pd +#import matplotlib.pyplot as plt +import numpy as np +import seaborn as sns +import re as re + + +def normalize(x): + return max(min(x, 30), 10) + + +def get_gdd_until(date): + temp=pd.read_csv('/tmp/temp', sep=',') + y=int(temp[temp.Datum==date].index.values) + GDD_date=0 + for x in range(y+1): + gdd_of_day = ((normalize(temp.min_temp[x])+normalize(temp.max_temp[x]))/2)-10 + GDD_date+=gdd_of_day + return GDD_date + + +def predict_blooming(date,gdd_infile='/tmp/wachstumsgradtag.csv',climate_infile='/tmp/climate_heidelberg_tima_and_date.csv'): + gdd_date = get_gdd_until(date) + gdd_trees = pd.read_csv(gdd_infile, sep=',', encoding='utf-8') + monthly_temp = pd.read_csv(climate_infile,sep='\t') + #monthly_temp + i=0 + for x in monthly_temp.Min: + if x<10: + monthly_temp.Min.iloc[i]=10 + if x>30: + monthly_temp.Min.iloc[i]=30 + i=i+1 + i=0 + for x in monthly_temp.Max: + if x <10: + monthly_temp.Max.iloc[i]=10 + if x>30: + monthly_temp.Max.iloc[i]=30 + i=i+1 + #temp + monthly_temp['average_weekly_gdd']=((monthly_temp.Max+monthly_temp.Min)/2-10)*7 + #monthly_temp + month=int(re.findall('\d{2}[.](\d{2})[.]\d{4}',date)[0]) + #month + averg_gdd=float(monthly_temp[monthly_temp.Month==month].average_weekly_gdd) + #averg_gdd + prdctd=gdd_date+averg_gdd + #prdctd + #gdd_trees + blooming=gdd_trees[(gdd_trees["minGDD"] <= prdctd) + & (gdd_trees["minGDD"] >= gdd_date)].Deutsch.tolist() + return blooming + + +if __name__ == '__main__': + bls = predict_blooming('20.05.2019') + print(bls) diff --git a/mobile/temp b/mobile/temp new file mode 100644 index 0000000..25af73e --- /dev/null +++ b/mobile/temp @@ -0,0 +1,300 @@ +,Datum,Temp. A.,Temp. A..1,Temp. A..2,min_temp,max_temp +0,01.01.2019,"6,3 °C","Min. 23:505,3 °C","Max. 12:556,9 °C",5.3,6.9 +1,02.01.2019,"3,5 °C","Min. 23:55-1,8 °C","Max. 14:156,4 °C",-1.8,6.4 +2,03.01.2019,"-1,0 °C","Min. 06:20-3,9 °C","Max. 19:050,8 °C",-3.9,0.8 +3,04.01.2019,"1,3 °C","Min. 01:25-0,3 °C","Max. 14:302,9 °C",-0.3,2.9 +4,05.01.2019,"2,9 °C","Min. 09:351,7 °C","Max. 23:454,6 °C",1.7,4.6 +5,06.01.2019,"5,0 °C","Min. 23:504,5 °C","Max. 12:405,7 °C",4.5,5.7 +6,07.01.2019,"4,1 °C","Min. 23:103,2 °C","Max. 15:155,3 °C",3.2,5.3 +7,08.01.2019,"4,7 °C","Min. 01:203,1 °C","Max. 12:206,8 °C",3.1,6.8 +8,09.01.2019,"3,0 °C","Min. 23:451,1 °C","Max. 00:004,9 °C",1.1,4.9 +9,10.01.2019,"1,7 °C","Min. 23:50-0,7 °C","Max. 11:302,9 °C",-0.7,2.9 +10,11.01.2019,"-0,1 °C","Min. 02:10-0,7 °C","Max. 23:250,5 °C",-0.7,0.5 +11,12.01.2019,"2,5 °C","Min. 00:000,5 °C","Max. 23:554,3 °C",0.5,4.3 +12,13.01.2019,"6,4 °C","Min. 00:004,3 °C","Max. 20:558,6 °C",4.3,8.6 +13,14.01.2019,"5,0 °C","Min. 22:052,3 °C","Max. 00:007,3 °C",2.3,7.3 +14,15.01.2019,"4,0 °C","Min. 06:051,8 °C","Max. 13:505,6 °C",1.8,5.6 +15,16.01.2019,"5,1 °C","Min. 23:503,9 °C","Max. 13:157,1 °C",3.9,7.1 +16,17.01.2019,"5,5 °C","Min. 23:202,2 °C","Max. 14:208,1 °C",2.2,8.1 +17,18.01.2019,"2,3 °C","Min. 21:25-0,4 °C","Max. 14:005,3 °C",-0.4,5.3 +18,19.01.2019,"0,1 °C","Min. 23:55-2,7 °C","Max. 12:253,3 °C",-2.7,3.3 +19,20.01.2019,"-2,6 °C","Min. 08:00-5,0 °C","Max. 13:200,5 °C",-5.0,0.5 +20,21.01.2019,"-2,8 °C","Min. 08:45-5,3 °C","Max. 14:151,4 °C",-5.3,1.4 +21,22.01.2019,"-2,9 °C","Min. 04:15-6,7 °C","Max. 14:20-0,2 °C",-6.7,-0.2 +22,23.01.2019,"-1,1 °C","Min. 07:10-2,2 °C","Max. 13:350,2 °C",-2.2,0.2 +23,24.01.2019,"-2,0 °C","Min. 08:00-3,2 °C","Max. 13:30-0,8 °C",-3.2,-0.8 +24,25.01.2019,"-1,1 °C","Min. 06:50-3,2 °C","Max. 14:350,9 °C",-3.2,0.9 +25,26.01.2019,"2,3 °C","Min. 01:20-0,2 °C","Max. 20:504,1 °C",-0.2,4.1 +26,27.01.2019,"5,8 °C","Min. 23:552,8 °C","Max. 14:308,0 °C",2.8,8.0 +27,28.01.2019,"2,5 °C","Min. 23:451,2 °C","Max. 03:503,0 °C",1.2,3.0 +28,29.01.2019,"2,1 °C","Min. 07:050,8 °C","Max. 14:455,1 °C",0.8,5.1 +29,30.01.2019,"1,9 °C","Min. 23:550,2 °C","Max. 12:504,4 °C",0.2,4.4 +30,31.01.2019,"0,9 °C","Min. 02:10-1,2 °C","Max. 14:303,1 °C",-1.2,3.1 +31,01.02.2019,"3,9 °C","Min. 02:401,5 °C","Max. 15:406,8 °C",1.5,6.8 +32,02.02.2019,"4,1 °C","Min. 07:152,6 °C","Max. 15:556,4 °C",2.6,6.4 +33,03.02.2019,"3,2 °C","Min. 23:352,3 °C","Max. 00:004,4 °C",2.3,4.4 +34,04.02.2019,"2,0 °C","Min. 07:55-2,4 °C","Max. 14:456,4 °C",-2.4,6.4 +35,05.02.2019,"3,0 °C","Min. 04:55-0,1 °C","Max. 14:107,5 °C",-0.1,7.5 +36,06.02.2019,"1,2 °C","Min. 07:50-2,2 °C","Max. 14:556,7 °C",-2.2,6.7 +37,07.02.2019,"2,4 °C","Min. 00:05-1,6 °C","Max. 17:005,0 °C",-1.6,5.0 +38,08.02.2019,"6,9 °C","Min. 00:003,7 °C","Max. 14:2010,7 °C",3.7,10.7 +39,09.02.2019,"7,6 °C","Min. 05:005,9 °C","Max. 13:1510,7 °C",5.9,10.7 +40,10.02.2019,"8,7 °C","Min. 22:405,1 °C","Max. 11:5513,5 °C",5.1,13.5 +41,11.02.2019,"5,5 °C","Min. 23:301,9 °C","Max. 13:307,2 °C",1.9,7.2 +42,12.02.2019,"3,6 °C","Min. 03:000,5 °C","Max. 14:307,3 °C",0.5,7.3 +43,13.02.2019,"3,5 °C","Min. 08:30-1,9 °C","Max. 15:3010,4 °C",-1.9,10.4 +44,14.02.2019,"2,7 °C","Min. 08:00-2,7 °C","Max. 14:3010,1 °C",-2.7,10.1 +45,15.02.2019,"5,6 °C","Min. 05:45-1,3 °C","Max. 16:0015,2 °C",-1.3,15.2 +46,16.02.2019,"6,4 °C","Min. 08:05-0,4 °C","Max. 15:3514,9 °C",-0.4,14.9 +47,17.02.2019,"6,7 °C","Min. 07:50-1,1 °C","Max. 14:5017,2 °C",-1.1,17.2 +48,18.02.2019,"6,7 °C","Min. 07:000,2 °C","Max. 15:4015,9 °C",0.2,15.9 +49,19.02.2019,"6,8 °C","Min. 23:553,3 °C","Max. 16:1510,6 °C",3.3,10.6 +50,20.02.2019,"5,7 °C","Min. 07:35-0,4 °C","Max. 14:1012,3 °C",-0.4,12.3 +51,21.02.2019,"7,9 °C","Min. 02:352,7 °C","Max. 15:2513,0 °C",2.7,13.0 +52,22.02.2019,"10,2 °C","Min. 21:457,7 °C","Max. 12:4013,4 °C",7.7,13.4 +53,23.02.2019,"6,8 °C","Min. 07:553,7 °C","Max. 14:5010,7 °C",3.7,10.7 +54,24.02.2019,"7,3 °C","Min. 08:000,1 °C","Max. 14:4513,3 °C",0.1,13.3 +55,25.02.2019,"8,0 °C","Min. 07:150,9 °C","Max. 14:5516,9 °C",0.9,16.9 +56,26.02.2019,"8,7 °C","Min. 07:500,7 °C","Max. 15:1518,4 °C",0.7,18.4 +57,27.02.2019,"8,3 °C","Min. 07:200,8 °C","Max. 15:3018,7 °C",0.8,18.7 +58,28.02.2019,"11,4 °C","Min. 00:255,0 °C","Max. 15:1019,3 °C",5.0,19.3 +59,01.03.2019,"9,0 °C","Min. 23:307,4 °C","Max. 00:0010,7 °C",7.4,10.7 +60,02.03.2019,"8,5 °C","Min. 04:006,3 °C","Max. 16:3011,3 °C",6.3,11.3 +61,03.03.2019,"10,6 °C","Min. 02:309,1 °C","Max. 17:0012,2 °C",9.1,12.2 +62,04.03.2019,"9,9 °C","Min. 23:206,2 °C","Max. 11:2013,1 °C",6.2,13.1 +63,05.03.2019,"6,5 °C","Min. 05:355,3 °C","Max. 09:557,8 °C",5.3,7.8 +64,06.03.2019,"11,4 °C","Min. 05:505,1 °C","Max. 15:4516,6 °C",5.1,16.6 +65,07.03.2019,"11,0 °C","Min. 21:257,3 °C","Max. 04:5514,6 °C",7.3,14.6 +66,08.03.2019,"8,5 °C","Min. 08:006,9 °C","Max. 15:0512,1 °C",6.9,12.1 +67,09.03.2019,"9,7 °C","Min. 00:357,2 °C","Max. 17:4511,8 °C",7.2,11.8 +68,10.03.2019,"10,7 °C","Min. 22:155,7 °C","Max. 14:5015,3 °C",5.7,15.3 +69,11.03.2019,"6,1 °C","Min. 06:253,7 °C","Max. 16:058,5 °C",3.7,8.5 +70,12.03.2019,"7,2 °C","Min. 06:451,7 °C","Max. 15:3511,2 °C",1.7,11.2 +71,13.03.2019,"7,3 °C","Min. 23:155,1 °C","Max. 00:3510,6 °C",5.1,10.6 +72,14.03.2019,"5,8 °C","Min. 00:005,1 °C","Max. 17:356,7 °C",5.1,6.7 +73,15.03.2019,"8,9 °C","Min. 02:055,6 °C","Max. 15:3011,7 °C",5.6,11.7 +74,16.03.2019,"10,7 °C","Min. 22:457,3 °C","Max. 12:3012,5 °C",7.3,12.5 +75,17.03.2019,"8,1 °C","Min. 23:503,8 °C","Max. 10:4513,8 °C",3.8,13.8 +76,18.03.2019,"5,6 °C","Min. 04:302,2 °C","Max. 15:2010,6 °C",2.2,10.6 +77,19.03.2019,"5,8 °C","Min. 06:450,8 °C","Max. 13:5511,7 °C",0.8,11.7 +78,20.03.2019,"6,0 °C","Min. 07:00-1,6 °C","Max. 16:3513,7 °C",-1.6,13.7 +79,21.03.2019,"9,2 °C","Min. 07:100,3 °C","Max. 15:5518,0 °C",0.3,18.0 +80,22.03.2019,"11,0 °C","Min. 06:502,3 °C","Max. 14:0020,1 °C",2.3,20.1 +81,23.03.2019,"11,1 °C","Min. 04:454,6 °C","Max. 15:4019,4 °C",4.6,19.4 +82,24.03.2019,"9,3 °C","Min. 07:002,7 °C","Max. 14:2016,2 °C",2.7,16.2 +83,25.03.2019,"6,3 °C","Min. 06:002,1 °C","Max. 13:4510,7 °C",2.1,10.7 +84,26.03.2019,"5,7 °C","Min. 02:402,4 °C","Max. 15:009,7 °C",2.4,9.7 +85,27.03.2019,"8,2 °C","Min. 02:104,3 °C","Max. 16:0013,7 °C",4.3,13.7 +86,28.03.2019,"8,3 °C","Min. 06:300,3 °C","Max. 13:3015,9 °C",0.3,15.9 +87,29.03.2019,"12,4 °C","Min. 06:306,1 °C","Max. 16:0018,2 °C",6.1,18.2 +88,30.03.2019,"13,6 °C","Min. 07:004,9 °C","Max. 16:3021,6 °C",4.9,21.6 +89,31.03.2019,"12,6 °C","Min. 07:304,3 °C","Max. 15:0021,9 °C",4.3,21.9 +90,01.04.2019,"13,6 °C","Min. 08:307,9 °C","Max. 15:5019,8 °C",7.9,19.8 +91,02.04.2019,"15,5 °C","Min. 07:5010,2 °C","Max. 16:4521,8 °C",10.2,21.8 +92,03.04.2019,"9,8 °C","Min. 23:155,3 °C","Max. 00:0014,7 °C",5.3,14.7 +93,04.04.2019,"5,4 °C","Min. 03:254,8 °C","Max. 18:106,6 °C",4.8,6.6 +94,05.04.2019,"6,6 °C","Min. 06:004,3 °C","Max. 16:358,8 °C",4.3,8.8 +95,06.04.2019,"10,1 °C","Min. 07:352,5 °C","Max. 17:3017,7 °C",2.5,17.7 +96,07.04.2019,"13,0 °C","Min. 07:207,2 °C","Max. 14:5519,1 °C",7.2,19.1 +97,08.04.2019,"11,5 °C","Min. 23:558,5 °C","Max. 18:1014,8 °C",8.5,14.8 +98,09.04.2019,"11,7 °C","Min. 00:308,3 °C","Max. 14:4017,1 °C",8.3,17.1 +99,10.04.2019,"11,2 °C","Min. 07:208,6 °C","Max. 13:3014,9 °C",8.6,14.9 +100,11.04.2019,"9,2 °C","Min. 07:002,8 °C","Max. 16:3014,6 °C",2.8,14.6 +101,12.04.2019,"6,6 °C","Min. 07:351,7 °C","Max. 14:2011,9 °C",1.7,11.9 +102,13.04.2019,"4,8 °C","Min. 23:403,2 °C","Max. 15:256,8 °C",3.2,6.8 +103,14.04.2019,"6,5 °C","Min. 05:551,7 °C","Max. 15:0012,8 °C",1.7,12.8 +104,15.04.2019,"10,4 °C","Min. 07:051,2 °C","Max. 17:0018,7 °C",1.2,18.7 +105,16.04.2019,"14,1 °C","Min. 08:006,3 °C","Max. 17:3019,8 °C",6.3,19.8 +106,17.04.2019,"15,1 °C","Min. 07:0010,4 °C","Max. 17:0020,3 °C",10.4,20.3 +107,18.04.2019,"17,7 °C","Min. 06:2512,7 °C","Max. 17:1022,9 °C",12.7,22.9 +108,19.04.2019,"19,4 °C","Min. 06:3512,9 °C","Max. 17:1525,2 °C",12.9,25.2 +109,20.04.2019,"19,1 °C","Min. 07:2010,0 °C","Max. 17:0025,6 °C",10.0,25.6 +110,21.04.2019,"19,9 °C","Min. 07:1010,7 °C","Max. 17:2025,7 °C",10.7,25.7 +111,22.04.2019,"20,7 °C","Min. 07:0515,7 °C","Max. 16:3025,7 °C",15.7,25.7 +112,23.04.2019,"18,3 °C","Min. 06:4514,3 °C","Max. 18:1022,0 °C",14.3,22.0 +113,24.04.2019,"17,8 °C","Min. 23:3010,3 °C","Max. 17:4026,3 °C",10.3,26.3 +114,25.04.2019,"16,9 °C","Min. 02:359,7 °C","Max. 16:4026,6 °C",9.7,26.6 +115,26.04.2019,"10,5 °C","Min. 04:458,6 °C","Max. 16:5012,2 °C",8.6,12.2 +116,27.04.2019,"9,9 °C","Min. 23:506,4 °C","Max. 15:0013,2 °C",6.4,13.2 +117,28.04.2019,"8,4 °C","Min. 05:404,8 °C","Max. 17:4013,1 °C",4.8,13.1 +118,29.04.2019,"8,8 °C","Min. 05:103,7 °C","Max. 15:4014,9 °C",3.7,14.9 +119,30.04.2019,"13,1 °C","Min. 07:159,0 °C","Max. 17:1519,2 °C",9.0,19.2 +120,01.05.2019,"14,2 °C","Min. 06:456,1 °C","Max. 17:0521,5 °C",6.1,21.5 +121,02.05.2019,"13,4 °C","Min. 06:256,9 °C","Max. 16:4520,6 °C",6.9,20.6 +122,03.05.2019,"11,8 °C","Min. 06:309,4 °C","Max. 13:2516,3 °C",9.4,16.3 +123,04.05.2019,"7,0 °C","Min. 10:254,2 °C","Max. 00:009,8 °C",4.2,9.8 +124,05.05.2019,"7,0 °C","Min. 06:101,9 °C","Max. 14:3011,5 °C",1.9,11.5 +125,06.05.2019,"9,3 °C","Min. 06:305,4 °C","Max. 15:2013,4 °C",5.4,13.4 +126,07.05.2019,"9,8 °C","Min. 06:252,3 °C","Max. 17:2515,4 °C",2.3,15.4 +127,08.05.2019,"11,4 °C","Min. 01:259,7 °C","Max. 13:2513,4 °C",9.7,13.4 +128,09.05.2019,"11,0 °C","Min. 05:108,8 °C","Max. 16:1013,5 °C",8.8,13.5 +129,10.05.2019,"12,4 °C","Min. 06:458,9 °C","Max. 17:5015,4 °C",8.9,15.4 +130,11.05.2019,"12,4 °C","Min. 23:459,0 °C","Max. 13:4017,4 °C",9.0,17.4 +131,12.05.2019,"10,1 °C","Min. 04:555,5 °C","Max. 18:0016,1 °C",5.5,16.1 +132,13.05.2019,"12,9 °C","Min. 06:005,7 °C","Max. 17:3018,8 °C",5.7,18.8 +133,14.05.2019,"12,8 °C","Min. 04:307,3 °C","Max. 14:0017,4 °C",7.3,17.4 +134,15.05.2019,"12,3 °C","Min. 06:304,8 °C","Max. 17:0017,7 °C",4.8,17.7 +135,16.05.2019,"13,4 °C","Min. 01:558,9 °C","Max. 17:3019,0 °C",8.9,19.0 +136,17.05.2019,"15,6 °C","Min. 06:259,0 °C","Max. 17:5021,8 °C",9.0,21.8 +137,18.05.2019,"15,7 °C","Min. 05:5010,6 °C","Max. 16:5023,4 °C",10.6,23.4 +138,19.05.2019,"17,6 °C","Min. 04:5511,6 °C","Max. 17:2024,6 °C",11.6,24.6 +139,20.05.2019,"15,2 °C","Min. 06:2012,2 °C","Max. 15:2018,5 °C",12.2,18.5 +140,21.05.2019,"12,7 °C","Min. 23:0512,1 °C","Max. 00:0013,3 °C",12.1,13.3 +141,22.05.2019,"13,7 °C","Min. 23:5510,7 °C","Max. 17:1018,3 °C",10.7,18.3 +142,23.05.2019,"15,4 °C","Min. 06:056,8 °C","Max. 17:2022,9 °C",6.8,22.9 +143,24.05.2019,"18,2 °C","Min. 06:059,6 °C","Max. 13:5524,8 °C",9.6,24.8 +144,25.05.2019,"18,3 °C","Min. 06:4512,2 °C","Max. 13:3523,9 °C",12.2,23.9 +145,26.05.2019,"17,8 °C","Min. 06:1510,4 °C","Max. 16:4023,7 °C",10.4,23.7 +146,27.05.2019,"17,2 °C","Min. 06:1013,5 °C","Max. 16:0521,9 °C",13.5,21.9 +147,28.05.2019,"15,6 °C","Min. 23:5512,4 °C","Max. 16:4519,7 °C",12.4,19.7 +148,29.05.2019,"14,2 °C","Min. 03:0011,1 °C","Max. 17:2519,3 °C",11.1,19.3 +149,30.05.2019,"16,6 °C","Min. 06:108,4 °C","Max. 12:5023,1 °C",8.4,23.1 +150,31.05.2019,"20,0 °C","Min. 03:1013,4 °C","Max. 14:1026,3 °C",13.4,26.3 +151,01.06.2019,"22,3 °C","Min. 06:0513,1 °C","Max. 16:3528,9 °C",13.1,28.9 +152,02.06.2019,"24,5 °C","Min. 06:1015,1 °C","Max. 16:5531,5 °C",15.1,31.5 +153,03.06.2019,"23,1 °C","Min. 06:0516,6 °C","Max. 13:4533,3 °C",16.6,33.3 +154,04.06.2019,"24,7 °C","Min. 06:2015,4 °C","Max. 16:5532,0 °C",15.4,32.0 +155,05.06.2019,"26,1 °C","Min. 06:0019,7 °C","Max. 17:3031,9 °C",19.7,31.9 +156,06.06.2019,"15,2 °C","Min. 23:5011,3 °C","Max. 00:2527,1 °C",11.3,27.1 +157,07.06.2019,"17,4 °C","Min. 02:2010,2 °C","Max. 17:0027,8 °C",10.2,27.8 +158,08.06.2019,"17,6 °C","Min. 06:3513,4 °C","Max. 15:0022,3 °C",13.4,22.3 +159,09.06.2019,"18,6 °C","Min. 05:359,8 °C","Max. 12:5524,7 °C",9.8,24.7 +160,10.06.2019,"17,9 °C","Min. 05:4515,8 °C","Max. 14:2021,4 °C",15.8,21.4 +161,11.06.2019,"17,6 °C","Min. 06:0513,6 °C","Max. 13:1021,1 °C",13.6,21.1 +162,12.06.2019,"17,0 °C","Min. 11:0013,8 °C","Max. 17:3020,3 °C",13.8,20.3 +163,13.06.2019,"19,6 °C","Min. 06:5514,3 °C","Max. 17:1525,0 °C",14.3,25.0 +164,14.06.2019,"21,4 °C","Min. 01:4016,8 °C","Max. 14:4026,2 °C",16.8,26.2 +165,15.06.2019,"20,8 °C","Min. 05:4015,3 °C","Max. 17:0525,8 °C",15.3,25.8 +166,16.06.2019,"19,1 °C","Min. 06:4515,6 °C","Max. 14:0523,2 °C",15.6,23.2 +167,17.06.2019,"21,4 °C","Min. 06:0513,0 °C","Max. 17:1027,6 °C",13.0,27.6 +168,18.06.2019,"24,0 °C","Min. 06:1016,1 °C","Max. 13:5529,9 °C",16.1,29.9 +169,19.06.2019,"25,5 °C","Min. 05:2518,2 °C","Max. 14:5032,1 °C",18.2,32.1 +170,20.06.2019,"20,9 °C","Min. 04:1016,4 °C","Max. 12:3025,6 °C",16.4,25.6 +171,21.06.2019,"21,0 °C","Min. 06:3516,5 °C","Max. 17:4025,7 °C",16.5,25.7 +172,22.06.2019,"20,1 °C","Min. 05:5514,3 °C","Max. 14:2528,2 °C",14.3,28.2 +173,23.06.2019,"22,4 °C","Min. 05:1015,6 °C","Max. 18:0528,7 °C",15.6,28.7 +174,24.06.2019,"26,5 °C","Min. 05:3021,3 °C","Max. 16:3531,7 °C",21.3,31.7 +175,25.06.2019,"28,3 °C","Min. 06:2023,3 °C","Max. 17:3033,9 °C",23.3,33.9 +176,26.06.2019,"29,4 °C","Min. 06:0521,3 °C","Max. 17:0036,7 °C",21.3,36.7 +177,27.06.2019,"27,6 °C","Min. 06:3523,2 °C","Max. 16:4531,9 °C",23.2,31.9 +178,28.06.2019,"24,7 °C","Min. 06:3016,5 °C","Max. 17:3030,8 °C",16.5,30.8 +179,29.06.2019,"26,4 °C","Min. 06:0516,7 °C","Max. 16:3032,9 °C",16.7,32.9 +180,30.06.2019,"30,3 °C","Min. 06:4521,3 °C","Max. 16:3037,3 °C",21.3,37.3 +181,01.07.2019,"26,7 °C","Min. 23:5522,9 °C","Max. 17:3531,3 °C",22.9,31.3 +182,02.07.2019,"22,7 °C","Min. 06:2017,1 °C","Max. 17:2527,4 °C",17.1,27.4 +183,03.07.2019,"22,2 °C","Min. 06:1516,9 °C","Max. 17:4027,1 °C",16.9,27.1 +184,04.07.2019,"22,1 °C","Min. 06:3014,3 °C","Max. 17:3528,3 °C",14.3,28.3 +185,05.07.2019,"22,3 °C","Min. 06:0014,6 °C","Max. 17:3029,7 °C",14.6,29.7 +186,06.07.2019,"25,1 °C","Min. 06:3016,7 °C","Max. 16:1532,7 °C",16.7,32.7 +187,07.07.2019,"19,9 °C","Min. 07:1016,7 °C","Max. 00:0023,7 °C",16.7,23.7 +188,08.07.2019,"18,4 °C","Min. 06:0514,2 °C","Max. 14:0523,5 °C",14.2,23.5 +189,09.07.2019,"16,7 °C","Min. 06:0510,9 °C","Max. 16:5021,6 °C",10.9,21.6 +190,10.07.2019,"18,4 °C","Min. 06:259,4 °C","Max. 17:1525,5 °C",9.4,25.5 +191,11.07.2019,"17,7 °C","Min. 06:3016,4 °C","Max. 11:0019,7 °C",16.4,19.7 +192,12.07.2019,"17,8 °C","Min. 23:5515,7 °C","Max. 12:3021,7 °C",15.7,21.7 +193,13.07.2019,"16,8 °C","Min. 04:4514,3 °C","Max. 16:5521,5 °C",14.3,21.5 +194,14.07.2019,"16,9 °C","Min. 04:4514,0 °C","Max. 18:3020,4 °C",14.0,20.4 +195,15.07.2019,"18,3 °C","Min. 05:4512,5 °C","Max. 16:2024,2 °C",12.5,24.2 +196,16.07.2019,"18,7 °C","Min. 06:3010,7 °C","Max. 18:0025,2 °C",10.7,25.2 +197,17.07.2019,"20,5 °C","Min. 06:3012,7 °C","Max. 17:0026,9 °C",12.7,26.9 +198,18.07.2019,"21,4 °C","Min. 06:0013,8 °C","Max. 17:3028,7 °C",13.8,28.7 +199,19.07.2019,"22,6 °C","Min. 04:0019,8 °C","Max. 13:3027,6 °C",19.8,27.6 +200,20.07.2019,"25,4 °C","Min. 05:3017,4 °C","Max. 15:3032,7 °C",17.4,32.7 +201,21.07.2019,"24,6 °C","Min. 06:2520,4 °C","Max. 15:5029,7 °C",20.4,29.7 +202,22.07.2019,"24,5 °C","Min. 06:4016,2 °C","Max. 17:5531,4 °C",16.2,31.4 +203,23.07.2019,"27,3 °C","Min. 06:3517,5 °C","Max. 16:5034,9 °C",17.5,34.9 +204,24.07.2019,"30,7 °C","Min. 06:4022,1 °C","Max. 17:3537,2 °C",22.1,37.2 +205,25.07.2019,"30,7 °C","Min. 06:3521,1 °C","Max. 17:1038,9 °C",21.1,38.9 +206,26.07.2019,"30,8 °C","Min. 07:2024,8 °C","Max. 16:2038,3 °C",24.8,38.3 +207,27.07.2019,"24,0 °C","Min. 23:3518,6 °C","Max. 16:5528,3 °C",18.6,28.3 +208,28.07.2019,"19,8 °C","Min. 23:4518,6 °C","Max. 16:2521,1 °C",18.6,21.1 +209,29.07.2019,"22,1 °C","Min. 05:3018,2 °C","Max. 17:3027,1 °C",18.2,27.1 +210,30.07.2019,"24,4 °C","Min. 06:5017,8 °C","Max. 17:1030,8 °C",17.8,30.8 +211,31.07.2019,"22,2 °C","Min. 06:2518,2 °C","Max. 14:3526,8 °C",18.2,26.8 +212,01.08.2019,"21,5 °C","Min. 05:0515,5 °C","Max. 13:5027,8 °C",15.5,27.8 +213,02.08.2019,"21,3 °C","Min. 06:0516,1 °C","Max. 14:1529,3 °C",16.1,29.3 +214,03.08.2019,"20,4 °C","Min. 05:3515,9 °C","Max. 17:2025,9 °C",15.9,25.9 +215,04.08.2019,"22,1 °C","Min. 06:3014,2 °C","Max. 17:2028,7 °C",14.2,28.7 +216,05.08.2019,"23,5 °C","Min. 03:5019,2 °C","Max. 16:4029,6 °C",19.2,29.6 +217,06.08.2019,"23,3 °C","Min. 23:5019,5 °C","Max. 17:2527,3 °C",19.5,27.3 +218,07.08.2019,"19,3 °C","Min. 23:5017,6 °C","Max. 10:0521,3 °C",17.6,21.3 +219,08.08.2019,"21,2 °C","Min. 06:3017,0 °C","Max. 16:4526,9 °C",17.0,26.9 +220,09.08.2019,"23,4 °C","Min. 06:3017,0 °C","Max. 14:3531,3 °C",17.0,31.3 +221,10.08.2019,"22,5 °C","Min. 23:5519,2 °C","Max. 17:3026,8 °C",19.2,26.8 +222,11.08.2019,"20,8 °C","Min. 21:0015,6 °C","Max. 13:2528,3 °C",15.6,28.3 +223,12.08.2019,"17,9 °C","Min. 06:1514,7 °C","Max. 17:2022,8 °C",14.7,22.8 +224,13.08.2019,"17,5 °C","Min. 06:5513,4 °C","Max. 14:0021,6 °C",13.4,21.6 +225,14.08.2019,"17,8 °C","Min. 04:4513,9 °C","Max. 18:0023,4 °C",13.9,23.4 +226,15.08.2019,"19,6 °C","Min. 00:3016,4 °C","Max. 17:3025,2 °C",16.4,25.2 +227,16.08.2019,"19,6 °C","Min. 07:0014,1 °C","Max. 17:0024,2 °C",14.1,24.2 +228,17.08.2019,"19,9 °C","Min. 22:0017,6 °C","Max. 13:3023,6 °C",17.6,23.6 +229,18.08.2019,"23,3 °C","Min. 01:3017,3 °C","Max. 16:3030,7 °C",17.3,30.7 +230,19.08.2019,"21,9 °C","Min. 08:0018,1 °C","Max. 14:0025,9 °C",18.1,25.9 +231,20.08.2019,"17,8 °C","Min. 07:0515,7 °C","Max. 12:4020,2 °C",15.7,20.2 +232,21.08.2019,"19,0 °C","Min. 04:0014,1 °C","Max. 14:0024,3 °C",14.1,24.3 +233,22.08.2019,"20,3 °C","Min. 07:0012,3 °C","Max. 17:0526,7 °C",12.3,26.7 +234,23.08.2019,"21,1 °C","Min. 07:1512,7 °C","Max. 16:5028,7 °C",12.7,28.7 +235,24.08.2019,"22,2 °C","Min. 07:0014,1 °C","Max. 14:1529,4 °C",14.1,29.4 +236,25.08.2019,"24,1 °C","Min. 07:1516,6 °C","Max. 13:4531,3 °C",16.6,31.3 +237,26.08.2019,"25,1 °C","Min. 07:0017,7 °C","Max. 16:3032,0 °C",17.7,32.0 +238,27.08.2019,"26,2 °C","Min. 07:2519,5 °C","Max. 14:0032,4 °C",19.5,32.4 +239,28.08.2019,"25,9 °C","Min. 04:5521,8 °C","Max. 16:5032,4 °C",21.8,32.4 +240,29.08.2019,"25,5 °C","Min. 06:2520,8 °C","Max. 14:4532,1 °C",20.8,32.1 +241,30.08.2019,"24,3 °C","Min. 07:2018,7 °C","Max. 17:2530,2 °C",18.7,30.2 +242,31.08.2019,"25,4 °C","Min. 07:3517,6 °C","Max. 17:2032,3 °C",17.6,32.3 +243,01.09.2019,"22,9 °C","Min. 23:5518,7 °C","Max. 00:0025,7 °C",18.7,25.7 +244,02.09.2019,"18,5 °C","Min. 07:0514,3 °C","Max. 13:4022,9 °C",14.3,22.9 +245,03.09.2019,"17,8 °C","Min. 07:259,7 °C","Max. 13:4025,1 °C",9.7,25.1 +246,04.09.2019,"19,1 °C","Min. 07:1010,7 °C","Max. 14:0026,5 °C",10.7,26.5 +247,05.09.2019,"18,4 °C","Min. 08:3015,5 °C","Max. 16:0021,6 °C",15.5,21.6 +248,06.09.2019,"15,8 °C","Min. 08:0010,3 °C","Max. 16:0020,4 °C",10.3,20.4 +249,07.09.2019,"13,2 °C","Min. 03:459,9 °C","Max. 17:1516,6 °C",9.9,16.6 +250,08.09.2019,"13,4 °C","Min. 04:5512,2 °C","Max. 15:3015,5 °C",12.2,15.5 +251,09.09.2019,"13,8 °C","Min. 07:1511,8 °C","Max. 15:4016,9 °C",11.8,16.9 +252,10.09.2019,"14,8 °C","Min. 07:058,6 °C","Max. 13:4021,7 °C",8.6,21.7 +253,11.09.2019,"15,7 °C","Min. 07:408,0 °C","Max. 14:1023,2 °C",8.0,23.2 +254,12.09.2019,"19,9 °C","Min. 23:5016,8 °C","Max. 14:1025,4 °C",16.8,25.4 +255,13.09.2019,"18,7 °C","Min. 04:3514,4 °C","Max. 15:5523,8 °C",14.4,23.8 +256,14.09.2019,"19,0 °C","Min. 07:5013,1 °C","Max. 16:2024,9 °C",13.1,24.9 +257,15.09.2019,"18,9 °C","Min. 07:1511,9 °C","Max. 14:0526,0 °C",11.9,26.0 +258,16.09.2019,"18,7 °C","Min. 07:3511,7 °C","Max. 14:0525,1 °C",11.7,25.1 +259,17.09.2019,"17,5 °C","Min. 23:5012,6 °C","Max. 14:0521,4 °C",12.6,21.4 +260,18.09.2019,"13,9 °C","Min. 07:457,9 °C","Max. 14:0519,5 °C",7.9,19.5 +261,19.09.2019,"13,2 °C","Min. 06:407,1 °C","Max. 14:1018,4 °C",7.1,18.4 +262,20.09.2019,"14,7 °C","Min. 08:058,6 °C","Max. 14:0519,7 °C",8.6,19.7 +263,21.09.2019,"18,3 °C","Min. 07:0512,7 °C","Max. 16:3524,3 °C",12.7,24.3 +264,22.09.2019,"18,6 °C","Min. 08:2010,5 °C","Max. 17:0524,2 °C",10.5,24.2 +265,23.09.2019,"16,4 °C","Min. 07:4514,2 °C","Max. 16:5019,1 °C",14.2,19.1 +266,24.09.2019,"15,5 °C","Min. 07:5011,3 °C","Max. 15:0019,4 °C",11.3,19.4 +267,25.09.2019,"15,4 °C","Min. 07:0013,9 °C","Max. 13:0018,7 °C",13.9,18.7 +268,26.09.2019,"15,8 °C","Min. 03:4513,7 °C","Max. 15:1018,0 °C",13.7,18.0 +269,27.09.2019,"15,6 °C","Min. 23:3013,1 °C","Max. 08:3017,3 °C",13.1,17.3 +270,28.09.2019,"15,2 °C","Min. 08:0012,9 °C","Max. 16:3018,0 °C",12.9,18.0 +271,29.09.2019,"16,9 °C","Min. 05:0012,6 °C","Max. 14:0021,8 °C",12.6,21.8 +272,30.09.2019,"16,1 °C","Min. 23:5513,1 °C","Max. 14:1019,2 °C",13.1,19.2 +273,01.10.2019,"15,3 °C","Min. 02:5011,9 °C","Max. 17:3019,8 °C",11.9,19.8 +274,02.10.2019,"12,9 °C","Min. 23:558,3 °C","Max. 01:5015,4 °C",8.3,15.4 +275,03.10.2019,"9,4 °C","Min. 06:055,5 °C","Max. 15:3514,4 °C",5.5,14.4 +276,04.10.2019,"10,1 °C","Min. 01:507,2 °C","Max. 17:4512,9 °C",7.2,12.9 +277,05.10.2019,"11,7 °C","Min. 22:359,9 °C","Max. 12:4013,4 °C",9.9,13.4 +278,06.10.2019,"10,1 °C","Min. 11:459,1 °C","Max. 17:2010,9 °C",9.1,10.9 +279,07.10.2019,"11,3 °C","Min. 07:509,1 °C","Max. 16:5014,1 °C",9.1,14.1 +280,08.10.2019,"12,6 °C","Min. 06:0011,4 °C","Max. 23:4514,4 °C",11.4,14.4 +281,09.10.2019,"12,1 °C","Min. 23:559,6 °C","Max. 12:5514,8 °C",9.6,14.8 +282,10.10.2019,"11,3 °C","Min. 00:409,2 °C","Max. 15:3015,3 °C",9.2,15.3 +283,11.10.2019,"12,9 °C","Min. 03:059,5 °C","Max. 17:0018,0 °C",9.5,18.0 +284,12.10.2019,"16,5 °C","Min. 00:0011,7 °C","Max. 13:1022,2 °C",11.7,22.2 +285,13.10.2019,"19,1 °C","Min. 08:4013,8 °C","Max. 15:4024,7 °C",13.8,24.7 +286,14.10.2019,"19,4 °C","Min. 08:3513,4 °C","Max. 16:0524,2 °C",13.4,24.2 +287,15.10.2019,"16,2 °C","Min. 08:0013,2 °C","Max. 12:4521,6 °C",13.2,21.6 +288,16.10.2019,"13,6 °C","Min. 04:2011,1 °C","Max. 17:5017,2 °C",11.1,17.2 +289,17.10.2019,"14,9 °C","Min. 01:4012,1 °C","Max. 14:4019,0 °C",12.1,19.0 +290,18.10.2019,"14,3 °C","Min. 22:3511,4 °C","Max. 12:1017,7 °C",11.4,17.7 +291,19.10.2019,"13,7 °C","Min. 00:3511,2 °C","Max. 16:2516,4 °C",11.2,16.4 +292,20.10.2019,"15,6 °C","Min. 06:0013,3 °C","Max. 13:5019,8 °C",13.3,19.8 +293,21.10.2019,"15,0 °C","Min. 03:5512,9 °C","Max. 13:0017,2 °C",12.9,17.2 +294,22.10.2019,"14,1 °C","Min. 23:4511,3 °C","Max. 15:0017,8 °C",11.3,17.8 +295,23.10.2019,"12,9 °C","Min. 03:1510,0 °C","Max. 15:4015,6 °C",10.0,15.6 +296,24.10.2019,"14,9 °C","Min. 03:0011,3 °C","Max. 15:4519,5 °C",11.3,19.5 +297,25.10.2019,"14,2 °C","Min. 23:4510,4 °C","Max. 16:0017,7 °C",10.4,17.7 +298,26.10.2019,"10,3 °C","Min. 00:0010,3 °C","Max. 00:0010,3 °C",10.3,10.3 diff --git a/mobile/templates/mobile/index.html b/mobile/templates/mobile/index.html index 8739e6f..b99b005 100644 --- a/mobile/templates/mobile/index.html +++ b/mobile/templates/mobile/index.html @@ -8,8 +8,12 @@ Scan a blooming tree -

Hey, some predictions

+

-

{{ prediction }}

+

Especially look for the following trees, they are likely to bloom +soon:

+{% for tree in prediction %} +{{ tree }}
+{% endfor %} {% endblock %} diff --git a/mobile/views.py b/mobile/views.py index 3739ce5..af9f5eb 100644 --- a/mobile/views.py +++ b/mobile/views.py @@ -10,12 +10,12 @@ import matplotlib.pyplot as plt import numpy as np import seaborn as sns import re as re +from .predict import predict_blooming def index(request): - - - return render(request, 'mobile/index.html') + soon_blooms = predict_blooming('20.05.2019') + return render(request, 'mobile/index.html', {'prediction': soon_blooms}) def scan(request): diff --git a/mobile/wachstumsgradtag.csv b/mobile/wachstumsgradtag.csv new file mode 100644 index 0000000..e3a6e04 --- /dev/null +++ b/mobile/wachstumsgradtag.csv @@ -0,0 +1,18 @@ +Deutsch,Latin,minGDD,maxGDD +Hamamelis,Hamamelis spp. ,1,1 +Rotahorn,Acer rubrum ,1,27 +Forsythie,Forsythia,1,27 +Zuckerahorn,Acer saccharum ,1,27 +Spitzahorn,Acer platanoides ,30,50 +Esche,Fraxinus americana ,30,50 +Apfelbaum,Malus spp. ,50,80 +Gemeiner Gingster,Cytissus scoparius ,50,80 +Rosskastanie,Aesculus hippocastanum ,80,110 +Gemeiner Flieder,Syringa vulgaris ,80,110 +Robinie,Robinia pseudoacacia ,140,160 +Trompetenbaum,Catalpa speciosa ,250,330 +Liguster,Ligustrum spp. ,330,400 +Holunder,Sambucus canadensis ,330,400 +Blutweiderich,Lythrum salicaria ,400,450 +Essigbaum,Rhus typhina ,450,500 +Sommerflieder,Buddleia davidii ,550,650 From 9bf75feaf1a1534c328eaedc608411528cf6ba52 Mon Sep 17 00:00:00 2001 From: christian Date: Sun, 27 Oct 2019 07:59:25 +0100 Subject: [PATCH 2/2] improve map --- map/static/map/index.css | 56 ++++++++++++++++++++++-- map/static/map/tree_blooming_pink.png | Bin 0 -> 34626 bytes map/templates/map/index.html | 59 ++++++++++++++++++++------ 3 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 map/static/map/tree_blooming_pink.png diff --git a/map/static/map/index.css b/map/static/map/index.css index 1c1d335..b46b1b4 100644 --- a/map/static/map/index.css +++ b/map/static/map/index.css @@ -1,21 +1,69 @@ #map1 { - height: 43% + height: 46% } #map2 { margin-top: 10px; - height: 43%; - margin-bottom: 7px; + height: 46%; + margin-bottom: 10px; +} + +#p_date { + position: absolute; + bottom: 20px; +} + +#logo_side { + width: 60%; + margin-left: 20%; + margin-top: 10%; +} + +#central { + margin:0 auto; +} + +#left { + width: 75%; + float: left; +} + +#right { + width: 24%; + float: right; +} + +div.yearno { + pointer-events: none; + position: absolute; + z-index: 1000; + font-size: 19pt; + background-color: white; + border-radius: 5px; + padding: 5px; + color: 333333; + border: 2px solid rgba(0, 0, 0, 0.3); +} + +#div19 { + top: 30px; + left: 30px; +} + +#div29 { + top: 330px; + left: 30px; } .slider { -webkit-appearance: none; width: 100%; + float: right; height: 15px; border-radius: 5px; background: #d3d3d3; outline: none; - opacity: 0.7; + opacity: 0.9; -webkit-transition: .2s; transition: opacity .2s; } diff --git a/map/static/map/tree_blooming_pink.png b/map/static/map/tree_blooming_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdb527e163ebb20d19e016d5cd1db948e9193bf GIT binary patch literal 34626 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 literal 0 HcmV?d00001 diff --git a/map/templates/map/index.html b/map/templates/map/index.html index b5d4c70..a22fdef 100644 --- a/map/templates/map/index.html +++ b/map/templates/map/index.html @@ -18,25 +18,54 @@ -
-
+
-
2019
-
2029
+
+
+
+ +
2019
+
2029
+ +
+ +
+
+ + -
-
-