Skip to content

Harvests, DOI backfill, FAIR rubric, and platforms evaluation - #29

Merged
larnsce merged 12 commits into
mainfrom
dev
Jul 23, 2026
Merged

Harvests, DOI backfill, FAIR rubric, and platforms evaluation#29
larnsce merged 12 commits into
mainfrom
dev

Conversation

@larnsce

@larnsce larnsce commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Test plan

  • devtools::document() runs clean with no data/datapapers.rda present
  • score_fair() runs on washdev, uncnewsletter, and ploswater and returns fair_total in 0-8
  • Regenerated data carries the backfilled DOIs (washdev 1138 of 1173, uncnewsletter 167 of 173)
  • devtools::check() reports no errors

claude and others added 12 commits July 17, 2026 13:42
Scaffolds the WASH & FSM bibliometric corpus agreed in #18: a keyword
list grouped into blocks, a two-table schema (works + authorships) that
captures author position and institution country for the planned
authorship-equity follow-up, and an OpenAlex harvest skeleton whose
intermediate outputs answer the journal-selection question in #18.

Refs #18

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MWoEfPvd291T6sbRAxGqP9
Implements the plan from data-raw/plan-issue-28-datapapers.md:

- data-raw/01_datapapers_acquire.R: harvest candidate WASH data papers
  from Crossref (by journal ISSN) and Europe PMC (F1000-platform
  journals) for Scientific Data, Data in Brief, Gates Open Research,
  F1000Research, GigaScience, GigaByte, and Data (MDPI), recording
  retrieval_date and query_term per row, deduplicated on DOI, written
  as a committed snapshot data-raw/datapapers_raw.csv.
- data-raw/02_datapapers_screen.R: auto-relevance flag plus an
  append-only screening decision sheet keyed on DOI; human decisions
  are never overwritten, replacing interactive inspection and
  hard-coded ID vectors.
- data-raw/03_datapapers_process.R: harmonise included papers to the
  washdev/uncnewsletter schema plus data-paper-specific columns (doi,
  data_repo_url, data_repo, license, related_paper_doi), clean
  countries via a committed fixes sheet, export rda/csv/xlsx.
- data-raw/helpers.R: shared collapse_list_col(), country cleaning,
  journal and search-term lists; data_processing.R now sources it.
- data-raw/README.md: run order and provenance for all three sources.
- Package integration: R/datapapers.R roxygen docs, dictionary.csv
  rows, README.Rmd sections, NEWS.md entry, DESCRIPTION dev version
  bump and Suggests: rcrossref, europepmc.

The harvest itself (step 01) requires network access to
api.crossref.org / Europe PMC and must be run by a maintainer; the
snapshot, screening sheet, data object, exports, Rd files, and README
re-knit follow from the documented run order.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BpiR3vepy87ibd5KHytLoh
…lysis-xc5fpn

Add washbiblio corpus staging (keywords, schema, harvest skeleton)
Resolves conflicts against the 0.2.0 release: version set to 0.2.0.9000,
datapapers NEWS entry moved to a development-version section, README and
dictionary keep both ploswater and datapapers, data_processing.R keeps the
encoding helper and sources the shared helpers.R.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Completes harvest_corpus.R steps 1-5 and commits the three outputs:
researcher_ranking.csv (top 200 authors, 178 retained after the low-share
false-positive screen), venue_ranking.csv (302 venues ranked by keyword
match and by retained-researcher output), and journal_wash_share.csv
(50 journals with real 1996-2026 WASH shares and the issue #18 decision
per journal; 4 whole_journal, 46 filtered_slice_conditional).

Matching uses title_and_abstract.search rather than fulltext search, the
two big group_bys go through a direct GET to stay within the OpenAlex
usage-priced request budget, every network step is cached under cache/,
and an approximate-share screen adds small dedicated journals that the
volume-dominated rank cutoff would miss.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3760 unique candidates from Crossref (Scientific Data, Data in Brief,
GigaScience, GigaByte, Data) and Europe PMC (F1000Research, Gates Open
Research), harvested 2026-07-23. The screening sheet prefills
auto_relevant (200 TRUE) from title/abstract keyword match; include and
reason await manual decisions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Scoping sheet and rubric for thirteen platforms (data-raw/platforms/),
seeded with mWater and Project W as the paper's focus and screening the
long-list (WPdx, JMP, GLAAS, SDG 6, DHS, MICS, World Bank Microdata,
IBNET, HDX, Akvo, KoboToolbox) into in/borderline/out of scope. Every
fact carries a source_url and accessed_date (2026-07-23), with 'not
found' recorded literally where a public page did not state a fact.

scan_platform_mentions.R searches the das text and repository links of
washdev, uncnewsletter, and ploswater (and datapapers once built) for
each platform. Finding: across 1,782 papers, neither mWater nor Project W
is mentioned once; only general platforms appear (DHS 12, HDX 3, MICS 2,
IBNET 1). The three intro paragraphs for this are added to the vignette.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Re-researched the launch year, access model, and licensing that the
public catalogue pages did not state. Verified via the Wayback Machine
and Aquaya's own milestones and terms pages: Project W is a 2022 pilot
still in beta, access is waitlist/invite-based behind a sign-in, and the
terms of use grant only personal non-commercial use with no open license
on the indexed datasets. Updated platforms.csv, rubric.csv, and the
vignette paragraph. An exact launch date and whether an API or DOIs exist
behind the login remain not found without an account.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
343 washdev supp_url values were pre-signed Silverchair CDN links that
expired in January 2024, and 3 uncnewsletter paper_url values were Google
Scholar alert redirects. Both are now canonical: the Silverchair links
become https://doi.org/<doi> URLs (the DOI is recovered from the link
path), and the Scholar redirects are decoded to their target URLs. The
high-entropy Signature and scisig tokens that tripped secret scanners are
gone. No re-collection was needed.

Two reproducible helpers in data-raw/helpers.R do the rewrites:
canonicalize_silverchair_url() and decode_scholar_redirect(). Only
washdev$supp_url and uncnewsletter$paper_url changed; row counts and all
other columns are identical, and ploswater is untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The R scraper only collects doi for newly scraped washdev rows; 932
legacy rows and all uncnewsletter rows had none. backfill_dois.R fills
them from Crossref: washdev by volume + issue + normalised title against
the journal's two ISSNs (897 matched, 35 for review), uncnewsletter by
per-row bibliographic title search accepted only above a 0.6
trigram-similarity threshold (167 of 173 matched, 6 near-misses for
review). Crossref intermittently answers 429 even at polite spacing, so
the lookup retries with backoff; without it 39 rows landed in the review
file as false no-hits.

The matches live in committed backfill CSVs that data_processing.R joins
back in, so the fill is reproducible and every unmatched row stays
visible in the review CSVs rather than hidden in a hand-edit. washdev
now carries a DOI on 1138 of 1173 rows, uncnewsletter on 167 of 173.
The doi column is documented in the dictionary and roxygen docs for both
datasets. ploswater artifacts changed only by re-serialisation during
the dataset rebuild.

Refs #20

Assisted-by: Claude claude-fable-5
score_fair() scores each paper 0-2 on Findable, Accessible,
Interoperable, and Reusable from the DAS and supplement fields the
datasets already carry, with fair_total their sum (0-8). The rubric is
spelled out in the function's roxygen so the scoring stays reproducible
and open to criticism; Reusable falls back to the repository signal as a
lower bound until a license column exists. data-raw/fair_scores.R
applies it across the three datasets and writes fair-scores-summary.csv
with per-year means. Headline means of 8: washdev 1.72, uncnewsletter
2.13, ploswater 4.07, consistent with PLOS Water's mandatory-DAS policy.

First exported function of the package: dplyr joins Imports and
NAMESPACE gains export(score_fair).

Refs #19

Assisted-by: Claude claude-fable-5
make_datapapers_worklist.R builds a one-off review file of the 200
auto-relevant candidates with matched_terms columns showing which WASH
search terms hit and where (title vs abstract), so genuine WASH data
papers separate from incidental matches like "wastewater of a gold
mine" during manual screening. Title-only matches without an abstract,
the weakest signal, sort to the top. The script never writes
datapapers_screening.csv; the screening sheet stays the decision record.

R/datapapers.R now documents the dataset via @name/NULL instead of the
string sentinel, so devtools::document() runs before
data/datapapers.rda exists. The dataset itself lands once the screening
sheet is filled and 03_datapapers_process.R runs.

Refs #28

Assisted-by: Claude claude-fable-5
@larnsce
larnsce merged commit 1fb90df into main Jul 23, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants