Примитивный скрипт для расчёта болюсов на Ruby

Модераторы: Connie, Модераторы форумов Диа-клуба

Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 17 дек 2017, 14:11

Здравствуйте!
На форуме я новичок, так что не судите строго.
Написал примитивнейший скриптик на Ruby дла расчета дозы болюса.
Все замечания, комментарии и т.п. приветствуются!
Код: Выделить всё
#!/usr/local/bin/ruby

=begin
Это примитивнейшая програма для расчета дозы актуального болюса
Никаких гарантий, ипользуйте если понимаете, что делаете.
Writen by E.Sevastyanov 17, Desember 2017
=end

puts

class Float

 def roundf(places)

  temp = self.to_s.length

  sprintf("%#{temp}.#{places}f",self).to_f

 end

end

fchi = 4.167 # fchi — фактор чуствительности к инсулину, для ультракоротких = 100/СДИ, для коротких = 83/СДИ, СДИ — суточная доза всех инсулинов, МЕ; 1800/(18*СДИ)

time = Time.new
b = time.to_a
case b[2]
when 6..12; uk = 0.05 # Коэффицент в МЕ/г для времени от 6:00 до 12:00
when 13..18; uk = 0.03 # Коэффициент в МЕ/г для времени от 13:00 до 18:00
else uk = 0.025 # Коэффицент для всего остального времени
end

puts "Сейчас " +  b[2].to_s + ":" + b[1].to_s + " " + b[9].to_s + ", " + "Углеводный коэффицет — " + uk.to_s

print "Углеводов, г.: > "
u = gets.chomp.to_f

print "Актуальная гликемия: > "
ag = gets.chomp.to_f

print "Целевая гликемия: > "
cg = gets.chomp.to_f

begin

print "Предыдущая доза инсулина, ME: >"
pdi = gets.chomp.to_f

print "Когда введена, dd hh mm > "
time1 = gets.chomp

time1 = time1.split
time2 = Time.new(b[5], b[4], time1[0], time1[1], time1[2])

del = time.to_i - time2.to_i
if ((del >= 18000) || (del < 0)); then ai = 0.0; else ai = pdi - 0.0000625 * del * pdi; end #-22.5% в час; ai — активный инсулин
 
if ai < 0.0; then ai = 0.0; end
puts "Доза была введена " + time2.asctime + ", Активный инсулин — "  + ai.roundf(1).to_s + "ME"

end

bolus = (((uk * u) + (ag - cg) / fchi) - ai)
if bolus > 0.0; then
  puts "Доза актуального болюса: " + bolus.roundf(1).to_s + "ME"
else
  print "\n"
  puts "Болюс не нужен"
end 

exit

Последний раз редактировалось cave-canem 18 дек 2017, 00:31, всего редактировалось 6 раз(а).
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Juris » 17 дек 2017, 14:43

Как бывший военный не побоюсь показать уже привычную для всех тупость ума и не постесняюсь спросить: "А куда этот скрипт вставлять и на чем он работает ? На транзисторах или на танке ? " :думаю А заодно и полюбопытствовать сути присутствующего в тексте скрипта :

Код: Выделить всё
фактор чуствительности к инсулину, для ультракоротких = 100/СДИ, для коротких = 83/СДИ, СДИ — суточная доза всех инсулинов, МЕ; 1800/(18*СДИ)
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 17 дек 2017, 15:07

Juris, скрипт написан на языке Ruby, на UNIX и OS X он стоит по-умолчанию, на Windows надо ставить отдельно (гуглите).

Фактор чувствительности к инсулину — это величина в mmol/L, показывающая насколько у вас 1МЕ инсулина понижает гликемию, естественно, у каждого свой.
Формула расчета взята из https://moidiabet.ru/blog/korrekcija-sahara-krovi-faktor-chuvstvitelnosti-k-insulinu-aktivnii-insulin-celevaja-glikemija-1/offset/110.

Если есть вопросы по скрипту, с удовольствием отвечу!
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Juris » 17 дек 2017, 15:45

cave-canem,
У меня на работе стоит Линукс Zorin Я его поставил, чтобы не тратиться на лицензионную Windows и одновременно избежать обвинений в пиратстве. Но мои познания в этой ОС близки к нулю :плачу Могу ли я установить этот скрипт и как это сделать ? Не удивляйтесь, это уже ставшая стандартной для Клуба просьба типа : "Я "азбуку" не читал, программой пользоваться не умею, но хороший сахар иметь хочу. Помогите " :спасибо:
С МЕ понятно. Правда у нас в Клубе она называется ЦЕИ ( цена единицы инсулина) и входит в алгоритм расчета наших клубных программ. Хотя подход к ее определению отличается от Вашего :не знаю
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 17 дек 2017, 15:53

Juris, Установка Ruby на Linux — https://linux-notes.org/ustanovka-ruby-neskol-ko-versij-ruby-v-unix-linux/, но если вы совсем не шарите в *nix, то тогда вам будет сложновато. Вся работа ведётся в терминале, в нём же и запускается мой скрипт.
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 17 дек 2017, 16:28

Juris, МЕ это Международная Единица, см. https://en.wikipedia.org/wiki/International_unit
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Connie » 17 дек 2017, 17:28

Juris, в консоли
sudo apt-get install ruby
Потом создать в любом текстовом редакторе файл под именем, например dose заполнить этот файл тем текстом, который привел в первом посте cave-canem
Вот эту строку изменить
было: #!/usr/local/bin/ruby
должно быть: #!/usr/bin/ruby
Потом опять в консоли
chmod +x dose
опять в консоли
./dose

Добавлено спустя 15 минут 59 секунд:
В виртуальной машине чего то у меня с кодировкой подглючило, поэтому я, не сильно стараясь, перевел скрипт на англ.

Тут обозначу мой ввод синим, вывод программы (результаты расчета) зеленым.
================================================
Now 18:39 SAMT, Carb coef - 0.03
Carbs, g.: > 20
Actual glycemic: > 7.5
Target glycemic: > 5.0
Prior dose of insulin, ME: >5
Infusion time, dd hh mm > 17 13 30
Dose infused: Sun Dec 17 13:30:00 2017
Actual bolus dose: 1.2ME
================================================
Из Брешии в Брешию DiaCalc
Аватара пользователя
Connie
Модератор сайта
Модератор сайта
 
Сообщения: 20020
Зарегистрирован: 27 июл 2006, 09:09
Откуда: Ульяновск
Возраст: 50

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Juris » 17 дек 2017, 18:01

cave-canem,
Насколько я понял ссылку на круто-англоязычный сайт, МЕ это единица измерения вещества. В нашем случае это инсулин. Но речь-то идет о факторе чувствительности к инсулину, т.е. к этому веществу, измеряемому в МЕ. Т.е. об эффекте, который производит эта единица в теле пациента. Проще и по-русски говоря, это "цена единицы инсулина", т.е. эта величина, показывающая на сколько понизится концентрация глюкозы в крови после ввода и отработки этой самой одной МЕ инсулина. Причем, введенной не абы когда, а введенной на "ровном месте". Ведь если Вы введете эту МЕ на фоне постгипогликемической гипергликемии, то рискуете вообще не увидеть никакого эффекта. Может это как-то не по международному, но зато четко и понятно. Вот я и хочу, чтобы Вы мне растолковали расчет этого "фактора" в Вашем скрипте :спасибо:
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 17 дек 2017, 18:10

Connie,
Только свои коэффициенты вставьте (извините, если это очевидно).

Добавлено спустя 22 минуты 44 секунды:
Juris,
МЕ просто размерность, как грамм, секунда, kW и т.п.
Juris
Вот я и хочу, чтобы Вы мне растолковали расчет этого "фактора" в Вашем скрипте

В скрипте фактор не рассчитывается, он вставляется в скрипт как константа, что же касается "фактора чувствительности" (ниже — коэффициент), то:
Коэффициент чувствительности показывает, на сколько ммоль/л снизится уровень сахара крови при введении 1 ед короткого или ультракороткого инсулина. Зная, сколько нужно ввести инсулина, чтобы понизить уровень сахара до целевой нормы, вы сможете нормализовать этот уровень в любое время и не только перед приемом пищи.

Коэффициент рассчитывается по следующим формулам:

Для коротких инсулинов = 1500/(суточная доза инсулина*18), где 18 — это коэффициент перерасчета из мг/дл в ммоль/л.

Для ультракоротких инсулинов = 1800/(суточная доза инсулина*18), где 18 — это коэффициент перерасчета из мг/дл в ммоль/л.
Суточная доза инсулина подразумевает весь инсулин, полученный в течение дня, т. е. и продленный, и короткий. Поскольку доза инсулина может постоянно меняться, то лучше использовать среднее арифметическое значение за несколько дней.

Откуда взялось это правило? В 80-х годах ХХ века правило «1500» было получено опытным путем диабетологом Полом Давидсоном. Такая зависимость верна только для коротких инсулинов и для человека средних лет с массой тела 70 кг и суточной потребностью в инсулине около 50 ед в сутки, но без учета ситуации с малой потребностью в инсулине (менее 10 ед в сутки) и с высокой инсулинорезистентностью (более 100 ед в сутки). Но, даже не смотря на это, на протяжении 15 лет удавалось нормализовывать углеводный обмен большому количеству людей.

Почему используются разные числа (1500, 1800 и даже 2000)? Это зависит от возраста, вида инсулина, индивидуальной чувствительности. Поскольку Хумалог и Новорапид — более активные инсулины, то и цифра для них берется 1800, а некоторые берут 2000, при этом соотношение длинный/короткий инсулин должно быть около 50 %, т. е. в сутки делается примерно одинаковое количество короткого и длинного инсулина.

Брать меньшее число рекомендуется в случае, когда доля короткого инсулина составляет более 50 %, и наоборот, когда доля продленного инсулина больше 50 %, рекомендуется брать число больше 1800.


Фактор чувствительности к инсулину измеряется в (mmol/L,)/ME, а дозы инсулина — в МЕ.

Добавлено спустя 14 минут 5 секунд:
Connie,
Опять же, если это не очевидно, углеводный коэффициент на грамм, а не на ХЕ.
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение costa » 19 дек 2017, 19:35

Надо опробовать скрипт...
И накалякать на Питоне еще :D
costa

 
Сообщения: 90
Зарегистрирован: 13 ноя 2017, 04:02
Откуда: Монро, США
Возраст: 53

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 19 дек 2017, 19:50

costa,
Т.к. править опубликованный скрипт не могу, в скрипте замените строку
Код: Выделить всё
puts "Сейчас " +  b[2].to_s + ":" + b[1].to_s + " " + b[9].to_s + ", " + "Углеводный коэффицет — " + uk.to_s
на строку
Код: Выделить всё
puts time.strftime("Сейчас %H:%M %Z, Углеводный коэффициент — #{uk}")
так эстетичнее.
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Juris » 19 дек 2017, 20:06

cave-canem,
С фактором чувствительности вроде понятно.Точнее, понятна его суть. В наших клубных программах он тоже присутствует под именем ЦЕИ и тоже рассчитывается. Правда по совершенно другим формулам, но тем не менее. Более того, он не только рассчитывается теоретически, но и определяется экспериментально, поскольку у многих людей теоретическая и практическая ЦЕИ может различаться. Поэтому в наших программах пользователю дается право выбора, по какой ЦЕИ считать. Но тут есть одно но : наша ЦЕИ не используется для расчета компенсационной дозы инсулина :не шали Она используется лишь для расчета т.н. ДПС, т.е. "довеска" к компенсационной дозе, призванного программно понизить СК до желаемого уровня. Кстати, эта ДПС может быть даже отрицательной величиной :wink:
Но у меня вопрос по Вашей методике :
Для коротких инсулинов = 1500/(суточная доза инсулина*18), где 18 — это коэффициент перерасчета из мг/дл в ммоль/л.
Для ультракоротких инсулинов = 1800/(суточная доза инсулина*18), где 18 — это коэффициент перерасчета из мг/дл в ммоль/л.

Скажите :
1. Что Вы вкладываете в понятие "суточная доза инсулина" ? :думаю
2. Почему единица ультракороткого инсулин и единица короткого инсулина за время своего действия количественно понижают СК на разную величину ? :думаю
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение cave-canem » 20 дек 2017, 18:20

Juris,
Юрий, давайте я попробую объяснить.
Я на коленке написал скриптик, ничего не зная про Вашу методику и этот сайт.
Скриптик примитивный, он не учитывает белки и жиры (как у Вас).

Основой для расчета послужила формула, описанная в здесь и здесь. Насколько она справедлива — это вопрос не ко мне.
1. Что Вы вкладываете в понятие "суточная доза инсулина" ?

Суточная доза инсулина — это сумма всех доз всех инсулинов в сутки. Объяснение по вышеприведенным ссылкам.
2. Почему единица ультракороткого инсулин и единица короткого инсулина за время своего действия количественно понижают СК на разную величину ?

Как я понял из приведённых статей, это экспериментально полученные данные, но (естественно) каждый подбирает под себя и свой инсулин.

Юрий, у меня диабет второго типа, и я только две недели назад перешел (самостоятельно, без врача) на инсулин.
Естественно, я ещё очень многого не знаю, поэтому мне очень важно Ваше мнение. Что такое ЦЕИ? Как рассчитывается? Где прочитать?
Покорнейше прошу ответить на это сообщение.

P.S.
О недостатках скриптика я писал в самом начале, к малюсеньким достоинствам можно отнести автоматические выбор Углеводного Коэффициента и учет Активного инсулина.

Когда я лучше разберусь с Вашей методикой — скриптик обязательно перепишу!

P.P.S.

Вот так выглядит работа моего скриптика (коричневым — что выводит программка, черным — что ввожу я):

Сейчас 18:38 MSK, Углеводный коэффициент — 0.03
Углеводов, г.: > 58
Актуальная гликемия: > 5
Целевая гликемия: > 5
Предыдущая доза инсулина, ME: >1.5
Когда введена, dd hh mm > 19 11 00
Доза введена: Tue Dec 19 11:00:00 2017, 7h 38m назад, Активный инсулин — 0.0ME
Доза актуального болюса: 1.7ME
cave-canem

 
Сообщения: 9
Зарегистрирован: 14 дек 2017, 17:39
Возраст: 67

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Juris » 20 дек 2017, 20:55

Что такое ЦЕИ? Как рассчитывается? Где прочитать?

В "азбуке", глава 4. "расчет компенсационной дозы.

Эта величина зависит от индивидуальной инсулинопотребности диабетика, выраженной коэффициентом К1 и его массы тела ( количества крови ). И она показывает, на сколько ммоль/литр понизится концентрация глюкозы в крови от одной введенной единицы инсулина. При этом :
1.Связывать эту величину с суточной дозой инсулина равносильно связывать метры с килограммами. Ну хотя бы потому, что суточная доза инсулина инсулина для двух диабетиков исповедующих интенсивную инсулинотерапию и имеющих одинаковую инсулинопотребность (одинаковое количество единиц инсулина необходимых для компенсации одинакового количества инсулина ) будет зависеть от их прожорливости. Хоть за день, хоть в среднем за 3-7 дней. Кроме того, для диабетиков, исповедующих интенсивную инсулинотерапию само понятие "суточная доза" является абстрактной величиной. :не знаю В клубных программах эта ЦЕИ высчитывается автоматически при указании веса и коэффициента К1. В дальнейшем она используется в расчете ДПС ( дозы на понижение сахара) с целью привести гликемию. к заданной величине.
2. К разнице между коротким и ультракоротким инсулином можно применить поговорку : "инсулин, он и в Африке - инсулин". Это означает, что за время своего действия одна единица и короткого и ультракороткого инсулина количественно одинаково понизит СК. Другое дело, что УК инсулин в силу своих характеристик сделает это быстрее. Но количественный расчет ФЧИ с привязкой к марке инсулина я считаю неверным :не шали Ну или хотя бы слишком приблизительным, чтобы иметь практическую пользу :думаю
https://juri.dia-club.ru/ - не берите особо в голову. Это всего лишь измышления дилетанта и не более того.
Juris

 
Сообщения: 14113
Зарегистрирован: 31 мар 2004, 17:49
Откуда: Рига, Латвия
Возраст: 73

Re: Примитивный скрипт для расчёта болюсов на Ruby

Сообщение Voldi » 21 дек 2017, 08:23

cave-canem, а зачем нужны примитивные скрипты при наличии продвинутых, проверенных? :думаю Если только для самообразования :не знаю
Диагностика достигла таких успехов, что здоровых людей практически не осталось.
--------------------------------
Бертран Рассел.
Voldi

 
Сообщения: 4732
Зарегистрирован: 04 май 2004, 10:07
Откуда: Севастополь
Возраст: 68

Вернуться в Общие вопросы разработки ПС для диабетиков

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7