Bagaimana Anda menggabungkan kumpulan data dengan python?

Co-founder DataCamp, Jonathan Cornelissen, dan Martijn Theuwissen memecah tren data teratas yang mereka lihat di ruang data saat ini, serta prediksi mereka untuk masa depan industri data

Dalam situasi sains data dunia nyata apa pun dengan Python, Anda akan berada sekitar 10 menit ketika Anda harus menggabungkan atau menggabungkan Pandas Dataframes bersama untuk membentuk kumpulan data analisis Anda. Menggabungkan dan menggabungkan kerangka data adalah proses inti yang perlu dikuasai oleh setiap calon analis data. Posting blog ini membahas proses penggabungan kumpulan data, yaitu menggabungkan dua kumpulan data bersama-sama berdasarkan kolom umum di antara mereka. Topik utama dibahas di sini

  • ?
  • ?

Jika Anda ingin mengerjakan sendiri tutorialnya, saya menggunakan penyiapan notebook Jupyter dengan Python dari Anaconda, dan saya telah memposting kodenya di GitHub di sini. Saya telah menyertakan contoh kumpulan data di repositori GitHub

Bagaimana Anda menggabungkan kumpulan data dengan python?
Menggabungkan ikhtisar jika Anda memerlukan panduan mulai cepat (semua penjelasan di bawah). Perintah Pandas merge() mengambil bingkai data kiri dan kanan, mencocokkan baris berdasarkan kolom “on”, dan melakukan berbagai jenis penggabungan – kiri, kanan, dll

Data contoh

Untuk postingan kali ini, saya mengambil beberapa data real dari aplikasi KillBiller dan beberapa data hasil download, yang terdapat dalam tiga file CSV

  • pengguna_penggunaan. csv – Kumpulan data pertama yang berisi statistik penggunaan seluler bulanan pengguna
  • perangkat_pengguna. csv – Kumpulan data kedua yang berisi detail “penggunaan” individu sistem, dengan tanggal dan informasi perangkat
  • android_devices. csv – Kumpulan data ketiga dengan data perangkat dan pabrikan, yang mencantumkan semua perangkat Android dan kode modelnya, diperoleh dari Google di sini

Kita dapat memuat file CSV ini sebagai Pandas DataFrames ke dalam panda menggunakan perintah Pandas read_csv, dan memeriksa konten menggunakan perintah

Bagaimana Anda menggabungkan kumpulan data dengan python?
Contoh informasi penggunaan dari aplikasi KillBiller yang menampilkan statistik penggunaan seluler bulanan untuk sebagian pengguna

Bagaimana Anda menggabungkan kumpulan data dengan python?
Informasi pengguna dari aplikasi KillBiller yang memberikan perangkat dan versi OS untuk "penggunaan" individu dari aplikasi KillBiller

Bagaimana Anda menggabungkan kumpulan data dengan python?
Data Perangkat Android, berisi semua perangkat Android dengan detail pabrikan dan model

Ada atribut penautan antara set data sampel yang penting untuk diperhatikan – "use_id" digunakan bersama antara user_usage dan user_device, dan kolom "device" pada user_device dan kolom "Model" pada set data perangkat berisi kode umum

Masalah sampel

Kami ingin menentukan apakah pola penggunaan untuk pengguna berbeda di antara perangkat yang berbeda. Misalnya, apakah pengguna yang menggunakan perangkat Samsung menggunakan lebih banyak menit panggilan daripada pengguna perangkat LG?

Kami ingin membentuk kerangka data tunggal dengan kolom untuk angka penggunaan pengguna (panggilan per bulan, sms per bulan, dll.) Dan juga kolom dengan informasi perangkat (model, pabrikan, dll.). Kita perlu "menggabungkan" (atau "menggabungkan") kumpulan data sampel kita menjadi satu kumpulan data tunggal untuk dianalisis

Menggabungkan DataFrame

“Menggabungkan” dua set data adalah proses menyatukan dua set data menjadi satu, dan menyelaraskan baris dari masing-masing berdasarkan atribut atau kolom yang sama

Kata "menggabungkan" dan "bergabung" digunakan secara relatif bergantian di Panda dan bahasa lain, yaitu SQL dan R. Di Panda, ada fungsi “merge” dan “” yang terpisah, keduanya melakukan hal serupa

Dalam skenario contoh ini, kita perlu melakukan dua langkah

  1. Untuk setiap baris dalam dataset user_usage – buat kolom baru yang berisi kode “device” dari kerangka data user_devices. saya. e. untuk baris pertama, use_id adalah 22787, jadi kita pergi ke kumpulan data user_devices, temukan use_id 22787, dan salin nilai dari kolom "perangkat" ke seberang
  2. Setelah selesai, kami mengambil kolom perangkat baru, dan menemukan "Branding Ritel" dan "Model" yang sesuai dari set data perangkat
  3. Terakhir, kita dapat melihat berbagai statistik untuk data pemisahan dan pengelompokan penggunaan oleh produsen perangkat yang digunakan

Bisakah saya menggunakan for loop?

Ya. Anda dapat menulis for loop untuk tugas ini. Yang pertama akan mengulang melalui use_id di set data user_usage, dan kemudian menemukan elemen yang tepat di user_devices. Loop for kedua akan mengulangi proses ini untuk perangkat

Namun, menggunakan for loop akan jauh lebih lambat dan lebih bertele-tele daripada menggunakan fungsi gabungan Pandas. Jadi,  jika Anda mengalami situasi ini – jangan gunakan for loop

Menggabungkan user_usage dengan user_devices

Mari kita lihat bagaimana kita dapat menambahkan kolom "perangkat" dan "platform" dengan benar ke kerangka data user_usage menggunakan perintah Pandas Merge

result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 on='use_id')
result.head()

Bagaimana Anda menggabungkan kumpulan data dengan python?
Hasil penggabungan penggunaan pengguna dengan perangkat pengguna berdasarkan kolom umum

Jadi itu berhasil, dan sangat mudah. Sekarang – bagaimana cara kerjanya? . gabungkan perintah lakukan?

Bagaimana Anda menggabungkan kumpulan data dengan python?
Cara kerja perintah Pandas Merge. Paling tidak, penggabungan memerlukan kumpulan data "kiri", kumpulan data "kanan", dan kolom umum untuk menggabungkan "pada"

Perintah penggabungan adalah tujuan pembelajaran utama dari postingan ini. Operasi penggabungan paling sederhana mengambil kerangka data kiri (argumen pertama), kerangka data kanan (argumen kedua), dan kemudian nama kolom gabungan, atau kolom untuk menggabungkan "pada". Dalam keluaran/hasil, baris dari bingkai data kiri dan kanan dicocokkan jika ada nilai umum dari kolom gabungan yang ditentukan oleh "on"

Dengan hasil ini, kita sekarang dapat melanjutkan untuk mendapatkan pabrikan dan nomor model dari kumpulan data "perangkat". Namun, pertama-tama kita perlu memahami lebih banyak tentang tipe gabungan dan ukuran kerangka data keluaran

Jenis gabungan dalam, Kiri, dan kanan

Dalam contoh kami di atas, kami menggabungkan user_usage dengan user_devices. Pratinjau head() hasilnya terlihat bagus, tetapi ada lebih dari yang terlihat. Pertama, mari kita lihat ukuran atau bentuk input dan output kita ke perintah penggabungan

Bagaimana Anda menggabungkan kumpulan data dengan python?
Ukuran yang dihasilkan dari kumpulan data setelah operasi penggabungan mungkin tidak seperti yang diharapkan. Penggabungan panda () default untuk operasi penggabungan "dalam".

Mengapa hasilnya berbeda ukuran dengan kedua kerangka data asli?

Secara default, operasi penggabungan Panda bekerja dengan penggabungan "dalam". Penggabungan dalam, (atau gabungan dalam) hanya menyimpan nilai umum di kerangka data kiri dan kanan untuk hasilnya. Dalam contoh kita di atas, hanya baris yang berisi nilai use_id yang umum antara user_usage dan user_device yang tersisa di dataset hasil. Kami dapat memvalidasi ini dengan melihat berapa banyak nilai yang umum

Bagaimana Anda menggabungkan kumpulan data dengan python?
Hanya nilai umum antara kerangka data kiri dan kanan yang dipertahankan secara default di Pandas, mis. e. gabungan "dalam" digunakan

Ada 159 nilai use_id di tabel user_usage yang muncul di user_device. Ini adalah nilai yang sama yang juga muncul di bingkai data hasil akhir (159 baris)

Jenis Penggabungan Lainnya

Ada tiga jenis gabungan yang tersedia di Pandas. Jenis penggabungan ini umum di sebagian besar basis data dan bahasa berorientasi data (SQL, R, SAS) dan biasanya disebut sebagai "gabungan". Jika Anda tidak mengetahuinya, pelajari sekarang

  1. Inner Merge / Inner join – Perilaku Pandas default, hanya menyimpan baris di mana gabungan nilai “on” ada di kerangka data kiri dan kanan
  2. Gabungan Kiri/Gabungan luar kiri – (alias gabungan kiri atau gabungan kiri) Pertahankan setiap baris di bingkai data kiri. Jika ada nilai yang hilang dari variabel "on" di bingkai data kanan, tambahkan nilai kosong / NaN pada hasilnya
  3. Right Merge / Right outer join – (alias right merge atau right join) Pertahankan setiap baris dalam kerangka data yang tepat. Jika ada nilai yang hilang dari variabel "on" di kolom kiri, tambahkan nilai kosong / NaN pada hasilnya
  4. Gabungan Luar / Gabungan luar penuh – Gabungan luar penuh menampilkan semua baris dari kerangka data kiri, semua baris dari kerangka data kanan, dan mencocokkan baris jika memungkinkan, dengan NaN di tempat lain

Jenis gabungan yang akan digunakan ditentukan menggunakan parameter "bagaimana" dalam perintah gabungan, mengambil nilai "kiri", "kanan", "dalam" (default), atau "luar"

Diagram Venn umumnya digunakan untuk mencontohkan berbagai jenis penggabungan dan penggabungan. Lihat contoh ini dari Stack overflow

Bagaimana Anda menggabungkan kumpulan data dengan python?
Menggabungkan/Menggabungkan jenis seperti yang digunakan di Pandas, R, SQL, dan bahasa serta pustaka berorientasi data lainnya. Sumber. Tumpukan Luapan

Jika ini baru bagi Anda, atau Anda melihat hal di atas dengan cemberut, luangkan waktu untuk menonton video tentang "menggabungkan bingkai data" dari Coursera untuk penjelasan lain yang mungkin membantu. Sekarang kita akan melihat setiap jenis gabungan secara lebih mendetail, dan mengerjakan masing-masing contoh

Contoh penggabungan kiri / left join

Mari ulangi operasi penggabungan, tetapi kali ini lakukan "penggabungan kiri" di Pandas

  • Awalnya, kerangka data hasil memiliki 159 baris, karena ada 159 nilai umum "use_id" antara kerangka data kiri dan kanan kami dan penggabungan "dalam" digunakan secara default
  • Untuk penggabungan kiri kami, kami berharap hasilnya memiliki jumlah baris yang sama dengan kerangka data kiri kami "penggunaan_pengguna" (240), dengan nilai yang hilang untuk semua kecuali 159 dari kolom "platform" dan "perangkat" yang digabungkan (81 baris)
  • Kami berharap hasilnya memiliki jumlah baris yang sama dengan bingkai data kiri karena setiap use_id di user_usage hanya muncul sekali di user_device. Pemetaan satu-ke-satu tidak selalu demikian. Dalam operasi penggabungan di mana satu baris di bingkai data kiri dicocokkan dengan banyak baris di bingkai data kanan, beberapa baris hasil akan dihasilkan. saya. e. jika nilai use_id di user_usage muncul dua kali di kerangka data user_device, akan ada dua baris untuk use_id itu di hasil gabungan

Anda dapat mengubah penggabungan menjadi penggabungan kiri dengan parameter "bagaimana" ke perintah penggabungan Anda. Bagian atas bingkai data hasil berisi item yang berhasil dicocokkan, dan di bagian bawah berisi baris di user_usage yang tidak memiliki use_id yang sesuai di user_device

result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 on='use_id', 
                 how='left')
_

Bagaimana Anda menggabungkan kumpulan data dengan python?
Contoh gabung kiri di panda. Tentukan tipe gabungan dalam perintah "bagaimana". Gabungan kiri, atau gabungan kiri, menyimpan setiap baris dari kerangka data kiri

Bagaimana Anda menggabungkan kumpulan data dengan python?
Hasil dari penggabungan kiri atau penggabungan kiri dari dua kerangka data di Pandas. Baris di bingkai data kiri yang tidak memiliki nilai gabungan yang sesuai di bingkai data kanan dibiarkan dengan nilai NaN

Contoh penggabungan kanan / right join

Sebagai contoh, kita dapat mengulangi proses ini dengan penggabungan kanan / penggabungan kanan, cukup dengan mengganti how='left' dengan how='right' dalam perintah penggabungan Pandas

result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 on='use_id', 
                 how='right')

Hasil yang diharapkan akan memiliki jumlah baris yang sama dengan kerangka data kanan, perangkat_pengguna, tetapi memiliki beberapa nilai kosong, atau NaN di kolom yang berasal dari kerangka data kiri, penggunaan_pengguna (yaitu "menit_keluar_per_bulan", "sms_keluar_per_bulan", dan "bulanan_mb"). Sebaliknya, kami berharap tidak ada nilai yang hilang di kolom yang berasal dari kerangka data yang tepat, "perangkat_pengguna"

Bagaimana Anda menggabungkan kumpulan data dengan python?
Contoh penggabungan kanan, atau penggabungan kanan. Perhatikan bahwa output memiliki jumlah baris yang sama dengan bingkai data kanan, dengan nilai yang hilang hanya jika use_id di bingkai data kiri tidak cocok dengan apa pun di kiri

Contoh gabungan luar / gabungan luar penuh

Terakhir, kami akan melakukan penggabungan luar menggunakan Pandas, juga disebut sebagai "gabungan luar penuh" atau hanya "gabungan luar". Gabungan luar dapat dilihat sebagai kombinasi gabungan kiri dan kanan, atau kebalikan dari gabungan dalam. Dalam gabungan luar, setiap baris dari kerangka data kiri dan kanan dipertahankan dalam hasil, dengan NaN di mana tidak ada variabel gabungan yang cocok

Dengan demikian, kami mengharapkan hasil memiliki jumlah baris yang sama karena ada nilai "use_id" yang berbeda antara perangkat_pengguna dan penggunaan_pengguna, yaitu. e. setiap nilai gabungan dari kerangka data kiri akan menjadi hasil bersama dengan setiap nilai dari kerangka data kanan, dan mereka akan ditautkan jika memungkinkan

Bagaimana Anda menggabungkan kumpulan data dengan python?
Hasil penggabungan luar menggunakan Pandas. Setiap baris dari bingkai data kiri dan kanan dipertahankan dalam hasil, dengan nilai yang hilang atau nilai NaN numpy di mana kolom gabungan tidak cocok

Pada diagram di bawah ini, baris contoh dari hasil penggabungan luar ditampilkan, dua baris pertama adalah contoh di mana "use_id" umum di antara kerangka data, dua baris kedua hanya berasal dari kerangka data kiri, dan dua baris terakhir hanya berasal dari kanan

Menggunakan indikator gabungan untuk melacak gabungan

Untuk membantu mengidentifikasi dari mana asal baris, Pandas menyediakan parameter "indikator" yang dapat digunakan dengan fungsi penggabungan yang membuat kolom tambahan yang disebut "_merge" di keluaran yang memberi label sumber asli untuk setiap baris

result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 on='use_id', 
                 how='outer', 
                 indicator=True)

Bagaimana Anda menggabungkan kumpulan data dengan python?
Contoh baris dari hasil gabungan luar (gabungan luar penuh). Perhatikan bahwa semua baris dari kerangka data gabungan kiri dan kanan disertakan, tetapi NaN akan berada di kolom yang berbeda tergantung apakah data berasal dari kerangka data kiri atau kanan

Penggabungan Terakhir – Menggabungkan detail perangkat ke hasil

Kembali ke masalah awal kita, kita telah menggabungkan user_usage dengan user_device, jadi kita memiliki platform dan perangkat untuk setiap pengguna. Awalnya, kami menggunakan "penggabungan dalam" sebagai default di Pandas, dan karena itu, kami hanya memiliki entri untuk pengguna yang juga memiliki informasi perangkat. Kami akan mengulangi penggabungan ini menggunakan gabungan kiri untuk mempertahankan semua pengguna, lalu menggunakan penggabungan kiri kedua untuk akhirnya mendapatkan produsen perangkat dalam kerangka data yang sama

# First, add the platform and device to the user usage - use a left join this time.
result = pd.merge(user_usage,
                 user_device[['use_id', 'platform', 'device']],
                 on='use_id',
                 how='left')

# At this point, the platform and device columns are included
# in the result along with all columns from user_usage

# Now, based on the "device" column in result, match the "Model" column in devices.
devices.rename(columns={"Retail Branding": "manufacturer"}, inplace=True)
result = pd.merge(result, 
                  devices[['manufacturer', 'Model']],
                  left_on='device',
                  right_on='Model',
                  how='left')
print(result.head())
_

Bagaimana Anda menggabungkan kumpulan data dengan python?
Hasil gabungan akhir dengan informasi pabrikan perangkat digabungkan ke tabel penggunaan pengguna. Dua penggabungan kiri digunakan untuk sampai ke titik ini

Menggunakan left_on dan right_on untuk menggabungkan dengan nama kolom yang berbeda

Kolom yang digunakan dalam operator gabungan tidak perlu diberi nama yang sama di kerangka data kiri dan kanan. Pada penggabungan kedua di atas, perhatikan bahwa ID perangkat disebut "perangkat" di bingkai data kiri, dan disebut "Model" di bingkai data kanan

Nama kolom yang berbeda ditentukan untuk penggabungan di Panda menggunakan parameter “left_on” dan “right_on”, bukan hanya menggunakan parameter “on”

Bagaimana Anda menggabungkan kumpulan data dengan python?
Menggabungkan bingkai data dengan nama berbeda untuk variabel gabungan dicapai dengan menggunakan argumen left_on dan right_on ke fungsi penggabungan panda

Menghitung statistik berdasarkan perangkat

Dengan penggabungan kami selesai, kami dapat menggunakan fungsionalitas agregasi data Panda untuk dengan cepat mengetahui penggunaan rata-rata untuk pengguna berdasarkan produsen perangkat. Perhatikan bahwa ukuran sampel yang kecil membuat grup yang lebih kecil lagi, jadi saya tidak akan mengaitkan signifikansi statistik apa pun dengan hasil khusus ini

result.groupby("manufacturer").agg({
        "outgoing_mins_per_month": "mean",
        "outgoing_sms_per_month": "mean",
        "monthly_mb": "mean",
        "use_id": "count"
    })

Bagaimana Anda menggabungkan kumpulan data dengan python?
Hasil akhir menggunakan agg() pandas aggregation untuk mengelompokkan berdasarkan produsen perangkat dan menyusun statistik rata-rata untuk kolom yang berbeda

Menjadi master penggabungan – Bagian 2

Itu melengkapi bagian pertama dari tutorial penggabungan ini. Anda sekarang harus menguasai dasar-dasar penggabungan, dan dapat mengatasi masalah penggabungan dan penggabungan Anda sendiri dengan informasi di atas. Bagian 2 dari posting blog ini membahas topik lanjutan berikut

  • Bagaimana Anda menggabungkan bingkai data menggunakan beberapa kolom gabungan/umum?
  • Bagaimana cara menggabungkan kerangka data berdasarkan indeks kerangka data?
  • Apa perbedaan antara fungsi gabung dan gabung di Pandas?
  • Seberapa cepat penggabungan di Python Pandas?

Sumber daya bermanfaat lainnya

Jangan biarkan penguasaan penggabungan Anda berhenti di sini. Coba tautan berikut untuk penjelasan dan informasi lebih lanjut tentang topik tersebut

Bagaimana Anda menggabungkan dua kumpulan data?

Untuk menggabungkan dua bingkai data (kumpulan data) secara vertikal, gunakan fungsi rbind . Kedua kerangka data harus memiliki variabel yang sama, tetapi tidak harus dalam urutan yang sama. Jika data frameA memiliki variabel yang tidak dimiliki oleh data frameB, maka keduanya. Hapus variabel ekstra dalam data frameA atau.

Bagaimana cara menggabungkan dua kumpulan data di panda?

Poin Penting .
Anda dapat bergabung dengan Pandas Dataframes dengan cara yang sama seperti Anda bergabung dengan tabel di SQL
Fungsi concat() dapat digunakan untuk menggabungkan dua Dataframe dengan menambahkan baris satu ke yang lain
concat() juga dapat menggabungkan Dataframes dengan kolom tetapi fungsi merge() adalah cara yang lebih disukai

Bagaimana cara saya bergabung dengan Dataframes dengan Python?

Bergabung dengan DataFrames menggunakan indeksnya. Jika kita ingin bergabung menggunakan kolom kunci, kita perlu mengatur kunci untuk menjadi indeks di df dan lainnya . DataFrame yang bergabung akan memiliki kunci sebagai indeksnya. Pilihan lain untuk bergabung menggunakan kolom kunci adalah dengan menggunakan parameter on.