Lewati ke konten utama

Prapemrosesan Data: Panduan Lengkap dengan Contoh Python

Pelajari teknik menyiapkan data mentah untuk analisis atau machine learning dengan contoh Python!
Diperbarui 16 Apr 2026  · 10 mnt baca

Kualitas data Anda berdampak langsung pada akurasi analisis dan kinerja model. Mengapa? Karena data mentah sering berisi ketidakselarasan, kesalahan, dan informasi yang tidak relevan yang dapat mendistorsi hasil dan menghasilkan wawasan yang keliru. Prapemrosesan data adalah cara untuk mengurangi masalah ini. Yakni, proses mengubah data mentah menjadi format yang bersih dan terstruktur. 

Dalam artikel blog ini, saya akan membahas: 

  • Apa itu prapemrosesan data? 
  • Langkah-langkah dalam prapemrosesan data
  • Teknik prapemrosesan data beserta contohnya
  • Alat untuk prapemrosesan data
  • Praktik terbaik untuk prapemrosesan data

Mari kita mulai!

Apa itu Prapemrosesan Data?

Prapemrosesan data adalah aspek kunci dari persiapan data. Ini merujuk pada pemrosesan apa pun yang diterapkan pada data mentah agar siap untuk tugas analisis atau pemrosesan lebih lanjut. 

Secara tradisional, prapemrosesan data merupakan langkah awal yang penting dalam analisis data. Namun, belakangan ini, teknik-teknik tersebut telah diadaptasi untuk melatih model machine learning dan AI serta membuat inferensi dari model tersebut. 

Dengan demikian, prapemrosesan data dapat didefinisikan sebagai proses mengonversi data mentah ke dalam format yang dapat diproses lebih efisien dan akurat dalam tugas seperti: 

  • Analisis data
  • Machine learning 
  • Data science
  • AI

Langkah-langkah dalam Prapemrosesan Data

Prapemrosesan data mencakup beberapa langkah, masing-masing menangani tantangan spesifik terkait kualitas, struktur, dan relevansi data. 

Mari kita lihat langkah-langkah kunci ini, yang umumnya berjalan dalam urutan berikut: 

Langkah 1: Pembersihan data

Pembersihan data adalah proses mengidentifikasi dan memperbaiki kesalahan atau ketidakkonsistenan dalam data untuk memastikan data akurat dan lengkap. Tujuannya adalah mengatasi masalah yang dapat mendistorsi analisis atau kinerja model.

Contohnya: 

  • Menangani nilai yang hilang: Menggunakan strategi seperti imputasi mean/modus, penghapusan, atau model prediktif untuk mengisi atau menghapus data yang hilang.
  • Menghapus duplikasi: Mengeliminasi catatan duplikat untuk memastikan setiap entri unik dan relevan.
  • Mengoreksi format yang tidak konsisten: Standarisasi format (misalnya, format tanggal, huruf besar/kecil) untuk menjaga konsistensi.

Berikut tampilannya di Python:

# Creating a manual dataset
data = pd.DataFrame({
    'name': ['John', 'Jane', 'Jack', 'John', None],
    'age': [28, 34, None, 28, 22],
    'purchase_amount': [100.5, None, 85.3, 100.5, 50.0],
    'date_of_purchase': ['2023/12/01', '2023/12/02', '2023/12/01', '2023/12/01', '2023/12/03']
	})

# Handling missing values using mean imputation for 'age' and 'purchase_amount'
imputer = SimpleImputer(strategy='mean')
data[['age', 'purchase_amount']] = imputer.fit_transform(data[['age', 'purchase_amount']])

# Removing duplicate rows
data = data.drop_duplicates()

# Correcting inconsistent date formats
data['date_of_purchase'] = pd.to_datetime(data['date_of_purchase'], errors='coerce')

print(data)

Gambar menampilkan tabel yang merepresentasikan output dari skrip Python

Output kode di atas 

Langkah 2: Integrasi data

Integrasi data melibatkan penggabungan data dari beberapa sumber untuk membuat satu set data terpadu. Ini sering diperlukan saat data dikumpulkan dari berbagai sistem sumber.

Beberapa teknik yang digunakan dalam integrasi data meliputi: 

  • Pencocokan skema (schema matching): Menyelaraskan field dan struktur data dari berbagai sumber untuk memastikan konsistensi.
  • Deduplikasi data: Mengidentifikasi dan menghapus entri duplikat di berbagai set data.

Misalnya, anggaplah kita memiliki data pelanggan dari beberapa basis data. Begini cara kita menggabungkannya menjadi satu tampilan: 

# Creating two manual datasets
data1 = pd.DataFrame({
    'customer_id': [1, 2, 3],
    'name': ['John', 'Jane', 'Jack'],
    'age': [28, 34, 29]
})

data2 = pd.DataFrame({
    'customer_id': [1, 3, 4],
    'purchase_amount': [100.5, 85.3, 45.0],
    'purchase_date': ['2023-12-01', '2023-12-02', '2023-12-03']
})

# Merging datasets on a common key 'customer_id'
merged_data = pd.merge(data1, data2, on='customer_id', how='inner')

print(merged_data)

Gambar menampilkan tabel yang merepresentasikan output dari skrip Python

Output kode di atas

Langkah 3: Transformasi data

Transformasi data mengonversi data ke format yang sesuai untuk analisis, machine learning, atau penambangan data. 

Contohnya:

  • Skalasi dan normalisasi: Menyesuaikan nilai numerik ke skala umum sering diperlukan untuk algoritma yang bergantung pada metrik jarak.
  • Pengodean variabel kategorikal: Mengonversi data kategorikal menjadi nilai numerik menggunakan teknik one-hot atau label encoding.
  • Rekayasa dan ekstraksi fitur: Membuat fitur baru atau memilih fitur penting untuk meningkatkan kinerja model.

Berikut tampilannya di Python, menggunakan scikit-learn: 

from sklearn.preprocessing import StandardScaler, OneHotEncoder

# Creating a manual dataset
data = pd.DataFrame({
    'category': ['A', 'B', 'A', 'C', 'B'],
    'numeric_column': [10, 15, 10, 20, 15]
	})

# Scaling numeric data
scaler = StandardScaler()
data['scaled_numeric_column'] = scaler.fit_transform(data[['numeric_column']])

# Encoding categorical variables using one-hot encoding
encoder = OneHotEncoder(sparse_output=False)
encoded_data = pd.DataFrame(encoder.fit_transform(data[['category']]),
                            columns=encoder.get_feature_names_out(['category']))

# Concatenating the encoded data with the original dataset
data = pd.concat([data, encoded_data], axis=1)

print(data)

Gambar menampilkan tabel yang merepresentasikan output dari skrip Python

Output kode di atas

Langkah 4: Reduksi data

Reduksi data menyederhanakan set data dengan mengurangi jumlah fitur atau catatan sambil mempertahankan informasi esensial. Ini membantu mempercepat analisis dan pelatihan model tanpa mengorbankan akurasi.

Teknik reduksi data meliputi: 

  • Seleksi fitur: Memilih fitur paling penting yang berkontribusi pada analisis atau kinerja model.
  • Principal component analysis (PCA): Sebuah teknik reduksi dimensi yang mengubah data ke ruang berdimensi lebih rendah.
  • Metode sampling: Mengurangi ukuran set data dengan memilih sampel yang representatif berguna untuk menangani set data besar.

Dan berikut cara menerapkan reduksi dimensi di Python:

from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest, chi2

# Creating a manual dataset
data = pd.DataFrame({
    'feature1': [10, 20, 30, 40, 50],
    'feature2': [1, 2, 3, 4, 5],
    'feature3': [100, 200, 300, 400, 500],
    'target': [0, 1, 0, 1, 0]
	})

# Feature selection using SelectKBest
selector = SelectKBest(chi2, k=2)
selected_features = selector.fit_transform(data[['feature1', 'feature2', 'feature3']], data['target'])

# Printing selected features
print("Selected features (SelectKBest):")
print(selected_features)

# Dimensionality reduction using PCA
pca = PCA(n_components=2)
pca_data = pca.fit_transform(data[['feature1', 'feature2', 'feature3']])

# Printing PCA results
print("PCA reduced data:")
print(pca_data)

Gambar menampilkan output dari menjalankan skrip scikit-learn

Output kode di atas 

Teknik Umum untuk Prapemrosesan Data beserta Contohnya

Kita telah menetapkan bahwa prapemrosesan data mentah sangat penting untuk memastikan data siap digunakan untuk analisis atau model machine learning. Kita juga telah membahas langkah-langkah yang terlibat dalam proses ini. 

Pada bagian ini, kita akan mengeksplorasi berbagai teknik untuk menangani masalah umum selama fase prapemrosesan. Selain itu, kita akan membahas augmentasi data, teknik berguna untuk membuat data sintetis dalam konteks spesifik seperti set data gambar atau teks.

Menangani data yang hilang

Data yang hilang dapat berdampak negatif pada kinerja model machine learning atau analisis. Ada beberapa strategi untuk menangani nilai yang hilang secara efektif:

  • Imputasi: Teknik ini mengisi nilai yang hilang dengan estimasi terhitung, seperti mean, median, atau modus dari data yang tersedia. Metode lanjutan termasuk pemodelan prediktif, di mana nilai yang hilang diprediksi berdasarkan hubungan dalam data.
# Note: This is dummy code and not expected to run on its own
from sklearn.impute import SimpleImputer

imputer = SimpleImputer(strategy='mean')  # Replace 'mean' with 'median' or 'most_frequent' if needed
data['column_with_missing'] = imputer.fit_transform(data[['column_with_missing']])
  • Penghapusan: Menghapus baris atau kolom dengan nilai yang hilang adalah solusi langsung. Namun, harus digunakan dengan hati-hati karena dapat menyebabkan hilangnya data berharga, terutama jika banyak entri yang hilang.
data.dropna(inplace=True)  # Removes rows with any missing values
  • Memodelkan nilai yang hilang: Dalam kasus pola data hilang yang lebih kompleks, model machine learning dapat memprediksi nilai yang hilang berdasarkan sisa set data. Ini dapat meningkatkan akurasi dengan memasukkan hubungan antarvariabel.

Deteksi dan penghapusan outlier

Outlier adalah nilai ekstrem yang menyimpang secara signifikan dari sebagian besar data, yang seperti nilai hilang, dapat mendistorsi analisis dan kinerja model. Berbagai teknik dapat digunakan untuk mendeteksi dan menangani outlier:

  • Metode Z-Score: Pendekatan ini mengukur berapa banyak simpangan baku sebuah titik data dari mean. Titik data di luar ambang tertentu (misalnya, ±3 simpangan baku) dapat dianggap sebagai outlier.
# Note: this is dummy code. 
# It won’t work unless a data with a column named “column” is imported

from scipy import stats 
z_scores = stats.zscore(data['column']) outliers = abs(z_scores) > 3 # Identifying outliers
  • Rentang antar-kuartil (IQR): IQR adalah jarak antara kuartil pertama (Q1) dan kuartil ketiga (Q3). Nilai di luar 1,5 kali IQR di atas Q3 atau di bawah Q1 dianggap outlier.
Q1 = data['column'].quantile(0.25)
Q3 = data['column'].quantile(0.75)
IQR = Q3 - Q1
outliers = (data['column'] < (Q1 - 1.5 * IQR)) | (data['column'] > (Q3 + 1.5 * IQR))
  • Teknik visual: Metode visualisasi seperti box plot, scatter plot, atau histogram dapat membantu mendeteksi outlier dalam set data. Setelah diidentifikasi, outlier dapat dihapus atau ditransformasikan, tergantung pengaruhnya terhadap analisis.

Pengodean data

Saat bekerja dengan data kategorikal, pengodean diperlukan untuk mengonversi kategori ke representasi numerik yang dapat diproses oleh algoritma machine learning. Teknik pengodean yang umum meliputi:

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse_output=False)
encoded_data = encoder.fit_transform(data[['categorical_column']])
  • Label encoding: Label encoding menetapkan nilai numerik unik untuk setiap kategori. Namun, metode ini dapat memperkenalkan hubungan ordinal yang tidak diinginkan antar-kategori jika kategori tersebut tidak memiliki urutan alami.
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['encoded_column'] = le.fit_transform(data['categorical_column'])
  • Ordinal encoding: Ordinal encoding digunakan ketika variabel kategorikal memiliki urutan bawaan, seperti rendah, sedang, dan tinggi. Setiap kategori dipetakan ke nilai bilangan bulat yang mencerminkan peringkatnya.
from sklearn.preprocessing import OrdinalEncoder
oe = OrdinalEncoder(categories=[['low', 'medium', 'high']])
data['ordinal_column'] = oe.fit_transform(data[['ordinal_column']])

Skalasi dan normalisasi data

Skalasi dan normalisasi memastikan bahwa fitur numerik berada pada skala yang serupa, yang sangat penting untuk algoritma yang mengandalkan metrik jarak (misalnya, k-nearest neighbors, SVM).

  • Min-max scaling: Teknik ini menskalakan data ke rentang tertentu, biasanya 0 hingga 1. Ini berguna saat semua fitur perlu berada pada skala yang sama.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data[['scaled_column']] = scaler.fit_transform(data[['numeric_column']])
  • Standardisasi (normalisasi Z-Score): Metode ini menskalakan data sehingga mean menjadi 0 dan simpangan baku menjadi 1, membantu model berkinerja lebih baik dengan fitur yang terdistribusi normal.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data[['standardized_column']] = scaler.fit_transform(data[['numeric_column']])

Augmentasi data

Augmentasi data adalah teknik untuk secara artifisial meningkatkan ukuran set data dengan membuat contoh baru yang sintetis. Ini sangat berguna untuk set data gambar atau teks dalam model deep learning, di mana sejumlah besar data diperlukan untuk kinerja model yang andal.

  • Augmentasi gambar: Teknik seperti memutar, membalik, menskalakan, atau menambahkan noise pada gambar membantu menciptakan variasi yang meningkatkan generalisasi model.
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest')

augmented_images = datagen.flow_from_directory('image_directory', target_size=(150, 150))
  • Augmentasi teks: Untuk data teks, metode augmentasi meliputi penggantian sinonim, penyisipan acak, dan back-translation, yaitu sebuah kalimat diterjemahkan ke bahasa lain lalu kembali ke bahasa asli, sehingga menghasilkan variasi.
import nlpaug.augmenter.word as naw
# install nlpaug here: https://github.com/makcedward/nlpaug 

aug = naw.SynonymAug(aug_src='wordnet')
augmented_text = aug.augment("This is a sample text for augmentation.")

Alat untuk Prapemrosesan Data

Meskipun Anda dapat menerapkan pemrosesan data menggunakan kode Python murni, berbagai alat yang kuat telah dikembangkan untuk menangani beragam tugas dan membuat proses keseluruhan lebih efisien. Berikut beberapa contohnya: 

Library Python

Ada cukup banyak library khusus untuk prapemrosesan data di Python. Berikut 3 yang paling populer: 

  • Pandas: Library Python yang paling umum digunakan untuk manipulasi dan pembersihan data. Library ini menyediakan struktur data yang fleksibel, terutama DataFrame dan Series, yang memungkinkan Anda menangani dan memanipulasi data terstruktur secara efisien. Pandas mendukung operasi seperti menangani data hilang, menggabungkan set data, memfilter data, dan mengubah bentuk data.
import pandas as pd

# Load a sample dataset
data = pd.DataFrame({
    'name': ['John', 'Jane', 'Jack'],
    'age': [28, 31, 34]
})

print(data)

Gambar menampilkan tabel sebagai output dari menjalankan skrip Python

Output kode di atas 

  • NumPy: Library fundamental untuk komputasi numerik. Ini mendukung array dan matriks besar multi-dimensi serta fungsi matematika untuk mengoperasikan array tersebut. NumPy sering menjadi fondasi bagi banyak library pemrosesan data tingkat lebih tinggi, seperti Pandas.
import numpy as np

# Create an array and perform element-wise operations
array = np.array([1, 2, 3, 4])
squared_array = np.square(array)

print(squared_array)

Output kode di atas

  • Scikit-learn: Banyak digunakan untuk tugas machine learning tetapi juga menawarkan banyak utilitas prapemrosesan, seperti skalasi, pengodean, dan transformasi data. Modul prapemrosesannya berisi alat untuk menangani data kategorikal, menskalakan data numerik, ekstraksi fitur, dan lainnya.
from sklearn.preprocessing import StandardScaler 

# Standardize data 
data = [[10, 2], [15, 5], [20, 3]] 
scaler = StandardScaler() 
scaled_data = scaler.fit_transform(data)
print(scaled_data)

Gambar menampilkan tabel sebagai output dari menjalankan skrip Python

Output kode di atas

Platform cloud

Sistem on-premise mungkin tidak dapat menangani set data besar secara efektif. Dalam situasi seperti ini, platform cloud menawarkan solusi yang skalabel dan efisien yang memungkinkan Anda memproses data dalam jumlah besar di sistem terdistribusi. 

Beberapa alat platform cloud yang dapat dipertimbangkan meliputi: 

  • AWS Glue: Layanan ETL terkelola penuh dari Amazon Web Services. Layanan ini secara otomatis menemukan dan mengorganisasi data serta menyiapkannya untuk analitik. Glue mendukung katalog data dan dapat terhubung ke layanan AWS seperti S3 dan Redshift.
  • Azure Data Factory: Layanan integrasi data berbasis cloud dari Microsoft. Layanan ini mendukung pembangunan pipeline ETL dan ELT untuk data skala besar. Azure Data Factory memungkinkan pengguna memindahkan data antar berbagai layanan, melakukan prapemrosesan dengan transformasi, dan mengorkestrasi alur kerja menggunakan antarmuka visual.

Alat otomatisasi

Mengotomatiskan langkah-langkah berulang dalam prapemrosesan data dapat menghemat waktu dan mengurangi kesalahan – terutama saat menangani model machine learning dan set data besar. Berikut beberapa alat yang menawarkan pipeline prapemrosesan bawaan: 

  • Platform AutoML: AutoML adalah singkatan dari Automated Machine Learning (dan artinya sesuai namanya). Dengan kata lain, platform ini mengotomatiskan beberapa tahapan alur kerja machine learning. Platform seperti AutoML Google, Azure AutoML Microsoft, dan AutoML H2O.ai menyediakan pipeline otomatis yang menangani tugas seperti seleksi fitur, transformasi data, dan pemilihan model dengan intervensi pengguna minimal.
  • Pipeline prapemrosesan di scikit-learn: Scikit-learn menyediakan kelas Pipeline, yang membantu menyederhanakan dan mengotomatiskan langkah prapemrosesan. Ini memungkinkan Anda merangkai beberapa operasi prapemrosesan menjadi satu alur kerja yang dapat dieksekusi, memastikan tugas prapemrosesan diterapkan secara konsisten:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer

# Example Pipeline combining different preprocessing tasks
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())
])

categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('encoder', OneHotEncoder())
])

preprocessor = ColumnTransformer(transformers=[
    ('num', numeric_transformer, ['age']),
    ('cat', categorical_transformer, ['category'])
])

preprocessed_data = preprocessor.fit_transform(data)

Praktik Terbaik untuk Prapemrosesan Data

Penting untuk mengikuti praktik terbaik guna memaksimalkan efektivitas upaya prapemrosesan Anda. Karena itu, berikut beberapa praktik yang saya sarankan untuk dipertimbangkan: 

Pahami data

Sebelum Anda terjun ke prapemrosesan, penting untuk memahami set data secara menyeluruh. Lakukan analisis data eksploratori untuk mengidentifikasi struktur data yang ada. Yang ingin Anda pahami secara spesifik adalah: 

  • Fitur-fitur kunci 
  • Potensi anomali
  • Hubungan-hubungan 

Tanpa terlebih dahulu memahami karakteristik set data, kemungkinan besar Anda dapat menerapkan metode prapemrosesan yang salah, yang akan mendistorsi data. 

Otomatiskan langkah berulang

Prapemrosesan sering melibatkan tugas yang berulang. Mengotomatiskan tugas-tugas ini dengan membangun pipeline memastikan konsistensi dan efisiensi serta mengurangi kemungkinan kesalahan manual. Untuk menyederhanakan alur kerja, manfaatkan pipeline di alat seperti scikit-learn atau platform berbasis cloud.

Dokumentasikan langkah prapemrosesan

Dokumentasi yang jelas membantu mencapai dua tujuan:

  • Reproduksibilitas
  • Pemahaman (untuk diri Anda di kemudian hari atau untuk anggota tim lainnya).

Setiap keputusan, transformasi, atau langkah penyaringan harus dicatat, termasuk alasannya. Ini akan sangat meningkatkan kolaborasi di antara anggota tim dan membantu Anda melanjutkan proyek dari titik terakhir. 

Perbaikan iteratif

Prapemrosesan data bukan tugas satu kali – ini harus menjadi proses iteratif. Seiring model berkembang dan memberikan umpan balik atas kinerjanya, gunakan informasi ini untuk meninjau kembali dan menyempurnakan langkah prapemrosesan, karena hal itu dapat menghasilkan hasil yang lebih baik. Misalnya, rekayasa fitur dapat mengungkap fitur baru yang berguna, atau penyetelan penanganan outlier dapat meningkatkan akurasi model – gunakan umpan balik ini untuk memperbarui langkah prapemrosesan Anda. 

Kesimpulan

Prapemrosesan data memainkan peran krusial dalam keberhasilan proyek data apa pun. Prapemrosesan yang tepat memastikan data mentah diubah menjadi format yang bersih dan terstruktur, yang membantu model dan analisis menghasilkan wawasan yang lebih akurat dan bermakna. 

Dalam artikel ini, saya telah membagikan berbagai teknik untuk membantu menerapkan prapemrosesan data. Namun, hal terpenting untuk dicatat adalah bahwa proses ini bukan upaya satu kali, melainkan proses iteratif! Penyempurnaan berkelanjutan mengarah pada peningkatan kinerja model dan pengambilan keputusan yang lebih baik. Set data yang dipersiapkan dengan baik menjadi fondasi bagi setiap inisiatif AI data yang sukses.

Untuk melanjutkan pembelajaran Anda, saya merekomendasikan sumber daya unggulan berikut:


Kurtis Pykes 's photo
Author
Kurtis Pykes
LinkedIn
Topik

Pelajari lebih lanjut tentang data engineering dengan kursus-kursus ini!

Kursus

Pengantar Data Engineering

4 Hr
126.7K
Pelajari dunia rekayasa data dalam kursus singkat ini, mencakup alat dan topik seperti ETL dan komputasi awan.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

12 mnt

Lihat Lebih BanyakLihat Lebih Banyak