Introduction
Every dataset in this package is somewhere on a spectrum from “raw,
exactly as scraped or hand-entered from an external source” to “the
output of a statistical model.” That distinction matters: raw and
hand-curated data can only be wrong (a typo, a stale lookup),
while derived and modelled data can also be inconsistent with
itself if two different steps compute the same thing two different
ways - which is exactly what happened to songid (see
?songidlookup and the Provenance section of
its help page). This vignette catalogues every dataset produced in
this package against that spectrum.
Primary/raw data - the “raw, exactly as scraped or hand-entered” end
of the spectrum - lives in this package’s own inst/extdata/
(fls_data.csv, fls_tags.txt,
releases.csv,
releases_songs_durations_wikipedia.csv,
song_tempo_bpm_data.csv,
fls_venue_geocoding_v2.csv). Repeatr_1() turns
those six raw sources into everything below.
The companion package fugazibase
is downstream of this package, not upstream of it: composes a subset of
Repeatr’s own Derived-cleaned tier (corrected, reformatted, and keyed
for joining, but with no joined/summarized/modeled columns and no
copyrighted free-text show notes) and writes it into a local
fugazibase checkout. See
vignette("Data-Catalogue", package = "fugazibase") for that
package’s own catalogue and join keys.
Before adding a new dataset or reclassifying an existing one,
check inst/shiny/Fugazetteer/app.R and
vignettes/*.Rmd for consumers, not just
R/ - the Shiny app and several vignettes read
package data directly without that being visible from a search of
R/ alone, and some of them locally rebuild an object under
the same name as a package dataset without ever touching the lazy-loaded
original (see the Frozen-legacy table below for concrete
examples of both traps).
Types of data
-
Raw-scraped / Raw-hand-curated -
primary data, as scraped () or hand-curated directly into this package’s
own
inst/extdata/. -
Derived-cleaned - mechanically produced from
inst/extdata/’s raw sources byRepeatr_1(), with no judgment calls beyond straightforward joins/typing/renaming. -
Derived-classified - mechanically produced by
Repeatr_1(), but shaped by the hand-writtengrepl()-based song-title recoding andtracktypeclassification rules - i.e. the layer where a rule change can shift which songs exist and how they’re numbered. -
Derived-modeled - depends on the
mlogitchoice model fit inRepeatr_4(), or on themin_song_countmodelling-eligibility filter applied fromRepeatr_2()onward. -
Frozen-legacy - present in
data/but not written by any current pipeline stage (nosave()call anywhere inR/, not touched bydata-raw/build_data.R). Confirmed to have no consumers inR/,vignettes/, orapp.Reither, as of this vignette’s last update.
Data processing sequence
inst/extdata/ (primary data - fls_data.csv, fls_tags.txt, releases.csv,
releases_songs_durations_wikipedia.csv,
song_tempo_bpm_data.csv, fls_venue_geocoding_v2.csv)
│
▼
Repeatr_1()
├─ Repeatr0, othervariables, gid_sound_quality, played_with*, shows_data,
│ fls_tags*, duration_data_da, duration_summary, cumulative_*, xray,
│ releasesdatalookup, releases_menu_list, releaseid_variable_colour_code,
│ transitions_data_da, last_performance_data, songvarslookup,
│ song_tempo_bpm_data [Derived-cleaned]
└─ Repeatr1, songidlookup [Derived-classified]
│
▼
Repeatr_2() ─▶ Repeatr_3() ─▶ Repeatr_4() ─▶ Repeatr_5()
├─ Repeatr2, Repeatr3, altlookup,
│ fugazi_song_performance_intensity [Derived-modeled: min_song_count filter + alt]
├─ fugazi_song_counts [Derived-modeled: covers every classified song]
├─ results_ml_Repeatr4, vcovmat_ml_Repeatr4 [Derived-modeled: mlogit fit]
└─ fugazi_song_choice_model, fugazi_song_preferences,
releases_rated, releases_summary, releases_data_input, summary
[Derived-modeled: model output]
│
▼ (update_stacks = TRUE)
Repeatr_6()
└─ gid_initial_gid_sound_quality [Derived-modeled: depends on summary]
│ (from the Derived-cleaned tier only, minus fls_notes)
▼
export_fugazibase_data()
└─ fugazibase: shows, locations, durations, discography,
songs, bands
songvarslookup is joined into Repeatr1 by
title text, not carried forward with its own
songid column - the hand-maintained CSV behind it
(inst/extdata/releases_songs_durations_wikipedia.csv)
doesn’t carry one, precisely so it can’t silently drift out of sync with
the songid Repeatr_1() computes; see
?songidlookup for that mapping.
Dataset catalogue
data/*.rda objects
| Dataset | Tier | Produced by |
|---|---|---|
Repeatr0 |
Derived-cleaned |
Repeatr_1(), from
inst/extdata/fls_data.csv
|
othervariables |
Derived-cleaned |
Repeatr_1(), joining
inst/extdata/fls_data.csv with
inst/extdata/fls_venue_geocoding_v2.csv; also read directly
by app.R
|
gid_sound_quality |
Derived-cleaned | Repeatr_1() |
gid_initial_gid_sound_quality |
Derived-modeled |
Repeatr_6(), via
sweepstack()/stacks(), whenever
Repeatr_Updatr() is run with
update_stacks = TRUE; read directly by app.R’s
“stock” pages |
played_with, played_with_summary
|
Derived-cleaned | Repeatr_1() |
shows_data |
Derived-cleaned |
Repeatr_1(); also read directly by
app.R
|
fls_tags, fls_tags_show
|
Derived-cleaned |
Repeatr_1(), from
inst/extdata/fls_tags.txt (via ) |
duration_data_da, duration_summary,
cumulative_duration_counts,
cumulative_song_counts
|
Derived-cleaned | Repeatr_1() |
last_performance_data, xray,
transitions_data_da
|
Derived-cleaned | Repeatr_1() |
releasesdatalookup, releases_menu_list,
releaseid_variable_colour_code
|
Derived-cleaned |
Repeatr_1(), from
inst/extdata/releases.csv
|
songvarslookup |
Derived-cleaned/Raw-hand-curated |
Repeatr_1() reads it as-is from
inst/extdata/releases_songs_durations_wikipedia.csv
|
song_tempo_bpm_data |
Raw-hand-curated |
Repeatr_1() reads it as-is from
inst/extdata/song_tempo_bpm_data.csv
|
Repeatr1 |
Derived-classified | Repeatr_1() |
songidlookup |
Derived-classified |
Repeatr_1(); the single source of truth for song
identity |
Repeatr2, Repeatr3
|
Derived-modeled |
Repeatr_2() / Repeatr_3() - applies the
min_song_count filter and builds alt
|
altlookup |
Derived-modeled |
Repeatr_2(); the alt <->
songid/title translation table used by
Repeatr_5()/rankr()
|
fugazi_song_counts |
Derived-modeled |
Repeatr_2(); covers every classified song, not just the
min_song_count-eligible ones |
fugazi_song_performance_intensity |
Derived-modeled |
Repeatr_2(); min_song_count-eligible songs
only |
results_ml_Repeatr4,
vcovmat_ml_Repeatr4
|
Derived-modeled |
Repeatr_4(), saved together so they always describe the
same fit |
fugazi_song_choice_model,
fugazi_song_preferences, releases_rated,
releases_summary, releases_data_input,
summary
|
Derived-modeled |
Repeatr_5(); summary is also read directly
by app.R
|
For the full column-by-column description of any dataset, see its
help page (e.g. ?summary). For fugazibase’s own tables
(shows, locations, durations,
discography, songs, bands), see
vignette("Data-Catalogue", package = "fugazibase").
Note on app.R: it reads song_tempo_bpm_data
and shows_data/othervariables directly (via
library(Repeatr)’s lazy-loaded data), but for venue
coordinates specifically it does not use the package’s own
x/y - at startup it re-fetches coordinates
live from a Google Sheet (gsheet2tbl()) and overwrites
whatever othervariables/shows_data provided.
So the deployed app’s map coordinates track that live sheet, not any
package release.