0% found this document useful (0 votes)
131 views9 pages

!VitalDB Python Library

The VitalDB Python Library facilitates the use of the Vital file format and data in Python, allowing users to read, write, and manipulate vital files. It includes functions for installation, reading track lists and samples, and converting data to various formats like numpy and pandas. Additionally, it provides APIs for accessing cloud storage and open datasets, enabling users to download and visualize vital data efficiently.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
131 views9 pages

!VitalDB Python Library

The VitalDB Python Library facilitates the use of the Vital file format and data in Python, allowing users to read, write, and manipulate vital files. It includes functions for installation, reading track lists and samples, and converting data to various formats like numpy and pandas. Additionally, it provides APIs for accessing cloud storage and open datasets, enabling users to download and visualize vital data efficiently.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

VitalDB Python Library

Introduction
This document explains the VitalDB python library which helps the use of Vital file format and VitalDB data in
Python language.

Installation
VitalDB Python Library can be installed using the package installer for python (PIP).

$ pip install vitaldb

And then you need to import the vitaldb library.

import vitaldb

Vital File API


You can read a track list from a vital file using vital_trks function.

vitaldb.vital_trks(ipath)
Parameter list
●​ ipath: vital file path to read
Return value
●​ list of track names in the vital file

You can read the samples(values) in a vital file using vital_recs function. It returns the samples in a numpy
array.

vitaldb.vital_recs(ipath, track_names=None, interval=None, return_timestamp=False,


return_datetime=False, return_pandas=False, exclude=None)
Parameter list
●​ ipath: vital file path to read
●​ track_names: list of track names, eg) ['SNUADC/ECG', 'Solar 8000/HR']
●​ interval: interval of each sample. if None, maximum resolution. if there is no wave tracks, 1 sec
●​ return_timestamp: return unix timestamp
●​ return_datetime: return datetime of each sample at first column
●​ return_pandas: return pandas dataframe
Return value
●​ numpy array of samples that have the same interval specified by the input argument.

The library contains a VitalFile class to read and write Vital File Format.

vitaldb.VitalFile(ipath, track_names=None, header_only=False, skip_records=None, exclude=None,


userid=None, maxlen=None, interval=None)
Parameter list
●​ ipath:
○​ caseid: caseid of open dataset
○​ path: file path
○​ list: list of file path to merge files
●​ track_names: list or comma separated track names (with device names). If missing, all tracks are
loaded.
●​ header_only / skip_records: read track information only if True. Othersize, all track data (default).
○​ True: read track names only
●​ exclude: list or comma separated track names (with device names)
●​ userid: user ID if vitaldb.net when downloading a vital file or parquet file from the cloud
●​ maxlen: set max length of a VitalFile in seconds
●​ interval: interval of each sample. if None, maximum resolution. if there is no wave tracks, 1 sec
Return value
●​ VitalFile object

Sample Code
The following example code downloads a vital file with caseid of 1 to the current working directory.

vf = vitaldb.VitalFile(1)
vf.to_vital('1.vital')

Results:
You can open and visualize the downloaded vital file using the Vital Recorder.
The next sample code downloads the SNUADC/ECG_II track only. It is faster than the former example.

import vitaldb
vf = vitaldb.VitalFile(1, ['SNUADC/ECG_II'])
vf.to_vital('1.vital')

Results:
vitaldb.read_vital(ipath, track_names=None, exclude=None, header_only=False, maxlen=None)
Parameter list
●​ ipath: vital file path to read
●​ track_names: list of track names, eg) ['SNUADC/ECG', 'Solar 8000/HR']
●​ exclude: list or comma separated track names (with device names)
●​ header_only: read track information only if True.
●​ maxlen: set max length of a VitalFile in seconds.
Return value
●​ VitalFile object read from .vital file

vitaldb.read_csv(ipath, track_names=None, exclude=None, interval=None)


Parameter list
●​ ipath: vital file path to read
●​ track_names: list of track names, eg) ['SNUADC/ECG', 'Solar 8000/HR']
●​ exclude: list or comma separated track names (with device names)
●​ interval: interval of each sample. if None, maximum resolution. if there is no wave tracks, 1 sec
Return value
●​ VitalFile object read from .csv file

vitaldb.read_wfdb(ipath, track_names=None, exclude=None, header_only=False)


Parameter list
●​ ipath: vital file path to read
●​ track_names: list of track names, eg) ['SNUADC/ECG', 'Solar 8000/HR']
●​ exclude: list or comma separated track names (with device names)
●​ header_only:read track information only if True.
Return value
●​ VitalFile object read from .csv.gz file, written in waveform-database format
vitaldb.read_parquet(ipath, track_names=None, exclude=None)
Parameter list
●​ ipath: vital file path to read
●​ track_names: list of track names, eg) ['SNUADC/ECG', 'Solar 8000/HR']
●​ exclude: list or comma separated track names (with device names)
Return value
●​ VitalFile object read from .parquet file

After loading the vital file, you can convert it to pandas or numpy format for data analysis.

vitaldb.VitalFile.to_numpy(track_names, interval, return_datetime=False, return_timestamp=False)


Parameter list
●​ track_names: list or comma separated track names (with device names)
●​ interval: time interval of each row
●​ return_datetime: add time in datetime format to each record
●​ return_timestamp: add time in timestamp format to each record

Sample Code
The following code downloads arterial waveform from the first case of open dataset and show.

import vitaldb
import matplotlib.pyplot as plt

track_names = ['SNUADC/ART']
vf = vitaldb.VitalFile(1, track_names)
samples = vf.to_numpy(track_names, 1/100)

plt.figure(figsize=(20, 5))
plt.plot(samples[:, 0])
plt.show()

vitaldb.VitalFile.to_pandas(track_names, interval, return_datetime=False, return_timestamp=False)


Parameter list
●​ track_names: list or comma separated track names (with device names)
●​ interval: time interval of each row
●​ return_datetime: add time in datetime format to each record
●​ return_timestamp: add time in timestamp format to each record

You can save the vital files in several formats.

vitaldb.VitalFile.to_vital(opath, compresslevel=1)
-​ Save as vital file
Parameter list
●​ opath: file path to save

vitaldb.VitalFile.to_csv(opath, track_names, interval, return_datetime=False, return_timestamp=False)


-​ Save as csv file
Parameter list
●​ opath: file path to save
●​ track_names: list of track names
●​ interval: time interval of each row
●​ return_datetime: add time in datetime format to each record
●​ return_timestamp: add time in timestamp format to each record

vitaldb.VitalFile.to_wfdb(opath, track_names=None, interval=None)


-​ Save as waveform-database file
Parameter list
●​ opath: file path to save
●​ track_names: list of track names
●​ interval: time interval of each row

vitaldb.VitalFile.to_wav(opath, track_names, srate=None)


-​ Save as wave file
Parameter list
●​ opath: file path to save
●​ track_names: list of track names
●​ srate: sample frequency

vitaldb.VitalFile.to_parquet(opath)
-​ Save as parquet file
Parameter list
●​ opath: file path to save

There are other functions for using and editing VitalFile.


vitaldb.VitalFile.crop(dtfrom=None, dtend=None)
-​ Cut the vital file to the desired time
Parameter list
●​ dtfrom: start time in unix timestamp format
●​ dtend: end time in unix timestamp format

vitaldb.VitalFile.get_track_names()
-​ Return only the track names contained in the vital file

vitaldb.VitalFile.get_track_samples(dtname, interval)
-​ Get samples of each track
Parameter list
●​ * dtname: list or comma separated track names (with device names)
●​ * interval: interval of samples in sec. if None, maximum resolution. if no resolution, 1/500

vitaldb.VitalFile.remove_track(dtname)
-​ Delete track by name
Parameter list
●​ dtname: device and track name

vitaldb.VitalFile.add_track(dtname, recs, srate=0, unit=’’, mindisp=0, maxdisp=0)


Parameter list
●​ dtname: device and track name
●​ recs: list or comma separated dictionary with ‘val’ and ‘dt’ as key
●​ srate: If wave track, Hz of float type
●​ unit: unit of string type
●​ mindisp: minimum value
●​ maxdisp: maximum value

vitaldb.VitalFile.find_track(dtname)
-​ Find track from name
Parameter list
●​ dtname: device and track name

Platform API
You can access the vital files from cloud storage or intranet server with the api module.

vitaldb.login(id, pw, host=None, port=None)


-​ Use the setserver function above to set the site with given host and port
Parameter list
●​ id: id to login
●​ pw: pw to login
●​ host: IP address (default value: vitaldb.net)
●​ port: string type of port number

vitaldb.filelist(bedname=None, dtstart=None, dtend=None)


-​ request file list

Parameter list
●​ bedname: bed name and bed number connected with “_”
●​ dtstart: start time in “Y-m-d h:m:s” format
●​ dtend: end time in “Y-m-d h:m:s” format

vitaldb.download(filename, localpath=None)
-​ Request file download

Parameter list
●​ filename: file name to download(‘0000_00_000000_000000.vital’)
●​ localpath: local path to download

Sample code
The following sample code downloads all vital files with bedname and periods.

import vitaldb
import pandas as pd
import os
# path to save downloaded files
DOWNLOAD_DIR = "Download"
SERVER_IP = 'xxx.xx.xxx.xxx'
SERVER_PORT = '80'
LOGIN_ID = '' # Please enter your login id
LOGIN_PW = '' # Please enter your login password
BED_NAME = "MICU"
START_DATE = "2022-01-01"
END_DATE = "2022-01-31"
if vitaldb.login(LOGIN_ID, LOGIN_PW, SERVER_IP, SERVER_PORT): # login
# check filelist
filelist = vitaldb.filelist(bedname=BED_NAME, dtstart=START_DATE, dtend=END_DATE)
print(pd.DataFrame(filelist))
if not os.path.exists(DOWNLOAD_DIR):
os.mkdir(DOWNLOAD_DIR)
# files load & download
for file in filelist:
print('downloading ' + file['filename'], end='...')
localpath = DOWNLOAD_DIR + '/' + file['filename']
res = vitaldb.download(file['filename'], localpath)
print('done')
else:
print('login error')

Dataset API
You can use vitaldb open datasets with vitaldb python library.
Find cases in the VitalDB open dataset

caseids = vitaldb.find_cases(['ECG_II', 'ART'])


len(caseids)
Results: 3644

Read an open dataset case

vals = vitaldb.load_case(caseids[0], ['ECG_II','ART'], 1/100)


print(vals)

ecg = vals[:,0]
art = vals[:,1]

# plot
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.subplot(211)
plt.plot(ecg[110000:111000], color='g')
plt.subplot(212)
plt.plot(art[110000:111000], color='r')
plt.show()

Results:
[[ nan nan]
[ nan nan]
[ nan nan]
...
[ 0.148893 -32.5087 ]
[ -0.325087 19.8266 ]
[ nan nan]]

You might also like