Coder Social home page Coder Social logo

sharing-session---crawling-data-data-preparation's Introduction

Sharing Session Crawling data dan Data Preparation

Requirement

  1. Menginstall Anaconda3 / Jupyter notebook

  2. File PDF Untuk Crawling

  3. Menginstal Library Berikut Pada Anaconda Prompt

Cara Membuka Anaconda Promp :

Windows :

1.Click Start(Gambar Windows Pada Keyboard) 

2.Ketik "Anaconda Prompt"

3.Open Anaconda Prompt

macOS:

1.Buka Spotlight (Cmd+Space)

2.Ketik "Navigator"

3.Open Navigator

Reference : Dokumentasi Anaconda

  • Pandas
conda install -c anaconda pandas
  • Numpy
conda install -c anaconda numpy 
  • Tabula
conda install -c conda-forge tabula-py 

Daftar Isi

1. Crawling From PDF

Pada Sharing Session kali ini kita akan membahas tentan Crawling Data dengan sumber table dari pdf kedalam Format Csv

  • Input component
  • Output

component

Tahapan Eksekusi

Library

import pandas
import tabula
import glob
import os

Pada Sharing Session kali ini kita menggunakan beberapa Library python yaitu

  • Pandas Untuk Penanganan Data
  • tabula Untuk Crawling Data dari pdf
  • glob Untuk Mengambil File dari Direktori
  • os Untuk Menjalankan Perintah operating system pada python

Source Code

Pada tahapan pertama yang dilakukan adalah inisiasi variabel page yang ingin dicetak dan pembuatan direktori untuk menyimpan hasil output

namaprovinsi = "bali"
pagestart = 1
pageend = 25
if not os.path.exists('E:\Magang/new/'+namaprovinsi):
    os.makedirs('E:\Magang/new/'+namaprovinsi)

component

Setelah Direktori dibuat tahap selanjutnya adalah melakukan convert dari pdf ke csv page per page pada case ini output dari file csv per page disimpan didalam direktori E:\Magang/new/bali/

for x in range(pageend-pagestart+1):
    df = tabula.read_pdf("E:\Magang/new/bali.pdf", encoding='utf-8', spreadsheet=True, pages=pagestart+x)
    df.to_csv('E:\Magang/new/'+namaprovinsi+"/page"+str(pagestart+x)+'.csv', encoding='utf-8',index = False)
    print("Export page -----> "+str(pagestart+x))

print("export ke csv selesai")

component Keterangan :

Untuk membaca pdf menggunakan syntaq

tabula.read_pdf('path',spreadsheet=True,pages='pages_ingin_dikonversi')

  • path : merupakan lokasi file
  • spreadsheet = true : untuk membuat row pertama menjadi nama kolom
  • pages : merupakan halaman pada pdf yang ingin dibaca

Untuk dokumentasi lebih lanjut dapat menuju link berikut

File Csv Per Page akan tersimpan di direktori E:\Magang/new/bali/ ,Maka Langkah Selanjutnya adalah menggabungkan file csv tersebut menjadi 1. Disini kita perlu menyimpan terlebih dahulu semua nama csv yang ada dalam direketori dengan menggunakan library glob

path = r'E:\Magang/new/'+namaprovinsi
all_files = glob.glob(path + "/*.csv")

component

Selanjutnya kita membuka file csv tersebut dan menyimpannya dalam sebuah array. yang lalu akan disatukan menggunakan library pada pandas yaitu concat

li = []
for filename in all_files:
    df = pandas.read_csv(filename, index_col=None, header=0)
    li.append(df)
frame = pandas.concat(li, axis=0)

component

Berikut adalah output table yang disatukan

frame

component

Setelah terconvert nama column akan berantakan dan tidak urut, maka kira merename dan menata ulang column menggunakan pandas

frame = frame.rename(columns={"K O D E":"id_kelurahan","NAMA PROVINSI /\rKABUPATEN / KOTA":"kabupaten","LUAS\rWILAYAH\r(Km2)":"kecamatan","JUMLAH\rPENDUDUK\r(Jiwa)":"kelurahan","K E T E R A N G A N":"desa",})
kolomoutput = ['id_kelurahan', 'kabupaten', 'kecamatan','kelurahan','desa']
frame = frame.reindex(columns=kolomoutput)

component component

Ouput akan seperti berikut

component

Karena Masih ada id_kelurahan yang masih null, maka kita perlu melakukan filter pada menggunakan pandas

frame = frame[frame['id_kelurahan'].str.len() > 0]

component

Dan selanjutnya adalah tahap terakhir yaitu export ke csv

frame.to_csv('E:\Magang/bali.csv', index=False,sep = ",")

component

output akan seperti berikut

component

2. Cleansing and Formatting Data

Seringkali raw data yang diterima seorang Data Scientist tidak dapat langsung digunakan untuk modelling, untuk tipe data seperti ini maka diperlukan tahap pre-processing; salah satunya adalah data cleansing. Berikut ini contoh input dan output cleansing dan formating data Pulau Bali

Berikut ini untuk script cleansing menggunakan python :

23

import pandas as pd
import numpy as np

Keterangan :

  • import pandas as pd : mengimport library pandas as pd terlebih dahulu (pandas untuk membersihkan data mentah ke bentuk data yang dapat diolah)
  • import numpy as np : mengimport library numpy as pd terlebih dahulu (numpy untuk mengubah python ke pemodelan ilmiah)
provinsi = "Bali"

Untuk menyimpan nama kolom pada provinsi

Membaca file csv

df = pd.read_csv("E:\Magang/Bali.csv",sep=',')

Keterangan :

  • pd.read_csv : untuk membaca file dengan format CSV dan mengkonversinya menjadi pandas Dataframe
  • sep=' : parameter sep=',' sesuai separator pada file
  • contoh separator : 17
df.head()

Keterangan :

  • Untuk mendapatkan n baris data teratas;

  • Output :

    2

Mengisi data kosong pada kolom kabupaten dan kecamatan

   df['kabupaten'] = df['kabupaten'].fillna(method='ffill')
   df['kecamatan'] = df['kecamatan'].fillna(method='ffill')

Keterangan :

  • fillna untuk mengganti setiap NaN dengan nilai non -NaN pertama pada kolom yang sama di atasnya.

  • Output :

    19

Dokumentasi Terkait method Fillna di pandas bisa dilihat di link berikut Library Fillna Pandas

Meyeleksi kolom kelurahan sesuai dengan output yang diminta

df = df[df['id_kelurahan'].str.len() >10]

Keterangan :

  • str.len() untuk mendapatkan jumlah panjang sebuah string

  • Output :

    20

Menghilangkan integer pada kolom desa, kelurahan, kecamatan dan kabupaten

df['desa'] = df['desa'].str.replace('\r\d+', '')
df['kelurahan'] = df['kelurahan'].str.replace('\r\d+', '')
df['kecamatan'] = df['kecamatan'].str.replace('\r\d+', '')
df['kabupaten'] = df['kabupaten'].str.replace('\r\d+', '')

Keterangan :

  • str.replace ('\r\d+', '') untuk mengganti '\r' dan '\d+' dengan karakter lain menjadi ''(dimana \d+ adalah regex untuk nomor integer)

  • Output :

    5

Memasukkan kolom provinsi ke dalam dataframe

df['provinsi'] = provinsi

Keterangan :

  • untuk memasukkan kolom provinsi ke dalam variable

  • Output :

    6

Menambahkan kolom keterangan sesuai dengan Output yang diminta

df['keterangan'] = np.where(df['kelurahan'].isnull(), 'desa', 'kelurahan')

Keterangan :

  • np.where atau numpy.where adalah suatu kondisi mendapatkan entri dalam array yang memenuhi kondisi

  • isnull() adalah argumen ekspresi yang diperlukan adalah varian yang berisi ekpresi numerik atau ekspresi string.

  • Output :

    7

Mengubah nama kolom kelurahan dan kabupaten

df = df.rename(columns={"id_kelurahan":"id_dukcapil","kabupaten":"kabupaten_kota"})

Keterangan :

  • df.rename() untuk mengubah nama pada kolom tertentu (bisa lebih dari 1)

  • Output :

    8

Memisahkan string pada kolom id_prov, id_kab, id_kec, dan id_kel

df['id_prov'] = df['id_dukcapil'].str.split('.').str[:1]
df['id_kab'] = df['id_dukcapil'].str.split('.').str[:2]
df['id_kec'] = df['id_dukcapil'].str.split('.').str[:3]
df['id_kel'] = df['id_dukcapil'].str.split('.').str[:4]

Keterangan :

  • str.split(.) untuk memisahkan string di sekitar separator atau pembatas; disini separator berupa tanda "."

  • str[:n] untuk mengekstrak seluruh sekuensi string dari awal sampai ke-n

  • Output :

    9

Menggabungkan

df['id_prov'] = df['id_prov'].str.join('') 
df['id_kab'] = df['id_kab'].str.join('') 
df['id_kec'] = df['id_kec'].str.join('') 
df['id_kel'] = df['id_kel'].str.join('') 

Keterangan :

  • str.join() untuk mengembalikan string di mana elemen urutan telah bergabung dengan pemisah atau separator str; disini kami menggunakan pembatas ('')

  • Output :

    10

Menambahkan kolom kelurahan_desa

df['kelurahan_desa']=np.where(df['kelurahan'].isnull(), df['desa'], df['kelurahan'])

keterangan :

  • np.where(kondisi,benar,salah)

  • artinya jika kolom kelurahan berisi nilai null artinya "true" maka kolom kelurahan berisi data yang ada di kolom desa, tetapi jika "false" atau data tidak berisi null maka kolom kelurahan berisi data yang ada di kolom kelurahan.

  • Output :

    11

Menghapus kolom kelurahan dan desa

del df['kelurahan']
del df['desa']

Keterangan :

  • perintah del df [] untuk menghapus kolom; disini perintah tersebut untuk menghapus kolom kelurahan dan desa

  • Output :

    12

Menyimpan nama kolom

columnsTitles = ['id_dukcapil', 'id_prov', 'id_kab','id_kec','id_kel','provinsi','kabupaten_kota','kecamatan','kelurahan_desa','keterangan']

Keterangan :

  • ColumnsTitles berfungsi untuk menyimpan nama kolom yang mau diambil sesuai kebutuhan kita.

Mengurutkan nama kolom sesuai input yang diminta

df = df.reindex(columns=columnsTitles)

keterangan :

  • df.reindex() berfungsi untuk proses membuat ulang index pada tabel berdasarkan data yang terdapat dalam tabel

  • Output :

    13

Menyimpan dataframe ke dalam bentuk csv

df.to_csv('E:\Magang/sprint/outputprov_'+provinsi+'.csv', index=False)

Keterangan :

  • untuk menyimpan data frame dalam bentuk csv dan disimpan ke direktori kita 14

Fillna

Fillna adalah fungsi pada library pandas untuk mengisi baris yang null dengan nilai lain

component

Tabel diatas akan diolah dengan fillna dengan code berikut :

df['kabupaten'] = df['kabupaten'].fillna(0) #fillna Menggunakan  0
df['kecamatan'] = df['kecamatan'].fillna(method='ffill') #fillna Menggunakan Method 'ffill'

df['kelurahan'] = df['kelurahan'].fillna(value=77, limit=3) #fillna Menggunakan Values

Sehingga Outputnya Adalah Seperti Berikut :

component

Keterangan :

Pada fungsi fillna mempunyai beberapa metode yaitu :

  • pada kolom kabupaten menggunakan method 0 sehingga membuat Tabel yang Null/Nan Menjadi 0
  • pada kolom kecamatan menggunakan method 'ffill'sehingga membuat baris yang Null/Nan mengikuti baris diatasnya yang tidak Null/Nan
  • Pada Kolom Kelurahan menggunakan method values,pada method values membutuhkan 2 input yaitu: value Berfungsi untuk memberikan nilai sesuai yang diinputkan limit Berfungsi untuk memberikan batas sampai berapa kali input diberikan pada baris Null/Nan

sharing-session---crawling-data-data-preparation's People

Contributors

zahrul100 avatar isnaininurul avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.