<jupyter_start><jupyter_text>Import Module Library<jupyter_code>import pandas as pd
import numpy as np
from functools import reduce<jupyter_output><empty_output><jupyter_text>Membaca File Csv<jupyter_code>data_csv = pd.read_csv('./Data/data_train_us_trending_youtube.csv')
da = pd.DataFrame(data_csv)
da.head()<jupyter_output><empty_output><jupyter_text>Mengecek Jumlah Baris & Kolom<jupyter_code>da.shape<jupyter_output><empty_output><jupyter_text>Data Cleaning  Mencari Data Yang Null atau Nan Pada Seluruh Baris<jupyter_code>da.isnull()<jupyter_output><empty_output><jupyter_text>Mencari Kolom Yang Ada Data Nullnya<jupyter_code>da.isnull().any() # Bernilai True berarti ada data yang Null atau Nan
da.isnull().any().any() #bernilai false jika tidak memiliki nilai Nan
da.isnull().sum() # Mencari jumlah data yang Nan<jupyter_output><empty_output><jupyter_text>Drop Kolom Yang Tidak Digunakan<jupyter_code>column_drop = ['ratings_disabled','video_error_or_removed'] # Menghapus kolom ratings_disabled dan video_error_or_remmoved karana tidak digunakan
da.drop(column_drop, inplace = True, axis = 1)
da<jupyter_output><empty_output><jupyter_text>Mengatur Index Dataset<jupyter_code>da['video_id'].is_unique 
#Mencek apakah kolom video_id unik jika iya maka akan diganti menjadi index data set baru
#Jika hasil False maka tetap menggunakan index dataset pertama<jupyter_output><empty_output><jupyter_text>Melakukan Perbaikan Pada Kolom Tags<jupyter_code>def clean_tags(tags):
    
    if tags == 'nan':
        return 'NaN'
    if tags == '[none]':
        return 'NaN'

    if '|"' in tags:
        tags = tags[:tags.find('|"')]
    elif '"|"' in tags:
        tags = tags[:tags.find('"|"')]
    elif '|"' in tags:
        tags = tags[:tags.find('|"')]

    tags = '#' + tags[:]
        
    tags = list(map(str.lower, tags.split()))
    return '#'.join(tags)
    
da['tags'] = da['tags'].apply(clean_tags)
da.head(60)
da.head()<jupyter_output><empty_output><jupyter_text>Transformasi  Melakukan Grouping dan Penjumlahan  Menggroup sesuai kolom channel_title dan menjumlahan hasil likes yang didapatkan dari semua kontent youtubenya<jupyter_code>sum_likes = da.groupby('channel_title')['likes'].apply(sum).rename('total_likes').reset_index()
sum_likes<jupyter_output><empty_output><jupyter_text>Melakukan Marge atau Pengabungan Tabel<jupyter_code>da_new = pd.merge(da, sum_likes, how='left')
da_new<jupyter_output><empty_output><jupyter_text>Mencari Prosentase Likes Dari Semua Content<jupyter_code>da_new['pct_likes'] = da_new['likes'] / da_new['total_likes']
da_new['pct_likes'] = da_new['pct_likes'].apply(lambda x: format(x, '.2%'))

da_new<jupyter_output><empty_output><jupyter_text>Menggunakan Fungsi Transform()<jupyter_code>da['total_likes'] = da.groupby('channel_title')['likes'].transform('sum')
da<jupyter_output><empty_output><jupyter_text>Mencari Total Likes Yang > 1000<jupyter_code>like_lebih1k = da_new[da_new.groupby('channel_title')['total_likes'].transform('sum') > 1000]
like_lebih1k<jupyter_output><empty_output><jupyter_text>Menyimpan Olah Data Cleaning dan Transform Ke File Csv<jupyter_code>da_new.to_csv('./Data/hasilPertama.csv', index=True)
da_new1 = pd.read_csv('./Data/hasilPertama.csv')
da_new1<jupyter_output><empty_output><jupyter_text>Duplikasi Data<jupyter_code>def load_data(): 
    da_all = pd.read_csv('./Data/hasilPertama.csv')
    # Buat subset dengan slicing data
    return  da_all.loc[:, ['video_id','trending_date','title','channel_title','views','likes','dislikes','total_likes','pct_likes']].dropna()

# Load subset
da_new2 = load_data()
da_new2<jupyter_output><empty_output><jupyter_text>Pencarian Baris Duplikasi<jupyter_code>#Mencari duplikasi 1 kolom
da_new2.title.duplicated()
# Mencari duplikasi seluruh data
da_new2.duplicated()
# Mempertimbangkan kolom tertentu untuk mengidentifikasi duplikasi
da_new2.duplicated(subset=['trending_date','title','channel_title'])<jupyter_output><empty_output><jupyter_text>Penghitungan Duplikasi dan Non-Duplikasi<jupyter_code>da_new2.title.duplicated().sum()
da_new2.duplicated().sum()
da_new2.duplicated(subset=['title','channel_title']).sum()
da_new2.duplicated(subset=['trending_date','title','channel_title']).sum()
(~da_new2.duplicated()).sum() #data non-duplikasi<jupyter_output><empty_output><jupyter_text>Mengekstraksi Baris Duplikat dengan Menggunakan Loc<jupyter_code># Memungkinkan kita untuk melihat baris yang diidentifikasi oleh duplikasi()
da_new2.loc[da_new2.duplicated(), :]
da_new2<jupyter_output><empty_output><jupyter_text>Menentukan Data Duplikat Mana Yang Akan Ditandai Menggunakan Keep<jupyter_code># `keep` data yang pertama
da_new2.loc[da_new2.duplicated(keep='first'), :]
# 'keep' data yang terakhir
da_new2.loc[da_new2.duplicated(keep='last'), :]
# Opsi ketiga yang bisa kita gunakan keep=False
da_new2.loc[da_new2.duplicated(keep=False), :]<jupyter_output><empty_output><jupyter_text>Menghapus Baris Duplikasi<jupyter_code>da_new2
# Perhatikan jumlah baris, awalnya 40949 --> sekarang 40901
da_new3 = da_new2.drop_duplicates()
da_new3
da_new2.drop_duplicates(subset=['trending_date','title','channel_title'])<jupyter_output><empty_output><jupyter_text>Menyimpan Olah Data Cleaning dan Transform Ke File Csv Yang Terakhir<jupyter_code>da_new3.to_csv('./Data/hasilAkhir.csv', index=False)
da_akhir = pd.read_csv('./Data/hasilAkhir.csv')
da_akhir<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13040252272305694, 'fraction_numerical': 0.009645705805972918, 'mean_word_length': 8.296551724137931, 'pattern_counts': {'":': 0, '<': 85, '<?xml version=': 0, '>': 88, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '21', 'dir': 'jupyter-structured-clean-dedup', 'id': '583012', 'license': 'MIT', 'n_tokens_mistral': 2179, 'n_tokens_neox': 2124, 'n_words': 325, 'path': 'Minggu 3 Data Pre-processing/TugasMachineLearningTm03.ipynb', 'repo_name': 'TakayumAja/Machine-Learning-21221', 'size': '5391'}