SPB Git

spb/wp44_uqo

Public
3.3 KB · 37 lines python
1#!/usr/bin/env python32"""WP44 — RQ1 volume series from corpus_works (eligible, CS core) with indexing-lag diagnostics.3Outputs (results/bibliometrics/): volume_monthly.csv (first_month × type × membership), volume_yearly.csv,4indexing_lag.csv (publication month → distribution of created_date − publication_date), penumbra_monthly.csv,5dblp_only_yearly.csv. All tables are regenerated from the DuckDB database; nothing is hand-edited."""6import argparse, os, duckdb789def main():10    ap = argparse.ArgumentParser(); ap.add_argument("--root", required=True); a = ap.parse_args(); R = a.root11    out = os.path.join(R, "results/bibliometrics"); os.makedirs(out, exist_ok=True)12    con = duckdb.connect(os.path.join(R, "data/processed/wp44.duckdb"), read_only=True); con.execute("SET threads TO 16;")13    con.execute(f"""COPY (SELECT first_month, period, date_precision, type, in_dblp, cs_primary, (arxiv_id_linked IS NOT NULL) AS has_arxiv, count(*) AS n,14                        sum(has_abstract::int) AS n_abstract, sum((n_refs>0)::int) AS n_with_refs, sum(is_oa::int) AS n_oa15                 FROM corpus_works WHERE eligible GROUP BY ALL ORDER BY 1,2,3) TO '{out}/volume_monthly.csv' (HEADER)""")16    con.execute(f"""COPY (SELECT publication_year AS year, count(*) AS n, sum(in_dblp::int) AS n_dblp, sum(cs_primary::int) AS n_cs_primary,17                        sum((arxiv_id_linked IS NOT NULL)::int) AS n_arxiv, sum(in_acl::int) AS n_acl, sum(has_abstract::int) AS n_abstract,18                        sum(is_oa::int) AS n_oa, sum((type='preprint')::int) AS n_preprint, sum((type='conference-paper')::int) AS n_conf,19                        sum((type='article')::int) AS n_article, sum(e6_retracted::int) AS n_retracted, sum(xpac_kept_dblp::int) AS n_xpac_dblp,20                        round(avg(n_authors),2) AS mean_authors, round(avg(n_refs),2) AS mean_refs, round(avg(n_countries),3) AS mean_countries21                 FROM corpus_works WHERE eligible GROUP BY 1 ORDER BY 1) TO '{out}/volume_yearly.csv' (HEADER)""")22    con.execute(f"""COPY (SELECT substr(publication_date,1,7) AS pub_month, count(*) AS n,23                        quantile_cont(datediff('day', publication_date::DATE, created_date::DATE), 0.5) AS lag_days_p50,24                        quantile_cont(datediff('day', publication_date::DATE, created_date::DATE), 0.9) AS lag_days_p90,25                        sum((datediff('day', publication_date::DATE, created_date::DATE) <= 90)::int) AS n_indexed_within_90d,26                        sum((created_date::DATE > publication_date::DATE + INTERVAL 180 DAY)::int) AS n_indexed_after_180d27                 FROM corpus_works WHERE eligible AND created_date IS NOT NULL AND publication_date IS NOT NULL GROUP BY 1 ORDER BY 1) TO '{out}/indexing_lag.csv' (HEADER)""")28    con.execute(f"""COPY (SELECT first_month, count(*) AS n_penumbra FROM corpus_works WHERE cs_penumbra AND NOT e1_outside_window AND NOT e2_type AND NOT e3_xpac AND NOT e4_no_title AND NOT e5_duplicate29                 GROUP BY 1 ORDER BY 1) TO '{out}/penumbra_monthly.csv' (HEADER)""")30    con.execute(f"COPY (SELECT * FROM dblp_only_counts) TO '{out}/dblp_only_yearly.csv' (HEADER)")31    for f in ["volume_yearly.csv", "indexing_lag.csv"]:32        print(f, open(os.path.join(out, f)).read()[:1500])333435if __name__ == "__main__":36    main()37
Files · 0cf4d9783f4f93dcc7f36ef98968e60574da3fd5
Menu

Theme