gpt4 book ai didi

dataframe - 使用 DataFramesMeta 包中的 @linq 整理 Julia 中的数据

转载 作者:行者123 更新时间:2023-12-04 08:40:09 25 4
gpt4 key购买 nike

我想使用 @linq 包中的 DataFramesMeta 宏来整理我的数据。
结果应该与下面的代码相同:

using CSV, DataFrames, Dates

url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv"
download(url, joinpath(pwd(), "confirmed.csv"))

df = CSV.read(joinpath(pwd(), "confirmed.csv"))
rename!(df, 1 => :Province, 2 => :Country)
select!(df, Not([:Province, :Lat, :Long]))
df = combine(groupby(df, :Country), names(df)[2:end] .=> sum .=> names(df)[2:end])
df = stack(df, Not(:Country), :Country, variable_name=:Date, value_name=:Confirmed)
df[:Date] = parse.(Dates.Date, String.(df[:Date]), Dates.DateFormat("m/d/Y")) .+ Dates.Year(2000)

println(last(df, 10))
结果:
10×3 DataFrame
│ Row │ Country │ Date │ Confirmed │
│ │ String │ Date │ Int64 │
├─────┼────────────────────┼────────────┼───────────┤
│ 1 │ United Kingdom │ 2020-10-29 │ 968456 │
│ 2 │ Uruguay │ 2020-10-29 │ 3044 │
│ 3 │ Uzbekistan │ 2020-10-29 │ 66392 │
│ 4 │ Venezuela │ 2020-10-29 │ 91280 │
│ 5 │ Vietnam │ 2020-10-29 │ 1177 │
│ 6 │ West Bank and Gaza │ 2020-10-29 │ 52571 │
│ 7 │ Western Sahara │ 2020-10-29 │ 10 │
│ 8 │ Yemen │ 2020-10-29 │ 2062 │
│ 9 │ Zambia │ 2020-10-29 │ 16325 │
│ 10 │ Zimbabwe │ 2020-10-29 │ 8349 │
到目前为止,我使用 @linq 的代码是:
using DataFramesMeta

df = @linq CSV.read(joinpath(pwd(), "data", "time_series_covid19_confirmed_global.csv")) |>
rename(1 => :Province, 2 => :Country) |>
select(vcat(names(df)[2], names(df)[5:end]))
但是,我被困在分组和汇总数据的点上。
任何建议如何完成此 linq 查询?

最佳答案

DataFramesMeta.jl 现在正在进行重大重构。也许@pdefebach 可以建议使用 master 上的功能来惯用地使用它。
以下是我将如何使用原始 DataFrames.jl 和 Pipe.jl 重写您的代码:

df = CSV.read(joinpath(pwd(), "confirmed.csv"), DataFrame)

@pipe df |>
rename(_, 1 => :Province, 2 => :Country) |> # avoid ! to make sure we do not mutate the source
select!(_, Not([:Province, :Lat, :Long])) |>
groupby(_, :Country) |>
combine(_, valuecols(_) .=> sum .=> valuecols(_)) |>
stack(_, Not(:Country), :Country, variable_name=:Date, value_name=:Confirmed) |>
transform!(_, :Date => ByRow(x -> parse(Date, string(x), DateFormat("m/d/Y")) + Year(2000)) => :Date) |>
last(_, 10)
请注意,在您的代码中:
  • CSV.read(joinpath(pwd(), "confirmed.csv")) (在我的代码中添加 DataFrame 作为第二个参数)
  • df[:Date]应该是 df.Datedf."Date" (第二种样式是名称包含空格的情况)

  • 已弃用。

    关于dataframe - 使用 DataFramesMeta 包中的 @linq 整理 Julia 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64611236/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com