Skip to content

Name: Geraldo Enrico Semen

Technical Test Data Analyst

Note: `Filing on Behalf of Someone': merupakan customer yang menggunakan layanan berdasarkan rekomendasi orang lain (as per email)

Disclaimer: Better view on light mode

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import csv
import plotly.express as px
from wordcloud import WordCloud
# Read the data
df= pd.read_csv('datasets/raw.csv')
df.head()

1. Preprocessing Steps

df.info()

1.1 Checking missing values

Pertama-tama dilakukan inspeksi terhadap data yang diberikan terlebih dahulu, untuk mengecek apa terdapat missing value atau tidak

df.isna().sum()

Ada sekitar 118 baris dengan missing value. Selanjutnya akan diinspeksi lebih lanjut apa masalahnya.

df_missing = df[df.isnull().any(axis=1)]
missing_indexes = df_missing.index.tolist()
df_missing

Error sepertinya pada kolom ticket, dimana terdapat nilai yang tidak konsisten atau tidak sesuai dengan format. Selanjutnya, akan di fix hal tersebut!

def fix_error(df, row_index):
    """
    Memproses dataframe dengan memisahkan string yang ada di kolom pertama.

    Parameters: 
        df (pd.DataFrame): dataframe yang akan diproses
        row_index (int): Index baris yang akan di cek
    Returns:
        pd.DataFrame: Dataframe baru yang telah di update
    """
    if df.iloc[row_index, 1:].isnull().all():
        # Split string di kolom ticket berdasarkan delimiter ",".
        # Set quotechar untuk menghindari lib csv membaca ',' yang ada di dalam tanda petik
        first_column_value = df.iloc[row_index, 0]
        split_values = next(csv.reader([str(first_column_value)], delimiter=',', quotechar='"'))
        
        # Update string yang sudah di split, assign ke kolom yang bersesuaian
        df.iloc[row_index, :len(split_values)] = split_values
    return df

# Apply the function only to the rows listed in missing_indexes
for i in missing_indexes:
    df_temp_cleaned = fix_error(df, i)

df_temp_cleaned.head()

Cek kembali df_temp_cleaned dengan index yang ada pada missing_indexes

df_temp_cleaned.loc[missing_indexes]
df_temp_cleaned.isna().sum()