\chapter{Python: Selayang Pandang}
Python adalah bahasa pemrograman serbaguna tingkat tinggi yang telah mendapatkan pengakuan dan adopsi luas, terutama dalam konteks komputasi ilmiah. Dikenal dengan kesederhanaan sintaksisnya, kemudahan dibaca, dan fleksibilitasnya, Python kini menjadi pilihan utama bagi ilmuwan, peneliti, dan insinyur di berbagai disiplin.

Dalam ranah komputasi ilmiah, daya tarik Python terletak pada kemampuan sintaksisnya yang mudah dipahami. Hal ini memudahkan baik pemula maupun pemrogram berpengalaman dalam menulis dan memahami kode. Kejelasan sintaksis ini memiliki nilai signifikan, terutama dalam lingkungan penelitian di mana kolaborasi dan komunikasi yang efektif sangat diperlukan.

Salah satu keunggulan utama Python untuk komputasi ilmiah adalah ekosistemnya yang kaya akan pusaka dan kerangka kerja yang dirancang khusus untuk aplikasi numerik dan ilmiah. NumPy, sebagai contoh, menyediakan dukungan untuk larik dan matriks berdimensi besar beserta fungsi matematis untuk beroperasi secara efisien pada struktur data ini. Inilah dasar bagi operasi numerik yang menjadi inti dari komputasi ilmiah.

SciPy, sebagai kelanjutan dari NumPy, memperluas kemampuannya dengan menyediakan fungsionalitas tambahan untuk optimisasi, pemrosesan sinyal, integrasi, interpolasi, dan berbagai algoritma numerik lainnya. Kedua perpustakaan ini secara bersama-sama memberdayakan ilmuwan untuk menjalankan berbagai komputasi ilmiah tanpa harus merancang ulang algoritma secara menyeluruh.

Matplotlib, sebagai pustaka visualisasi yang dikenal luas, meningkatkan utilitas Python dalam komputasi ilmiah dengan menyederhanakan pembuatan visualisasi statis, animasi, dan interaktif. Kemampuan untuk memvisualisasikan data dengan jelas dan efektif sangat penting dalam konteks penelitian ilmiah.

Pandas, salah satu pustaka lainnya yang sangat berharga, membawa kemampuan manipulasi data ke tingkat berikutnya dengan menyediakan struktur data seperti DataFrame. Struktur data ini sangat memudahkan tugas-tugas seperti pembersihan, penyaringan, dan agregasi data terstruktur, yang menjadi langkah penting dalam persiapan data untuk analisis numerik.

Keunggulan Python juga terletak pada adaptabilitasnya di berbagai domain ilmiah, dari fisika hingga biologi, ekonomi, dan rekayasa. Sifat kolaboratif dan sumber terbuka Python menciptakan komunitas yang mendukung, memfasilitasi berbagi alat, sumber daya, dan praktik terbaik di antara para peneliti.

Tidak hanya itu, kompatibilitas Python dengan bahasa pemrograman lain seperti C dan Fortran memungkinkan integrasi mudah dengan kode yang sudah ada. Hal ini memungkinkan ilmuwan untuk memanfaatkan algoritma dan rutinitas yang telah terbukti optimal tanpa kesulitan.

Secara keseluruhan, kejelasan sintaksis, kemudahan dibaca, dukungan pustaka yang luas, dan ekosistem kolaboratif menjadikan Python tidak hanya sebagai bahasa pemrograman, melainkan sebagai platform yang memberdayakan ilmuwan untuk mengeksplorasi, menganalisis, dan berkomunikasi temuan mereka secara efisien dan efektif dalam ranah komputasi ilmiah.

Meskipun terdapat berbagai macam pustaka Python yang berguna untuk komputasi numerik, buku ini hanya berfokus pada penggunaan tiga pustaka utama, yakni NumPy, Matplotlib, dan SciPy. Hal ini dilakukan untuk menghindari kompleksitas penggunaan berbagai pustaka (yang dapat dipelajari sendiri oleh pembaca dengan membaca dokumentasi masing - masing pustaka tersebut) dan berfokus pada pemahaman inti dari algoritma - algorima numerik-nya. 

Untuk dapat menjalankan kode - kode pada buku ini, pembaca disarankan untuk melakukan instalasi Python 3 dari distribusi Anaconda\footnote{\url{https://www.anaconda.com/download}}. Seluruh pustaka yang digunakan di buku ini sudah tersedia pada instalasi standar Anaconda. Namun, jika pembaca ingin merepotkan diri sendiri, dapat juga melakukan instalasi Python 3 standar\footnote{\url{https://www.python.org/downloads/}}, untuk kemudian menjalankan perintah sebagai berikut ini pada \textit{command line} kalian:

\nolinenumbers
\begin{verbatim}
pip install numpy matplotlib scipy    
\end{verbatim}
\linenumbers

Kita hanya akan menggunakan Python yang berbasis \textit{command line} pada buku ini tanpa Jupyter Notebook, agar membiasakan pembaca pada tradisi komputasi numerik untuk memudahkan familiaritas terhadap terminal, sehingga nantinya akan mudah untuk berpindah ke bahasa pemrograman lainnya, seperi Fortran, C, C++, bahkan Julia yang mungkin harus dipelajari pembaca pada suatu titik di masa depan jika hendak menghabiskan karir di bidang ini. Untuk itu, kita menyarankan kalian untuk melakukan instalasi editor teks standar untuk pemrograman, seperti vim\footnote{\url{https://www.vim.org/download.php}}, GNU Emacs\footnote{\url{https://www.gnu.org/software/emacs/download.html}}, Notepad++\footnote{\url{https://notepad-plus-plus.org/downloads/}}, Sublime Text\footnote{\url{https://www.sublimetext.com/download}}, Atom\footnote{\url{https://atom.en.softonic.com/}}, dan/atau masih banyak lagi (kalian dapat memilih salah satu dari editor ini, atau kalau kalian mau ditertawakan oleh penyusun, bisa juga menggunakan MS Word untuk ini). Untuk masalah sistem operasi sendiri, kalian bebas menggunakan apapun, tapi saran kami (alangkah lebih baik) membiasakan diri dengan penggunaan sistem operasi yang berbasiskan \textit{Unix-like}, seperti BSD, GNU/Linux, atau MacOS yang mempunyai Terminal bawaan, tapi jika kalian ingin menggunakan MS Windows hal tersebut dapat dimaklumi dan kalian dapat menjalankan kode dan Python Shell dari PowerShell di Windows. Jika selesai dengan \textit{tetek bengek} proses instalasi-nya, maka kita dapat langsung membahas konsep - konsep \textit{scripting} (bukan pemrograman!!!) Python dasar yang dibutuhkan untuk mempelajari buku ini. Namun, jika pembaca tidak mempunyai latar belakang sama sekali tentang pemrograman disarankan untuk mengikuti tutorial Python terlebih dahulu yang banyak tersedia di internet\footnote{Salah satu tutorial yang sesuai untuk pengantar Python guna mempelajari buku ini terdapat pada kanal youtube John Phillip Jones: \url{https://youtube.com/playlist?list=PL6lxxT7IdTxGp9DoZiQNFo3BXZpmJ8tVf&si=5GmQMC-_2qvhljmK}}.  

\section{Variabel}
Untuk mengikuti pengenalan tentang variabel ini, coba kalian ketikkan di Terminal atau PowerShell kalian kata \verb|python|, maka kalian akan mendapatkan tampilan Python Shell yang ditunjukkan pada Gambar \ref{fig11} berikut ini.

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{gambar/gambar011.png}
    \caption{Tampilan layar Python Shell.}
    \label{fig11}
\end{figure}

Jika sudah demikian, maka kita dapat memulai perkenalan kita dengan variabel. Di Python, variabel dapat dinamakan sebagai kombinasi antara karakter, angka, huruf besar, dan huruf kecil. Nilai yang ditugaskan ke variabel tersebut dapat berupa \textit{float}, \textit{integer}, bilangan kompleks, karakter / \textit{string}, dll. Untuk lebih jelasnya, perhatikan perintah berikut di Python Shell:

\nolinenumbers
\begin{verbatim}
    >>> # Komentar baris!
    >>> '''
    ... komentar
    ... lebih
    ... dari satu baris
    ... '''
    '\nkomentar\nlebih\ndari satu baris\n'
    >>> massa = 10.5 # bilangan real (float)
    >>> gravitasi = 9.81 # float
    >>> type(massa)
    <class 'float'>
    >>> kelajuan = 15 # integer
    >>> type(kelajuan)
    <class 'int'>
    >>> a = 12 + 8j # bilangan kompleks
    >>> b = complex(12, 8) # alternatif bilangan kompleks
    >>> type(a)
    <class 'complex'>
    >>> nama = 'Faiz Fajary' # string
    >>> type(nama)
    <class 'str'>
\end{verbatim}
\linenumbers


\section{\textit{List}, \textit{Dictionary}, dan \textit{Tuple}}
Kumpulan angka dan karakter dapat dimuat pada objek - objek \textit{built-in} di Python, yakni \textit{list}, \textit{dictionary}, dan \textit{tuple}. Berikut ini contohnya yang dimuat pada \textit{script} \verb|contoh_011.py| berikut ini:

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_011.py}
\linenumbers

Untuk menjalankan kode tersebut, kalian perlu mengetikkan \verb|chmod +x contoh_011.py|, kemudian \verb|./contoh_011.py| di \textit{command line}. Atau dapat juga dengan menggunakan cara yang lebih mudah yakni \verb|python contoh_011.py| pada \textit{command line}. Hasil-nya adalah sebagai berikut:

\nolinenumbers
\begin{verbatim}
    [2, 3, 5, 7, 11, 13]
    geologi
    meteorologi
    ['geodesi', 'oseanografi']
    100
    ITB
    Meteorologi
    (128, 'Oseanografi', 129)
\end{verbatim}
\linenumbers

\section{\textit{Array}}
\textit{Array} merupakan objek pada pustaka NumPy yang berbentuk seperti vektor dan/atau matriks, namun dapat juga dioperasikan seperti kumpulan bilangan biasa. Untuk menggunakan \textit{array} kita harus terlebih dahulu mengimpor pustaka NumPy, dan kita juga membutuhkan modul \verb|scipy.linalg| dari pustaka SciPy untuk mengakses fungsi \verb|eigenvals()| untuk menghitung nilai dan vektor eigen dari matriks:

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_012.py}
\linenumbers

Hasilnya adalah:

\nolinenumbers
\begin{verbatim}
Vek:  [1 2 8]

kol_vek:  [[1]
 [2]
 [8]]

kol_vek1:  [[1]
 [2]
 [8]]

kol_vek2:  [[1]
 [2]
 [8]]

mat:  [[ 1  2  6]
[ 3  4  9]
[ 1 -2  7]]

mat1:  [[ 1  2  6]
[ 3  4  9]
[ 1 -2  7]]

a:  8

b:  [1]

c:  [1 2 8]

d:  8

vek_dua:  [ 2  4 -2]

dua_satu:  3

Penjumlahan:  [ 2  4 16]

Perkalian skalar:  [ 2  4 16]

Perkalian antar elemen:  [ 1  4 64]

Perkalian titik:  69

Perkalian silang:  [0 0 0]

Nilai Eigen: 
[-0.7043738+0.j 6.3521869+3.68759402j 6.3521869-3.68759402j]
Vektor Eigen:  
[[ 0.95060044+0.j -0.43574734-0.06069503j -0.43574734+0.06069503j]
[-0.24732462+0.j -0.83513823+0.j -0.83513823-0.j]
[-0.18758821+0.j -0.07301769-0.32195174j -0.07301769+0.32195174j]]
\end{verbatim}
\linenumbers

\section{Fungsi}
Seeperti pada kebanyakan bahasa pemrograman lainnya, Python juga menyediakan fungsi untuk memperingkas operasi rutin sehingga kode yang dituliskan menjadi efisien dan mudah dimengerti. Segala sesuatu yang dideklarasikan di dalam suatu fungsi bersifat lokal, untuk membuat-nya menjadi dapat diakses dari luar fungsi, kita membutuhkan \textit{keyword} \verb|global|. Berikut adalah contoh pendefinisian fungsi di Python:

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_013.py}
\linenumbers

Hasilnya:

\nolinenumbers
\begin{verbatim}
    Konduktivitas pada T(10):  2150.0050035739814
    z:  5.0
    
    l:  12.0
    
    v:  720.0
\end{verbatim}
\linenumbers

Kita juga dapat mempersingkat fungsi dengan menggunakan fungsi anonim, yang dikenal sebagai ekspresi \verb|lambda|:

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_014.py}
\linenumbers

Hasilnya sama dengan luaran fungsi di atas.

\section{Pengulangan dan Percabangan}
Berikut adalah struktur pengulangan dan percabangan sederhana di Python. Kita akan menggunakan struktur ini dalam banyak hal dalam komputasi numerik. Di sini kita tidak menjelaskan tentang struktur pengulangan dan percabangan yang kompleks seperti strukur \verb|if-elif-else| di dalam pengulangan bersarang. Disarankan pembaca mencari tahu sendiri tentang hal tersebut.

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_015.py}
\linenumbers

Contoh eksekusinya:

\nolinenumbers
\begin{verbatim}
    Masukkan nomor: 3
    Positif
    Tutorial untuk menampilkan 'Atmosphaira!' sebanyak 3 kali:
    Atmosphaira!
    Atmosphaira!
    Atmosphaira!
\end{verbatim}

\section{Mengimpor Pustaka}
Sebagai salah satu bahasa pemrograman yang paling populer, tersedia banyak sekali pustaka Python yang dapat membantu kita untuk menyelesaikan komputasi sesuai dengan kebutuhan domain keilmuan kita masing - masing. Oleh karena buku ini berfokus pada dasar - dasar komputasi numerik, kita hanya akan menggunakan NumPy, Matplotlib, dan SciPy, seperti yang telah kita bahas sebelumnya. Seluruh persyaratan pustaka ini telah dipenuhi ketika kalian melalukan instalasi Anaconda. 

Guna melihat pustaka apa saja yang terdapat pada lingkungan komputasi Python, kita dapat menggunakan perintah \verb|pip list| di \textit{command line}. Untuk mengetahui secara detail mengenai pustaka tertentu, gunakan perintah \verb|pip show [nama_pustaka]|.

Terdapat beberapa cara untuk mengimpor pustaka di Python. Berikut adalah perintah di Python Shell guna mengilustrasikan keempat cara yang umum digunakan:

\nolinenumbers
\begin{verbatim}
    >>> # 1. Cara yang sangat tidak dianjurkan
    >>> # mengimpor seluruh pustaka tanpa pengaliasan
    >>> from numpy import *
    >>> v = array([1,2,3])
    >>>
    >>> # 2. Mengimpor fungsi tertentu dari pustaka
    >>> from numpy import array
    >>> v = array([1,2,3])
    >>>
    >>> # 3. Mengimpor seluruh pustaka menggunakan nama pustaka
    >>> import numpy
    >>> v = numpy.array([1,2,3])
    >>>
    >>> # 4. Mengimpor pustaka dengan pengaliasan
    >>> import numpy as np
    >>> v = np.array([1,2,3])
\end{verbatim}
\linenumbers

\section{\textit{Plotting}}
Buku ini hanya menggunakan fungsi - fungsi grafis dari pustaka Matplotlib untuk keperluan \textit{plotting}. Berikut merupakan contoh kode Python yang digunakan untuk \textit{plotting} 2D yang hasilnya ditunjukkan pada Gambar \ref{fig12}:

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_016.py}
\linenumbers

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{gambar/gambar012.png}
    \caption{Contoh \textit{Plotting} 2D.}
    \label{fig12}
\end{figure}

Berikut merupakan contoh grafik 3D (Gambar \ref{fig13}):

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_017.py}
\linenumbers

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{gambar/gambar013.png}
    \caption{Contoh \textit{Plotting} 3D.}
    \label{fig13}
\end{figure}

Berikut merupakan contoh grafik kontur (Gambar \ref{fig14}):

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_018.py}
\linenumbers

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{gambar/gambar014.png}
    \caption{Contoh \textit{Plotting} kontur.}
    \label{fig14}
\end{figure}

Berikut merupakan contoh grafik permukaan 3D (Gambar \ref{fig15}):

\nolinenumbers
\lstinputlisting[language=Python]{./kode/contoh_019.py}
\linenumbers

\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{gambar/gambar015.png}
    \caption{Contoh \textit{Plotting} permukaan 3D.}
    \label{fig15}
\end{figure}
