✨ Adds cleaning dataset
This commit is contained in:
commit
1f150cb52c
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
.idea/
|
||||
.zed/
|
||||
.vscode/
|
||||
venv/
|
||||
|
||||
*.zip
|
||||
*.csv
|
||||
*.npy
|
166
clean.py
Normal file
166
clean.py
Normal file
@ -0,0 +1,166 @@
|
||||
import argparse
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import re
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="clean"
|
||||
)
|
||||
parser.add_argument("-i", "--input", required=True, help="Input dirty csv file")
|
||||
parser.add_argument("-o", "--output", default="clean", help="Output clean csv file")
|
||||
args = parser.parse_args()
|
||||
|
||||
# HEADERS: ["timestamp", "grade", "sex", "average grade", "math grade", "slovak grade", "english grade", "ses", "occupation", "living situation", "commute length", "sleep", "absence"]
|
||||
df = pd.read_csv(args.input)
|
||||
arr = df.to_numpy()
|
||||
clean = []
|
||||
|
||||
|
||||
# debugging purposes
|
||||
# print(list([arr[i][12] for i in range(1, 20)]))
|
||||
# exit(0)
|
||||
|
||||
|
||||
def parse_gpa(txt: str) -> float:
|
||||
num_regex = r"\d+([,.]\d*)?"
|
||||
eu_num_regex = r"\d+(,\d*)?"
|
||||
|
||||
txt = txt.strip()
|
||||
is_num = re.fullmatch(num_regex, txt) is not None
|
||||
if not is_num:
|
||||
print(f"ERROR: Couldn't parse gpa '{txt}'")
|
||||
ret = None
|
||||
while ret is None:
|
||||
fixed = input("Please enter fixed value: ")
|
||||
try:
|
||||
ret = float(fixed)
|
||||
except ValueError:
|
||||
pass
|
||||
return float(fixed)
|
||||
|
||||
is_eu = re.fullmatch(eu_num_regex, txt) is not None
|
||||
if is_eu:
|
||||
txt = txt.replace(",", ".")
|
||||
|
||||
return float(txt)
|
||||
|
||||
|
||||
def parse_ses(txt: str) -> int:
|
||||
if txt.startswith("Nižšia trieda"):
|
||||
return 0
|
||||
elif txt.startswith("Stredná trieda"):
|
||||
return 1
|
||||
elif txt.startswith("Vyššia trieda"):
|
||||
return 2
|
||||
else:
|
||||
print("ERROR: Couldn't determine SES")
|
||||
return 3
|
||||
|
||||
|
||||
def parse_occupation(txt: str) -> int:
|
||||
match txt:
|
||||
case "Pracujem 10 hodín a viac týždenne":
|
||||
return 0
|
||||
case "Pracujem menej ako 10 hodín týždenne":
|
||||
return 1
|
||||
case "Športujem na profesionálnej alebo polo-profesionálnej úrovni":
|
||||
return 2
|
||||
case "Robím muziku na profesionálnej alebo polo-profesionálnej úrovni":
|
||||
return 3
|
||||
case "Robím inú profesionálnu alebo polo-profesionálnu aktivitu":
|
||||
return 4
|
||||
case "Nie":
|
||||
return 5
|
||||
case _:
|
||||
print("ERROR: Couldn't determine occupation")
|
||||
return 6
|
||||
|
||||
|
||||
def parse_living(txt: str) -> int:
|
||||
match txt:
|
||||
case "Bývam s rodičmi":
|
||||
return 0
|
||||
case "Bývam s iným rodinným príslušníkom/čkou":
|
||||
return 1
|
||||
case "Bývam sám alebo so spolubývajúcim/ou":
|
||||
return 2
|
||||
case "Bývam na intráku":
|
||||
return 3
|
||||
case "Mám to inak":
|
||||
return 4
|
||||
case _:
|
||||
print("ERROR: Couldn't determine living")
|
||||
return 5
|
||||
|
||||
|
||||
def parse_commute(txt: str) -> int:
|
||||
match txt:
|
||||
case "Bývam na intráku":
|
||||
return 0
|
||||
case "Menej ako 15 minút":
|
||||
return 1
|
||||
case "Menej ako 30 minút":
|
||||
return 2
|
||||
case "Menej ako hodinu":
|
||||
return 3
|
||||
case "Viac ako hodinu":
|
||||
return 4
|
||||
case _:
|
||||
print("ERROR: Couldn't determine commute")
|
||||
return 5
|
||||
|
||||
|
||||
def parse_sleep(txt: str) -> int:
|
||||
match txt:
|
||||
case "9 hodín a viac":
|
||||
return 0
|
||||
case "7 až 9 hodín":
|
||||
return 1
|
||||
case "6 hodín a menej":
|
||||
return 2
|
||||
case _:
|
||||
print("ERROR: Coudln't determine sleep")
|
||||
return 3
|
||||
|
||||
|
||||
def parse_absence(txt: str) -> float:
|
||||
while True:
|
||||
try:
|
||||
return float(txt)
|
||||
except ValueError:
|
||||
print(f"ERROR: Couldn't parse absence '{txt}'")
|
||||
txt = input("Please enter fixed value: ")
|
||||
|
||||
|
||||
for i in range(1, len(df)):
|
||||
row = arr[i]
|
||||
current = []
|
||||
|
||||
grade = row[1]
|
||||
sex = row[2]
|
||||
gpa = row[3]
|
||||
math = row[4]
|
||||
slovak = row[5]
|
||||
english = row[6]
|
||||
ses = row[7]
|
||||
occupation = row[8]
|
||||
living = row[9]
|
||||
commute = row[10]
|
||||
sleep = row[11]
|
||||
absence = row[12]
|
||||
|
||||
current.append(grade)
|
||||
current.append(0 if sex == "Žena" else 1) # zena = 0, muz = 1
|
||||
current.append(parse_gpa(gpa))
|
||||
current.append(math)
|
||||
current.append(slovak)
|
||||
current.append(english)
|
||||
current.append(parse_occupation(occupation))
|
||||
current.append(parse_living(living))
|
||||
current.append(parse_commute(commute))
|
||||
current.append(parse_absence(absence))
|
||||
|
||||
clean.append(np.array(current))
|
||||
|
||||
print(f"Saving {len(arr)} rows")
|
||||
np.save(args.output, np.array(clean))
|
Loading…
x
Reference in New Issue
Block a user