Data Science Challenge with Python adalah tantangan atau proyek mini yang bertujuan untuk menguji dan melatih keterampilan data science menggunakan bahasa Python. Challenge ini mencakup analisis data, preprocessing, eksplorasi data (EDA), pemodelan machine learning, dan pembuatan insight dari dataset tertentu.
Contoh: "Prediksi churn pelanggan berdasarkan data transaksi dan demografi."
Gunakan pandas untuk membaca data:
import pandas as pd
df = pd.read_csv("data.csv")
- Tinjau struktur data:
df.info()
- Statistik deskriptif:
df.describe()
- Visualisasi:
import seaborn as sns
import matplotlib.pyplot as plt
sns.countplot(x='churn', data=df)
plt.show()
- Tangani missing value
- Encode data kategorik
- Normalisasi atau standardisasi
- Buat fitur baru jika perlu
- Hapus fitur yang tidak relevan
Pisahkan data training dan testing:
from sklearn.model_selection import train_test_split
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Gunakan model machine learning:
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)
from sklearn.metrics import accuracy_score, classification_report
y_pred = model.predict(X_test)
print(accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
- Interpretasi hasil model
- Analisis fitur penting (feature importance)
- Visualisasi insight menggunakan seaborn/matplotlib
Tujuan | Library |
---|---|
Manipulasi Data | pandas , numpy |
Visualisasi | matplotlib , seaborn , plotly |
Preprocessing | sklearn.preprocessing |
Machine Learning | scikit-learn , xgboost , lightgbm |
Evaluasi Model | sklearn.metrics |
- Prediksi churn pelanggan
- Prediksi harga rumah
- Klasifikasi review positif/negatif
- Deteksi penipuan transaksi
- Analisis data film (IMDb, Netflix)
- Melatih pemahaman pipeline data science end-to-end
- Mengasah keterampilan eksplorasi data dan visualisasi
- Meningkatkan kemampuan pembuatan model dan evaluasi
- Mengembangkan kemampuan komunikasi insight dan hasil analisis
Data Engineer Challenge with Python adalah tantangan praktik yang dirancang untuk menguji dan memperkuat keterampilan dalam merancang, membangun, dan mengelola pipeline data menggunakan Python. Challenge ini mencakup pemrosesan data skala besar, ETL (Extract, Transform, Load), integrasi API, manajemen database, serta penggunaan tools big data dan cloud.
Contoh: "Bangun pipeline untuk mengambil data transaksi harian dari API, bersihkan dan masukkan ke dalam database PostgreSQL."
-
Ambil data dari berbagai sumber:
- File CSV/JSON/Excel
- REST API (menggunakan
requests
atauhttpx
) - Database (menggunakan
sqlalchemy
ataupsycopg2
)
Contoh:
import requests
response = requests.get("https://api.example.com/data")
data = response.json()
-
Gunakan
pandas
,pyarrow
, ataudask
untuk membersihkan dan transformasi data:- Drop kolom duplikat
- Parsing tanggal
- Normalisasi format
Contoh:
import pandas as pd
df = pd.DataFrame(data)
df['created_at'] = pd.to_datetime(df['created_at'])
df = df.drop_duplicates()
- Gunakan
SQLAlchemy
,psycopg2
, ataupymysql
untuk menyimpan data ke RDBMS seperti PostgreSQL atau MySQL
Contoh:
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:password@localhost/dbname')
df.to_sql('transaksi', engine, index=False, if_exists='replace')
- Gunakan scheduler seperti
Airflow
,Prefect
, atauDagster
untuk mengatur dan menjadwalkan pipeline
- Tambahkan logging menggunakan
logging
- Simpan log ke file atau monitoring tools seperti ELK Stack, Prometheus
Kategori | Tools |
---|---|
Manipulasi Data | pandas , dask , pyarrow |
API & Web | requests , httpx , beautifulsoup4 |
Database | sqlalchemy , psycopg2 , pymysql , sqlite3 |
Workflow & Orkestrasi | Airflow , Prefect , Dagster |
Cloud & Big Data | AWS S3 , Google BigQuery , Spark , Hadoop |
Logging | logging , loguru |
- Pipeline ETL untuk e-commerce data
- Migrasi data dari MySQL ke PostgreSQL
- Ingest data real-time dari Kafka ke database
- Automasi scraping dan load ke warehouse
- Integrasi data dari API cuaca ke dashboard
- Memahami arsitektur data pipeline
- Membangun proses ETL yang efisien dan scalable
- Menghubungkan berbagai sumber data ke sistem penyimpanan
- Menjadwalkan dan memantau proses data
Proyek Simple ETL (Extract, Transform, Load) with Pandas adalah contoh pipeline data sederhana yang menggunakan Python dan pustaka Pandas untuk mengekstrak data dari sumber (misalnya file CSV), melakukan transformasi data (pembersihan, manipulasi), dan memuat hasil akhir ke dalam file lain atau database.
- Memahami proses dasar ETL dalam Data Engineering
- Menerapkan manipulasi data dengan Pandas
- Menghasilkan dataset bersih dan siap digunakan
Mengambil data dari sumber (misal: CSV, Excel, API):
import pandas as pd
df = pd.read_csv("raw_data.csv")
Bersihkan dan ubah data agar sesuai dengan kebutuhan analisis:
# Drop kolom yang tidak relevan
df = df.drop(columns=["unnecessary_column"])
# Ganti nilai kosong
df.fillna(0, inplace=True)
# Ubah format tanggal
df["date"] = pd.to_datetime(df["date"])
Simpan hasil akhir ke file baru atau database:
# Simpan ke CSV
df.to_csv("clean_data.csv", index=False)
# Atau simpan ke database (opsional)
# from sqlalchemy import create_engine
# engine = create_engine('sqlite:///clean_data.db')
# df.to_sql('table_name', engine, index=False, if_exists='replace')
Fungsi | Library |
---|---|
Manipulasi data | pandas |
Ekspor file | csv , Excel , SQLAlchemy |
Waktu dan Tanggal | datetime , pandas.to_datetime |
- Bersihkan data penjualan harian dari CSV
- Gabungkan beberapa file Excel bulanan menjadi satu dataset
- Normalisasi kolom kategori dan simpan ke PostgreSQL
- File
clean_data.csv
siap digunakan untuk analisis - Dokumentasi dan reproducible script ETL
Proyek ini bertujuan membangun sistem rekomendasi sederhana menggunakan Python dan algoritma machine learning. Sistem rekomendasi merupakan salah satu aplikasi machine learning yang paling populer, digunakan dalam e-commerce, streaming platform, dan layanan digital lainnya.
- Menerapkan algoritma rekomendasi berbasis data
- Memahami pendekatan content-based dan collaborative filtering
- Mengembangkan pipeline machine learning sederhana
-
Content-Based Filtering
- Rekomendasi berdasarkan kesamaan fitur item (misalnya genre film, deskripsi produk)
-
Collaborative Filtering
- Rekomendasi berdasarkan pola interaksi pengguna (misalnya rating, klik, pembelian)
- Contoh: matrix factorization menggunakan
Surprise
atauscikit-learn
- MovieLens dataset (
ratings.csv
,movies.csv
) - Produk e-commerce (user_id, product_id, rating)
Fungsi | Library |
---|---|
Manipulasi data | pandas , numpy |
Visualisasi | matplotlib , seaborn |
Machine Learning | scikit-learn , Surprise , lightfm |
NLP (opsional) | TfidfVectorizer |
import pandas as pd
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel
# TF-IDF dari genre atau deskripsi
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix = tfidf.fit_transform(movies['genres'])
# Cosine similarity antar item
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)
from surprise import SVD, Dataset, Reader
from surprise.model_selection import train_test_split
reader = Reader(rating_scale=(0.5, 5))
data = Dataset.load_from_df(ratings[['userId', 'movieId', 'rating']], reader)
trainset, testset = train_test_split(data, test_size=0.2)
model = SVD()
model.fit(trainset)
predictions = model.test(testset)
from surprise import accuracy
print("RMSE:", accuracy.rmse(predictions))
def get_top_n(predictions, n=5):
from collections import defaultdict
top_n = defaultdict(list)
for uid, iid, true_r, est, _ in predictions:
top_n[uid].append((iid, est))
for uid, user_ratings in top_n.items():
user_ratings.sort(key=lambda x: x[1], reverse=True)
top_n[uid] = user_ratings[:n]
return top_n
- Rekomendasi item untuk user tertentu
- Evaluasi model dengan RMSE atau Precision@K
- Visualisasi kesamaan item dan rating
- Tambahkan hybrid filtering
- Integrasi dengan Streamlit atau Flask untuk membuat web rekomendasi
- Gunakan data real-time atau data dari API
Proyek ini bertujuan membangun sistem rekomendasi sederhana menggunakan Python dan fungsi kesamaan (similarity function). Sistem rekomendasi dengan pendekatan ini memberikan saran item kepada pengguna berdasarkan kemiripan antar item atau antar pengguna.
- Menerapkan algoritma similarity-based recommendation
- Menggunakan teknik seperti cosine similarity dan Pearson correlation
- Memahami cara kerja sistem rekomendasi berbasis kesamaan item/user
-
Item-Based Similarity
- Mencari item yang mirip dengan item yang disukai user
- Contoh: User suka film A β rekomendasi film yang mirip dengan A
-
User-Based Similarity
- Mencari user dengan preferensi serupa β rekomendasi berdasarkan apa yang disukai user lain yang mirip
- MovieLens dataset (
ratings.csv
,movies.csv
) - Dataset user-product rating
Fungsi | Library |
---|---|
Manipulasi data | pandas , numpy |
Visualisasi | matplotlib , seaborn |
Similarity | scikit-learn , scipy |
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')
user_item_matrix = ratings.pivot_table(index='userId', columns='movieId', values='rating')
# Mengisi nilai NaN dengan 0
user_item_filled = user_item_matrix.fillna(0)
# Cosine similarity antar item
item_similarity = cosine_similarity(user_item_filled.T)
item_similarity_df = pd.DataFrame(item_similarity, index=user_item_matrix.columns, columns=user_item_matrix.columns)
def recommend_items(item_id, item_similarity_df, top_n=5):
similar_scores = item_similarity_df[item_id].sort_values(ascending=False)
similar_scores = similar_scores.drop(item_id)
return similar_scores.head(top_n)
- Hitung Precision@K dan Recall@K berdasarkan user actual dan prediksi
- Daftar item rekomendasi berdasarkan kesamaan item
- Matriks kesamaan item (cosine atau Pearson)
- Fungsi umum
recommend_items()
yang reusable
- Gabungkan dengan metode collaborative filtering untuk hybrid model
- Tambahkan filter genre atau kategori untuk penyaringan hasil
- Implementasi pada aplikasi web sederhana menggunakan Streamlit