Package: pypmi
PyPMIThis package provides a Python interface for working with data from theParkinson's Progression Markers Initiative(PPMI).Installation and setupThis package requires Python >= 3.6.
If you have the correct version of Python installed, you can install this package by opening a terminal and running the following:gitclonehttps://github.com/rmarkello/pypmi.gitcdpypmi
pythonsetup.pyinstallSome of the functionality of this package—primarily, the functions to work with neuroimaging data—also requires the use ofDocker.OverviewThe PPMI is an ongoing longitudinal study that begin in early 2010 with the primary goal of identifying biomarkers of Parkinson's disease (PD) progression.
To date, the PPMI has collected data from over 400 individuals with de novo PD and nearly 200 age-matched healthy participants, in addition to large cohorts of individuals genetically at-risk for PD.
Data, made available on thePPMI website, include comphrensive clinical-behavioral assessments, biological assays, single-photon emission computed tomography (SPECT) images, and magnetic resonance imaging (MRI) scans.While accessing this data is straightforward (researchers must simply sign a data usage agreement and provide information on the purpose of their research), the sheer amount of data made available can be quite overwhelming to work with.
Thus, the primary goal of this package is to provide a Python interface to making working with the data provided by the PPMI easier.
While this project is still very muchunder development, it is neverthless functional!
Most useful may be the functions accesible by directly importingpypmi, which help wrangle the litany of raw CSV files provided by the PPMI, and inpypmi.bids, which helps convert raw neuroimaging data from the PPMI intoBIDS format.I hope to continue adding useful features to this package as I keep working with the data, but take a look below atdevelopment and getting involvedif you're interested in contributing, yourself!UsageOnce you have access to thePPMI database, log in to the database and follow these instructions:Select "Download" from the navigation bar at the topSelect "Study Data" from the options that appear in the navigation barSelect "ALL" at the bottom of the left-hand navigation bar on the new pageClick "Select ALL tabular data (csv) format" and then press "Download>>" in the top right hand corner of the pageUnzip the downloaded directory and save it somewhere on your computerAlternatively, you can use thepypmiAPI to download the data programatically:>>>importpypmi>>>pypmi.fetch_studydata('all',user='username',password='password')By default, the data will be downloaded to your current directory making it easy to load them in the future, but you can optionally provide apathargument topypmi.fetch_studydata()to specify where you would like the data to go.
(Alternatively, you can set an environmental variable$PPMI_PATHto specify where they should be downloaded to; this will be used ifpathis not specified.)Once you have the data downloaded you can load some of it as atidypandas.DataFrame:>>>behavior=pypmi.load_behavior()>>>behavior.columnsIndex(['participant','visit','date','benton','epworth','gds','hvlt_recall','hvlt_recognition','hvlt_retention','lns','moca','pigd','quip','rbd','scopa_aut','se_adl','semantic_fluency','stai_state','stai_trait','symbol_digit','systolic_bp_drop','tremor','updrs_i','updrs_ii','updrs_iii','updrs_iii_a','updrs_iv','upsit'],dtype='object')The call topypmi.load_behavior()may take a few seconds to run—there's a lot of data to import!If we want to query the data with regards to diagnosis it might be useful to load in some demographic information:>>>demographics=pypmi.load_demographics()>>>demographics.columnsIndex(['participant','diagnosis','date_birth','date_diagnosis','date_enroll','status','family_history','age','gender','race','site','handedness','education'],dtype='object')Now we can perform some interesting queries!
As an example, let's just ask how many individuals with Parkinson's disease have a baseline UPDRS III score.
We'll have to use information from both data frames to answer the question:>>>importpandasaspd>>>updrs=(behavior.query('visit == "BL" & ~updrs_iii.isna()')....get(['participant','updrs_iii']))>>>parkinsons=demographics.query('diagnosis == "pd"').get('participant')>>>len(pd.merge(parkinsons,updrs,on='participant'))423And the same for healthy individuals:>>>healthy=demographics.query('diagnosis == "hc"').get('participant')>>>len(pd.merge(healthy,updrs))195There's a lot of power gained in leveraging the pandas DataFrame objects, so take a look at thepandas documentationto see what more you can do!
Also be sure to check out thepypmidocumentationfor more information.Development and getting involvedThis package has largely been developed in the spare time of a single graduate student (@rmarkello).
While it would be :sparkles: amazing :sparkles: if anyone else finds it helpful, given the limited time constraints of graduate school this package is not currently accepting requests for new features.However, if you're interested in getting involved in the project, we're thrilled to welcome new contributors!
You should start by reading ourcontributing guidelinesandcode of conduct.
Once you're done with that, take a look at ourissuesto see if there's anything you might like to work on.
Alternatively, if you've found a bug, are experiencing a problem, or have a question, create a new issue with some information about it!AcknowledgmentsThis package relies on data that can be obtained from the Parkinson's Progression Markers Initiative (PPMI) databasehttps://www.ppmi-info.org/data.
For up-to-date information on the study, visithttps://www.ppmi-info.org/The PPMI—a public-private partnership—is funded by the Michael J. Fox Foundation for Parkinson’s Research and funding partners, including AbbVie, Avid Radiopharmaceuticals, Biogen, BioLegend, Bristol-Myers Squibb, GE Healthcare, Genentech, GlaxoSmithKline (GSK), Eli Lilly and Company, Lundbeck, Merck, Meso Scale Discovery (MSD), Pfizer, Piramal Imaging, Roche, Sanofi Genzyme, Servier, Takeda, Teva, and UCBwww.ppmi-info.org/fundingpartners.License informationThis codebase is licensed under the 3-clause BSD license.
The full license can be found in theLICENSEfile in thepypmidistribution.All trademarks referenced herein are property of their respective holders.