MaxFrame menyediakan API yang kompatibel dengan Pandas untuk pemrosesan data. API ini mencakup fungsi dasar seperti penyaringan, proyeksi, penggabungan, dan agregasi, serta fungsi lanjutan seperti transform dan apply untuk memanggil fungsi yang ditentukan pengguna (UDF). Fungsi lanjutan ini memungkinkan implementasi logika bisnis dan operasi data khusus, serta cocok untuk skenario kompleks yang tidak dapat ditangani oleh operator standar. Selain itu, MaxFrame menyediakan API khusus untuk memenuhi kebutuhan pemrosesan data besar. Misalnya, Anda dapat menggunakan API read_odps_table untuk membaca data dari tabel MaxCompute, API to_odps_table untuk menulis data ke tabel MaxCompute, dan API execute untuk menjalankan komputasi tertunda. Dengan API ini, Anda dapat menganalisis data di lingkungan data besar secara efisien tanpa terbatas oleh sumber daya komputasi lokal.
Persiapan data
Topik ini menggunakan tabel maxframe_ml_100k_users dari dataset publik MaxCompute untuk mendemonstrasikan penggunaan MaxFrame. Data uji disimpan dalam skema data_science pada proyek MaxCompute publik BIGDATA_PUBLIC_DATASET dan dapat digunakan secara langsung.
Inisialisasi sesi
Sebelum menjalankan pekerjaan MaxFrame, Anda harus menginisialisasi sesi MaxFrame. Di titik masuk kode Anda, panggil operasi API new_session untuk menginisialisasi sesi tersebut. Seluruh pemrosesan data selanjutnya dilakukan melalui objek sesi yang dibuat, yang berinteraksi dengan layanan backend. Contoh kodenya sebagai berikut:
import os
from maxframe import new_session
from odps import ODPS
# Gunakan akun MaxFrame untuk menginisialisasi MaxCompute.
o = ODPS(
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='your-default-project',
endpoint='your-end-point',
)
# Inisialisasi sesi MaxFrame.
new_session(odps_entry=o)Untuk informasi lebih lanjut tentang operasi API new_session, lihat new_session.
Buat objek DataFrame
Operasi API read_odps_table dan read_odps_query memungkinkan Anda membuat objek DataFrame dari tabel MaxCompute. Objek DataFrame ini mendukung operasi bergaya Pandas. MaxFrame juga mendukung inisialisasi objek DataFrame menggunakan data lokal, yang membantu pengujian dan pengembangan kode secara cepat.
Gunakan tabel MaxCompute
Anda dapat menggunakan operasi API
read_odps_tableuntuk melakukan hal-hal berikut:Gunakan fungsi
read_odps_tableuntuk membaca data dari tabel MaxCompute dan mengonversinya menjadi objek DataFrame MaxFrame.import maxframe.dataframe as md # Baca data dari tabel MaxCompute dan buat objek DataFrame. df = md.read_odps_table('BIGDATA_PUBLIC_DATASET.data_science.maxframe_ml_100k_users')Konfigurasikan parameter index_col untuk menentukan kolom dalam tabel sebagai indeks objek DataFrame.
import maxframe.dataframe as md # Gunakan kolom id dari database sebagai indeks objek DataFrame. df = md.read_odps_table('BIGDATA_PUBLIC_DATASET.data_science.maxframe_ml_100k_users', index_col="user_id")Konfigurasikan parameter columns untuk menentukan kolom dalam tabel yang akan digunakan dalam pembuatan objek DataFrame.
import maxframe.dataframe as md # Pilih kolom dalam tabel untuk membuat objek DataFrame. df = md.read_odps_table('BIGDATA_PUBLIC_DATASET.data_science.maxframe_ml_100k_users', columns=['user_id', 'age', 'sex'])Untuk informasi lebih lanjut tentang API
read_odps_table, lihat read_odps_table.
Gunakan hasil kueri SQL MaxCompute
Selain membuat DataFrame dari tabel, MaxFrame memungkinkan Anda menjalankan kueri SQL melalui operasi API
read_odps_querydan menggunakan hasilnya sebagai input data untuk DataFrame.import maxframe.dataframe as md df = md.read_odps_query('select user_id, age, sex FROM `BIGDATA_PUBLIC_DATASET.data_science.maxframe_ml_100k_users`')Gunakan parameter index_col untuk menentukan indeks objek DataFrame.
import maxframe.dataframe as md df = md.read_odps_query('select user_id, age, sex FROM `BIGDATA_PUBLIC_DATASET.data_science.maxframe_ml_100k_users`', index_col='user_id')Untuk informasi lebih lanjut tentang API
read_odps_query, lihat read_odps_query.Gunakan data lokal
MaxFrame menyediakan pengalaman penggunaan yang mirip dengan Pandas. Anda dapat langsung membuat objek DataFrame MaxFrame berdasarkan data lokal. Contoh kodenya sebagai berikut:
import maxframe.dataframe as md d = {'col1': [1, 2], 'col2': [3, 4]} df = md.DataFrame(data=d) print(df.execute().fetch()) # Dapatkan hasil yang dikembalikan. col1 col2 0 1 3 1 2 4 df = md.DataFrame(data=d, dtype=np.int8) print(df.execute().fetch()) # Dapatkan hasil yang dikembalikan. col1 col2 0 1 3 1 2 4 d = {'col1': [0, 1, 2, 3], 'col2': pd.Series([2, 3], index=[2, 3])} df = md.DataFrame(data=d, index=[0, 1, 2, 3]) print(df.execute().fetch()) # Dapatkan hasil yang dikembalikan. col1 col2 0 0 NaN 1 1 NaN 2 2 2.0 3 3 3.0 data = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], dtype=[("a", "i4"), ("b", "i4"), ("c", "i4")]) df = md.DataFrame(data, columns=['c', 'a']) df.execute().fetch() # Dapatkan hasil yang dikembalikan. c a 0 3 1 1 6 4 2 9 7Untuk informasi lebih lanjut, lihat DataFrame.
Pemrosesan data
MaxFrame menyediakan serangkaian API yang kompatibel dengan Pandas untuk berbagai operasi seperti perhitungan data, proyeksi, penyaringan, dan pengurutan. MaxFrame juga mendukung berbagai operator untuk pemrosesan data umum serta UDF guna memenuhi kebutuhan analisis dan pemrosesan data yang kompleks.
Perhitungan matematis
Berbagai operasi matematis seperti penjumlahan, pengurangan, perkalian, dan pembagian dapat dilakukan langsung pada objek DataFrame. Contoh berikut menunjukkan cara menggunakan MaxFrame untuk melakukan operasi matematis dasar.
Contoh 1: Lakukan penambahan data sederhana.
import maxframe.dataframe as md df = md.DataFrame({'angles': [0, 3, 4], 'degrees': [360, 180, 360]}, index=['circle', 'triangle', 'rectangle']) print(df.execute().fetch()) # Dapatkan hasil yang dikembalikan. angles degrees circle 0 360 triangle 3 180 rectangle 4 360 df = df + 1 print(df.execute().fetch()) # Dapatkan hasil yang dikembalikan. angles degrees circle 1 361 triangle 4 181 rectangle 5 361Contoh 2: Lakukan perkalian antara objek DataFrame.
import maxframe.dataframe as md df = md.DataFrame({'angles': [0, 3, 4], 'degrees': [360, 180, 360]}, index=['circle', 'triangle', 'rectangle']) other = md.DataFrame({'angles': [0, 3, 4]}, index=['circle', 'triangle', 'rectangle']) print(df.mul(other, fill_value=0).execute()) # Dapatkan hasil yang dikembalikan. angles degrees circle 0 0.0 triangle 9 0.0 rectangle 16 0.0
Untuk informasi lebih lanjut tentang API yang terkait dengan operasi matematis, lihat Binary operator functions dan Computations / descriptive stats.
Penyaringan, proyeksi, dan pengambilan sampel
Penyaringan
Penyaringan memungkinkan Anda memilih atau mengecualikan data dari objek DataFrame berdasarkan kriteria tertentu. Operasi ini penting untuk memproses dan menganalisis dataset besar serta membantu Anda fokus pada informasi yang paling relevan.
Contoh 1: Tampilkan beberapa baris pertama data.
import maxframe.dataframe as md df = md.DataFrame({'animal': ['alligator', 'bee', 'falcon', 'lion', 'monkey', 'parrot', 'shark', 'whale', 'zebra']}) print(df.head().execute().fetch()) # Dapatkan hasil yang dikembalikan. animal 0 alligator 1 bee 2 falcon 3 lion 4 monkeyContoh 2: Hapus kolom yang ditentukan.
import maxframe.dataframe as md df = md.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D']) print(df.drop(['B', 'C'], axis=1).execute().fetch()) # Dapatkan hasil yang dikembalikan. A D 0 0 3 1 4 7 2 8 11
Proyeksi
Proyeksi memungkinkan Anda mengubah struktur objek DataFrame, seperti menyesuaikan kolom yang ingin ditampilkan atau mengatur ulang urutan kolom. Operasi ini berguna untuk membuat tampilan data yang disederhanakan atau menyesuaikan format data sesuai kebutuhan analisis tertentu.
Contoh: Ubah nama kolom.
import maxframe.dataframe as md
df = md.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
print(df.set_axis(['I', 'II'], axis='columns').execute().fetch())
# Dapatkan hasil yang dikembalikan.
I II
0 1 4
1 2 5
2 3 6 Pengambilan sampel
Pengambilan sampel adalah proses memilih sampel acak dari objek DataFrame. Teknik ini sangat penting untuk menangani dataset besar dan memperkirakan sifat statistik data.
Contoh: Lakukan pengambilan sampel acak.
import maxframe.dataframe as md
df = md.DataFrame({'num_legs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8]},
index=['falcon', 'dog', 'spider', 'fish'])
print(df['num_legs'].sample(n=3, random_state=1).execute())
# Dapatkan hasil yang dikembalikan.
falcon 2
fish 0
dog 4
Name: num_legs, dtype: int64Untuk informasi lebih lanjut tentang operasi penyaringan, proyeksi, dan pengambilan sampel, lihat Reindexing / selection / label manipulation.
Pengurutan
Pengurutan memungkinkan Anda mengatur ulang urutan baris dalam objek DataFrame berdasarkan nilai satu atau beberapa kolom. Operasi ini umum digunakan dalam analisis data untuk mengidentifikasi pola, tren, dan pengecualian.
Contoh: Urutkan nilai satu atau beberapa kolom.
import maxframe.dataframe as md
import numpy as np
df = md.DataFrame({
'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
'col2': [2, 1, 9, 8, 7, 4],
'col3': [0, 1, 9, 4, 2, 3],
})
res = df.sort_values(by=['col1']).execute()
print(res.fetch())
# Dapatkan hasil yang dikembalikan.
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
5 C 4 3
4 D 7 2
3 None 8 4
res = df.sort_values(by=['col1', 'col2']).execute()
print(res.fetch())
# Dapatkan hasil yang dikembalikan.
col1 col2 col3
1 A 1 1
0 A 2 0
2 B 9 9
5 C 4 3
4 D 7 2
3 None 8 4 Untuk informasi lebih lanjut tentang operasi pengurutan, lihat Reshaping / sorting / transposing.
Join, penggabungan, dan penggabungan
Join, penggabungan, dan penggabungan merupakan operasi pemrosesan data dasar namun kuat yang memungkinkan Anda menggabungkan dataset berbeda secara horizontal atau vertikal berdasarkan bidang atau indeks tertentu. MaxFrame menyediakan API terkait untuk mempermudah penggabungan dataset.
Contoh: Gabungkan data secara horizontal.
import maxframe.dataframe as md
df = md.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
other = md.DataFrame({'key': ['K0', 'K1', 'K2'],
'B': ['B0', 'B1', 'B2']})
print(df.join(other, lsuffix='_caller', rsuffix='_other').execute().fetch())
# Dapatkan hasil yang dikembalikan.
key_caller A key_other B
0 K0 A0 K0 B0
1 K1 A1 K1 B1
2 K2 A2 K2 B2
3 K3 A3 None None
4 K4 A4 None None
5 K5 A5 None NoneUntuk informasi lebih lanjut tentang operasi join, penggabungan, dan penggabungan, lihat Combining / joining / merging.
Agregasi dan UDF
Agregasi
Agregasi adalah proses mengubah sekelompok nilai menjadi satu nilai tunggal. Operasi ini digunakan untuk merangkum dan mengidentifikasi karakteristik statistik data selama analisis.
Contoh: Lakukan agregasi multi-tipe.
import maxframe.dataframe as md
df = md.DataFrame([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[np.nan, np.nan, np.nan]],
columns=['A', 'B', 'C'])
print(df.agg(['sum', 'min']).execute().fetch())
# Dapatkan hasil yang dikembalikan.
A B C
min 1.0 2.0 3.0
sum 12.0 15.0 18.0
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']}).execute().fetch()
# Dapatkan hasil yang dikembalikan.
A B
max NaN 8.0
min 1.0 2.0
sum 12.0 NaNUDF
Selain operator standar, MaxFrame mendukung UDF untuk memproses objek DataFrame dengan logika kustom, sehingga meningkatkan fleksibilitas pemrosesan data.
Sebelum mengeksekusi UDF, Anda harus mendeklarasikan citra umum menggunakan parameter config.options.sql.settings sebelum memanggil `new_session`.
Contoh 1: Gunakan metode transform untuk memanggil UDF.
import maxframe.dataframe as md from maxframe import config config.options.sql.settings = { "odps.session.image": "common", "odps.sql.type.system.odps2": "true" } session = new_session(o) df = md.DataFrame({'A': range(3), 'B': range(1, 4)}) print(df.transform(lambda x: x + 1).execute().fetch()) # Dapatkan hasil yang dikembalikan. A B 0 1 2 1 2 3 2 3 4Contoh 2: Gunakan metode apply untuk memanggil UDF.
Jika jumlah kolom berubah sebelum dan sesudah eksekusi UDF, gunakan metode apply.
import maxframe.dataframe as md import numpy as np from maxframe import config config.options.sql.settings = { "odps.session.image": "common", "odps.sql.type.system.odps2": "true" } session = new_session(o) def simple(row): row['is_man'] = row['sex'] == "man" return row df = md.read_odps_table('BIGDATA_PUBLIC_DATASET.data_science.maxframe_ml_100k_users') new_dtypes = df.dtypes.copy() new_dtypes["is_man"] = np.dtype(np.bool_) df.apply( simple, axis=1, result_type="expand", output_type="dataframe", dtypes=new_dtypes ).execute().fetch() # Dapatkan hasil yang dikembalikan. user_id age sex occupation zip_code is_man 0 1 24 M technician 85711 False 1 2 53 F other 94043 False 2 3 23 M writer 32067 False 3 4 24 M technician 43537 False 4 5 33 F other 15213 False .. ... ... .. ... ... ... 938 939 26 F student 33319 False 939 940 32 M administrator 02215 False 940 941 20 M student 97229 False 941 942 48 F librarian 78209 False 942 943 22 M student 77841 False [943 rows x 6 columns]
Untuk informasi lebih lanjut tentang operasi agregasi dan UDF serta cara memilih fungsi agregat, lihat Function application / GroupBy / window.
Simpan hasil
Setelah dataset ditransformasi, Anda dapat menggunakan operasi API to_odps_table untuk menyimpan hasilnya ke tabel MaxCompute.
Contoh 1: Tulis data yang telah diproses ke tabel MaxCompute.
# Tulis data yang telah diproses ke tabel MaxCompute. filtered_df.to_odps_table('<table_name>')Contoh 2: Tentukan periode penyimpanan.
Anda dapat mengonfigurasi parameter lifecycle untuk menentukan siklus hidup tabel hasil.
# Tulis data yang telah diproses ke tabel MaxCompute. filtered_df.to_odps_table('<table_name>', lifecycle = 7)
Parameter
table_name: Nama tabel MaxCompute tujuan. Jika tabel belum ada di MaxCompute, tabel akan dibuat secara otomatis. Jika tabel sudah ada, data akan ditambahkan ke dalamnya secara default.
Anda dapat menggunakan parameter overwrite untuk menentukan apakah data yang sudah ada akan ditimpa. Untuk informasi lebih lanjut tentang operasi penyimpanan, lihat to_odps_table.
Jalankan tugas dan lihat hasil eksekusi
Anda dapat menggunakan metode execute() untuk memicu tugas pemrosesan data dan metode fetch() untuk mengambil sebagian data hasil.
Contoh: Dapatkan dan tampilkan hasil eksekusi.
Tambahkan metode execute() dan fetch() untuk menyelesaikan alur pemrosesan data dan melihat hasilnya. Berbeda dengan Pandas, MaxFrame menangani dataset berskala besar secara efisien dan mengurangi transfer data yang tidak perlu berkat model evaluasi malasnya.
# Dapatkan sebagian data dari hasil eksekusi.
data = filtered_df.execute().fetch()
print(data)Untuk informasi lebih lanjut tentang eksekusi tugas dan pengambilan hasil, lihat execute dan fetch.