Validated use: per-package counts

How often each R, Python and Stata package is loaded by the code deposited with published papers, at journals whose data-and-code policy the Social Science Data Editors record as actively verified.

3,223 packages · 8,349 deposits with analyzable code · 8,685 deposits collected · built 2026-08-16

A count here is the number of deposits whose code loads the package. Adding one to it takes a paper published at a journal that checks its authors’ code, which is what makes these counts harder to inflate than download counts. The project page makes that case; this file documents what is in the tables and how to read them.

Scope

The deposits come from two repositories that hold different disciplines. Zenodo’s verified collections are economics, and Harvard Dataverse’s journal collections are mostly political science.

repository

deposits

with analyzable code

Zenodo (economics)

1,454

1,272

Harvard Dataverse (political science)

7,231

7,077

total

8,685

8,349

Counts pool the two. usage_by_package.csv also carries the split, in n_deposits_zenodo and n_deposits_dataverse_legacy, because the two are very different sizes and a pooled figure alone would hide that.

The Dataverse deposits come from a January 2024 scrape that kept .do, .r and .py files and nothing else, so a package used mainly inside a notebook or a knitr document is under-counted on that side. The release checks this by recomputing the whole ranking on those three extensions alone and fails if the order moves. The two collections are also two years apart, which first_year and last_year will show.

Files

file

rows

contents

usage_by_package.csv

3,223

per-package deposit and call counts, pooled and split

usage_by_package_year.csv

9,738

the same by deposit year

usage_by_collection.csv

13,880

the same per journal or community

usage_by_function.csv

10,962

package → function, where the source names one

unknown_names.csv

7,686

names called in code that resolve to no registry

language_presence.csv

15

deposits containing each language, per repository

mentions.parquet

7,060,338

every mention: package, function, file, line, snippet

files.parquet

217,573

the provenance spine every mention joins to

declared_dependencies.parquet

5,104

what manifests declare: shipped, locked or asked for

environment_signals.parquet

6,029

R, Python and Stata versions, and the OS, where a file says

environment_coverage.json

deposits stating each signal, over deposits that could

summary.json

corpus counts the tables are shares of

mentions.parquet is the record every count above is a sum of, and it is here so a reader who disagrees with a decision made upstream can recount without re-parsing 200,000 files. It is 94 MB; the CSVs are 150 KB.

declared_dependencies.parquet and environment_signals.parquet are sparse and answer a different question: not what the code loads but what version of it the deposit shipped, and what ran it. Most deposits say nothing at all, so read these next to environment_coverage.json, which gives per signal the deposits that said something over the deposits that were in a position to.

usage_by_package.csv

  • package, language, ecosystem: the resolved package and its registry

  • n_deposits: deposits loading it, counted once per deposit

  • n_files, n_mentions: files, and raw calls

  • n_deposits_at_risk: the denominator for share_of_deposits, meaning deposits that hold an analyzable file in that language, or that yielded a reference in it. The second clause is what covers literate documents, where the file is a notebook and the code inside it is Python. It differs by language, so a Stata share and an R share are not shares of the same thing

  • share_of_deposits: n_deposits divided by n_deposits_at_risk

unknown_names.csv

Names that appear in the code and resolve to no registry, unfiltered. Some are false positives: str is a Stata type, and some are programs a deposit defines for itself. The list also holds real and heavily used software that no registry indexes, grc1leg being the clearest case at 1,224 calls. Pruning the list by hand would put a judgement call inside a file whose value is that you can check every row of it.

Licence

CC0.

Regenerating

uv run python scripts_build_tally.py     # needs the collected corpus
uv run python scripts_release_tally.py

Produced by softverse.