Skip to content

Commit 9f3a7c5

Browse files
committed
rename file into single-feature.js
1 parent afc6e18 commit 9f3a7c5

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

src/single-feature.js

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
/**
2+
* Hasil pengamatan data:
3+
* - Data yang didapat berupa klasemen sederhana liga Inggris
4+
* - Kolom pertama berisi rangking tim
5+
* - Kolom kedua total gol dalam semusim
6+
* - Kolom ketiga berisi point yang didapat
7+
*/
8+
9+
/**
10+
* TANTANGAN!
11+
*
12+
* 1. Tentukan prediksi total gol berdasarkan jumlah shot on target
13+
* yang diketahui
14+
* 2.
15+
*/
16+
17+
18+
19+
///////////////////////////////////////////////////////////////////
20+
///////////////////////////////////////////////////////////////////
21+
///////////////////////////////////////////////////////////////////
22+
23+
24+
25+
import fs from 'fs'
26+
import csv from 'csv-parser'
27+
import Table from 'cli-table3'
28+
29+
30+
const standingsTable = new Table({
31+
head: ['Pos', 'Club', 'Played', 'Won', 'Draw', 'Lost', 'Points']
32+
})
33+
34+
const goalShotOnTargetTable = new Table({
35+
head: ['Pos', 'Club', 'Played', 'Goals', 'Shot on target']
36+
})
37+
38+
39+
const readFileAsync = (tableObj, filePath, textPreview) => {
40+
return new Promise((resolve, reject) => {
41+
fs.createReadStream(filePath)
42+
.pipe(csv())
43+
.on('data', (row) => tableObj.push(Object.values(row)))
44+
.on('end', () => {
45+
console.log(`\n\n${textPreview}`)
46+
console.log(tableObj.toString())
47+
resolve()
48+
})
49+
.on('error', (error) => reject(error))
50+
})
51+
}
52+
53+
54+
try {
55+
await Promise.all([
56+
readFileAsync(standingsTable, 'data/standings.csv', 'Klasemen Liga Inggris 2024/2025 Minggu ke-20'),
57+
readFileAsync(goalShotOnTargetTable, 'data/goals_shot_on_target.csv', 'Tabel Gol dan Shot On Target Liga Inggris Minggu ke-20')
58+
])
59+
} catch (error) {
60+
console.error('Error read file: ', error)
61+
}
62+
63+
64+
65+
/**
66+
* Menghitung total goal dan shot on target selama 20 minggu terakhir
67+
*
68+
* - Diketahui data goal berada di indeks ke-3
69+
* - Diketahui data shot on target berada di indeks ke-4
70+
*/
71+
72+
const totalGoal = goalShotOnTargetTable.reduce((sum, val) => sum + parseInt(val[3]), 0)
73+
const totalShotOnTarget = goalShotOnTargetTable.reduce((sum, val) => sum + parseInt(val[4]), 0)
74+
75+
console.log('\nTotal Gol: ', totalGoal)
76+
console.log('Total shot on target: ', totalShotOnTarget)
77+
78+
79+
80+
/**
81+
* Menghitung nilai kuadrat dari total shot on target
82+
*/
83+
84+
const squareTotalShotOnTarget = goalShotOnTargetTable.reduce((sum, val) => {
85+
return sum + val[4] ** 2
86+
}, 0)
87+
88+
console.log('Total data shot on target kuadrat: ', squareTotalShotOnTarget)
89+
90+
91+
/**
92+
* Menghitung nilai total dari goal kali shot on target
93+
*/
94+
const totalGoalTimesShotOnTarget = goalShotOnTargetTable.reduce((sum, val) => {
95+
return sum + parseInt(val[3]) * parseInt(val[4])
96+
}, 0)
97+
98+
console.log('Total data jumlah gol kali shot on target: ', totalGoalTimesShotOnTarget)
99+
100+
101+
102+
/**
103+
* Menghitung nilai total dari seluruh goal dengan seluruh shot on target
104+
*/
105+
const totalAllGoalTimesShotOnTarget = totalGoal * totalShotOnTarget
106+
107+
console.log('Total seluruh goal kali shot on target: ', totalAllGoalTimesShotOnTarget)
108+
109+
/**
110+
* Menentukan nilai b
111+
*/
112+
113+
const totalData = goalShotOnTargetTable.length
114+
console.log('Panjang data: ', totalData)
115+
116+
const b = (
117+
((totalData * totalGoalTimesShotOnTarget) - totalAllGoalTimesShotOnTarget) /
118+
((totalData * squareTotalShotOnTarget) - (totalShotOnTarget ** 2))
119+
)
120+
121+
console.log('\nNilai b: ', b)
122+
123+
124+
/**
125+
* Menentukan nilai a
126+
*/
127+
128+
const a = (totalGoal / totalData) - (b * (totalShotOnTarget / totalData))
129+
130+
console.log('Nilai a: ', a)
131+
132+
133+
134+
/**
135+
* Menentukan persamaan
136+
*
137+
* Persamaan dasar: f(x) = a + bx
138+
* x : nilai shot on target yang diketahui
139+
*/
140+
141+
const fx = (x) => a + (b * x)
142+
143+
// Versi teks
144+
console.log(`\nDidapatkan persamaan: ${a} + ${b}x`)
145+
146+
/**
147+
* Percobaan pengujian
148+
*
149+
* Menentukan perkiraan jumlah goal berdasarkan jumlah shot on target
150+
* - Jika shot on target berjumlah 130
151+
* - Jika shot on target berjumlah 234
152+
* - Jika shot on target berjumlah 87
153+
*/
154+
155+
console.log('\nTotal goal jika shot on target 130: ', fx(130))
156+
console.log('Total goal jika shot on target 234: ', fx(234))
157+
console.log('Total goal jika shot on target 87: ', fx(87))

0 commit comments

Comments
 (0)