<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Danang Haris Setiawan</title>
    <description>The latest articles on DEV Community by Danang Haris Setiawan (@danangharissetiawan).</description>
    <link>https://dev.to/danangharissetiawan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F498075%2F714c978a-9017-4e8d-9b86-42198ce105e8.jpeg</url>
      <title>DEV Community: Danang Haris Setiawan</title>
      <link>https://dev.to/danangharissetiawan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danangharissetiawan"/>
    <language>en</language>
    <item>
      <title>Exploratory Data Analysis with Python for Beginner</title>
      <dc:creator>Danang Haris Setiawan</dc:creator>
      <pubDate>Wed, 15 Dec 2021 17:19:02 +0000</pubDate>
      <link>https://dev.to/danangharissetiawan/exploratory-data-analysis-with-python-for-beginner-13kf</link>
      <guid>https://dev.to/danangharissetiawan/exploratory-data-analysis-with-python-for-beginner-13kf</guid>
      <description>&lt;h2&gt;
  
  
  Pengenalan Library dalam Pyhton
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memanggil library di Python&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;library_name&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;alias&lt;/span&gt;

&lt;span class="n"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt; &lt;span class="c1"&gt;# memanggil library numpy sebagai np
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exploratory Data Analysis dengan Pandas - Part 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Salah satu fungsi Pandas yaitu melakukan load data dari CSV atau Excel file. Syntax yang digunakan untuk melakukan operasi tersebut, yaitu:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# Membaca file CSV
&lt;/span&gt;&lt;span class="n"&gt;variable_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file_name.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Membaca file Excel
&lt;/span&gt;&lt;span class="n"&gt;variable_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_excel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file_name.xlsx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tugas Praktek 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mengimport dataset marketplace ABC Dari order.csv dan disimpan ke dalam dataframe Bernama order_df.&lt;/p&gt;

&lt;p&gt;NOTE: dataset →&lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inspeksi struktur data frame
&lt;/h3&gt;

&lt;p&gt;Setelah melakukan proses loading dataframe ke dalam Python. Hal selanjutnya sebelum memulai analisis tentunya mengerti struktur data set tersebut. Sehingga langkah selanjutnya dari pre - analisis biasanya dilakukan untuk:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Melihat struktur dataframe&lt;/li&gt;
&lt;li&gt;Melihat preview data dari dataframe tersebut&lt;/li&gt;
&lt;li&gt;Membuat summary data sederhana dari dataset.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Melihat struktur kolom dan baris dari data frame&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hal pertama dalam mengerti struktur dari data frame adalah informasi mengenai beberapa size dari data frame yang akan digunakan termasuk berapa jumlah kolom dan jumlah baris data frame tersebut.&lt;/p&gt;

&lt;p&gt;untuk mengatasi hal tersebut bisa menggunakan fungsi berikut:&lt;/p&gt;

&lt;p&gt;Mengembalikan tuple yang mewakili dimensi dataframe.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; pd.DataFrame&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s1"&gt;'col1'&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;1, 2], &lt;span class="s1"&gt;'col2'&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;3, 4]&lt;span class="o"&gt;})&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; df.shape
&lt;span class="o"&gt;(&lt;/span&gt;2, 2&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; pd.DataFrame&lt;span class="o"&gt;({&lt;/span&gt;&lt;span class="s1"&gt;'col1'&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;1, 2], &lt;span class="s1"&gt;'col2'&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;3, 4],
...                    &lt;span class="s1"&gt;'col3'&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;5, 6]&lt;span class="o"&gt;})&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; df.shape
&lt;span class="o"&gt;(&lt;/span&gt;2, 3&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas praktek 2&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;order dataframe dengan menuliskan sintax python untuk melihat struktur dari order_df dengan menggunakan fungsi shape&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Melihat preview data dari dataframe&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Untuk mendapatkan gambaran dari konten dataframe tersebut. Kita dapat menggunakan fungsi head dan tail, dengan syntax:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;head()&lt;/code&gt; ⇒ mengembalikan &lt;strong&gt;&lt;em&gt;n&lt;/em&gt;&lt;/strong&gt; baris pertama untuk objek berdasarkan posisi. Ini berguna untuk menguji dengan cepat apakah objek anda memiliki tipe data yang tepat di dalamnya. default 5 baris.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tail()&lt;/code&gt; ⇒ mengembalikan &lt;strong&gt;&lt;em&gt;n&lt;/em&gt;&lt;/strong&gt; baris terakhir dari objek berdasarkan posisi. Ini berguna untuk memverifikasi data dengan cepet, misalnya, setelah menyortir atau menambahkan baris. default 5 baris.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Menampilkan konten teratas dari [nama_dataframe]
# untuk sejumlah bilangan bulat [jumlah_data]
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;name_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jumlah_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Menampilkan konten terbawah dari [nama_dataframe]
# untuk sejumlah bilangan bulat [jumlah_baris]
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;name_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jumlah_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas praktek 3&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cek bagaimana contoh data dari dataframe tersebut, dengan fungsi &lt;code&gt;head()&lt;/code&gt; dengan &lt;strong&gt;limit 10 baris&lt;/strong&gt;!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Statistik Deskriptif dari DataFrame - part 1&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Statistik deskriptif atau summary dalam Python - Pandas, dapat diperoleh dengan menggunakan fungsi &lt;code&gt;describe()&lt;/code&gt;, yaitu:&lt;/p&gt;

&lt;p&gt;ref: &lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html" rel="noopener noreferrer"&gt;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;name_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; data_df.describe&lt;span class="o"&gt;()&lt;/span&gt;

data_df.describe&lt;span class="o"&gt;()&lt;/span&gt;
CustomerID         Age  Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;  Spending Score &lt;span class="o"&gt;(&lt;/span&gt;1-100&lt;span class="o"&gt;)&lt;/span&gt;
count  200.000000  200.000000          200.000000              200.000000
mean   100.500000   38.850000           60.560000               50.200000
std     57.879185   13.969007           26.264721               25.823522
min      1.000000   18.000000           15.000000                1.000000
25%     50.750000   28.750000           41.500000               34.750000
50%    100.500000   36.000000           61.500000               50.000000
75%    150.250000   49.000000           78.000000               73.000000
max    200.000000   70.000000          137.000000               99.000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fungsi &lt;em&gt;describe&lt;/em&gt; dapat memberikan informasi mengenai &lt;a href="https://en.wikipedia.org/wiki/Expected_value" rel="noopener noreferrer"&gt;nilai rataan,&lt;/a&gt; &lt;a href="https://id.wikipedia.org/wiki/Simpangan_baku" rel="noopener noreferrer"&gt;standar deviasi&lt;/a&gt; dan &lt;a href="https://id.wikipedia.org/wiki/Jangkauan_interkuartil" rel="noopener noreferrer"&gt;IQR (interquartile range)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ketentuan umum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secara umum fungsi &lt;code&gt;describe()&lt;/code&gt; akan secara otomatis mengabaikan kolom &lt;em&gt;category&lt;/em&gt; dan hanya memberikan summary statistik untuk kolom berjenis numerik.&lt;/li&gt;
&lt;li&gt;Kita perlu menambahkan argument bernama &lt;code&gt;include="all"&lt;/code&gt; untuk mendapatkan summary statistik atau statistik deskriptif dari kolom numerik dan karakter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;name_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; data_df.describe&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'all'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
CustomerID   Genre         Age  Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;  Spending Score &lt;span class="o"&gt;(&lt;/span&gt;1-100&lt;span class="o"&gt;)&lt;/span&gt;
count   200.000000     200  200.000000          200.000000              200.000000
unique         NaN       2         NaN                 NaN                     NaN
top            NaN  Female         NaN                 NaN                     NaN
freq           NaN     112         NaN                 NaN                     NaN
mean    100.500000     NaN   38.850000           60.560000               50.200000
std      57.879185     NaN   13.969007           26.264721               25.823522
min       1.000000     NaN   18.000000           15.000000                1.000000
25%      50.750000     NaN   28.750000           41.500000               34.750000
50%     100.500000     NaN   36.000000           61.500000               50.000000
75%     150.250000     NaN   49.000000           78.000000               73.000000
max     200.000000     NaN   70.000000          137.000000               99.000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Statistik Deskriptif dari DataFrame - part 2&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jika ingin mendapatkan summary dari kolom yang tidak benilai angka, maka dapat menambahkan command &lt;code&gt;include=['object']&lt;/code&gt;pada &lt;code&gt;describe()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nilai_skor_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; data_df.describe&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;include&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s1"&gt;'object'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
Genre
count      200
unique       2
top     Female
freq       112
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Statistik Deskriptif dari DataFrame - part 3&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selanjutnya, untuk mencari rataan dari suatu data dari dataframe, dapat menggunakan syntax &lt;code&gt;[mean]&lt;/code&gt;[&lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mean.html" rel="noopener noreferrer"&gt;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mean.html&lt;/a&gt;], &lt;code&gt;[median]&lt;/code&gt;[&lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.median.html" rel="noopener noreferrer"&gt;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.median.html&lt;/a&gt;], dan &lt;code&gt;[mode]&lt;/code&gt;[&lt;a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mode.html" rel="noopener noreferrer"&gt;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mode.html&lt;/a&gt;] dari Pandas.&lt;/p&gt;

&lt;p&gt;wikipedia:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mean → &lt;a href="https://en.wikipedia.org/wiki/Mean" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Mean&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;median → &lt;a href="https://id.wikipedia.org/wiki/Median" rel="noopener noreferrer"&gt;https://id.wikipedia.org/wiki/Median&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;mode → &lt;a href="https://id.wikipedia.org/wiki/Modus_(statistika)" rel="noopener noreferrer"&gt;https://id.wikipedia.org/wiki/Modus_(statistika)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; data_df.loc[:, &lt;span class="s2"&gt;"Age"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.mean&lt;span class="o"&gt;()&lt;/span&gt;
38.85
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; data_df.loc[:, &lt;span class="s2"&gt;"Age"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.median&lt;span class="o"&gt;()&lt;/span&gt;
36.0
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; data_df.loc[:, &lt;span class="s2"&gt;"Age"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.mode&lt;span class="o"&gt;()&lt;/span&gt;
0    32
dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas praktek 4&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NOTE: dataset → &lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;summary bulanan dari segi kuantitas, harga, freight value, dan weight&lt;/li&gt;
&lt;li&gt;Medain dari total pembelian konsumen per transaksi kolom price
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# summary bulanan dari segi kuantitas, harga frright value, dan weight
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Median dari total pembelian konsumen per transaksi kolom price
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Exploratory Data Analysis dengan Pandas - Part 2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mengenal dan membuat distribusi data dengan Histogram&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Histogram merupakan salah satu cara untuk mengidentifikasi sebaran distribusi dari data. Histogram adalah grafik yang berisi ringkasan dari sebaran (dispersi atau variasi) suatu data. Pada histogram, tidak ada jarak antara batang/bar dari grafik. Hal ini dikarenakan bahwa titik data kelas bisa muncul dimana saja didaerah cakupan grafik. Sedangkan ketinggian bar sesuai dengan frekuensi atau frekuensi relatif jumlah data di kelas. Semakin tinggi bar, semakin tinggi frekuensi data. Semakin rendah bar, semakin rendah frekuensi data.&lt;/p&gt;

&lt;p&gt;syntax umum:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;jumlah_bin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;nama_kolom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;nilai_alpha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tuple_ukuran_gambar&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;bins&lt;/strong&gt;: jumlah bins dalam histogram yang akan digunakan. Jika tidak didefinisikan jumlahbins, maka fungsi akan secara default menentukan jumlah bins sebanya 10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;by&lt;/strong&gt;: nama kolom di DataFrame untuk di groub by. (valuenya berupa nama column di dataframe tersebut)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;alpha&lt;/strong&gt;: nilai_alpha untuk menentukan opacity dari plot di histogram. (value berupa range 0.0 - 1.0, dimana semakin kecil akan semakin kecil opacitynya)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;figsize&lt;/strong&gt;: tuple_ukuran_gambar yang digunakan untuk menentukan ukuran dari plot histogram. Contoh: &lt;code&gt;figsize=(10, 12)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[x]  &lt;strong&gt;Tugas praktek 5&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Buat histogram &lt;strong&gt;price&lt;/strong&gt; dengan &lt;strong&gt;bins=10.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;xlabelsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ylabelsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standar Deviasi dan Varians pada Pandas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Varians dan standar deviasi juga merupakan suatu ukuran dispersi atau variasi. Standar deviasi merupakan ukuran dispersi yang paling banyak dipakai. Hal ini mungkin karena standar deviasi merupakan suatu ukuran yang sama dengan satuan ukuran data asalnya. Sedangkan varians memiliki satuan kuadrat dari data asalnya (misalnya cm^2).&lt;/p&gt;

&lt;p&gt;Syntaz dari standar deviasi dan varians pada Pandas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;name_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;std&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; shop_df.loc[:, &lt;span class="s2"&gt;"Annual Income (k&lt;/span&gt;&lt;span class="nv"&gt;$)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.std&lt;span class="o"&gt;()&lt;/span&gt;
26.264721165271244
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; shop_df.loc[:, &lt;span class="s2"&gt;"Annual Income (k&lt;/span&gt;&lt;span class="nv"&gt;$)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.var&lt;span class="o"&gt;()&lt;/span&gt;
689.8355778894472
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas praktek 6&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tampilkan data persebaran dari product_weight_gram!&lt;/p&gt;

&lt;p&gt;NOTE: data → &lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Standar variasi kolom product_weight_gram
&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;product_weight_gram&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;std&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Varians kolom product_weight_gram
&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[:,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;product_weight_gram&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Menemukan Outliers Menggunakan Pandas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outliers merupakan data observasi yang muncul dengan nilai-nilai ekstrim. Yang dimaksud dengan nilai-nilai ekstrim dalam observasi adalah nilai yang jauh atau beda sama sekali dengan sebagian besar nilai lain dalam kelompoknya.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/3%25201%2520Exploratory%2520Data%2520Analysis%2520with%2520Python%2520for%2520Begi%2520e4b182c396c34c00ad247083a0d0fe19%2Foutlier.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/3%25201%2520Exploratory%2520Data%2520Analysis%2520with%2520Python%2520for%2520Begi%2520e4b182c396c34c00ad247083a0d0fe19%2Foutlier.png" alt="3%201%20Exploratory%20Data%20Analysis%20with%20Python%20for%20Begi%20e4b182c396c34c00ad247083a0d0fe19/outlier.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pada umumnya, outliers dapat ditentukan dengan metric IQR (interquartile range).&lt;/p&gt;

&lt;p&gt;Rumus dasar dari IQR: Q3 - Q1. Dan data suatu observasi dapat dikatakan outliers jika memenuhi kedua syarat dibawah ini:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data &amp;lt; Q1 - 1.5 * IQR&lt;/li&gt;
&lt;li&gt;data &amp;gt; Q3 + 1.5 * IQR&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Syntax python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Q1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quartile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quartile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;IQR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Q3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Q1&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IQR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; Q1 &lt;span class="o"&gt;=&lt;/span&gt; shopping_df[[&lt;span class="s2"&gt;"Annual Income (k&lt;/span&gt;&lt;span class="nv"&gt;$)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;.quantile&lt;span class="o"&gt;(&lt;/span&gt;0.25&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; Q3 &lt;span class="o"&gt;=&lt;/span&gt; shopping_df[[&lt;span class="s2"&gt;"Annual Income (k&lt;/span&gt;&lt;span class="nv"&gt;$)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;.quantile&lt;span class="o"&gt;(&lt;/span&gt;0.75&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; IQR &lt;span class="o"&gt;=&lt;/span&gt; Q3 - Q1
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; IQR
Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;    36.5
dtype: float64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;jika sudah memiliki skor IQR, selanjutnya menentukan Outliers. Kode di bawah in akan memberikan output dengan beberapa nilai True atau False. Titik data di mana terdapat False yang berarti nilai-nilai ini valid sendagkan True menunjukkan adanya Ourtliers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;shopping_df &amp;lt; &lt;span class="o"&gt;(&lt;/span&gt;Q1 - 1.5 &lt;span class="k"&gt;*&lt;/span&gt; IQR&lt;span class="o"&gt;))&lt;/span&gt; | &lt;span class="o"&gt;(&lt;/span&gt;shopping_df &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Q3 + 1.5 &lt;span class="k"&gt;*&lt;/span&gt; IQR&lt;span class="o"&gt;))&lt;/span&gt;

&amp;lt;stdin&amp;gt;:1: FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated and will raise ValueError &lt;span class="k"&gt;in &lt;/span&gt;a future version.  Do &lt;span class="sb"&gt;`&lt;/span&gt;left, right &lt;span class="o"&gt;=&lt;/span&gt; left.align&lt;span class="o"&gt;(&lt;/span&gt;right, &lt;span class="nv"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1, &lt;span class="nv"&gt;copy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;False&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; before e.g. &lt;span class="sb"&gt;`&lt;/span&gt;left &lt;span class="o"&gt;==&lt;/span&gt; right&lt;span class="sb"&gt;`&lt;/span&gt;
&amp;lt;stdin&amp;gt;:1: FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated and will raise ValueError &lt;span class="k"&gt;in &lt;/span&gt;a future version.  Do &lt;span class="sb"&gt;`&lt;/span&gt;left, right &lt;span class="o"&gt;=&lt;/span&gt; left.align&lt;span class="o"&gt;(&lt;/span&gt;right, &lt;span class="nv"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1, &lt;span class="nv"&gt;copy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;False&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; before e.g. &lt;span class="sb"&gt;`&lt;/span&gt;left &lt;span class="o"&gt;==&lt;/span&gt; right&lt;span class="sb"&gt;`&lt;/span&gt;

Age  Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;  CustomerID  Genre  Spending Score &lt;span class="o"&gt;(&lt;/span&gt;1-100&lt;span class="o"&gt;)&lt;/span&gt;
0    False               False       False  False                   False
1    False               False       False  False                   False
2    False               False       False  False                   False
3    False               False       False  False                   False
4    False               False       False  False                   False
..     ...                 ...         ...    ...                     ...
195  False               False       False  False                   False
196  False               False       False  False                   False
197  False               False       False  False                   False
198  False                True       False  False                   False
199  False                True       False  False                   False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas Praktek 7&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Menentukan batas IQR untuk menentukan outliers pada kolom &lt;strong&gt;product_weight_gram&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;NOTE: data → &lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;import pandas as pd
order_df &lt;span class="o"&gt;=&lt;/span&gt; pd.read_csv&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"https://storage.googleapis.com/dqlab-dataset/order.csv"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Hitung quartile 1&lt;/span&gt;
Q1 &lt;span class="o"&gt;=&lt;/span&gt; order_df[[&lt;span class="s2"&gt;"product_weight_gram"&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;.quantile&lt;span class="o"&gt;(&lt;/span&gt;0.25&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Hitung quartile 3&lt;/span&gt;
Q3 &lt;span class="o"&gt;=&lt;/span&gt; order_df[[&lt;span class="s2"&gt;"product_weight_gram"&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;.quantile&lt;span class="o"&gt;(&lt;/span&gt;0.75&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="c"&gt;# Hitung inter quartile range dan cetak ke console&lt;/span&gt;
IQR &lt;span class="o"&gt;=&lt;/span&gt; Q3 - Q1
print&lt;span class="o"&gt;(&lt;/span&gt;IQR&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rename Kolom Data Frame&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mengganti nama kolom pada Pandas dapat dilakukan dengan 2 cara:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Menggunakan nama kolom
2. Menggunakan indeks kolom
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Rename menggunakan nama kolom&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;column_name_before&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;column_name_after&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;inplace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;contoh penggunaan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nilai_skor_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Umur&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;inplace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="sb"&gt;``&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;endraw&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="mf"&gt;2.&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Rename&lt;/span&gt; &lt;span class="n"&gt;menggunakan&lt;/span&gt; &lt;span class="n"&gt;indeks&lt;/span&gt; &lt;span class="n"&gt;kolom&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;

&lt;span class="n"&gt;syntax&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="sb"&gt;``&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;
&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;no_of_column&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;column_name_after&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;contoh penggunaan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nilai_skor_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Umur&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas praktek 8&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cobalah untuk mengubah kolom freight_value menjadi shipping_cost dalam data frame order_df, dengan menggunakan fungsi &lt;code&gt;rename()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;DataFrame = &lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Ganti nama kolom freight_value menjadi shipping_cost
&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;freight_value&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;shipping_cost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;inplace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;.groupby menggunakan Pandas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kegunaan &lt;code&gt;.groupby&lt;/code&gt; adalah mencari summary dari data frame dengan menggunakan &lt;strong&gt;aggregate&lt;/strong&gt; dari kolom tertentu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;contoh penggunaan:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Diberikan dataset bernama &lt;strong&gt;df&lt;/strong&gt; seperti gambar di bawah ini!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/3%25201%2520Exploratory%2520Data%2520Analysis%2520with%2520Python%2520for%2520Begi%2520e4b182c396c34c00ad247083a0d0fe19%2Fcontoh_df.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/3%25201%2520Exploratory%2520Data%2520Analysis%2520with%2520Python%2520for%2520Begi%2520e4b182c396c34c00ad247083a0d0fe19%2Fcontoh_df.png" alt="3%201%20Exploratory%20Data%20Analysis%20with%20Python%20for%20Begi%20e4b182c396c34c00ad247083a0d0fe19/contoh_df.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Penggunaan groupby:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; shopping_data[&lt;span class="s2"&gt;"Age"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.groupby&lt;span class="o"&gt;([&lt;/span&gt;shopping_data[&lt;span class="s2"&gt;"Genre"&lt;/span&gt;&lt;span class="o"&gt;]])&lt;/span&gt;.mean&lt;span class="o"&gt;()&lt;/span&gt;
Genre
Female    38.098214
Male      39.806818
Name: Age, dtype: float64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan: Komputasi di atas menggunakan kolom "&lt;strong&gt;Genre&lt;/strong&gt;" sebagai &lt;em&gt;aggregate&lt;/em&gt; dan kemudian menghitung mean dari kolom "&lt;strong&gt;Age&lt;/strong&gt;" pada tiap-tiap aggregate tersebut.&lt;/p&gt;

&lt;p&gt;Contoh lainnya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; order_df[&lt;span class="s2"&gt;"freight_value"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;.groupby&lt;span class="o"&gt;([&lt;/span&gt;order_df[&lt;span class="s2"&gt;"product_category_name"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, order_df[&lt;span class="s2"&gt;"order_status"&lt;/span&gt;&lt;span class="o"&gt;]])&lt;/span&gt;.sum&lt;span class="o"&gt;()&lt;/span&gt;
product_category_name  order_status
    automotive             canceled          2212000
                           delivered       640559000
                           invoiced          2909000
                           processing        4152000
                           shipped           9012000
    beauty                 canceled          4089000
                           delivered       626722000
                           invoiced          3132000
                           processing        3016000
                           shipped           7613000
                           unavailable        186000
    electronics            approved            10000
                           canceled          3993000
                           delivered       638651000
                           invoiced          3823000
                           processing        3462000
                           shipped           8280000
                           unavailable        194000
    fashion                canceled          3582000
                           delivered       635846000
                           invoiced          3951000
                           processing        3434000
                           shipped           7192000
                           unavailable         53000
    gadget                 approved            53000
                           canceled          3294000
                           delivered       634502000
                           invoiced          1787000
                           processing        4236000
                           shipped           6386000
    sports                 canceled          3634000
                           delivered       633185000
                           invoiced          2652000
                           processing        3396000
                           shipped           6758000
                           unavailable        207000
    toys                   canceled          3381000
                           delivered       645547000
                           invoiced          3584000
                           processing        3518000
                           shipped           6627000
    utilities              approved            39000
                           canceled          2537000
                           delivered       633463000
                           invoiced          1494000
                           processing        3544000
                           shipped           6068000
Name: freight_value, dtype: int64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan: Komputasi di atas menggunakan kolom '&lt;strong&gt;product_category_name&lt;/strong&gt;', dan '&lt;strong&gt;order_status&lt;/strong&gt;' sebagai &lt;em&gt;aggregate&lt;/em&gt; dan kemudian menggunakan menghitung sum dari kolom "&lt;strong&gt;freight_value&lt;/strong&gt;" pada tiap-tiap aggregate tersebut.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas praktek 9&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cobalah untuk mencari rata rata dari &lt;strong&gt;price&lt;/strong&gt; per &lt;strong&gt;payment_type&lt;/strong&gt; dari dataset &lt;strong&gt;order_df!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NOTE: dataset → &lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[https://storage.googleapis.com/dqlab-dataset/order.csv](https://storage.googleapis.com/dqlab-dataset/order.csv)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;rata_rata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;payment_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rata_rata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sorting Menggunakan Pandas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sorting adalah sebuah metode mengurutkan data berdasarkan syarat kolom tertentu, dan biasanya digunakan untuk melihat nilai maximum dan minimum dari dataset. Library Pandas sendiri menyediakan fungsi sorting sebagai fundamental dari exploratory data analysis.&lt;/p&gt;

&lt;p&gt;Syntax untuk operasi sorting pada Pandas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; shopping_data.sort_values&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Age"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
         CustomerID   Genre  Age  Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;  Spending Score &lt;span class="o"&gt;(&lt;/span&gt;1-100&lt;span class="o"&gt;)&lt;/span&gt;
    114         115  Female   18                  65                      48
    91           92    Male   18                  59                      41
    65           66    Male   18                  48                      59
    33           34    Male   18                  33                      92
    0             1    Male   19                  15                      39
    ..          ...     ...  ...                 ...                     ...
    90           91  Female   68                  59                      55
    108         109    Male   68                  63                      43
    57           58    Male   69                  44                      46
    70           71    Male   70                  49                      55
    60           61    Male   70                  46                      56
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fungsi tersebut akan secara default mengurutkan secara ascending (dimulai dari nilai terkecil). Untuk dapat mengurutkan secara descending (dimulai dari nilai terbesar). dapat menggunakan properti tambahan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; shopping_data.sort_values&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Age"&lt;/span&gt;, &lt;span class="nv"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;False&lt;span class="o"&gt;)&lt;/span&gt;
         CustomerID   Genre  Age  Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;  Spending Score &lt;span class="o"&gt;(&lt;/span&gt;1-100&lt;span class="o"&gt;)&lt;/span&gt;
    70           71    Male   70                  49                      55
    60           61    Male   70                  46                      56
    57           58    Male   69                  44                      46
    90           91  Female   68                  59                      55
    67           68  Female   68                  48                      48
    ..          ...     ...  ...                 ...                     ...
    0             1    Male   19                  15                      39
    33           34    Male   18                  33                      92
    65           66    Male   18                  48                      59
    91           92    Male   18                  59                      41
    114         115  Female   18                  65                      48
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fungsi sorting di Pandas juga dapat dilakukan menggunakan lebih dari satu kolom sebagai syarat. Contohnya pada skenario dibawah, akan mencoba mengaplikasikan fungsi Sorting menggunakan Age dan Score sekaligus:&lt;/p&gt;

&lt;p&gt;Syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;nama_dataframe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nama_kolom2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh penggunaan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; shopping_data.sort_values&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;"Age"&lt;/span&gt;, &lt;span class="s2"&gt;"Spending Score (1-100)"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="nv"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;False, True]&lt;span class="o"&gt;)&lt;/span&gt;
         CustomerID   Genre  Age  Annual Income &lt;span class="o"&gt;(&lt;/span&gt;k&lt;span class="nv"&gt;$)&lt;/span&gt;  Spending Score &lt;span class="o"&gt;(&lt;/span&gt;1-100&lt;span class="o"&gt;)&lt;/span&gt;
    70           71    Male   70                  49                      55
    60           61    Male   70                  46                      56
    57           58    Male   69                  44                      46
    108         109    Male   68                  63                      43
    67           68  Female   68                  48                      48
    ..          ...     ...  ...                 ...                     ...
    68           69    Male   19                  48                      59
    91           92    Male   18                  59                      41
    114         115  Female   18                  65                      48
    65           66    Male   18                  48                      59
    33           34    Male   18                  33                      92

&lt;span class="o"&gt;[&lt;/span&gt;200 rows x 5 columns]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas Praktek 10&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cari berapa harga maximum pembelian customer di dataset &lt;strong&gt;order_df&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;NOTE: dataset → &lt;a href="https://storage.googleapis.com/dqlab-dataset/order.csv" rel="noopener noreferrer"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Hitung harga maksimum pembelian customer
&lt;/span&gt;&lt;span class="n"&gt;sort_harga&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sort_harga&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;[x]  &lt;strong&gt;Tugas Proyek Mini&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mengolah beberapa data penjualan dari dataset order.csv?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Median price yang dibayar customer dari masing-masing metode pembayaran.&lt;/li&gt;
&lt;li&gt;Tentukan metode pembayaran yang memiliki basket size (rataan median price) terbesar.&lt;/li&gt;
&lt;li&gt;Ubah freight_value menjadi shipping_cost dan cari shipping_cost termahal dari data penjualan tersebut menggunakan sort.&lt;/li&gt;
&lt;li&gt;Untuk product_category_name, berapa rata-rata weight produk tersebut dan standar deviasi mana yang terkecil dari weight tersebut,&lt;/li&gt;
&lt;li&gt;Buat histogram quantity penjualan dari dataset tersebut untuk melihat persebaran quantity penjualan tersebut dengan bins = 5 dan figsize= (4,5)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;pd&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;matplotlib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;plt&lt;/span&gt;

&lt;span class="nx"&gt;order_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://storage.googleapis.com/dqlab-dataset/order.csv&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Median&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="nx"&gt;yang&lt;/span&gt; &lt;span class="nx"&gt;dibayar&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt; &lt;span class="nx"&gt;dari&lt;/span&gt; &lt;span class="nx"&gt;masing&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;masing&lt;/span&gt; &lt;span class="nx"&gt;metode&lt;/span&gt; &lt;span class="nx"&gt;pembayaran&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
&lt;span class="nx"&gt;median_price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;payment_type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;median_price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Ubah&lt;/span&gt; &lt;span class="nx"&gt;freight_value&lt;/span&gt; &lt;span class="nx"&gt;menjadi&lt;/span&gt; &lt;span class="nx"&gt;shipping_cost&lt;/span&gt; &lt;span class="nx"&gt;dan&lt;/span&gt; &lt;span class="nx"&gt;cari&lt;/span&gt; &lt;span class="nx"&gt;shipping_cost&lt;/span&gt; 
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;termahal&lt;/span&gt; &lt;span class="nx"&gt;dari&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="nx"&gt;penjualan&lt;/span&gt; &lt;span class="nx"&gt;tersebut&lt;/span&gt; &lt;span class="nx"&gt;menggunakan&lt;/span&gt; &lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;freight_value&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shipping_cost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;inplace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;sort_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shipping_cost&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sort_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Untuk&lt;/span&gt; &lt;span class="nx"&gt;product_category_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;berapa&lt;/span&gt;  &lt;span class="nx"&gt;rata&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;rata&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="nx"&gt;produk&lt;/span&gt; &lt;span class="nx"&gt;tersebut&lt;/span&gt; 
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;dan&lt;/span&gt; &lt;span class="nx"&gt;standar&lt;/span&gt; &lt;span class="nx"&gt;deviasi&lt;/span&gt; &lt;span class="nx"&gt;mana&lt;/span&gt; &lt;span class="nx"&gt;yang&lt;/span&gt; &lt;span class="nx"&gt;terkecil&lt;/span&gt; &lt;span class="nx"&gt;dari&lt;/span&gt; &lt;span class="nx"&gt;weight&lt;/span&gt; &lt;span class="nx"&gt;tersebut&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="nx"&gt;mean_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;product_weight_gram&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;product_category_name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mean_value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nx"&gt;std_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;product_weight_gram&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;product_category_name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;std&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;std_value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Buat&lt;/span&gt; &lt;span class="nx"&gt;histogram&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; &lt;span class="nx"&gt;penjualan&lt;/span&gt; &lt;span class="nx"&gt;dari&lt;/span&gt; &lt;span class="nx"&gt;dataset&lt;/span&gt; &lt;span class="nx"&gt;tersebutuntuk&lt;/span&gt; &lt;span class="nx"&gt;melihat&lt;/span&gt; &lt;span class="nx"&gt;persebaran&lt;/span&gt; &lt;span class="nx"&gt;quantity&lt;/span&gt; 
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;penjualan&lt;/span&gt; &lt;span class="nx"&gt;tersebut&lt;/span&gt; &lt;span class="nx"&gt;dengan&lt;/span&gt; &lt;span class="nx"&gt;bins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="nx"&gt;dan&lt;/span&gt; &lt;span class="nx"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;order_df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quantity&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]].&lt;/span&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;bins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>datascience</category>
      <category>analyst</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Tipe Data Abstract - Day 01</title>
      <dc:creator>Danang Haris Setiawan</dc:creator>
      <pubDate>Sun, 24 Oct 2021 16:33:13 +0000</pubDate>
      <link>https://dev.to/danangharissetiawan/tipe-data-abstract-day-01-4lcd</link>
      <guid>https://dev.to/danangharissetiawan/tipe-data-abstract-day-01-4lcd</guid>
      <description>&lt;h2&gt;
  
  
  Theory 1
&lt;/h2&gt;

&lt;p&gt;Sebagai developer, kami sering diberi tugas dalam istilah non-teknis, dan terserah kami untuk mencari tahu bagaimana sebenarnya mengimplementasikan ide ke tingkat yang lebih tinggi. Bagaimana kita memilih alat apa yang akan digunakan untuk melakukan tugas ini? Biasanya, tugas yang ada memiliki persyaratan tertentu, jadi kami menjelajahi dokumentasi bahasa favorit kami (&lt;em&gt;atau sebagai alternatif hanya mencari di Google dan memilih hasil StackOverflow pertama, hhehehe... Just Kidding!!&lt;/em&gt;) dan memilih sesuatu yang memiliki fungsi yang memenuhi persyaratan untuk tugas kami.&lt;/p&gt;

&lt;p&gt;Sebagai contoh, katakanlah kita ingin menyimpan nilai dari banyak siswa di sebuah kelas dengan cara kita dapat query struktur data dengan nama siswa dan mengembalikan nilai siswa tersebut. Jelas, kasus ini bisa diselesaikan dengan jenis struktur data "map", yang memetakan "keys" (nama siswa) ke "values" (nilai). Jika kami tidak terlalu khawatir tentang kinerja, kami tidak perlu peduli tentang bagaimana struktur data menjalankan tugas-tugas ini: kami hanya peduli bahwa itu menyelesaikan pekerjaan.&lt;/p&gt;

&lt;p&gt;Apa yang kami jelaskan, suatu model untuk tipe data di mana tipe data ditentukan oleh perilakunya dari sudut pandang pengguna data (yakni, dengan fungsi apa yang diklaim pengguna perlu dimiliki) adalah Tipe Data Abstrak ( ADT).&lt;/p&gt;

&lt;h2&gt;
  
  
  Theory 2
&lt;/h2&gt;

&lt;p&gt;Kami baru saja memperkenalkan istilah, "tipe data abstrak", tetapi artikel ini tentang "struktur data", jadi apa bedanya? Kedua istilah ini terdengar sangat mirip, tetapi sebenarnya memiliki implikasi yang sangat berbeda. Seperti yang saya sebutkan, Tipe Data Abstrak didefinisikan oleh fungsi apa yang harus dapat dilakukan, tetapi sama sekali tidak tergantung pada bagaimana sebenarnya melakukan fungsi-fungsi tersebut (yaitu, tidak spesifik untuk implementasi). Di sisi lain, Struktur Data adalah representasi data yang konkret: terdiri dari semua mur dan baut, bagaimana data direpresentasikan (bagaimana mereka disimpan dalam memori, algoritma untuk melakukan berbagai operasi, dll.).&lt;/p&gt;

&lt;p&gt;Misalnya, katakanlah seorang pengguna ingin kita mendesain wadah "set" yang berisi bilangan bulat. Pengguna memutuskan bahwa wadah ini harus memiliki fungsi berikut:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fungsi "insert" yang akan mengembalikan True setelah penyisipan elemen baru, atau False jika elemen sudah ada.&lt;/li&gt;
&lt;li&gt;Fungsi "find" yang akan mengembalikan True jika ada elemen, jika tidak False.&lt;/li&gt;
&lt;li&gt;Fungsi "union" yang akan menambahkan semua elemen dari "set" lain ke dalam "set" ini.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pengguna telah berhasil menjelaskan fungsionalitas apa yang akan dimiliki wadah "set", tanpa detail spesifik implementasi apa pun (yakni, bagaimana ketiga fungsi yang dijelaskan akan bekerja). Akibatnya, wadah "set" ini adalah Tipe Data Abstrak. Sekarang terserah kita, para developer, untuk mencari cara yang benar untuk mengimplementasikan Tipe Data Abstrak ini.&lt;/p&gt;

&lt;p&gt;Bisakah kita mengetahui kompleksitas waktu dari salah satu dari tiga fungsi yang dijelaskan dalam wadah "set" di atas? Sayangnya tidak ada! Tipe Data Abstrak hanya menjelaskan fungsionalitas, bukan implementasi, kompleksitas waktu dari fungsi-fungsi ini sepenuhnya tergantung pada bagaimana programmer memilih untuk mengimplementasikan "set" (yakni, Struktur Data apa yang kami pilih untuk digunakan untuk mendukung wadah ini).&lt;/p&gt;

&lt;h2&gt;
  
  
  Theory 3
&lt;/h2&gt;

&lt;p&gt;Singkatnya, Tipe Data Abstrak hanya menjelaskan serangkaian fitur, dan berdasarkan fitur yang ingin kita miliki, kita perlu memilih Struktur Data yang sesuai untuk digunakan sebagai tulang punggung untuk mengimplementasikan ADT.&lt;/p&gt;

&lt;p&gt;Misalnya, bagaimana jika pengguna ingin ADT menyimpan daftar lagu? Saat kita mendengarkan musik, apakah kita selalu ingin mengulang lagu sesuai urutan kemunculannya? Biasanya, kami suka memiliki kemampuan untuk memilih lagu tertentu, yang dapat muncul di suatu tempat di tengah daftar lagu. Akibatnya, mungkin masuk akal bagi kami, para pemrogram, untuk menggunakan struktur berbasis array untuk mengimplementasikan ADT ini karena memiliki akses acak terbukti bermanfaat. Namun, kami dapat menggunakan Linked List untuk mengimplementasikan ADT ini sebagai gantinya! Fungsionalitasnya akan tetap benar, tetapi mungkin tidak secepat menggunakan struktur berbasis array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pZJxLQ-g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8n7ouki9rmm7q2r7bb76.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pZJxLQ-g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8n7ouki9rmm7q2r7bb76.jpg" alt="Tipe Data Abstract"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pada bagian selanjutnya, kita akan membahas beberapa Tipe Data Abstrak yang mendasar dan akan membahas pendekatan berbeda yang dapat kita gunakan untuk mengimplementasikannya (serta trade-off dari setiap pendekatan).&lt;/p&gt;

</description>
      <category>programming</category>
      <category>100daysofcode</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cara Beralih Versi Python Di Ubuntu</title>
      <dc:creator>Danang Haris Setiawan</dc:creator>
      <pubDate>Wed, 03 Mar 2021 07:10:29 +0000</pubDate>
      <link>https://dev.to/danangharissetiawan/cara-beralih-versi-python-di-ubuntu-4h8</link>
      <guid>https://dev.to/danangharissetiawan/cara-beralih-versi-python-di-ubuntu-4h8</guid>
      <description>&lt;h2&gt;
  
  
  Cara beralih alternatif versi Python langkah demi langkah
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Langkah pertama adalah memeriksa versi python apa yang tersedia di sistem Ubuntu Anda. Untuk melakukannya, jalankan perintah berikut:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; $ ls /usr/bin/python*

/usr/bin/python2  /usr/bin/python2.7  /usr/bin/python3  /usr/bin/python3.7  /usr/bin/python3.7m  /usr/bin/python3.8  /usr/bin/python3-futurize  /usr/bin/python3m  /usr/bin/python3-pasteurize
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Selanjutnya, periksa apakah Anda sudah memiliki beberapa alternatif python yang dikonfigurasi. Untuk melakukannya, jalankan:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo update-alternatives --list python

update-alternatives: error: no alternatives for python
    Saat ini sistem tidak memiliki alternatif python yang dikonfigurasi.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Pada langkah ini kita akan mengatur dua alternatif Python, yaitu alternatif Python2 dan Python3. Jalankan perintah berikut:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1

$ sudo update-alternatives --install /usr/bin/python python  /usr/bin/python3 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Konfirmasikan bahwa kedua alternatif siap digunakan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo update-alternatives --list python

/usr/bin/python2
/usr/bin/python3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Ubah ke versi alternatif python. Misalnya untuk mengubah ke Python 2 jalankan perintah berikut:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo update-alternatives --config python

There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3   2         auto mode
  1            /usr/bin/python2   1         manual mode
  2            /usr/bin/python3   2         manual mode

Press  to keep the current choice[*], or type selection number: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Masukkan nomor pilihan. Dalam hal ini untuk beralih ke Python versi 2 kami memasukkan 1 nomor pilihan.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Periksa versi python Anda:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python -V

Python 2.7.17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;NB: Untuk beralih ke alternatif Python 3, ulangi Langkah 5 dan masukkan nomor pilihan yang sesuai dengan versi python yang Anda inginkan.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>programming</category>
    </item>
    <item>
      <title>Port Scanner Dengan Python</title>
      <dc:creator>Danang Haris Setiawan</dc:creator>
      <pubDate>Sat, 24 Oct 2020 15:54:06 +0000</pubDate>
      <link>https://dev.to/danangharissetiawan/port-scanner-dengan-python-40o0</link>
      <guid>https://dev.to/danangharissetiawan/port-scanner-dengan-python-40o0</guid>
      <description>&lt;p&gt;Port Scanners biasanya digunakan untuk Penetration Testing dan Information Gathering. Pada dasarnya, hal itu adalah mencari port terbuka di host karena ada satu dari dua alasan. Pertama untuk memastikan server aman atau yang kedua untuk mengeksploitasi server orang lain. Port yang tidak perlu dibuka berarti port tersebut sudah terbuka dan memiliki kerentanan dan disertai dengan kurangnya keamanan.&lt;/p&gt;

&lt;p&gt;Oleh karena itu, sangat masuk akal untuk memindai porta jaringan Anda sendiri untuk menemukan potensi celah keamanan. Untuk melakukannya, kita dapat menggunakan perangkat lunak yang populer dan powerfull seperti Nmap. Namun dalam tutorial ini, kita akan membuat kode untuk memindai port dengan Python. Keuntungan yang kita dapat adalah kita dapat menyesuaikannya sesuai keinginan dan kita bisa belajar sesuatu tentang pemrograman. Kita memilih Python sebagai bahasa karena sederhana, modern, dan sangat powerfull.&lt;/p&gt;

&lt;p&gt;Sebelum kita mulai, Anda perlu tahu bahwa pemindaian port jaringan orang lain tanpa izin mereka adalah kejahatan. Pindai hanya jaringan Anda sendiri atau jaringan yang diizinkan. Atau, Anda dapat menggunakan scanme.nmap.org untuk bereksperimen. Saya tidak bertanggung jawab atas penyalahgunaan informasi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dasar-Dasar
&lt;/h2&gt;

&lt;p&gt;Mari kita lihat dulu fungsionalitas dasar pemindai port. Pemindai port mencoba menyambung ke Alamat IP pada port tertentu. Biasanya, ketika kita menjelajahi web, kita terhubung ke server melalui port 80 (HTTP) atau port 443 (HTTPS). Tetapi ada juga banyak port penting lainnya seperti 21 (FTP), 22 (SSH), 25 (SMTP) dan banyak lagi. Faktanya, ada lebih dari 130.000 port yang 1.023 distandarisasi dan 48.128 dicadangkan. Jadi, saat kita membuat pemindai port, lebih baik kita membuatnya seefesien mungkin dan fokus pada port-port penting.&lt;/p&gt;

&lt;p&gt;Sekarang, pertama-tama kita akan melihat cara paling sederhana untuk memindai port dengan Python.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def portscan(port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((target, port))
        return True
    except:
        return False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dalam contoh ini, kita membuat soket biasa yang mencoba menyambung ke target menggunakan port tertentu. Jika berhasil, kita mengembalikan nilai True. Jika ada pengecualian atau kesalahan, kita mengembalikan False. Kemudian kita mencetak hasilnya untuk masing-masing port.&lt;/p&gt;

&lt;p&gt;Ya, tentu saja, kita juga dapat mengotomatiskannya dengan membuat loop-for yang memindai semua port standar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for port in range(1, 1024):
    result = portscan(port)
    if(result):
        print("Port {} is open!".format(port))
    else:
        print("Port {} is closed!".format(port))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sebenarnya, ini aplikasi pemindai port sudah jadi. Tapi masih ada masalah. Saat Anda menjalankannya, Anda akan melihat bahwa ini sangat lambat, karena memindai port satu demi satu. Hal itu bisa sempurnakan dengan Multithreading. Jadi, mari kita masuk ke kodenya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Siapkan Port
&lt;/h2&gt;

&lt;p&gt;Kita perlu mengimport beberapa paket untuk mempermudah pekerjaan, untuk itu mari kita lakukan.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from queue import Queue
import socket
import threading
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Socket akan digunakan untuk mengkoneksikan ke host di port tertentu.&lt;br&gt;
Threading akan memungkinkan kita menjalankan beberapa fungsi pemindaian secara bersamaan.&lt;br&gt;
Queue adalah struktur data yang akan membantu kita mengelola akses beberapa thread pada satu resource, yang dalam kasus ini adalah nomor port. Karena thread kita berjalan secara bersamaan saat memindai port, kita menggunakan queue untuk memastikan bahwa setiap port hanya dipindai satu kali.&lt;br&gt;
Kemudian, kita juga akan membuat tiga variabel global yang nantinya akan kita gunakan di berbagai fungsi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;target = "103.131.51.4"
queue = Queue()
open_ports = []
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Target memiliki nilai yang berupa IP-Address atau domain dari host yang coba kita pindai.&lt;br&gt;
queque untuk sekarang kita kosongkan, nanti kita akan mengisinya dengan port yang ingin kita pindai.&lt;br&gt;
Dan yang tak kalah pentingnya kita memiliki daftar kosong, yang akan menyimpan nomor port terbuka.&lt;br&gt;
Mari kita mulai dengan mengimplementasikan fungsi portscan, seperti contoh di atas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def portscan(port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((target, port))
        return True
    except:
        return False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di sini Anda dapat melihat blok try-except, di mana kita mencoba untuk terhubung ke target pada port tertentu. Jika berhasil akan mengembalikan True, yang berarti port tersebut terbuka. Jika tidak, code di atas akan mengembalikan False, yang berarti ada kesalahan dan kita asumsikan bahwa port ditutup.&lt;/p&gt;

&lt;p&gt;Sekarang, sebelum kita masuk ke threading, kita perlu menentukan port yang ingin kita pindai. Untuk itu, kita akan mendefinisikan fungsi lain yang disebut get_ports .&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def get_ports(mode):
    if mode == 1:
        for port in range(1, 1024):
            queue.put(port)
    elif mode == 2:
        for port in range(1, 49152):
            queue.put(port)
    elif mode == 3:
        ports = [20, 21, 22, 23, 25, 53, 80, 110, 443]
        for port in ports:
            queue.put(port)
    elif mode == 4:
        ports = input("Enter your ports (spreate by blank):")
        ports = ports.split()
        ports = list(map(int, ports))
        for port in ports:
            queue.put(port)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dalam fungsi ini kita menetapkan empat mode. Mode pertama memindai 1023 port standar. Mode kedua kita menambahkan 48.128 port yang dicadangkan. Dan di mode ketiga kita fokuskan pada beberapa port terpenting. Terakhir, mode keempat memberi kita kemungkinan untuk memilih port kita secara manual. Kemudian kita menambahkan semua port tersebut ke queue.&lt;/p&gt;

&lt;p&gt;Mohon diperhatikan, ketika kita memasukan port di mode empat, nilai atau port yang kita inputkan berupa string. Oleh karena itu, kita perlu memetakan fungsi typecasting dari tipe data integer ke setiap elemen list untuk menggunakannya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multithreading
&lt;/h2&gt;

&lt;p&gt;Hal berikutnya yang perlu kita lakukan adalah mendefinisikan fungsi pemindai. Fungsi yang akan bertanggung jawab untuk mendapatkan nomor port dari queue, memindai dan mencetak hasilnya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def pemindai():
    while not queue.empty():
        port = queue.get()
        if portscan(port):
            print("Port {} is open!".format(port))
            open_ports.append(port)
        else:
            print("Port {} is closed!".format(port))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kode di atas cukup sederhana. Selama queue tidak kosong, kita mendapatkan elemen berikutnya dan memindainya. Jika port terbuka, kita mencetaknya begitupun dengan port yang ditutup. Tapi ketika kita mendapatkan port yang terbuka kita akan mendambahkanya ke daftar open_ports.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Catatan: Kita sangat menyarankan untuk tidak mencetak informasi saat port ditutup, karena informasi ini tidak berguna dan membuat keluaran kita membingungkan.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okey, sekarang kita bisa mengimplementasikan fungsionalitasnya, kita akan menulis fungsi utama yang membuat, memulai, dan mengelola thread.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def run_scanner(threads, mode):
    get_ports(mode)
    thread_list = []

    for t in range(threads):
        thread = threading.Thread(target=pemindai)
        thread_list.append(thread)

    for thread in thread_list:
        thread.start()

    for thread in thread_list:
        thread.join()

    print("Open ports are:", open_ports)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dalam fungsi ini, kita memiliki dua parameter. Yang pertama untuk jumlah thread yang ingin kita mulai dan yang kedua adalah mode. Kita akan memuat port tergantung pada mode yang kita pilih dan kita juga membuat daftar kosong baru untuk menyimpan thread. Kemudian, kita menentukan jumlah thread yang diinginkan, menetapkan fungsi pemindai dan menambahkannya ke list. Setelah itu, kita dapat memulainya dan melihat apakah kode kita berfungsi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;run_scanner(100, 1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dengan menjalankan kode di atas, kode tersebut akan memindai semua port standar. Untuk itu, kita menggunakan seratus thread. yang berarti kita memindai sekitar seratus port per detik. Anda dapat meningkatkan jumlah itu jika Anda mau. Maksimal kecepatanyang bisa saya lakukan dengan komputer saya adalah sekitar 800 pemindaian port per detik.&lt;/p&gt;

</description>
      <category>python</category>
    </item>
  </channel>
</rss>
