## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(R2camtrapdp) ## ----------------------------------------------------------------------------- # multiple deployments with image data data("Idep") # deployment table data("Iobs") # observation table ## ----eval = FALSE------------------------------------------------------------- # version <- "1.0.1" # # dep_schema <- TableSchema$new("deployments", version = version) # dep_schema$field_names() # every column the schema defines # dep_schema$required_field_names() # columns that must be present and non-missing # dep_schema$empty_table() # a 0-row, correctly typed "shell" table ## ----eval = FALSE------------------------------------------------------------- # dep_schema$check_schema() ## ----eval = FALSE------------------------------------------------------------- # dep_schema$external_references() # every URL the schema declares (skos, descriptions, schema URL) # dep_schema$semantic_only_fields() # fields whose meaning is URL-defined and cannot be value-checked ## ----------------------------------------------------------------------------- deployments <- create_deployments( deploymentID = Idep$deploymentID, longitude = Idep$longitude, latitude = Idep$latitude, locationID = Idep$locationID, deploymentStart_date = Idep$startDate, deploymentStart_time = Idep$startTime, deploymentEnd_date = Idep$endDate, deploymentEnd_time = Idep$endTime, cameraID = Idep$cameraID, cameraModel = Idep$cameraModel, cameraDelay = Idep$Delay, cameraHeight = Idep$Height, baitUse = Idep$bait, setupBy = Idep$setupBy) ## ----------------------------------------------------------------------------- # media ID mediaIDi <- paste(Iobs$institutionCode, Iobs$collectionCode, Iobs$locationID, as.numeric(factor(Iobs$filename)), sep = "_") # file information fileName <- Iobs$filename filetype <- tolower(unlist(lapply(strsplit(fileName, "\\."), "[", 2))) fileMediatype <- paste("image", filetype, sep = "/") filePublic <- !grepl("ヒト", fileName) # hide human images from the public media <- create_media( mediaID = mediaIDi, deploymentID = Iobs$deploymentID, timestamp_date = Iobs$date, timestamp_time = Iobs$time, filePath = "Image", filePublic = filePublic, fileMediatype = fileMediatype, captureMethod = "activityDetection", fileName = fileName) ## ----------------------------------------------------------------------------- # event-based observations observationLevel <- "event" # observationType must be one of the schema enum values observationType <- ifelse(Iobs$object == "hito", "human", ifelse(Iobs$object == "none", "blank", ifelse(Iobs$object == "unidentifiable", "unknown", "animal"))) # scientific name scientificName <- ifelse(is.na(Iobs$genus), Iobs$class, paste(Iobs$genus, Iobs$species)) # unique observation IDs observationID <- paste(mediaIDi, Iobs$obsID, sep = "_") observations <- create_observations( observationID = observationID, deploymentID = Iobs$deploymentID, eventID = Iobs$eventID, eventStart = Iobs$eventStart, eventEnd = Iobs$eventEnd, observationLevel = observationLevel, observationType = observationType, scientificName = scientificName, count = Iobs$individualCount, classificationMethod = "human", classificationProbability = 1) ## ----------------------------------------------------------------------------- datapackage <- R6_CamtrapDP$new(version = "1.0.1") ## ----eval = FALSE------------------------------------------------------------- # datapackage$set_deployments(deployments) # datapackage$set_media(media) # datapackage$set_observations(observations) ## ----eval = FALSE------------------------------------------------------------- # datapackage$check_relations() ## ----eval = FALSE------------------------------------------------------------- # datapackage$metadata_requirements() # checklist: property, required, set_with, currently_set # datapackage$check_metadata() # report missing required metadata ## ----------------------------------------------------------------------------- cd <- data.frame( title = c("Keita Fukasawa", "Kana Terayama"), email = c("fukasawa@nies.go.jp", "terayama.kana@nies.go.jp"), path = c("https://orcid.org/0000-0003-0272-9180", "https://orcid.org/0000-0001-6935-7233"), role = c("contact", "principalInvestigator"), organization = c("National Institute for Environmental Studies (NIES)", "National Institute for Environmental Studies (NIES)")) datapackage$add_contributors(cd) ## ----------------------------------------------------------------------------- datapackage$set_project( title = "DummyData", samplingDesign = "simpleRandom", captureMethod = "activityDetection", individualAnimals = FALSE, observationLevel = "event") ## ----eval = FALSE------------------------------------------------------------- # datapackage$set_st() ## ----eval = FALSE------------------------------------------------------------- # datapackage$set_taxon() ## ----------------------------------------------------------------------------- datapackage$update_created(tz = "Asia/Tokyo") ## ----------------------------------------------------------------------------- datapackage$add_license(name = "CC-BY-4.0", path = "http://creativecommons.org/licenses/by/4.0/", scope = "data") datapackage$add_license(name = "CC-BY-4.0", path = "http://creativecommons.org/licenses/by/4.0/", scope = "media") ## ----------------------------------------------------------------------------- datapackage$add_relatedIdentifiers( relationType = "IsSupplementTo", relatedIdentifier = "https://doi.org/xxxx", relatedIdentifierType = "DOI", resourceTypeGeneral = "JournalArticle") ## ----------------------------------------------------------------------------- datapackage$set_properties( name = "dummy-nies", homepage = "https://www.nies.go.jp/biology/snapshot_japan/index.html") datapackage$add_sources(title = "DummyData") datapackage$add_references(reference = "DummyNIES https://doi.org/xxxxx") ## ----------------------------------------------------------------------------- RD <- data.frame(id = seq_len(388), Time = sample(1:29, 388, replace = TRUE)) ## ----eval = FALSE------------------------------------------------------------- # datapackage$set_custom(name = "rest", # description = "data for the REST method", # data = RD) ## ----eval = FALSE------------------------------------------------------------- # # return the camtrapdp object # data_camtrapdp <- datapackage$out_camtrapdp() # # # or also write deployments.csv / media.csv / observations.csv + datapackage.json # datapackage$out_camtrapdp(write = TRUE, directory = path) ## ----eval = FALSE------------------------------------------------------------- # datapackage$check_descriptor() # package + table-schema structure (Frictionless spec) # datapackage$check_camtrap_profile() # warn if the profile is not a Camtrap DP profile ## ----eval = FALSE------------------------------------------------------------- # issues <- datapackage$validate_frictionless(directory = path, python = "python") # ctdp_is_valid(issues) # TRUE if there are no errors ## ----eval = FALSE------------------------------------------------------------- # ctdp_validate_frictionless("path/to/existing/package", python = "python") ## ----eval = FALSE------------------------------------------------------------- # datapackage$validate(relations = TRUE, metadata = TRUE, conformance = TRUE, # frictionless = TRUE, directory = path, python = "python") ## ----eval = FALSE------------------------------------------------------------- # version <- "1.0.1" # dep_schema <- TableSchema$new("deployments", version = version) # # # an example raw sheet with arbitrary column names + a custom column # raw <- data.frame( # station = c("A01", "A02"), # lat = c(35.1, 36.2), # lon = c(139.5, 140.1), # start_day = c("2023-04-01", "2023-04-02"), # start_clk = c("09:00:00", "10:30:00"), # end_day = c("2023-05-01", "2023-05-02"), # end_clk = c("09:00:00", "10:30:00"), # myNote = c("kept as a custom column", "kept too"), # stringsAsFactors = FALSE) # # # mapping: names are SOURCE columns, values are Camtrap DP FIELD names # mapping <- c(station = "deploymentID", lat = "latitude", lon = "longitude") # # built <- ctdp_build_table( # dep_schema, raw, mapping = mapping, # datetime_merges = list( # list(date_col = "start_day", time_col = "start_clk", target = "deploymentStart"), # list(date_col = "end_day", time_col = "end_clk", target = "deploymentEnd"))) # # ctdp_summarize_validation(built$issues) # any schema problems # datapackage$set_deployments(built$data) # feed the result into the package ## ----eval = FALSE------------------------------------------------------------- # ba <- "https://raw.githubusercontent.com/camera-traps/bioacoustics/main/camtrap-dp/1.0.2/%s" # # dp <- R6_CamtrapDP$new(version = "1.0.2") # dp$set_properties( # version = "1.0.2", # profile = sprintf(ba, "camtrap-dp-profile-acoustic.json"), # schema_urls = list( # deployments = sprintf(ba, "deployments-table-schema-acoustic.json"), # media = sprintf(ba, "media-table-schema-acoustic.json"), # observations = sprintf(ba, "observations-table-schema-acoustic.json"))) # # # audio timestamps carry fractional seconds to match the acoustic schema format # dp$set_media(data.frame( # mediaID = "m1", deploymentID = "D1", # timestamp = "2023-04-01T09:05:00.000+0900", # filePath = "audio/m1.wav", filePublic = TRUE, fileMediatype = "audio/wav", # samplingFrequency = 48000L, channels = 1L, # stringsAsFactors = FALSE)) ## ----eval = FALSE------------------------------------------------------------- # library(dplyr) # # # camera-trap deployments -> acoustic deployments (only the renamed columns) # mapping <- c( # cameraID = "deviceID", # cameraModel = "deviceModel", # cameraDelay = "deviceDelay", # cameraHeight = "deviceHeight", # cameraDepth = "deviceDepth", # cameraTilt = "deviceTilt", # cameraHeading = "deviceHeading") # # dep_acoustic <- camtrap_deployments %>% # select(-any_of(c("featureType", "timestampIssues"))) # camera-only: no acoustic field # # dp$set_deployments(dep_acoustic, mapping = mapping) ## ----eval = FALSE------------------------------------------------------------- # acoustic_dep <- TableSchema$new( # "deployments", version = "1.0.2", # url_template = sprintf(ba, "deployments-table-schema-acoustic.json")) # acoustic_dep$field_names() # acoustic_dep$required_field_names() # acoustic_dep$requirements() # field / type / format / required / enum / min / max / pattern # acoustic_dep$external_references()