"""
Pada proses ini saya akan melakukan visualisasi data namun hasil visualisasinya akan ditampilkan pada workbook di excel bukan pada output python.
"""
"""
# Bekerja dengan Python dan Excel
"""
"""
Proses pertama adalah melakukan instalasi library openpyxl yang merupakan libarary yang dapat memproses file excel baik membaca ataupun menulis (read/write) dan import library yang dibutuhkan seperti pandas serta modul dari openpyxl
"""
pip install openpyxl
from openpyxl import load_workbook, Workbook
from openpyxl.chart import BarChart, Series, Reference
import pandas as pd
"""
# Import File
"""
# define buat variable file
file1 = '../input/scode2/jumlah-penduduk-kota-bandung.csv'
file2 = '../input/scode2/luas-wilayah-menurut-kecamatan-di-kota-bandung-2017.csv'
file_akhir = 'kepadatan_penduduk.xlsx'
"""
# Seluruh proses disimpan dalam class kepadatan_penduduk
"""
# define class buat proses
class kepadatan_penduduk:
    # fungsi modul
    def __init__(self, file1, file2, file3):
        self.file1 = file1
        self.file2 = file2
        self.file_akhir = file3
        
    # fungsi proses
    def proses_data(self):
        # membaca data csv
        df1 = pd.read_csv(self.file1)
        df2 = pd.read_csv(self.file2)
        # rename kolom kecamatan
        df1.rename(columns={'Kecamatan  ': 'kecamatan'},inplace=True)
        df2.rename(columns={'Nama Kecamatan': 'kecamatan'},inplace=True)
        # menyamakan isi kolom / buat lowercase dan hapus spasi
        df1['tags'] = df1['kecamatan'].apply(lambda x: x.lower().replace(" ",""))
        df2['tags'] = df2['kecamatan'].apply(lambda x: x.lower().replace(" ",""))
        # merge table
        df = pd.merge(df1, df2, on='tags')
        # mencari nilai kepadatan
        list_hasil = []
        for index in range(0, len(df.index)):
            list_hasil.append(int(df.iloc[index,2])/int(df.iloc[index,5])*100)
            
        df['kepadatan'] = list_hasil
        df_akhir = df[['kecamatan_x', 'kepadatan']]
        
        # masukkan pada file excel
        try:
            df_akhir.to_excel(self.file_akhir, index=False)
            print('berhasil')
        except:
            ('gagal')
        
        self.index = index
        #print(df_akhir)
    # fungsi visualisasi
    def visualisasi(self):
        wb = load_workbook(filename=self.file_akhir)
        ws = wb.active
        
        chart = BarChart()
        chart.type = "col"
        chart.style = 5
        chart.title = "Kepadatan Penduduk Kota Bandung"
        chart.y_axis.title = 'Jumlah Pendidik per 100m2'
        chart.x_axis.title = 'Kecamatan'
        
        data = Reference(ws, min_col=2, min_row=1, max_row=self.index, max_col=2)
        cats = Reference(ws, min_col=1, min_row=2, max_row=self.index)
        chart.height = 10
        chart.weight = 30
        chart.add_data(data, titles_from_data=True)
        chart.set_categories(cats)
        ws.add_chart(chart, "D2")
        
        wb.save(self.file_akhir)
"""
melakukan visualisasi dan print 'Berhasil' jika proses berjalan dan dapat menampilkan hasil yang sesuai
"""
data = kepadatan_penduduk(file1, file2, file_akhir)
data.proses_data()
data.visualisasi()