Cleaning Currency

By | January 15, 2021
1,642 Views

Sinopsis

Format currency adalah hal umum yang sering dijumpai dalam pengolahan data berbasis excel karena memudahkan bagi user untuk memisahkan nilai nominal yang besar. Penggunaan format currency yang digunakan oleh Indonesia dan Amerika itu berbeda dalam seperator ribuan dan separator desimal.  Misalkan dalam format Currency Amerika untuk nominal sepuluh ribu lima ratus dalam excel ditulis $ 10,500.00 sedangkan dalam format Indonesia Rp 10.500,00. Postingan kali ini membahas pertanyaan email dari pembeli buku saya di buku-belajar-mudah-python. Bagaimana mengolah data dari CSV/Excel yang mempunyai format currency serta menampilkan dalam bentuk grafik serta diberikan keterangan seperti contoh gambar diatas.

Mari kita bahas satu-persatu mulai dari Setting Separator di Excel dilanjutkan Pengolahan Data di Pandas.

Setting Separator di Excel

Aplikasi excel secara default menggunakan separator ribuan/thousand berupa tanda koma (american style) yang berbeda dengan format indonesia, untuk settingnya cukup mudah yaitu File -> Options -> Advanced  maka perhatikan options berikut.
Kamu bisa ubah ke format Indonesia yaitu Decimal Separator berupa koma dan thousands separator berupa titik, berikut hasilnya menggunakan excel format indonesia.

Cleaning Up Currency

Kembali pada persoalannya yaitu cleaning up currency atau membersihkan format mata uang menggunakan Pandas dikarenakan didalam excel mempunyai mekanisme encoding yang sangat baik sehingga bila dijumpai seperti berikut.
maka library Pandas pun akan menyesuaikan sehingga separator dan simbol mata uang akan dihilangkan
Akan berbeda jika file excel tersebut di export ke CSV ataupun kita mendowload sebuah file berbasis CSV yang mengandung format mata uang seperti berikut.
File diatas adalah hasil download dari www.investing.com untuk saham UNVR periode harian dengan format Indonesia. Bila menggunakan Pandas dengan kode berikut
import pandas as pd
file ='Data Historis UNVR.csv'

data = pd.read_csv(file)
print(data.head())
print(data.dtypes)

Hasilnya akan dianggap sebagai nilai desimal puluhan yang seharusnya bernilai 42.250 atau 42000 hanya bernilai 42.25 saja

      Tanggal  Terakhir  Pembukaan  Tertinggi  Terendah   Vol. Perubahan%
0  06/12/2019    42.250      42.10      42.30     42.00  1,33M      0,24%
1  05/12/2019    42.150      42.00      42.50     42.00  1,00M      0,36%
2  04/12/2019    42.000      42.60      42.60     41.95  1,69M     -1,58%
3  03/12/2019    42.675      42.65      42.80     42.10  1,32M     -0,41%
4  02/12/2019    42.850      41.80      42.85     41.80  1,98M      2,51%
Tanggal        object
Terakhir      float64
Pembukaan     float64
Tertinggi     float64
Terendah      float64
Vol.           object
Perubahan%     object
dtype: object

Oleh karena hal tersebut, pada saat read nya perlu dberikan opsi object

import pandas as pd
file ='Data Historis UNVR.csv'

data = pd.read_csv(file, dtype=object)
print(data.head())
print(data.dtypes)

hasilnya

      Tanggal Terakhir Pembukaan Tertinggi Terendah   Vol. Perubahan%
0  06/12/2019   42.250    42.100    42.300   42.000  1,33M      0,24%
1  05/12/2019   42.150    42.000    42.500   42.000  1,00M      0,36%
2  04/12/2019   42.000    42.600    42.600   41.950  1,69M     -1,58%
3  03/12/2019   42.675    42.650    42.800   42.100  1,32M     -0,41%
4  02/12/2019   42.850    41.800    42.850   41.800  1,98M      2,51%
Tanggal       object
Terakhir      object
Pembukaan     object
Tertinggi     object
Terendah      object
Vol.          object
Perubahan%    object
dtype: object
Kemudian lakukan replace yaitu menghilangkan tanda titik pada Kolom Terakhir; Pembukaan; Tertinggi; dan Terendah  serta mengubahnya dari object kedalam double sehingga kita bisa membuat plot grafik untuk harga Terakhir serta Mean nya.
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np


file ='Data Historis UNVR.csv'


data = pd.read_csv(file,dtype=object)
print(data.head())


keterangan_y = list(data['Terakhir'])


data['Terakhir']=data['Terakhir'].str.replace('.','')
data['Pembukaan']=data['Pembukaan'].str.replace('.','')
data['Tertinggi']=data['Tertinggi'].str.replace('.','')
data['Terendah']=data['Terendah'].str.replace('.','')



rerata = np.mean(np.array(data['Terakhir'],dtype=np.double))
rerata = np.ones([len(data['Terakhir'])])*rerata


print(data.head())

fig, ax = plt.subplots(1,1) 
ax.plot(np.array(data['Terakhir'],dtype=np.double))
ax.plot(rerata)


# Set ticks labels for x-axis
ax.set_xticklabels(list(data['Tanggal']), rotation=45, fontsize=12)
ax.set_yticklabels(keterangan_y, rotation=0, fontsize=12)

ax.grid('on')
ax.legend(['Harga Terakhir','Rerata'])
ax.set_xlabel('Tanggal dd/mm/yyyy')
ax.set_ylabel('Harga Rp.')
ax.set_title('Harga Saham UNVR Harian')

Hasil akan tampil sebagai berikut

      Tanggal Terakhir Pembukaan Tertinggi Terendah   Vol. Perubahan%
0  06/12/2019   42.250    42.100    42.300   42.000  1,33M      0,24%
1  05/12/2019   42.150    42.000    42.500   42.000  1,00M      0,36%
2  04/12/2019   42.000    42.600    42.600   41.950  1,69M     -1,58%
3  03/12/2019   42.675    42.650    42.800   42.100  1,32M     -0,41%
4  02/12/2019   42.850    41.800    42.850   41.800  1,98M      2,51%
      Tanggal Terakhir Pembukaan Tertinggi Terendah   Vol. Perubahan%
0  06/12/2019    42250     42100     42300    42000  1,33M      0,24%
1  05/12/2019    42150     42000     42500    42000  1,00M      0,36%
2  04/12/2019    42000     42600     42600    41950  1,69M     -1,58%
3  03/12/2019    42675     42650     42800    42100  1,32M     -0,41%
4  02/12/2019    42850     41800     42850    41800  1,98M      2,51%

Sehingga kunci replace() dapat digunakan untuk keperluan yang lainnya bila kamu inginkan sesuai dengan kasus yang kamu temui.