@wentorai/research-plugins 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -22
- package/curated/analysis/README.md +82 -56
- package/curated/domains/README.md +225 -69
- package/curated/literature/README.md +115 -46
- package/curated/research/README.md +106 -58
- package/curated/tools/README.md +107 -87
- package/curated/writing/README.md +92 -45
- package/mcp-configs/academic-db/alphafold-mcp.json +20 -0
- package/mcp-configs/academic-db/brightspace-mcp.json +21 -0
- package/mcp-configs/academic-db/climatiq-mcp.json +20 -0
- package/mcp-configs/academic-db/gibs-mcp.json +20 -0
- package/mcp-configs/academic-db/gis-mcp-server.json +22 -0
- package/mcp-configs/academic-db/google-earth-engine-mcp.json +21 -0
- package/mcp-configs/academic-db/m4-clinical-mcp.json +21 -0
- package/mcp-configs/academic-db/medical-mcp.json +21 -0
- package/mcp-configs/academic-db/nexonco-mcp.json +20 -0
- package/mcp-configs/academic-db/omop-mcp.json +20 -0
- package/mcp-configs/academic-db/onekgpd-mcp.json +20 -0
- package/mcp-configs/academic-db/openedu-mcp.json +20 -0
- package/mcp-configs/academic-db/opengenes-mcp.json +20 -0
- package/mcp-configs/academic-db/openstax-mcp.json +21 -0
- package/mcp-configs/academic-db/openstreetmap-mcp.json +21 -0
- package/mcp-configs/academic-db/opentargets-mcp.json +21 -0
- package/mcp-configs/academic-db/pdb-mcp.json +21 -0
- package/mcp-configs/academic-db/smithsonian-mcp.json +20 -0
- package/mcp-configs/ai-platform/magi-researchers.json +21 -0
- package/mcp-configs/ai-platform/mcp-academic-researcher.json +22 -0
- package/mcp-configs/ai-platform/open-paper-machine.json +21 -0
- package/mcp-configs/ai-platform/paper-intelligence.json +21 -0
- package/mcp-configs/ai-platform/paper-reader.json +21 -0
- package/mcp-configs/ai-platform/paperdebugger.json +21 -0
- package/mcp-configs/browser/exa-mcp.json +20 -0
- package/mcp-configs/browser/mcp-searxng.json +21 -0
- package/mcp-configs/browser/mcp-webresearch.json +20 -0
- package/mcp-configs/cloud-docs/confluence-mcp.json +37 -0
- package/mcp-configs/cloud-docs/google-drive-mcp.json +35 -0
- package/mcp-configs/cloud-docs/notion-mcp.json +29 -0
- package/mcp-configs/communication/discord-mcp.json +29 -0
- package/mcp-configs/communication/discourse-mcp.json +21 -0
- package/mcp-configs/communication/slack-mcp.json +29 -0
- package/mcp-configs/communication/telegram-mcp.json +28 -0
- package/mcp-configs/data-platform/automl-stat-mcp.json +21 -0
- package/mcp-configs/data-platform/jefferson-stats-mcp.json +22 -0
- package/mcp-configs/data-platform/mcp-excel-server.json +21 -0
- package/mcp-configs/data-platform/mcp-stata.json +21 -0
- package/mcp-configs/data-platform/mcpstack-jupyter.json +21 -0
- package/mcp-configs/data-platform/ml-mcp.json +21 -0
- package/mcp-configs/data-platform/nasdaq-data-link-mcp.json +20 -0
- package/mcp-configs/data-platform/numpy-mcp.json +21 -0
- package/mcp-configs/database/neo4j-mcp.json +37 -0
- package/mcp-configs/database/postgres-mcp.json +28 -0
- package/mcp-configs/database/sqlite-mcp.json +29 -0
- package/mcp-configs/dev-platform/geogebra-mcp.json +21 -0
- package/mcp-configs/dev-platform/github-mcp.json +31 -0
- package/mcp-configs/dev-platform/gitlab-mcp.json +34 -0
- package/mcp-configs/dev-platform/latex-mcp-server.json +21 -0
- package/mcp-configs/dev-platform/manim-mcp.json +20 -0
- package/mcp-configs/dev-platform/mcp-echarts.json +20 -0
- package/mcp-configs/dev-platform/panel-viz-mcp.json +20 -0
- package/mcp-configs/dev-platform/paperbanana.json +20 -0
- package/mcp-configs/dev-platform/texflow-mcp.json +20 -0
- package/mcp-configs/dev-platform/texmcp.json +20 -0
- package/mcp-configs/dev-platform/typst-mcp.json +21 -0
- package/mcp-configs/dev-platform/vizro-mcp.json +20 -0
- package/mcp-configs/email/email-mcp.json +40 -0
- package/mcp-configs/email/gmail-mcp.json +37 -0
- package/mcp-configs/note-knowledge/local-faiss-mcp.json +21 -0
- package/mcp-configs/note-knowledge/mcp-memory-service.json +21 -0
- package/mcp-configs/note-knowledge/mcp-obsidian.json +23 -0
- package/mcp-configs/note-knowledge/mcp-ragdocs.json +20 -0
- package/mcp-configs/note-knowledge/mcp-summarizer.json +21 -0
- package/mcp-configs/note-knowledge/mediawiki-mcp.json +21 -0
- package/mcp-configs/note-knowledge/openzim-mcp.json +20 -0
- package/mcp-configs/note-knowledge/zettelkasten-mcp.json +21 -0
- package/mcp-configs/reference-mgr/academic-paper-mcp-http.json +20 -0
- package/mcp-configs/reference-mgr/academix.json +20 -0
- package/mcp-configs/reference-mgr/arxiv-research-mcp.json +21 -0
- package/mcp-configs/reference-mgr/google-scholar-abstract-mcp.json +19 -0
- package/mcp-configs/reference-mgr/google-scholar-mcp.json +20 -0
- package/mcp-configs/reference-mgr/mcp-paperswithcode.json +21 -0
- package/mcp-configs/reference-mgr/mcp-scholarly.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-arxiv.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-pubmed.json +20 -0
- package/mcp-configs/reference-mgr/mcp-zotero.json +21 -0
- package/mcp-configs/reference-mgr/mendeley-mcp.json +20 -0
- package/mcp-configs/reference-mgr/ncbi-mcp-server.json +22 -0
- package/mcp-configs/reference-mgr/onecite.json +21 -0
- package/mcp-configs/reference-mgr/paper-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/pubmed-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-multi-mcp.json +21 -0
- package/mcp-configs/reference-mgr/seerai.json +21 -0
- package/mcp-configs/reference-mgr/semantic-scholar-fastmcp.json +21 -0
- package/mcp-configs/reference-mgr/sourcelibrary.json +20 -0
- package/mcp-configs/registry.json +178 -149
- package/mcp-configs/repository/dataverse-mcp.json +33 -0
- package/mcp-configs/repository/huggingface-mcp.json +29 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -2
- package/skills/analysis/dataviz/algorithm-visualizer-guide/SKILL.md +259 -0
- package/skills/analysis/dataviz/bokeh-visualization-guide/SKILL.md +270 -0
- package/skills/analysis/dataviz/chart-image-generator/SKILL.md +229 -0
- package/skills/analysis/dataviz/citation-map-guide/SKILL.md +184 -0
- package/skills/analysis/dataviz/d3-visualization-guide/SKILL.md +281 -0
- package/skills/analysis/dataviz/data-visualization-principles/SKILL.md +171 -0
- package/skills/analysis/dataviz/echarts-visualization-guide/SKILL.md +250 -0
- package/skills/analysis/dataviz/metabase-analytics-guide/SKILL.md +242 -0
- package/skills/analysis/dataviz/plotly-interactive-guide/SKILL.md +266 -0
- package/skills/analysis/dataviz/redash-analytics-guide/SKILL.md +284 -0
- package/skills/analysis/econometrics/econml-causal-guide/SKILL.md +163 -0
- package/skills/analysis/econometrics/empirical-paper-analysis/SKILL.md +192 -0
- package/skills/analysis/econometrics/mostly-harmless-guide/SKILL.md +139 -0
- package/skills/analysis/econometrics/panel-data-analyst/SKILL.md +259 -0
- package/skills/analysis/econometrics/panel-data-regression-workflow/SKILL.md +267 -0
- package/skills/analysis/econometrics/python-causality-guide/SKILL.md +134 -0
- package/skills/analysis/econometrics/stata-accounting-guide/SKILL.md +269 -0
- package/skills/analysis/econometrics/stata-analyst-guide/SKILL.md +245 -0
- package/skills/analysis/econometrics/stata-reference-guide/SKILL.md +293 -0
- package/skills/analysis/statistics/data-anomaly-detection/SKILL.md +157 -0
- package/skills/analysis/statistics/general-statistics-guide/SKILL.md +226 -0
- package/skills/analysis/statistics/infiagent-benchmark-guide/SKILL.md +106 -0
- package/skills/analysis/statistics/ml-experiment-tracker/SKILL.md +212 -0
- package/skills/analysis/statistics/pywayne-statistics-guide/SKILL.md +192 -0
- package/skills/analysis/statistics/quantitative-methods-guide/SKILL.md +193 -0
- package/skills/analysis/statistics/senior-data-scientist-guide/SKILL.md +223 -0
- package/skills/analysis/wrangling/claude-data-analysis-guide/SKILL.md +100 -0
- package/skills/analysis/wrangling/csv-data-analyzer/SKILL.md +170 -0
- package/skills/analysis/wrangling/data-cleaning-pipeline/SKILL.md +266 -0
- package/skills/analysis/wrangling/data-cog-guide/SKILL.md +178 -0
- package/skills/analysis/wrangling/open-data-scientist-guide/SKILL.md +197 -0
- package/skills/analysis/wrangling/stata-data-cleaning/SKILL.md +276 -0
- package/skills/analysis/wrangling/streamline-analyst-guide/SKILL.md +119 -0
- package/skills/analysis/wrangling/survey-data-processing/SKILL.md +298 -0
- package/skills/domains/ai-ml/ai-agent-papers-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/ai-model-benchmarking/SKILL.md +209 -0
- package/skills/domains/ai-ml/annotated-dl-papers-guide/SKILL.md +159 -0
- package/skills/domains/ai-ml/anomaly-detection-papers-guide/SKILL.md +167 -0
- package/skills/domains/ai-ml/autonomous-agents-papers-guide/SKILL.md +178 -0
- package/skills/domains/ai-ml/dl-transformer-finetune/SKILL.md +239 -0
- package/skills/domains/ai-ml/domain-adaptation-papers-guide/SKILL.md +173 -0
- package/skills/domains/ai-ml/generative-ai-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/graph-learning-papers-guide/SKILL.md +125 -0
- package/skills/domains/ai-ml/huggingface-inference-guide/SKILL.md +196 -0
- package/skills/domains/ai-ml/keras-deep-learning/SKILL.md +210 -0
- package/skills/domains/ai-ml/kolmogorov-arnold-networks-guide/SKILL.md +185 -0
- package/skills/domains/ai-ml/llm-from-scratch-guide/SKILL.md +124 -0
- package/skills/domains/ai-ml/ml-pipeline-guide/SKILL.md +295 -0
- package/skills/domains/ai-ml/nlp-toolkit-guide/SKILL.md +247 -0
- package/skills/domains/ai-ml/npcpy-research-guide/SKILL.md +137 -0
- package/skills/domains/ai-ml/pytorch-guide/SKILL.md +281 -0
- package/skills/domains/ai-ml/pytorch-lightning-guide/SKILL.md +244 -0
- package/skills/domains/ai-ml/responsible-ai-guide/SKILL.md +126 -0
- package/skills/domains/ai-ml/tensorflow-guide/SKILL.md +241 -0
- package/skills/domains/ai-ml/vmas-simulator-guide/SKILL.md +129 -0
- package/skills/domains/biomedical/bioagents-guide/SKILL.md +308 -0
- package/skills/domains/biomedical/clawbio-guide/SKILL.md +167 -0
- package/skills/domains/biomedical/clinical-dialogue-agents-guide/SKILL.md +145 -0
- package/skills/domains/biomedical/ena-sequence-api/SKILL.md +175 -0
- package/skills/domains/biomedical/genomas-guide/SKILL.md +126 -0
- package/skills/domains/biomedical/genotex-benchmark-guide/SKILL.md +125 -0
- package/skills/domains/biomedical/med-researcher-guide/SKILL.md +161 -0
- package/skills/domains/biomedical/med-researcher-r1-guide/SKILL.md +146 -0
- package/skills/domains/biomedical/medgeclaw-guide/SKILL.md +345 -0
- package/skills/domains/biomedical/medical-imaging-guide/SKILL.md +305 -0
- package/skills/domains/biomedical/ncbi-blast-api/SKILL.md +195 -0
- package/skills/domains/biomedical/ncbi-datasets-api/SKILL.md +220 -0
- package/skills/domains/biomedical/quickgo-api/SKILL.md +181 -0
- package/skills/domains/business/architecture-design-guide/SKILL.md +279 -0
- package/skills/domains/business/innovation-management-guide/SKILL.md +257 -0
- package/skills/domains/business/operations-research-guide/SKILL.md +258 -0
- package/skills/domains/business/xpert-bi-guide/SKILL.md +84 -0
- package/skills/domains/chemistry/cactus-cheminformatics-guide/SKILL.md +89 -0
- package/skills/domains/chemistry/chemeagle-guide/SKILL.md +147 -0
- package/skills/domains/chemistry/chemgraph-agent-guide/SKILL.md +120 -0
- package/skills/domains/chemistry/molecular-dynamics-guide/SKILL.md +237 -0
- package/skills/domains/chemistry/pubchem-api-guide/SKILL.md +180 -0
- package/skills/domains/chemistry/spectroscopy-analysis-guide/SKILL.md +290 -0
- package/skills/domains/cs/ai-security-papers-guide/SKILL.md +103 -0
- package/skills/domains/cs/code-llm-papers-guide/SKILL.md +131 -0
- package/skills/domains/cs/distributed-systems-guide/SKILL.md +268 -0
- package/skills/domains/cs/formal-verification-guide/SKILL.md +298 -0
- package/skills/domains/cs/gaussian-splatting-papers-guide/SKILL.md +158 -0
- package/skills/domains/cs/llm-aiops-guide/SKILL.md +70 -0
- package/skills/domains/cs/software-heritage-api/SKILL.md +200 -0
- package/skills/domains/ecology/species-distribution-guide/SKILL.md +343 -0
- package/skills/domains/economics/imf-data-api-guide/SKILL.md +174 -0
- package/skills/domains/economics/nber-working-papers-api/SKILL.md +177 -0
- package/skills/domains/economics/post-labor-economics/SKILL.md +254 -0
- package/skills/domains/economics/pricing-psychology-guide/SKILL.md +273 -0
- package/skills/domains/economics/repec-economics-api/SKILL.md +188 -0
- package/skills/domains/economics/world-bank-data-guide/SKILL.md +179 -0
- package/skills/domains/education/academic-study-methods/SKILL.md +228 -0
- package/skills/domains/education/assessment-design-guide/SKILL.md +213 -0
- package/skills/domains/education/educational-research-methods/SKILL.md +179 -0
- package/skills/domains/education/edumcp-guide/SKILL.md +74 -0
- package/skills/domains/education/mooc-analytics-guide/SKILL.md +206 -0
- package/skills/domains/education/open-syllabus-api/SKILL.md +171 -0
- package/skills/domains/finance/akshare-finance-data/SKILL.md +207 -0
- package/skills/domains/finance/finsight-research-guide/SKILL.md +113 -0
- package/skills/domains/finance/options-analytics-agent-guide/SKILL.md +117 -0
- package/skills/domains/finance/portfolio-optimization-guide/SKILL.md +279 -0
- package/skills/domains/finance/risk-modeling-guide/SKILL.md +260 -0
- package/skills/domains/finance/stata-accounting-research/SKILL.md +372 -0
- package/skills/domains/geoscience/climate-modeling-guide/SKILL.md +215 -0
- package/skills/domains/geoscience/pangaea-data-api/SKILL.md +197 -0
- package/skills/domains/geoscience/satellite-remote-sensing/SKILL.md +193 -0
- package/skills/domains/geoscience/seismology-data-guide/SKILL.md +208 -0
- package/skills/domains/humanities/digital-humanities-methods/SKILL.md +232 -0
- package/skills/domains/humanities/ethical-philosophy-guide/SKILL.md +244 -0
- package/skills/domains/humanities/history-research-guide/SKILL.md +260 -0
- package/skills/domains/humanities/political-history-guide/SKILL.md +241 -0
- package/skills/domains/law/caselaw-access-api/SKILL.md +149 -0
- package/skills/domains/law/legal-agent-skills-guide/SKILL.md +132 -0
- package/skills/domains/law/legal-nlp-guide/SKILL.md +236 -0
- package/skills/domains/law/legal-research-methods/SKILL.md +190 -0
- package/skills/domains/law/opencontracts-guide/SKILL.md +168 -0
- package/skills/domains/law/patent-analysis-guide/SKILL.md +257 -0
- package/skills/domains/law/regulatory-compliance-guide/SKILL.md +267 -0
- package/skills/domains/math/lean-theorem-proving-guide/SKILL.md +140 -0
- package/skills/domains/math/symbolic-computation-guide/SKILL.md +263 -0
- package/skills/domains/math/topology-data-analysis/SKILL.md +305 -0
- package/skills/domains/pharma/clinical-trial-design-guide/SKILL.md +271 -0
- package/skills/domains/pharma/drug-target-interaction/SKILL.md +242 -0
- package/skills/domains/pharma/madd-drug-discovery-guide/SKILL.md +153 -0
- package/skills/domains/pharma/pharmacovigilance-guide/SKILL.md +216 -0
- package/skills/domains/physics/astrophysics-data-guide/SKILL.md +305 -0
- package/skills/domains/physics/particle-physics-guide/SKILL.md +287 -0
- package/skills/domains/social-science/ipums-microdata-api/SKILL.md +211 -0
- package/skills/domains/social-science/network-analysis-guide/SKILL.md +310 -0
- package/skills/domains/social-science/psychology-research-guide/SKILL.md +270 -0
- package/skills/domains/social-science/sociology-research-guide/SKILL.md +238 -0
- package/skills/domains/social-science/sociology-research-methods/SKILL.md +181 -0
- package/skills/literature/discovery/arxiv-paper-monitoring/SKILL.md +233 -0
- package/skills/literature/discovery/paper-recommendation-guide/SKILL.md +120 -0
- package/skills/literature/discovery/papers-we-love-guide/SKILL.md +169 -0
- package/skills/literature/discovery/semantic-paper-radar/SKILL.md +144 -0
- package/skills/literature/discovery/zotero-arxiv-daily-guide/SKILL.md +94 -0
- package/skills/literature/fulltext/bioc-pmc-api/SKILL.md +146 -0
- package/skills/literature/fulltext/core-api-guide/SKILL.md +144 -0
- package/skills/literature/fulltext/dataverse-api/SKILL.md +215 -0
- package/skills/literature/fulltext/hal-archive-api/SKILL.md +218 -0
- package/skills/literature/fulltext/institutional-repository-guide/SKILL.md +212 -0
- package/skills/literature/fulltext/open-access-mining-guide/SKILL.md +341 -0
- package/skills/literature/fulltext/osf-api/SKILL.md +212 -0
- package/skills/literature/fulltext/pmc-ftp-bulk-download/SKILL.md +182 -0
- package/skills/literature/fulltext/zotero-ai-butler-guide/SKILL.md +166 -0
- package/skills/literature/fulltext/zotero-scihub-guide/SKILL.md +168 -0
- package/skills/literature/metadata/academic-paper-summarizer/SKILL.md +101 -0
- package/skills/literature/metadata/bibliometrix-guide/SKILL.md +164 -0
- package/skills/literature/metadata/crossref-event-data-api/SKILL.md +183 -0
- package/skills/literature/metadata/doi-content-negotiation/SKILL.md +202 -0
- package/skills/literature/metadata/orkg-api/SKILL.md +153 -0
- package/skills/literature/metadata/plumx-metrics-api/SKILL.md +188 -0
- package/skills/literature/metadata/ror-organization-api/SKILL.md +208 -0
- package/skills/literature/metadata/sophosia-reference-guide/SKILL.md +110 -0
- package/skills/literature/metadata/viaf-authority-api/SKILL.md +209 -0
- package/skills/literature/metadata/wikidata-api-guide/SKILL.md +156 -0
- package/skills/literature/metadata/zoplicate-dedup-guide/SKILL.md +147 -0
- package/skills/literature/metadata/zotero-actions-tags-guide/SKILL.md +212 -0
- package/skills/literature/metadata/zotmoov-guide/SKILL.md +120 -0
- package/skills/literature/metadata/zutilo-guide/SKILL.md +140 -0
- package/skills/literature/search/arxiv-batch-reporting/SKILL.md +133 -0
- package/skills/literature/search/arxiv-cli-tools/SKILL.md +172 -0
- package/skills/literature/search/arxiv-osiris/SKILL.md +199 -0
- package/skills/literature/search/arxiv-paper-processor/SKILL.md +141 -0
- package/skills/literature/search/baidu-scholar-guide/SKILL.md +110 -0
- package/skills/literature/search/base-academic-search/SKILL.md +196 -0
- package/skills/literature/search/chatpaper-guide/SKILL.md +122 -0
- package/skills/literature/search/citeseerx-api/SKILL.md +183 -0
- package/skills/literature/search/deep-literature-search/SKILL.md +149 -0
- package/skills/literature/search/deepgit-search-guide/SKILL.md +147 -0
- package/skills/literature/search/eric-education-api/SKILL.md +199 -0
- package/skills/literature/search/findpapers-guide/SKILL.md +177 -0
- package/skills/literature/search/ieee-xplore-api/SKILL.md +177 -0
- package/skills/literature/search/lens-scholarly-api/SKILL.md +211 -0
- package/skills/literature/search/multi-database-literature-search/SKILL.md +198 -0
- package/skills/literature/search/open-library-api/SKILL.md +196 -0
- package/skills/literature/search/open-semantic-search-guide/SKILL.md +190 -0
- package/skills/literature/search/openaire-api/SKILL.md +141 -0
- package/skills/literature/search/paper-search-mcp-guide/SKILL.md +107 -0
- package/skills/literature/search/papers-chat-guide/SKILL.md +194 -0
- package/skills/literature/search/pasa-paper-search-guide/SKILL.md +138 -0
- package/skills/literature/search/plos-open-access-api/SKILL.md +203 -0
- package/skills/literature/search/scielo-api/SKILL.md +182 -0
- package/skills/literature/search/share-research-api/SKILL.md +129 -0
- package/skills/literature/search/worldcat-search-api/SKILL.md +224 -0
- package/skills/research/automation/ai-scientist-v2-guide/SKILL.md +284 -0
- package/skills/research/automation/aim-experiment-guide/SKILL.md +234 -0
- package/skills/research/automation/claude-academic-workflow-guide/SKILL.md +202 -0
- package/skills/research/automation/coexist-ai-guide/SKILL.md +149 -0
- package/skills/research/automation/datagen-research-guide/SKILL.md +131 -0
- package/skills/research/automation/foam-agent-guide/SKILL.md +203 -0
- package/skills/research/automation/kedro-pipeline-guide/SKILL.md +216 -0
- package/skills/research/automation/mle-agent-guide/SKILL.md +139 -0
- package/skills/research/automation/paper-to-agent-guide/SKILL.md +116 -0
- package/skills/research/automation/rd-agent-guide/SKILL.md +246 -0
- package/skills/research/automation/research-paper-orchestrator/SKILL.md +254 -0
- package/skills/research/deep-research/academic-deep-research/SKILL.md +190 -0
- package/skills/research/deep-research/auto-deep-research-guide/SKILL.md +141 -0
- package/skills/research/deep-research/cognitive-kernel-guide/SKILL.md +200 -0
- package/skills/research/deep-research/corvus-research-guide/SKILL.md +132 -0
- package/skills/research/deep-research/deep-research-pro/SKILL.md +213 -0
- package/skills/research/deep-research/deep-research-work/SKILL.md +204 -0
- package/skills/research/deep-research/deep-searcher-guide/SKILL.md +253 -0
- package/skills/research/deep-research/gpt-researcher-guide/SKILL.md +191 -0
- package/skills/research/deep-research/in-depth-research-guide/SKILL.md +205 -0
- package/skills/research/deep-research/khoj-research-guide/SKILL.md +200 -0
- package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +185 -0
- package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +178 -0
- package/skills/research/deep-research/local-deep-research-guide/SKILL.md +253 -0
- package/skills/research/deep-research/open-researcher-guide/SKILL.md +138 -0
- package/skills/research/deep-research/tongyi-deep-research-guide/SKILL.md +217 -0
- package/skills/research/funding/eu-horizon-guide/SKILL.md +244 -0
- package/skills/research/funding/grant-budget-guide/SKILL.md +284 -0
- package/skills/research/funding/nih-reporter-api-guide/SKILL.md +166 -0
- package/skills/research/funding/nsf-award-api-guide/SKILL.md +133 -0
- package/skills/research/methodology/academic-mentor-guide/SKILL.md +169 -0
- package/skills/research/methodology/claude-scientific-guide/SKILL.md +122 -0
- package/skills/research/methodology/deep-innovator-guide/SKILL.md +242 -0
- package/skills/research/methodology/osf-api-guide/SKILL.md +165 -0
- package/skills/research/methodology/parsifal-slr-guide/SKILL.md +154 -0
- package/skills/research/methodology/research-paper-kb/SKILL.md +263 -0
- package/skills/research/methodology/research-pipeline-units-guide/SKILL.md +169 -0
- package/skills/research/methodology/research-town-guide/SKILL.md +263 -0
- package/skills/research/methodology/slr-automation-guide/SKILL.md +235 -0
- package/skills/research/paper-review/automated-review-guide/SKILL.md +281 -0
- package/skills/research/paper-review/latte-review-guide/SKILL.md +175 -0
- package/skills/research/paper-review/paper-compare-guide/SKILL.md +238 -0
- package/skills/research/paper-review/paper-critique-framework/SKILL.md +181 -0
- package/skills/research/paper-review/paper-digest-guide/SKILL.md +240 -0
- package/skills/research/paper-review/paper-research-assistant/SKILL.md +231 -0
- package/skills/research/paper-review/research-quality-filter/SKILL.md +261 -0
- package/skills/research/paper-review/review-response-guide/SKILL.md +275 -0
- package/skills/tools/code-exec/contextplus-mcp-guide/SKILL.md +110 -0
- package/skills/tools/code-exec/google-colab-guide/SKILL.md +276 -0
- package/skills/tools/code-exec/kaggle-api-guide/SKILL.md +216 -0
- package/skills/tools/code-exec/overleaf-cli-guide/SKILL.md +279 -0
- package/skills/tools/diagram/clawphd-guide/SKILL.md +149 -0
- package/skills/tools/diagram/code-flow-visualizer/SKILL.md +197 -0
- package/skills/tools/diagram/excalidraw-diagram-guide/SKILL.md +170 -0
- package/skills/tools/diagram/json-data-visualizer/SKILL.md +270 -0
- package/skills/tools/diagram/kroki-diagram-api/SKILL.md +198 -0
- package/skills/tools/diagram/mermaid-architect-guide/SKILL.md +219 -0
- package/skills/tools/diagram/scientific-graphical-abstract/SKILL.md +201 -0
- package/skills/tools/diagram/tldraw-whiteboard-guide/SKILL.md +397 -0
- package/skills/tools/document/docsgpt-guide/SKILL.md +130 -0
- package/skills/tools/document/large-document-reader/SKILL.md +202 -0
- package/skills/tools/document/md2pdf-xelatex/SKILL.md +212 -0
- package/skills/tools/document/openpaper-guide/SKILL.md +232 -0
- package/skills/tools/document/paper-parse-guide/SKILL.md +243 -0
- package/skills/tools/document/weknora-guide/SKILL.md +216 -0
- package/skills/tools/document/zotero-addon-market-guide/SKILL.md +108 -0
- package/skills/tools/document/zotero-night-theme-guide/SKILL.md +142 -0
- package/skills/tools/document/zotero-style-guide/SKILL.md +217 -0
- package/skills/tools/knowledge-graph/citation-network-builder/SKILL.md +244 -0
- package/skills/tools/knowledge-graph/concept-map-generator/SKILL.md +284 -0
- package/skills/tools/knowledge-graph/graphiti-guide/SKILL.md +219 -0
- package/skills/tools/knowledge-graph/mimir-memory-guide/SKILL.md +135 -0
- package/skills/tools/knowledge-graph/notero-zotero-notion-guide/SKILL.md +187 -0
- package/skills/tools/knowledge-graph/open-webui-tools-guide/SKILL.md +156 -0
- package/skills/tools/knowledge-graph/openspg-guide/SKILL.md +210 -0
- package/skills/tools/knowledge-graph/paperpile-notion-guide/SKILL.md +84 -0
- package/skills/tools/knowledge-graph/zotero-markdb-connect-guide/SKILL.md +162 -0
- package/skills/tools/ocr-translate/latex-translation-guide/SKILL.md +176 -0
- package/skills/tools/ocr-translate/math-equation-renderer/SKILL.md +198 -0
- package/skills/tools/ocr-translate/pdf-math-translate-guide/SKILL.md +141 -0
- package/skills/tools/ocr-translate/zotero-pdf-translate-guide/SKILL.md +95 -0
- package/skills/tools/ocr-translate/zotero-pdf2zh-guide/SKILL.md +143 -0
- package/skills/tools/scraping/dataset-finder-guide/SKILL.md +253 -0
- package/skills/tools/scraping/easy-spider-guide/SKILL.md +250 -0
- package/skills/tools/scraping/google-scholar-scraper/SKILL.md +255 -0
- package/skills/tools/scraping/repository-harvesting-guide/SKILL.md +310 -0
- package/skills/writing/citation/academic-citation-manager/SKILL.md +314 -0
- package/skills/writing/citation/academic-citation-manager-guide/SKILL.md +182 -0
- package/skills/writing/citation/citation-assistant-skill/SKILL.md +192 -0
- package/skills/writing/citation/jabref-reference-guide/SKILL.md +127 -0
- package/skills/writing/citation/jasminum-zotero-guide/SKILL.md +103 -0
- package/skills/writing/citation/mendeley-api/SKILL.md +231 -0
- package/skills/writing/citation/obsidian-citation-guide/SKILL.md +164 -0
- package/skills/writing/citation/obsidian-zotero-guide/SKILL.md +137 -0
- package/skills/writing/citation/onecite-reference-guide/SKILL.md +168 -0
- package/skills/writing/citation/papersgpt-zotero-guide/SKILL.md +132 -0
- package/skills/writing/citation/papis-cli-guide/SKILL.md +213 -0
- package/skills/writing/citation/zotero-better-bibtex-guide/SKILL.md +107 -0
- package/skills/writing/citation/zotero-better-notes-guide/SKILL.md +121 -0
- package/skills/writing/citation/zotero-gpt-guide/SKILL.md +111 -0
- package/skills/writing/citation/zotero-mcp-guide/SKILL.md +164 -0
- package/skills/writing/citation/zotero-mdnotes-guide/SKILL.md +162 -0
- package/skills/writing/citation/zotero-reference-guide/SKILL.md +139 -0
- package/skills/writing/citation/zotero-scholar-guide/SKILL.md +294 -0
- package/skills/writing/citation/zotfile-attachment-guide/SKILL.md +140 -0
- package/skills/writing/composition/ml-paper-writing/SKILL.md +163 -0
- package/skills/writing/composition/opendraft-thesis-guide/SKILL.md +200 -0
- package/skills/writing/composition/paper-debugger-guide/SKILL.md +143 -0
- package/skills/writing/composition/paperforge-guide/SKILL.md +205 -0
- package/skills/writing/composition/research-paper-writer/SKILL.md +226 -0
- package/skills/writing/composition/scientific-writing-resources/SKILL.md +151 -0
- package/skills/writing/composition/scientific-writing-wrapper/SKILL.md +153 -0
- package/skills/writing/latex/academic-writing-latex/SKILL.md +285 -0
- package/skills/writing/latex/latex-drawing-collection/SKILL.md +154 -0
- package/skills/writing/latex/latex-templates-collection/SKILL.md +159 -0
- package/skills/writing/latex/md-to-pdf-academic/SKILL.md +230 -0
- package/skills/writing/latex/tex-render-guide/SKILL.md +243 -0
- package/skills/writing/polish/academic-tone-guide/SKILL.md +209 -0
- package/skills/writing/polish/chinese-text-humanizer/SKILL.md +140 -0
- package/skills/writing/polish/conciseness-editing-guide/SKILL.md +225 -0
- package/skills/writing/polish/paper-polish-guide/SKILL.md +160 -0
- package/skills/writing/templates/arxiv-preprint-template/SKILL.md +184 -0
- package/skills/writing/templates/elegant-paper-template/SKILL.md +141 -0
- package/skills/writing/templates/graphical-abstract-guide/SKILL.md +183 -0
- package/skills/writing/templates/novathesis-guide/SKILL.md +152 -0
- package/skills/writing/templates/scientific-article-pdf/SKILL.md +261 -0
- package/skills/writing/templates/sjtuthesis-guide/SKILL.md +197 -0
- package/skills/writing/templates/thuthesis-guide/SKILL.md +181 -0
- package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +0 -207
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quantitative-methods-guide
|
|
3
|
+
description: "Design and execute statistical analyses with regression modeling"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📈"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "statistics"
|
|
9
|
+
keywords: ["regression analysis", "quantitative methods", "research design", "statistical modeling", "OLS", "logistic regression"]
|
|
10
|
+
source: "https://github.com/AcademicSkills/quantitative-methods-guide"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Quantitative Methods Guide
|
|
14
|
+
|
|
15
|
+
A skill for designing and executing rigorous quantitative analyses in academic research. Covers the full pipeline from research question formulation through variable operationalization, model specification, estimation, diagnostics, and interpretation, with emphasis on regression modeling as the workhorse of empirical research.
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Quantitative methods form the foundation of empirical research across the social sciences, health sciences, economics, education, and many STEM fields. This skill provides a structured approach to the entire quantitative analysis workflow, ensuring that researchers make methodologically sound choices at each stage. It treats regression analysis as the central tool, covering ordinary least squares (OLS), logistic regression, Poisson regression, and multilevel models, while also addressing the broader issues of research design, measurement, and causal inference that determine whether regression results are meaningful.
|
|
20
|
+
|
|
21
|
+
The skill is designed for graduate students and researchers who have basic statistics knowledge but need guidance on applying methods correctly in their own research contexts.
|
|
22
|
+
|
|
23
|
+
## Research Design and Variable Specification
|
|
24
|
+
|
|
25
|
+
### From Question to Model
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Research Question: "Does mentoring frequency affect publication output among
|
|
29
|
+
junior faculty, controlling for department size and funding?"
|
|
30
|
+
|
|
31
|
+
Step 1: Identify variables
|
|
32
|
+
- Outcome (Y): publication_count (count data)
|
|
33
|
+
- Predictor (X1): mentoring_hours_per_month (continuous)
|
|
34
|
+
- Controls: department_size (continuous), total_funding (continuous)
|
|
35
|
+
- Potential moderator: career_stage (categorical: assistant/associate)
|
|
36
|
+
|
|
37
|
+
Step 2: Choose model family
|
|
38
|
+
- Count outcome → Poisson or Negative Binomial regression
|
|
39
|
+
- Check for overdispersion before deciding
|
|
40
|
+
|
|
41
|
+
Step 3: Specify the model
|
|
42
|
+
publications ~ mentoring_hours + department_size + log(funding) + career_stage
|
|
43
|
+
Optional: publications ~ mentoring_hours * career_stage + controls (interaction)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Variable Types and Measurement
|
|
47
|
+
|
|
48
|
+
| Variable Type | Examples | Modeling Considerations |
|
|
49
|
+
|--------------|----------|----------------------|
|
|
50
|
+
| Continuous | Income, GPA, temperature | Check distribution, consider transformations |
|
|
51
|
+
| Binary | Pass/fail, treatment/control | Logistic regression |
|
|
52
|
+
| Count | Publications, citations, events | Poisson or negative binomial |
|
|
53
|
+
| Ordinal | Likert scales, rankings | Ordinal logistic or treat as continuous if 5+ levels |
|
|
54
|
+
| Nominal | Department, country, method | Dummy coding (k-1 indicators) |
|
|
55
|
+
| Time-to-event | Months until graduation | Survival analysis |
|
|
56
|
+
|
|
57
|
+
## Regression Analysis
|
|
58
|
+
|
|
59
|
+
### Ordinary Least Squares (OLS)
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
import statsmodels.formula.api as smf
|
|
63
|
+
import pandas as pd
|
|
64
|
+
|
|
65
|
+
def run_ols_analysis(df: pd.DataFrame, formula: str) -> dict:
|
|
66
|
+
"""
|
|
67
|
+
Fit an OLS regression model with full diagnostics.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
df: DataFrame with all variables
|
|
71
|
+
formula: Patsy formula (e.g., 'y ~ x1 + x2 + C(group)')
|
|
72
|
+
"""
|
|
73
|
+
model = smf.ols(formula=formula, data=df).fit(cov_type='HC3') # robust SE
|
|
74
|
+
|
|
75
|
+
results = {
|
|
76
|
+
'coefficients': model.params.to_dict(),
|
|
77
|
+
'std_errors': model.bse.to_dict(),
|
|
78
|
+
'p_values': model.pvalues.to_dict(),
|
|
79
|
+
'conf_int': model.conf_int().to_dict(),
|
|
80
|
+
'r_squared': model.rsquared,
|
|
81
|
+
'adj_r_squared': model.rsquared_adj,
|
|
82
|
+
'f_statistic': model.fvalue,
|
|
83
|
+
'f_pvalue': model.f_pvalue,
|
|
84
|
+
'n_obs': int(model.nobs),
|
|
85
|
+
'aic': model.aic,
|
|
86
|
+
'bic': model.bic
|
|
87
|
+
}
|
|
88
|
+
return results
|
|
89
|
+
|
|
90
|
+
# Example usage:
|
|
91
|
+
# results = run_ols_analysis(df, 'gpa ~ study_hours + sleep_hours + C(major)')
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Logistic Regression
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
def run_logistic_analysis(df: pd.DataFrame, formula: str) -> dict:
|
|
98
|
+
"""
|
|
99
|
+
Fit a logistic regression for binary outcomes.
|
|
100
|
+
Reports odds ratios alongside coefficients.
|
|
101
|
+
"""
|
|
102
|
+
model = smf.logit(formula=formula, data=df).fit(disp=False)
|
|
103
|
+
|
|
104
|
+
import numpy as np
|
|
105
|
+
results = {
|
|
106
|
+
'coefficients': model.params.to_dict(),
|
|
107
|
+
'odds_ratios': np.exp(model.params).to_dict(),
|
|
108
|
+
'p_values': model.pvalues.to_dict(),
|
|
109
|
+
'conf_int_OR': np.exp(model.conf_int()).to_dict(),
|
|
110
|
+
'pseudo_r_squared': model.prsquared,
|
|
111
|
+
'log_likelihood': model.llf,
|
|
112
|
+
'aic': model.aic,
|
|
113
|
+
'n_obs': int(model.nobs)
|
|
114
|
+
}
|
|
115
|
+
return results
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Model Diagnostics
|
|
119
|
+
|
|
120
|
+
### OLS Assumption Checks
|
|
121
|
+
|
|
122
|
+
Run these diagnostics after fitting any OLS model:
|
|
123
|
+
|
|
124
|
+
1. **Linearity**: Plot residuals vs. fitted values. Look for no systematic pattern.
|
|
125
|
+
2. **Normality of residuals**: Q-Q plot and Shapiro-Wilk test on residuals.
|
|
126
|
+
3. **Homoscedasticity**: Breusch-Pagan test (`statsmodels.stats.diagnostic.het_breuschpagan`).
|
|
127
|
+
4. **No multicollinearity**: Variance Inflation Factor (VIF) for each predictor.
|
|
128
|
+
5. **Independence**: Durbin-Watson statistic for autocorrelation (especially panel/time data).
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
from statsmodels.stats.outliers_influence import variance_inflation_factor
|
|
132
|
+
from statsmodels.stats.diagnostic import het_breuschpagan
|
|
133
|
+
|
|
134
|
+
def check_ols_assumptions(model, X_matrix) -> dict:
|
|
135
|
+
"""
|
|
136
|
+
Run standard OLS diagnostic tests.
|
|
137
|
+
"""
|
|
138
|
+
residuals = model.resid
|
|
139
|
+
fitted = model.fittedvalues
|
|
140
|
+
|
|
141
|
+
# VIF for multicollinearity
|
|
142
|
+
vif = {X_matrix.columns[i]: variance_inflation_factor(X_matrix.values, i)
|
|
143
|
+
for i in range(X_matrix.shape[1])}
|
|
144
|
+
multicollinearity_flag = any(v > 10 for v in vif.values())
|
|
145
|
+
|
|
146
|
+
# Breusch-Pagan for heteroscedasticity
|
|
147
|
+
bp_stat, bp_p, _, _ = het_breuschpagan(residuals, X_matrix)
|
|
148
|
+
|
|
149
|
+
from scipy import stats
|
|
150
|
+
_, normality_p = stats.shapiro(residuals[:5000]) # cap at 5000
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
'vif': vif,
|
|
154
|
+
'multicollinearity_problem': multicollinearity_flag,
|
|
155
|
+
'breusch_pagan_p': round(bp_p, 4),
|
|
156
|
+
'heteroscedasticity_problem': bp_p < 0.05,
|
|
157
|
+
'residual_normality_p': round(normality_p, 4),
|
|
158
|
+
'recommendation': 'Use HC3 robust standard errors if heteroscedasticity detected'
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Reporting Regression Results
|
|
163
|
+
|
|
164
|
+
### Standard Regression Table Format
|
|
165
|
+
|
|
166
|
+
| Variable | Coefficient | SE | t | p | 95% CI |
|
|
167
|
+
|----------|-----------|------|------|-------|---------|
|
|
168
|
+
| (Intercept) | 2.34 | 0.45 | 5.20 | <.001 | [1.45, 3.23] |
|
|
169
|
+
| Mentoring hours | 0.18 | 0.06 | 3.00 | .003 | [0.06, 0.30] |
|
|
170
|
+
| Dept. size | -0.02 | 0.01 | -2.00 | .048 | [-0.04, -0.00] |
|
|
171
|
+
| Log(Funding) | 0.31 | 0.12 | 2.58 | .011 | [0.07, 0.55] |
|
|
172
|
+
|
|
173
|
+
Report: N, R-squared, Adjusted R-squared, F-statistic with df and p-value, and the type of standard errors used (e.g., HC3 robust).
|
|
174
|
+
|
|
175
|
+
### Interpretation Template
|
|
176
|
+
|
|
177
|
+
"A one-unit increase in [predictor] is associated with a [coefficient] [unit] change in [outcome], holding all other variables constant (b = [coef], SE = [se], p = [p], 95% CI [[lower], [upper]])."
|
|
178
|
+
|
|
179
|
+
For logistic regression: "A one-unit increase in [predictor] is associated with [OR]-times higher odds of [outcome] (OR = [or], 95% CI [[lower], [upper]], p = [p])."
|
|
180
|
+
|
|
181
|
+
## Common Pitfalls
|
|
182
|
+
|
|
183
|
+
- **Omitted variable bias**: Failing to control for confounders that affect both X and Y.
|
|
184
|
+
- **Overfitting**: Including too many predictors relative to sample size (rule of thumb: 10-20 observations per predictor).
|
|
185
|
+
- **p-hacking**: Running many models and reporting only significant results. Pre-register your analysis plan.
|
|
186
|
+
- **Misinterpreting R-squared**: High R-squared does not imply causation; low R-squared does not mean the model is useless.
|
|
187
|
+
- **Ignoring assumptions**: Always run diagnostics. Violated assumptions can invalidate standard errors and p-values.
|
|
188
|
+
|
|
189
|
+
## References
|
|
190
|
+
|
|
191
|
+
- Wooldridge, J. M. (2019). *Introductory Econometrics* (7th ed.). Cengage.
|
|
192
|
+
- Gelman, A. & Hill, J. (2007). *Data Analysis Using Regression and Multilevel/Hierarchical Models*. Cambridge University Press.
|
|
193
|
+
- King, G. (1986). How Not to Lie with Statistics. *American Journal of Political Science*, 30(3), 666-687.
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: senior-data-scientist-guide
|
|
3
|
+
description: "Statistical modeling, experimentation design, and causal inference"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🎯"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "statistics"
|
|
9
|
+
keywords: ["statistical modeling", "causal inference", "A/B testing", "experimentation", "feature engineering", "data science"]
|
|
10
|
+
source: "https://github.com/AcademicSkills/senior-data-scientist-guide"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Senior Data Scientist Guide
|
|
14
|
+
|
|
15
|
+
A skill embodying the analytical mindset and methodological rigor of a senior data scientist applied to academic research. Covers advanced statistical modeling, experimental design, causal inference, feature engineering, and the critical thinking required to move from data to defensible conclusions.
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Senior data scientists distinguish themselves not by knowing more algorithms but by asking better questions, designing cleaner experiments, and being honest about what the data can and cannot tell them. This skill translates that professional discipline into a research context, helping academics apply modern data science practices to their empirical work. It covers the strategic decisions that matter most: when to use simple models versus complex ones, how to establish causality rather than mere correlation, and how to communicate uncertainty honestly.
|
|
20
|
+
|
|
21
|
+
The skill is particularly useful for researchers working with observational data who need causal inference techniques, those designing randomized experiments who need proper power calculations and analysis plans, and anyone building predictive models who needs to avoid common overfitting and leakage pitfalls.
|
|
22
|
+
|
|
23
|
+
## Strategic Modeling Decisions
|
|
24
|
+
|
|
25
|
+
### Model Selection Philosophy
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Decision Framework:
|
|
29
|
+
1. Start with the simplest model that could answer your question
|
|
30
|
+
2. Add complexity only when diagnostics reveal inadequacy
|
|
31
|
+
3. Prefer interpretable models unless prediction accuracy is the sole goal
|
|
32
|
+
4. Always have a baseline (mean, majority class, last observation)
|
|
33
|
+
|
|
34
|
+
Model Complexity Ladder:
|
|
35
|
+
Level 1: Descriptive statistics, cross-tabulations
|
|
36
|
+
Level 2: Linear/logistic regression
|
|
37
|
+
Level 3: Regularized regression (Lasso, Ridge, Elastic Net)
|
|
38
|
+
Level 4: Tree ensembles (Random Forest, Gradient Boosting)
|
|
39
|
+
Level 5: Deep learning (only with sufficient data and clear justification)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Feature Engineering Principles
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import pandas as pd
|
|
46
|
+
import numpy as np
|
|
47
|
+
|
|
48
|
+
def engineer_features(df: pd.DataFrame, config: dict) -> pd.DataFrame:
|
|
49
|
+
"""
|
|
50
|
+
Apply systematic feature engineering based on domain knowledge.
|
|
51
|
+
|
|
52
|
+
config example:
|
|
53
|
+
{
|
|
54
|
+
'log_transform': ['income', 'citations'],
|
|
55
|
+
'interactions': [('experience', 'education')],
|
|
56
|
+
'polynomial': {'age': 2},
|
|
57
|
+
'time_features': 'date_column',
|
|
58
|
+
'lag_features': {'metric': [1, 7, 30]}
|
|
59
|
+
}
|
|
60
|
+
"""
|
|
61
|
+
df = df.copy()
|
|
62
|
+
|
|
63
|
+
# Log transforms for right-skewed variables
|
|
64
|
+
for col in config.get('log_transform', []):
|
|
65
|
+
df[f'{col}_log'] = np.log1p(df[col])
|
|
66
|
+
|
|
67
|
+
# Interaction terms
|
|
68
|
+
for col_a, col_b in config.get('interactions', []):
|
|
69
|
+
df[f'{col_a}_x_{col_b}'] = df[col_a] * df[col_b]
|
|
70
|
+
|
|
71
|
+
# Polynomial features
|
|
72
|
+
for col, degree in config.get('polynomial', {}).items():
|
|
73
|
+
for d in range(2, degree + 1):
|
|
74
|
+
df[f'{col}_pow{d}'] = df[col] ** d
|
|
75
|
+
|
|
76
|
+
# Time-based features
|
|
77
|
+
if 'time_features' in config:
|
|
78
|
+
time_col = config['time_features']
|
|
79
|
+
df[time_col] = pd.to_datetime(df[time_col])
|
|
80
|
+
df[f'{time_col}_month'] = df[time_col].dt.month
|
|
81
|
+
df[f'{time_col}_dayofweek'] = df[time_col].dt.dayofweek
|
|
82
|
+
df[f'{time_col}_quarter'] = df[time_col].dt.quarter
|
|
83
|
+
|
|
84
|
+
return df
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Causal Inference Methods
|
|
88
|
+
|
|
89
|
+
### Beyond Correlation
|
|
90
|
+
|
|
91
|
+
| Method | When to Use | Key Assumption |
|
|
92
|
+
|--------|-----------|---------------|
|
|
93
|
+
| Randomized experiment | You can randomly assign treatment | Proper randomization, no attrition |
|
|
94
|
+
| Difference-in-differences | Policy change affects one group | Parallel trends pre-treatment |
|
|
95
|
+
| Regression discontinuity | Treatment assigned by cutoff | No manipulation near cutoff |
|
|
96
|
+
| Instrumental variables | Endogeneity present | Valid instrument (relevance + exclusion) |
|
|
97
|
+
| Propensity score matching | Observational data, many confounders | No unobserved confounders |
|
|
98
|
+
| Synthetic control | Single treated unit, many controls | Good pre-treatment fit |
|
|
99
|
+
|
|
100
|
+
### Propensity Score Matching
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from sklearn.linear_model import LogisticRegression
|
|
104
|
+
from sklearn.neighbors import NearestNeighbors
|
|
105
|
+
|
|
106
|
+
def propensity_score_match(df, treatment_col, covariates, caliper=0.05):
|
|
107
|
+
"""
|
|
108
|
+
Match treated and control units based on propensity scores.
|
|
109
|
+
"""
|
|
110
|
+
# Estimate propensity scores
|
|
111
|
+
X = df[covariates].values
|
|
112
|
+
y = df[treatment_col].values
|
|
113
|
+
|
|
114
|
+
lr = LogisticRegression(max_iter=1000, random_state=42)
|
|
115
|
+
lr.fit(X, y)
|
|
116
|
+
df['pscore'] = lr.predict_proba(X)[:, 1]
|
|
117
|
+
|
|
118
|
+
# Match using nearest neighbor within caliper
|
|
119
|
+
treated = df[df[treatment_col] == 1]
|
|
120
|
+
control = df[df[treatment_col] == 0]
|
|
121
|
+
|
|
122
|
+
nn = NearestNeighbors(n_neighbors=1, metric='euclidean')
|
|
123
|
+
nn.fit(control[['pscore']].values)
|
|
124
|
+
|
|
125
|
+
distances, indices = nn.kneighbors(treated[['pscore']].values)
|
|
126
|
+
|
|
127
|
+
# Apply caliper
|
|
128
|
+
valid = distances.flatten() < caliper
|
|
129
|
+
matched_treated = treated[valid].index.tolist()
|
|
130
|
+
matched_control = control.iloc[indices.flatten()[valid]].index.tolist()
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
'matched_treated': matched_treated,
|
|
134
|
+
'matched_control': matched_control,
|
|
135
|
+
'n_matched': sum(valid),
|
|
136
|
+
'n_unmatched': sum(~valid),
|
|
137
|
+
'balance_check': 'Run standardized mean differences on covariates'
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Experimentation Design
|
|
142
|
+
|
|
143
|
+
### A/B Testing for Research
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from scipy import stats
|
|
147
|
+
import numpy as np
|
|
148
|
+
|
|
149
|
+
def design_experiment(baseline_rate, mde, alpha=0.05, power=0.80):
|
|
150
|
+
"""
|
|
151
|
+
Calculate required sample size for a two-proportion z-test.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
baseline_rate: Current conversion/success rate
|
|
155
|
+
mde: Minimum detectable effect (absolute change)
|
|
156
|
+
alpha: Significance level
|
|
157
|
+
power: Statistical power
|
|
158
|
+
"""
|
|
159
|
+
from statsmodels.stats.power import NormalIndPower
|
|
160
|
+
effect_size = mde / np.sqrt(baseline_rate * (1 - baseline_rate))
|
|
161
|
+
analysis = NormalIndPower()
|
|
162
|
+
n = analysis.solve_power(
|
|
163
|
+
effect_size=effect_size, alpha=alpha, power=power, ratio=1.0
|
|
164
|
+
)
|
|
165
|
+
return {
|
|
166
|
+
'sample_size_per_group': int(np.ceil(n)),
|
|
167
|
+
'total_sample_size': int(np.ceil(n)) * 2,
|
|
168
|
+
'baseline_rate': baseline_rate,
|
|
169
|
+
'minimum_detectable_effect': mde,
|
|
170
|
+
'alpha': alpha,
|
|
171
|
+
'power': power
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Pre-Analysis Plan Template
|
|
176
|
+
|
|
177
|
+
Before running any experiment, document:
|
|
178
|
+
|
|
179
|
+
1. **Primary hypothesis**: One clearly stated prediction.
|
|
180
|
+
2. **Primary outcome metric**: One pre-specified metric for the main test.
|
|
181
|
+
3. **Sample size justification**: Power calculation with assumptions.
|
|
182
|
+
4. **Randomization procedure**: How units are assigned to conditions.
|
|
183
|
+
5. **Analysis method**: Exact statistical test and model specification.
|
|
184
|
+
6. **Multiple comparisons**: How secondary analyses will be corrected.
|
|
185
|
+
7. **Stopping rules**: Conditions for early termination (if applicable).
|
|
186
|
+
|
|
187
|
+
## Model Validation
|
|
188
|
+
|
|
189
|
+
### Cross-Validation Strategy
|
|
190
|
+
|
|
191
|
+
| Data Type | Recommended CV | Rationale |
|
|
192
|
+
|-----------|---------------|-----------|
|
|
193
|
+
| i.i.d. data | Stratified K-fold (K=5 or 10) | Preserves class balance |
|
|
194
|
+
| Time series | Time-series split (expanding window) | Prevents look-ahead bias |
|
|
195
|
+
| Grouped data | Group K-fold | Prevents data leakage across groups |
|
|
196
|
+
| Small dataset (n<200) | Leave-one-out or repeated K-fold | Maximizes training data |
|
|
197
|
+
| Spatial data | Spatial blocking | Prevents spatial autocorrelation leakage |
|
|
198
|
+
|
|
199
|
+
### Leakage Detection Checklist
|
|
200
|
+
|
|
201
|
+
- [ ] No future information used as features (check timestamps)
|
|
202
|
+
- [ ] No target-derived features (e.g., group means computed on full data)
|
|
203
|
+
- [ ] Train/test split performed before any preprocessing
|
|
204
|
+
- [ ] Cross-validation folds respect group structure
|
|
205
|
+
- [ ] Feature selection performed inside CV loop, not before
|
|
206
|
+
- [ ] If accuracy seems too good to be true, it probably is
|
|
207
|
+
|
|
208
|
+
## Communication and Reporting
|
|
209
|
+
|
|
210
|
+
### The Senior DS Reporting Standard
|
|
211
|
+
|
|
212
|
+
- Lead with the business/research question, not the algorithm.
|
|
213
|
+
- Report confidence intervals, not just point estimates.
|
|
214
|
+
- Show what you tried that did not work (negative results matter).
|
|
215
|
+
- Quantify uncertainty: "The model predicts X with a 95% interval of [a, b]."
|
|
216
|
+
- Be explicit about limitations and assumptions.
|
|
217
|
+
- Use visualizations that a domain expert (not a statistician) can interpret.
|
|
218
|
+
|
|
219
|
+
## References
|
|
220
|
+
|
|
221
|
+
- Angrist, J. D. & Pischke, J.-S. (2009). *Mostly Harmless Econometrics*. Princeton University Press.
|
|
222
|
+
- Cunningham, S. (2021). *Causal Inference: The Mixtape*. Yale University Press.
|
|
223
|
+
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). *The Elements of Statistical Learning* (2nd ed.). Springer.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: claude-data-analysis-guide
|
|
3
|
+
description: "Claude Code-based conversational data analysis agent"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🔬"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "wrangling"
|
|
9
|
+
keywords: ["Claude Code", "data analysis", "conversational", "pandas", "visualization", "interactive"]
|
|
10
|
+
source: "https://github.com/liangdabiao/claude-data-analysis"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Claude Data Analysis Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
A Claude Code-based data analysis agent that provides conversational data exploration and analysis. Upload datasets and ask questions in natural language — the agent writes and executes Python code for data cleaning, statistical analysis, visualization, and reporting. Leverages Claude Code's ability to read files, run code, and iterate on results.
|
|
18
|
+
|
|
19
|
+
## Setup
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
### CLAUDE.md Configuration
|
|
23
|
+
# Data Analysis Project
|
|
24
|
+
|
|
25
|
+
## Instructions
|
|
26
|
+
- Analyze data files in the data/ directory
|
|
27
|
+
- Use pandas, numpy, scipy, matplotlib, seaborn
|
|
28
|
+
- Always show data shape and dtypes first
|
|
29
|
+
- Include statistical tests where appropriate
|
|
30
|
+
- Generate publication-quality figures (300 DPI)
|
|
31
|
+
- Save outputs to output/ directory
|
|
32
|
+
|
|
33
|
+
## Conventions
|
|
34
|
+
- Use seaborn for statistical plots
|
|
35
|
+
- Report confidence intervals, not just p-values
|
|
36
|
+
- Handle missing data explicitly (report, then impute)
|
|
37
|
+
- Set random_state=42 for reproducibility
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
### Interactive Analysis Loop
|
|
44
|
+
1. "Load the experiment data from data/results.csv"
|
|
45
|
+
→ Agent reads file, shows shape, dtypes, head()
|
|
46
|
+
|
|
47
|
+
2. "How many missing values are there?"
|
|
48
|
+
→ Agent runs df.isnull().sum(), reports per column
|
|
49
|
+
|
|
50
|
+
3. "Show the distribution of response time by condition"
|
|
51
|
+
→ Agent creates violin plots, reports summary stats
|
|
52
|
+
|
|
53
|
+
4. "Is there a significant difference between groups?"
|
|
54
|
+
→ Agent runs appropriate test (t-test, ANOVA, etc.)
|
|
55
|
+
|
|
56
|
+
5. "Build a regression model predicting response time"
|
|
57
|
+
→ Agent fits model, reports coefficients, R², diagnostics
|
|
58
|
+
|
|
59
|
+
6. "Create a summary report with all findings"
|
|
60
|
+
→ Agent generates markdown report with embedded figures
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Common Analysis Patterns
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
# Data profiling
|
|
67
|
+
import pandas as pd
|
|
68
|
+
df = pd.read_csv("data/experiment.csv")
|
|
69
|
+
print(f"Shape: {df.shape}")
|
|
70
|
+
print(f"\nDtypes:\n{df.dtypes}")
|
|
71
|
+
print(f"\nMissing:\n{df.isnull().sum()}")
|
|
72
|
+
print(f"\nDescribe:\n{df.describe()}")
|
|
73
|
+
|
|
74
|
+
# Statistical comparison
|
|
75
|
+
from scipy import stats
|
|
76
|
+
group_a = df[df["condition"] == "A"]["score"]
|
|
77
|
+
group_b = df[df["condition"] == "B"]["score"]
|
|
78
|
+
t_stat, p_value = stats.ttest_ind(group_a, group_b)
|
|
79
|
+
print(f"t={t_stat:.3f}, p={p_value:.4f}")
|
|
80
|
+
|
|
81
|
+
# Visualization
|
|
82
|
+
import seaborn as sns
|
|
83
|
+
import matplotlib.pyplot as plt
|
|
84
|
+
fig, ax = plt.subplots(figsize=(8, 5))
|
|
85
|
+
sns.violinplot(data=df, x="condition", y="score", ax=ax)
|
|
86
|
+
plt.savefig("output/comparison.png", dpi=300, bbox_inches="tight")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Use Cases
|
|
90
|
+
|
|
91
|
+
1. **Experiment analysis**: Interactive analysis of lab data
|
|
92
|
+
2. **EDA**: Rapid exploration of unfamiliar datasets
|
|
93
|
+
3. **Statistical testing**: Guided hypothesis testing
|
|
94
|
+
4. **Report generation**: Analysis reports with figures
|
|
95
|
+
5. **Learning**: Interactive data science exploration
|
|
96
|
+
|
|
97
|
+
## References
|
|
98
|
+
|
|
99
|
+
- [claude-data-analysis GitHub](https://github.com/liangdabiao/claude-data-analysis)
|
|
100
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: csv-data-analyzer
|
|
3
|
+
description: "Load, explore, clean, and analyze CSV data with statistical summaries"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📊"
|
|
7
|
+
category: "analysis"
|
|
8
|
+
subcategory: "wrangling"
|
|
9
|
+
keywords: ["CSV analysis", "data exploration", "data cleaning", "statistical summary", "tabular data", "pandas"]
|
|
10
|
+
source: "https://github.com/AcademicSkills/csv-data-analyzer"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# CSV Data Analyzer
|
|
14
|
+
|
|
15
|
+
A comprehensive skill for loading, exploring, cleaning, and analyzing CSV datasets within research workflows. Designed for researchers who need to quickly understand the structure, quality, and statistical properties of tabular data before conducting deeper analysis.
|
|
16
|
+
|
|
17
|
+
## Overview
|
|
18
|
+
|
|
19
|
+
Research datasets commonly arrive as CSV files from instrument exports, survey platforms, government repositories, and collaborator handoffs. This skill provides a structured approach to the entire CSV analysis pipeline: ingestion, profiling, quality assessment, cleaning, transformation, and summary statistics. It emphasizes reproducibility by generating audit logs of every transformation applied to the raw data.
|
|
20
|
+
|
|
21
|
+
The skill supports datasets of varying complexity, from single-table survey results to multi-file longitudinal study exports with hundreds of columns. It works with standard Python data science libraries (pandas, numpy, scipy) and produces outputs suitable for inclusion in methods sections and supplementary materials.
|
|
22
|
+
|
|
23
|
+
## Data Loading and Initial Profiling
|
|
24
|
+
|
|
25
|
+
### Loading Strategies
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import pandas as pd
|
|
29
|
+
import numpy as np
|
|
30
|
+
|
|
31
|
+
def load_and_profile_csv(filepath: str, encoding: str = 'utf-8') -> dict:
|
|
32
|
+
"""
|
|
33
|
+
Load a CSV file and generate an initial data profile.
|
|
34
|
+
Handles common encoding issues and delimiter detection.
|
|
35
|
+
"""
|
|
36
|
+
# Try multiple encodings if default fails
|
|
37
|
+
encodings = [encoding, 'latin-1', 'utf-8-sig', 'cp1252']
|
|
38
|
+
df = None
|
|
39
|
+
for enc in encodings:
|
|
40
|
+
try:
|
|
41
|
+
df = pd.read_csv(filepath, encoding=enc, low_memory=False)
|
|
42
|
+
break
|
|
43
|
+
except (UnicodeDecodeError, pd.errors.ParserError):
|
|
44
|
+
continue
|
|
45
|
+
|
|
46
|
+
if df is None:
|
|
47
|
+
raise ValueError(f"Could not parse {filepath} with any supported encoding")
|
|
48
|
+
|
|
49
|
+
profile = {
|
|
50
|
+
'rows': len(df),
|
|
51
|
+
'columns': len(df.columns),
|
|
52
|
+
'memory_mb': df.memory_usage(deep=True).sum() / 1e6,
|
|
53
|
+
'dtypes': df.dtypes.value_counts().to_dict(),
|
|
54
|
+
'missing_pct': (df.isnull().sum() / len(df) * 100).to_dict(),
|
|
55
|
+
'duplicates': df.duplicated().sum(),
|
|
56
|
+
'column_names': df.columns.tolist()
|
|
57
|
+
}
|
|
58
|
+
return df, profile
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Column Type Inference
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
def infer_semantic_types(df: pd.DataFrame) -> dict:
|
|
65
|
+
"""
|
|
66
|
+
Infer semantic column types beyond pandas dtypes.
|
|
67
|
+
Detects dates, identifiers, categorical, continuous, and text columns.
|
|
68
|
+
"""
|
|
69
|
+
semantic_types = {}
|
|
70
|
+
for col in df.columns:
|
|
71
|
+
nunique = df[col].nunique()
|
|
72
|
+
ratio = nunique / len(df) if len(df) > 0 else 0
|
|
73
|
+
|
|
74
|
+
if ratio > 0.95 and df[col].dtype == 'object':
|
|
75
|
+
semantic_types[col] = 'identifier'
|
|
76
|
+
elif nunique <= 20 and df[col].dtype in ['object', 'int64']:
|
|
77
|
+
semantic_types[col] = 'categorical'
|
|
78
|
+
elif df[col].dtype in ['float64', 'int64']:
|
|
79
|
+
semantic_types[col] = 'continuous'
|
|
80
|
+
elif pd.to_datetime(df[col], errors='coerce').notna().mean() > 0.8:
|
|
81
|
+
semantic_types[col] = 'datetime'
|
|
82
|
+
else:
|
|
83
|
+
semantic_types[col] = 'text'
|
|
84
|
+
return semantic_types
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Data Cleaning Pipeline
|
|
88
|
+
|
|
89
|
+
### Systematic Cleaning Steps
|
|
90
|
+
|
|
91
|
+
1. **Remove fully empty rows and columns**: Drop rows/columns where all values are NaN.
|
|
92
|
+
2. **Standardize column names**: Convert to snake_case, remove special characters.
|
|
93
|
+
3. **Handle missing data**: Assess missingness patterns (MCAR/MAR/MNAR) before choosing imputation strategy.
|
|
94
|
+
4. **Detect and handle duplicates**: Identify exact and near-duplicates using fuzzy matching.
|
|
95
|
+
5. **Validate value ranges**: Flag values outside expected domain ranges.
|
|
96
|
+
6. **Standardize categorical labels**: Merge inconsistent spellings (e.g., "Male", "male", "M").
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
def clean_column_names(df: pd.DataFrame) -> pd.DataFrame:
|
|
100
|
+
"""Standardize column names to snake_case."""
|
|
101
|
+
import re
|
|
102
|
+
df.columns = [
|
|
103
|
+
re.sub(r'[^a-z0-9]+', '_', col.lower().strip()).strip('_')
|
|
104
|
+
for col in df.columns
|
|
105
|
+
]
|
|
106
|
+
return df
|
|
107
|
+
|
|
108
|
+
def assess_missingness(df: pd.DataFrame) -> pd.DataFrame:
|
|
109
|
+
"""Generate a missingness report for each column."""
|
|
110
|
+
report = pd.DataFrame({
|
|
111
|
+
'missing_count': df.isnull().sum(),
|
|
112
|
+
'missing_pct': (df.isnull().sum() / len(df) * 100).round(2),
|
|
113
|
+
'dtype': df.dtypes
|
|
114
|
+
})
|
|
115
|
+
report['action'] = report['missing_pct'].apply(
|
|
116
|
+
lambda x: 'drop' if x > 60 else ('impute' if x > 0 else 'ok')
|
|
117
|
+
)
|
|
118
|
+
return report.sort_values('missing_pct', ascending=False)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Statistical Summary Generation
|
|
122
|
+
|
|
123
|
+
### Descriptive Statistics
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
def generate_statistical_summary(df: pd.DataFrame) -> dict:
|
|
127
|
+
"""
|
|
128
|
+
Generate comprehensive descriptive statistics for all columns.
|
|
129
|
+
Includes measures of central tendency, dispersion, and distribution shape.
|
|
130
|
+
"""
|
|
131
|
+
numeric_cols = df.select_dtypes(include=[np.number])
|
|
132
|
+
summary = {
|
|
133
|
+
'numeric': numeric_cols.describe().T.assign(
|
|
134
|
+
skewness=numeric_cols.skew(),
|
|
135
|
+
kurtosis=numeric_cols.kurtosis(),
|
|
136
|
+
iqr=numeric_cols.quantile(0.75) - numeric_cols.quantile(0.25),
|
|
137
|
+
cv=numeric_cols.std() / numeric_cols.mean() # coefficient of variation
|
|
138
|
+
),
|
|
139
|
+
'categorical': {
|
|
140
|
+
col: df[col].value_counts().head(10).to_dict()
|
|
141
|
+
for col in df.select_dtypes(include=['object']).columns
|
|
142
|
+
},
|
|
143
|
+
'correlations': numeric_cols.corr().round(3)
|
|
144
|
+
}
|
|
145
|
+
return summary
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Normality and Distribution Testing
|
|
149
|
+
|
|
150
|
+
| Test | Use Case | Function |
|
|
151
|
+
|------|----------|----------|
|
|
152
|
+
| Shapiro-Wilk | Normality test (n < 5000) | `scipy.stats.shapiro()` |
|
|
153
|
+
| D'Agostino-Pearson | Normality test (n >= 5000) | `scipy.stats.normaltest()` |
|
|
154
|
+
| Kolmogorov-Smirnov | Compare to any distribution | `scipy.stats.kstest()` |
|
|
155
|
+
| Levene's test | Homogeneity of variance | `scipy.stats.levene()` |
|
|
156
|
+
|
|
157
|
+
## Best Practices for Reproducibility
|
|
158
|
+
|
|
159
|
+
- Always save the raw CSV separately; never overwrite original files.
|
|
160
|
+
- Log every cleaning step with timestamps in a transformation audit trail.
|
|
161
|
+
- Export cleaned datasets with a version suffix (e.g., `data_v2_cleaned.csv`).
|
|
162
|
+
- Include the cleaning script or notebook alongside the published dataset.
|
|
163
|
+
- Report the number of rows removed at each step in your methods section.
|
|
164
|
+
- Use `random_state` parameters consistently for any stochastic operations.
|
|
165
|
+
|
|
166
|
+
## References
|
|
167
|
+
|
|
168
|
+
- McKinney, W. (2022). *Python for Data Analysis* (3rd ed.). O'Reilly Media.
|
|
169
|
+
- Wickham, H. (2014). Tidy Data. *Journal of Statistical Software*, 59(10).
|
|
170
|
+
- Van den Broeck, J., et al. (2005). Data Cleaning: Detecting, Diagnosing, and Editing Data Abnormalities. *PLoS Medicine*, 2(10).
|