Python for Data Analysts#

Anaconda as Environment Manager#

Apa perbedaan dari Anaconda dan Miniconda?#

Anaconda adalah Python distributor yang menyediakan interpreter dari bahasa pemrograman Python, conda sebagai package dan environment manager, serta lebih dari 100 packages dalam satu paket pre-install untuk kebutuhan komputasi ilmiah atau analisis. Proses instalasi Anaconda akan membutuhkan beberapa gigabyte ruang disk karena ukuran bundle atau paket distribusi yang cukup besar.

Miniconda adalah versi mini dari Anaconda yang terdiri dari bahasa pemrograman Python, conda, dan jumlah package yang lebih kecil sehingga jika Anda memiliki masalah pada ruang penyimpanan maka Anda direkomendasikan melakukan instalasi Miniconda dibandingkan dengan Anaconda.

Apa perbedaan perintah conda dan pip?#

conda adalah package manager untuk instalasi package dimana package yang terinstall adalah versi package yang sudah stabil. Package yang terdaftar pada conda biasanya tidak hanya untuk bahasa pemrograman Python. Sedangkan pip adalah package manager untuk instalasi package, spesifik untuk bahasa pemrograman Python.

Package manager mana yang akan kita gunakan untuk proses instalasi? Anda dapat menggunakan keduanya atau memilih salah satu di antara mereka. Selain itu, Anda bisa memastikan kembali pada dokumentasi package yang akan diinstalasi apakah sudah terdaftar pada conda atau pip juga.

Untuk conda list, jika dalam environment tersebut terdapat banyak package, apakah memungkinkan untuk menggunakan notasi wildcard (contoh : conda list panda*)?#

Pemanggilan perintah conda di terminal/console tidak bisa dikombinasikan dengan wildcard dan harus dilihat satu per satu package yang ada di dalam sebuah environment.

Apakah bisa membuka dua Anaconda Prompt secara bersamaan?#

Bisa. Anda dapat membuka lebih dari satu Anaconda Prompt untuk melakukan aktivitas yang berbeda-beda, misalnya mengakses Jupyter Notebook yang berbeda.

Bagaimana cara untuk mengetahui bahwa sebuah package bisa cocok dengan versi Python?#

Tidak semua package pada Python cocok untuk semua versi Python. Ketika kita melakukan instalasi package pada versi Python yang tidak cocok, maka secara default Python akan memberikan pesan error bahwa package (dengan versi tertentu) tidak dapat diinstall dengan baik. Untuk memastikannya, Anda dapat membuka dokumentasi package tersebut agar package yang terinstall bisa cocok dengan versi Pythonnya.

Apakah environment harus dibuat berbeda-beda untuk setiap project?#

Pada umumnya pembuatan environment disesuaikan dengan pengerjaan suatu project. Secara best practice, setiap environment memang hanya didedikasikan untuk satu project. Akan tetapi, Anda masih bisa menggunakan environment yang secara general sama struktur dan penggunaannya ketika akan mengerjakan project baru. Anda hanya perlu memisahkan letak project baru tersebut dengan project yang lama.

Saat mengubah kernel, mengapa pilihan kernelnya hanya ada Python 3 saja?#

Jika pilihan kernel yang tampil hanya tersedia Python 3 saja, kemungkinan Anda belum membuat kernel baru. Anda dapat membuat dan mendaftarkan terlebih dahulu kernel yang nantinya dapat digunakan bersama environment Python. Berikut ini adalah cara yang bisa Anda lakukan untuk membuat sebuah kernel baru pada sebuah environment:

  • Langkah pertama, lakukan instalasi ipykernel pada environment yang telah dibuat sebelumnya

    conda install ipykernel
    
  • Selanjutnya daftarkan kernel tersebut pada environment yang telah dibuat

    python -m ipykernel install --user --name <ENV_NAME>
    

Jupyter Notebook#

Apakah ada ketentuan khusus untuk menempatkan file notebook dalam satu folder dengan instalasi Python atau Anaconda?#

Tidak ada ketentuan khusus dalam menempatkan file Python. File code Python dapat disimpan di mana saja, akan tetapi disarankan untuk menyimpannya satu folder sesuai dengan project yang sedang dikerjakan. Hal ini untuk mempermudah ketika nantinya ingin mengakses file lain yang berhubungan.

Apa perbedaan ketika saya membuka Jupyter Notebook melalui Anaconda Prompt, Command Prompt, atau icon Jupyter Notebook sendiri?#

Anaconda Prompt maupun Command Prompt dapat digunakan untuk membuka Jupyter Notebook dan Anda dibebaskan untuk mengaktifkan environment mana yang akan digunakan. Jika menggunakan Anaconda prompt, Anda akan langsung diberitahu di awal saat pertama kali membuka prompt Anda berada di environment base, sedangkan pada Command Prompt tidak memberikan informasi ini di awal.

Apabila melalui icon Jupyter Notebook maka secara otomatis Anda akan membukanya menggunakan environment base dan Anda tidak bisa mengganti dengan environment lain.

Saat pertama kali membuka file .ipynb, mengapa ada pilihan “Continue without kernel”?#

../_images/kernel-not-found.png

Saat pertama kali membuka file .ipynb Anda dapat memilih kernel mana yang akan dipakai. Kotak dialog tersebut muncul karena kernel tidak dapat ditemukan, karena secara default Jupyter Notebook mencari kernel bawaan dari file .ipynb yang sebelumnya dibuat. Anda dapat memilih pilihan “Continue Without Kernel” untuk menggunakan kernel base, atau memilih kernel yang sesuai pada daftar kernel kemudian pilih “Set Kernel”.

Selain melakukan import library, apakah kita juga harus menjalankan semua kode lagi setiap membuka Jupyter Notebook?#

Benar. Saat membuka file .ipynb, Anda harus menjalankan kembali kode penting seperti mengimport library, memanggil variabel, dan lainnya. Cara cepat yang bisa Anda lakukan untuk menjalankan semua code adalah dengan pilihan Run All Above atau Run All Below pada Jupyter Notebook. Akan tetapi, cara ini harus ditinjau kembali karena proses running akan berhenti ketika menemukan sebuah cell yang gagal atau error dieksekusi.

Apa arti tanda bintang In [*] pada sisi kiri cell di Jupyter Notebook?#

../_images/waiting-process.png

Tanda bintang tersebut menandakan bahwa code pada cell sedang dieksekusi. Jika cell tersebut merupakan cell code maka setelah selesai running tanda bintang tersebut akan berubah menjadi sebuah angka yang menunjukkan urutan proses running cell.

Apa yang harus saya lakukan jika menemui error [Errno 13] Permission denied: '/usr/local/share/jupyter' saat akan memanggil Jupyter Notebook?#

Error ini merupakan error yang muncul terkait perizinan akses user untuk memanggil, melakukan penginstallan packages, atau konfigurasi lainnya.

  • Jika Anda pengguna Windows OS, silahkan jalankan Anaconda Prompt sebagai administrator (Run as Administrator) atau Anda dapat menginstall kembali jupyter notebook dengan menambahkan perintah --user pada command.

    pip install notebook --user
    
  • Jika Anda pengguna Linux atau Mac OS, Anda dapat menambahkan perintah sudo pada konfigurasi path jupyter terlebih dahulu.

    sudo chown -R username:username <PATH>
    

Python Basics#

Apa saja special character yang tidak dapat dijadikan sebagai penamaan variabel pada python?#

Dalam Python, terdapat beberapa batasan terkait dengan penggunaan karakter khusus dalam penamaan variabel. Berikut adalah aturan-aturan tersebut:

  1. Karakter spasi (Whitespace): Tidak diperbolehkan menggunakan spasi dalam penamaan variabel. Jika Anda memerlukan pemisahan kata, gunakan garis bawah _ atau gaya camelCase (huruf pertama kata kedua diawali dengan huruf kapital).

Wrong Example

 nama_variabel = 10
 namaVariabel = 20
  1. Angka sebagai karakter pertama: Tidak diperbolehkan menggunakan angka sebagai karakter pertama dalam penamaan variabel. Namun, angka dapat digunakan setelah karakter pertama.

Wrong Example

var1 = 10
var2 = 20
  1. Karakter khusus: Beberapa karakter khusus seperti !, @, #, $, %, ^, &, dan lainnya tidak diperbolehkan dalam penamaan variabel.

Wrong Example

variabel@ = 10
variabel# = 20
  1. Kata kunci Python: Kata kunci atau reserved words seperti if, else, while, for, dan sebagainya tidak dapat digunakan sebagai nama variabel.

Wrong Example

if = 10
while = 20
  1. Underscore diawali dengan dua garis bawah: Underscore diawali dengan dua garis bawah (__) sering digunakan untuk penamaan yang bersifat khusus (seperti metode khusus dalam kelas).

Wrong Example

 __variabel = 10

Penting untuk diingat bahwa memilih penamaan variabel yang deskriptif dan mudah dimengerti akan meningkatkan kejelasan dan keberlanjutan kode Anda. Selalu pilih nama yang merepresentasikan makna dari variabel tersebut.

Apa perbedaan tuple dan list?#

Tuple dan list adalah dua jenis struktur data yang umum digunakan dalam bahasa pemrograman Python. Berikut adalah perbedaan utama antara tuple dan list:

  1. Mutabilitas (Kemampuan diubah atau tidak):

    • List: Mutable (dapat diubah). Artinya, elemen-elemen dalam list dapat diubah setelah list tersebut dibuat. Anda dapat menambahkan, menghapus, atau mengganti elemen-elemen di dalam list.

    • Tuple: Immutable (tidak dapat diubah). Setelah sebuah tuple dibuat, elemen-elemen di dalamnya tidak dapat diubah. Anda tidak dapat menambahkan, menghapus, atau mengganti elemen-elemen dalam tuple.

# contoh list (mutable)
   my_list = [1, 2, 3]
   my_list[0] = 10  # memungkinkan perubahan
   print(my_list)   # output: [10, 2, 3]

# contoh tuple (immutable)
   my_tuple = (1, 2, 3)
   my_tuple[0] = 10  # akan menghasilkan kesalahan (TypeError)
  1. Notasi (Cara mendefinisikan):

    • List: Didefinisikan dengan menggunakan kurung siku ([]).

    • Tuple: Didefinisikan dengan menggunakan kurung biasa (()). Kadang-kadang, koma diperlukan untuk mendefinisikan tuple dengan satu elemen.

# contoh list
my_list = [1, 2, 3]

# contoh tuple
my_tuple = (1, 2, 3)
another_tuple = (4,)  # perlu koma jika tuple hanya memiliki satu elemen
  1. Kecepatan (Speed):

    • Karena tuple bersifat immutable, mereka dapat sedikit lebih cepat daripada list dalam beberapa operasi, terutama ketika datanya tetap tidak berubah.

  2. Metode dan Fungsi Bawaan:

    • Meskipun keduanya memiliki sejumlah metode dan fungsi yang serupa, ada beberapa perbedaan. Misalnya, list memiliki metode seperti append(), extend(), dan remove(), yang tidak dimiliki oleh tuple karena sifat imutabilitasnya.

# contoh metode list
   my_list = [1, 2, 3]
   my_list.append(4)  # menambahkan elemen ke list
   print(my_list)    # output: [1, 2, 3, 4]

# tuple tidak memiliki metode seperti append karena sifat imutabilitasnya
  1. Penggunaan Umum:

    • List: Digunakan ketika kita membutuhkan urutan elemen yang dapat diubah, seperti daftar item di dalam keranjang belanja.

    • Tuple: Digunakan ketika kita memiliki kumpulan data yang tidak boleh diubah, seperti koordinat (x, y) atau informasi konfigurasi yang tetap.

Pemilihan antara tuple dan list tergantung pada kebutuhan spesifik dan karakteristik dari data yang akan Anda atur. Jika Anda membutuhkan kemampuan perubahan, gunakan list; jika tidak, tuple dapat menjadi pilihan yang baik.

Bagaimana cara lihat variabel yang sudah tersimpan di jupyter notebook?#

Seluruh variabel yang tersimpan pada python dapat dilihat dengan fungsi dir() tetapi perlu diketahui bahwa yang ditampilkan adalah seluruh variable baik yang kita buat/deklarasikan, maupun yang sudah built-in.

Working with Dataframe#

Apa perbedaan attribute dan method?#

Attribute merupakan nilai/informasi yang terkandung dari sebuah object. Beberapa attribute yang ada pada dataframe antara lain adalah .shape, .dtypes, .size, .axes dan lain-lain.

Method merupakan perintah/function yang dapat terdapat pada suatu object, ditandain dengan penggunaan tanda kurung bulat () sebagai tempat untuk memasukkan argumen. Beberapa method yang ada pada dataframe antara lain adalah .describe(), .head(), .tail() dan lain-lain.

Kapan menggunakan tanda kurung kurawal { }, siku [ ], ataupun bulat ( ) ?#

Tanda kurung kurawal {} digunakan untuk membuat sebuah dictionary, berisi pasangan key dan value.

student_dict = {
    'Name': ['Fafilia', 'Lita', 'Tomy'],
    'Age': [25, 26, 24],
    'Address': ['Jakarta Selatan', 'Jakarta Pusat', 'Jakarta Barat']}
    
type(student_dict)
dict

Tanda kurung siku [] digunakan untuk:

  1. Melakukan subsetting terhadap DataFrame (misalnya mengambil kolom atau conditional subsetting)

  2. Melakukan indexing dengan .loc atau .iloc

  3. Membuat sebuah list

student = pd.DataFrame(student_dict)

# melakukan subsetting
student['Name']
0    Fafilia
1       Lita
2       Tomy
Name: Name, dtype: object
# melakukan indexing
student.loc[2:]
Name Age Address
2 Tomy 24 Jakarta Barat
# membuat list
position = ['CEO', 'Vice President', 'General Manager']
type(position)
list

Tanda kurung bulat () digunakan untuk pemanggilan method atau fungsi. Misalnya saat memanggil method .tail(), .head(), .describe(), ataupun saat memanggil fungsi seperti print().

# menampilkan 2 baris teratas
student.head(2)
Name Age Address
0 Fafilia 25 Jakarta Selatan
1 Lita 26 Jakarta Pusat

Penggunaan method read_csv() maupun method head() membuat beberapa kolom tidak muncul/ke hidden. Bagaimana cara menampilkan seluruhnya?#

Untuk menampilkan column secara lengkap, kita dapat mengatur pada fungsi set_options pandas. Selain mengatur jumlah columns yang akan ditampilkan lengkap, fungsi ini juga bisa digunakan untuk mengatur banyaknya maksimum baris yang ingin ditampilkan agar tidak tersembunyi (menggunakan argumen ‘max_rows’).

Untuk penggunaannya cukup sekali di run dan biasanya diletakkan di cell paling atas setelah import library pandas. Namun hal ini tentunya juga memiliki kekurangan yaitu proses eksekusi code sampai menampilkan output akan sangat lama.

pd.set_option('max_columns', None)

Bagaimana cara mengubah tipe data float tetapi dengan 2 angka decimal?#

Dapat menggunakan opsi pengaturan pada notebook yang dimiliki dengan pd.options.display.float_format = '{:,.2f}'.format

Apa perbedaan menuliskan nama kolom menggunakan tanda bracket df["nama_kolom"] dengan pemisah titik seperti df.nama_kolom?#

Keduanya bisa digunakan untuk memanggil sebuah kolom. Berikut kelebihan dan kekurangan dari kedua metode pemanggilan kolom tersebut:

Kelebihan

  • Pemanggilan menggunakan tanda titik lebih cepat

  • Pemanggilan menggunakan tanda bracket bisa memanggil kolom lebih dari 1 kolom

  • Pemanggilan menggunakan tanda bracket disarankan untuk nama kolom yang namanya dipisahkan oleh spasi seperti “jenis kelamin”, “nama depan”, dan lain-lain

Kekurangan

  • Pemanggilan menggunakan tanda titik tidak bisa dilakukan untuk nama kolom yang namanya dipisahkan oleh spasi

  • Pemanggilan menggunakan tanda bracket membutuhkan ketelitian, harus memastikan bahwa nama kolom sudah diapit lengkap dengan tanda petik

Apa perbedaan penggunaan tanda petik tunggal (‘string’) dan ganda (“string”) pada penulisan character atau string?#

Penggunaan tanda petik tunggal maupun ganda sama-sama untuk menunjukkan string. Umumnya tanda petik tunggal digunakan untuk menuliskan suatu karakter tunggal seperti ‘a’, ‘b’, ‘!’, dan sejenisnya. Tanda petik ganda digunakan untuk menuliskan kata atau kalimat seperti “Algoritma”, “Algoritma Data Science School”, dan sebagainya.

abjad = ['a','b','c']
kata = ["Algoritma", "Data", "Indonesia"]
print(abjad)
print(kata)
['a', 'b', 'c']
['Algoritma', 'Data', 'Indonesia']

Bagaimana cara kita ingin menampilkan tanda petik dalam string?#

Terdapat dua cara yang dapat dilakukan untuk menuliskan tanda petik dalam sebuah string.

  • Cara pertama: gunakan karakter back slash \ sebelum tanda kutip (baik petik tunggal atau ganda) seperti contoh di bawah ini:

print('Mereka berkata: \'Algoritma luar biasa!\'')
Mereka berkata: 'Algoritma luar biasa!'
print("Mereka berkata: \"Algoritma luar biasa!\"")
Mereka berkata: "Algoritma luar biasa!"
  • Cara kedua: kombinasikan petik tunggal dan ganda untuk mengapit sebuah kalimat atau string yang mengandung tanda kutip seperti contoh di bawah ini:

print("Mereka berkata: 'Algoritma luar biasa!'")
Mereka berkata: 'Algoritma luar biasa!'
print('Mereka berkata: "Algoritma luar biasa!"')
Mereka berkata: "Algoritma luar biasa!"

Mengapa jika kita menggunakan method .select_dtypes() dan menggunakan parameter include = 'integer', maka kolom dengan tipe data int64 tidak keluar. Sedangkan jika include = 'float', maka kolom dengan tipe data float64 ikut terpilih?#

Secara umum, float tidak perlu dituliskan nilai bitnya sedangkan pada int perlu dituliskan nilai bitnya.

Dalam penggunaan .loc jika kita telah mengatur index saat membaca data pada parameter index_col, apakah nantinya sistem pemanggilan nama index juga akan ikut berubah?#

Sistem pemanggilan nama index akan ikut berubah. Perhatikan contoh berikut ini:

companies = pd.read_csv('data_input/companies.csv', index_col = 'Customer Name')
companies.loc[['PT. Algoritma Data Indonesia']]
ID Consulting Sales Software Sales Forecasted Growth Returns Month Day Year Location Account
Customer Name
PT. Algoritma Data Indonesia 57531 IDR850000 IDR395500 4.00% 0 7 17 2017 Jakarta Startup

Kita mengatur kolom Customer Name sebagai index sehingga nilai di setiap barisnya adalah nama perusahaan. Ketika menggunakan metode .loc[] untuk subsetting, maka pemanggilan nama indexnya pun akan mengikuti nilai dari index dataframe itu sendiri. Pada contoh di atas, kita melakukan indexing untuk perusahaan yang bernama PT. Algoritma Data Indonesia.

Saat melakukan conditional subsetting, apakah kita dapat menggunakan lebih dari dua kondisi?#

Sangat bisa. Anda dapat menggunakan lebih dari dua kondisi yang dikombinasikan menggunakan operasi & (AND) atau operasi | (OR) untuk melakukan conditional subsetting. Pada conditional subsetting, jumlah kondisi tidak terbatas dan tergantung pada kebutuhan analisis Anda.

Contoh: kita ingin menampilkan companies yang berlokasi di Surabaya dan Bandung dan berdiri di antara tahun 2012 dan 2018.

companies[
    (
        (companies['Location'] == 'Surabaya') |
        (companies['Location'] == 'Bandung')
    ) &
    (
        (companies['Year'] >= 2012) &
        (companies['Year'] <= 2018)
    )
]
ID Consulting Sales Software Sales Forecasted Growth Returns Month Day Year Location Account
Customer Name
PT. Kreasi Metrik Solusi 18374 0 IDR550403 25.00% 0 3 29 2012 Surabaya Enterprise
Palembang Konsultansi 19002 IDR2115000 0 -15.00% 0 2 24 2018 Bandung Startup

Bagaimana cara untuk melakukan export dataframe ke file csv?#

Gunakan method .to_csv() seperti contoh di bawah ini:

object_dataframe.to_csv("PATH/NAMA_FILE.csv")