不確かな医学

著者は、アメリカ人でがん専門の内科医。「がん4000年の歴史」でピューリッツァー賞を受けている。

 

物理学などの他の科学と比較して医学にどんな特徴があるのかを、医学の三つの法則として説明する。TEDの講演が元になっているのでコンパクトでわかりやすい。

 

一つ目は、どんなに検査技術が進歩しても偽陽性(病気になっていなくても検査で陽性と判定されること)をゼロにできないので、患者の病歴や家族の症例、生活習慣などを知ることが重要だということ。100人に1人が感染する病気の患者を見つけ出すために、全住民が5%の確率で偽陽性の判定が出る検査を受けたとしたら、陽性反応が出た住民のうち本当の患者は16%しかいないのだ。なんの事前知識もなく検査するのは、費用の無駄遣いでしかないという。事前知識から推論して、必要な検査の目星をつけて正しい診断を下すのが医者の腕の見せ所なのだ。

 

二つ目は、既存の理論では説明できない、特異な症例に着目することが、画期的な理論の構築に重要であること。あまり治療効果がない抗がん剤も、1000人にひとりくらいの割合で、劇的に効く患者も存在するらしい。従来は、そのような患者は例外的な事例ということで片付けられていたが、なぜ効いたのかを徹底的に調べたところ、遺伝子の特定の場所に変異がある患者に、治療効果があることがわかったそうだ。

 

三つ目は、医師もなんとか治療したい、患者も何としても病気を治したいと強く願っているために、治療効果を検証する際にどうしてもバイアスが入ってしまうこと。二重盲検法で医師のバイアスを排除できたとしても、自分の医師で治験に参加する患者のバイアスを除くことは難しい。

 

効果がある医療を行えるようになったのは、たかだかこの100年であり、今もよくわからない病気に罹ったよくわからない患者に対して、よくわからない治療法を用いてなんとか治療するという側面が残っているのだ。医学はまだまだ歴史が浅く、若い科学なのだ。

 

そう考えると、深刻な気持ちの患者さんに毎日向き合うお医者さんのプレッシャーは大変なもんだと思う。

不確かな医学 (TEDブックス)

不確かな医学 (TEDブックス)

 

 

pythonで最小公倍数

懲りずにまた作ってみた。ループする原因がわからず手こずった。

 

#最小公倍数を計算するプログラム

def lcm():

    num1 = input('好きな数字を入力してください:')

    num2 = input('もう一つ好きな数字を入力してください:')

    x = int(num1)

    y = int(num2)

    i = 1

    if x <= y:

        while i <= x :

            if (y * i) % x == 0 :

                result = y * i

                break

            else:

                i +=  1

        print('{0}{1}の最小公倍数は'.format(num1,num2))

        print(result)

        print(x * y)

 

    else:

        while i <= y :

            if (x * i) % y == 0 :

                 result = x * i

                 break

            else:

                i +=  1

        print('{0}{1}の最小公倍数は'.format(num1,num2))

        print(result)

        print(x * y)

lcm()

 

知の果てへの旅

 著者のマーカスデュ・ソートイはオックスフォード大学の数学教授。また、「科学啓蒙のためのシモニー教授職」にもある。エクセルやワードを開発した、チャールズ・シモニーの寄付が寄付して、その名の通り科学を広く世の中にPRするために設置された職で、前任者は「利己的な遺伝子」を書いた生物学者のリチャード・ドーキンス

 

この本では、カオス理論、量子理論、相対性理論、宇宙の始まり、宇宙の果て、人の意識、無限、不完全性定理などに関して、現在のところ科学でどこまでわかっているのか、将来どこまで知りうる可能性があるのかを探っていく。著者はそれぞれの分野の第一線の研究者を訪ねインタビューを重ねる。

 

数学者が語っているからなのか、画期的な発見や理論の構築にあたって、数学が大きな役割を果たしてきたことが強調される。現実と関係がない公理と証明によって構築された数学の世界が、素粒子の存在を予測したり、宇宙の成り立ちを説明するというのも考えてみれば不思議なもんだ。

 

科学について多くの人々に関心を持ってもらうために、幅広い分野を扱っているので、個別のテーマへの踏み込みが浅いのは仕方のないところ。あとは、読者が関心のある分野を深堀りすべきなのだろう。

知の果てへの旅 (新潮クレスト・ブックス)

知の果てへの旅 (新潮クレスト・ブックス)

 

 

茄子のオランダ煮

夏になって茄子が沢山出回るようになると無性に食べたくなるオランダ煮。

素揚げして煮る方法が主流のようですが、私は母に教えてもらった、塩茹でしてから甘辛い煮汁で煮る方法で作っています。鷹の爪を入れすぎて辛くなりすぎたのが残念。

 

冷蔵庫で歯にしみるくらい冷やして食べるました。

f:id:benton:20180811205222j:image

python で最大公約数

組み込み関数に用意されているのですが、最初なので自分で作ってみました。なんとか、うまく動くようになった。

 

#最大公約数を計算するプログラム

from operator import mul

from functools import reduce

def gcf():

    num1 = input('好きな数字を入力してください:')

    num2 = input('もう一つ好きな数字を入力してください:')

    x = int(num1)

    y = int(num2)

    gcf_factors = []

    gcf_factor = 2

    if x <= y:

        while gcf_factor <= x :

            if x % gcf_factor == 0 and y % gcf_factor == 0 :

                gcf_factors.append(gcf_factor)

                x = x / gcf_factor

                y = y / gcf_factor

            else:

                gcf_factor +=  1

        if len(gcf_factors) == 0:

            print('{0}{1}の最大公約数は'.format(num1,num2))

            print(1)

        else:

            print('{0}{1}の最大公約数は'.format(num1,num2))

            print(reduce(mul, gcf_factors))

            print(gcf_factors)

    else:

        while gcf_factor <= y :

            if x % gcf_factor == 0 and y % gcf_factor == 0 :

                gcf_factors.append(gcf_factor)

                x = x / gcf_factor

                y = y / gcf_factor

            else:

                gcf_factor +=  1

        if len(gcf_factors) == 0:

            print('{0}{1}の最大公約数は'.format(num1,num2))

            print(1)

        else:

            print('{0}{1}の最大公約数は'.format(num1,num2))

            print(reduce(mul, gcf_factors))

            print(gcf_factors)

 

gcf() 

 

 

pythonで素因数分解

Python素因数分解するプログラムを作ってみた。

 

繰り返し処理のところを、for ◯◯ in range( )にすべきなのか、while を使うべきかよくわからずに試行錯誤。プログラムを何度も走らせながら手直しして、ようやく正しく動きそうなものができた。

 

#素因数分解するプログラム
n = input('好きな数字を入力してください:')
num = int(n)
factors = [ ]
factor = 2
while factor <= num:
       if num % factor == 0:
              factors.append(factor)
              num = num // factor
else:
       factor = factor + 1

print('{}の素因数は'.format(n))
print(factors)

 

ちなみに、1,234,567,898,765を分解すると、5 × 41 × 25,343 × 237,631

 

コンピュータの演算能力ってのは凄いもんだねぇ。1兆の桁までは一瞬のうちに答えを算出してくれた。でも、調子に乗ってもう一桁増やしたら、30分計算してもまだ答えが出てこない。

 

次は、最大公約数を計算させてみようか。

スラスラわかるPython

 ProgateのPythonコースを終え、次に何しようかと考えた末に手に取ったのがこの本。

 

第1章から順番に解説を読んで、事例のプログラムを自分でもその通りに打ち込んで実際に動くかどうか確認して進めて行く。解説が丁寧で、問題の回答もあるので、内容について意味がわからずに困ることはなかった。タイトル通りスラスラわかる。コードの打ち間違いやプログラムのファイルをどうやって読み込ませるかがわからないなど、本論とずれたところで苦労した。ほぼ写経に近いんだけれど、なんとか一冊やりきった。少しは前進したような手応えと充実感。

 

簡単なスクレイピングと、csvファイルへデータを出力する方法がわかったので、ネット上のデータをエクセルで扱える形で取り込んで見ようと思う。

 

で、次はどうしようか。

スラスラわかるPython

スラスラわかるPython