TableMetadataTools.jl |  juliablogger.com

 – Beragampengetahuan
20 mins read

TableMetadataTools.jl | juliablogger.com – Beragampengetahuan

Oleh: Blog Bogumił Kamiński

Repost dari:

Sebelum saya mulai, izinkan saya membuat pengumuman kecil. Pada postingan terakhir saya, saya
mengiklankan kursus dasar-dasar Julia dalam ilmu data untuk memulai
minggu depan di MIT. Jika seseorang tertarik pada materi kami akan
penutup Anda dapat menemukannya di sini. Ada juga pilihan untuk mengikuti kursus
dari jauh. Konten akan dialirkan melalui MS Teams. Jika Anda ingin bergabung
Silahkan daftarkan diri anda disini.

Sekarang, kembali ke bisnis biasa. Minggu ini saya mendaftar
Paket TableMetadataTools.jl. Ini dimaksudkan untuk melakukan operasi umum
pada metadata tabel yang lebih nyaman.

Saya baru-baru ini menulis tentang bagaimana seseorang dapat bekerja dengan metadata di
pelajaran ini. Hari ini, saya ingin memberikan contoh lain untuk bekerja dengan
tabel metadata dan diskusikan fungsi utama itu
TableMetadataTools.jl menyediakan. Bedanya kali ini
kita akan menggunakan sumber JSON.

Artikel ini ditulis di bawah Julia 1.8.5, DataFrames.jl 1.4.4, JSON3.jl 1.12.0,
TableMetadataTools.jl 0.1.0 dan Parquet2.jl 0.2.5.

Kali ini saya memilih data data kependudukan Trem
analisis. Dataset ini menunjukkan Battery Electric Vehicle (BEV) dan Plug-in
Kendaraan Listrik Hibrida (PHEV) saat ini sedang didaftarkan melalui
Departemen Perizinan Negara Bagian Washington (DOL).

Kami ingin dengan file JSON rows.json dapat diunduh dari
situs itu, jadi sebelum melanjutkan, harap unduh ke direktori kerja Anda.
Analisis yang saya sajikan dilakukan untuk file yang saya unduh pada 12 Januari 2023.

Pada artikel ini kita akan:

  1. Baca file JSON dan muat data dan metadata yang terkandung di dalamnya menjadi satu
    bingkai data.
  2. Lakukan beberapa analisis sederhana dari data.
  3. Simpan data sebagai file Parket (karena mendukung metadata).

(catatan – beberapa output di posting ini akan lebar, jadi di beberapa layar
itu mungkin tidak terlihat bagus; namun, terlihat baik-baik saja jika Anda mencoba di terminal
atau Notebook Jupyter)

Pertama unduh paket yang diperlukan:

julia> using DataFrames

julia> using JSON3

julia> using Parquet2

julia> using Statistics

julia> using TableMetadataTools

Selanjutnya, kita membaca file JSON ke dalam struktur seperti kamus:

julia> data_json = open(JSON3.read, "rows.json")
JSON3.Object{Base.CodeUnits{UInt8, String}, Vector{UInt64}} with 2 entries:  :meta => {…
  :data => JSON3.Array[Any["row-briu~kmbv-8jap", "00000000-0000-0000-6480-…

Sangatlah bermanfaat untuk menyelidiki struktur objek ini, karena kompleks:

julia> function traverse(obj; level=0)
           if level > 4 || !(obj isa AbstractDict)
               print(" ...")
               return
           end
           for key in keys(obj)
               print("\n", " " ^ level, key, ":")
               traverse(obj[key], level=level+2)
           end
       end
traverse (generic function with 2 methods)

julia> traverse(data_json)

meta:
  view:
    id: ...
    name: ...
    assetType: ...
    attribution: ...
    averageRating: ...
    category: ...
    createdAt: ...
    description: ...
    displayType: ...
    downloadCount: ...
    hideFromCatalog: ...
    hideFromDataJson: ...
    newBackend: ...
    numberOfComments: ...
    oid: ...
    provenance: ...
    publicationAppendEnabled: ...
    publicationDate: ...
    publicationGroup: ...
    publicationStage: ...
    rowsUpdatedAt: ...
    rowsUpdatedBy: ...
    tableId: ...
    totalTimesRated: ...
    viewCount: ...
    viewLastModified: ...
    viewType: ...
    approvals: ...
    clientContext: ...
    columns: ...
    grants: ...
    metadata: ...
    owner: ...
    query: ...
    rights: ...
    tableAuthor: ...
    tags: ...
    flags: ...
data: ...

Seperti yang Anda lihat, kami hanya dua tingkat di bawah hierarki dan sudah
ada banyak informasi.

Data aktual disimpan di :data bidang. Sisanya adalah metadata,
di mana menarik bagi kita akan :name, :descriptiondan :columns.

Sebelum kita bergerak maju, mari kita lihat data_json.meta.view.columns vektor:

julia> data_json.meta.view.columns[[1; end]]
2-element Vector{JSON3.Object}:
 {
               "id": -1,
             "name": "sid",
     "dataTypeName": "meta_data",
        "fieldName": ":sid",
         "position": 0,
   "renderTypeName": "meta_data",
           "format": {},
            "flags": [
                       "hidden"
                     ]
}
 {
                    "id": 561974359,
                  "name": "WAOFM - GIS - Legislative District Boundary",
          "dataTypeName": "number",
           "description": "",
             "fieldName": ":@computed_region_8ddd_yn5v",
              "position": 21,
        "renderTypeName": "number",
         "tableColumnId": 87270518,
   "computationStrategy": {
                             "source_columns": [
                                                 "geocoded_column"
                                               ],
                                       "type": "georegion_match_on_point",
                                 "parameters": {
                                                       "region": "_8ddd-yn5v",
                                                  "primary_key": "_feature_id"
                                               }
                          },
                "format": {}
}

(Saya hanya menampilkan elemen pertama dan terakhir dari vektor yang terkandung di dalamnya
entri metadata karena sisanya serupa). Vektor ini menyimpan level kolom
metadata. Area yang menarik adalah :name, :fieldNamedan :description
(yang terakhir tidak selalu ada).

Akhirnya, mari kita selidiki data_json.data target. Sekali lagi, kita tinggal memilih
elemen pertama dan terakhir:

julia> data_json.data[[1; end]]
2-element Vector{JSON3.Array}:
 Any["row-briu~kmbv-8jap", "00000000-0000-0000-6480-436D376BD73A", 0,
 1670541195, nothing, 1670541238, nothing, "{ }", "JTMEB3FV6N",
 "Monroe"  …  "42", "0", nothing, "198968248",
 "POINT (-81.80023 24.5545)", nothing, "12087972100", "51", nothing, nothing]
 Any["row-acyi~zx2n-aq3x", "00000000-0000-0000-BA64-2573B5CAA8F7", 0,
 1670541195, nothing, 1670541258, nothing, "{ }", "YV4BR0CL8N",
 "King"  …  "18", "0", "47", "194673692",
 "POINT (-122.09124 47.33778)", "PUGET SOUND ENERGY INC||CITY OF TACOMA - (WA)",
 "53033032005", "3009", "8", "46"]

Kami melihat bahwa data disimpan dalam baris.

Memiliki pengetahuan ini memungkinkan kita memuat data ke dalam bingkai data.

Kami pertama-tama mengekstrak metadata tingkat kolom ke dalam kerangka data untuk kenyamanan:

julia> data_colmeta = DataFrame(name=getproperty.(cols, :fieldName),
                                label=getproperty.(cols, :name),
                                note=get.(cols, :description, nothing))
28×3 DataFrame
 Row │ name                         label                              note
     │ String                       String                             Union…
─────┼───────────────────────────────────────────────────────────────────────────────────────────────────
   1 │ :sid                         sid
   2 │ :id                          id
   3 │ :position                    position
   4 │ :created_at                  created_at
   5 │ :created_meta                created_meta
   6 │ :updated_at                  updated_at
   7 │ :updated_meta                updated_meta
   8 │ :meta                        meta
   9 │ vin_1_10                     VIN (1-10)                         The 1st 10 characters of each ve…
  10 │ county                       County                             The county in which the register…
  11 │ city                         City                               The city in which the registered…
  12 │ state                        State                              The state in which the registere…
  13 │ zip_code                     Postal Code                        The 5 digit zip code in which th…
  14 │ model_year                   Model Year                         The model year of the vehicle, d…
  15 │ make                         Make                               The manufacturer of the vehicle,…
  16 │ model                        Model                              The model of the vehicle, determ…
  17 │ ev_type                      Electric Vehicle Type              This distinguishes the vehicle a…
  18 │ cafv_type                    Clean Alternative Fuel Vehicle (…  This categorizes vehicle as Clea…
  19 │ electric_range               Electric Range                     Describes how far a vehicle can …
  20 │ base_msrp                    Base MSRP                          This is the lowest Manufacturer'…
  21 │ legislative_district         Legislative District               The specific section of Washingt…
  22 │ dol_vehicle_id               DOL Vehicle ID                     Unique number assigned to each v…
  23 │ geocoded_column              Vehicle Location                   The center of the ZIP Code for t…
  24 │ electric_utility             Electric Utility                   This is the electric power retai…
  25 │ _2020_census_tract           2020 Census Tract                  The census tract identifier is a…
  26 │ :@computed_region_x4ys_rtnd  Counties
  27 │ :@computed_region_fny7_vc3j  Congressional Districts
  28 │ :@computed_region_8ddd_yn5v  WAOFM - GIS - Legislative Distri…

Sekarang, secara terstruktur, kita melihat bahwa metadata berisi: nama kolom,
label deskripsi kolom dan, secara opsional, catatan tentang konten kolom.

Asumsikan bahwa dari semua kolom yang tersedia kami hanya ingin menyimpan beberapa
menarik. Itu DATA_COLSKEEP vektor menampung jumlah kolom yang ingin kita simpan
dalam bingkai data.

julia> const DATA_COLSKEEP = [9, 12, 14, 15, 17, 18, 19];

julia> keepat!(data_colmeta, DATA_COLSKEEP)
7×3 DataFrame
 Row │ name            label                              note
     │ String          String                             Union…
─────┼──────────────────────────────────────────────────────────────────────────────────────
   1 │ vin_1_10        VIN (1-10)                         The 1st 10 characters of each ve…
   2 │ state           State                              The state in which the registere…
   3 │ model_year      Model Year                         The model year of the vehicle, d…
   4 │ make            Make                               The manufacturer of the vehicle,…
   5 │ ev_type         Electric Vehicle Type              This distinguishes the vehicle a…
   6 │ cafv_type       Clean Alternative Fuel Vehicle (…  This categorizes vehicle as Clea…
   7 │ electric_range  Electric Range                     Describes how far a vehicle can …

Sekarang kita siap membuat bingkai data dengan data kita. Pertama buat skemanya
dan isi metadata:

julia> data_df = DataFrame(data_colmeta.name .=> Ref(String[]))
0×7 DataFrame
 Row │ vin_1_10  state   model_year  make    ev_type  cafv_type  electric_range
     │ String    String  String      String  String   String     String
─────┴──────────────────────────────────────────────────────────────────────────

julia> caption!(data_df, data_json.meta.view.name);

julia> note!(data_df, data_json.meta.view.description);

julia> for row in eachrow(data_colmeta)
           label!(data_df, row.name, row.label)
           note!(data_df, row.name, row.note)
       end

Mari kita periksa apakah metadata memang disimpan dengan benar. Kita bisa mengekstrak
kamus:

julia> metadata(data_df)
Dict{String, String} with 2 entries:
  "note"    => "This dataset shows the Battery Electric Vehicles (BEVs) and Plug-in Hybrid Electric Vehicles (PHEVs) that are currently registered through Washington State Department of Licensing (DOL)."
  "caption" => "Electric Vehicle Population Data"

julia> colmetadata(data_df)
Dict{Symbol, Dict{String, String}} with 7 entries:
  :ev_type        => Dict("label"=>"Electric Vehicle Type", "note"=>"This distinguishes the vehicle as all electric or a plug-in hybrid.")
  :make           => Dict("label"=>"Make", "note"=>"The manufacturer of the vehicle, determined by decoding the Vehicle Identification Number (VIN).")
  :cafv_type      => Dict("label"=>"Clean Alternative Fuel Vehicle (CAFV) Eligibility", "note"=>"This categorizes vehicle as Clean Alternative Fuel Vehicles (CAFVs) based on the fuel requirement and electric-o…
  :state          => Dict("label"=>"State", "note"=>"The state in which the registered owner resides.")
  :vin_1_10       => Dict("label"=>"VIN (1-10)", "note"=>"The 1st 10 characters of each vehicle's Vehicle Identification Number (VIN).")
  :electric_range => Dict("label"=>"Electric Range", "note"=>"Describes how far a vehicle can travel purely on its electric charge.")
  :model_year     => Dict("label"=>"Model Year", "note"=>"The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN).")

Atau dapatkan representasi TOML dari metadata (entri pertama dari sarana keluaran TOML
bahwa kami tidak menyimpan informasi jenis metadata):

julia> println(meta2toml(data_df, style=false))
style = false

[colmetadata.cafv_type]
label = "Clean Alternative Fuel Vehicle (CAFV) Eligibility"
note = "This categorizes vehicle as Clean Alternative Fuel Vehicles (CAFVs) based on the fuel requirement and electric-only range requirement in House Bill 2042 as passed in the 2019 legislative session."

[colmetadata.electric_range]
label = "Electric Range"
note = "Describes how far a vehicle can travel purely on its electric charge."

[colmetadata.ev_type]
label = "Electric Vehicle Type"
note = "This distinguishes the vehicle as all electric or a plug-in hybrid."

[colmetadata.make]
label = "Make"
note = "The manufacturer of the vehicle, determined by decoding the Vehicle Identification Number (VIN)."

[colmetadata.model_year]
label = "Model Year"
note = "The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN)."

[colmetadata.state]
label = "State"
note = "The state in which the registered owner resides."

[colmetadata.vin_1_10]
label = "VIN (1-10)"
note = "The 1st 10 characters of each vehicle's Vehicle Identification Number (VIN)."

[metadata]
caption = "Electric Vehicle Population Data"
note = "This dataset shows the Battery Electric Vehicles (BEVs) and Plug-in Hybrid Electric Vehicles (PHEVs) that are currently registered through Washington State Department of Licensing (DOL)."

Semuanya terlihat bagus sejauh ini.

Anda juga dapat dengan mudah mengekstrak semua label kolom menggunakan labels Konstan:

julia> labels(data_df)
7-element Vector{String}:
 "VIN (1-10)"
 "State"
 "Model Year"
 "Make"
 "Electric Vehicle Type"
 "Clean Alternative Fuel Vehicle (CAFV) Eligibility"
 "Electric Range"

Sekarang kami menyimpan data dalam kerangka data kami:

julia> foreach(row -> push!(data_df, row[DATA_COLSKEEP]), data_json.data)

julia> show(data_df, truncate=10)
112634×7 DataFrame
    Row │ vin_1_10    state   model_year  make         ev_type      cafv_type    electric_range
        │ String      String  String      String       String       String       String
────────┼───────────────────────────────────────────────────────────────────────────────────────
      1 │ JTMEB3FV6N  FL      2022        TOYOTA       Plug-in Hy…  Clean Alte…  42
      2 │ 1G1RD6E45D  NV      2013        CHEVROLET    Plug-in Hy…  Clean Alte…  38
      3 │ JN1AZ0CP8B  WA      2011        NISSAN       Battery El…  Clean Alte…  73
      4 │ 1G1FW6S08H  WA      2017        CHEVROLET    Battery El…  Clean Alte…  238
      5 │ 3FA6P0SU1K  WA      2019        FORD         Plug-in Hy…  Not eligib…  26
      6 │ 5YJ3E1EB5J  WA      2018        TESLA        Battery El…  Clean Alte…  215
   ⋮    │     ⋮         ⋮         ⋮            ⋮            ⋮            ⋮             ⋮
 112630 │ 7SAYGDEF2N  WA      2022        TESLA        Battery El…  Eligibilit…  0
 112631 │ 1N4BZ1CP7K  WA      2019        NISSAN       Battery El…  Clean Alte…  150
 112632 │ 1FMCU0KZ4N  WA      2022        FORD         Plug-in Hy…  Clean Alte…  38
 112633 │ KNDCD3LD4J  WA      2018        KIA          Plug-in Hy…  Not eligib…  26
 112634 │ YV4BR0CL8N  WA      2022        VOLVO        Plug-in Hy…  Not eligib…  18
                                                                             112623 rows omitted

julia> describe(data_df, :min, :max, :nmissing)
7×4 DataFrame
 Row │ variable        min                                max                                nmissing
     │ Symbol          String                             String                             Int64
─────┼────────────────────────────────────────────────────────────────────────────────────────────────
   1 │ vin_1_10        1C4JJXP60M                         YV4H60DZ9N                                0
   2 │ state           AK                                 WY                                        0
   3 │ model_year      1997                               2023                                      0
   4 │ make            AUDI                               VOLVO                                     0
   5 │ ev_type         Battery Electric Vehicle (BEV)     Plug-in Hybrid Electric Vehicle …         0
   6 │ cafv_type       Clean Alternative Fuel Vehicle E…  Not eligible due to low battery …         0
   7 │ electric_range  0                                  97                                        0

Kita hampir selesai. Sepertinya :model_year dan :electric_range menjadi
integer, jadi kami melakukan konversi yang sesuai:

julia> transform!(data_df,
                  [:model_year, :electric_range] .=> ByRow(x -> parse(Int, x)),
                  renamecols=false);

Di sini pernyataan penting telah dibuat. Karena kami menyimpan nama kolom lama
untuk kolom yang dikonversi "label" dan "note" metadata disimpan.
Alasannya adalah bahwa metadata ini awalnya dimiliki :note Gaya. Mari kita periksa
bahwa metadata sebenarnya disimpan:

julia> colmetadata(data_df, :model_year)
Dict{String, String} with 2 entries:
  "label" => "Model Year"
  "note"  => "The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN)."

julia> colmetadata(data_df, :electric_range)
Dict{String, String} with 2 entries:
  "label" => "Electric Range"
  "note"  => "Describes how far a vehicle can travel purely on its electric charge."

Ini adalah prinsip penting saat bekerja dengan :noteketik metadata untuk tetap tua
nama kolom hanya jika kita tidak mengubah arti kolom (seperti pada
kasus, di mana kita baru saja mengurai).

Mari kita periksa berapa banyak pengamatan yang harus kita gabungkan :ev_type
dan :cafv_type kolom:

julia> data_gdf = groupby(data_df, [:ev_type, :cafv_type], sort=true)

julia> data_agg1 = combine(data_gdf, nrow, :electric_range .=> extrema)
5×4 DataFrame
 Row │ ev_type                            cafv_type                          nrow   electric_range_extrema
     │ String                             String                             Int64  Tuple{Int64, Int64}
─────┼─────────────────────────────────────────────────────────────────────────────────────────────────────
   1 │ Battery Electric Vehicle (BEV)     Clean Alternative Fuel Vehicle E…  46799  (39, 337)
   2 │ Battery Electric Vehicle (BEV)     Eligibility unknown as battery r…  39236  (0, 0)
   3 │ Battery Electric Vehicle (BEV)     Not eligible due to low battery …      9  (29, 29)
   4 │ Plug-in Hybrid Electric Vehicle …  Clean Alternative Fuel Vehicle E…  11840  (30, 153)
   5 │ Plug-in Hybrid Electric Vehicle …  Not eligible due to low battery …  14750  (6, 29)

Hasilnya terlihat menarik, tetapi kemungkinan besar kita tidak langsung mengerti
nama keluarga. Mari kita periksa metadata kolom:

julia> colmetadata(data_agg1)
Dict{Symbol, Dict{String, String}} with 2 entries:
  :ev_type   => Dict("label"=>"Electric Vehicle Type", "note"=>"This distinguishes the vehicle as all electric or a plug-in hybrid.")
  :cafv_type => Dict("label"=>"Clean Alternative Fuel Vehicle (CAFV) Eligibility", "note"=>"This categorizes vehicle as Clean Alternative Fuel Vehicles (CAFVs) based on the fuel requirement and electric-only r…

Kita hanya bisa melihat itu :ev_type dan :cafv_type kolom dengan metadata. Ini adalah
rencana. Kolom ini tidak dikonversi sehingga metadatanya dipertahankan karena
dulu :note Gaya. Di sisi lain, :electric_range kolom adalah
diubah, dengan mengambil ekstremnya sehingga metadatanya tidak disebarkan.

Sekarang kita bisa lebih mudah memahami hasilnya. Itu :ev_type kolom memberitahu kita
jika mobil hanya listrik atau hybrid. Cara lain :cafv_type
kolom yang memberi tahu kami jika kendaraan memenuhi persyaratan Alternatif Bersih
Mobil Bahan Bakar.

Menariknya, untuk beberapa BEV, tidak diketahui apakah mereka memenuhi kondisi CAFV,
dan ini ditunjukkan oleh 0 di dalamnya :electric_range. Untuk kasus lain, kita lihat
itu 30 adalah kisaran minimum yang diperbolehkan untuk mengklasifikasikan kendaraan yang memenuhi CAFV.
Anehnya, enam BEV tidak memenuhi itu karena jangkauan baterainya sangat rendah.

Mari kita periksa bagaimana frekuensi rentang daya sama 0 perilaku:

julia> data_agg2 = sort(unstack(data_df,
                                :model_year,
                                :ev_type,
                                :electric_range,
                                combine = x -> mean(x .> 0)))
20×3 DataFrame
 Row │ model_year  Plug-in Hybrid Electric Vehicle (PHEV)  Battery Electric Vehicle (BEV)
     │ Int64       Union{Missing, Float64}                 Union{Missing, Float64}
─────┼────────────────────────────────────────────────────────────────────────────────────
   1 │       1997                               missing                         1.0
   2 │       1998                               missing                         1.0
   3 │       1999                               missing                         1.0
   4 │       2000                               missing                         1.0
   5 │       2002                               missing                         1.0
   6 │       2008                               missing                         1.0
   7 │       2010                               missing                         1.0
   8 │       2011                                     1.0                       1.0
   9 │       2012                                     1.0                       1.0
  10 │       2013                                     1.0                       1.0
  11 │       2014                                     1.0                       1.0
  12 │       2015                                     1.0                       1.0
  13 │       2016                                     1.0                       1.0
  14 │       2017                                     1.0                       1.0
  15 │       2018                                     1.0                       1.0
  16 │       2019                                     1.0                       0.999763
  17 │       2020                                     1.0                       0.994388
  18 │       2021                                     1.0                       0.0327439
  19 │       2022                                     1.0                       0.0
  20 │       2023                                     1.0                       0.0

Kami menemukan bahwa memang BEV terbaru tidak memiliki data jangkauan (karena tidak
belum terkumpul). Juga, kita tahu bahwa hibrida baru diperkenalkan pada tahun 2011.

Seperti di atas, kita dapat memeriksa apakah metadata kolom disimpan hanya untuk :model_year kolom
karena kami tidak mengubahnya:

julia> colmetadata(data_agg2)
Dict{Symbol, Dict{String, String}} with 1 entry:
  :model_year => Dict("label"=>"Model Year", "note"=>"The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN).")

Itu meta2toml fungsi yang dirancang untuk memudahkan penyimpanan metadata
ke dalam file mandiri. Namun, menurut saya menyimpan metadata lebih nyaman
beserta datanya. Di sini Parquet2.jl sangat berguna.

Mari kita bekerja dengan data_agg2 bingkai data:

julia> Parquet2.writefile("data_agg2.parquet", data_agg2)
✏ Parquet2.FileWriter{IOStream}(data_agg2.parquet)

julia> data_pq = Parquet2.Dataset("data_agg2.parquet")
≔ Parquet2.Dataset (928 bytes)
        1. "model_year": Int64
        2. "Plug-in Hybrid Electric Vehicle (PHEV)": Union{Missing, Float64}
        3. "Battery Electric Vehicle (BEV)": Union{Missing, Float64}


julia> data_pq_df = DataFrame(data_pq);

Kita bisa memeriksa keduanya data_pq dan data_pq_df memiliki informasi metadata:

julia> println(meta2toml(data_pq))
style = true

[colmetadata."Battery Electric Vehicle (BEV)"]

[colmetadata."Plug-in Hybrid Electric Vehicle (PHEV)"]

[colmetadata.model_year]
label = ["Model Year", "default"]
note = ["The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN).", "default"]

[metadata]
caption = ["Electric Vehicle Population Data", "default"]
note = ["This dataset shows the Battery Electric Vehicles (BEVs) and Plug-in Hybrid Electric Vehicles (PHEVs) that are currently registered through Washington State Department of Licensing (DOL).", "default"]

julia> println(meta2toml(data_pq_df))
style = true

[colmetadata.model_year]
label = ["Model Year", "default"]
note = ["The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN).", "default"]

[metadata]
caption = ["Electric Vehicle Population Data", "default"]
note = ["This dataset shows the Battery Electric Vehicles (BEVs) and Plug-in Hybrid Electric Vehicles (PHEVs) that are currently registered through Washington State Department of Licensing (DOL).", "default"]

Kami mencatat bahwa metadata memiliki :default gaya, karena Parket tidak
mendukung jenis metadata. Oleh karena itu, jika kita ingin mengonversi semua metadata menjadi :note
style, untuk menyebarkannya, kita dapat menulis, misalnya:

julia> setallmetadatastyle!(data_pq_df);

julia> print(meta2toml(data_pq_df))
style = true

[colmetadata.model_year]
label = ["Model Year", "note"]
note = ["The model year of the vehicle, determined by decoding the Vehicle Identification Number (VIN).", "note"]

[metadata]
caption = ["Electric Vehicle Population Data", "note"]
note = ["This dataset shows the Battery Electric Vehicles (BEVs) and Plug-in Hybrid Electric Vehicles (PHEVs) that are currently registered through Washington State Department of Licensing (DOL).", "note"]

Berikut adalah daftar fungsi yang dapat Anda temukan
TableMetadataTools.jl ditambahkan di bagian atas metadata standar
Fungsi manajemen didefinisikan dalam DataAPI.jl:

  • itu label, label!, labelsdan findlabels berfungsi untuk
    kerja nyaman dengan metadata label kolom;
  • itu caption dan caption! fungsi untuk bekerja dengan nyaman
    metadata keterangan tabel;
  • note dan note! fungsi untuk kenyamanan bekerja dengan metadata catatan
    di tingkat tabel dan kolom;
  • unit (diekspor ulang dari Unity.jl), unit!dan units berfungsi untuk
    pekerjaan yang nyaman dengan metadata unit kolom;
  • setmetadatastyle!, setcolmetadatastyle!, setallmetadatastyle! untuk grup
    atur gaya untuk kunci yang cocok dengan pola yang diteruskan; sering dibutuhkan saat bekerja
    dengan metadata asli di sana :default gaya diatur dan orang ingin memilikinya
    :note type (umum saat membaca metadata dari format penyimpanan
    dukungan informasi jenis metadata);
  • meta2toml dan toml2meta! untuk menyimpan dan memuat metadata dalam format TOML;
  • dict2metadata!, dict2colmetadata! untuk mengatur tingkat tabel dan kolom
    metadata yang disimpan dalam kamus (mis. diambil sebelumnya dari beberapa penyimpanan
    format atau dengan menggunakan fungsi metadata atau colmetadata);
  • itu @track makro untuk melacak operasi yang diterapkan ke tabel dan tracklog
    Fungsi pencetakan metadata pelacakan yang nyaman.

Saya harap Anda akan menemukan posting ini berguna sebagai panduan untuk bekerja dengan keduanya
metadata dan mengimpor data dari file JSON kompleks ke dalam bingkai data.

Perasaan umum saya adalah, sementara metadata sering digunakan oleh Stata atau SAS
pengguna, itu kurang diterima di ekosistem lain. Alasan yang mungkin adalah
tidak memiliki dukungan yang tepat untuk menyimpan dan bekerja dengan metadata tabular.
Sekarang, saya harap kombinasi DataFrames.jl + Parquet2.jl akan membantu
masalah ini.

Memang, dalam banyak kasus Anda tidak memerlukan metadata tabel. Namun, saya yakin
bahwa jika Anda bekerja dengan tabel dengan ratusan atau ribuan kolom atau
Anda ingin berbagi tabel antar tim dengan lampiran metadata yang sesuai
data sangat penting.

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

#TableMetadataTools.jl #juliablogger.com

Tinggalkan Balasan

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