Guest User

Untitled

a guest
Dec 16th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.22 KB | None | 0 0
  1. const readline = require('readline')
  2. const csv = require('csvtojson')
  3. const ml = require('shaman')
  4. const rl = readline.createInterface({
  5. input: process.stdin,
  6. output: process.stdout
  7. })
  8. const csvFilePath = './economicdata1970-2016-ARG.csv'
  9.  
  10. // Let's get it (SKEREEE)
  11. csv()
  12. .fromFile(csvFilePath)
  13. .then(obj => dressData(obj))
  14. .then(([X, Y]) => performRegression(X, Y))
  15.  
  16. function dressData(csvData) {
  17. const header = Object.keys(csvData[0]).filter(
  18. // remove String fields, this is regression!
  19. i =>
  20. i !== 'Year' &&
  21. i !== 'ISO_Code' &&
  22. i !== 'Countries' &&
  23. i !== 'SUMMARY INDEX'
  24. )
  25.  
  26. let X = [],
  27. Y = []
  28.  
  29. csvData.forEach(row => {
  30. let k = []
  31. // header.forEach(h => {
  32. // k.push(f(row[h]))
  33. // })
  34. k.push(f(row['Government enterprises and investment']))
  35. k.push(f(row['Government Consumption']))
  36. X.push(k)
  37. Y.push(f(row['SUMMARY INDEX']))
  38. })
  39.  
  40. return [X, Y]
  41. }
  42. function performRegression(X, Y) {
  43. console.log(Y)
  44.  
  45. const lr = new ml.LinearRegression(X, Y, {
  46. algorithm: 'GradientDescent',
  47. debug: true
  48. })
  49. lr.train(err => {
  50. if (err) console.log(err)
  51. else predictOutput(lr)
  52. })
  53. }
  54.  
  55. function f(s) {
  56. // return parseFloat(s)
  57. if (!s) return 0
  58. return parseFloat(s)
  59. }
  60.  
  61. function predictOutput(lr) {
  62. rl.question(
  63. 'Enter input "X,X,X" for prediction (Press Ctrl + C to exit)',
  64. answer => {
  65. console.log(f(answer))
  66.  
  67. // const response = answer.split(',').map(i => Number(i))
  68. // HARDCODED
  69. const response = [
  70. 4,
  71. 5.34,
  72. 21.86,
  73. 6.05,
  74. 15,
  75. 6,
  76. f(answer),
  77. 7,
  78. 35,
  79. 1,
  80. 58,
  81. 4,
  82. 5.35,
  83. 3.69,
  84. 2.93,
  85. 4.26,
  86. 7.5,
  87. 3.33,
  88. 3.63,
  89. 6.86,
  90. 3.39,
  91. 4.13,
  92. 0.77,
  93. 3.9,
  94. 5.23,
  95. 23.83,
  96. 5.22,
  97. 11.94,
  98. 2,
  99. 40,
  100. 10,
  101. 5.61,
  102. 6.06,
  103. 5.91,
  104. 7.26,
  105. 13.7,
  106. 5.94,
  107. 10.14,
  108. 6.42,
  109. 4.47,
  110. 5.16,
  111. 4.81,
  112. 0,
  113. 5.36,
  114. 0.77,
  115. 7.97,
  116. 4.7,
  117. 3.98,
  118. 5,
  119. 4.26,
  120. 7,
  121. 5.42,
  122. 2.77,
  123. 2.19,
  124. 3.43,
  125. 10,
  126. 2.52,
  127. 10,
  128. 5.15,
  129. 2.4,
  130. 6.67,
  131. 9.12,
  132. 3.26,
  133. 5.25,
  134. 6.51,
  135. 5.54,
  136. 5.37
  137. ]
  138. console.log('lenght of answer', response.length)
  139.  
  140. const prediction = lr.predict([5.34, f(answer)])
  141. console.log(`At X = ${answer}, y = ${prediction}`)
  142. predictOutput(lr)
  143. }
  144. )
  145. }
Add Comment
Please, Sign In to add comment