@wentorai/research-plugins 1.0.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/LICENSE +21 -0
- package/README.md +204 -0
- package/curated/analysis/README.md +64 -0
- package/curated/domains/README.md +104 -0
- package/curated/literature/README.md +53 -0
- package/curated/research/README.md +62 -0
- package/curated/tools/README.md +87 -0
- package/curated/writing/README.md +61 -0
- package/index.ts +39 -0
- package/mcp-configs/academic-db/ChatSpatial.json +17 -0
- package/mcp-configs/academic-db/academia-mcp.json +17 -0
- package/mcp-configs/academic-db/academic-paper-explorer.json +17 -0
- package/mcp-configs/academic-db/academic-search-mcp-server.json +17 -0
- package/mcp-configs/academic-db/agentinterviews-mcp.json +17 -0
- package/mcp-configs/academic-db/all-in-mcp.json +17 -0
- package/mcp-configs/academic-db/apple-health-mcp.json +17 -0
- package/mcp-configs/academic-db/arxiv-latex-mcp.json +17 -0
- package/mcp-configs/academic-db/arxiv-mcp-server.json +17 -0
- package/mcp-configs/academic-db/bgpt-mcp.json +17 -0
- package/mcp-configs/academic-db/biomcp.json +17 -0
- package/mcp-configs/academic-db/biothings-mcp.json +17 -0
- package/mcp-configs/academic-db/catalysishub-mcp-server.json +17 -0
- package/mcp-configs/academic-db/clinicaltrialsgov-mcp-server.json +17 -0
- package/mcp-configs/academic-db/deep-research-mcp.json +17 -0
- package/mcp-configs/academic-db/dicom-mcp.json +17 -0
- package/mcp-configs/academic-db/enrichr-mcp-server.json +17 -0
- package/mcp-configs/academic-db/fec-mcp-server.json +17 -0
- package/mcp-configs/academic-db/fhir-mcp-server-themomentum.json +17 -0
- package/mcp-configs/academic-db/fhir-mcp.json +19 -0
- package/mcp-configs/academic-db/gget-mcp.json +17 -0
- package/mcp-configs/academic-db/google-researcher-mcp.json +17 -0
- package/mcp-configs/academic-db/idea-reality-mcp.json +17 -0
- package/mcp-configs/academic-db/legiscan-mcp.json +19 -0
- package/mcp-configs/academic-db/lex.json +17 -0
- package/mcp-configs/ai-platform/Adaptive-Graph-of-Thoughts-MCP-server.json +17 -0
- package/mcp-configs/ai-platform/ai-counsel.json +17 -0
- package/mcp-configs/ai-platform/atlas-mcp-server.json +17 -0
- package/mcp-configs/ai-platform/counsel-mcp.json +17 -0
- package/mcp-configs/ai-platform/cross-llm-mcp.json +17 -0
- package/mcp-configs/ai-platform/gptr-mcp.json +17 -0
- package/mcp-configs/browser/decipher-research-agent.json +17 -0
- package/mcp-configs/browser/deep-research.json +17 -0
- package/mcp-configs/browser/everything-claude-code.json +17 -0
- package/mcp-configs/browser/gpt-researcher.json +17 -0
- package/mcp-configs/browser/heurist-agent-framework.json +17 -0
- package/mcp-configs/data-platform/4everland-hosting-mcp.json +17 -0
- package/mcp-configs/data-platform/context-keeper.json +17 -0
- package/mcp-configs/data-platform/context7.json +19 -0
- package/mcp-configs/data-platform/contextstream-mcp.json +17 -0
- package/mcp-configs/data-platform/email-mcp.json +17 -0
- package/mcp-configs/note-knowledge/ApeRAG.json +17 -0
- package/mcp-configs/note-knowledge/In-Memoria.json +17 -0
- package/mcp-configs/note-knowledge/agent-memory.json +17 -0
- package/mcp-configs/note-knowledge/aimemo.json +17 -0
- package/mcp-configs/note-knowledge/biel-mcp.json +19 -0
- package/mcp-configs/note-knowledge/cognee.json +17 -0
- package/mcp-configs/note-knowledge/context-awesome.json +17 -0
- package/mcp-configs/note-knowledge/context-mcp.json +17 -0
- package/mcp-configs/note-knowledge/conversation-handoff-mcp.json +17 -0
- package/mcp-configs/note-knowledge/cortex.json +17 -0
- package/mcp-configs/note-knowledge/devrag.json +17 -0
- package/mcp-configs/note-knowledge/easy-obsidian-mcp.json +17 -0
- package/mcp-configs/note-knowledge/engram.json +17 -0
- package/mcp-configs/note-knowledge/gnosis-mcp.json +17 -0
- package/mcp-configs/note-knowledge/graphlit-mcp-server.json +19 -0
- package/mcp-configs/reference-mgr/arxiv-cli.json +17 -0
- package/mcp-configs/reference-mgr/arxiv-search-mcp.json +17 -0
- package/mcp-configs/reference-mgr/chiken.json +17 -0
- package/mcp-configs/reference-mgr/claude-scholar.json +17 -0
- package/mcp-configs/reference-mgr/devonthink-mcp.json +17 -0
- package/mcp-configs/registry.json +447 -0
- package/openclaw.plugin.json +21 -0
- package/package.json +61 -0
- package/skills/analysis/dataviz/color-accessibility-guide/SKILL.md +230 -0
- package/skills/analysis/dataviz/geospatial-viz-guide/SKILL.md +218 -0
- package/skills/analysis/dataviz/interactive-viz-guide/SKILL.md +287 -0
- package/skills/analysis/dataviz/network-visualization-guide/SKILL.md +195 -0
- package/skills/analysis/dataviz/publication-figures-guide/SKILL.md +238 -0
- package/skills/analysis/dataviz/python-dataviz-guide/SKILL.md +195 -0
- package/skills/analysis/econometrics/causal-inference-guide/SKILL.md +197 -0
- package/skills/analysis/econometrics/iv-regression-guide/SKILL.md +198 -0
- package/skills/analysis/econometrics/panel-data-guide/SKILL.md +274 -0
- package/skills/analysis/econometrics/robustness-checks/SKILL.md +250 -0
- package/skills/analysis/econometrics/stata-regression/SKILL.md +117 -0
- package/skills/analysis/econometrics/time-series-guide/SKILL.md +235 -0
- package/skills/analysis/statistics/bayesian-statistics-guide/SKILL.md +221 -0
- package/skills/analysis/statistics/hypothesis-testing-guide/SKILL.md +210 -0
- package/skills/analysis/statistics/meta-analysis-guide/SKILL.md +206 -0
- package/skills/analysis/statistics/nonparametric-tests-guide/SKILL.md +221 -0
- package/skills/analysis/statistics/power-analysis-guide/SKILL.md +240 -0
- package/skills/analysis/statistics/sem-guide/SKILL.md +231 -0
- package/skills/analysis/statistics/survival-analysis-guide/SKILL.md +195 -0
- package/skills/analysis/wrangling/missing-data-handling/SKILL.md +224 -0
- package/skills/analysis/wrangling/pandas-data-wrangling/SKILL.md +242 -0
- package/skills/analysis/wrangling/questionnaire-design-guide/SKILL.md +234 -0
- package/skills/analysis/wrangling/text-mining-guide/SKILL.md +225 -0
- package/skills/domains/ai-ml/computer-vision-guide/SKILL.md +213 -0
- package/skills/domains/ai-ml/deep-learning-papers-guide/SKILL.md +200 -0
- package/skills/domains/ai-ml/llm-evaluation-guide/SKILL.md +194 -0
- package/skills/domains/ai-ml/prompt-engineering-research/SKILL.md +233 -0
- package/skills/domains/ai-ml/reinforcement-learning-guide/SKILL.md +254 -0
- package/skills/domains/ai-ml/transformer-architecture-guide/SKILL.md +233 -0
- package/skills/domains/biomedical/clinical-research-guide/SKILL.md +232 -0
- package/skills/domains/biomedical/clinicaltrials-api/SKILL.md +177 -0
- package/skills/domains/biomedical/epidemiology-guide/SKILL.md +200 -0
- package/skills/domains/biomedical/genomics-analysis-guide/SKILL.md +270 -0
- package/skills/domains/business/market-analysis-guide/SKILL.md +112 -0
- package/skills/domains/business/strategic-management-guide/SKILL.md +154 -0
- package/skills/domains/chemistry/computational-chemistry-guide/SKILL.md +266 -0
- package/skills/domains/chemistry/retrosynthesis-guide/SKILL.md +215 -0
- package/skills/domains/cs/algorithms-complexity-guide/SKILL.md +194 -0
- package/skills/domains/cs/dblp-api/SKILL.md +129 -0
- package/skills/domains/cs/software-engineering-research/SKILL.md +218 -0
- package/skills/domains/ecology/biodiversity-data-guide/SKILL.md +296 -0
- package/skills/domains/ecology/conservation-biology-guide/SKILL.md +198 -0
- package/skills/domains/ecology/gbif-api/SKILL.md +158 -0
- package/skills/domains/ecology/inaturalist-api/SKILL.md +173 -0
- package/skills/domains/economics/behavioral-economics-guide/SKILL.md +239 -0
- package/skills/domains/economics/development-economics-guide/SKILL.md +181 -0
- package/skills/domains/economics/fred-api/SKILL.md +189 -0
- package/skills/domains/education/curriculum-design-guide/SKILL.md +144 -0
- package/skills/domains/education/learning-science-guide/SKILL.md +150 -0
- package/skills/domains/finance/financial-data-analysis/SKILL.md +152 -0
- package/skills/domains/finance/quantitative-finance-guide/SKILL.md +151 -0
- package/skills/domains/geoscience/climate-science-guide/SKILL.md +158 -0
- package/skills/domains/geoscience/gis-remote-sensing-guide/SKILL.md +129 -0
- package/skills/domains/humanities/digital-humanities-guide/SKILL.md +181 -0
- package/skills/domains/humanities/philosophy-research-guide/SKILL.md +148 -0
- package/skills/domains/law/courtlistener-api/SKILL.md +213 -0
- package/skills/domains/law/legal-research-guide/SKILL.md +250 -0
- package/skills/domains/math/linear-algebra-applications/SKILL.md +227 -0
- package/skills/domains/math/numerical-methods-guide/SKILL.md +236 -0
- package/skills/domains/math/oeis-api/SKILL.md +158 -0
- package/skills/domains/pharma/clinical-pharmacology-guide/SKILL.md +165 -0
- package/skills/domains/pharma/drug-development-guide/SKILL.md +177 -0
- package/skills/domains/physics/computational-physics-guide/SKILL.md +300 -0
- package/skills/domains/physics/nasa-ads-api/SKILL.md +150 -0
- package/skills/domains/physics/quantum-computing-guide/SKILL.md +234 -0
- package/skills/domains/social-science/social-research-methods/SKILL.md +194 -0
- package/skills/domains/social-science/survey-research-guide/SKILL.md +182 -0
- package/skills/literature/discovery/citation-alert-guide/SKILL.md +154 -0
- package/skills/literature/discovery/conference-proceedings-guide/SKILL.md +142 -0
- package/skills/literature/discovery/literature-mapping-guide/SKILL.md +175 -0
- package/skills/literature/discovery/paper-tracking-guide/SKILL.md +211 -0
- package/skills/literature/discovery/rss-paper-feeds/SKILL.md +214 -0
- package/skills/literature/discovery/semantic-scholar-recs-guide/SKILL.md +164 -0
- package/skills/literature/fulltext/doaj-api/SKILL.md +120 -0
- package/skills/literature/fulltext/interlibrary-loan-guide/SKILL.md +163 -0
- package/skills/literature/fulltext/open-access-guide/SKILL.md +183 -0
- package/skills/literature/fulltext/pmc-oai-api/SKILL.md +184 -0
- package/skills/literature/fulltext/preprint-servers-guide/SKILL.md +128 -0
- package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +207 -0
- package/skills/literature/fulltext/unpaywall-api/SKILL.md +113 -0
- package/skills/literature/metadata/altmetrics-guide/SKILL.md +132 -0
- package/skills/literature/metadata/citation-network-guide/SKILL.md +236 -0
- package/skills/literature/metadata/crossref-api/SKILL.md +133 -0
- package/skills/literature/metadata/datacite-api/SKILL.md +126 -0
- package/skills/literature/metadata/doi-resolution-guide/SKILL.md +168 -0
- package/skills/literature/metadata/h-index-guide/SKILL.md +183 -0
- package/skills/literature/metadata/journal-metrics-guide/SKILL.md +188 -0
- package/skills/literature/metadata/opencitations-api/SKILL.md +128 -0
- package/skills/literature/metadata/orcid-api/SKILL.md +136 -0
- package/skills/literature/metadata/orcid-integration-guide/SKILL.md +178 -0
- package/skills/literature/search/arxiv-api/SKILL.md +95 -0
- package/skills/literature/search/biorxiv-api/SKILL.md +123 -0
- package/skills/literature/search/boolean-search-guide/SKILL.md +199 -0
- package/skills/literature/search/citation-chaining-guide/SKILL.md +148 -0
- package/skills/literature/search/database-comparison-guide/SKILL.md +100 -0
- package/skills/literature/search/europe-pmc-api/SKILL.md +120 -0
- package/skills/literature/search/google-scholar-guide/SKILL.md +182 -0
- package/skills/literature/search/mesh-terms-guide/SKILL.md +164 -0
- package/skills/literature/search/openalex-api/SKILL.md +134 -0
- package/skills/literature/search/pubmed-api/SKILL.md +130 -0
- package/skills/literature/search/scientify-literature-survey/SKILL.md +203 -0
- package/skills/literature/search/semantic-scholar-api/SKILL.md +134 -0
- package/skills/literature/search/systematic-search-strategy/SKILL.md +214 -0
- package/skills/research/automation/ai-scientist-guide/SKILL.md +228 -0
- package/skills/research/automation/data-collection-automation/SKILL.md +248 -0
- package/skills/research/automation/research-workflow-automation/SKILL.md +266 -0
- package/skills/research/deep-research/meta-synthesis-guide/SKILL.md +174 -0
- package/skills/research/deep-research/research-cog/SKILL.md +153 -0
- package/skills/research/deep-research/scoping-review-guide/SKILL.md +217 -0
- package/skills/research/deep-research/systematic-review-guide/SKILL.md +250 -0
- package/skills/research/funding/figshare-api/SKILL.md +163 -0
- package/skills/research/funding/grant-writing-guide/SKILL.md +233 -0
- package/skills/research/funding/nsf-grant-guide/SKILL.md +206 -0
- package/skills/research/funding/open-science-guide/SKILL.md +255 -0
- package/skills/research/funding/zenodo-api/SKILL.md +174 -0
- package/skills/research/methodology/action-research-guide/SKILL.md +201 -0
- package/skills/research/methodology/experimental-design-guide/SKILL.md +236 -0
- package/skills/research/methodology/grad-school-guide/SKILL.md +182 -0
- package/skills/research/methodology/grounded-theory-guide/SKILL.md +171 -0
- package/skills/research/methodology/mixed-methods-guide/SKILL.md +208 -0
- package/skills/research/methodology/qualitative-research-guide/SKILL.md +234 -0
- package/skills/research/methodology/scientify-idea-generation/SKILL.md +222 -0
- package/skills/research/paper-review/paper-reading-assistant/SKILL.md +266 -0
- package/skills/research/paper-review/peer-review-guide/SKILL.md +227 -0
- package/skills/research/paper-review/rebuttal-writing-guide/SKILL.md +185 -0
- package/skills/research/paper-review/scientify-write-review-paper/SKILL.md +209 -0
- package/skills/tools/code-exec/jupyter-notebook-guide/SKILL.md +178 -0
- package/skills/tools/code-exec/python-reproducibility-guide/SKILL.md +341 -0
- package/skills/tools/code-exec/r-reproducibility-guide/SKILL.md +236 -0
- package/skills/tools/code-exec/sandbox-execution-guide/SKILL.md +221 -0
- package/skills/tools/diagram/mermaid-diagram-guide/SKILL.md +269 -0
- package/skills/tools/diagram/plantuml-guide/SKILL.md +397 -0
- package/skills/tools/diagram/scientific-illustration-guide/SKILL.md +225 -0
- package/skills/tools/document/anystyle-api/SKILL.md +199 -0
- package/skills/tools/document/grobid-pdf-parsing/SKILL.md +294 -0
- package/skills/tools/document/markdown-academic-guide/SKILL.md +217 -0
- package/skills/tools/document/pdf-extraction-guide/SKILL.md +321 -0
- package/skills/tools/knowledge-graph/knowledge-graph-construction/SKILL.md +306 -0
- package/skills/tools/knowledge-graph/ontology-design-guide/SKILL.md +214 -0
- package/skills/tools/knowledge-graph/rag-methodology-guide/SKILL.md +325 -0
- package/skills/tools/ocr-translate/formula-recognition-guide/SKILL.md +367 -0
- package/skills/tools/ocr-translate/handwriting-recognition-guide/SKILL.md +211 -0
- package/skills/tools/ocr-translate/latex-ocr-guide/SKILL.md +204 -0
- package/skills/tools/ocr-translate/multilingual-research-guide/SKILL.md +234 -0
- package/skills/tools/scraping/academic-web-scraping/SKILL.md +326 -0
- package/skills/tools/scraping/api-data-collection-guide/SKILL.md +301 -0
- package/skills/tools/scraping/web-scraping-ethics-guide/SKILL.md +250 -0
- package/skills/writing/citation/bibtex-management-guide/SKILL.md +246 -0
- package/skills/writing/citation/citation-style-guide/SKILL.md +248 -0
- package/skills/writing/citation/reference-manager-comparison/SKILL.md +208 -0
- package/skills/writing/citation/zotero-api/SKILL.md +188 -0
- package/skills/writing/composition/abstract-writing-guide/SKILL.md +188 -0
- package/skills/writing/composition/discussion-writing-guide/SKILL.md +194 -0
- package/skills/writing/composition/introduction-writing-guide/SKILL.md +194 -0
- package/skills/writing/composition/literature-review-writing/SKILL.md +196 -0
- package/skills/writing/composition/methods-section-guide/SKILL.md +185 -0
- package/skills/writing/composition/response-to-reviewers/SKILL.md +215 -0
- package/skills/writing/composition/scientific-writing-guide/SKILL.md +152 -0
- package/skills/writing/latex/bibliography-management-guide/SKILL.md +206 -0
- package/skills/writing/latex/latex-drawing-guide/SKILL.md +234 -0
- package/skills/writing/latex/latex-ecosystem-guide/SKILL.md +240 -0
- package/skills/writing/latex/math-typesetting-guide/SKILL.md +231 -0
- package/skills/writing/latex/overleaf-collaboration-guide/SKILL.md +211 -0
- package/skills/writing/latex/tikz-diagrams-guide/SKILL.md +211 -0
- package/skills/writing/polish/academic-translation-guide/SKILL.md +175 -0
- package/skills/writing/polish/academic-writing-refiner/SKILL.md +143 -0
- package/skills/writing/polish/ai-writing-humanizer/SKILL.md +178 -0
- package/skills/writing/polish/grammar-checker-guide/SKILL.md +184 -0
- package/skills/writing/polish/plagiarism-detection-guide/SKILL.md +167 -0
- package/skills/writing/templates/beamer-presentation-guide/SKILL.md +263 -0
- package/skills/writing/templates/conference-paper-template/SKILL.md +219 -0
- package/skills/writing/templates/thesis-template-guide/SKILL.md +200 -0
- package/skills/writing/templates/thesis-writing-guide/SKILL.md +220 -0
- package/src/tools/arxiv.ts +131 -0
- package/src/tools/crossref.ts +112 -0
- package/src/tools/openalex.ts +174 -0
- package/src/tools/pubmed.ts +166 -0
- package/src/tools/semantic-scholar.ts +108 -0
- package/src/tools/unpaywall.ts +58 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: biodiversity-data-guide
|
|
3
|
+
description: "Biodiversity data access, species occurrence, and ecological tools"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "leaf"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "ecology"
|
|
9
|
+
keywords: ["biodiversity", "taxonomy", "ecology", "evolutionary biology"]
|
|
10
|
+
source: "wentor-research-plugins"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Biodiversity Data Guide
|
|
14
|
+
|
|
15
|
+
Access, analyze, and visualize biodiversity data from global databases including GBIF, iNaturalist, and GenBank for ecological and evolutionary research.
|
|
16
|
+
|
|
17
|
+
## Major Biodiversity Data Sources
|
|
18
|
+
|
|
19
|
+
| Database | Content | Records | API | Cost |
|
|
20
|
+
|----------|---------|---------|-----|------|
|
|
21
|
+
| GBIF | Species occurrence records | 2.4B+ | Yes | Free |
|
|
22
|
+
| iNaturalist | Citizen science observations | 180M+ | Yes | Free |
|
|
23
|
+
| GenBank (NCBI) | Genetic sequences | 250M+ | Yes | Free |
|
|
24
|
+
| BOLD Systems | DNA barcode records | 15M+ | Yes | Free |
|
|
25
|
+
| eBird | Bird observations | 1.3B+ | Yes | Free |
|
|
26
|
+
| IUCN Red List | Conservation status | 160,000+ | Yes | Free (with key) |
|
|
27
|
+
| OBIS | Marine biodiversity | 100M+ | Yes | Free |
|
|
28
|
+
| Catalogue of Life | Taxonomic backbone | 2M+ species | Yes | Free |
|
|
29
|
+
| TRY Plant Trait | Plant functional traits | 12M+ | Request | Free |
|
|
30
|
+
| WorldClim | Climate data (rasters) | Global | Download | Free |
|
|
31
|
+
|
|
32
|
+
## Querying GBIF (Species Occurrences)
|
|
33
|
+
|
|
34
|
+
### Python (pygbif)
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
from pygbif import species as sp
|
|
38
|
+
from pygbif import occurrences as occ
|
|
39
|
+
|
|
40
|
+
# Search for a species by name
|
|
41
|
+
name_result = sp.name_backbone(name="Panthera tigris", rank="species")
|
|
42
|
+
taxon_key = name_result["usageKey"]
|
|
43
|
+
print(f"GBIF taxon key: {taxon_key}")
|
|
44
|
+
print(f"Status: {name_result['status']}")
|
|
45
|
+
print(f"Kingdom: {name_result['kingdom']}")
|
|
46
|
+
|
|
47
|
+
# Get occurrence records
|
|
48
|
+
results = occ.search(
|
|
49
|
+
taxonKey=taxon_key,
|
|
50
|
+
hasCoordinate=True, # Only georeferenced records
|
|
51
|
+
country="IN", # India
|
|
52
|
+
limit=100,
|
|
53
|
+
year="2020,2024", # Year range
|
|
54
|
+
basisOfRecord="HUMAN_OBSERVATION"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
print(f"Total records matching: {results['count']}")
|
|
58
|
+
for record in results["results"][:5]:
|
|
59
|
+
print(f" [{record.get('year')}] {record.get('decimalLatitude'):.4f}, "
|
|
60
|
+
f"{record.get('decimalLongitude'):.4f} - {record.get('datasetName', 'N/A')}")
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### R (rgbif)
|
|
64
|
+
|
|
65
|
+
```r
|
|
66
|
+
library(rgbif)
|
|
67
|
+
library(sf)
|
|
68
|
+
library(ggplot2)
|
|
69
|
+
|
|
70
|
+
# Get occurrence data
|
|
71
|
+
tiger_key <- name_backbone(name = "Panthera tigris")$usageKey
|
|
72
|
+
|
|
73
|
+
occurrences <- occ_search(
|
|
74
|
+
taxonKey = tiger_key,
|
|
75
|
+
hasCoordinate = TRUE,
|
|
76
|
+
limit = 500,
|
|
77
|
+
year = "2020,2024",
|
|
78
|
+
basisOfRecord = "HUMAN_OBSERVATION"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Convert to spatial data
|
|
82
|
+
occ_df <- occurrences$data
|
|
83
|
+
coords <- occ_df[, c("decimalLongitude", "decimalLatitude")]
|
|
84
|
+
occ_sf <- st_as_sf(coords, coords = c("decimalLongitude", "decimalLatitude"),
|
|
85
|
+
crs = 4326)
|
|
86
|
+
|
|
87
|
+
# Map occurrences
|
|
88
|
+
world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf")
|
|
89
|
+
ggplot() +
|
|
90
|
+
geom_sf(data = world, fill = "grey90") +
|
|
91
|
+
geom_sf(data = occ_sf, color = "red", size = 1, alpha = 0.5) +
|
|
92
|
+
coord_sf(xlim = c(60, 150), ylim = c(-10, 50)) +
|
|
93
|
+
labs(title = "Panthera tigris occurrences (2020-2024)") +
|
|
94
|
+
theme_minimal()
|
|
95
|
+
ggsave("tiger_map.pdf", width = 10, height = 6)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Species Distribution Modeling
|
|
99
|
+
|
|
100
|
+
### MaxEnt Workflow
|
|
101
|
+
|
|
102
|
+
```r
|
|
103
|
+
library(dismo)
|
|
104
|
+
library(raster)
|
|
105
|
+
|
|
106
|
+
# 1. Get occurrence data
|
|
107
|
+
occ_data <- occ_search(taxonKey = tiger_key, hasCoordinate = TRUE,
|
|
108
|
+
limit = 1000)$data
|
|
109
|
+
occ_points <- occ_data[, c("decimalLongitude", "decimalLatitude")]
|
|
110
|
+
occ_points <- na.omit(occ_points)
|
|
111
|
+
|
|
112
|
+
# 2. Get environmental predictors (WorldClim bioclimatic variables)
|
|
113
|
+
bioclim <- getData("worldclim", var = "bio", res = 10)
|
|
114
|
+
# bio1 = Annual Mean Temperature
|
|
115
|
+
# bio12 = Annual Precipitation
|
|
116
|
+
# bio4 = Temperature Seasonality
|
|
117
|
+
# ... (19 bioclimatic variables total)
|
|
118
|
+
|
|
119
|
+
# 3. Extract environmental values at occurrence points
|
|
120
|
+
env_values <- extract(bioclim, occ_points)
|
|
121
|
+
|
|
122
|
+
# 4. Generate background (pseudo-absence) points
|
|
123
|
+
bg_points <- randomPoints(bioclim, n = 10000)
|
|
124
|
+
|
|
125
|
+
# 5. Fit MaxEnt model
|
|
126
|
+
me_model <- maxent(bioclim, occ_points, a = bg_points,
|
|
127
|
+
args = c("betamultiplier=1.5",
|
|
128
|
+
"responsecurves=true"))
|
|
129
|
+
|
|
130
|
+
# 6. Predict habitat suitability
|
|
131
|
+
prediction <- predict(me_model, bioclim)
|
|
132
|
+
plot(prediction, main = "Predicted Habitat Suitability")
|
|
133
|
+
points(occ_points, pch = 16, cex = 0.5)
|
|
134
|
+
|
|
135
|
+
# 7. Evaluate model
|
|
136
|
+
eval_result <- evaluate(me_model, p = occ_points, a = bg_points,
|
|
137
|
+
x = bioclim)
|
|
138
|
+
print(paste("AUC:", round(eval_result@auc, 3)))
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Phylogenetic Analysis
|
|
142
|
+
|
|
143
|
+
### Building a Phylogeny
|
|
144
|
+
|
|
145
|
+
```r
|
|
146
|
+
library(ape)
|
|
147
|
+
library(phytools)
|
|
148
|
+
|
|
149
|
+
# Read alignment (FASTA format)
|
|
150
|
+
alignment <- read.FASTA("aligned_sequences.fasta")
|
|
151
|
+
|
|
152
|
+
# Distance-based tree (Neighbor-Joining)
|
|
153
|
+
dist_matrix <- dist.dna(alignment, model = "TN93")
|
|
154
|
+
nj_tree <- nj(dist_matrix)
|
|
155
|
+
|
|
156
|
+
# Root the tree
|
|
157
|
+
rooted_tree <- root(nj_tree, outgroup = "outgroup_species")
|
|
158
|
+
|
|
159
|
+
# Plot phylogeny
|
|
160
|
+
plot(rooted_tree, type = "phylogram", cex = 0.8)
|
|
161
|
+
axisPhylo()
|
|
162
|
+
|
|
163
|
+
# Maximum likelihood tree (using phangorn)
|
|
164
|
+
library(phangorn)
|
|
165
|
+
data_phyDat <- phyDat(alignment, type = "DNA")
|
|
166
|
+
ml_tree <- pml_bb(data_phyDat, model = "GTR+G+I",
|
|
167
|
+
rearrangement = "NNI")
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Comparative Methods
|
|
171
|
+
|
|
172
|
+
```r
|
|
173
|
+
library(caper)
|
|
174
|
+
|
|
175
|
+
# Phylogenetic independent contrasts
|
|
176
|
+
# Test whether body mass predicts home range size
|
|
177
|
+
# while accounting for phylogenetic relatedness
|
|
178
|
+
|
|
179
|
+
trait_data <- data.frame(
|
|
180
|
+
species = c("Sp_A", "Sp_B", "Sp_C", "Sp_D"),
|
|
181
|
+
body_mass = c(5.2, 12.1, 3.8, 45.0),
|
|
182
|
+
home_range = c(10, 25, 8, 120)
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
# Create comparative data object
|
|
186
|
+
comp_data <- comparative.data(
|
|
187
|
+
phy = rooted_tree,
|
|
188
|
+
data = trait_data,
|
|
189
|
+
names.col = species,
|
|
190
|
+
vcv = TRUE
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
# Phylogenetic Generalized Least Squares (PGLS)
|
|
194
|
+
pgls_model <- pgls(log(home_range) ~ log(body_mass),
|
|
195
|
+
data = comp_data,
|
|
196
|
+
lambda = "ML") # Estimate Pagel's lambda
|
|
197
|
+
summary(pgls_model)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Ecological Data Analysis
|
|
201
|
+
|
|
202
|
+
### Diversity Metrics
|
|
203
|
+
|
|
204
|
+
```python
|
|
205
|
+
import numpy as np
|
|
206
|
+
from scipy.stats import entropy
|
|
207
|
+
|
|
208
|
+
def calculate_diversity(abundance_vector):
|
|
209
|
+
"""Calculate common biodiversity metrics."""
|
|
210
|
+
n = np.array(abundance_vector)
|
|
211
|
+
N = n.sum()
|
|
212
|
+
p = n / N # Relative abundances
|
|
213
|
+
p = p[p > 0] # Remove zeros
|
|
214
|
+
|
|
215
|
+
return {
|
|
216
|
+
"species_richness": len(n[n > 0]),
|
|
217
|
+
"shannon_H": entropy(p, base=np.e),
|
|
218
|
+
"simpson_D": 1 - np.sum(p**2),
|
|
219
|
+
"evenness_J": entropy(p, base=np.e) / np.log(len(p)),
|
|
220
|
+
"fisher_alpha": estimate_fisher_alpha(n),
|
|
221
|
+
"total_abundance": int(N)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
def estimate_fisher_alpha(n):
|
|
225
|
+
"""Estimate Fisher's alpha diversity parameter."""
|
|
226
|
+
from scipy.optimize import brentq
|
|
227
|
+
S = len(n[n > 0])
|
|
228
|
+
N = n.sum()
|
|
229
|
+
def equation(alpha):
|
|
230
|
+
return alpha * np.log(1 + N/alpha) - S
|
|
231
|
+
try:
|
|
232
|
+
return brentq(equation, 0.1, 1000)
|
|
233
|
+
except ValueError:
|
|
234
|
+
return np.nan
|
|
235
|
+
|
|
236
|
+
# Example: Bird community survey
|
|
237
|
+
abundances = [45, 23, 12, 8, 5, 3, 2, 1, 1]
|
|
238
|
+
metrics = calculate_diversity(abundances)
|
|
239
|
+
for key, val in metrics.items():
|
|
240
|
+
print(f" {key}: {val:.4f}" if isinstance(val, float) else f" {key}: {val}")
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Community Analysis
|
|
244
|
+
|
|
245
|
+
```r
|
|
246
|
+
library(vegan)
|
|
247
|
+
|
|
248
|
+
# Species abundance matrix (sites x species)
|
|
249
|
+
community <- matrix(c(
|
|
250
|
+
10, 5, 3, 0, 1,
|
|
251
|
+
8, 12, 0, 2, 3,
|
|
252
|
+
0, 1, 15, 8, 0,
|
|
253
|
+
2, 0, 12, 10, 1
|
|
254
|
+
), nrow = 4, byrow = TRUE,
|
|
255
|
+
dimnames = list(paste0("Site", 1:4), paste0("Sp", 1:5)))
|
|
256
|
+
|
|
257
|
+
# Alpha diversity
|
|
258
|
+
diversity(community, index = "shannon") # Shannon H
|
|
259
|
+
diversity(community, index = "simpson") # Simpson 1-D
|
|
260
|
+
|
|
261
|
+
# Beta diversity (Bray-Curtis dissimilarity)
|
|
262
|
+
bc_dist <- vegdist(community, method = "bray")
|
|
263
|
+
|
|
264
|
+
# NMDS ordination
|
|
265
|
+
nmds <- metaMDS(community, distance = "bray", k = 2)
|
|
266
|
+
plot(nmds, type = "t")
|
|
267
|
+
|
|
268
|
+
# PERMANOVA (testing group differences)
|
|
269
|
+
env_data <- data.frame(habitat = c("forest", "forest", "grassland", "grassland"))
|
|
270
|
+
adonis2(community ~ habitat, data = env_data, method = "bray")
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Data Standards and Best Practices
|
|
274
|
+
|
|
275
|
+
### Darwin Core Standard
|
|
276
|
+
|
|
277
|
+
Darwin Core (DwC) is the standard schema for biodiversity data exchange:
|
|
278
|
+
|
|
279
|
+
| Term | Description | Example |
|
|
280
|
+
|------|-------------|---------|
|
|
281
|
+
| `scientificName` | Full taxonomic name | "Panthera tigris (Linnaeus, 1758)" |
|
|
282
|
+
| `decimalLatitude` | Latitude in decimal degrees | 27.1751 |
|
|
283
|
+
| `decimalLongitude` | Longitude in decimal degrees | 78.0421 |
|
|
284
|
+
| `eventDate` | Date of observation | "2024-03-15" |
|
|
285
|
+
| `basisOfRecord` | Type of record | "HUMAN_OBSERVATION" |
|
|
286
|
+
| `coordinateUncertaintyInMeters` | Spatial precision | 100 |
|
|
287
|
+
| `institutionCode` | Data provider | "iNaturalist" |
|
|
288
|
+
|
|
289
|
+
### Data Quality Checks
|
|
290
|
+
|
|
291
|
+
1. **Coordinate validation**: Flag points in oceans for terrestrial species (and vice versa)
|
|
292
|
+
2. **Taxonomic verification**: Match names against Catalogue of Life or GBIF backbone
|
|
293
|
+
3. **Temporal consistency**: Remove records with impossible dates
|
|
294
|
+
4. **Duplicate detection**: Remove spatial and temporal duplicates
|
|
295
|
+
5. **Environmental outliers**: Flag occurrences in climatically unsuitable areas
|
|
296
|
+
6. **Sampling bias correction**: Use spatial thinning or bias files in SDMs
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: conservation-biology-guide
|
|
3
|
+
description: "Apply conservation biology methods, databases, and assessment tools"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "deciduous_tree"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "ecology"
|
|
9
|
+
keywords: ["conservation biology", "biodiversity", "IUCN Red List", "species assessment", "habitat modeling", "wildlife"]
|
|
10
|
+
source: "wentor-research-plugins"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Conservation Biology Guide
|
|
14
|
+
|
|
15
|
+
A skill for conducting conservation biology research, covering species assessment methods, habitat modeling, population viability analysis, key biodiversity databases, and frameworks for conservation prioritization.
|
|
16
|
+
|
|
17
|
+
## Species Assessment and Red List
|
|
18
|
+
|
|
19
|
+
### IUCN Red List Categories
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Extinction Risk Categories (from highest to lowest):
|
|
23
|
+
|
|
24
|
+
EX - Extinct
|
|
25
|
+
EW - Extinct in the Wild
|
|
26
|
+
CR - Critically Endangered
|
|
27
|
+
EN - Endangered
|
|
28
|
+
VU - Vulnerable
|
|
29
|
+
NT - Near Threatened
|
|
30
|
+
LC - Least Concern
|
|
31
|
+
DD - Data Deficient
|
|
32
|
+
NE - Not Evaluated
|
|
33
|
+
|
|
34
|
+
Classification criteria (any one triggers the category):
|
|
35
|
+
A: Population size reduction
|
|
36
|
+
B: Geographic range (extent of occurrence, area of occupancy)
|
|
37
|
+
C: Small population size and decline
|
|
38
|
+
D: Very small or restricted population
|
|
39
|
+
E: Quantitative extinction probability analysis
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Querying the IUCN API
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
import os
|
|
46
|
+
import json
|
|
47
|
+
import urllib.request
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def get_species_assessment(species_name: str) -> dict:
|
|
51
|
+
"""
|
|
52
|
+
Retrieve IUCN Red List assessment for a species.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
species_name: Scientific name (e.g., 'Panthera tigris')
|
|
56
|
+
"""
|
|
57
|
+
api_token = os.environ["IUCN_API_TOKEN"]
|
|
58
|
+
encoded_name = urllib.parse.quote(species_name)
|
|
59
|
+
url = f"https://apiv3.iucnredlist.org/api/v3/species/{encoded_name}?token={api_token}"
|
|
60
|
+
|
|
61
|
+
req = urllib.request.Request(url)
|
|
62
|
+
response = urllib.request.urlopen(req)
|
|
63
|
+
data = json.loads(response.read())
|
|
64
|
+
|
|
65
|
+
if data.get("result"):
|
|
66
|
+
species = data["result"][0]
|
|
67
|
+
return {
|
|
68
|
+
"scientific_name": species.get("scientific_name"),
|
|
69
|
+
"common_name": species.get("main_common_name"),
|
|
70
|
+
"category": species.get("category"),
|
|
71
|
+
"population_trend": species.get("population_trend"),
|
|
72
|
+
"assessment_date": species.get("assessment_date"),
|
|
73
|
+
"criteria": species.get("criteria")
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return {"error": "Species not found in IUCN Red List"}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Habitat Modeling
|
|
80
|
+
|
|
81
|
+
### Species Distribution Models (SDMs)
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
def sdm_workflow(occurrence_data: list[tuple],
|
|
85
|
+
environmental_layers: list[str],
|
|
86
|
+
method: str = "maxent") -> dict:
|
|
87
|
+
"""
|
|
88
|
+
Outline a species distribution modeling workflow.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
occurrence_data: List of (latitude, longitude) tuples
|
|
92
|
+
environmental_layers: List of environmental raster file paths
|
|
93
|
+
method: Modeling method (maxent, glm, rf, boosted_regression)
|
|
94
|
+
"""
|
|
95
|
+
return {
|
|
96
|
+
"data_preparation": {
|
|
97
|
+
"occurrences": len(occurrence_data),
|
|
98
|
+
"environmental_variables": len(environmental_layers),
|
|
99
|
+
"steps": [
|
|
100
|
+
"Clean occurrence records (remove duplicates, spatial outliers)",
|
|
101
|
+
"Thin records to reduce spatial autocorrelation (1 per grid cell)",
|
|
102
|
+
"Generate pseudo-absences or background points",
|
|
103
|
+
"Extract environmental values at occurrence/absence points",
|
|
104
|
+
"Check for multicollinearity (VIF < 10)"
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
"modeling": {
|
|
108
|
+
"method": method,
|
|
109
|
+
"methods_available": {
|
|
110
|
+
"maxent": "Maximum entropy (presence-only, widely used)",
|
|
111
|
+
"glm": "Generalized linear model (presence-absence)",
|
|
112
|
+
"rf": "Random forest (handles non-linearities)",
|
|
113
|
+
"boosted_regression": "BRT (good predictive performance)",
|
|
114
|
+
"ensemble": "Combine multiple methods for robustness"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"validation": {
|
|
118
|
+
"metrics": ["AUC-ROC", "TSS (True Skill Statistic)", "Boyce Index"],
|
|
119
|
+
"methods": [
|
|
120
|
+
"k-fold cross-validation",
|
|
121
|
+
"Spatial block cross-validation (reduces spatial autocorrelation bias)",
|
|
122
|
+
"Independent validation dataset (ideal)"
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"projection": {
|
|
126
|
+
"current": "Map current suitable habitat",
|
|
127
|
+
"future": "Project under climate change scenarios (SSP1-2.6, SSP5-8.5)",
|
|
128
|
+
"note": "Report uncertainty across climate models and scenarios"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Population Viability Analysis (PVA)
|
|
134
|
+
|
|
135
|
+
### Estimating Extinction Risk
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
PVA simulates population dynamics to estimate extinction probability
|
|
139
|
+
over a given time horizon.
|
|
140
|
+
|
|
141
|
+
Key inputs:
|
|
142
|
+
- Current population size and structure (age/stage)
|
|
143
|
+
- Vital rates: survival, fecundity (with variance)
|
|
144
|
+
- Carrying capacity and density dependence
|
|
145
|
+
- Environmental and demographic stochasticity
|
|
146
|
+
- Catastrophe frequency and severity
|
|
147
|
+
- Genetic factors (inbreeding depression)
|
|
148
|
+
|
|
149
|
+
Common software:
|
|
150
|
+
- Vortex: Individual-based PVA simulation
|
|
151
|
+
- RAMAS GIS: Spatially explicit PVA
|
|
152
|
+
- R packages: popbio, lefko3, Compadre for matrix models
|
|
153
|
+
|
|
154
|
+
Outputs:
|
|
155
|
+
- Probability of extinction over T years
|
|
156
|
+
- Expected minimum population size
|
|
157
|
+
- Population growth rate (lambda) and its variance
|
|
158
|
+
- Sensitivity of persistence to management actions
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Key Databases
|
|
162
|
+
|
|
163
|
+
### Biodiversity Data Sources
|
|
164
|
+
|
|
165
|
+
| Database | Content | Access |
|
|
166
|
+
|----------|---------|--------|
|
|
167
|
+
| GBIF | 2+ billion species occurrence records | Free (gbif.org) |
|
|
168
|
+
| IUCN Red List | Species assessments and distributions | API + download |
|
|
169
|
+
| BIEN | Plant occurrence and trait data (Americas) | Free (biendata.org) |
|
|
170
|
+
| eBird | Bird observations worldwide | Free (ebird.org) |
|
|
171
|
+
| Protected Planet (WDPA) | Global protected area boundaries | Free (protectedplanet.net) |
|
|
172
|
+
| WorldClim | Current and future climate layers | Free (worldclim.org) |
|
|
173
|
+
| CHELSA | High-resolution climate data | Free (chelsa-climate.org) |
|
|
174
|
+
| Global Forest Watch | Forest cover change | Free (globalforestwatch.org) |
|
|
175
|
+
|
|
176
|
+
## Conservation Prioritization
|
|
177
|
+
|
|
178
|
+
### Frameworks for Decision-Making
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
Systematic Conservation Planning (Margules & Pressey):
|
|
182
|
+
1. Compile data on biodiversity features and their distributions
|
|
183
|
+
2. Set conservation targets for each feature
|
|
184
|
+
3. Review existing protected area coverage
|
|
185
|
+
4. Select additional areas using optimization (e.g., Marxan, Zonation)
|
|
186
|
+
5. Implement and manage conservation actions
|
|
187
|
+
6. Monitor outcomes and adapt
|
|
188
|
+
|
|
189
|
+
Key principles:
|
|
190
|
+
- Representativeness: All species/habitats should be represented
|
|
191
|
+
- Complementarity: Each new area should add maximum new coverage
|
|
192
|
+
- Efficiency: Minimize cost while meeting targets
|
|
193
|
+
- Connectivity: Corridors link protected areas
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Reporting Conservation Research
|
|
197
|
+
|
|
198
|
+
Report species names with taxonomic authority and reference to the taxonomic standard used (e.g., ITIS, Catalogue of Life). Deposit occurrence data in GBIF. Follow the Darwin Core standard for biodiversity data. Use IUCN criteria language when discussing threat status. Clearly state conservation implications and management recommendations, as conservation biology is an applied and mission-driven discipline.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gbif-api
|
|
3
|
+
description: "Global biodiversity data API for species occurrences and datasets"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🔍"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "ecology"
|
|
9
|
+
keywords: ["ecology", "biodiversity", "taxonomy", "environmental science"]
|
|
10
|
+
source: "https://www.gbif.org/developer/summary"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# GBIF API Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
The Global Biodiversity Information Facility (GBIF) is an international network and data infrastructure funded by governments worldwide, aimed at providing open access to biodiversity data. GBIF aggregates hundreds of millions of species occurrence records from natural history collections, citizen science platforms, monitoring networks, and published literature across the globe.
|
|
18
|
+
|
|
19
|
+
The GBIF API provides programmatic access to this vast repository of biodiversity data. Researchers can search for species occurrences by taxonomy, geography, time period, and dataset. The API also supports taxonomic name matching, dataset discovery, and species profile lookups. It serves as a foundational resource for ecological research, conservation planning, biogeography, and environmental impact assessments.
|
|
20
|
+
|
|
21
|
+
Ecologists, conservation biologists, biogeographers, and environmental scientists rely on the GBIF API to retrieve georeferenced occurrence data for species distribution modeling, climate change impact analysis, invasive species tracking, and biodiversity hotspot identification. The data is freely available under open data licenses.
|
|
22
|
+
|
|
23
|
+
## Authentication
|
|
24
|
+
|
|
25
|
+
No authentication required for read access. The GBIF API is publicly accessible without any API key or token. All search and retrieval endpoints are open. User authentication is only required for data publishing operations (creating datasets and uploading occurrences), which requires a GBIF account.
|
|
26
|
+
|
|
27
|
+
## Core Endpoints
|
|
28
|
+
|
|
29
|
+
### occurrence/search: Search Species Occurrences
|
|
30
|
+
|
|
31
|
+
Search for georeferenced biodiversity observation and specimen records across all GBIF-indexed datasets.
|
|
32
|
+
|
|
33
|
+
- **URL**: `GET https://api.gbif.org/v1/occurrence/search`
|
|
34
|
+
- **Parameters**:
|
|
35
|
+
|
|
36
|
+
| Parameter | Type | Required | Description |
|
|
37
|
+
|-----------------|--------|----------|------------------------------------------------------|
|
|
38
|
+
| q | string | No | Full-text search query |
|
|
39
|
+
| taxonKey | int | No | GBIF backbone taxonomy key |
|
|
40
|
+
| scientificName | string | No | Scientific name to filter by |
|
|
41
|
+
| country | string | No | ISO 3166-1 alpha-2 country code |
|
|
42
|
+
| hasCoordinate | bool | No | Filter for georeferenced records only |
|
|
43
|
+
| year | string | No | Year or range (e.g., `2020,2024`) |
|
|
44
|
+
| limit | int | No | Number of results (default 20, max 300) |
|
|
45
|
+
| offset | int | No | Pagination offset |
|
|
46
|
+
|
|
47
|
+
- **Example**:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
curl "https://api.gbif.org/v1/occurrence/search?scientificName=Panthera+tigris&hasCoordinate=true&limit=10"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- **Response**: Returns `count` (total matches), `results` array with `key`, `scientificName`, `decimalLatitude`, `decimalLongitude`, `country`, `basisOfRecord`, `eventDate`, `datasetKey`, `publishingOrgKey`, and `media` links.
|
|
54
|
+
|
|
55
|
+
### species/match: Taxonomic Name Matching
|
|
56
|
+
|
|
57
|
+
Match a species name against the GBIF backbone taxonomy to resolve canonical names and get taxonomy keys.
|
|
58
|
+
|
|
59
|
+
- **URL**: `GET https://api.gbif.org/v1/species/match`
|
|
60
|
+
- **Parameters**:
|
|
61
|
+
|
|
62
|
+
| Parameter | Type | Required | Description |
|
|
63
|
+
|-----------|--------|----------|------------------------------------------|
|
|
64
|
+
| name | string | Yes | Scientific name to match |
|
|
65
|
+
| kingdom | string | No | Kingdom filter for disambiguation |
|
|
66
|
+
| strict | bool | No | If true, only return exact matches |
|
|
67
|
+
|
|
68
|
+
- **Example**:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
curl "https://api.gbif.org/v1/species/match?name=Homo+sapiens"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
- **Response**: Returns `usageKey`, `scientificName`, `canonicalName`, `rank`, `status`, `kingdom`, `phylum`, `class`, `order`, `family`, `genus`, `species`, `confidence` score, and `matchType`.
|
|
75
|
+
|
|
76
|
+
### dataset: Discover Datasets
|
|
77
|
+
|
|
78
|
+
Search for and retrieve metadata about GBIF-indexed datasets from publishers worldwide.
|
|
79
|
+
|
|
80
|
+
- **URL**: `GET https://api.gbif.org/v1/dataset`
|
|
81
|
+
- **Parameters**:
|
|
82
|
+
|
|
83
|
+
| Parameter | Type | Required | Description |
|
|
84
|
+
|-----------------|--------|----------|-------------------------------------------------|
|
|
85
|
+
| q | string | No | Full-text search query |
|
|
86
|
+
| type | string | No | Dataset type: `OCCURRENCE`, `CHECKLIST`, etc. |
|
|
87
|
+
| publishingOrg | string | No | Publishing organization UUID |
|
|
88
|
+
| limit | int | No | Number of results (default 20, max 1000) |
|
|
89
|
+
| offset | int | No | Pagination offset |
|
|
90
|
+
|
|
91
|
+
- **Example**:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
curl "https://api.gbif.org/v1/dataset?q=bird+monitoring&type=OCCURRENCE&limit=5"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
- **Response**: Returns `count`, `results` array with `key`, `title`, `description`, `type`, `publishingOrganizationKey`, `license`, `recordCount`, and `endpoints`.
|
|
98
|
+
|
|
99
|
+
## Rate Limits
|
|
100
|
+
|
|
101
|
+
No formal rate limits are enforced on the GBIF API. However, GBIF recommends responsible use patterns. Large data downloads (millions of records) should use the asynchronous download API at `https://api.gbif.org/v1/occurrence/download/request` rather than paginating through the search endpoint. The search endpoint is limited to 100,000 records maximum per query via pagination.
|
|
102
|
+
|
|
103
|
+
## Common Patterns
|
|
104
|
+
|
|
105
|
+
### Species Distribution Mapping
|
|
106
|
+
|
|
107
|
+
Retrieve georeferenced occurrence data for species distribution modeling:
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
import requests
|
|
111
|
+
|
|
112
|
+
params = {
|
|
113
|
+
"taxonKey": 2480498, # Panthera tigris
|
|
114
|
+
"hasCoordinate": True,
|
|
115
|
+
"limit": 300
|
|
116
|
+
}
|
|
117
|
+
resp = requests.get("https://api.gbif.org/v1/occurrence/search", params=params)
|
|
118
|
+
data = resp.json()
|
|
119
|
+
|
|
120
|
+
coordinates = [(r["decimalLongitude"], r["decimalLatitude"])
|
|
121
|
+
for r in data["results"]
|
|
122
|
+
if "decimalLongitude" in r and "decimalLatitude" in r]
|
|
123
|
+
|
|
124
|
+
print(f"Retrieved {len(coordinates)} georeferenced occurrences of {data['results'][0]['scientificName']}")
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Taxonomic Name Resolution Pipeline
|
|
128
|
+
|
|
129
|
+
Resolve a list of species names against the GBIF backbone taxonomy:
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
import requests
|
|
133
|
+
|
|
134
|
+
names = ["Homo sapiens", "Canis lupus", "Quercus robur", "Drosophila melanogaster"]
|
|
135
|
+
|
|
136
|
+
for name in names:
|
|
137
|
+
resp = requests.get("https://api.gbif.org/v1/species/match", params={"name": name})
|
|
138
|
+
match = resp.json()
|
|
139
|
+
print(f"{name} -> {match['canonicalName']} (key: {match['usageKey']}, confidence: {match['confidence']})")
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Bulk Occurrence Download
|
|
143
|
+
|
|
144
|
+
For large-scale analyses requiring millions of records, use the asynchronous download API:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
curl -X POST "https://api.gbif.org/v1/occurrence/download/request" \
|
|
148
|
+
-H "Content-Type: application/json" \
|
|
149
|
+
-u username:password \
|
|
150
|
+
-d '{"creator":"username","predicate":{"type":"equals","key":"TAXON_KEY","value":"2480498"}}'
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## References
|
|
154
|
+
|
|
155
|
+
- Official API documentation: https://www.gbif.org/developer/summary
|
|
156
|
+
- GBIF occurrence search API: https://www.gbif.org/developer/occurrence
|
|
157
|
+
- GBIF species API: https://www.gbif.org/developer/species
|
|
158
|
+
- GBIF data use guide: https://www.gbif.org/data-use
|