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