84 lines
3.9 KiB
Python
84 lines
3.9 KiB
Python
import random
|
|
import sys
|
|
from pathlib import Path
|
|
import numpy as np
|
|
import subprocess
|
|
import importlib
|
|
import codewars_test
|
|
import pandas as pd
|
|
|
|
# Update paths and filename
|
|
path_answer = "/content/" # changed
|
|
filename = "answer_chapter2_experiments2.py" # changed
|
|
|
|
# Import the answer module
|
|
pc = importlib.import_module(filename[:-3], ".")
|
|
cmd = subprocess.run([sys.executable, f"{path_answer}{filename}"], capture_output=True) # changed
|
|
|
|
@codewars_test.describe("Chapter 2 | Experiments 2")
|
|
def fixed_tests():
|
|
|
|
@codewars_test.it("1. Test Load Data")
|
|
def test_load_data():
|
|
print("========================================================================")
|
|
|
|
# Assuming expected columns are "Customer ID", "Age" and "Total Spent (USD)"
|
|
expected_columns = ['BOROUGH', 'NEIGHBORHOOD', 'BUILDING CLASS CATEGORY',
|
|
'TAX CLASS AT PRESENT', 'BLOCK', 'LOT', 'EASE-MENT',
|
|
'BUILDING CLASS AT PRESENT', 'ADDRESS', 'APARTMENT NUMBER', 'ZIP CODE',
|
|
'RESIDENTIAL UNITS', 'COMMERCIAL UNITS', 'TOTAL UNITS',
|
|
'LAND SQUARE FEET', 'GROSS SQUARE FEET', 'YEAR BUILT',
|
|
'TAX CLASS AT TIME OF SALE', 'BUILDING CLASS AT TIME OF SALE',
|
|
'SALE PRICE', 'SALE DATE']
|
|
try:
|
|
codewars_test.assert_equals(list(pc.load_data().columns), expected_columns, "====> The URL of the dataset used is not appropriate; the columns in the dataset are different")
|
|
except Exception as e:
|
|
codewars_test.fail(f"====> Error loading data; There is a typo in the code: {str(e)}")
|
|
|
|
expected_rows = 84548
|
|
try:
|
|
codewars_test.assert_equals(len(pc.load_data()), expected_rows, "Please check the URL used again; the number of data points in the dataset is different")
|
|
except Exception as e:
|
|
codewars_test.fail(f"====> Error checking row count; There is a typo in the code: {str(e)}")
|
|
print("")
|
|
|
|
# Test data cleaning or processing (replace with your specific logic)
|
|
@codewars_test.it('2. Test Drop Columns')
|
|
def test_data_cleaning():
|
|
print("========================================================================")
|
|
try:
|
|
|
|
expected_columns= 16
|
|
codewars_test.assert_equals(len(pc.clean_columns().columns), expected_columns, "Dataframe should have expected rows")
|
|
except Exception as e:
|
|
codewars_test.fail(f"====> Error: {str(e)}")
|
|
print(" ")
|
|
|
|
@codewars_test.it('3. Test Clean Columns Name')
|
|
def test_clean_columns_name():
|
|
print("========================================================================")
|
|
|
|
expected_columns = ['BOROUGH', 'NEIGHBORHOOD', 'BUILDING_CLASS_CATEGORY',
|
|
'BUILDING_CLASS_AT_PRESENT', 'ADDRESS', 'APARTMENT_NUMBER', 'ZIP_CODE',
|
|
'RESIDENTIAL_UNITS', 'COMMERCIAL_UNITS', 'TOTAL_UNITS',
|
|
'LAND_SQUARE_FEET', 'GROSS_SQUARE_FEET', 'YEAR_BUILT',
|
|
'BUILDING_CLASS_AT_TIME_OF_SALE', 'SALE_PRICE', 'SALE_DATE']
|
|
try:
|
|
|
|
codewars_test.assert_equals(list(pc.clean_columns_name().columns), expected_columns, "====> Column names are not as expected; Check the clean_names function again.")
|
|
except Exception as e:
|
|
codewars_test.fail(f"====> Error: {str(e)}")
|
|
except AttributeError as e:
|
|
codewars_test.fail(f"====> Error: {str(e)}")
|
|
|
|
|
|
print(" ")
|
|
|
|
# @codewars_test.it("2. Test Print Clean Columns")
|
|
# def test_total_revenue():
|
|
# print("========================================================================")
|
|
# output_lines = cmd.stdout.decode().splitlines()
|
|
# codewars_test.assert_equals(bool(output_lines), True, '====> Error :Tidak Menampilkan nama-nama kolom menggunakan print()')
|
|
|
|
|
|
|