## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(R2camtrapdp) ## ----------------------------------------------------------------------------- # 複数デプロイメント・画像データ data("Idep") # デプロイメント表 data("Iobs") # 観察表 ## ----eval = FALSE------------------------------------------------------------- # version <- "1.0.1" # # dep_schema <- TableSchema$new("deployments", version = version) # dep_schema$field_names() # スキーマが定義する全列 # dep_schema$required_field_names() # 必須(存在かつ非欠損)の列 # dep_schema$empty_table() # 型付き 0 行の「殻」テーブル ## ----eval = FALSE------------------------------------------------------------- # dep_schema$check_schema() ## ----eval = FALSE------------------------------------------------------------- # dep_schema$external_references() # スキーマが宣言する全 URL(skos・description・schema URL) # dep_schema$semantic_only_fields() # 意味が URL でのみ定義され、値域を機械検証できない列 ## ----------------------------------------------------------------------------- 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) ## ----------------------------------------------------------------------------- # メディア ID mediaIDi <- paste(Iobs$institutionCode, Iobs$collectionCode, Iobs$locationID, as.numeric(factor(Iobs$filename)), sep = "_") # ファイル情報 fileName <- Iobs$filename filetype <- tolower(unlist(lapply(strsplit(fileName, "\\."), "[", 2))) fileMediatype <- paste("image", filetype, sep = "/") filePublic <- !grepl("ヒト", fileName) # ヒト画像は非公開にする 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) ## ----------------------------------------------------------------------------- # イベント単位の観察 observationLevel <- "event" # observationType はスキーマの enum 値のいずれか observationType <- ifelse(Iobs$object == "hito", "human", ifelse(Iobs$object == "none", "blank", ifelse(Iobs$object == "unidentifiable", "unknown", "animal"))) # 学名 scientificName <- ifelse(is.na(Iobs$genus), Iobs$class, paste(Iobs$genus, Iobs$species)) # 一意の観察 ID 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() # チェックリスト: property, required, set_with, currently_set # datapackage$check_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------------------------------------------------------------- # # camtrapdp オブジェクトを返す # data_camtrapdp <- datapackage$out_camtrapdp() # # # あるいは deployments.csv / media.csv / observations.csv + datapackage.json を書き出す # datapackage$out_camtrapdp(write = TRUE, directory = path) ## ----eval = FALSE------------------------------------------------------------- # datapackage$check_descriptor() # 記述子+各 table schema の構造(Frictionless 仕様) # datapackage$check_camtrap_profile() # profile が CamtrapDP でなければ警告 ## ----eval = FALSE------------------------------------------------------------- # issues <- datapackage$validate_frictionless(directory = path, python = "python") # ctdp_is_valid(issues) # error が無ければ TRUE ## ----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) # # # 任意の列名+独自列を持つ生データの例 # 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("独自列として保持", "これも保持"), # stringsAsFactors = FALSE) # # # マッピング:生データで使用されている列名とCamtrapDPのフィールド名との関係(マッピング)を作成 # 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) # スキーマ上の問題 # datapackage$set_deployments(built$data) # 結果をパッケージへ投入 ## ----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"))) # # # 音響のタイムスタンプは、音響スキーマの書式に合わせて小数秒を付与する # 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) # # # カメラトラップ deployments -> 音響 deployments(改名が必要な列だけ) # 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"))) # カメラ専用: 音響に対応列なし # # 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()