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:
- Baca file JSON dan muat data dan metadata yang terkandung di dalamnya menjadi satu
bingkai data. - Lakukan beberapa analisis sederhana dari data.
- 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!,labelsdanfindlabelsberfungsi untuk
kerja nyaman dengan metadata label kolom; - itu
captiondancaption!fungsi untuk bekerja dengan nyaman
metadata keterangan tabel; notedannote!fungsi untuk kenyamanan bekerja dengan metadata catatan
di tingkat tabel dan kolom;unit(diekspor ulang dari Unity.jl),unit!danunitsberfungsi 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:defaultgaya diatur dan orang ingin memilikinya:notetype (umum saat membaca metadata dari format penyimpanan
dukungan informasi jenis metadata);meta2tomldantoml2meta!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
@trackmakro untuk melacak operasi yang diterapkan ke tabel dantracklog
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.
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
#TableMetadataTools.jl #juliablogger.com