Анализ полово-возрастного состава выборки используя Python
Автор: Лебедев Василий Борисович Добавлено: 2007-11-26 07:49:54
| |
Анализ полово-возрастного состава выборки используя Python
В своей работе я использую архив
. Я скачал обучающую базу суточных
. И первое, что я решил, выяснить полово-возрастной состав выборки.
Предварительно я создал описание класса CRRData (см. файл cfile.py). Класс содержит следующие свойства и методы:
- fFileName – имя файла без расширения
- HighAge – верхний предел возрастной группы
- LowAge – нижний предел возрастной группы
- Gender – пол ('M', 'F')
- Medication – медикамент
- StartTime – время начала записи (в формате Python)
- RRLow – наименьшее значение RR-интервала
- RRHigh – наибольшее значение RR-интервала
- __init__ - конструктор класса, в него передается имя файла без расширения
- ReadHead – метод чтения данных из файла-заголовка
Также я воспользуюсь собственным модулем mfutils.py для построения списка файлов.
Оба модуля надо скачать и положить в одну папку (пусть это будет d:python), также надо скачать данные с сайта PhysioNet и распаковать их (предположим, что Вы распаковали их в папку d:/studybase)
Теперь приступим:
- запускаем python
- сначала добавим путь d:python в список доступных путей с помощью модуля sys и импортируем наши модули:
import sys
sys.path.append('d/:python')
import mfutils
import cfile
- сканируем папку с данными и создаем список файлов (заметьте в процедуре BuildFileList я использовал маску 'a.hea', это нужно для того чтобы в наш список попали только файлы заголовки записей проводимых без медикаментозного воздействия):
fList = []
mfutils.BuildFileList('D:studybase','a.hea', fList)
- теперь создадим кортедж для хранения данных о возрасте и поле:
cData =[]
- для того чтобы добавлять данные в кортедж создадим процедуру add, в которую будем передавать возрастные рамки и пол из текущего файла заголовка:
def add(corData, lA, hA, gen):
bFind = 0
i = 0
for x in corData:
if ((x[0]==lA) and (x[1]==hA)): bFind = 1 a = int(x[2])
b = int(x[3])
if (gen=='M'):
a = a + 1
else:
b = b + 1
corData[i] = (lA, hA, a, b)
i = i + 1
if (bFind == 0):
if (gen=='M'):
corData.append((lA,hA,1,0))
else:
corData.append((lA,hA,0,1))
- наконец, пробежимся по списку:
for d in fList:
d = d.replace('.hea', '')
frr = cfile.CRRData(d)
add(cData, frr.LowAge, frr.HighAge, frr.Gender)
- теперь осталось лишь вывести полученный результат в виде таблицы:
slTable = []
for x in cData:
slTable.append(str(x[0]) + '-' + str(x[1]) + ' ' + str(x[2]).rjust(6) + ' ' + str(x[3]).rjust(7))
slTable.sort()
print ' age male female'
for x in slTable:
print x
Вот что получилось:
| age | male | female
|
| 20-24 | 1 | 0
|
| 30-34 | 2 | 0
|
| 35-39 | 11 | 2
|
| 40-44 | 25 | 4
|
| 45-49 | 55 | 7
|
| 50-54 | 73 | 8
|
| 55-59 | 106 | 22
|
| 60-64 | 122 | 34
|
| 65-69 | 113 | 31
|
| 70-74 | 78 | 19
|
| 75-79 | 40 | 9
|
Теперь, данные можно скопировать в офисное приложение (MicroSoft Excel, OpenOffice Calc и т.д.) и построить графики, или вставить в отчет.
Файлы с с примером можно найти в разделе Download по ссылке :
http://www.ibmt.ru/index.php?nma=downloads&fla=index&cat=2&action=id&ids=2&idd=2
Оглавление
| На верх