DataFrames.jl 1.4: Berita sintaks spesifikasi aktif – Beragampengetahuan
Oleh: Blog Bogumił Kamiński
Repost dari:
Sintaks yang menentukan operasi di DataFrames.jl digunakan untuk menyampaikan informasi
Bagaimana fungsinya? select, transformatau combine harus menangani
bingkai data atau bingkai data yang dikelompokkan.
Jika Anda belum pernah menggunakannya, saya sarankan Anda membacanya
pengantar tentangnya.
Hari ini saya ingin membahas apa penambahan bahasa spesifikasi operasional kita
diimplementasikan di DataFrames.jl 1.4.
Kode yang disajikan telah diuji di Julia 1.8.2 dan DataFrames.jl 1.4.2.
Sintaks spesifikasi operasi dibangun di sekitar ETL (extract-transform-load)
proses, yang mungkin Anda ketahui dari integrasi data. Bentuk umumnya adalah:
[source columns] => [operation] => [target columns names]
Berikut adalah contoh sederhana:
julia> using DataFrames
julia> df = DataFrame(customer=[1, 1, 2, 2, 2, 3],
transaction_id=1:6,
volume=[2, 3, 1, 4, 5, 9])
6×3 DataFrame
Row │ customer transaction_id volume
│ Int64 Int64 Int64
─────┼──────────────────────────────────
1 │ 1 1 2
2 │ 1 2 3
3 │ 2 3 1
4 │ 2 4 4
5 │ 2 5 5
6 │ 3 6 9
julia> combine(df, :volume => sum => :total_volume)
1×1 DataFrame
Row │ total_volume
│ Int64
─────┼──────────────
1 │ 24
julia> combine(groupby(df, :customer), :volume => sum => :total_volume)
3×2 DataFrame
Row │ customer total_volume
│ Int64 Int64
─────┼────────────────────────
1 │ 1 5
2 │ 2 10
3 │ 3 9
Dalam contoh ini, pertama-tama kita mensintesis volume kolom untuk mendapatkan volume total
untuk seluruh kerangka data dan selanjutnya kami menghitung total volume per pelanggan.
Dalam kedua kasus kami menggunakan sintaks spesifikasi operasional yang sama:
:volume => sum => :total_volume
Yang mengatakan:
- ekstrak pilar
:volume; - mengubah itu menggunakan
sum; - tonase untuk
:total_volumepilar.
Namun, ada kasus di mana tidak ada kolom sumber alami yang kami miliki
mungkin ingin melakukan perhitungan. Salah satu kasus umum tersebut adalah menerima
jumlah baris per kelompok. Untuk kasus khusus ini kami memiliki sintaks pendek nrow
atau nrow => [target column] untuk menghitung jumlah baris dalam bingkai data atau dalam
setiap kelompok bingkai data. Perhatikan bahwa tidak ada ekstrak ambil bagian dalam hal ini
sintaks karena nomor baris bukanlah atribut dari kolom tertentu tetapi dari data
bingkai secara keseluruhan.
Berikut adalah contoh cara kerjanya:
julia> combine(df, nrow)
1×1 DataFrame
Row │ nrow
│ Int64
─────┼───────
1 │ 6
julia> combine(groupby(df, :customer), nrow => :transactions_per_customer)
3×2 DataFrame
Row │ customer transactions_per_customer
│ Int64 Int64
─────┼─────────────────────────────────────
1 │ 1 2
2 │ 2 3
3 │ 3 1
Ada tiga operasi umum lainnya dengan sifat yang sama:
- tambahkan kolom dengan nomor baris;
- tambahkan kolom dengan nomor grup (masuk akal hanya saat bekerja dengan grup
bingkai data); - bagian yang dihitung dari baris (juga untuk kerangka data berkerumun).
Di DataFrames.jl 1.4, ketiga operasi ini sekarang didukung melaluieachindex, groupindicesdan proprow bekerja. Mari saya tunjukkan bagaimana mereka
pekerjaan.
Ini adalah fungsi yang paling sederhana. Itu eachindex operasi menambahkan nomor baris
dalam kerangka data atau setiap grup dalam kerangka data berkerumun. Ini contohnya:
julia> combine(df, eachindex, :transaction_id)
6×2 DataFrame
Row │ eachindex transaction_id
│ Int64 Int64
─────┼───────────────────────────
1 │ 1 1
2 │ 2 2
3 │ 3 3
4 │ 4 4
5 │ 5 5
6 │ 6 6
julia> combine(groupby(df, :customer),
eachindex => :transaction_number,
:transaction_id)
6×3 DataFrame
Row │ customer transaction_number transaction_id
│ Int64 Int64 Int64
─────┼──────────────────────────────────────────────
1 │ 1 1 1
2 │ 1 2 2
3 │ 2 1 3
4 │ 2 2 4
5 │ 2 3 5
6 │ 3 1 6
Perhatikan bahwa saat kami mengerjakan keseluruhan kerangka data, kami memiliki kolom yang sama dengan:transaction_id. Namun, saat mengerjakan kerangka data berkerumun, kami memiliki
jumlah transaksi per pelanggan.
Itu eachindex operasi menambahkan baris dalam grup. Jadi wajar untuk meminta a
fungsi yang membuat beberapa grup. Itu groupindices aktivitas adalah
dirancang untuk mencapai tujuan ini. Ini contohnya:
julia> combine(groupby(df, :customer), groupindices)
3×2 DataFrame
Row │ customer groupindices
│ Int64 Int64
─────┼────────────────────────
1 │ 1 1
2 │ 2 2
3 │ 3 3
julia> combine(groupby(df, :customer), groupindices => :customer_id, :customer)
6×2 DataFrame
Row │ customer customer_id
│ Int64 Int64
─────┼───────────────────────
1 │ 1 1
2 │ 1 1
3 │ 2 2
4 │ 2 2
5 │ 2 2
6 │ 3 3
Perhatikan bahwa dalam contoh kami, angka yang dihasilkan sama dengan nilai di dalamnyacustomer pilar. Namun, secara umum tidaklah demikian.
Mari kita kumpulkan kerangka data berkerumun sebelum dimanipulasi:
julia> gdf = groupby(df, :customer)[[3, 2]]
GroupedDataFrame with 2 groups based on key: customer
First Group (1 row): customer = 3
Row │ customer transaction_id volume
│ Int64 Int64 Int64
─────┼──────────────────────────────────
1 │ 3 6 9
⋮
Last Group (3 rows): customer = 2
Row │ customer transaction_id volume
│ Int64 Int64 Int64
─────┼──────────────────────────────────
1 │ 2 3 1
2 │ 2 4 4
3 │ 2 5 5
julia> combine(gdf, groupindices)
2×2 DataFrame
Row │ customer groupindices
│ Int64 Int64
─────┼────────────────────────
1 │ 3 1
2 │ 2 2
Anda bisa melihat groupindices Mengembalikan nomor grup dalam grup
bingkai data.
Seperti yang saya sebutkan sebelumnya, operasi ini tidak didukung untuk bingkai data:
julia> combine(df, groupindices)
ERROR: ArgumentError: groupindices only supports `GroupedDataFrame` as an
argument. Additionally it can be used in transformation functions (combine,
select, etc.) when processing a `GroupedDataFrame`, using the syntax
`groupindices => target_col_name` or just `groupindices`
Didukung DataFrames.jl nrow fungsi nyaman dari waktu yang lama
ini adalah kasus penggunaan umum yang dibutuhkan pengguna. Kasus penggunaan yang hampir sering adalah
untuk mendapatkan grup baris untuk setiap grup. Ini dapat dicapai dengan menggunakan proprow
bekerja:
julia> combine(groupby(df, :customer), nrow, proprow)
3×3 DataFrame
Row │ customer nrow proprow
│ Int64 Int64 Float64
─────┼───────────────────────────
1 │ 1 2 0.333333
2 │ 2 3 0.5
3 │ 3 1 0.166667
julia> combine(groupby(df, :customer), nrow => :count, proprow => :proportion)
3×3 DataFrame
Row │ customer count proportion
│ Int64 Int64 Float64
─────┼─────────────────────────────
1 │ 1 2 0.333333
2 │ 2 3 0.5
3 │ 3 1 0.166667
mirip dengan groupindices itu proprow operasi hanya didukung untuk
kerangka data yang dikelompokkan:
julia> combine(df, proprow)
ERROR: ArgumentError: proprow can only be used in transformation functions
(combine, select, etc.) when processing a `GroupedDataFrame`, using the syntax
`proprow => target_col_name` or just `proprow`
Saya harap Anda akan menemukannya eachindex, groupindices dan proprow bekerja
berguna dalam mengatur data harian Anda dengan DataFrames.jl.
Terkait
Software Terbaru Saat Ini
Aplikasi yang sedang trend saat ini
object oriented programming, programming language, programming adalah, web programming, belajar programming, tournament software, software, software adalah, contoh software, apa itu software, pengertian software, aplikasi, aplikasi penghasil uang, aplikasi bokep, aplikasi video, programming
#DataFrames.jl #Berita #sintaks #spesifikasi #aktif