Pandas DataFrame templates for REDCap instruments, with stacking and upload functionality.
Project description
rcol
rcol (RedCap Uni Oldenburg) is a Python package that provides Pandas DataFrame templates for REDCap instruments with stacking and upload functionality.
Tested on: Windows, Linux, macOS | Python: 3.8, 3.9, 3.10, 3.11, 3.12, 3.13
Installation
pip install rcol
Quick Start
from rcol.instruments import fal, ehi, bdi_ii
import pandas as pd
# Use individual instruments
print(f"FAL has {len(fal)} fields")
print(f"EHI has {len(ehi)} fields")
print(f"BDI-II has {len(bdi_ii)} fields")
# Stack multiple instruments for REDCap upload
all_instruments = pd.concat([fal, ehi, bdi_ii], ignore_index=True)
print(f"Combined: {len(all_instruments)} total fields")
# Upload to REDCap (requires PyCap and API credentials)
from redcap import Project
project = Project(api_url, api_token)
project.import_metadata(all_instruments, import_format='df')
Available Instruments
fal: Fragebogen zur Allgemeinen Leistungsfähigkeit (General Performance Questionnaire)ehi: Edinburgh Handedness Inventorybdi_ii: Beck Depression Inventory IImoca: Montreal Cognitive Assessmenttmt: Trail Making Testwnss: Weinstein's Noise Sensitivity Scale (WNSS-21)
Creating Custom Instruments
You can create custom instruments or extend existing ones without contributing to the package:
import pandas as pd
from rcol.instruments import fal, ehi
from redcap import Project
# Create a custom instrument from scratch
custom_instrument = pd.DataFrame({
'field_name': ['record_id', 'custom_field_1', 'custom_field_2'],
'field_label': ['Record ID', 'Custom Field 1', 'Custom Field 2'],
'field_type': ['text', 'text', 'radio'],
'form_name': ['custom_form', 'custom_form', 'custom_form'],
'choices': ['', '', '1, Yes | 0, No']
})
# Add a new question to an existing instrument
fal_new_question = pd.DataFrame({
'field_name': ['fal_like_redcap'],
'field_label': ['Do you like REDCap?'],
'field_type': ['radio'],
'form_name': ['fal'],
'choices': ['1, Yes | 0, No']
})
fal_extended = pd.concat([fal, fal_new_question], ignore_index=True)
# Combine everything and upload to REDCap
all_instruments = pd.concat([fal_extended, ehi, custom_instrument], ignore_index=True)
project = Project(api_url, api_token)
project.import_metadata(all_instruments, import_format='df')
See tutorial_custom_instruments.py for a complete guide with all REDCap metadata fields.
Contributing a New Instrument
-
Fork this repository
-
Add your instrument data in
src/rcol/instruments.py:# Define your instrument fields my_instrument_data = [ { "field_name": "record_id", "form_name": "my_instrument", "field_type": "text", "field_label": "Record ID", # ... other REDCap metadata fields }, # ... more fields ] # Create DataFrame my_instrument = pd.DataFrame(my_instrument_data)
-
Run the instrument test suite to validate your template. The shared tests automatically pick up every
pandas.DataFrameexported fromrcol.instrumentsand check for required REDCap metadata, non-empty field names, and duplicate protection:uv run --with pytest pytest -k instrument
If you add custom validation that needs extra assertions, extend
tests/test_templates.pyaccordingly. -
Preview the documentation (optional). The MkDocs site renders the instrument tables directly from
rcol.instruments. To check the output locally:uv run --group docs mkdocs serve
-
Submit a pull request. Every PR triggers the GitHub Actions CI workflow, which runs the instrument tests across Windows, Linux, and macOS with Python 3.8-3.13. Make sure the workflow badge stays green before requesting review.
Development
# Clone and install for development
git clone https://github.com/JuliusWelzel/rcol.git
cd rcol
uv sync
# Run tests
uv run pytest
# Build package
uv build
Documentation
The documentation site is powered by MkDocs and mkdocstrings, so instrumentation
tables are rendered directly from rcol.instruments at build time.
# Serve docs locally
uv run --group docs mkdocs serve
# Build static site
uv run --group docs mkdocs build
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rcol-0.0.4.tar.gz.
File metadata
- Download URL: rcol-0.0.4.tar.gz
- Upload date:
- Size: 36.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a937c3d02f4886ff5c7e5a04169be8df58f59646820b6aff8eeff90036fa921f
|
|
| MD5 |
4dcab8d2379997d32142866888c387c8
|
|
| BLAKE2b-256 |
719fa648ccc67aa9186057266af5853225ea35cfb9a98d0c9085705c4b35b3a6
|
File details
Details for the file rcol-0.0.4-py3-none-any.whl.
File metadata
- Download URL: rcol-0.0.4-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1a9ca0ed82ce515736072c35697982b66d2ca1f2c26ed2c88ad25b29092487f
|
|
| MD5 |
484ff1016cb17c6f45974907a89f1b75
|
|
| BLAKE2b-256 |
77f98b53250accf59a55db9dda035f2befb6ce62eeee53e921553eae98b3c68d
|