Python untuk Data Analytics: Matplotlib, Seaborn dan Visualisasi untuk Wawancara Kerja

Kuasai visualisasi data Python dengan Matplotlib dan Seaborn. Tutorial praktis mencakup grafik, styling, subplot, dan pertanyaan wawancara umum untuk posisi data analytics di tahun 2026.

Visualisasi data Python dengan Matplotlib dan Seaborn untuk wawancara data analytics

Visualisasi data Python menjadi salah satu keahlian yang paling sering diuji dalam wawancara data analytics. Perekrut mengharapkan kandidat mampu menghasilkan grafik yang bersih dan mudah dibaca dari data mentah — serta menjelaskan pilihan desain mereka dengan percaya diri.

Tutorial ini membahas Matplotlib 3.10 dan Seaborn 0.13, dua pustaka yang mendominasi wawancara teknis untuk posisi analis dan data scientist. Setiap contoh kode dapat dijalankan langsung dengan Python 3.12+.

Tips Wawancara

Sebagian besar wawancara data analytics mencakup sesi live coding di mana kandidat harus menghasilkan visualisasi dari dataset dalam waktu kurang dari 15 menit. Pola-pola di bawah ini langsung berkaitan dengan latihan tersebut.

Menyiapkan Lingkungan Visualisasi Data Python

Sebelum menulis kode grafik apa pun, lingkungan pengembangan memerlukan dependensi yang tepat. Virtual environment yang bersih mencegah konflik versi antara Matplotlib, Seaborn, dan fondasi NumPy/Pandas yang digunakan bersama.

bash
# setup.sh
python -m venv venv
source venv/bin/activate
pip install matplotlib==3.10.8 seaborn==0.13.2 pandas numpy

Pemeriksaan cepat untuk memastikan semua paket terpasang dengan benar:

python
# verify_install.py
import matplotlib
import seaborn as sns
import pandas as pd

print(f"Matplotlib: {matplotlib.__version__}")
print(f"Seaborn: {sns.__version__}")
print(f"Pandas: {pd.__version__}")

Setelah dependensi terkunci, langkah berikutnya berfokus pada dasar-dasar Matplotlib — fondasi untuk setiap grafik Seaborn.

Dasar-Dasar Matplotlib: Figure, Axes dan API Berorientasi Objek

Matplotlib menawarkan dua API: state machine pyplot dan antarmuka berorientasi objek (OO). API OO memberikan kontrol eksplisit atas setiap elemen dan merupakan standar yang diharapkan dalam kode profesional maupun wawancara kerja.

python
# bar_chart_oo.py
import matplotlib.pyplot as plt
import numpy as np

# Sample quarterly revenue data
quarters = ["Q1", "Q2", "Q3", "Q4"]
revenue = [42_000, 58_000, 51_000, 67_000]

# Create figure and axes explicitly
fig, ax = plt.subplots(figsize=(8, 5))

# Draw bars with a specific color
ax.bar(quarters, revenue, color="#2563eb", width=0.5)

# Label axes clearly — interviewers check for this
ax.set_xlabel("Quarter")
ax.set_ylabel("Revenue (USD)")
ax.set_title("Quarterly Revenue — 2025")

# Format y-axis with dollar amounts
ax.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}"))

# Remove top and right spines for a cleaner look
ax.spines[["top", "right"]].set_visible(False)

plt.tight_layout()
plt.savefig("quarterly_revenue.png", dpi=150)
plt.show()

Detail penting yang diperhatikan pewawancara: pembuatan fig, ax secara eksplisit alih-alih menggunakan plt.plot(), label sumbu yang mudah dibaca, nilai tick yang terformat, dan penghapusan elemen grafik yang tidak perlu (spines berlebihan). Pilihan-pilihan kecil ini menandakan pola pikir tingkat produksi.

Membuat Subplot untuk Analisis Perbandingan

Wawancara kerja sering kali mengharuskan perbandingan beberapa metrik secara berdampingan. Fungsi subplots() menangani hal ini dengan tata letak grid.

python
# subplots_comparison.py
import matplotlib.pyplot as plt
import numpy as np

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
users = [1200, 1350, 1500, 1420, 1680, 1820]
revenue = [24_000, 27_000, 30_000, 28_400, 33_600, 36_400]

# Two side-by-side plots sharing the x-axis
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5), sharey=False)

# Left panel: user growth as a line chart
ax1.plot(months, users, marker="o", color="#2563eb", linewidth=2)
ax1.set_title("Monthly Active Users")
ax1.set_ylabel("Users")
ax1.spines[["top", "right"]].set_visible(False)

# Right panel: revenue as a bar chart
ax2.bar(months, revenue, color="#16a34a", width=0.5)
ax2.set_title("Monthly Revenue")
ax2.set_ylabel("Revenue (USD)")
ax2.yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}"))
ax2.spines[["top", "right"]].set_visible(False)

fig.suptitle("Product Metrics — H1 2025", fontsize=14, fontweight="bold")
plt.tight_layout()
plt.savefig("product_metrics.png", dpi=150)
plt.show()

Penggunaan sharey=False memungkinkan setiap panel memiliki skala sendiri — pendapatan dalam dolar dan pengguna sebagai hitungan memiliki besaran yang berbeda. Fungsi suptitle menambahkan judul utama di atas kedua subplot.

Kesalahan Umum dalam Wawancara

Kandidat sering menggunakan plt.plot() untuk semua kebutuhan visualisasi alih-alih API berorientasi objek. Ketika pewawancara meminta penambahan sumbu y kedua atau penyesuaian subplot tunggal, pendekatan pyplot menjadi tidak memadai. Selalu gunakan fig, ax = plt.subplots() sebagai standar.

Plot Statistik Seaborn: Dari Distribusi hingga Korelasi

Seaborn dibangun di atas Matplotlib dan mengkhususkan diri dalam visualisasi statistik. Di mana Matplotlib memerlukan konfigurasi manual, Seaborn menyimpulkan default yang masuk akal dari struktur data.

Analisis distribusi — salah satu tugas wawancara yang paling umum — hanya membutuhkan satu pemanggilan fungsi:

python
# distribution_analysis.py
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Simulate salary data for two departments
np.random.seed(42)
data = pd.DataFrame({
    "salary": np.concatenate([
        np.random.normal(75_000, 12_000, 200),  # Engineering
        np.random.normal(65_000, 10_000, 150),  # Marketing
    ]),
    "department": ["Engineering"] * 200 + ["Marketing"] * 150
})

# KDE plot comparing salary distributions
fig, ax = plt.subplots(figsize=(10, 5))
sns.kdeplot(
    data=data,
    x="salary",
    hue="department",        # Automatically splits by category
    fill=True,               # Shaded area under the curve
    alpha=0.4,
    palette=["#2563eb", "#dc2626"],
    ax=ax                    # Attach to our explicit axes
)

ax.set_title("Salary Distribution by Department")
ax.set_xlabel("Annual Salary (USD)")
ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}"))
ax.spines[["top", "right"]].set_visible(False)

plt.tight_layout()
plt.savefig("salary_distribution.png", dpi=150)
plt.show()

Parameter hue membagi data secara otomatis, dan fill=True membuat area yang tumpang tindih terlihat jelas. Pola ini — mengelompokkan distribusi berdasarkan kategori — muncul di hampir setiap panel wawancara analytics.

Siap menguasai wawancara Data Analytics Anda?

Berlatih dengan simulator interaktif, flashcards, dan tes teknis kami.

Heatmap Seaborn untuk Matriks Korelasi

Heatmap korelasi mengungkap hubungan antar variabel numerik secara sekilas. Pewawancara menggunakannya untuk menguji apakah kandidat dapat mengidentifikasi multikolinearitas atau menemukan hubungan fitur yang kuat.

python
# correlation_heatmap.py
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Simulate e-commerce metrics
np.random.seed(42)
n = 500
page_views = np.random.poisson(15, n)
time_on_site = page_views * 2.5 + np.random.normal(0, 5, n)
cart_adds = np.random.binomial(page_views, 0.3)
purchases = np.random.binomial(cart_adds, 0.4)

df = pd.DataFrame({
    "page_views": page_views,
    "time_on_site": time_on_site,
    "cart_adds": cart_adds,
    "purchases": purchases
})

# Compute Pearson correlation
corr_matrix = df.corr()

fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(
    corr_matrix,
    annot=True,              # Show correlation values in cells
    fmt=".2f",               # Two decimal places
    cmap="RdBu_r",           # Diverging colormap centered on 0
    vmin=-1, vmax=1,         # Fixed scale for consistency
    square=True,             # Square cells
    linewidths=0.5,
    ax=ax
)

ax.set_title("E-commerce Metrics Correlation")
plt.tight_layout()
plt.savefig("correlation_heatmap.png", dpi=150)
plt.show()

Colormap divergen RdBu_r membuat korelasi positif berwarna biru dan korelasi negatif berwarna merah — sebuah konvensi yang diharapkan pewawancara. Pengaturan vmin=-1 dan vmax=1 memastikan skala warna tetap dapat diinterpretasikan terlepas dari rentang data aktual.

Styling Grafik untuk Presentasi Profesional

Output Matplotlib mentah terlihat usang. Beberapa baris konfigurasi dapat mengubah grafik menjadi visual siap presentasi yang menunjukkan perhatian terhadap detail selama wawancara.

python
# professional_styling.py
import matplotlib.pyplot as plt
import seaborn as sns

# Apply Seaborn's built-in theme
sns.set_theme(
    style="whitegrid",       # Clean background with grid lines
    palette="muted",         # Professional color palette
    font_scale=1.1           # Slightly larger text
)

# Global Matplotlib overrides
plt.rcParams.update({
    "figure.facecolor": "white",
    "axes.facecolor": "white",
    "font.family": "sans-serif",
    "axes.titlesize": 14,
    "axes.labelsize": 12,
})

Menerapkan sns.set_theme() di bagian atas skrip menyebarkan styling yang konsisten ke setiap grafik berikutnya. Selama wawancara, hal ini menghindari pemborosan waktu untuk pemformatan per-grafik.

Catatan Versi

Seaborn 0.13 telah menghentikan penggunaan set_style() dan set_palette() sebagai panggilan terpisah. Fungsi set_theme() yang terpadu menggantikan keduanya. Jawaban Stack Overflow yang lebih lama masih mereferensikan API yang sudah usang — hindari penggunaannya dalam wawancara 2026.

Pertanyaan Wawancara Visualisasi Data yang Umum

Selain coding, pewawancara juga menguji pemahaman konseptual tentang praktik terbaik visualisasi. Pertanyaan-pertanyaan di bawah ini muncul secara konsisten dalam wawancara data analytics dan data science.

Kapan sebaiknya menggunakan bar chart dibandingkan line chart? Bar chart menampilkan perbandingan antar kategori diskrit (departemen, jenis produk, wilayah). Line chart menunjukkan tren dalam interval yang kontinu atau berurutan (time series, pengukuran sekuensial). Menggunakan line chart untuk kategori yang tidak berurutan menyiratkan hubungan palsu antara bar yang berdekatan.

Apa yang membuat sebuah grafik menyesatkan? Sumbu y yang terpotong, dual sumbu y dengan skala berbeda, efek 3D pada data 2D, dan rentang waktu yang dipilih secara selektif — semua hal ini mendistorsi persepsi. Solusinya: mulai sumbu y dari nol untuk bar chart, beri label sumbu secara eksplisit, dan hindari elemen dekoratif yang mengaburkan data.

Bagaimana pemilihan palet warna memengaruhi interpretasi data? Palet sekuensial (terang-ke-gelap) cocok untuk data terurut seperti suhu atau pendapatan. Palet divergen (dua warna bertemu di pusat netral) menyoroti deviasi dari titik tengah, seperti untung/rugi atau koefisien korelasi. Palet kategorikal menggunakan warna berbeda untuk kelompok yang tidak terkait. Palet ramah buta warna (seperti colorblind atau muted dari Seaborn) memastikan aksesibilitas — detail yang membedakan kandidat senior.

Jelaskan perbedaan antara plt.show() dan plt.savefig(). plt.show() merender gambar ke jendela interaktif dan menghapus status gambar setelahnya. plt.savefig() menulis gambar ke file tanpa menghapusnya. Memanggil savefig() setelah show() menghasilkan file kosong — bug yang umum terjadi. Urutan yang benar: savefig() terlebih dahulu, kemudian show().

Menggabungkan Semuanya: Latihan Wawancara End-to-End

Latihan take-home atau live coding yang tipikal menggabungkan pemuatan data, pembersihan, dan beberapa jenis grafik. Contoh berikut mencerminkan soal wawancara nyata dari tim analytics.

python
# interview_exercise.py
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

sns.set_theme(style="whitegrid", palette="muted", font_scale=1.05)

# Simulate 12 months of product data
np.random.seed(42)
months = pd.date_range("2025-01", periods=12, freq="MS")
df = pd.DataFrame({
    "month": months,
    "revenue": np.cumsum(np.random.normal(5000, 2000, 12)) + 50_000,
    "customers": np.cumsum(np.random.poisson(50, 12)) + 500,
    "churn_rate": np.clip(np.random.normal(0.05, 0.015, 12), 0.01, 0.12)
})

fig, axes = plt.subplots(1, 3, figsize=(18, 5))

# Panel 1: Revenue trend
axes[0].plot(df["month"], df["revenue"], marker="o", color="#2563eb")
axes[0].set_title("Revenue Trend")
axes[0].set_ylabel("Revenue (USD)")
axes[0].yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"${x:,.0f}"))
axes[0].tick_params(axis="x", rotation=45)
axes[0].spines[["top", "right"]].set_visible(False)

# Panel 2: Customer growth
axes[1].bar(df["month"], df["customers"], color="#16a34a", width=20)
axes[1].set_title("Customer Growth")
axes[1].set_ylabel("Total Customers")
axes[1].tick_params(axis="x", rotation=45)
axes[1].spines[["top", "right"]].set_visible(False)

# Panel 3: Churn rate with threshold line
axes[2].plot(df["month"], df["churn_rate"], marker="s", color="#dc2626")
axes[2].axhline(y=0.05, color="gray", linestyle="--", label="Target: 5%")
axes[2].set_title("Monthly Churn Rate")
axes[2].set_ylabel("Churn Rate")
axes[2].yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f"{x:.1%}"))
axes[2].tick_params(axis="x", rotation=45)
axes[2].spines[["top", "right"]].set_visible(False)
axes[2].legend()

fig.suptitle("Product Dashboard — FY 2025", fontsize=14, fontweight="bold")
plt.tight_layout()
plt.savefig("interview_dashboard.png", dpi=150)
plt.show()

Latihan ini mendemonstrasikan tiga jenis grafik dalam tata letak terpadu, pemformatan sumbu yang tepat, garis referensi untuk target churn, dan styling yang konsisten. Ini adalah elemen-elemen yang tepat yang dinilai pewawancara.

Kesimpulan

  • API berorientasi objek Matplotlib (fig, ax = plt.subplots()) memberikan kontrol penuh dan merupakan standar yang diharapkan dalam lingkungan profesional maupun wawancara
  • Parameter hue Seaborn dan fungsi statistik bawaan (KDE, heatmap) menangani analisis berkelompok dengan kode minimal
  • Heatmap korelasi dengan colormap divergen dan skala tetap (vmin=-1, vmax=1) merupakan elemen pokok wawancara analytics
  • Selalu panggil savefig() sebelum show() untuk menghindari file output kosong
  • Styling yang bersih — spines yang dihapus, label tick terformat, judul eksplisit — menandakan pemikiran berkualitas produksi kepada pewawancara
  • Berlatihlah membangun dashboard multi-panel di bawah tekanan waktu: sebagian besar sesi live coding mengalokasikan 10-15 menit per tugas visualisasi

Mulai berlatih!

Uji pengetahuan Anda dengan simulator wawancara dan tes teknis kami.

Tag

#python
#matplotlib
#seaborn
#data-visualization
#data-analytics
#interview

Bagikan

Artikel terkait