added a whole bunch of functions to Labels.jl for working with raven and avians labels
[?]
AEj8dahVWy718uSSFPe9VSRJ5qX5G8pC2zvFzJJ8yzBd
Nov 9, 2024, 1:30 AM
YODTMMPTZOUTK2OQWHDJB6D3QXZ2FJFYH2XPICCOITCK54EARC2ACDependencies
- [2]
YXAKJSDTadded check_change_avianz_species! function to Labels.jl - [3]
2UBDFCJHnew files tracked - [4]
2O6SHIVYadded avianz_of_raven function to Labels.jl
Change contents
- replacement in src/Labels.jl at line 3
export aggregate_labels, audiodata_dbexport aggregate_labels, audiodata_db, raven_of_avianz, avianz_of_raven, label_summary - replacement in src/Labels.jl at line 5
using CSV, DataFrames, Glob, Random, DBInterface, DuckDB, JSON3using CSV, DataFrames, Glob, Random, DBInterface, DuckDB, JSON3, Dates - edit in src/Labels.jl at line 159
endfunction avianz_file_of_dict(f, payload)isfile(f) && cp(f, "$f.backup")open(f, "w") do ioJSON3.write(io, payload)end - replacement in src/Labels.jl at line 172
# map(x -> avianz_of_raven!(x), a)# map(x -> avianz_of_raven(x), a) - replacement in src/Labels.jl at line 174
function avianz_of_raven!(f::String)function avianz_of_raven(f::String) - replacement in src/Labels.jl at line 189
avianzf = f * ".data"open(avianzf, "w") do ioJSON3.write(io, data)println(io)basef = f = replace(f, "Table.1.selections.txt" => "")isfile((basef * ".WAV")) ? avianzf = basef * "WAV.data" : avianzf = basef * "wav.data"avianz_file_of_dict(avianzf, data)endfunction dict_of_avianz_file(f)json_string = read(f, String)x = JSON3.read(json_string)return xendfunction df_of_avianz_dict(data)df = DataFrame(start_time = Float64[],end_time = Float64[],low_f = Float64[],high_f = Float64[],Species = String[],)for (index1, item1) in enumerate(data[2:end])st, en, lf, hf = item1[1:4]sp = map(x -> x[:species], item1[5])lsp = length(sp)for (index2, item2) in enumerate(sp)push!(df,(start_time = st,end_time = en,low_f = lf,high_f = hf,Species = sp[index2],),)end - replacement in src/Labels.jl at line 225
#isfile(avianzf) && rm(f)return dfendfunction prepare_df_for_raven(data)l = length(data.start_time)df = DataFrame("Selection" => collect(1:l),"View" => ["Spectrogram 1" for x = 1:l],"Channel" => [1 for x = 1:l],"Begin Time (s)" => data.start_time,"End Time (s)" => data.end_time,"Low Freq (Hz)" => data.low_f,"High Freq (Hz)" => data.high_f,"Species" => data.Species,)return dfend# using CSV, DataFrames, JSON3function raven_of_avianz(file::String)data = dict_of_avianz_file(file)if length(data) >= 2 #ignores empty .data filesdf = df_of_avianz_dict(data) |> prepare_df_for_ravenoutfile = replace(file,".WAV.data" => ".Table.1.selections.txt",".wav.data" => ".Table.1.selections.txt",)CSV.write(outfile, df, delim = '\t')end - edit in src/Labels.jl at line 275
endfunction read_avianz_data(f)json_string = read(f, String)x = JSON3.read(json_string)return xendfunction write_new_file!(f, payload)cp(f, "$f.backup")open(f, "w") do ioJSON3.write(io, payload)end - replacement in src/Labels.jl at line 277
x = read_avianz_data(file)x = dict_of_avianz_file(file) - replacement in src/Labels.jl at line 282
write_new_file!(file, payload)avianz_file_of_dict(file, payload) - edit in src/Labels.jl at line 290[2.1922]
function label_summary(folder::String, avianz = true)if avianz == truefiles = glob("$folder/*.['W','w']['A','a']['V','v'].data")df = DataFrame(start_time = Float64[],end_time = Float64[],low_f = Float64[],high_f = Float64[],Species = String[],File = String[],)for file in filesdf1 = dict_of_avianz_file(file) |> x -> df_of_avianz_dict(x)f = split(file, "/")[end] |> x -> replace(x, ".data" => "")df1.File = ["$f" for x = 1:length(df1.start_time)]df = vcat(df, df1)endselect!(df, [:File, :start_time, :end_time, :low_f, :high_f, :Species])CSV.write("$folder/label_summary_avianz-$(Dates.today()).csv", df, delim = '\t')return dfelsefiles = glob("$folder/*.Table.1.selections.txt")df = DataFrame(File = String[],start_time = Float64[],end_time = Float64[],low_f = Float64[],high_f = Float64[],Species = String[],)for file in filesdf1 = DataFrame(CSV.File(file))for d in eachrow(df1)f =split(file, "/")[end] |>x -> replace(x, ".Table.1.selections.txt" => "")push!(df,(File = f,start_time = d."Begin Time (s)",end_time = d."End Time (s)",low_f = d."Low Freq (Hz)",high_f = d."High Freq (Hz)",Species = d."Species",),)endendCSV.write("$folder/label_summary_raven-$(Dates.today()).csv", df, delim = '\t')return dfendend