Skip to main content

Pandas DataFrame templates for REDCap instruments, with stacking and upload functionality.

Project description

rcol

CI Python 3.8+ PyPI version

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 Inventory
  • bdi_ii: Beck Depression Inventory II
  • moca: Montreal Cognitive Assessment
  • tmt: Trail Making Test
  • wnss: 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

  1. Fork this repository

  2. 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)
    
  3. Run the instrument test suite to validate your template. The shared tests automatically pick up every pandas.DataFrame exported from rcol.instruments and 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.py accordingly.

  4. 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
    
  5. 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

rcol-0.0.4.tar.gz (36.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rcol-0.0.4-py3-none-any.whl (31.6 kB view details)

Uploaded Python 3

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

Hashes for rcol-0.0.4.tar.gz
Algorithm Hash digest
SHA256 a937c3d02f4886ff5c7e5a04169be8df58f59646820b6aff8eeff90036fa921f
MD5 4dcab8d2379997d32142866888c387c8
BLAKE2b-256 719fa648ccc67aa9186057266af5853225ea35cfb9a98d0c9085705c4b35b3a6

See more details on using hashes here.

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

Hashes for rcol-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a1a9ca0ed82ce515736072c35697982b66d2ca1f2c26ed2c88ad25b29092487f
MD5 484ff1016cb17c6f45974907a89f1b75
BLAKE2b-256 77f98b53250accf59a55db9dda035f2befb6ce62eeee53e921553eae98b3c68d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page