DataFrames.jl 1.4: Berita sintaks spesifikasi aktif

 – Beragampengetahuan
5 mins read

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_volume pilar.

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 melalui
eachindex, 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 dalamnya
customer 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.

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

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *