#!/usr/bin/env python
# coding: utf-8

# # [Mempersiapkan Library](https://academy.dqlab.id/main/livecode/293/560/2797)

# In[2]:


import pandas as pd  
import matplotlib.pyplot as plt  
import seaborn as sns  
from sklearn.preprocessing import LabelEncoder  
  
from kmodes.kmodes import KModes  
from kmodes.kprototypes import KPrototypes  
  
import pickle  
from pathlib import Path


# # [Membaca Data Pelanggan](https://academy.dqlab.id/main/livecode/293/560/2798)

# In[3]:


# import dataset  
df = pd.read_csv ("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/customer_segments.txt", sep="\t")  
  
# menampilkan data  
print(df.head())


# # [Melihat Informasi dari Data](https://academy.dqlab.id/main/livecode/293/560/2799)

# In[4]:


# Menampilkan informasi data  
df.info() 


# # [Eksplorasi Data Numerik](https://academy.dqlab.id/main/livecode/293/561/2803)

# In[5]:


import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='white')
plt.clf()
  
# Fungsi untuk membuat plot  
def observasi_num(features):  
    fig, axs = plt.subplots(2, 2, figsize=(10, 9))
    for i, kol in enumerate(features):
	    sns.boxplot(df[kol], ax = axs[i][0])
	    sns.distplot(df[kol], ax = axs[i][1])   
	    axs[i][0].set_title('mean = %.2f\n median = %.2f\n std = %.2f'%(df[kol].mean(), df[kol].median(), df[kol].std()))
    plt.setp(axs)
    plt.tight_layout()
    plt.show()  
  
# Memanggil fungsi untuk membuat Plot untuk data numerik  
kolom_numerik = ['Umur','NilaiBelanjaSetahun']
observasi_num(kolom_numerik)


# # [Eksplorasi Data Kategorikal](https://academy.dqlab.id/main/livecode/293/561/2804)

# In[7]:


import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='white')
plt.clf()
  
# Menyiapkan kolom kategorikal  
kolom_kategorikal = ['Jenis Kelamin','Profesi','Tipe Residen']  

# Membuat canvas
fig, axs = plt.subplots(3,1,figsize=(7,10)) 

# Membuat plot untuk setiap kolom kategorikal  
for i, kol in enumerate(kolom_kategorikal):  
    # Membuat Plot
    sns.countplot(df[kol], order = df[kol].value_counts().index, ax = axs[i])  
    axs[i].set_title('\nCount Plot %s\n'%(kol), fontsize=15)  
      
    # Memberikan anotasi  
    for p in axs[i].patches:  
        axs[i].annotate(format(p.get_height(), '.0f'),  
                        (p.get_x() + p.get_width() / 2., p.get_height()),  
                        ha = 'center',  
                        va = 'center',  
                        xytext = (0, 10),  
                        textcoords = 'offset points') 
          
    # Setting Plot  
    sns.despine(right=True,top = True, left = True)  
    axs[i].axes.yaxis.set_visible(False) 
    plt.setp(axs)
    plt.tight_layout()

# Tampilkan plot
plt.show()


# # [Standarisasi Kolom Numerik](https://academy.dqlab.id/main/livecode/293/562/2808)

# In[8]:


from sklearn.preprocessing import StandardScaler

kolom_numerik = ['Umur','NilaiBelanjaSetahun']

# Statistik sebelum Standardisasi
print('Statistik Sebelum Standardisasi\n')
print(df[kolom_numerik ].describe().round(1))

# Standardisasi
df_std = StandardScaler().fit_transform(df[kolom_numerik])

# Membuat DataFrame
df_std = pd.DataFrame(data=df_std, index=df.index, columns=df[kolom_numerik].columns)

# Menampilkan contoh isi data dan summary statistic
print('Contoh hasil standardisasi\n')
print(df_std.head())

print('Statistik hasil standardisasi\n')
print(df_std.describe().round(0))


# # [Konversi Kategorikal Data dengan Label Encoder](https://academy.dqlab.id/main/livecode/293/562/2809)

# In[10]:


from sklearn.preprocessing import LabelEncoder

# Inisiasi nama kolom kategorikal
kolom_kategorikal = ['Jenis Kelamin','Profesi','Tipe Residen']

# Membuat salinan data frame
df_encode = df[kolom_kategorikal].copy()


# Melakukan labelEncoder untuk semua kolom kategorikal
for col in kolom_kategorikal:
    df_encode[col] = LabelEncoder().fit_transform(df_encode[col])

# Menampilkan data
print(df_encode.head())


# # [Menggabungkan Data untuk Permodelan](https://academy.dqlab.id/main/livecode/293/562/2810)

# In[11]:


# Menggabungkan data frame
df_model = df_encode.merge(df_std, left_index = True, right_index=True, how = 'left')
print(df_model.head())


#!/usr/bin/env python
# coding: utf-8

# # [Mempersiapkan Library](https://academy.dqlab.id/main/livecode/293/560/2797)

# In[2]:


import pandas as pd  
import matplotlib.pyplot as plt  
import seaborn as sns  
from sklearn.preprocessing import LabelEncoder  
  
from kmodes.kmodes import KModes  
from kmodes.kprototypes import KPrototypes  
  
import pickle  
from pathlib import Path


# # [Membaca Data Pelanggan](https://academy.dqlab.id/main/livecode/293/560/2798)

# In[3]:


# import dataset  
df = pd.read_csv ("https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/customer_segments.txt", sep="\t")  
  
# menampilkan data  
print(df.head())


# # [Melihat Informasi dari Data](https://academy.dqlab.id/main/livecode/293/560/2799)

# In[4]:


# Menampilkan informasi data  
df.info() 


# # [Eksplorasi Data Numerik](https://academy.dqlab.id/main/livecode/293/561/2803)

# In[5]:


import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='white')
plt.clf()
  
# Fungsi untuk membuat plot  
def observasi_num(features):  
    fig, axs = plt.subplots(2, 2, figsize=(10, 9))
    for i, kol in enumerate(features):
	    sns.boxplot(df[kol], ax = axs[i][0])
	    sns.distplot(df[kol], ax = axs[i][1])   
	    axs[i][0].set_title('mean = %.2f\n median = %.2f\n std = %.2f'%(df[kol].mean(), df[kol].median(), df[kol].std()))
    plt.setp(axs)
    plt.tight_layout()
    plt.show()  
  
# Memanggil fungsi untuk membuat Plot untuk data numerik  
kolom_numerik = ['Umur','NilaiBelanjaSetahun']
observasi_num(kolom_numerik)


# # [Eksplorasi Data Kategorikal](https://academy.dqlab.id/main/livecode/293/561/2804)

# In[7]:


import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style='white')
plt.clf()
  
# Menyiapkan kolom kategorikal  
kolom_kategorikal = ['Jenis Kelamin','Profesi','Tipe Residen']  

# Membuat canvas
fig, axs = plt.subplots(3,1,figsize=(7,10)) 

# Membuat plot untuk setiap kolom kategorikal  
for i, kol in enumerate(kolom_kategorikal):  
    # Membuat Plot
    sns.countplot(df[kol], order = df[kol].value_counts().index, ax = axs[i])  
    axs[i].set_title('\nCount Plot %s\n'%(kol), fontsize=15)  
      
    # Memberikan anotasi  
    for p in axs[i].patches:  
        axs[i].annotate(format(p.get_height(), '.0f'),  
                        (p.get_x() + p.get_width() / 2., p.get_height()),  
                        ha = 'center',  
                        va = 'center',  
                        xytext = (0, 10),  
                        textcoords = 'offset points') 
          
    # Setting Plot  
    sns.despine(right=True,top = True, left = True)  
    axs[i].axes.yaxis.set_visible(False) 
    plt.setp(axs)
    plt.tight_layout()

# Tampilkan plot
plt.show()


# # [Standarisasi Kolom Numerik](https://academy.dqlab.id/main/livecode/293/562/2808)

# In[8]:


from sklearn.preprocessing import StandardScaler

kolom_numerik = ['Umur','NilaiBelanjaSetahun']

# Statistik sebelum Standardisasi
print('Statistik Sebelum Standardisasi\n')
print(df[kolom_numerik ].describe().round(1))

# Standardisasi
df_std = StandardScaler().fit_transform(df[kolom_numerik])

# Membuat DataFrame
df_std = pd.DataFrame(data=df_std, index=df.index, columns=df[kolom_numerik].columns)

# Menampilkan contoh isi data dan summary statistic
print('Contoh hasil standardisasi\n')
print(df_std.head())

print('Statistik hasil standardisasi\n')
print(df_std.describe().round(0))


# # [Konversi Kategorikal Data dengan Label Encoder](https://academy.dqlab.id/main/livecode/293/562/2809)

# In[10]:


from sklearn.preprocessing import LabelEncoder

# Inisiasi nama kolom kategorikal
kolom_kategorikal = ['Jenis Kelamin','Profesi','Tipe Residen']

# Membuat salinan data frame
df_encode = df[kolom_kategorikal].copy()


# Melakukan labelEncoder untuk semua kolom kategorikal
for col in kolom_kategorikal:
    df_encode[col] = LabelEncoder().fit_transform(df_encode[col])

# Menampilkan data
print(df_encode.head())


# # [Menggabungkan Data untuk Permodelan](https://academy.dqlab.id/main/livecode/293/562/2810)

# In[11]:


# Menggabungkan data frame
df_model = df_encode.merge(df_std, left_index = True, right_index=True, how = 'left')
print(df_model.head())


#!/usr/bin/env python # coding: utf-8 # # [Mempersiapkan Library](https://academy.dqlab.id/main/livecode/293/560/2797) # In[2]: # # [Membaca Data Pelanggan](https://academy.dqlab.id/main/livecode/293/560/2798) # In[3]: # import dataset # menampilkan data # # [Melihat Informasi dari Data](https://academy.dqlab.id/main/livecode/293/560/2799) # In[4]: # Menampilkan informasi data # # [Eksplorasi Data Numerik](https://academy.dqlab.id/main/livecode/293/561/2803) # In[5]: # Fungsi untuk membuat plot # Memanggil fungsi untuk membuat Plot untuk data numerik # # [Eksplorasi Data Kategorikal](https://academy.dqlab.id/main/livecode/293/561/2804) # In[7]: # Menyiapkan kolom kategorikal # Membuat canvas # Membuat plot untuk setiap kolom kategorikal # Membuat Plot # Memberikan anotasi # Setting Plot # Tampilkan plot # # [Standarisasi Kolom Numerik](https://academy.dqlab.id/main/livecode/293/562/2808) # In[8]: # Statistik sebelum Standardisasi # Standardisasi # Membuat DataFrame # Menampilkan contoh isi data dan summary statistic # # [Konversi Kategorikal Data dengan Label Encoder](https://academy.dqlab.id/main/livecode/293/562/2809) # In[10]: # Inisiasi nama kolom kategorikal # Membuat salinan data frame # Melakukan labelEncoder untuk semua kolom kategorikal # Menampilkan data # # [Menggabungkan Data untuk Permodelan](https://academy.dqlab.id/main/livecode/293/562/2810) # In[11]: # Menggabungkan data frame