diff --git a/.DS_Store b/.DS_Store
index 9f9e4d112d4764c1914730f9083ff6f46eac5872..6be50f2b0fb9dd24f3ed303669512d55d8da3476 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/Tavara- raskaan liikenne/.DS_Store b/Tavara- raskaan liikenne/.DS_Store
index e85420dcb6bab8e6e59d205eaea7d59b538ac611..87c75be43d7b7354483c7032dae37670735692c9 100644
Binary files a/Tavara- raskaan liikenne/.DS_Store and b/Tavara- raskaan liikenne/.DS_Store differ
diff --git a/Tavara- raskaan liikenne/backend/index.js b/Tavara- raskaan liikenne/backend/index.js
index e3806cc4a4406b77fd4d55a9d5b26c3157bdbee2..5273f20fb417882fc4fc02c27815b0e0147793a1 100644
--- a/Tavara- raskaan liikenne/backend/index.js	
+++ b/Tavara- raskaan liikenne/backend/index.js	
@@ -2,52 +2,18 @@
 var express = require('express');
 var cors = require('cors');
 var app = express();
-var port = 3030;
-app.listen(port, function () {
-    console.log(`server running on http://localhost:${port}`);
-});
-
-app.use(cors());
-
-//Part2: Express Get Request for Covid-19 Time Series data
-app.get('/',function (req, res) {
-
-    console.log(req.query.data)
-     var spawn = require('child_process').spawn;
-    var childProcess = spawn('python', ['../python/test.py',
-    req.query.data],{shell: true});
-    
-    // childProcess.stdout.on('data', function (data) {
-    //  
-    //     res.send(data.toString());
-    //    
-    // });
-    var uint8arrayToString = function(data){
-        return String.fromCharCode.apply(null, data);
-    };
-    
-    // Handle normal output
-    childProcess.stdout.on('data', (data) => {
-        console.log(uint8arrayToString(data));
-        res.send(data);
-        console.log(typeof data)
-    });
-    
-    // Handle error output
-    childProcess.stderr.on('data', (data) => {
-        // As said before, convert the Uint8Array to a readable string.
-        console.log(uint8arrayToString(data));
-    });
-    
-    childProcess.on('exit', (code) => {
-        console.log("Process quit with code : " + code);
-    });
 
 
 
+app.use(cors());
 
+app.use("/",require("./routes/test.js"))
+app.use("/api/vehicle/", require('./routes/api/vehicles/vehicle'));
 
-});
 
 
 
+var port = 3030;
+app.listen(port, function () {
+    console.log(`server running on http://localhost:${port}`);
+});
diff --git a/Tavara- raskaan liikenne/backend/package-lock.json b/Tavara- raskaan liikenne/backend/package-lock.json
index c53e47d2f377cc2fe0052ad61c14b150dc0ff56f..3a115bfabfacefdf495f301e2a5501bbbd376dc7 100644
--- a/Tavara- raskaan liikenne/backend/package-lock.json	
+++ b/Tavara- raskaan liikenne/backend/package-lock.json	
@@ -84,6 +84,14 @@
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
       "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
     },
+    "axios": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
+      "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
+      "requires": {
+        "follow-redirects": "1.5.10"
+      }
+    },
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -453,6 +461,24 @@
         "unpipe": "~1.0.0"
       }
     },
+    "follow-redirects": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+      "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+      "requires": {
+        "debug": "=3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
     "forwarded": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
@@ -970,6 +996,32 @@
         "lowercase-keys": "^1.0.0"
       }
     },
+    "router": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz",
+      "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==",
+      "requires": {
+        "array-flatten": "3.0.0",
+        "debug": "2.6.9",
+        "methods": "~1.1.2",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "setprototypeof": "1.2.0",
+        "utils-merge": "1.0.1"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz",
+          "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA=="
+        },
+        "setprototypeof": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+          "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+        }
+      }
+    },
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
diff --git a/Tavara- raskaan liikenne/backend/package.json b/Tavara- raskaan liikenne/backend/package.json
index 887107a8055f153d30957a4a81ca0545bb20f6df..16e5a30715da465d30207c186e3404bf97a789e9 100644
--- a/Tavara- raskaan liikenne/backend/package.json	
+++ b/Tavara- raskaan liikenne/backend/package.json	
@@ -9,9 +9,11 @@
   "author": "",
   "license": "ISC",
   "dependencies": {
+    "axios": "^0.19.2",
     "cors": "^2.8.5",
     "express": "^4.17.1",
     "nodemon": "^2.0.4",
-    "python-shell": "^2.0.1"
+    "python-shell": "^2.0.1",
+    "router": "^1.3.5"
   }
 }
diff --git a/Tavara- raskaan liikenne/backend/routes/api/vehicles/vehicle.js b/Tavara- raskaan liikenne/backend/routes/api/vehicles/vehicle.js
new file mode 100644
index 0000000000000000000000000000000000000000..c12f687b5f47b8fe2e535be8d14a9bce140ba43b
--- /dev/null
+++ b/Tavara- raskaan liikenne/backend/routes/api/vehicles/vehicle.js	
@@ -0,0 +1,63 @@
+const express = require('express');
+const router = express.Router();
+const axios = require('axios');
+
+
+//Part2: Express Get Request for Covid-19 Time Series data
+router.get('/',function (req, res) {
+
+    var year = req.query.year;
+    var areaID = req.query.areaID;
+    var lamID = req.query.lamID;
+    var startDayNumber = req.query.startDayNumber;
+    var endDayNumber = req.query.endDayNumber;
+   
+
+    //var vehicleClass =req.query.vehicleClass;
+
+    console.log(req.query);
+
+
+    if(endDayNumber== undefined | endDayNumber =="" | endDayNumber ==NaN)endDayNumber=NaN;
+
+    var spawn = require('child_process').spawn;
+    var childProcess = spawn('python', ['../python/cars/lamData.py',
+    year,
+    areaID,
+    lamID,
+    startDayNumber,
+    endDayNumber
+    //,vehicleClass,
+    ]
+    ,{shell: true});
+    
+    // childProcess.stdout.on('data', function (data) {
+    //  
+    //     res.send(data.toString());
+    //    
+    // });
+    var uint8arrayToString = function(data){
+        return String.fromCharCode.apply(null, data);
+    };
+    
+    // Handle normal output
+    childProcess.stdout.on('data', (data) => {
+        console.log(uint8arrayToString(data));
+        res.send(data);
+        console.log(typeof data)
+    });
+    
+    // Handle error output
+    childProcess.stderr.on('data', (data) => {
+        //As said before, convert the Uint8Array to a readable string.
+        console.log(uint8arrayToString(data));
+        //res.send(data)
+    });
+    
+    childProcess.on('exit', (code) => {
+        console.log("Process quit with code : " + code);
+    });
+
+});
+
+module.exports = router
\ No newline at end of file
diff --git a/Tavara- raskaan liikenne/backend/routes/test.js b/Tavara- raskaan liikenne/backend/routes/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fb6802969f06d571f9a66e29657583d29edf7a5
--- /dev/null
+++ b/Tavara- raskaan liikenne/backend/routes/test.js	
@@ -0,0 +1,52 @@
+const express = require('express');
+const router = express.Router();
+const axios = require('axios');
+
+
+
+
+
+
+//Part2: Express Get Request for Covid-19 Time Series data
+router.get('/',function (req, res) {
+
+    var data = req.query.data;
+
+
+    console.log(req.query)
+    var spawn = require('child_process').spawn;
+    var childProcess = spawn('python', ['../python/test.py',
+    data,
+
+    ]
+    ,{shell: true});
+    
+    // childProcess.stdout.on('data', function (data) {
+    //  
+    //     res.send(data.toString());
+    //    
+    // });
+    var uint8arrayToString = function(data){
+        return String.fromCharCode.apply(null, data);
+    };
+    
+    // Handle normal output
+    childProcess.stdout.on('data', (data) => {
+        console.log(uint8arrayToString(data));
+        res.send(data);
+        console.log(typeof data)
+    });
+    
+    // Handle error output
+    childProcess.stderr.on('data', (data) => {
+        // As said before, convert the Uint8Array to a readable string.
+        console.log(uint8arrayToString(data));
+    });
+    
+    childProcess.on('exit', (code) => {
+        console.log("Process quit with code : " + code);
+    });
+
+});
+
+module.exports = router
\ No newline at end of file
diff --git a/Tavara- raskaan liikenne/frontend/.DS_Store b/Tavara- raskaan liikenne/frontend/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..7d9703c3e1f3c722797ecc2725817d086695036c
Binary files /dev/null and b/Tavara- raskaan liikenne/frontend/.DS_Store differ
diff --git a/Tavara- raskaan liikenne/frontend/traffic/package-lock.json b/Tavara- raskaan liikenne/frontend/traffic/package-lock.json
index 8f6133c4f87148417269484da7706c100d56caf6..b4514ad5273402a5c853a4ed4299034dd65b2c91 100644
--- a/Tavara- raskaan liikenne/frontend/traffic/package-lock.json	
+++ b/Tavara- raskaan liikenne/frontend/traffic/package-lock.json	
@@ -1356,6 +1356,25 @@
       "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
       "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
     },
+    "@popperjs/core": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.4.0.tgz",
+      "integrity": "sha512-NMrDy6EWh9TPdSRiHmHH2ye1v5U0gBD7pRYwSwJvomx7Bm4GG04vu63dYiVzebLOx2obPpJugew06xVP0Nk7hA=="
+    },
+    "@restart/context": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz",
+      "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q=="
+    },
+    "@restart/hooks": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.25.tgz",
+      "integrity": "sha512-m2v3N5pxTsIiSH74/sb1yW8D9RxkJidGW+5Mfwn/lHb2QzhZNlaU1su7abSyT9EGf0xS/0waLjrf7/XxQHUk7w==",
+      "requires": {
+        "lodash": "^4.17.15",
+        "lodash-es": "^4.17.15"
+      }
+    },
     "@sheerun/mutationobserver-shim": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz",
@@ -1830,6 +1849,11 @@
         }
       }
     },
+    "@types/warning": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz",
+      "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI="
+    },
     "@types/yargs": {
       "version": "13.0.9",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz",
@@ -3581,6 +3605,11 @@
         }
       }
     },
+    "classnames": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+    },
     "clean-css": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
@@ -4616,6 +4645,15 @@
         "utila": "~0.4"
       }
     },
+    "dom-helpers": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.4.tgz",
+      "integrity": "sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==",
+      "requires": {
+        "@babel/runtime": "^7.8.7",
+        "csstype": "^2.6.7"
+      }
+    },
     "dom-serializer": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
@@ -7937,6 +7975,11 @@
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
       "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
     },
+    "lodash-es": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz",
+      "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ=="
+    },
     "lodash._reinterpolate": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
@@ -10288,6 +10331,15 @@
         "react-is": "^16.8.1"
       }
     },
+    "prop-types-extra": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz",
+      "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==",
+      "requires": {
+        "react-is": "^16.3.2",
+        "warning": "^4.0.0"
+      }
+    },
     "proxy-addr": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
@@ -10475,6 +10527,26 @@
         "whatwg-fetch": "^3.0.0"
       }
     },
+    "react-bootstrap": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.0.1.tgz",
+      "integrity": "sha512-xMHwsvDN7sIv26P9wWiosWjITZije2dRCjEJHVfV2KFoSJY+8uv2zttEw0XMB7xviQcW3zuIGLJXuj8vf6lYEg==",
+      "requires": {
+        "@babel/runtime": "^7.4.2",
+        "@restart/context": "^2.1.4",
+        "@restart/hooks": "^0.3.21",
+        "@types/react": "^16.9.23",
+        "classnames": "^2.2.6",
+        "dom-helpers": "^5.1.2",
+        "invariant": "^2.2.4",
+        "prop-types": "^15.7.2",
+        "prop-types-extra": "^1.1.0",
+        "react-overlays": "^3.1.2",
+        "react-transition-group": "^4.0.0",
+        "uncontrollable": "^7.0.0",
+        "warning": "^4.0.3"
+      }
+    },
     "react-chartjs-2": {
       "version": "2.9.0",
       "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-2.9.0.tgz",
@@ -10751,6 +10823,26 @@
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
       "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
     },
+    "react-lifecycles-compat": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+    },
+    "react-overlays": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-3.2.0.tgz",
+      "integrity": "sha512-YTgCmw6l4uBOYylSnc3V8WLX+A0EoGnzDrqkYz0K7MUKbMBZFpaxLXH4EF9eZbspd+syZHQ5XAABI7n/zak1EA==",
+      "requires": {
+        "@babel/runtime": "^7.4.5",
+        "@popperjs/core": "^2.0.0",
+        "@restart/hooks": "^0.3.12",
+        "@types/warning": "^3.0.0",
+        "dom-helpers": "^5.1.0",
+        "prop-types": "^15.7.2",
+        "uncontrollable": "^7.0.0",
+        "warning": "^4.0.3"
+      }
+    },
     "react-scripts": {
       "version": "3.4.1",
       "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz",
@@ -10811,6 +10903,17 @@
         "workbox-webpack-plugin": "4.3.1"
       }
     },
+    "react-transition-group": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz",
+      "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==",
+      "requires": {
+        "@babel/runtime": "^7.5.5",
+        "dom-helpers": "^5.0.1",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.6.2"
+      }
+    },
     "read-pkg": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -12826,6 +12929,17 @@
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
+    "uncontrollable": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz",
+      "integrity": "sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==",
+      "requires": {
+        "@babel/runtime": "^7.6.3",
+        "@types/react": "^16.9.11",
+        "invariant": "^2.2.4",
+        "react-lifecycles-compat": "^3.0.4"
+      }
+    },
     "unicode-canonical-property-names-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@@ -13112,6 +13226,14 @@
         "makeerror": "1.0.x"
       }
     },
+    "warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
     "watchpack": {
       "version": "1.7.2",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
diff --git a/Tavara- raskaan liikenne/frontend/traffic/package.json b/Tavara- raskaan liikenne/frontend/traffic/package.json
index 73684d38f220ac88c8d3e18f3404331cef87672a..6a0e608030c9df3131448d22a9015397d98fcd96 100644
--- a/Tavara- raskaan liikenne/frontend/traffic/package.json	
+++ b/Tavara- raskaan liikenne/frontend/traffic/package.json	
@@ -12,6 +12,7 @@
     "chart.js": "^2.9.3",
     "react": "^16.13.1",
     "react-apexcharts": "^1.3.7",
+    "react-bootstrap": "^1.0.1",
     "react-chartjs-2": "^2.9.0",
     "react-dom": "^16.13.1",
     "react-scripts": "3.4.1"
diff --git a/Tavara- raskaan liikenne/frontend/traffic/src/App.css b/Tavara- raskaan liikenne/frontend/traffic/src/App.css
index 74b5e053450a48a6bdb4d71aad648e7af821975c..2496b4fa6d3f3a5b3f6a9c2dc4aa7a2c1ab1c530 100644
--- a/Tavara- raskaan liikenne/frontend/traffic/src/App.css	
+++ b/Tavara- raskaan liikenne/frontend/traffic/src/App.css	
@@ -7,6 +7,12 @@
   pointer-events: none;
 }
 
+.Cars_graph{
+  max-width: 443px;
+  margin: 30px;
+}
+
+
 @media (prefers-reduced-motion: no-preference) {
   .App-logo {
     animation: App-logo-spin infinite 20s linear;
diff --git a/Tavara- raskaan liikenne/frontend/traffic/src/App.js b/Tavara- raskaan liikenne/frontend/traffic/src/App.js
index 1a40f819380ad6dba745274d76e1b656285c7316..5d972204a037ad136b9598b4ea3449e5aa18deb2 100644
--- a/Tavara- raskaan liikenne/frontend/traffic/src/App.js	
+++ b/Tavara- raskaan liikenne/frontend/traffic/src/App.js	
@@ -1,12 +1,14 @@
 import React from 'react';
-import logo from './logo.svg';
-import Linechart from './components/Linechart'
+import Linechart from './components/Linechart';
+import CarsGraph from './components/CarsGraph';
 import './App.css';
-
+import 'bootstrap/dist/css/bootstrap.min.css';
+//<Linechart />
 function App() {
   return (
     <div className="App">
-      <Linechart />
+      
+      <CarsGraph />
     </div>
   );
 }
diff --git a/Tavara- raskaan liikenne/frontend/traffic/src/components/CarsGraph.js b/Tavara- raskaan liikenne/frontend/traffic/src/components/CarsGraph.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd77fecb6c9865912283024a94232bb21bb049f4
--- /dev/null
+++ b/Tavara- raskaan liikenne/frontend/traffic/src/components/CarsGraph.js	
@@ -0,0 +1,576 @@
+import React, { Component } from "react";
+import axios from "axios";
+import Chart from "react-apexcharts";
+import Form from "react-bootstrap/Form";
+import Col from "react-bootstrap/Col";
+import Button from "react-bootstrap/Button";
+import Row from "react-bootstrap/Row";
+
+var year = "";
+var fromDate;
+var toDate = "";
+var startDayNumber;
+var endDayNumber;
+
+var VehicleNumberDataObjectForOneDay;
+var AvgSpeedDataObjectForOneDay;
+var DataOjbectForMultipleDays;
+
+export class CarsGraph extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      options: {},
+      series: [],
+
+      options2: {},
+      series2: [],
+
+      year: "",
+      areaID: "",
+      lamID: "",
+      startDayNumber: "",
+      endDayNumber: "",
+      vehicleClass: '8',//8 means all classes
+
+      error: "",
+      message:"",
+      toggleDisabled:true,
+      isloaded: false,
+    };
+    this.yearHandler = this.yearHandler.bind(this);
+    this.lamIDHandler = this.lamIDHandler.bind(this);
+    this.areaIDHandler = this.areaIDHandler.bind(this);
+    this.startDayNumberHandler = this.startDayNumberHandler.bind(this);
+    this.endDayNumberHandler = this.endDayNumberHandler.bind(this);
+    this.vehicleClassHandler = this.vehicleClassHandler.bind(this);
+  }
+
+  getData() {
+    var year_ = this.state.year;
+    var areaID = this.state.areaID;
+    var lamID = this.state.lamID;
+    var startDayNumber_ = this.state.startDayNumber;
+    var endDayNumber_ = this.state.endDayNumber;
+    var vehicleClass = this.state.vehicleClass;
+
+    var url = `http://localhost:3030/api/vehicle/?year=${year_}&areaID=${areaID}&lamID=${lamID}&startDayNumber=${startDayNumber_}&endDayNumber=${endDayNumber_}`;//&vehicleClass=${vehicleClass}
+    axios
+      .get(url)
+      .then((res) => {
+        console.log(res.data);
+        console.log(res.status);
+        //if the user has put only one day
+        if (res.status === 200) {
+          
+            if(isNaN(endDayNumber)){
+                //getting the vehicle number in each our based on vehicle class from response of the request  
+                var vehicle_number = res.data.vehicle_number;
+                //filling the missing values of vehicle number to zero
+                let final_Vehicle_number = this.fillMissingValues(vehicle_number);
+                //console.log(final)
+                VehicleNumberDataObjectForOneDay = this.filterDataForOneDay(final_Vehicle_number);
+                //console.log(VehicleNumberDataObjectForOneDay);
+                
+                //getting the cars avarage speed based in each our based on car category
+                var avg_speed = res.data.avg_speed_km_h;
+                //filling the missing values of avarage speed to zero
+                let final_avg_speed = this.fillMissingValues(avg_speed);
+                AvgSpeedDataObjectForOneDay = this.filterDataForOneDay(final_avg_speed);
+                //getting the avarage speed of all cars in each hour
+                for(let x=0; x<24; x++){
+                    let count=0
+                    Object.keys(AvgSpeedDataObjectForOneDay).map(key=>{
+                        let value =  AvgSpeedDataObjectForOneDay[key];
+                        if(value[x] === undefined | value[x] ===0 | value[x] === NaN | value[x] === null){
+                            count+=1;
+                        }
+                    });
+                    let temp = (AvgSpeedDataObjectForOneDay['8'][x]/(7-count)).toFixed(1);
+                    AvgSpeedDataObjectForOneDay['8'][x] = parseFloat(temp);
+                }
+                console.log({AvgSpeedDataObjectForOneDay})
+
+                //using setDataForGraph function to set the filtered and sorted data as graph's data set
+                this.setDataForGraph(VehicleNumberDataObjectForOneDay,AvgSpeedDataObjectForOneDay);
+                this.setState({toggleDisabled: false});
+                
+                
+            
+            } 
+            //if user has a start date and end date (multiple days)
+            else{
+                console.log("time iterval!!!!")
+            }
+        
+
+        }
+      })
+      .catch((er) => {
+        console.log(er);
+      });
+  }
+
+  setDataForGraph = (Vnumber,Vspeed)=>{
+       //data for graph
+       var TIME=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23];
+       var VCLASS = this.state.vehicleClass;
+       //Setting the fetched data as graph's input data
+       this.setState({
+               //Data for vehcile number graph
+               options:{
+                   chart: {
+                       id: "basic-bar"
+                   },
+                   dataLabels: {
+                       enabled: false
+                   },
+                   xaxis: {
+                       categories: TIME,
+                       title:{
+                           text : "Hour"
+                       }
+                   },
+                   yaxis: {
+                    title: {
+                      text: 'Vehicle Number'
+                    }   
+                   },
+                   
+
+                   title: {
+                    text: 'Number of vehicles in each hour',
+                    align: 'center'
+                   },
+                   legend: {
+                    position: 'top',
+                    horizontalAlign: 'right',
+                    floating: true,
+                    offsetY: -25,
+                    offsetX: -5
+                  }
+                   
+               },
+               series:[{
+                   name: "Vehicle Number",
+                   data: Vnumber[VCLASS]
+               }],
+               //data for avarage speed garaph
+               options2:{
+                   chart: {
+                       id: "basic-bar"
+                   },
+                   dataLabels: {
+                    enabled: false
+                   },
+                   xaxis: {
+                       categories: TIME,
+                       title:{
+                        text : "Hour"
+                    }
+                   },
+                   yaxis: {
+                    title: {
+                      text: 'Avrage speed km/h'
+                    }
+                    
+                  },
+                  colors: ['#cc3b31'],
+
+                   title: {
+                    text: 'Avrage Speed in each hour',
+                    align: 'center'
+                   },
+                   legend: {
+                    position: 'top',
+                    horizontalAlign: 'right',
+                    floating: true,
+                    offsetY: -25,
+                    offsetX: -5
+                  }
+               },
+               series2:[{
+                   name: "Avarage Speed km/h",
+                   data: Vspeed[VCLASS]
+               }],
+               
+           });
+  }
+
+  filterVehicleNumberDataForMultipleDay= (input)=>{
+    var dataObj = {
+        1: [],
+        2: [],
+        3: [],
+        4: [],
+        5: [],
+        6: [],
+        7: [],
+        8: [],
+    };
+    
+    Object.keys(input).forEach((key) => {
+        let value = input[key];
+        let keyList = key
+          .toString()
+          .replace("[", "")
+          .replace("]", "")
+          .split(",");
+        let hour = parseInt(keyList[0]);
+        let categ = parseInt(keyList[1]);
+
+        for (let x = 1; x < 8; x++) {
+          if (categ === x) {
+            dataObj[x][hour] = value;
+          }
+        }
+        if (dataObj[8][hour]) {
+          dataObj[8][hour] += value;
+        } else {
+          dataObj[8][hour] = value;
+        }
+    });
+      //console.log({ dataObj });
+      return dataObj;
+  }
+
+
+//function for filling the missing values like vehicle category and its number
+fillMissingValues=(input)=>{
+    let final = {};
+    for (let i = 0; i <= 23; i++) {
+      for (let j = 1; j <= 7; j++) {
+        const key = `[${i},${j}]`;
+        final[key] = input[key];
+        if (input[key] === undefined) {
+          final[key] = 0;
+        }
+      }
+    }
+    return final;
+}
+
+
+  //function for filtering data from one day to one object based on each car category
+  filterDataForOneDay = (input)=>{
+    var dataObj = {
+        1: [],
+        2: [],
+        3: [],
+        4: [],
+        5: [],
+        6: [],
+        7: [],
+        8: [],
+      };
+    Object.keys(input).forEach((key) => {
+        let value = input[key];
+        let keyList = key
+          .toString()
+          .replace("[", "")
+          .replace("]", "")
+          .split(",");
+        let hour = parseInt(keyList[0]);
+        let categ = parseInt(keyList[1]);
+
+        for (let x = 1; x < 8; x++) {
+          if (categ === x) {
+            dataObj[x][hour] = value;
+          }
+        }
+        if (dataObj[8][hour]) {
+          dataObj[8][hour] += value;
+        } else {
+          dataObj[8][hour] = value;
+        }
+      });
+      //console.log({ dataObj });
+      return dataObj;
+  }
+
+
+//function for filling the missing values like vehicle category and its number
+  fillMissingValues=(input)=>{
+    let final = {};
+    for (let i = 0; i <= 23; i++) {
+      for (let j = 1; j <= 7; j++) {
+        const key = `[${i},${j}]`;
+        final[key] = input[key];
+        if (input[key] === undefined) {
+          final[key] = 0;
+        }
+      }
+    }
+    return final;
+  }
+
+  dateTodaynumber = (year, md) => {
+    var x = new Date(year, 0, 0);
+    x = x.getTime();
+
+    var d = md.split(".");
+    d = new Date(year, parseInt(d[0]) - 1, d[1]);
+    d = d.getTime();
+    var sec = d - x;
+    var secToDay = sec / 1000 / 60 / 60 / 24;
+    secToDay = Math.floor(secToDay);
+    return secToDay;
+  }
+
+  yearHandler(e) {
+    year = e.target.value;
+    this.setState({ year });
+  }
+  areaIDHandler(e) {
+    var areaID = e.target.value;
+    this.setState({ areaID });
+  }
+  lamIDHandler(e) {
+    var lamID = e.target.value;
+    this.setState({ lamID });
+  }
+  startDayNumberHandler(e) {
+    fromDate = e.target.value;
+    startDayNumber = this.dateTodaynumber(year, e.target.value);
+    this.setState({ startDayNumber });
+  }
+  endDayNumberHandler(e) {
+    toDate = e.target.value;
+    endDayNumber = this.dateTodaynumber(year, e.target.value);
+    this.setState({ endDayNumber });
+    
+  }
+  vehicleClassHandler(e) {
+    var vehicleClass = e.target.value;
+    this.setState({ vehicleClass },()=>{
+        //using setDataForGraph function to set the filtered and sorted data as graph's data set
+        this.setDataForGraph(VehicleNumberDataObjectForOneDay,AvgSpeedDataObjectForOneDay);
+    });
+
+
+
+  }
+
+  buttonHandler = () => {
+    //checking for all input if they are fed with the right data
+    var patt = /^(0[1-9]|1[0-2])\.([0-2][0-9]|3[0-1])$/;
+    var matchPattern = patt.test(fromDate);
+    //console.log(matchPattern)
+
+    if (!matchPattern) {
+      this.setState({ error: "Please insert a valid date mm.dd!" });
+    } else {
+      var matchPattern2 =true;
+      if (toDate.length === 0) {
+        this.setState({ error: "" });
+      } else {
+       matchPattern2 = patt.test(toDate);
+        if (!matchPattern2) this.setState({ error: "Please insert a valid date mm.dd!" });
+        else {
+          var dateCheck = endDayNumber - startDayNumber;
+          console.log(endDayNumber, startDayNumber, dateCheck);
+          if ((dateCheck === 0) | (dateCheck < 0)) {
+            this.setState({
+              error: "End date is smaller than the start date!",
+            });
+          } else this.setState({ error: "" });
+        }
+      }
+    }
+    var inputs = [
+      this.state.year,
+      this.state.areaID,
+      this.state.lamID,
+      this.state.vehicleClass,
+    ];
+    if (
+      (inputs[0] === "") |
+      (inputs[1] === "") |
+      (inputs[2] === "") |
+      !matchPattern |
+      !matchPattern2
+      
+    ) {
+        if(this.state.error !==""){
+        this.setState({error:
+            "Please make sure that you have shosen right value for Year, Area, LAM point ID fields!",
+        });
+        }
+        
+    } else {
+    this.setState({message : "Please wait while the data is beeing processed! Depending on your inputs This might take a while!"})
+      this.getData();
+      console.log("Sending request to server!")
+      //console.log(this.state)
+    }
+  };
+
+  render() {
+       
+
+    return (
+      <div className="Cars_graph">
+        <div style={{ color: "red" }}>{this.state.error}</div>
+        <Form>
+          <Form.Row>
+            <Form.Label
+              className="my-1 mr-2"
+              htmlFor="inlineFormCustomSelectPref"
+            >
+              Year
+            </Form.Label>
+            <Form.Control
+              as="select"
+              className="my-1 mr-sm-2"
+              id="year"
+              custom
+              onChange={this.yearHandler}
+            >
+              <option value="0">Choose...</option>
+              <option value="2020">2020</option>
+              <option value="2019">2019</option>
+              <option value="2018">2018</option>
+              <option value="2017">2017</option>
+              <option value="2016">2016</option>
+              <option value="2015">2015</option>
+              <option value="2014">2014</option>
+              <option value="2013">2013</option>
+              <option value="2012">2012</option>
+              <option value="2011">2011</option>
+              <option value="2010">2010</option>
+              <option value="2009">2009</option>
+            </Form.Control>
+
+            <Form.Label
+              className="my-1 mr-2"
+              htmlFor="inlineFormCustomSelectPref"
+            >
+              Month and day (mm.dd)
+            </Form.Label>
+            <Row>
+              <Col>
+                <Form.Control
+                  id="dateFrom"
+                  placeholder="From"
+                  onChange={this.startDayNumberHandler}
+                  pattern="(0[1-9]|1[0-2])\.([0-2]d|3[0-1])"
+                  title="the right format is: mm.dd "
+                />
+              </Col>
+              <Col>
+                <Form.Control
+                  id="dateTo"
+                  placeholder="To"
+                  onChange={this.endDayNumberHandler}
+                />
+              </Col>
+            </Row>
+
+
+            <Form.Label
+              className="my-1 mr-2"
+              htmlFor="inlineFormCustomSelectPref"
+            >
+              Choose an Area 
+            </Form.Label>
+            <Form.Control
+              as="select"
+              className="my-1 mr-sm-2"
+              id="areaID"
+              custom
+              onChange={this.areaIDHandler}
+            >
+              <option value="">Choose...</option>
+              <option value="01">Uusimaa, Häme</option>
+              <option value="02">Varsinais-Suomi, Satakunta</option>
+              <option value="03">Kaakkois-Suomi</option>
+              <option value="04">Pirkanmaa</option>
+              <option value="08">
+                Pohjois-Savo, Etelä-Savo, Pohjois-Karjala)
+              </option>
+              <option value="09">Keski-Suomi</option>
+              <option value="10">Etelä-Pohjanmaa, Pohjanmaa</option>
+              <option value="12">Pohjois-Pohjanmaa, Kainuu</option>
+              <option value="14">Lappi</option>
+            </Form.Control>
+
+            <Form.Label
+              className="my-1 mr-2"
+              htmlFor="inlineFormCustomSelectPref"
+            >
+              LAM point ID
+            </Form.Label>
+            <Form.Control
+              as="select"
+              className="my-1 mr-sm-2"
+              id="lamID"
+              custom
+              onChange={this.lamIDHandler}
+            >
+              <option value="">Choose...</option>
+              <option value="101">101</option>
+            </Form.Control>
+
+
+            <Button
+              type="button"
+              className="my-1"
+              id="drawGraph"
+              onClick={this.buttonHandler}
+            >
+              Draw graph
+            </Button>
+          </Form.Row>
+        </Form>
+        <div>
+            <br/>
+            <div style={{ color: "blue" }}>
+                {this.state.message}
+            </div><br/>
+
+            <Form.Label
+            className="my-1 mr-2"
+            htmlFor="inlineFormCustomSelectPref"
+            >
+            vehicle Category
+            </Form.Label>
+            <Form.Control
+            as="select"
+            className="my-1 mr-sm-2"
+            id="vehicleClass"
+            custom
+            onChange={this.vehicleClassHandler} 
+            disabled={this.state.toggleDisabled}
+            >
+            <option value="8">All</option>
+            <option value="1">1 HA-PA (henkilö- tai pakettiauto)</option>
+            <option value="2">2 KAIP (kuorma-auto ilman perävaunua)</option>
+            <option value="3">3 Linja-autot</option>
+            <option value="4">4 KAPP (kuorma-auto ja puoliperävaunu)</option>
+            <option value="5">5 KATP (kuorma-auto ja täysperävaunu)</option>
+            <option value="6">6 HA + PK (henkilöauto ja peräkärry)</option>
+            <option value="7">7 HA + AV (henkilöauto ja asuntovaunu)</option>
+            </Form.Control>
+
+
+            <Chart
+            options={this.state.options}
+            series={this.state.series}
+            type="bar"
+            width="500"
+            />
+            <Chart
+            options={this.state.options2}
+            series={this.state.series2}
+            type="bar"
+            width="500"
+            />
+            
+        </div>
+        
+      </div>
+    );
+  }
+}
+
+export default CarsGraph;
diff --git a/Tavara- raskaan liikenne/frontend/traffic/src/components/Linechart.js b/Tavara- raskaan liikenne/frontend/traffic/src/components/Linechart.js
index 15d14a76885a494c1424c60543de752b85fcc23c..e2682c5e058d4ebadf256fa6fb1e5af7fb284749 100644
--- a/Tavara- raskaan liikenne/frontend/traffic/src/components/Linechart.js	
+++ b/Tavara- raskaan liikenne/frontend/traffic/src/components/Linechart.js	
@@ -2,7 +2,6 @@ import React, { Component } from 'react'
 
 import axios from 'axios';  
 
-import { Line } from 'react-chartjs-2';  
 import Chart from "react-apexcharts";
 
 export class Linechart extends Component {  
diff --git a/Tavara- raskaan liikenne/python/.ipynb_checkpoints/LAM_rawData_analysis-checkpoint.ipynb b/Tavara- raskaan liikenne/python/.ipynb_checkpoints/LAM_rawData_analysis-checkpoint.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..93ac740cd7155e39cd52be5d3dacb9d1ab757594
--- /dev/null
+++ b/Tavara- raskaan liikenne/python/.ipynb_checkpoints/LAM_rawData_analysis-checkpoint.ipynb	
@@ -0,0 +1,582 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "       point_d  Year  day_number  hour  minute  second  100th_of_a_second  \\\n",
+      "28         101    17          32     0       3      39                 84   \n",
+      "79         101    17          32     0      10      47                 86   \n",
+      "97         101    17          32     0      13      52                 99   \n",
+      "124        101    17          32     0      18      53                 89   \n",
+      "140        101    17          32     0      23      44                 99   \n",
+      "...        ...   ...         ...   ...     ...     ...                ...   \n",
+      "71536      101    17          32    23      24      41                 99   \n",
+      "71554      101    17          32    23      27      38                 13   \n",
+      "71621      101    17          32    23      37      30                 71   \n",
+      "71729      101    17          32    23      51      39                 99   \n",
+      "71745      101    17          32    23      53      43                 99   \n",
+      "\n",
+      "       length_m  lane  direction  vehicle_class  speed_km/h  \\\n",
+      "28         14.0     5          2              4          80   \n",
+      "79         13.2     2          1              4          80   \n",
+      "97         14.4     5          2              4          84   \n",
+      "124        13.8     5          2              4          76   \n",
+      "140        15.6     5          2              4          87   \n",
+      "...         ...   ...        ...            ...         ...   \n",
+      "71536      13.4     1          1              4          76   \n",
+      "71554      14.0     5          2              4          86   \n",
+      "71621      16.6     5          2              4          78   \n",
+      "71729      14.2     5          2              4          82   \n",
+      "71745      15.4     5          2              4          89   \n",
+      "\n",
+      "       faulty_0=valid_1=incorrect  total_time  interval  jonoalku  \n",
+      "28                              0       21984      4125         0  \n",
+      "79                              0       64786      8189         0  \n",
+      "97                              0       83299      1684         0  \n",
+      "124                             0      113389      2774         0  \n",
+      "140                             0      142499      3643         0  \n",
+      "...                           ...         ...       ...       ...  \n",
+      "71536                           0     8428199      2702         0  \n",
+      "71554                           0     8445813      4749         0  \n",
+      "71621                           0     8505071      5957         0  \n",
+      "71729                           0     8589999      3669         0  \n",
+      "71745                           0     8602399      2756         0  \n",
+      "\n",
+      "[829 rows x 16 columns]\n",
+      "      vehicle_class\n",
+      "hour               \n",
+      "0                 7\n",
+      "1                 7\n",
+      "2                 2\n",
+      "3                 5\n",
+      "4                 8\n",
+      "5                13\n",
+      "6                38\n",
+      "7                33\n",
+      "8                36\n",
+      "9                75\n",
+      "10               31\n",
+      "11               26\n",
+      "12               36\n",
+      "13               75\n",
+      "14               73\n",
+      "15               76\n",
+      "16               54\n",
+      "17               40\n",
+      "18               51\n",
+      "19               34\n",
+      "20               25\n",
+      "21               69\n",
+      "22                9\n",
+      "23                6\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "import pandas as pd\n",
+    "import numpy as np\n",
+    "\n",
+    "import matplotlib.pyplot as plt\n",
+    "\n",
+    "year = 2020\n",
+    "areaID = \"01\"\n",
+    "lamID = 101\n",
+    "\n",
+    "\n",
+    "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "names = [\"point_d\", \"Year\", \"day_number\", \"hour\", \"minute\", \"second\", \"100th_of_a_second\", \"length_m\",\"lane\", \"direction\", \"vehicle_class\", \"speed_km/h\", \"faulty_0=valid_1=incorrect\", \"total_time\", \"interval\",\"jonoalku\"]\n",
+    "\n",
+    "\n",
+    "df = pd.read_csv(\"https://aineistot.vayla.fi/lam/rawdata/2017/01/lamraw_101_17_32.csv\", names=names, sep = \";\")\n",
+    "\n",
+    "#print(df.head())\n",
+    "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "\n",
+    "df1 = df[df[\"vehicle_class\"]==4]\n",
+    "print(df1)\n",
+    "\n",
+    "df2 = df1.groupby(\"hour\")[\"vehicle_class\"].count()\n",
+    "\n",
+    "df3= pd.DataFrame(df2)\n",
+    "print(df3)\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "\n",
+    "df3.plot()\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "hour  vehicle_class\n",
+      "0     1                178\n",
+      "      2                  4\n",
+      "      3                 26\n",
+      "      4                  3\n",
+      "      5                  0\n",
+      "      6                  0\n",
+      "      7                  0\n",
+      "1     1                130\n",
+      "      2                  9\n",
+      "      3                 17\n",
+      "      4                  7\n",
+      "      5                  0\n",
+      "      6                  0\n",
+      "      7                  0\n",
+      "2     1                 73\n",
+      "      2                  8\n",
+      "      3                  2\n",
+      "      4                  0\n",
+      "      5                  0\n",
+      "      6                  0\n",
+      "      7                  0\n",
+      "3     1                 53\n",
+      "      2                  3\n",
+      "      3                  0\n",
+      "      4                  4\n",
+      "dtype: int64\n",
+      "{\"[0,1]\":178,\"[0,2]\":4,\"[0,3]\":26,\"[0,4]\":3,\"[0,5]\":0,\"[0,6]\":0,\"[0,7]\":0,\"[1,1]\":130,\"[1,2]\":9,\"[1,3]\":17,\"[1,4]\":7,\"[1,5]\":0,\"[1,6]\":0,\"[1,7]\":0,\"[2,1]\":73,\"[2,2]\":8,\"[2,3]\":2,\"[2,4]\":0,\"[2,5]\":0,\"[2,6]\":0,\"[2,7]\":0,\"[3,1]\":53,\"[3,2]\":3,\"[3,3]\":0,\"[3,4]\":4,\"[3,5]\":0,\"[3,6]\":1,\"[3,7]\":0,\"[4,1]\":44,\"[4,2]\":3,\"[4,3]\":1,\"[4,4]\":0,\"[4,5]\":0,\"[4,6]\":0,\"[4,7]\":0,\"[5,1]\":118,\"[5,2]\":5,\"[5,3]\":1,\"[5,4]\":1,\"[5,5]\":2,\"[5,6]\":0,\"[5,7]\":0,\"[6,1]\":347,\"[6,2]\":8,\"[6,3]\":5,\"[6,4]\":20,\"[6,5]\":4,\"[6,6]\":2,\"[6,7]\":1,\"[7,1]\":389,\"[7,2]\":4,\"[7,3]\":8,\"[7,4]\":60,\"[7,5]\":6,\"[7,6]\":3,\"[7,7]\":1,\"[8,1]\":526,\"[8,2]\":12,\"[8,3]\":5,\"[8,4]\":44,\"[8,5]\":8,\"[8,6]\":0,\"[8,7]\":2,\"[9,1]\":978,\"[9,2]\":9,\"[9,3]\":4,\"[9,4]\":28,\"[9,5]\":5,\"[9,6]\":5,\"[9,7]\":1,\"[10,1]\":1602,\"[10,2]\":6,\"[10,3]\":4,\"[10,4]\":8,\"[10,5]\":2,\"[10,6]\":6,\"[10,7]\":2,\"[11,1]\":2039,\"[11,2]\":13,\"[11,3]\":3,\"[11,4]\":18,\"[11,5]\":5,\"[11,6]\":10,\"[11,7]\":0,\"[12,1]\":2493,\"[12,2]\":11,\"[12,3]\":5,\"[12,4]\":11,\"[12,5]\":4,\"[12,6]\":8,\"[12,7]\":2,\"[13,1]\":2589,\"[13,2]\":8,\"[13,3]\":4,\"[13,4]\":23,\"[13,5]\":7,\"[13,6]\":6,\"[13,7]\":0,\"[14,1]\":2721,\"[14,2]\":8,\"[14,3]\":7,\"[14,4]\":21,\"[14,5]\":5,\"[14,6]\":10,\"[14,7]\":0,\"[15,1]\":2680,\"[15,2]\":7,\"[15,3]\":5,\"[15,4]\":15,\"[15,5]\":2,\"[15,6]\":9,\"[15,7]\":3,\"[16,1]\":2462,\"[16,2]\":5,\"[16,3]\":3,\"[16,4]\":4,\"[16,5]\":2,\"[16,6]\":11,\"[16,7]\":0,\"[17,1]\":2259,\"[17,2]\":10,\"[17,3]\":6,\"[17,4]\":2,\"[17,5]\":1,\"[17,6]\":10,\"[17,7]\":2,\"[18,1]\":1677,\"[18,2]\":7,\"[18,3]\":6,\"[18,4]\":2,\"[18,5]\":1,\"[18,6]\":6,\"[18,7]\":0,\"[19,1]\":1177,\"[19,2]\":7,\"[19,3]\":3,\"[19,4]\":2,\"[19,5]\":1,\"[19,6]\":5,\"[19,7]\":0,\"[20,1]\":982,\"[20,2]\":6,\"[20,3]\":9,\"[20,4]\":2,\"[20,5]\":2,\"[20,6]\":3,\"[20,7]\":0,\"[21,1]\":720,\"[21,2]\":3,\"[21,3]\":6,\"[21,4]\":3,\"[21,5]\":0,\"[21,6]\":1,\"[21,7]\":0,\"[22,1]\":446,\"[22,2]\":0,\"[22,3]\":5,\"[22,4]\":4,\"[22,5]\":1,\"[22,6]\":1,\"[22,7]\":0,\"[23,1]\":338,\"[23,2]\":3,\"[23,3]\":12,\"[23,4]\":11,\"[23,5]\":1,\"[23,6]\":3,\"[23,7]\":0}\n",
+      "11.04.2020\n"
+     ]
+    }
+   ],
+   "source": [
+    "#%%time\n",
+    "\n",
+    "import datetime\n",
+    "\n",
+    "year = \"2020\"\n",
+    "areaID = \"01\"\n",
+    "lamID = \"101\"\n",
+    "shortYear = year[-2:]\n",
+    "startDayNumber = \"101\"\n",
+    "endDayNumber = \"\"\n",
+    "vehicle_class =[4]\n",
+    "\n",
+    "output = pd.DataFrame()\n",
+    "\n",
+    "\n",
+    "\n",
+    "\n",
+    "\n",
+    "if(len(endDayNumber)!=0):\n",
+    "    start = int(startDayNumber)\n",
+    "    end = int(endDayNumber)\n",
+    "    duration = end - start\n",
+    "    print(duration)\n",
+    "    \n",
+    "    \n",
+    "    \n",
+    "    vehicleTotalNumberInOneDay = []\n",
+    "    date = []\n",
+    "    \n",
+    "    for x in range(duration):\n",
+    "        url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{start}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, start=start)\n",
+    "        print(url)\n",
+    "        \n",
+    "        csv = pd.read_csv(url, names=names, sep = \";\")\n",
+    "        df = csv[[\"vehicle_class\"]==vehicle_class[0]]\n",
+    "        vehicleTotalNumberInOneDay.append(df[\"vehicle_class\"].count())\n",
+    "        \n",
+    "        print(vehicleTotalNumberInOneDay)\n",
+    "        \n",
+    "        dt = datetime.datetime(int(year),1,1)\n",
+    "        dtdelta = datetime.timedelta(days=start)\n",
+    "        dt = dt + dtdelta\n",
+    "        dt=dt.strftime('%d.%m.%Y')\n",
+    "        date.append(dt)\n",
+    "        print(date)\n",
+    "        \n",
+    "        start +=1\n",
+    "\n",
+    "\n",
+    "    output[\"vehicle_number\"] = vehicleTotalNumberInOneDay\n",
+    "    output[\"time\"] = date\n",
+    "    output.set_index(\"time\")\n",
+    "\n",
+    "else:\n",
+    "    url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{startDayNumber}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, startDayNumber=startDayNumber)\n",
+    "    \n",
+    "    allData = pd.read_csv(url, names=names, sep = \";\")\n",
+    "    #df = allData[allData[\"vehicle_class\"]==vehicle_class[0]]\n",
+    "    \n",
+    "    df = allData.groupby([\"hour\",\"vehicle_class\"])[\"vehicle_class\"].count().unstack(fill_value=0).stack()\n",
+    "    print(df.head(25))\n",
+    "    \n",
+    "    outjson = df.to_json()\n",
+    "    print(outjson)\n",
+    "\n",
+    "    #df1 = df.groupby(df[\"hour\"])[\"vehicle_class\"].count()\n",
+    "\n",
+    "    #output[\"vehicle_number\"]= df1[\"vehicle_class\"]\n",
+    "    #output[\"time\"] = df2.index.values\n",
+    "   \n",
+    "    #print(output)\n",
+    "    # getting date from day number\n",
+    "    dt = datetime.datetime(int(year),1,1)\n",
+    "    dtdelta = datetime.timedelta(days=int(startDayNumber))\n",
+    "    dt = dt + dtdelta\n",
+    "    dt=dt.strftime('%d.%m.%Y')\n",
+    "    print(dt)\n",
+    "    \n",
+    "    \n",
+    "\n",
+    "\n",
+    "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "\n",
+    "#output.plot()\n",
+    "#plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "in else!\n",
+      "11.04.2020\n",
+      "                              vehicle_number  avg_speed_km_h\n",
+      "hour vehicle_class direction                                \n",
+      "0    1             1                     107       84.373832\n",
+      "                   2                      71       83.943662\n",
+      "     2             1                       2       85.000000\n",
+      "                   2                       2       81.500000\n",
+      "     3             1                      12       77.833333\n",
+      "                   2                      14       79.642857\n",
+      "     4             1                       3       82.000000\n",
+      "1    1             1                      76       88.026316\n",
+      "                   2                      54       85.000000\n",
+      "     2             1                       5       78.200000\n",
+      "                   2                       4       78.000000\n",
+      "     3             1                      11       78.000000\n",
+      "                   2                       6       78.000000\n",
+      "     4             1                       4       76.750000\n",
+      "                   2                       3       81.666667\n",
+      "2    1             1                      31       82.129032\n",
+      "                   2                      42       86.642857\n",
+      "     2             1                       5       70.800000\n",
+      "                   2                       3       76.000000\n",
+      "     3             1                       2       71.500000\n",
+      "3    1             1                      32       77.343750\n",
+      "                   2                      21       80.238095\n",
+      "     2             1                       2       21.500000\n",
+      "                   2                       1       82.000000\n",
+      "     4             1                       2       26.500000\n",
+      "{\"vehicle_number\":{\"[0,1,1]\":107,\"[0,1,2]\":71,\"[0,2,1]\":2,\"[0,2,2]\":2,\"[0,3,1]\":12,\"[0,3,2]\":14,\"[0,4,1]\":3,\"[1,1,1]\":76,\"[1,1,2]\":54,\"[1,2,1]\":5,\"[1,2,2]\":4,\"[1,3,1]\":11,\"[1,3,2]\":6,\"[1,4,1]\":4,\"[1,4,2]\":3,\"[2,1,1]\":31,\"[2,1,2]\":42,\"[2,2,1]\":5,\"[2,2,2]\":3,\"[2,3,1]\":2,\"[3,1,1]\":32,\"[3,1,2]\":21,\"[3,2,1]\":2,\"[3,2,2]\":1,\"[3,4,1]\":2,\"[3,4,2]\":2,\"[3,6,1]\":1,\"[4,1,1]\":21,\"[4,1,2]\":23,\"[4,2,1]\":2,\"[4,2,2]\":1,\"[4,3,2]\":1,\"[5,1,1]\":49,\"[5,1,2]\":69,\"[5,2,1]\":3,\"[5,2,2]\":2,\"[5,3,2]\":1,\"[5,4,2]\":1,\"[5,5,2]\":2,\"[6,1,1]\":90,\"[6,1,2]\":257,\"[6,2,1]\":5,\"[6,2,2]\":3,\"[6,3,1]\":1,\"[6,3,2]\":4,\"[6,4,1]\":1,\"[6,4,2]\":19,\"[6,5,2]\":4,\"[6,6,2]\":2,\"[6,7,1]\":1,\"[7,1,1]\":152,\"[7,1,2]\":237,\"[7,2,1]\":1,\"[7,2,2]\":3,\"[7,3,1]\":2,\"[7,3,2]\":6,\"[7,4,1]\":2,\"[7,4,2]\":58,\"[7,5,2]\":6,\"[7,6,2]\":3,\"[7,7,2]\":1,\"[8,1,1]\":250,\"[8,1,2]\":276,\"[8,2,1]\":3,\"[8,2,2]\":9,\"[8,3,1]\":2,\"[8,3,2]\":3,\"[8,4,1]\":8,\"[8,4,2]\":36,\"[8,5,2]\":8,\"[8,7,2]\":2,\"[9,1,1]\":559,\"[9,1,2]\":419,\"[9,2,1]\":4,\"[9,2,2]\":5,\"[9,3,1]\":3,\"[9,3,2]\":1,\"[9,4,1]\":16,\"[9,4,2]\":12,\"[9,5,1]\":3,\"[9,5,2]\":2,\"[9,6,1]\":1,\"[9,6,2]\":4,\"[9,7,1]\":1,\"[10,1,1]\":934,\"[10,1,2]\":668,\"[10,2,1]\":4,\"[10,2,2]\":2,\"[10,3,1]\":1,\"[10,3,2]\":3,\"[10,4,1]\":3,\"[10,4,2]\":5,\"[10,5,1]\":2,\"[10,6,1]\":2,\"[10,6,2]\":4,\"[10,7,1]\":1,\"[10,7,2]\":1,\"[11,1,1]\":1151,\"[11,1,2]\":888,\"[11,2,1]\":5,\"[11,2,2]\":8,\"[11,3,1]\":2,\"[11,3,2]\":1,\"[11,4,1]\":2,\"[11,4,2]\":16,\"[11,5,2]\":5,\"[11,6,1]\":2,\"[11,6,2]\":8,\"[12,1,1]\":1418,\"[12,1,2]\":1075,\"[12,2,1]\":6,\"[12,2,2]\":5,\"[12,3,1]\":2,\"[12,3,2]\":3,\"[12,4,2]\":11,\"[12,5,1]\":1,\"[12,5,2]\":3,\"[12,6,1]\":4,\"[12,6,2]\":4,\"[12,7,2]\":2,\"[13,1,1]\":1443,\"[13,1,2]\":1146,\"[13,2,1]\":5,\"[13,2,2]\":3,\"[13,3,1]\":2,\"[13,3,2]\":2,\"[13,4,1]\":1,\"[13,4,2]\":22,\"[13,5,2]\":7,\"[13,6,1]\":2,\"[13,6,2]\":4,\"[14,1,1]\":1423,\"[14,1,2]\":1298,\"[14,2,1]\":2,\"[14,2,2]\":6,\"[14,3,1]\":1,\"[14,3,2]\":6,\"[14,4,2]\":21,\"[14,5,1]\":2,\"[14,5,2]\":3,\"[14,6,1]\":5,\"[14,6,2]\":5,\"[15,1,1]\":1376,\"[15,1,2]\":1304,\"[15,2,1]\":2,\"[15,2,2]\":5,\"[15,3,1]\":3,\"[15,3,2]\":2,\"[15,4,1]\":9,\"[15,4,2]\":6,\"[15,5,2]\":2,\"[15,6,1]\":7,\"[15,6,2]\":2,\"[15,7,1]\":2,\"[15,7,2]\":1,\"[16,1,1]\":1217,\"[16,1,2]\":1245,\"[16,2,1]\":1,\"[16,2,2]\":4,\"[16,3,1]\":1,\"[16,3,2]\":2,\"[16,4,1]\":4,\"[16,5,1]\":2,\"[16,6,1]\":6,\"[16,6,2]\":5,\"[17,1,1]\":1067,\"[17,1,2]\":1192,\"[17,2,1]\":2,\"[17,2,2]\":8,\"[17,3,1]\":4,\"[17,3,2]\":2,\"[17,4,2]\":2,\"[17,5,2]\":1,\"[17,6,1]\":3,\"[17,6,2]\":7,\"[17,7,2]\":2,\"[18,1,1]\":766,\"[18,1,2]\":911,\"[18,2,1]\":2,\"[18,2,2]\":5,\"[18,3,1]\":3,\"[18,3,2]\":3,\"[18,4,2]\":2,\"[18,5,2]\":1,\"[18,6,1]\":6,\"[19,1,1]\":491,\"[19,1,2]\":686,\"[19,2,1]\":2,\"[19,2,2]\":5,\"[19,3,1]\":2,\"[19,3,2]\":1,\"[19,4,2]\":2,\"[19,5,2]\":1,\"[19,6,1]\":3,\"[19,6,2]\":2,\"[20,1,1]\":459,\"[20,1,2]\":523,\"[20,2,1]\":4,\"[20,2,2]\":2,\"[20,3,2]\":9,\"[20,4,2]\":2,\"[20,5,1]\":1,\"[20,5,2]\":1,\"[20,6,1]\":1,\"[20,6,2]\":2,\"[21,1,1]\":326,\"[21,1,2]\":394,\"[21,2,1]\":2,\"[21,2,2]\":1,\"[21,3,1]\":4,\"[21,3,2]\":2,\"[21,4,2]\":3,\"[21,6,1]\":1,\"[22,1,1]\":216,\"[22,1,2]\":230,\"[22,3,1]\":3,\"[22,3,2]\":2,\"[22,4,1]\":2,\"[22,4,2]\":2,\"[22,5,2]\":1,\"[22,6,2]\":1,\"[23,1,1]\":180,\"[23,1,2]\":158,\"[23,2,1]\":3,\"[23,3,1]\":4,\"[23,3,2]\":8,\"[23,4,1]\":11,\"[23,5,2]\":1,\"[23,6,1]\":1,\"[23,6,2]\":2},\"avg_speed_km_h\":{\"[0,1,1]\":84.3738317757,\"[0,1,2]\":83.9436619718,\"[0,2,1]\":85.0,\"[0,2,2]\":81.5,\"[0,3,1]\":77.8333333333,\"[0,3,2]\":79.6428571429,\"[0,4,1]\":82.0,\"[1,1,1]\":88.0263157895,\"[1,1,2]\":85.0,\"[1,2,1]\":78.2,\"[1,2,2]\":78.0,\"[1,3,1]\":78.0,\"[1,3,2]\":78.0,\"[1,4,1]\":76.75,\"[1,4,2]\":81.6666666667,\"[2,1,1]\":82.1290322581,\"[2,1,2]\":86.6428571429,\"[2,2,1]\":70.8,\"[2,2,2]\":76.0,\"[2,3,1]\":71.5,\"[3,1,1]\":77.34375,\"[3,1,2]\":80.2380952381,\"[3,2,1]\":21.5,\"[3,2,2]\":82.0,\"[3,4,1]\":26.5,\"[3,4,2]\":61.0,\"[3,6,1]\":18.0,\"[4,1,1]\":82.9523809524,\"[4,1,2]\":85.0869565217,\"[4,2,1]\":75.5,\"[4,2,2]\":84.0,\"[4,3,2]\":75.0,\"[5,1,1]\":84.9387755102,\"[5,1,2]\":84.9130434783,\"[5,2,1]\":86.3333333333,\"[5,2,2]\":78.0,\"[5,3,2]\":82.0,\"[5,4,2]\":78.0,\"[5,5,2]\":81.0,\"[6,1,1]\":84.5666666667,\"[6,1,2]\":87.5447470817,\"[6,2,1]\":81.8,\"[6,2,2]\":80.3333333333,\"[6,3,1]\":72.0,\"[6,3,2]\":77.25,\"[6,4,1]\":89.0,\"[6,4,2]\":79.6842105263,\"[6,5,2]\":77.25,\"[6,6,2]\":77.0,\"[6,7,1]\":22.0,\"[7,1,1]\":85.5328947368,\"[7,1,2]\":86.4599156118,\"[7,2,1]\":92.0,\"[7,2,2]\":82.3333333333,\"[7,3,1]\":77.5,\"[7,3,2]\":71.0,\"[7,4,1]\":77.0,\"[7,4,2]\":80.1206896552,\"[7,5,2]\":80.8333333333,\"[7,6,2]\":66.0,\"[7,7,2]\":78.0,\"[8,1,1]\":84.844,\"[8,1,2]\":84.0217391304,\"[8,2,1]\":79.0,\"[8,2,2]\":86.1111111111,\"[8,3,1]\":77.0,\"[8,3,2]\":79.6666666667,\"[8,4,1]\":77.125,\"[8,4,2]\":79.8888888889,\"[8,5,2]\":80.125,\"[8,7,2]\":67.0,\"[9,1,1]\":83.1162790698,\"[9,1,2]\":82.2076372315,\"[9,2,1]\":66.5,\"[9,2,2]\":85.4,\"[9,3,1]\":77.6666666667,\"[9,3,2]\":84.0,\"[9,4,1]\":80.5,\"[9,4,2]\":81.75,\"[9,5,1]\":78.6666666667,\"[9,5,2]\":75.0,\"[9,6,1]\":82.0,\"[9,6,2]\":81.25,\"[9,7,1]\":81.0,\"[10,1,1]\":81.9068522484,\"[10,1,2]\":82.6526946108,\"[10,2,1]\":60.25,\"[10,2,2]\":74.5,\"[10,3,1]\":78.0,\"[10,3,2]\":84.3333333333,\"[10,4,1]\":75.6666666667,\"[10,4,2]\":76.4,\"[10,5,1]\":78.5,\"[10,6,1]\":86.5,\"[10,6,2]\":68.5,\"[10,7,1]\":87.0,\"[10,7,2]\":96.0,\"[11,1,1]\":82.2076455256,\"[11,1,2]\":82.6497747748,\"[11,2,1]\":72.2,\"[11,2,2]\":83.5,\"[11,3,1]\":79.5,\"[11,3,2]\":83.0,\"[11,4,1]\":81.0,\"[11,4,2]\":76.75,\"[11,5,2]\":81.4,\"[11,6,1]\":81.0,\"[11,6,2]\":82.0,\"[12,1,1]\":81.9407616361,\"[12,1,2]\":82.5348837209,\"[12,2,1]\":81.8333333333,\"[12,2,2]\":83.0,\"[12,3,1]\":79.5,\"[12,3,2]\":80.0,\"[12,4,2]\":77.6363636364,\"[12,5,1]\":55.0,\"[12,5,2]\":86.6666666667,\"[12,6,1]\":78.5,\"[12,6,2]\":80.5,\"[12,7,2]\":71.5,\"[13,1,1]\":82.2134442134,\"[13,1,2]\":81.9363001745,\"[13,2,1]\":67.6,\"[13,2,2]\":87.3333333333,\"[13,3,1]\":76.5,\"[13,3,2]\":47.5,\"[13,4,1]\":80.0,\"[13,4,2]\":74.2272727273,\"[13,5,2]\":78.8571428571,\"[13,6,1]\":75.5,\"[13,6,2]\":80.25,\"[14,1,1]\":83.1546029515,\"[14,1,2]\":81.8998459168,\"[14,2,1]\":76.5,\"[14,2,2]\":66.5,\"[14,3,1]\":80.0,\"[14,3,2]\":68.6666666667,\"[14,4,2]\":79.1904761905,\"[14,5,1]\":84.5,\"[14,5,2]\":76.0,\"[14,6,1]\":77.8,\"[14,6,2]\":80.0,\"[15,1,1]\":83.207122093,\"[15,1,2]\":81.25,\"[15,2,1]\":76.5,\"[15,2,2]\":70.2,\"[15,3,1]\":81.3333333333,\"[15,3,2]\":64.5,\"[15,4,1]\":78.6666666667,\"[15,4,2]\":79.3333333333,\"[15,5,2]\":90.5,\"[15,6,1]\":80.8571428571,\"[15,6,2]\":82.0,\"[15,7,1]\":87.0,\"[15,7,2]\":79.0,\"[16,1,1]\":83.3845521775,\"[16,1,2]\":81.3100401606,\"[16,2,1]\":77.0,\"[16,2,2]\":81.0,\"[16,3,1]\":79.0,\"[16,3,2]\":76.5,\"[16,4,1]\":76.5,\"[16,5,1]\":83.0,\"[16,6,1]\":66.1666666667,\"[16,6,2]\":81.2,\"[17,1,1]\":82.9896907216,\"[17,1,2]\":82.1736577181,\"[17,2,1]\":45.5,\"[17,2,2]\":90.25,\"[17,3,1]\":65.25,\"[17,3,2]\":72.5,\"[17,4,2]\":73.0,\"[17,5,2]\":83.0,\"[17,6,1]\":80.0,\"[17,6,2]\":75.2857142857,\"[17,7,2]\":83.5,\"[18,1,1]\":82.911227154,\"[18,1,2]\":81.2294182217,\"[18,2,1]\":82.5,\"[18,2,2]\":89.2,\"[18,3,1]\":78.6666666667,\"[18,3,2]\":69.0,\"[18,4,2]\":78.0,\"[18,5,2]\":83.0,\"[18,6,1]\":77.8333333333,\"[19,1,1]\":83.6639511202,\"[19,1,2]\":82.1545189504,\"[19,2,1]\":51.5,\"[19,2,2]\":86.0,\"[19,3,1]\":68.0,\"[19,3,2]\":71.0,\"[19,4,2]\":77.5,\"[19,5,2]\":63.0,\"[19,6,1]\":81.3333333333,\"[19,6,2]\":80.5,\"[20,1,1]\":83.3093681917,\"[20,1,2]\":82.4531548757,\"[20,2,1]\":77.0,\"[20,2,2]\":84.0,\"[20,3,2]\":64.2222222222,\"[20,4,2]\":76.0,\"[20,5,1]\":46.0,\"[20,5,2]\":79.0,\"[20,6,1]\":75.0,\"[20,6,2]\":89.5,\"[21,1,1]\":83.1656441718,\"[21,1,2]\":82.0482233503,\"[21,2,1]\":79.0,\"[21,2,2]\":40.0,\"[21,3,1]\":69.75,\"[21,3,2]\":81.0,\"[21,4,2]\":85.6666666667,\"[21,6,1]\":82.0,\"[22,1,1]\":81.837962963,\"[22,1,2]\":84.0608695652,\"[22,3,1]\":73.3333333333,\"[22,3,2]\":76.5,\"[22,4,1]\":82.5,\"[22,4,2]\":75.5,\"[22,5,2]\":75.0,\"[22,6,2]\":69.0,\"[23,1,1]\":82.9388888889,\"[23,1,2]\":81.4873417722,\"[23,2,1]\":78.3333333333,\"[23,3,1]\":70.5,\"[23,3,2]\":78.875,\"[23,4,1]\":77.2727272727,\"[23,5,2]\":75.0,\"[23,6,1]\":83.0,\"[23,6,2]\":86.0}}\n"
+     ]
+    }
+   ],
+   "source": [
+    "\n",
+    "# getting count number for each vehicle class, avarage speed for each class and direction\n",
+    "\n",
+    "import datetime\n",
+    "\n",
+    "\n",
+    "year = \"2020\"\n",
+    "areaID = \"01\"\n",
+    "lamID = \"101\"\n",
+    "shortYear = year[-2:]\n",
+    "startDayNumber = \"101\"\n",
+    "endDayNumber = \"\"\n",
+    "vehicle_class =[4]\n",
+    "\n",
+    "output = pd.DataFrame()\n",
+    "\n",
+    "\n",
+    "\n",
+    "if(len(endDayNumber)!=0):\n",
+    "    start = int(startDayNumber)\n",
+    "    end = int(endDayNumber)\n",
+    "    duration = (end+1) - start\n",
+    "    print(duration)\n",
+    "    \n",
+    "    \n",
+    "    \n",
+    "    vehicleTotalNumberInOneDay = pd.DataFrame()\n",
+    "    date = []\n",
+    "    \n",
+    "    for x in range(duration):\n",
+    "        url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{start}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, start=start)\n",
+    "        csv = pd.read_csv(url, names=names, sep = \";\")\n",
+    "        \n",
+    "        #getting the day from sequectial day number\n",
+    "        dt = datetime.datetime(int(year),1,1)\n",
+    "        dtdelta = datetime.timedelta(days=start)\n",
+    "        dt = dt + dtdelta\n",
+    "        dt=dt.strftime('%d.%m.%Y')\n",
+    "        date.append(dt)\n",
+    "        print(date)\n",
+    "        \n",
+    "        \n",
+    "        #temp = csv.groupby([\"vehicle_class\"])[\"vehicle_class\"].count()\n",
+    "        temp = csv.groupby([\"vehicle_class\",\"direction\"]).agg({\"vehicle_class\":\"count\", \"speed_km/h\":\"mean\"})\\\n",
+    "        .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})\n",
+    "        \n",
+    "        #changing indexes to create uniqe indexs containing date and vehicle class\n",
+    "        indexv = temp.index.values.tolist() \n",
+    "        newindex = []\n",
+    "        for i in range(len(indexv)):\n",
+    "            a= list(indexv[i])\n",
+    "            a[0] = dt+\"_\"+str(a[0])\n",
+    "            newindex.append(tuple(a))\n",
+    "              \n",
+    "        #print(newindex)\n",
+    "        \n",
+    "        \n",
+    "        #setting the new index to dataframe\n",
+    "        temp[\"date_vehicleclass_direction\"]= newindex\n",
+    "        temp.set_index(\"date_vehicleclass_direction\", inplace= True)\n",
+    "        \n",
+    "        vehicleTotalNumberInOneDay= vehicleTotalNumberInOneDay.append(temp)\n",
+    "        \n",
+    "        #print(vehicleTotalNumberInOneDay)\n",
+    "        \n",
+    "\n",
+    "        \n",
+    "        start +=1\n",
+    "        \n",
+    "    \n",
+    "    output= vehicleTotalNumberInOneDay\n",
+    "    #output[\"date\"] = date\n",
+    "    #output.set_index(\"date\", inplace = True)\n",
+    "    print(output)\n",
+    "    outputJson = output.to_json()\n",
+    "    print(outputJson)\n",
+    "\n",
+    "else:\n",
+    "    print(\"in else!\")\n",
+    "    url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{startDayNumber}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, startDayNumber=startDayNumber)\n",
+    "    \n",
+    "    allData = pd.read_csv(url, names=names, sep = \";\")\n",
+    "    #df = allData[allData[\"vehicle_class\"]==vehicle_class[0]]\n",
+    "    \n",
+    "    # getting date from day number\n",
+    "    dt = datetime.datetime(int(year),1,1)\n",
+    "    dtdelta = datetime.timedelta(days=int(startDayNumber))\n",
+    "    dt = dt + dtdelta\n",
+    "    dt=dt.strftime('%d.%m.%Y')\n",
+    "    print(dt)\n",
+    "    \n",
+    "    df = allData.groupby([\"hour\",\"vehicle_class\",\"direction\"]).agg({\"vehicle_class\": \"count\", \"speed_km/h\":\"mean\"})\\\n",
+    "         .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})\n",
+    "        \n",
+    "    print(df.head(25))\n",
+    "    \n",
+    "    outjson = df.to_json()\n",
+    "    print(outjson)\n",
+    "    \n",
+    "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "#output.plot()\n",
+    "#plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "in else!\n",
+      "09.01.2020\n",
+      "                              vehicle_number  avg_speed_km_h\n",
+      "hour vehicle_class direction                                \n",
+      "0    1             1                     103           82.83\n",
+      "                   2                      81           81.14\n",
+      "     2             1                       3           69.00\n",
+      "                   2                       3           83.33\n",
+      "     3             1                       9           72.44\n",
+      "                   2                      13           79.69\n",
+      "     4             1                       5           84.00\n",
+      "     5             1                       1           77.00\n",
+      "1    1             1                      58           82.60\n",
+      "                   2                      40           84.45\n",
+      "     2             1                       3           74.33\n",
+      "                   2                       4           79.75\n",
+      "     3             1                      11           79.82\n",
+      "                   2                       8           80.00\n",
+      "     4             1                       3           77.00\n",
+      "                   2                       2           80.00\n",
+      "2    1             1                      35           83.09\n",
+      "                   2                      27           82.04\n",
+      "     2             1                       5           80.20\n",
+      "                   2                       2           86.50\n",
+      "     3             1                       1           73.00\n",
+      "     4             2                       1           80.00\n",
+      "     5             1                       1           82.00\n",
+      "                   2                       2           83.00\n",
+      "3    1             1                      35           82.80\n",
+      "{\"vehicle_number\":{\"[0,1,1]\":103,\"[0,1,2]\":81,\"[0,2,1]\":3,\"[0,2,2]\":3,\"[0,3,1]\":9,\"[0,3,2]\":13,\"[0,4,1]\":5,\"[0,5,1]\":1,\"[1,1,1]\":58,\"[1,1,2]\":40,\"[1,2,1]\":3,\"[1,2,2]\":4,\"[1,3,1]\":11,\"[1,3,2]\":8,\"[1,4,1]\":3,\"[1,4,2]\":2,\"[2,1,1]\":35,\"[2,1,2]\":27,\"[2,2,1]\":5,\"[2,2,2]\":2,\"[2,3,1]\":1,\"[2,4,2]\":1,\"[2,5,1]\":1,\"[2,5,2]\":2,\"[3,1,1]\":35,\"[3,1,2]\":23,\"[3,2,2]\":1,\"[3,4,2]\":2,\"[4,1,1]\":51,\"[4,1,2]\":63,\"[4,2,1]\":1,\"[4,2,2]\":6,\"[4,3,2]\":3,\"[4,5,2]\":1,\"[4,6,2]\":2,\"[5,1,1]\":133,\"[5,1,2]\":349,\"[5,2,1]\":6,\"[5,2,2]\":14,\"[5,3,1]\":6,\"[5,3,2]\":10,\"[5,4,1]\":1,\"[5,4,2]\":9,\"[5,5,1]\":1,\"[5,5,2]\":2,\"[5,6,2]\":1,\"[5,7,2]\":2,\"[6,1,1]\":546,\"[6,1,2]\":1666,\"[6,2,1]\":15,\"[6,2,2]\":37,\"[6,3,1]\":10,\"[6,3,2]\":27,\"[6,4,1]\":5,\"[6,4,2]\":14,\"[6,5,1]\":3,\"[6,5,2]\":9,\"[6,6,1]\":1,\"[6,6,2]\":7,\"[6,7,1]\":1,\"[6,7,2]\":1,\"[7,1,1]\":1404,\"[7,1,2]\":3130,\"[7,2,1]\":26,\"[7,2,2]\":50,\"[7,3,1]\":15,\"[7,3,2]\":24,\"[7,4,1]\":8,\"[7,4,2]\":36,\"[7,5,1]\":6,\"[7,5,2]\":7,\"[7,6,1]\":4,\"[7,6,2]\":5,\"[7,7,1]\":1,\"[7,7,2]\":3,\"[8,1,1]\":2234,\"[8,1,2]\":3451,\"[8,2,1]\":43,\"[8,2,2]\":35,\"[8,3,1]\":21,\"[8,3,2]\":23,\"[8,4,1]\":50,\"[8,4,2]\":24,\"[8,5,1]\":10,\"[8,5,2]\":11,\"[8,6,1]\":5,\"[8,6,2]\":4,\"[8,7,1]\":1,\"[8,7,2]\":1,\"[9,1,1]\":1422,\"[9,1,2]\":2613,\"[9,2,1]\":53,\"[9,2,2]\":51,\"[9,3,1]\":17,\"[9,3,2]\":25,\"[9,4,1]\":39,\"[9,4,2]\":28,\"[9,5,1]\":12,\"[9,5,2]\":12,\"[9,6,1]\":3,\"[9,6,2]\":7,\"[9,7,1]\":4,\"[9,7,2]\":2,\"[10,1,1]\":1202,\"[10,1,2]\":1533,\"[10,2,1]\":55,\"[10,2,2]\":40,\"[10,3,1]\":9,\"[10,3,2]\":6,\"[10,4,1]\":27,\"[10,4,2]\":9,\"[10,5,1]\":7,\"[10,5,2]\":9,\"[10,6,1]\":5,\"[10,6,2]\":7,\"[10,7,1]\":2,\"[10,7,2]\":2,\"[11,1,1]\":1445,\"[11,1,2]\":1479,\"[11,2,1]\":56,\"[11,2,2]\":35,\"[11,3,1]\":5,\"[11,3,2]\":7,\"[11,4,1]\":4,\"[11,4,2]\":14,\"[11,5,1]\":4,\"[11,5,2]\":6,\"[11,6,1]\":4,\"[11,6,2]\":4,\"[11,7,1]\":1,\"[11,7,2]\":2,\"[12,1,1]\":1457,\"[12,1,2]\":1493,\"[12,2,1]\":50,\"[12,2,2]\":22,\"[12,3,1]\":5,\"[12,3,2]\":8,\"[12,4,1]\":2,\"[12,4,2]\":25,\"[12,5,1]\":3,\"[12,5,2]\":9,\"[12,6,2]\":1,\"[13,1,1]\":1676,\"[13,1,2]\":1360,\"[13,2,1]\":46,\"[13,2,2]\":31,\"[13,3,1]\":6,\"[13,3,2]\":8,\"[13,4,1]\":4,\"[13,4,2]\":38,\"[13,5,1]\":5,\"[13,5,2]\":9,\"[13,6,1]\":2,\"[13,6,2]\":3,\"[13,7,1]\":1,\"[13,7,2]\":1,\"[14,1,1]\":2197,\"[14,1,2]\":1437,\"[14,2,1]\":48,\"[14,2,2]\":27,\"[14,3,1]\":17,\"[14,3,2]\":31,\"[14,4,1]\":38,\"[14,4,2]\":31,\"[14,5,1]\":11,\"[14,5,2]\":5,\"[14,6,1]\":2,\"[14,6,2]\":2,\"[14,7,1]\":1,\"[14,7,2]\":4,\"[15,1,1]\":3346,\"[15,1,2]\":1771,\"[15,2,1]\":33,\"[15,2,2]\":29,\"[15,3,1]\":19,\"[15,3,2]\":23,\"[15,4,1]\":26,\"[15,4,2]\":23,\"[15,5,1]\":4,\"[15,5,2]\":2,\"[15,6,1]\":9,\"[15,6,2]\":8,\"[15,7,1]\":1,\"[15,7,2]\":1,\"[16,1,1]\":3777,\"[16,1,2]\":2300,\"[16,2,1]\":29,\"[16,2,2]\":10,\"[16,3,1]\":22,\"[16,3,2]\":22,\"[16,4,1]\":59,\"[16,4,2]\":31,\"[16,5,1]\":5,\"[16,5,2]\":3,\"[16,6,1]\":3,\"[16,6,2]\":4,\"[16,7,1]\":4,\"[16,7,2]\":1,\"[17,1,1]\":3102,\"[17,1,2]\":2076,\"[17,2,1]\":15,\"[17,2,2]\":12,\"[17,3,1]\":23,\"[17,3,2]\":22,\"[17,4,1]\":6,\"[17,4,2]\":20,\"[17,5,1]\":2,\"[17,5,2]\":8,\"[17,6,1]\":2,\"[17,6,2]\":5,\"[17,7,1]\":1,\"[17,7,2]\":1,\"[18,1,1]\":2115,\"[18,1,2]\":1513,\"[18,2,1]\":10,\"[18,2,2]\":13,\"[18,3,1]\":16,\"[18,3,2]\":12,\"[18,4,1]\":2,\"[18,4,2]\":20,\"[18,5,2]\":8,\"[18,6,1]\":1,\"[18,6,2]\":2,\"[18,7,1]\":2,\"[18,7,2]\":1,\"[19,1,1]\":1611,\"[19,1,2]\":1186,\"[19,2,1]\":9,\"[19,2,2]\":11,\"[19,3,1]\":5,\"[19,3,2]\":5,\"[19,4,1]\":2,\"[19,4,2]\":10,\"[19,5,1]\":1,\"[19,5,2]\":4,\"[19,6,1]\":2,\"[19,6,2]\":4,\"[19,7,2]\":1,\"[20,1,1]\":1221,\"[20,1,2]\":1002,\"[20,2,1]\":4,\"[20,2,2]\":7,\"[20,3,1]\":2,\"[20,3,2]\":5,\"[20,4,2]\":11,\"[20,5,1]\":1,\"[20,5,2]\":2,\"[20,6,1]\":1,\"[20,6,2]\":1,\"[21,1,1]\":1154,\"[21,1,2]\":583,\"[21,2,1]\":7,\"[21,2,2]\":5,\"[21,3,1]\":5,\"[21,3,2]\":1,\"[21,4,1]\":81,\"[21,4,2]\":5,\"[21,5,1]\":7,\"[21,5,2]\":3,\"[21,6,1]\":1,\"[21,6,2]\":1,\"[21,7,1]\":2,\"[22,1,1]\":449,\"[22,1,2]\":288,\"[22,2,1]\":9,\"[22,2,2]\":4,\"[22,3,1]\":3,\"[22,3,2]\":3,\"[22,4,1]\":8,\"[22,4,2]\":1,\"[22,5,2]\":3,\"[22,7,2]\":2,\"[23,1,1]\":215,\"[23,1,2]\":135,\"[23,2,1]\":2,\"[23,2,2]\":2,\"[23,3,1]\":3,\"[23,3,2]\":9,\"[23,4,2]\":1,\"[23,5,1]\":2},\"avg_speed_km_h\":{\"[0,1,1]\":82.83,\"[0,1,2]\":81.14,\"[0,2,1]\":69.0,\"[0,2,2]\":83.33,\"[0,3,1]\":72.44,\"[0,3,2]\":79.69,\"[0,4,1]\":84.0,\"[0,5,1]\":77.0,\"[1,1,1]\":82.6,\"[1,1,2]\":84.45,\"[1,2,1]\":74.33,\"[1,2,2]\":79.75,\"[1,3,1]\":79.82,\"[1,3,2]\":80.0,\"[1,4,1]\":77.0,\"[1,4,2]\":80.0,\"[2,1,1]\":83.09,\"[2,1,2]\":82.04,\"[2,2,1]\":80.2,\"[2,2,2]\":86.5,\"[2,3,1]\":73.0,\"[2,4,2]\":80.0,\"[2,5,1]\":82.0,\"[2,5,2]\":83.0,\"[3,1,1]\":82.8,\"[3,1,2]\":84.48,\"[3,2,2]\":76.0,\"[3,4,2]\":81.0,\"[4,1,1]\":80.41,\"[4,1,2]\":81.51,\"[4,2,1]\":87.0,\"[4,2,2]\":82.5,\"[4,3,2]\":75.0,\"[4,5,2]\":79.0,\"[4,6,2]\":82.5,\"[5,1,1]\":83.08,\"[5,1,2]\":84.72,\"[5,2,1]\":81.33,\"[5,2,2]\":76.93,\"[5,3,1]\":76.83,\"[5,3,2]\":70.5,\"[5,4,1]\":74.0,\"[5,4,2]\":83.0,\"[5,5,1]\":76.0,\"[5,5,2]\":83.0,\"[5,6,2]\":77.0,\"[5,7,2]\":84.5,\"[6,1,1]\":81.23,\"[6,1,2]\":82.82,\"[6,2,1]\":76.67,\"[6,2,2]\":80.27,\"[6,3,1]\":73.5,\"[6,3,2]\":73.22,\"[6,4,1]\":72.4,\"[6,4,2]\":76.14,\"[6,5,1]\":79.67,\"[6,5,2]\":84.0,\"[6,6,1]\":22.0,\"[6,6,2]\":79.86,\"[6,7,1]\":25.0,\"[6,7,2]\":81.0,\"[7,1,1]\":78.4,\"[7,1,2]\":77.62,\"[7,2,1]\":76.88,\"[7,2,2]\":76.5,\"[7,3,1]\":74.6,\"[7,3,2]\":78.33,\"[7,4,1]\":73.5,\"[7,4,2]\":73.42,\"[7,5,1]\":70.5,\"[7,5,2]\":68.86,\"[7,6,1]\":79.75,\"[7,6,2]\":73.8,\"[7,7,1]\":68.0,\"[7,7,2]\":68.67,\"[8,1,1]\":76.27,\"[8,1,2]\":75.49,\"[8,2,1]\":71.07,\"[8,2,2]\":75.03,\"[8,3,1]\":72.48,\"[8,3,2]\":72.17,\"[8,4,1]\":70.12,\"[8,4,2]\":75.33,\"[8,5,1]\":72.7,\"[8,5,2]\":70.82,\"[8,6,1]\":74.2,\"[8,6,2]\":78.75,\"[8,7,1]\":77.0,\"[8,7,2]\":73.0,\"[9,1,1]\":80.13,\"[9,1,2]\":77.34,\"[9,2,1]\":75.28,\"[9,2,2]\":75.41,\"[9,3,1]\":76.71,\"[9,3,2]\":76.12,\"[9,4,1]\":77.82,\"[9,4,2]\":76.36,\"[9,5,1]\":76.25,\"[9,5,2]\":76.75,\"[9,6,1]\":76.33,\"[9,6,2]\":74.0,\"[9,7,1]\":77.75,\"[9,7,2]\":59.5,\"[10,1,1]\":80.19,\"[10,1,2]\":79.77,\"[10,2,1]\":79.2,\"[10,2,2]\":77.32,\"[10,3,1]\":71.78,\"[10,3,2]\":74.83,\"[10,4,1]\":74.0,\"[10,4,2]\":77.11,\"[10,5,1]\":73.43,\"[10,5,2]\":69.0,\"[10,6,1]\":76.2,\"[10,6,2]\":77.14,\"[10,7,1]\":75.0,\"[10,7,2]\":76.0,\"[11,1,1]\":80.44,\"[11,1,2]\":79.85,\"[11,2,1]\":79.23,\"[11,2,2]\":75.77,\"[11,3,1]\":74.6,\"[11,3,2]\":69.0,\"[11,4,1]\":76.5,\"[11,4,2]\":77.64,\"[11,5,1]\":59.25,\"[11,5,2]\":77.0,\"[11,6,1]\":75.0,\"[11,6,2]\":78.5,\"[11,7,1]\":72.0,\"[11,7,2]\":84.0,\"[12,1,1]\":80.89,\"[12,1,2]\":80.16,\"[12,2,1]\":78.22,\"[12,2,2]\":80.36,\"[12,3,1]\":71.8,\"[12,3,2]\":78.38,\"[12,4,1]\":81.0,\"[12,4,2]\":77.4,\"[12,5,1]\":59.0,\"[12,5,2]\":78.89,\"[12,6,2]\":73.0,\"[13,1,1]\":79.76,\"[13,1,2]\":79.63,\"[13,2,1]\":77.48,\"[13,2,2]\":78.84,\"[13,3,1]\":78.33,\"[13,3,2]\":78.25,\"[13,4,1]\":82.25,\"[13,4,2]\":77.71,\"[13,5,1]\":77.0,\"[13,5,2]\":75.11,\"[13,6,1]\":77.0,\"[13,6,2]\":83.0,\"[13,7,1]\":69.0,\"[13,7,2]\":73.0,\"[14,1,1]\":80.27,\"[14,1,2]\":79.58,\"[14,2,1]\":75.67,\"[14,2,2]\":79.07,\"[14,3,1]\":75.88,\"[14,3,2]\":78.71,\"[14,4,1]\":73.66,\"[14,4,2]\":78.97,\"[14,5,1]\":78.82,\"[14,5,2]\":82.4,\"[14,6,1]\":74.5,\"[14,6,2]\":75.0,\"[14,7,1]\":28.0,\"[14,7,2]\":74.75,\"[15,1,1]\":76.41,\"[15,1,2]\":78.74,\"[15,2,1]\":74.67,\"[15,2,2]\":77.52,\"[15,3,1]\":69.05,\"[15,3,2]\":77.0,\"[15,4,1]\":68.85,\"[15,4,2]\":76.52,\"[15,5,1]\":47.5,\"[15,5,2]\":78.5,\"[15,6,1]\":71.78,\"[15,6,2]\":70.25,\"[15,7,1]\":75.0,\"[15,7,2]\":82.0,\"[16,1,1]\":69.22,\"[16,1,2]\":77.75,\"[16,2,1]\":64.79,\"[16,2,2]\":82.9,\"[16,3,1]\":73.68,\"[16,3,2]\":76.36,\"[16,4,1]\":61.86,\"[16,4,2]\":70.94,\"[16,5,1]\":55.8,\"[16,5,2]\":58.67,\"[16,6,1]\":47.0,\"[16,6,2]\":82.25,\"[16,7,1]\":67.0,\"[16,7,2]\":81.0,\"[17,1,1]\":74.68,\"[17,1,2]\":77.29,\"[17,2,1]\":68.4,\"[17,2,2]\":75.33,\"[17,3,1]\":74.7,\"[17,3,2]\":77.41,\"[17,4,1]\":69.17,\"[17,4,2]\":72.8,\"[17,5,1]\":71.0,\"[17,5,2]\":77.25,\"[17,6,1]\":72.5,\"[17,6,2]\":79.0,\"[17,7,1]\":58.0,\"[17,7,2]\":71.0,\"[18,1,1]\":78.88,\"[18,1,2]\":79.68,\"[18,2,1]\":76.1,\"[18,2,2]\":68.92,\"[18,3,1]\":77.19,\"[18,3,2]\":79.33,\"[18,4,1]\":69.0,\"[18,4,2]\":75.9,\"[18,5,2]\":78.62,\"[18,6,1]\":68.0,\"[18,6,2]\":79.0,\"[18,7,1]\":63.0,\"[18,7,2]\":81.0,\"[19,1,1]\":79.55,\"[19,1,2]\":80.07,\"[19,2,1]\":70.89,\"[19,2,2]\":75.55,\"[19,3,1]\":74.4,\"[19,3,2]\":76.2,\"[19,4,1]\":81.5,\"[19,4,2]\":80.0,\"[19,5,1]\":71.0,\"[19,5,2]\":60.25,\"[19,6,1]\":73.0,\"[19,6,2]\":77.0,\"[19,7,2]\":60.0,\"[20,1,1]\":80.21,\"[20,1,2]\":81.18,\"[20,2,1]\":80.5,\"[20,2,2]\":78.71,\"[20,3,1]\":68.0,\"[20,3,2]\":76.0,\"[20,4,2]\":81.36,\"[20,5,1]\":41.0,\"[20,5,2]\":87.0,\"[20,6,1]\":73.0,\"[20,6,2]\":70.0,\"[21,1,1]\":81.34,\"[21,1,2]\":81.87,\"[21,2,1]\":80.86,\"[21,2,2]\":78.8,\"[21,3,1]\":76.0,\"[21,3,2]\":83.0,\"[21,4,1]\":77.32,\"[21,4,2]\":81.2,\"[21,5,1]\":81.0,\"[21,5,2]\":73.33,\"[21,6,1]\":79.0,\"[21,6,2]\":81.0,\"[21,7,1]\":77.0,\"[22,1,1]\":81.5,\"[22,1,2]\":81.73,\"[22,2,1]\":74.56,\"[22,2,2]\":74.25,\"[22,3,1]\":80.0,\"[22,3,2]\":71.67,\"[22,4,1]\":76.75,\"[22,4,2]\":83.0,\"[22,5,2]\":61.67,\"[22,7,2]\":80.5,\"[23,1,1]\":82.96,\"[23,1,2]\":81.59,\"[23,2,1]\":69.5,\"[23,2,2]\":70.0,\"[23,3,1]\":83.67,\"[23,3,2]\":79.0,\"[23,4,2]\":72.0,\"[23,5,1]\":78.0}}\n"
+     ]
+    }
+   ],
+   "source": [
+    "# getting count number for each vehicle class, avarage speed for each class and direction\n",
+    "\n",
+    "import datetime\n",
+    "\n",
+    "\n",
+    "year = \"2020\"\n",
+    "areaID = \"01\"\n",
+    "lamID = \"101\"\n",
+    "shortYear = year[-2:]\n",
+    "startDayNumber = \"8\"\n",
+    "endDayNumber = \"\"\n",
+    "vehicle_class =[4]\n",
+    "\n",
+    "output = pd.DataFrame()\n",
+    "\n",
+    "\n",
+    "\n",
+    "if(len(endDayNumber)!=0):\n",
+    "    start = int(startDayNumber)\n",
+    "    end = int(endDayNumber)\n",
+    "    duration = (end+1) - start\n",
+    "    print(duration)\n",
+    "    \n",
+    "    \n",
+    "    \n",
+    "    vehicleTotalNumberInOneDay = pd.DataFrame()\n",
+    "    date = []\n",
+    "    \n",
+    "    for x in range(duration):\n",
+    "        print(start)\n",
+    "        url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{start}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, start=start)\n",
+    "        csv = pd.read_csv(url, names=names, sep = \";\")\n",
+    "        \n",
+    "        #getting the day from sequectial day number\n",
+    "        dt = datetime.datetime(int(year),1,1)\n",
+    "        dtdelta = datetime.timedelta(days=(start-1))\n",
+    "        dt = dt + dtdelta\n",
+    "        dt=dt.strftime('%d.%m.%Y')\n",
+    "        date.append(dt)\n",
+    "        print(date)\n",
+    "        \n",
+    "        \n",
+    "        #temp = csv.groupby([\"vehicle_class\"])[\"vehicle_class\"].count()\n",
+    "        temp = csv.groupby([\"vehicle_class\",\"direction\"]).agg({\"vehicle_class\":\"count\", \"speed_km/h\":\"mean\"})\\\n",
+    "        .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})\n",
+    "        \n",
+    "        #changing indexes to create uniqe indexs containing date and vehicle class\n",
+    "        indexv = temp.index.values.tolist() \n",
+    "        newindex = []\n",
+    "        for i in range(len(indexv)):\n",
+    "            a= list(indexv[i])\n",
+    "            a[0] = dt+\"_\"+str(a[0])\n",
+    "            newindex.append(tuple(a))\n",
+    "              \n",
+    "        #print(newindex)\n",
+    "        \n",
+    "        \n",
+    "        #setting the new index to dataframe\n",
+    "        temp[\"date_vehicleclass_direction\"]= newindex\n",
+    "        temp.set_index(\"date_vehicleclass_direction\", inplace= True)\n",
+    "        \n",
+    "        vehicleTotalNumberInOneDay= vehicleTotalNumberInOneDay.append(temp)\n",
+    "        \n",
+    "        #print(vehicleTotalNumberInOneDay)\n",
+    "        \n",
+    "\n",
+    "        \n",
+    "        start +=1\n",
+    "        \n",
+    "    \n",
+    "    output= vehicleTotalNumberInOneDay\n",
+    "    #output[\"date\"] = date\n",
+    "    #output.set_index(\"date\", inplace = True)\n",
+    "    print(output)\n",
+    "    outputJson = output.to_json()\n",
+    "    print(outputJson)\n",
+    "\n",
+    "else:\n",
+    "    print(\"in else!\")\n",
+    "    url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{startDayNumber}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, startDayNumber=startDayNumber)\n",
+    "    \n",
+    "    allData = pd.read_csv(url, names=names, sep = \";\")\n",
+    "    #df = allData[allData[\"vehicle_class\"]==vehicle_class[0]]\n",
+    "    \n",
+    "    # getting date from day number\n",
+    "    dt = datetime.datetime(int(year),1,1)\n",
+    "    dtdelta = datetime.timedelta(days=int(startDayNumber))\n",
+    "    dt = dt + dtdelta\n",
+    "    dt=dt.strftime('%d.%m.%Y')\n",
+    "    print(dt)\n",
+    "    \n",
+    "    df = allData.groupby([\"hour\",\"vehicle_class\",\"direction\"]).agg({\"vehicle_class\": \"count\", \"speed_km/h\":\"mean\"})\\\n",
+    "         .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})\n",
+    "    df['avg_speed_km_h'] = df['avg_speed_km_h'].astype(float).round(1)\n",
+    "    print(df.head(25))\n",
+    "    \n",
+    "    outjson = df.to_json()\n",
+    "    print(outjson)\n",
+    "    \n",
+    "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "#output.plot()\n",
+    "#plt.show()"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.4"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/Tavara- raskaan liikenne/python/LAM_rawData_analysis.ipynb b/Tavara- raskaan liikenne/python/LAM_rawData_analysis.ipynb
index e7f88c55b4a81100be98b90810cc30f410c8c26b..df1db26ef64e34216757c1e5c0ac3165277fef48 100644
--- a/Tavara- raskaan liikenne/python/LAM_rawData_analysis.ipynb	
+++ b/Tavara- raskaan liikenne/python/LAM_rawData_analysis.ipynb	
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 142,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [
     {
@@ -79,14 +79,11 @@
     },
     {
      "data": {
-      "image/png": "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\n",
       "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
+       "<Figure size 640x480 with 1 Axes>"
       ]
      },
-     "metadata": {
-      "needs_background": "light"
-     },
+     "metadata": {},
      "output_type": "display_data"
     }
    ],
@@ -130,41 +127,13 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 111,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "hour  vehicle_class\n",
-      "0     1                178\n",
-      "      2                  4\n",
-      "      3                 26\n",
-      "      4                  3\n",
-      "1     1                130\n",
-      "      2                  9\n",
-      "      3                 17\n",
-      "      4                  7\n",
-      "2     1                 73\n",
-      "      2                  8\n",
-      "      3                  2\n",
-      "3     1                 53\n",
-      "      2                  3\n",
-      "      4                  4\n",
-      "      6                  1\n",
-      "4     1                 44\n",
-      "      2                  3\n",
-      "      3                  1\n",
-      "5     1                118\n",
-      "      2                  5\n",
-      "      3                  1\n",
-      "      4                  1\n",
-      "      5                  2\n",
-      "6     1                347\n",
-      "      2                  8\n",
-      "Name: vehicle_class, dtype: int64\n",
-      "{\"[0,1]\":178,\"[0,2]\":4,\"[0,3]\":26,\"[0,4]\":3,\"[1,1]\":130,\"[1,2]\":9,\"[1,3]\":17,\"[1,4]\":7,\"[2,1]\":73,\"[2,2]\":8,\"[2,3]\":2,\"[3,1]\":53,\"[3,2]\":3,\"[3,4]\":4,\"[3,6]\":1,\"[4,1]\":44,\"[4,2]\":3,\"[4,3]\":1,\"[5,1]\":118,\"[5,2]\":5,\"[5,3]\":1,\"[5,4]\":1,\"[5,5]\":2,\"[6,1]\":347,\"[6,2]\":8,\"[6,3]\":5,\"[6,4]\":20,\"[6,5]\":4,\"[6,6]\":2,\"[6,7]\":1,\"[7,1]\":389,\"[7,2]\":4,\"[7,3]\":8,\"[7,4]\":60,\"[7,5]\":6,\"[7,6]\":3,\"[7,7]\":1,\"[8,1]\":526,\"[8,2]\":12,\"[8,3]\":5,\"[8,4]\":44,\"[8,5]\":8,\"[8,7]\":2,\"[9,1]\":978,\"[9,2]\":9,\"[9,3]\":4,\"[9,4]\":28,\"[9,5]\":5,\"[9,6]\":5,\"[9,7]\":1,\"[10,1]\":1602,\"[10,2]\":6,\"[10,3]\":4,\"[10,4]\":8,\"[10,5]\":2,\"[10,6]\":6,\"[10,7]\":2,\"[11,1]\":2039,\"[11,2]\":13,\"[11,3]\":3,\"[11,4]\":18,\"[11,5]\":5,\"[11,6]\":10,\"[12,1]\":2493,\"[12,2]\":11,\"[12,3]\":5,\"[12,4]\":11,\"[12,5]\":4,\"[12,6]\":8,\"[12,7]\":2,\"[13,1]\":2589,\"[13,2]\":8,\"[13,3]\":4,\"[13,4]\":23,\"[13,5]\":7,\"[13,6]\":6,\"[14,1]\":2721,\"[14,2]\":8,\"[14,3]\":7,\"[14,4]\":21,\"[14,5]\":5,\"[14,6]\":10,\"[15,1]\":2680,\"[15,2]\":7,\"[15,3]\":5,\"[15,4]\":15,\"[15,5]\":2,\"[15,6]\":9,\"[15,7]\":3,\"[16,1]\":2462,\"[16,2]\":5,\"[16,3]\":3,\"[16,4]\":4,\"[16,5]\":2,\"[16,6]\":11,\"[17,1]\":2259,\"[17,2]\":10,\"[17,3]\":6,\"[17,4]\":2,\"[17,5]\":1,\"[17,6]\":10,\"[17,7]\":2,\"[18,1]\":1677,\"[18,2]\":7,\"[18,3]\":6,\"[18,4]\":2,\"[18,5]\":1,\"[18,6]\":6,\"[19,1]\":1177,\"[19,2]\":7,\"[19,3]\":3,\"[19,4]\":2,\"[19,5]\":1,\"[19,6]\":5,\"[20,1]\":982,\"[20,2]\":6,\"[20,3]\":9,\"[20,4]\":2,\"[20,5]\":2,\"[20,6]\":3,\"[21,1]\":720,\"[21,2]\":3,\"[21,3]\":6,\"[21,4]\":3,\"[21,6]\":1,\"[22,1]\":446,\"[22,3]\":5,\"[22,4]\":4,\"[22,5]\":1,\"[22,6]\":1,\"[23,1]\":338,\"[23,2]\":3,\"[23,3]\":12,\"[23,4]\":11,\"[23,5]\":1,\"[23,6]\":3}\n",
       "hour  vehicle_class\n",
       "0     1                178\n",
       "      2                  4\n",
@@ -192,6 +161,7 @@
       "      3                  0\n",
       "      4                  4\n",
       "dtype: int64\n",
+      "{\"[0,1]\":178,\"[0,2]\":4,\"[0,3]\":26,\"[0,4]\":3,\"[0,5]\":0,\"[0,6]\":0,\"[0,7]\":0,\"[1,1]\":130,\"[1,2]\":9,\"[1,3]\":17,\"[1,4]\":7,\"[1,5]\":0,\"[1,6]\":0,\"[1,7]\":0,\"[2,1]\":73,\"[2,2]\":8,\"[2,3]\":2,\"[2,4]\":0,\"[2,5]\":0,\"[2,6]\":0,\"[2,7]\":0,\"[3,1]\":53,\"[3,2]\":3,\"[3,3]\":0,\"[3,4]\":4,\"[3,5]\":0,\"[3,6]\":1,\"[3,7]\":0,\"[4,1]\":44,\"[4,2]\":3,\"[4,3]\":1,\"[4,4]\":0,\"[4,5]\":0,\"[4,6]\":0,\"[4,7]\":0,\"[5,1]\":118,\"[5,2]\":5,\"[5,3]\":1,\"[5,4]\":1,\"[5,5]\":2,\"[5,6]\":0,\"[5,7]\":0,\"[6,1]\":347,\"[6,2]\":8,\"[6,3]\":5,\"[6,4]\":20,\"[6,5]\":4,\"[6,6]\":2,\"[6,7]\":1,\"[7,1]\":389,\"[7,2]\":4,\"[7,3]\":8,\"[7,4]\":60,\"[7,5]\":6,\"[7,6]\":3,\"[7,7]\":1,\"[8,1]\":526,\"[8,2]\":12,\"[8,3]\":5,\"[8,4]\":44,\"[8,5]\":8,\"[8,6]\":0,\"[8,7]\":2,\"[9,1]\":978,\"[9,2]\":9,\"[9,3]\":4,\"[9,4]\":28,\"[9,5]\":5,\"[9,6]\":5,\"[9,7]\":1,\"[10,1]\":1602,\"[10,2]\":6,\"[10,3]\":4,\"[10,4]\":8,\"[10,5]\":2,\"[10,6]\":6,\"[10,7]\":2,\"[11,1]\":2039,\"[11,2]\":13,\"[11,3]\":3,\"[11,4]\":18,\"[11,5]\":5,\"[11,6]\":10,\"[11,7]\":0,\"[12,1]\":2493,\"[12,2]\":11,\"[12,3]\":5,\"[12,4]\":11,\"[12,5]\":4,\"[12,6]\":8,\"[12,7]\":2,\"[13,1]\":2589,\"[13,2]\":8,\"[13,3]\":4,\"[13,4]\":23,\"[13,5]\":7,\"[13,6]\":6,\"[13,7]\":0,\"[14,1]\":2721,\"[14,2]\":8,\"[14,3]\":7,\"[14,4]\":21,\"[14,5]\":5,\"[14,6]\":10,\"[14,7]\":0,\"[15,1]\":2680,\"[15,2]\":7,\"[15,3]\":5,\"[15,4]\":15,\"[15,5]\":2,\"[15,6]\":9,\"[15,7]\":3,\"[16,1]\":2462,\"[16,2]\":5,\"[16,3]\":3,\"[16,4]\":4,\"[16,5]\":2,\"[16,6]\":11,\"[16,7]\":0,\"[17,1]\":2259,\"[17,2]\":10,\"[17,3]\":6,\"[17,4]\":2,\"[17,5]\":1,\"[17,6]\":10,\"[17,7]\":2,\"[18,1]\":1677,\"[18,2]\":7,\"[18,3]\":6,\"[18,4]\":2,\"[18,5]\":1,\"[18,6]\":6,\"[18,7]\":0,\"[19,1]\":1177,\"[19,2]\":7,\"[19,3]\":3,\"[19,4]\":2,\"[19,5]\":1,\"[19,6]\":5,\"[19,7]\":0,\"[20,1]\":982,\"[20,2]\":6,\"[20,3]\":9,\"[20,4]\":2,\"[20,5]\":2,\"[20,6]\":3,\"[20,7]\":0,\"[21,1]\":720,\"[21,2]\":3,\"[21,3]\":6,\"[21,4]\":3,\"[21,5]\":0,\"[21,6]\":1,\"[21,7]\":0,\"[22,1]\":446,\"[22,2]\":0,\"[22,3]\":5,\"[22,4]\":4,\"[22,5]\":1,\"[22,6]\":1,\"[22,7]\":0,\"[23,1]\":338,\"[23,2]\":3,\"[23,3]\":12,\"[23,4]\":11,\"[23,5]\":1,\"[23,6]\":3,\"[23,7]\":0}\n",
       "11.04.2020\n"
      ]
     }
@@ -279,10 +249,6 @@
     "\n",
     "\n",
     "\n",
-    "\n",
-    "\n",
-    "\n",
-    "\n",
     "#print(\"\\n-----------------------------------------\\n\")\n",
     "\n",
     "\n",
@@ -295,13 +261,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 173,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
+      "in else!\n",
       "11.04.2020\n",
       "                              vehicle_number  avg_speed_km_h\n",
       "hour vehicle_class direction                                \n",
@@ -353,8 +320,6 @@
     "\n",
     "\n",
     "\n",
-    "\n",
-    "\n",
     "if(len(endDayNumber)!=0):\n",
     "    start = int(startDayNumber)\n",
     "    end = int(endDayNumber)\n",
@@ -415,6 +380,7 @@
     "    print(outputJson)\n",
     "\n",
     "else:\n",
+    "    print(\"in else!\")\n",
     "    url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{startDayNumber}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, startDayNumber=startDayNumber)\n",
     "    \n",
     "    allData = pd.read_csv(url, names=names, sep = \";\")\n",
@@ -436,16 +402,156 @@
     "    print(outjson)\n",
     "    \n",
     "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "\n",
+    "#output.plot()\n",
+    "#plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "in else!\n",
+      "09.01.2020\n",
+      "                              vehicle_number  avg_speed_km_h\n",
+      "hour vehicle_class direction                                \n",
+      "0    1             1                     103            82.8\n",
+      "                   2                      81            81.1\n",
+      "     2             1                       3            69.0\n",
+      "                   2                       3            83.3\n",
+      "     3             1                       9            72.4\n",
+      "                   2                      13            79.7\n",
+      "     4             1                       5            84.0\n",
+      "     5             1                       1            77.0\n",
+      "1    1             1                      58            82.6\n",
+      "                   2                      40            84.4\n",
+      "     2             1                       3            74.3\n",
+      "                   2                       4            79.8\n",
+      "     3             1                      11            79.8\n",
+      "                   2                       8            80.0\n",
+      "     4             1                       3            77.0\n",
+      "                   2                       2            80.0\n",
+      "2    1             1                      35            83.1\n",
+      "                   2                      27            82.0\n",
+      "     2             1                       5            80.2\n",
+      "                   2                       2            86.5\n",
+      "     3             1                       1            73.0\n",
+      "     4             2                       1            80.0\n",
+      "     5             1                       1            82.0\n",
+      "                   2                       2            83.0\n",
+      "3    1             1                      35            82.8\n",
+      "{\"vehicle_number\":{\"[0,1,1]\":103,\"[0,1,2]\":81,\"[0,2,1]\":3,\"[0,2,2]\":3,\"[0,3,1]\":9,\"[0,3,2]\":13,\"[0,4,1]\":5,\"[0,5,1]\":1,\"[1,1,1]\":58,\"[1,1,2]\":40,\"[1,2,1]\":3,\"[1,2,2]\":4,\"[1,3,1]\":11,\"[1,3,2]\":8,\"[1,4,1]\":3,\"[1,4,2]\":2,\"[2,1,1]\":35,\"[2,1,2]\":27,\"[2,2,1]\":5,\"[2,2,2]\":2,\"[2,3,1]\":1,\"[2,4,2]\":1,\"[2,5,1]\":1,\"[2,5,2]\":2,\"[3,1,1]\":35,\"[3,1,2]\":23,\"[3,2,2]\":1,\"[3,4,2]\":2,\"[4,1,1]\":51,\"[4,1,2]\":63,\"[4,2,1]\":1,\"[4,2,2]\":6,\"[4,3,2]\":3,\"[4,5,2]\":1,\"[4,6,2]\":2,\"[5,1,1]\":133,\"[5,1,2]\":349,\"[5,2,1]\":6,\"[5,2,2]\":14,\"[5,3,1]\":6,\"[5,3,2]\":10,\"[5,4,1]\":1,\"[5,4,2]\":9,\"[5,5,1]\":1,\"[5,5,2]\":2,\"[5,6,2]\":1,\"[5,7,2]\":2,\"[6,1,1]\":546,\"[6,1,2]\":1666,\"[6,2,1]\":15,\"[6,2,2]\":37,\"[6,3,1]\":10,\"[6,3,2]\":27,\"[6,4,1]\":5,\"[6,4,2]\":14,\"[6,5,1]\":3,\"[6,5,2]\":9,\"[6,6,1]\":1,\"[6,6,2]\":7,\"[6,7,1]\":1,\"[6,7,2]\":1,\"[7,1,1]\":1404,\"[7,1,2]\":3130,\"[7,2,1]\":26,\"[7,2,2]\":50,\"[7,3,1]\":15,\"[7,3,2]\":24,\"[7,4,1]\":8,\"[7,4,2]\":36,\"[7,5,1]\":6,\"[7,5,2]\":7,\"[7,6,1]\":4,\"[7,6,2]\":5,\"[7,7,1]\":1,\"[7,7,2]\":3,\"[8,1,1]\":2234,\"[8,1,2]\":3451,\"[8,2,1]\":43,\"[8,2,2]\":35,\"[8,3,1]\":21,\"[8,3,2]\":23,\"[8,4,1]\":50,\"[8,4,2]\":24,\"[8,5,1]\":10,\"[8,5,2]\":11,\"[8,6,1]\":5,\"[8,6,2]\":4,\"[8,7,1]\":1,\"[8,7,2]\":1,\"[9,1,1]\":1422,\"[9,1,2]\":2613,\"[9,2,1]\":53,\"[9,2,2]\":51,\"[9,3,1]\":17,\"[9,3,2]\":25,\"[9,4,1]\":39,\"[9,4,2]\":28,\"[9,5,1]\":12,\"[9,5,2]\":12,\"[9,6,1]\":3,\"[9,6,2]\":7,\"[9,7,1]\":4,\"[9,7,2]\":2,\"[10,1,1]\":1202,\"[10,1,2]\":1533,\"[10,2,1]\":55,\"[10,2,2]\":40,\"[10,3,1]\":9,\"[10,3,2]\":6,\"[10,4,1]\":27,\"[10,4,2]\":9,\"[10,5,1]\":7,\"[10,5,2]\":9,\"[10,6,1]\":5,\"[10,6,2]\":7,\"[10,7,1]\":2,\"[10,7,2]\":2,\"[11,1,1]\":1445,\"[11,1,2]\":1479,\"[11,2,1]\":56,\"[11,2,2]\":35,\"[11,3,1]\":5,\"[11,3,2]\":7,\"[11,4,1]\":4,\"[11,4,2]\":14,\"[11,5,1]\":4,\"[11,5,2]\":6,\"[11,6,1]\":4,\"[11,6,2]\":4,\"[11,7,1]\":1,\"[11,7,2]\":2,\"[12,1,1]\":1457,\"[12,1,2]\":1493,\"[12,2,1]\":50,\"[12,2,2]\":22,\"[12,3,1]\":5,\"[12,3,2]\":8,\"[12,4,1]\":2,\"[12,4,2]\":25,\"[12,5,1]\":3,\"[12,5,2]\":9,\"[12,6,2]\":1,\"[13,1,1]\":1676,\"[13,1,2]\":1360,\"[13,2,1]\":46,\"[13,2,2]\":31,\"[13,3,1]\":6,\"[13,3,2]\":8,\"[13,4,1]\":4,\"[13,4,2]\":38,\"[13,5,1]\":5,\"[13,5,2]\":9,\"[13,6,1]\":2,\"[13,6,2]\":3,\"[13,7,1]\":1,\"[13,7,2]\":1,\"[14,1,1]\":2197,\"[14,1,2]\":1437,\"[14,2,1]\":48,\"[14,2,2]\":27,\"[14,3,1]\":17,\"[14,3,2]\":31,\"[14,4,1]\":38,\"[14,4,2]\":31,\"[14,5,1]\":11,\"[14,5,2]\":5,\"[14,6,1]\":2,\"[14,6,2]\":2,\"[14,7,1]\":1,\"[14,7,2]\":4,\"[15,1,1]\":3346,\"[15,1,2]\":1771,\"[15,2,1]\":33,\"[15,2,2]\":29,\"[15,3,1]\":19,\"[15,3,2]\":23,\"[15,4,1]\":26,\"[15,4,2]\":23,\"[15,5,1]\":4,\"[15,5,2]\":2,\"[15,6,1]\":9,\"[15,6,2]\":8,\"[15,7,1]\":1,\"[15,7,2]\":1,\"[16,1,1]\":3777,\"[16,1,2]\":2300,\"[16,2,1]\":29,\"[16,2,2]\":10,\"[16,3,1]\":22,\"[16,3,2]\":22,\"[16,4,1]\":59,\"[16,4,2]\":31,\"[16,5,1]\":5,\"[16,5,2]\":3,\"[16,6,1]\":3,\"[16,6,2]\":4,\"[16,7,1]\":4,\"[16,7,2]\":1,\"[17,1,1]\":3102,\"[17,1,2]\":2076,\"[17,2,1]\":15,\"[17,2,2]\":12,\"[17,3,1]\":23,\"[17,3,2]\":22,\"[17,4,1]\":6,\"[17,4,2]\":20,\"[17,5,1]\":2,\"[17,5,2]\":8,\"[17,6,1]\":2,\"[17,6,2]\":5,\"[17,7,1]\":1,\"[17,7,2]\":1,\"[18,1,1]\":2115,\"[18,1,2]\":1513,\"[18,2,1]\":10,\"[18,2,2]\":13,\"[18,3,1]\":16,\"[18,3,2]\":12,\"[18,4,1]\":2,\"[18,4,2]\":20,\"[18,5,2]\":8,\"[18,6,1]\":1,\"[18,6,2]\":2,\"[18,7,1]\":2,\"[18,7,2]\":1,\"[19,1,1]\":1611,\"[19,1,2]\":1186,\"[19,2,1]\":9,\"[19,2,2]\":11,\"[19,3,1]\":5,\"[19,3,2]\":5,\"[19,4,1]\":2,\"[19,4,2]\":10,\"[19,5,1]\":1,\"[19,5,2]\":4,\"[19,6,1]\":2,\"[19,6,2]\":4,\"[19,7,2]\":1,\"[20,1,1]\":1221,\"[20,1,2]\":1002,\"[20,2,1]\":4,\"[20,2,2]\":7,\"[20,3,1]\":2,\"[20,3,2]\":5,\"[20,4,2]\":11,\"[20,5,1]\":1,\"[20,5,2]\":2,\"[20,6,1]\":1,\"[20,6,2]\":1,\"[21,1,1]\":1154,\"[21,1,2]\":583,\"[21,2,1]\":7,\"[21,2,2]\":5,\"[21,3,1]\":5,\"[21,3,2]\":1,\"[21,4,1]\":81,\"[21,4,2]\":5,\"[21,5,1]\":7,\"[21,5,2]\":3,\"[21,6,1]\":1,\"[21,6,2]\":1,\"[21,7,1]\":2,\"[22,1,1]\":449,\"[22,1,2]\":288,\"[22,2,1]\":9,\"[22,2,2]\":4,\"[22,3,1]\":3,\"[22,3,2]\":3,\"[22,4,1]\":8,\"[22,4,2]\":1,\"[22,5,2]\":3,\"[22,7,2]\":2,\"[23,1,1]\":215,\"[23,1,2]\":135,\"[23,2,1]\":2,\"[23,2,2]\":2,\"[23,3,1]\":3,\"[23,3,2]\":9,\"[23,4,2]\":1,\"[23,5,1]\":2},\"avg_speed_km_h\":{\"[0,1,1]\":82.8,\"[0,1,2]\":81.1,\"[0,2,1]\":69.0,\"[0,2,2]\":83.3,\"[0,3,1]\":72.4,\"[0,3,2]\":79.7,\"[0,4,1]\":84.0,\"[0,5,1]\":77.0,\"[1,1,1]\":82.6,\"[1,1,2]\":84.4,\"[1,2,1]\":74.3,\"[1,2,2]\":79.8,\"[1,3,1]\":79.8,\"[1,3,2]\":80.0,\"[1,4,1]\":77.0,\"[1,4,2]\":80.0,\"[2,1,1]\":83.1,\"[2,1,2]\":82.0,\"[2,2,1]\":80.2,\"[2,2,2]\":86.5,\"[2,3,1]\":73.0,\"[2,4,2]\":80.0,\"[2,5,1]\":82.0,\"[2,5,2]\":83.0,\"[3,1,1]\":82.8,\"[3,1,2]\":84.5,\"[3,2,2]\":76.0,\"[3,4,2]\":81.0,\"[4,1,1]\":80.4,\"[4,1,2]\":81.5,\"[4,2,1]\":87.0,\"[4,2,2]\":82.5,\"[4,3,2]\":75.0,\"[4,5,2]\":79.0,\"[4,6,2]\":82.5,\"[5,1,1]\":83.1,\"[5,1,2]\":84.7,\"[5,2,1]\":81.3,\"[5,2,2]\":76.9,\"[5,3,1]\":76.8,\"[5,3,2]\":70.5,\"[5,4,1]\":74.0,\"[5,4,2]\":83.0,\"[5,5,1]\":76.0,\"[5,5,2]\":83.0,\"[5,6,2]\":77.0,\"[5,7,2]\":84.5,\"[6,1,1]\":81.2,\"[6,1,2]\":82.8,\"[6,2,1]\":76.7,\"[6,2,2]\":80.3,\"[6,3,1]\":73.5,\"[6,3,2]\":73.2,\"[6,4,1]\":72.4,\"[6,4,2]\":76.1,\"[6,5,1]\":79.7,\"[6,5,2]\":84.0,\"[6,6,1]\":22.0,\"[6,6,2]\":79.9,\"[6,7,1]\":25.0,\"[6,7,2]\":81.0,\"[7,1,1]\":78.4,\"[7,1,2]\":77.6,\"[7,2,1]\":76.9,\"[7,2,2]\":76.5,\"[7,3,1]\":74.6,\"[7,3,2]\":78.3,\"[7,4,1]\":73.5,\"[7,4,2]\":73.4,\"[7,5,1]\":70.5,\"[7,5,2]\":68.9,\"[7,6,1]\":79.8,\"[7,6,2]\":73.8,\"[7,7,1]\":68.0,\"[7,7,2]\":68.7,\"[8,1,1]\":76.3,\"[8,1,2]\":75.5,\"[8,2,1]\":71.1,\"[8,2,2]\":75.0,\"[8,3,1]\":72.5,\"[8,3,2]\":72.2,\"[8,4,1]\":70.1,\"[8,4,2]\":75.3,\"[8,5,1]\":72.7,\"[8,5,2]\":70.8,\"[8,6,1]\":74.2,\"[8,6,2]\":78.8,\"[8,7,1]\":77.0,\"[8,7,2]\":73.0,\"[9,1,1]\":80.1,\"[9,1,2]\":77.3,\"[9,2,1]\":75.3,\"[9,2,2]\":75.4,\"[9,3,1]\":76.7,\"[9,3,2]\":76.1,\"[9,4,1]\":77.8,\"[9,4,2]\":76.4,\"[9,5,1]\":76.2,\"[9,5,2]\":76.8,\"[9,6,1]\":76.3,\"[9,6,2]\":74.0,\"[9,7,1]\":77.8,\"[9,7,2]\":59.5,\"[10,1,1]\":80.2,\"[10,1,2]\":79.8,\"[10,2,1]\":79.2,\"[10,2,2]\":77.3,\"[10,3,1]\":71.8,\"[10,3,2]\":74.8,\"[10,4,1]\":74.0,\"[10,4,2]\":77.1,\"[10,5,1]\":73.4,\"[10,5,2]\":69.0,\"[10,6,1]\":76.2,\"[10,6,2]\":77.1,\"[10,7,1]\":75.0,\"[10,7,2]\":76.0,\"[11,1,1]\":80.4,\"[11,1,2]\":79.9,\"[11,2,1]\":79.2,\"[11,2,2]\":75.8,\"[11,3,1]\":74.6,\"[11,3,2]\":69.0,\"[11,4,1]\":76.5,\"[11,4,2]\":77.6,\"[11,5,1]\":59.2,\"[11,5,2]\":77.0,\"[11,6,1]\":75.0,\"[11,6,2]\":78.5,\"[11,7,1]\":72.0,\"[11,7,2]\":84.0,\"[12,1,1]\":80.9,\"[12,1,2]\":80.2,\"[12,2,1]\":78.2,\"[12,2,2]\":80.4,\"[12,3,1]\":71.8,\"[12,3,2]\":78.4,\"[12,4,1]\":81.0,\"[12,4,2]\":77.4,\"[12,5,1]\":59.0,\"[12,5,2]\":78.9,\"[12,6,2]\":73.0,\"[13,1,1]\":79.8,\"[13,1,2]\":79.6,\"[13,2,1]\":77.5,\"[13,2,2]\":78.8,\"[13,3,1]\":78.3,\"[13,3,2]\":78.2,\"[13,4,1]\":82.2,\"[13,4,2]\":77.7,\"[13,5,1]\":77.0,\"[13,5,2]\":75.1,\"[13,6,1]\":77.0,\"[13,6,2]\":83.0,\"[13,7,1]\":69.0,\"[13,7,2]\":73.0,\"[14,1,1]\":80.3,\"[14,1,2]\":79.6,\"[14,2,1]\":75.7,\"[14,2,2]\":79.1,\"[14,3,1]\":75.9,\"[14,3,2]\":78.7,\"[14,4,1]\":73.7,\"[14,4,2]\":79.0,\"[14,5,1]\":78.8,\"[14,5,2]\":82.4,\"[14,6,1]\":74.5,\"[14,6,2]\":75.0,\"[14,7,1]\":28.0,\"[14,7,2]\":74.8,\"[15,1,1]\":76.4,\"[15,1,2]\":78.7,\"[15,2,1]\":74.7,\"[15,2,2]\":77.5,\"[15,3,1]\":69.1,\"[15,3,2]\":77.0,\"[15,4,1]\":68.8,\"[15,4,2]\":76.5,\"[15,5,1]\":47.5,\"[15,5,2]\":78.5,\"[15,6,1]\":71.8,\"[15,6,2]\":70.2,\"[15,7,1]\":75.0,\"[15,7,2]\":82.0,\"[16,1,1]\":69.2,\"[16,1,2]\":77.8,\"[16,2,1]\":64.8,\"[16,2,2]\":82.9,\"[16,3,1]\":73.7,\"[16,3,2]\":76.4,\"[16,4,1]\":61.9,\"[16,4,2]\":70.9,\"[16,5,1]\":55.8,\"[16,5,2]\":58.7,\"[16,6,1]\":47.0,\"[16,6,2]\":82.2,\"[16,7,1]\":67.0,\"[16,7,2]\":81.0,\"[17,1,1]\":74.7,\"[17,1,2]\":77.3,\"[17,2,1]\":68.4,\"[17,2,2]\":75.3,\"[17,3,1]\":74.7,\"[17,3,2]\":77.4,\"[17,4,1]\":69.2,\"[17,4,2]\":72.8,\"[17,5,1]\":71.0,\"[17,5,2]\":77.2,\"[17,6,1]\":72.5,\"[17,6,2]\":79.0,\"[17,7,1]\":58.0,\"[17,7,2]\":71.0,\"[18,1,1]\":78.9,\"[18,1,2]\":79.7,\"[18,2,1]\":76.1,\"[18,2,2]\":68.9,\"[18,3,1]\":77.2,\"[18,3,2]\":79.3,\"[18,4,1]\":69.0,\"[18,4,2]\":75.9,\"[18,5,2]\":78.6,\"[18,6,1]\":68.0,\"[18,6,2]\":79.0,\"[18,7,1]\":63.0,\"[18,7,2]\":81.0,\"[19,1,1]\":79.5,\"[19,1,2]\":80.1,\"[19,2,1]\":70.9,\"[19,2,2]\":75.5,\"[19,3,1]\":74.4,\"[19,3,2]\":76.2,\"[19,4,1]\":81.5,\"[19,4,2]\":80.0,\"[19,5,1]\":71.0,\"[19,5,2]\":60.2,\"[19,6,1]\":73.0,\"[19,6,2]\":77.0,\"[19,7,2]\":60.0,\"[20,1,1]\":80.2,\"[20,1,2]\":81.2,\"[20,2,1]\":80.5,\"[20,2,2]\":78.7,\"[20,3,1]\":68.0,\"[20,3,2]\":76.0,\"[20,4,2]\":81.4,\"[20,5,1]\":41.0,\"[20,5,2]\":87.0,\"[20,6,1]\":73.0,\"[20,6,2]\":70.0,\"[21,1,1]\":81.3,\"[21,1,2]\":81.9,\"[21,2,1]\":80.9,\"[21,2,2]\":78.8,\"[21,3,1]\":76.0,\"[21,3,2]\":83.0,\"[21,4,1]\":77.3,\"[21,4,2]\":81.2,\"[21,5,1]\":81.0,\"[21,5,2]\":73.3,\"[21,6,1]\":79.0,\"[21,6,2]\":81.0,\"[21,7,1]\":77.0,\"[22,1,1]\":81.5,\"[22,1,2]\":81.7,\"[22,2,1]\":74.6,\"[22,2,2]\":74.2,\"[22,3,1]\":80.0,\"[22,3,2]\":71.7,\"[22,4,1]\":76.8,\"[22,4,2]\":83.0,\"[22,5,2]\":61.7,\"[22,7,2]\":80.5,\"[23,1,1]\":83.0,\"[23,1,2]\":81.6,\"[23,2,1]\":69.5,\"[23,2,2]\":70.0,\"[23,3,1]\":83.7,\"[23,3,2]\":79.0,\"[23,4,2]\":72.0,\"[23,5,1]\":78.0}}\n"
+     ]
+    }
+   ],
+   "source": [
+    "# getting count number for each vehicle class, avarage speed for each class and direction\n",
+    "\n",
+    "import datetime\n",
     "\n",
-    "    \n",
-    "    \n",
     "\n",
+    "year = \"2020\"\n",
+    "areaID = \"01\"\n",
+    "lamID = \"101\"\n",
+    "shortYear = year[-2:]\n",
+    "startDayNumber = \"8\"\n",
+    "endDayNumber = \"\"\n",
+    "vehicle_class =[4]\n",
     "\n",
+    "output = pd.DataFrame()\n",
     "\n",
     "\n",
     "\n",
-    "#print(\"\\n-----------------------------------------\\n\")\n",
+    "if(len(endDayNumber)!=0):\n",
+    "    start = int(startDayNumber)\n",
+    "    end = int(endDayNumber)\n",
+    "    duration = (end+1) - start\n",
+    "    print(duration)\n",
+    "    \n",
+    "    \n",
+    "    \n",
+    "    vehicleTotalNumberInOneDay = pd.DataFrame()\n",
+    "    date = []\n",
+    "    \n",
+    "    for x in range(duration):\n",
+    "        print(start)\n",
+    "        url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{start}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, start=start)\n",
+    "        csv = pd.read_csv(url, names=names, sep = \";\")\n",
+    "        \n",
+    "        #getting the day from sequectial day number\n",
+    "        dt = datetime.datetime(int(year),1,1)\n",
+    "        dtdelta = datetime.timedelta(days=(start-1))\n",
+    "        dt = dt + dtdelta\n",
+    "        dt=dt.strftime('%d.%m.%Y')\n",
+    "        date.append(dt)\n",
+    "        print(date)\n",
+    "        \n",
+    "        \n",
+    "        #temp = csv.groupby([\"vehicle_class\"])[\"vehicle_class\"].count()\n",
+    "        temp = csv.groupby([\"vehicle_class\",\"direction\"]).agg({\"vehicle_class\":\"count\", \"speed_km/h\":\"mean\"})\\\n",
+    "        .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})\n",
+    "        \n",
+    "        #changing indexes to create uniqe indexs containing date and vehicle class\n",
+    "        indexv = temp.index.values.tolist() \n",
+    "        newindex = []\n",
+    "        for i in range(len(indexv)):\n",
+    "            a= list(indexv[i])\n",
+    "            a[0] = dt+\"_\"+str(a[0])\n",
+    "            newindex.append(tuple(a))\n",
+    "              \n",
+    "        #print(newindex)\n",
+    "        \n",
+    "        \n",
+    "        #setting the new index to dataframe\n",
+    "        temp[\"date_vehicleclass_direction\"]= newindex\n",
+    "        temp.set_index(\"date_vehicleclass_direction\", inplace= True)\n",
+    "        \n",
+    "        vehicleTotalNumberInOneDay= vehicleTotalNumberInOneDay.append(temp)\n",
+    "        \n",
+    "        #print(vehicleTotalNumberInOneDay)\n",
+    "        \n",
+    "\n",
+    "        \n",
+    "        start +=1\n",
+    "        \n",
+    "    \n",
+    "    output= vehicleTotalNumberInOneDay\n",
+    "    #output[\"date\"] = date\n",
+    "    #output.set_index(\"date\", inplace = True)\n",
+    "    print(output)\n",
+    "    outputJson = output.to_json()\n",
+    "    print(outputJson)\n",
+    "\n",
+    "else:\n",
+    "    print(\"in else!\")\n",
+    "    url = \"https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{startDayNumber}.csv\".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, startDayNumber=startDayNumber)\n",
+    "    \n",
+    "    allData = pd.read_csv(url, names=names, sep = \";\")\n",
+    "    #df = allData[allData[\"vehicle_class\"]==vehicle_class[0]]\n",
+    "    \n",
+    "    # getting date from day number\n",
+    "    dt = datetime.datetime(int(year),1,1)\n",
+    "    dtdelta = datetime.timedelta(days=int(startDayNumber))\n",
+    "    dt = dt + dtdelta\n",
+    "    dt=dt.strftime('%d.%m.%Y')\n",
+    "    print(dt)\n",
+    "    \n",
+    "    df = allData.groupby([\"hour\",\"vehicle_class\",\"direction\"]).agg({\"vehicle_class\": \"count\", \"speed_km/h\":\"mean\"})\\\n",
+    "         .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})\n",
+    "    df['avg_speed_km_h'] = df['avg_speed_km_h'].astype(float).round(1)\n",
+    "    print(df.head(25))\n",
+    "    \n",
+    "    outjson = df.to_json()\n",
+    "    print(outjson)\n",
+    "    \n",
     "\n",
+    "#print(\"\\n-----------------------------------------\\n\")\n",
     "\n",
     "#output.plot()\n",
     "#plt.show()"
diff --git a/Tavara- raskaan liikenne/python/cars/lamData.py b/Tavara- raskaan liikenne/python/cars/lamData.py
new file mode 100644
index 0000000000000000000000000000000000000000..d35a70c43074fc17552444b2f91f0c2a6f947b83
--- /dev/null
+++ b/Tavara- raskaan liikenne/python/cars/lamData.py	
@@ -0,0 +1,88 @@
+import datetime
+import pandas as pd
+import numpy as np
+import sys
+import math
+
+#argument should be given in following sequence
+year = sys.argv[1]
+areaID = sys.argv[2]
+lamID = sys.argv[3]
+startDayNumber = sys.argv[4]
+endDayNumber = sys.argv[5]
+#vehicle_class =sys.argv[6]
+
+names = ["point_d", "Year", "day_number", "hour", "minute", "second", "100th_of_a_second", "length_m","lane", "direction", "vehicle_class", "speed_km/h", "faulty_0=valid_1=incorrect", "total_time", "interval","jonoalku"]
+shortYear = year[-2:]
+output = pd.DataFrame()
+
+
+check =  math.isnan(float(endDayNumber))
+if(check == False):
+
+    start = int(startDayNumber)
+    end = int(endDayNumber)
+    duration = (end+1) - start
+
+    vehicleTotalNumberInOneDay = pd.DataFrame()
+    date = []
+    day = start
+    for x in range(duration):
+        
+        url = "https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{day}.csv".format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, day=day)
+        csv = pd.read_csv(url, names=names, sep = ";",error_bad_lines=False)
+        
+        #getting the day from sequectial day number
+        dt = datetime.datetime(int(year),1,1)
+        dtdelta = datetime.timedelta(days=(day-1))
+        dt = dt + dtdelta
+        dt=dt.strftime('%d.%m.%Y')
+        date.append(dt)
+        
+        #temp = csv.groupby(["vehicle_class"])["vehicle_class"].count()
+        temp = csv.groupby(["vehicle_class","direction"]).agg({"vehicle_class":"count", "speed_km/h":"mean"})\
+        .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})
+        
+        #changing indexes to create uniqe indexs containing date and vehicle class
+        indexv = temp.index.values.tolist() 
+        newindex = []
+        for i in range(len(indexv)):
+            a= list(indexv[i])
+            ind = dt+"_"+str(a[0])+"_"+str(a[1])
+            newindex.append(ind)
+
+        #setting the new index to dataframe
+        temp["date_vehicleclass_direction"]= newindex
+        temp.set_index("date_vehicleclass_direction", inplace= True)
+        vehicleTotalNumberInOneDay= vehicleTotalNumberInOneDay.append(temp)
+
+        day +=1
+        
+    
+    output= vehicleTotalNumberInOneDay
+    outputJson = output.to_json()
+    print(outputJson)
+
+#data for only one day
+else:
+    url = "https://aineistot.vayla.fi/lam/rawdata/{year}/{areaID}/lamraw_{lamID}_{shortYear}_{startDayNumber}.csv"\
+    .format(year=year,areaID=areaID,lamID=lamID,shortYear = shortYear, startDayNumber=startDayNumber)
+    
+    allData = pd.read_csv(url, names=names, sep = ";",error_bad_lines=False)
+
+    # getting date from day number
+    dt = datetime.datetime(int(year),1,1)
+    dtdelta = datetime.timedelta(days=int(startDayNumber))
+    dt = dt + dtdelta
+    dt=dt.strftime('%d.%m.%Y')
+    
+    # df = allData.groupby(["hour","vehicle_class","direction"]).agg({"vehicle_class": "count", "speed_km/h":"mean"})\
+    #     .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})
+    
+    df = allData.groupby(["hour","vehicle_class"]).agg({"vehicle_class": "count", "speed_km/h":"mean"})\
+         .rename(columns={'vehicle_class':'vehicle_number','speed_km/h':'avg_speed_km_h'})
+    df['avg_speed_km_h'] = df['avg_speed_km_h'].astype(float).round(1)
+    outjson = df.to_json()
+    print(outjson)
+    
+sys.stdout.flush()
\ No newline at end of file