まだ気づく前のこと

誰かに伝えられるクオリティ少し前のこねこね日記、書き直し無しの徒然草

Pythonで数理計算を行う時に、とりあえずインポートするライブラリセット

ライブラリセット コピペ用

Numpy, matplotlib,seaborn等々

import numpy as np
import matplotlib as mpl
import seaborn as sns
import matplotlib.pyplot as plt

散布図、ヒストグラムをさらっと書きたい時用

x = np.random.randn(30)
y = np.sin(x) + np.random.randn(30)
plt.figure(figsize=(20,6))
plt.plot(x,y,"o")
plt.title("Title Name")
plt.xlabel("X")
plt.ylabel("Y")
plt.grid(True)


f:id:ish0321:20190409192248p:plain

plt.figure(figsize = (20,6))
plt.hist(np.random.randn(10 **5)* 10 + 50, bins = 60, range = (20,80))
plt.grid(True)

f:id:ish0321:20190409192316p:plain

Introduction for Python : Pyの成分

Pythonの単純なデータ型

  1. 文字列:文字の羅列
  2. ブール値:True or False
  3. 整数:小数点以下がない数値
  4. 浮動小数点数:小数点以下の部分がある数値

浮動小数点数は指数表現(10e8、10の8乗)も含む

これらは「原子」のようなもの。データ型を組み合わせて「分子」としての構文を作る

 

変数、オブジェクト

変数:実際のデータを指す名前(”=”、で代入される)

※ただの名前で、参照するためにのみ使用される

オブジェクト:データを入れる透明なボックス・容器のようなもの

※オブジェクトもを持つ、コップ・皿・陶器などで用途や重たい・軽いなどが分かる

※同じ型同士でないと演算などができない・・・?(要確認)

Pythonではクラスと型は同じになる

 

型:mutable or imutable

ミュータブル(可変):データの値を書き換えできる

→箱に蓋がついていて、加工できる ※型は変更できない(Strong Typing)

イミュータブル(可変でない):書き換えができない

→密閉された箱に窓がついていて、見ることはできるが書き換えはできない

 

タプルとリスト

タプル:任意の要素の値をまとめて、ひとつの値のように扱う、イミュータブルである

リスト:要素を順番に管理する、ミュータブルで順序や内容が変わるときに使用される

※list()関数 → 他のデータ型をリストに変換する

 

スライス記号”:”でオフセットによる範囲を指定して取り出し

>>> abc=["a","b","c","d","e"]
>>> abc[0:3]    #オフセット0から3つまでを取り出す
['a', 'b', 'c']

スライス記号”::”でステップ指定をした取り出し

abc=['a', 'b', 'c', 'd', 'e']
>>> abc[0::2] #2つ飛ばし
['a', 'c', 'e']
>>> abc[0::3]     #3つ飛ばし
['a', 'd']

 

スタックとキュー

FIFO・・・First In First Out
先入れ先出し:先に入ったものを先に出す
例:append→pop()
キューの実装

 

LIFO・・・Last In First Out
後入れ先出し
後に入ったものを先に出す
例:append→pop(0)
スタックの実装

 

 ”=”と”==”の違い

演算子は代入

==は等価性を試す

※その他の比較演算子

==:等価テスト

!=:等しくない

in:含まれる

 

関数

type():オブジェクトやデータの型を知りたいときに使用する

 int:整数

 float:浮動小数点数

 str:文字列

 

list()関数 → 他のデータ型をリストに変換する

>>> list("cat")
['c', 'a', 't']

 

split():セパレータ文字列を使って分割し、リストにする

>>> birthday = "3/21/1989"
>>> birthday.split("/")
['3', '21', '1989']

 

append()関数

>>> abc
['a', 'b', 'c', 'd', 'e']

>>> abc.append("f")
>>> abc
['a', 'b', 'c', 'd', 'e', 'f']
>>> abc.append("g")
>>> abc
['a', 'b', 'c', 'd', 'e', 'f', 'g']

 

extend(), += でリストの結合

→appendはひとつだけ追加

→リストをappendすると、リストの中にリストが入ってしまうため使い分けに注意

 

insert(), オフセットを指定した要素の追加:「何処に何を入れる?」をやる

 

del 指定したオフセットの要素の削除:「何処を消す?」(中身は知らなくてよい)

 

remove() 要素の削除:「何を消す?」(場所は知らなくてよい)

 

pop() オフセットを指定して中身を取り出し、かつ削除する

>>> abc
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> abc.pop()    #()内が無いときは-1が使われ末尾
'g'
>>> abc
['a', 'b', 'c', 'd', 'e', 'f']
>>> abc.pop(3)
'd'
>>> abc
['a', 'b', 'c', 'e', 'f']
>>>

index()

 

 

変数名として使える文字列

  • 大小の英数字    → 数字は名前の先頭に使用できない
  • アンダースコア   → 先頭に使用するのは特殊なケース

演算子:"//"    9//5 → 1 商、 "%"  9%5  → 4

 

googol=10**100 →ぐーごると読む

10の100乗、Googleはラリーペイジがつづりを間違えたことが由来

Pythongoogol*googolの計算もできる(他言語では整数オーバーフローを起こす)

 

Introduction for Python : Pyの味

Python 基礎

 

基礎知識

 

・リストにアクセスする時はオフセット(=先頭からの距離)を使ってアクセスする

→先頭からの距離、なのでデータの初めはオフセット=0

 

・ウエブスクレイピング:ウェブからデータを収集する技術

JSON形式(JavaScript Object Notation:Javaオブジェクト形式)などで結果が返ってくる

PythonではJSONPythonデータ構造に変換できる

 

・ターミナルとシェル

ターミナル:ターミナルエミュレータ、端末エミュレータ、ターミナルソフト、コンソール等とも呼ばれ、黒い画面で、テキストが表示される画面

シェル:カーネルとのインターフェイスを担うソフトウェア全般を指すが、ここではコマンドラインインタプリタのシェルと限定する。

コマンドラインから他のアプリを起動させたり、終了させたり、入出力をリダイレクトさせたり、シェルスクリプトやバッチファイルも実行できる。

 ターミナル>シェル(>カーネルと呼ばれるOSの中心機能)

Windowsシェル

Windowsシェルは"cmd"という名前で、".bat"のバッチファイルを実行する

プログラムのコマンドはシェルスクリプトとして保存すれば、後で実行できる

シェルスクリプトの欠点は数百行以上のスケーリングに時間を必要とする

 

・高水準言語と低水準言語

高水準:人間の言語に近い言語 → 例:Java,Pythonも汎用の高水準

低水準:機械語アセンブリ言語

C言語C++も高水準といわれるが、Pythonの書籍では低水準として紹介されていて、膨大な処理量が必要なときはC++などが必要といわれることが多い

 

・変数、型

言語は変数を持っている→変数とはプログラムで使いたい値の名前

変数の型を宣言しなければならない→メモリ内のスペースをどれだけ使うか、何ができるかを示したもの

型の情報を使って、超低水準の機械語コンパイルする

コンパイル→プログラムのソースコードをコンピューターが実行可能な機械語に翻訳すること。そのためのソフトウェアをコンパイラーという

 

動的言語と静的言語、インタープリタ

静的言語:言語の変数が型を変えることができない→事前に変数の型を宣言する必要がある

動的言語機械語コンパイルされることはなく、プログラムが型を解釈する(x=5であれば、xは整数だろう)

→このようなプログラムをインタープリタと呼ぶ

 

スクリプトの役割

これまでは静的言語で重たいプログラムを作成し、スクリプトでつなぎ合わせるように運用されていた。

→グルーコード(糊)としての役割

 

Pythonの強み

読みやすい設計

書きやすい

簡潔な動的言語でサイズが小さくなりやすい

ユーザーが多い

統合開発環境が多く用意されている

統合開発環境IDE):コンパイラテキストエディタ、デバッガなどをひとつの対話型操作環境(GUI)で実行可能にしたもの

豆:コンセプトを反映したイースターエッグ(隠れメッセージ)が含まれる

Pythonを避けるべき場面

かなりの高速処理が必要な場合

 

 

関数

Print(): ()内を表示する

 

【メモ】理念・戦略・ビジョン の整理

講義でよく説明するのですが、たまに自分でもこんがらがるので整理用に。

 

使命=ミッション

会社や組織は何のために存在するのか、経営をどういう目的で、どのような形で行うことができるか、普遍的な価値観を示す

 

価値・行動指針

組織として何に価値を置き、どのように行動するか

 

ビジョン

企業の目指す姿・形の“Visible(目に見える)”なイメージであり、ある時点で定め、その時点でどうなっていたいか?を示すもの

 

 

戦略(Strategy)

ビジョン を達成するための手段。

企業の持続的な競争優位性を確立する為の基本的枠組み

 

*理念、ミッション、ビジョン等は意味として直することもあり厳密に区別される事はあまりない。

あえて、異なる点としては理念が組織として普遍であるのに対し、ビジョンと戦略は外部環境や時代に合わせてその都度最適なものを策定することが求められる点である。

 

捕捉

ちなみに、アルフレッド・D・チャンドラーは.『Strategy and Structure』の中で、「組織は戦略に従う」と述べており、「まず戦略ありき」と言われるように、戦略に従って組織編制を行うことの重要性を説いている。例えば、解決すべき課題が明確で、自社の事業戦略が明確に定まっている場合は、プロジェクトチーム制をとるなどが、これに当たる。


それに対して、「戦略は組織に従う」という考え方をアンゾフは説明している。これは解決すべき課題に対して、自社の組織あるいはチームが解決し得る手法を戦略として立案することが効果的であるという説明がなされる。

 

私が考えるには、人材の流動性が前者の姿勢をとるのか、後者の姿勢をとるのかに影響を与える。多様な職能が集まり、集学的に最適解を探そうとしている場合、課題に合わせて組織を再編成しづらい。そのため、後者の姿勢をとりやすく、一般的な病院のマネジメントはこれにあたるのではないかと思う。いわゆる手法ドリブン、「我々には何ができるのか」からスタートする。

しかし、俯瞰して医療の公益性や社会的なインフラとしての役割、そして社会情勢が病院の経営に大きな影響を与えることを考えると、社会が抱える課題と医療機関が解くべき課題は一致している方がサスティナブルである。そのため、手法ドリブンではなく課題ドリブンであるのが理想である。

前述の通り、医療機関は「我々に何ができるか」とプロダクトアウトの発想に陥りやすい。専門職集団によって部署が構成されるため、人材の流動性を高めにくいのが課題である。

いくつかの医療機関では、職種に横ぐしをさし課題別にチームを設けている。診療科に医師だけではなく看護師や栄養士、理学療法士放射線技師を配属させ、専門性を付与している。こうして、組織の中に課題に基づいたチームを編成し、「戦略に従う組織」を実装している。

【講義用資料】ナッジ理論

医師と患者の間で行われる意思決定には様々なバイアスが含まれる

経済学は、個人の選択が合理的に行われることを前提にした学問である。そのため、患者の意思決定が様々なバイアスに曝露されていることを考慮したモデルを想定することにはしばしば課題がある。

 

バイアスの例
  •  損失回避(20の得より、5の損を嫌う
  • 現在バイアス(先延ばし
  • サンクコストバイアス(今まで頑張ってきたんだから・・・
  • 平均への回帰(データが改善された!今の治療法は有効だ!
  • ヒューリスティクス(よく分析せずに身近な情報で判断

 

行動変容へのヒント、「ナッジ理論」

こうした課題に取り組む手法論としてのヒントは、「ナッジ理論」として行動経済学で示されている。

 

一般的には、人々の選択を合理的に導くためには

  1. 罰則等のペナルティを課す経済的なインセンティブを付与する(短期的対策)
  2. 教育・啓発活動によって知識水準を高める(長期的対策)

前者は医療制度における診療報酬改定など、後者は大学などの専門教育などが該当する。診療報酬改定は法律に基づいて行われ、外的な要因によって選択が半強制されるため、合理的な行動変容とは言い難い。教育については長期的な対策であることと同時に、大部分を占める社会人への教育アプローチ(特に患者側)という点では効果は限定的である。

 

ナッジ理論は、強制ではない。

個人の自由意思に基づく選択をより合理的にするための理論である。ナッジとは「軽く肘でつつく」という和訳があてられる。罰則型の誘導ではなく、社会的提案型を促進する理論である。

 

たとえばカフェでコーヒーの横にトクホ製品・健康に良い食品を置いて、ジャンクフードを遠ざけるのは、健康を促進するためのナッジである。

しかし、ジャンクフードを店頭から退けてしまうのはナッジではない、強制的に選択可能な環境を排しているからである。

 

社会保障・医療政策決定者は財源・提供体制の現況、今後の人口変化推計などから日本の医療・介護についてあるべき姿を把握している。しかし、これを実現するには各自治体が自らの意思決定でケアの体制を作る必要があって、これは”ご当地医療”等と呼ばれるように、”まちづくり”に近いものがある。

ナッジを作るのは、行政から自治体へのナッジ、自治体から医療機関へのナッジ、医師ー患者間でのナッジ、様々な次元での開発が必要である。

 

ナッジデザインのパターン

ナッジを設計するためのパターンにはいくつかの分類がある。

  1. 本人自身が行動変容を強く願っていて、それを実現させるためのナッジ
  2. 本人が気づいていないことを気づかせ、行動変容を促すためのナッジ

さらに、行動変容を(1)意識的に行わせるか、(2)無意識的に行わせるかでさらにデザインが変わってくる。

 

例えば、臓器提供の意思表示率を向上したいと考えた時に、日本で行われているように保険証に記載欄を設けることは、「1、意思表示したいことを強く願っていた」人に対して、(1)意識的に意思表示させる場を作ったナッジとして解釈可能である。

 

同じ例で言うとフランスは臓器提供について異なるナッジをおいている。日本は意思表示のないものについては「臓器提供の意思がない」という設定しているが、フランスは意思表示がないものについては「意思あり」と設定している。(オプトイン・オプトアウトみたいな関係)このように初期条件を決定することで、無意識的にナッジを行っている。このような初期条件をデフォルト設定という。

 

それぞれのバイアスを把握することが重要

医療においてより良いナッジ設計を行うためには、まず患者がどういうバイアスを持っているのかを把握する必要がある。意思決定・治療方針を決めるという行為において、どういうバイアスを含んだ決定が行われているのかは個人によって異なるため、その解決のためのナッジもオーダーメイドになる必要がある(理想的には)。

個人を把握することを可能にする仕組みは、大多数意見としてのビッグデータ、AIが推定する回答なのか、標本から取り出した定性的な意見なのか。どちらが正解と現時点では言えないが、エビデンスを少しづつ積み上げて事例を挙げていくことがまずは大切だろうと思う。

 

参考図書

 

 

医療現場の行動経済学: すれ違う医者と患者

医療現場の行動経済学: すれ違う医者と患者

 

 

 

医者と患者のコミュニケーション論 (新潮新書)

医者と患者のコミュニケーション論 (新潮新書)