kyoneco’s blog

教育、数学、統計といったテーマについて考えていきます

医療情報の「バベルの塔」を越えて

——病院が変わっても、あなたのデータが旅できる世界へ


プロローグ:繰り返される採血

転勤で東京から大阪へ引っ越した田中さん(仮名)は、糖尿病の治療を続けるため新しいクリニックを訪れた。紹介状は持参していた。しかし、受付で告げられた言葉に戸惑う。「申し訳ありませんが、血液検査をもう一度受けていただけますか」。先週、東京で受けたばかりだった。

なぜ、検査結果をそのまま使えないのか。医師の説明はこうだった。「検査項目のコードが当院と違うので、どの数値がどの検査に対応するか確認できないんです」。

この光景は、日本中の病院で日常的に起きている。同じ日本語を話しているはずなのに、病院ごとに「方言」が異なるかのように情報が通じない。まるで、旧約聖書に登場するバベルの塔の物語のようだ。神が人々の言葉を乱し、互いに通じなくなったあの逸話である。

医療の世界でも、言葉を統一しようとする挑戦が続いている。


第1章:放置すれば混沌が生まれる——標準化という発想

日本産業規格(JIS)は、標準化をこう定義している。「自由に放置すれば、多様化、複雑化、無秩序化する事柄を少数化、単純化、秩序化すること」。

ネジを思い浮かべてほしい。もしメーカーごとにネジの直径やピッチがバラバラだったら、部品の交換すらできない。だから工業製品には規格がある。JISマークは、その証だ。

医療情報も同じ問題を抱えている。病院Aでは「白血球数」と呼ぶ検査を、病院Bでは「WBC」と表記する。コンピュータにとって、この二つは別物だ。さらに測定方法や単位が異なれば、数値の意味すら変わる。

標準化がなければ何が起こるか。異なるベンダーのシステムを接続するたびに、膨大な打ち合わせと開発が必要になる。コードの対応づけを間違えれば、会計請求ミスや誤った投薬につながりかねない。患者が病院を変えるたび、過去のデータは「読めない文書」と化す。

この混沌を秩序に変えるため、世界と日本で標準化の枠組みが整備されてきた。


第2章:世界と日本をつなぐ翻訳者たち——標準化組織の役割

国際的な標準化を担うのがISO(国際標準化機構)だ。1947年に18カ国で発足し、2018年時点で162カ国が参加する。専門委員会(TC)が領域ごとに設けられ、医療情報を扱うのはTC215「保健医療情報」である。

日本国内では、複数の団体が連携して標準化を進めている。中心となるのが「医療情報標準化推進協議会」、通称HELICS(ヘリクス)だ。2001年に設立され、学会、工業会、行政機関など10以上の団体が参加する。個々の標準化案を審査し、推奨すべきものを「標準化指針」として認定する。

この指針から厚生労働省が正式に採択したものが「厚生労働省標準規格」となる。2022年4月時点で39の規格が登録されている。病名マスター、検査コード、医薬品コード、データ交換形式など、医療情報のあらゆる領域をカバーする。

標準は誰かが一方的に決めるものではない。医師、技術者、行政官が議論を重ね、合意を形成していく。その過程こそが、バベルの塔を越える架け橋となる。


第3章:病気に「住所」を与える——病名コードの世界

「糖尿病」という診断名を考えてみよう。医師がカルテに書く表現は多様だ。「糖尿病」「DM」「2型糖尿病」「成人発症型糖尿病」。人間なら同じ病気だと理解できる。しかしコンピュータには、これらが同一かどうか判断できない。

この問題を解決するのが「ICD10対応標準病名マスター」だ。1999年に初版が公開され、電子カルテや病歴管理システムの基盤となっている。

このマスターには複数のコードが付与されている。まず「病名管理番号」。同じ病気でも表記が異なればユニークな番号が振られる。次に「病名交換用コード」。一つの病気に一つ、4桁の英数字コードが割り当てられる。「かぜ」と「感冒」のように互換性のある表記には同じコードが使われる。

さらに「レセプト電算処理コード」は保険請求に使われる7桁の数字だ。そして「ICD10分類コード」は、世界保健機関(WHO)が定めた国際疾病分類に対応する。これにより、日本の病名を国際的な統計と比較できる。

コードは「住所」に似ている。人間にとっては「東京都千代田区霞が関」で十分だが、郵便システムには郵便番号が必要だ。病名コードは、病気をシステム間で正確に届けるための「郵便番号」なのだ。


第4章:検査結果を「翻訳」する——JLAC10の17桁

血液検査の結果表を見たことがあるだろう。「AST」「ALT」「γ-GTP」といった略語が並ぶ。これらは肝臓の機能を示す指標だ。しかし、同じ「AST」でも測定法や検体材料(血清か血漿か)によって数値の意味が変わる。

日本臨床検査医学会が開発した「JLAC10」は、検査項目を17桁のコードで表現する。構成は5つの要素からなる。分析物(何を測るか)5桁、識別(細分類)4桁、材料(血清、尿など)3桁、測定法3桁、結果識別2桁。

たとえば「血清中性脂肪を可視吸光光度法で測定した定量値」は「3F0150000023271-01」となる。長いが、このコードがあれば測定条件まで特定できる。異なる検査機関のデータを比較するとき、測定法の違いを考慮できるのだ。

ただし課題もある。医療機関が検査を外部委託している場合、詳細な測定法を把握していないことも多い。そこで次世代の「JLAC11」では、検体外診断用医薬品(検査キット)ごとに測定法コードを事前登録し、現場の負担を減らす設計に改められた。結果単位コードも追加され、単位の違いも識別できるようになった。


第5章:薬の「身分証明書」——HOTコードとATC分類

医薬品のコードはさらに複雑だ。同じ成分でも、先発品とジェネリック、錠剤とカプセル、100錠包装と500錠包装で別物として扱われる。

代表的なコード体系を整理しよう。「薬価基準収載医薬品コード」は厚生労働省が管理する12桁のコードで、薬効分類や剤形、規格を含む。「HOTコード」は医療情報システム開発センター(MEDIS)が管理する最大13桁のコードだ。

HOTコードの特徴は階層構造にある。最初の6桁「HOT7」は処方用番号で、同一成分・同一規格の薬剤を表す。続く2桁を加えた「HOT9」は販売会社ごとに区別する。さらに2桁を加えた「HOT11」で調剤用、最後の2桁「HOT13」で包装単位まで特定できる。

処方箋を発行する段階ではHOT7やHOT9で十分だ。しかし調剤薬局が在庫を管理するにはHOT13が必要になる。場面に応じて解像度を変えられる設計が、実務に即している。

国際比較にはWHO-ATCコードが用いられる。解剖治療化学分類に基づく最大7桁のコードで、成分レベルで分類する。たとえばピオグリタゾン(商品名アクトス)は「A10BG03」。Aは消化管と代謝、A10は糖尿病用薬、A10Bは血糖降下薬(インスリン以外)、A10BGはチアゾリジンジオン、03がピオグリタゾンを指す。


第6章:データを「箱」に詰める——XML、HL7、FHIR

コードが揃っても、それだけでは情報交換できない。データをどう構造化し、どの順序で並べ、どんな形式で記述するかを決めなければならない。

古くから使われるのがCSV形式だ。項目をカンマで区切り、1行に1件のデータを記録する。エクセルで開けるので便利だが、項目の意味を伝えるタグがない。列の順序が変わると読めなくなる。

これを解決するのがXML形式だ。データを「<要素名>値</要素名>」という構造で記述する。たとえば「<name>山田太郎</name>」のように、項目名と値がセットになる。順序が変わっても正しく読み取れる。

医療分野ではHL7(Health Level Seven)という国際規格が普及している。「Clinical Document Architecture」(CDA)形式は、1人分の診療データを1つのXMLファイルにまとめる。特定健康診査のデータはこの形式で記述され、健診機関から保険者へ電子的に送られている。

近年注目されるのがHL7 FHIRだ。「リソース」という単位でデータを扱い、XMLだけでなくJSON形式でも記述できる。Webサービスとの親和性が高く、スマートフォンアプリとの連携も容易だ。厚生労働省標準規格にも、処方情報や健康診断結果報告書のFHIR記述仕様が採用されている。


第7章:コードを「名乗らせる」仕組み——OIDの役割

世の中にはコード体系が無数にある。同じ「12345」という数字でも、病名コードなのか医薬品コードなのかで意味がまったく異なる。コード自体にも「身分証明書」が必要だ。

その役割を果たすのがOID(オブジェクト識別子)である。国際標準化機構(ISO)と国際電気通信連合(ITU-T)が管理する仕組みで、階層構造を持つ数字の列でコード体系を一意に識別する。

たとえば「1.2.392.100495.20.2.71」は厚生労働省が管理する医薬品コード(レセ電算医薬品コード)を表す。「1.2」はISO傘下の加盟機関、「392」は日本産業標準調査会(JISC)、「100495」以降は厚生労働省が割り当てた番号だ。

FHIRではOIDを「urn:oid:1.2.392.100495.20.2.71」のようにURI形式で記述する。これによりシステムは「この値はレセ電算医薬品コードである」と自動的に判断できる。人間が見れば長くて面倒だが、機械には欠かせない「名札」なのだ。


エピローグ:旅するデータ、つながる医療

冒頭の田中さんのケースを振り返ろう。もし東京のクリニックと大阪のクリニックが標準コードでデータを交換していたら、採血のやり直しは不要だったかもしれない。糖尿病であればHbA1cや空腹時血糖の推移が一目でわかり、治療方針の判断もスムーズだっただろう。

標準化は地味な作業だ。会議を重ね、コード表を更新し、システムを改修する。華やかさはない。しかしその積み重ねが、医療情報の「共通言語」を育てている。

バベルの塔で言葉が乱された人々は、世界中に散らばった。しかし医療情報の世界では、標準化という橋を架けることで再び通じ合おうとしている。あなたのデータが病院を越え、地域を越え、やがて国境を越えて旅する日も、そう遠くはない。

 

夏に多くの人が勉強にむかう理由

 この数年、夏になると受験数学や勉強法について興味がわいて、Youtubeなどで調べるということをなんだかしています。この周期的な受験への興味が湧く現象について考えてみたいと思います。
 まず時期なのですが、夏、特に盛夏である7月下旬から8月上旬です。お盆前の日差しの厳しい暑い夏です。家族の帰省といったイベントに当たりやすい時期でしょうか。自分は仕事の関係でお盆に帰っていませんが。この時期は一人になる時間が増える時期です。一方、数学や勉強法などはいつでも動画などで調べられることなのです。では、なぜこの時期にそういったことがらへの興味がわいてくるのでしょうか。

 夏は一般的に多くの人にとって、受験勉強などで勉強に集中した時期だと思います。学校への登校をから解放されます。もちろん学校からは宿題が出されるので完全な学業面でのフリーとなるわけではないでしょう。しかし、登校して授業を受けるという日常は習慣化しているので気づきにくいのですが、思った以上に時間が取られるものです。つまり、夏は学校に行かなくて時間が増えるのです。自由な、自分が思う通りの時間が増えるのが夏なのです。日々のルーチンワークから解放される時期です。さまざまな日常的習慣からくるそれを行わなくてはならない義務から生じる圧力から解き放たれるそういう時期なのです。自由になると、認知リソースの空きがうまれます。Dutyに割かれていた知的なエネルギーがありあまってきます。この有り余ったエネルギーはどうしても消費したくなるものです。それが夏に使われるエネルギーの源なのです。

 消費されるエネルギーの向かう先はおそらく個々人で異なるものでしょう。私の場合は数学、勉強法に向かう何らかの無意識的な力が働いているのかもしれないとふと思いました。夏というのはにみんな受験の天王山などとして勉強することが推奨される時期です。予備校などの受験産業は夏期講習という形で大規模な宣伝活動を毎年行っています。多くの人が勉強に向かう意識が高まる時期です。そして多くのひとがそれを経験しています。つまり日本人の多くが10代においてこの経験を経ており、みな同じ時期に同じようなことをしています。この社会的文化慣習は10代に限定されずそれ以降の年代の人々にも影響を与えているのです。例えばサービスの提供側として関わるようになることもあります。一部の人は再受験や受験マニアなど消費者の立場の人もいます。言ってみれば、社会全体としてのある種の祭りとしての要素ともとれます。その祭りを取り巻くひとも参加します。こういった社会的な慣習により見込まれる需要を満たすように皆行動します。だからみな勉強に意識が向くということはあるかもしれません。

歯科治療についてしらべてみた

歯医者さんに通院して治療するのはなかなか大変なことです。虫歯になって、治療すると何回も通う必要もありますし、痛みを伴う処置も受けることもあります。ですから、虫歯にならないことがとても大切だと思います。しかしながら、悲しいことに歯磨きを毎日していても虫歯になってしまうこともあるのです。

そこで、虫歯になってしまう要因とそれへの対策について調べてみました。私はエビデンスを重視しているので、個人の感想や少数の歯科医の意見(開業歯科医のホームページ)といった情報は重要視していません。そこでエビデンスとして容易に参照できるものとして、日本歯科医学会がホームページで公開している歯科診療ガイドラインをまず、みてみました。

www.jads.jp

診療ガイドラインとして60件掲載されています。そのなかでいま知りたい虫歯つまり、う蝕についてのガイドラインを読んでみようと思いました。

う蝕治療ガイドライン第二版詳細版 日本歯科保存学会 2015年6月

2015年発行で8年前ですが非専門家でも容易に利用可能な文献としてはまだ優れています。

 

ガイドラインの冒頭にMI(Mimimal Intervention)を中心理念としているというのが記載されています。要するに必要以上に削るような治療はしないということなのでしょう。う蝕の中には進行が停止または治癒するものもあり、そういう病変は再石灰化療法での経過観察を勧めています。う窩を形成したう蝕のような進行を止められないような病変には最小の介入をと記載されています。冒頭のう蝕への基本方針はFDI(国際歯科連盟)の2002年の声明を引用してあり、このMIが世界的なう蝕治療へのトレンドであることが理解できます。

切削が必要なう蝕かの判断は歯科医による判断が必要であり、一般人が立ち入れるところではありません。ただ、歯科治療の大きなトレンドにおいて「最小の侵襲」が謳われていることは知っておいてよいと思いました。

ガイドラインで永久歯エナメル質初期う蝕へフッ化物塗布が強く推奨されています。引用されているインドの研究ではう蝕ハイリスク患者へ活動性白斑へリン酸酸性フッ化ナトリウム(12300ppmF)を塗布する群(年2回4分間)としない群でしたときには、80%が非活動性となり、3.5%がう窩となったが、塗布しないときは、35%が非活動性となり10%がう窩となったというのです。安価で安全なフッ化物を塗布するだけでう蝕進行が抑えられるのはよいというのは興味深いです。

また、初期活動性根面う蝕において、フッ化物配合歯磨剤+フッ化物配合洗口液の併用は根面う蝕の再石灰化に有効という研究も記載されています。フッ化物の使用はう蝕進展抑制の有用であり、日常的なフッ化物の使用の重要性が理解できます。

 

因果推論

最近因果推論の本などを読む機会が多いです。特に、「因果推論の科学」を読んでいるのですが、わかりやすくこれまでの統計に対するイメージががらりとかわる良書でした。

因果推論の科学 「なぜ?」の問いにどう答えるか

books.bunshun.jp

 

いままで統計を勉強してきましたが、いまひとつ腑に落ちない部分があり、それについてややもやもやが薄くなってきたように思います。

この本を読んでいて、「統計という学問は因果について排除してきた」という記述が気にとまりました。これまでXとYは関連があるなどの表現で歯切れが悪いなとなんとなく感じていたものが、統計学の因果を排除してきた歴史の部分について読むにつれて、因果関係をはっきりさせないのだから、歯切れがわるくなるのは当然だよなと感じました。

RCTでしか明確に因果について述べることはできないといった風潮があり、これについてはある種の絶望感を与えるものです。RCTは一般に大変な労力や費用がかかるものなので、科学的に重要な結論を出すにはRCTでの結果を待つというのが確かにゴールドスタンダードですが、これだと科学はごく一部のひとが実施できるものになってしまうような気がしていました。しかし、因果推論について学ぶと因果について言語を手にすることで、RCT以外にも因果について言及する方法があるというのがわかりました。これはかなりすごいことだと読んだときに思いました。

因果ダイアグラム、do計算法といった因果について言及するツールについて勉強していきたいと思いました。

正規表現 第二章 HTTP URLのリンク化

HTTP URLのリンク化
 

通常のHTTP URLをリンクに変えたい

↓/pathはオプション
 
$text =~ s{
\b
# URLを$1にキャプチャする
(
/path
)?
)
}{<a href=“$1”>$1</a>}gix;
 

空白、制御文字、<、>、(、)、{、}、などをのぞくほとんどの文字を表したい

[-a-z0-9_:@&?=+,.!/~*’%$]*
 

テキスト中のURLで末尾に句読点があるものは除きたい

否定の後読みをパス部の末尾におく
(?<![.,?!])
 

正規表現ライブラリ

qr演算子 正規表現正規表現オブジェクトに変換し変数に保存できるようにする
qr/…/

 

メモ

正規表現ライブラリも学習し、頭をつかってつくりだした正規表現をマスター化し再利用できる方法も解説しています。

正規表現 第二章 テキストからHTMLへの変換

2.3.6 テキストからHTMLへの変換

プレーンテキストをHTMLに変換したい

巨大文字列(テキスト全体が1つの大きな文字列)をつくりたい

undef $/;
$text = <>;
 
 

&,<,>をHTMLエンコーディングである&anp; , &lt; , &gt;へ変換したい

$text =~ s/&/&amp;/g;
 

段落を<p>で区切りたい

空行があいだにあれば段落の区切り
空行を見分けたい
↓^$は論理行の行頭と行末ではない
拡張行アンカーマッチモードをつかう
$text =~ s/^$/<p>/mg;
空行に空白文字があるとこれでは動作しないことがある
「^ *$」や「^[ \t\r]*$」を使う
 
空白を除いて空っぽの行の範囲をみつけたい
「^\s*$」を使うと連続した空行でも全体に1回でマッチする
 
 

メールアドレスを認識してmailtoリンクに変換したい

$text =~ s/\b(username regex\@hostname regex\b/<a href=“mailto:$1”>$1<\/a>/g;
 

ユーザー名とホスト名のマッチを正規表現で表したい

\w+\@\w+(\.\w+)+
 
↓ピリオドやダッシュがはいることがあるのでそれに対応させたい
\w+から\w[-.\w]*にする
 
↓最後の要素になるものを具体的にリストにして並べる
\w+(\.\w+)*\.(com|edu|info)
 
↓\wは適切でないことがあるのでホスト名につかわれる文字種を指定したい i修飾子付き
[-a-z0-9]+(\.[-a-z0-9+])*\.(com|edu|info)
 
$text =~s{
\b
#アドレスを$1にキャプチャする
(
usename regex
\@
hostname regex
)
\b
}{<a href=“mailto:$1”>$1</a>}gix;
 
・x修飾子:ほとんどの空白が無視される。#を先頭におくコメントがかけるようになる
Perlでは区切り子を自由に選べる。/のかわりに{}が用いることができる。

 

メモ

プレーンテキストをHTMLに変換する実用よりの例で学ぶ節です。メールアドレスの正規表現は厳密に行おうとするとかなり大変ですが、練習の題材に沿う範囲で正規表現として表していく構成です。ときどき新しい方法がでてきますが(x修飾子や区切り子の選択、拡張行アンカーマッチモード)、たいていはこれまで学んできたことで理解できます。

正規表現 第二章 肯定否定先後読み 読書メモ

先読みの別の例

JeffsになっているものをJeff'sに置き換えたい

s/\bJeff(?=s\b)/Jeff'/g
先読みの部分はsの前の位置へマッチ
 

後読みも併用する

(?<=\bJeff)(?=s\b)/'/g
どのテキストにもマッチせずアポストロフィを追加したい位置にマッチする。
マッチした無文字をアポストロフィに置換する
 

数値にカンマを入れる例

s/(?<=\d)(?=(\d\d\d)+$)/,/g
左側に何らかの数字 →(?<=\d)
ちょうど3個の数字 →\d\d\d
3個セットが複数あるとき →(\d\d\d)+
後ろに余計なものが続かないようにする →(\d\d\d)+$
 

単語の境界と否定の先後読み

より長い文字列の中に埋め込まれた数値にもカンマを挿入したい

肯定の後読み (?<=) 部分式が左側にマッチするときに成功する
否定の後読み (?<!) 部分式が左側にマッチしないときに成功する
肯定の先読み (?=) 部分式が右側にマッチするときに成功する
否定の先読み (?!) 部分式が右側にマッチしないときに成功する
 
語の境界:片側が\wで反対側が\wでない位置
単語の先頭:(?<!\w)(?=\w) 
単語の末尾:(?<=\w)(?!\w)
 

3桁ずつ数字をきりとる

s/(?<=\d)(?=(\d\d\d)+(?!\d))/,/g
 

メモ

先読み、後読みの例をさらに解説している節です。肯定と否定の先後読みも新しいものとしてでてきました。\bを先後読みで表現できることも説明されています。
 

正規表現 第二章 先後読み入門 読書メモ

 

kyoneco.hatenablog.com

 

2.3.5 先後読みによって数値にカンマを付け加える

大きい数字の列にカンマを挿入したい ex.112345 → 112,345

右から3桁ずつ数え、左側にまだ数字が残っていればそこにカンマを入れていきたい
カンマを装入する位置 = 右側に3も倍数個の数字があり、左側に何らかの数字がある位置のこと
先後読みで解決できる
 

先後読み構文:テキスト中の「位置」にマッチする。

先読み:テキストの先の方(まだ読んでない右の方)を覗き込んで、部分正規表現がマッチするかどうかを調べ、マッチするようなら正規表現要素として成功とする。

肯定の先読み:(?=・・・)

ex. (?=\d) 次が数値になっている位置で成功する
a1a →(置換b)→ab1a
 
ex.2 行頭が数字から始まっているものの先頭に・をつけたい
(?=^\d) 置換・
11
22
・11
・22
 
 

後読み:テキストの後ろの方(もう読んだ左の方)を振り返る

後読み: (?<=・・・)
ex.(?<=\d) 左に数値がある位置(数字の後ろの位置)で成功する 
a1a →(置換b)→a1ba 
 

先後読みで重要なこと:テキストを「消費」しないこと

マッチしたテキスト自体ではなく、マッチするテキストの「位置」をみつけるだけ。
ex.
ターゲット    Jeffrey 
正規表現     (?=Jeffrey)Jeff
マッチするところ Jeff
 

開き括弧シークエンス

(?:) キャプチャなしのグループ化
(?=) 先読み
(?<=) 後読み
 

メモ

先読みと後読みについて解説している節です。テキストの位置にマッチするというのがこれまで文字などをターゲットにしていたときとは異なるところです。この場所にこれをいれたいのにと思ったときには先後読みを使えばよいのです。位置へのマッチは^,$、\bもありますがより一般的な方法を知ることのできる節です。

正規表現 第二章 置換コマンドへの習熟 読書メモ

続きです。

 

kyoneco.hatenablog.com

 

2.3.4 ささやかなメールユーティリティ

 
やりたいこと
1.メッセージヘッダから必要な情報を抜き出す
2.返信のヘッダを出力する
3.行頭に’|> ’をつけて元のメッセージを出力する
 

<>演算子:通常の変数に代入すると入力の次の行が入る。getline()関数と同じ。<>ですべての入力を読み込むと未定義値を返す。

ex. while ($line = <>) {
}
 

タイトルを抜き出す

$line =~ m/^Subject: (.*)/i
.*は内容がなんであれ行ののこりの部分にマッチする。任意の文字の塊。かならず行末までマッチする。
()内は$1でアクセスできる。
 

アドレスまでの部分にマッチさせたい

^From: (\S+)
\S 空白ではないすべての文字にマッチする
 

括弧内の文字列にマッチさせたい。その際括弧自体もマッチさせたい。

\(([^()]*)\)
括弧はエスケープする必要がある。キャプチャのため、ターゲットの括弧内を括弧にいれる。
 

行頭に’|> ’をつけて元のメッセージを出力したい

while ($line = <>){
print “|> $line”;
}
 
別の方法
$line =~ s/^/|> /;
print $line;
冒頭の無文字を置換している。
 
 

メモ

Perlでのメールユーティリティプログラムの作成を通して、置換コマンドに習熟します。やりたいことを正規表現でどのように実現するかを考えるのがこの節です。具体的な問題を通して使い方を学んでいく構成です。

正規表現 第二章 正規表現によるテキストの書き換え 読書メモ

前回の続きです

 

kyoneco.hatenablog.com

 

 

2.3 正規表現によるテキストの書き換え


$var =~ s/regex/replacement/
正規表現が$varにマッチしたらマッチした部分を取り除きreplacementの部分をそこにはめる

 

・サンプル:ダイレクトメール


ダイレクトメールを製造したい。メールテンプレートにマーカーがつけて、そこにあとで変数を指定してはめ込み該当するマーカーを正規表現で置換する。
ex. Dear =FIRST=,
$given = “Tom”;
$letter =~ s/=FIRST=/$given /g;

/g: グローバル置換 最初の置換が終了した後もそこからさらにマッチを探して置換する

 

・サンプル:株価表示整形


「小数点3位までの使用でかつ3位が0である場合はそれを表示しない」ということをしたい。
$price =~ s/(\.\d\d[1-9]?)\d*/$1/
残しておきたい情報は括弧で囲って$1にキャプチャしてある。$の括弧の外にもマッチする部分があるが、$1への置換により削除される。

 

・自動編集


「遠隔でファイルの該当する文字列を置換したい」
perl -p -i  -e ’s/sysread/read/g’ file
-p: 指定したファイルのすべての行へ置換する
-i: 変更はすべてファイルに書き戻される
-e: プログラム全体がコマンド業のその後の位置に続いていることを示す

 

メモ


2章の続きですが、検索だけでなく置換も踏み込んだ操作について解説されています。
まずは置換の例として、ダイレクトメールのマーカー部分の置換について学びます。
次に、株価表示の整形として小数点3位までの使用でかつ3位が0である場合はそれを表示しないというケースです。すべて置換という操作できる例示がされています。

詳説 正規表現 第二章 正規表現をテキストにマッチさせる 読書メモ

正規表現 第二章 読書メモ その1
前回の続きです。

 

kyoneco.hatenablog.com

 

 

<序 Perlの簡単な解説>

Perl:1980年代に開発されたスクリプト言語。この言語のコンセプトはawk,sedから発展させたもの。
$:明示的な変数の宣言。 ex. $celsius = 30;
Perlではダブルクォート文字列の中に変数を書くことができる。ex. “$celsius C is …”;
 

正規表現をテキストにマッチさせる 今回の主題 (2.3にはいるまで)>

m/…./ :正規表現マッチする
=~ : 正規表現とターゲット文字列を結びつける.マッチすると読む。
ex. $reply =~ m/^[0-9]+$/
→^と$でかこむことで $reply全体が数字のみで構成されているかチェックしている
 

・もっと本格的に 負数や小数の値も受け付けられるようにしたい

  [-+]?      マイナス、プラス記号に対応
  (\.[0-9]*)?   小数部分に対応 
 

・マッチが成功したときの副作用 

  華氏と摂氏とちらの値も入力できるようにしたい
  末尾に[CF]と追加し、キャプチャするために括弧でくくる([CF]).$2にCかFが入る
 

・入り組んだ正規表現

  プログラムの変更で他の括弧が必要になったときに、
  変数の番号がずれてしまうことがある
  (?:...) キャプチャされない括弧をつかうこともできる
 

ちょっと寄り道 なんのメタ文字なのか 

   シェルにもメタ文字があるので異なるタイプのメタ文字をきちんと区別する 
・空白全般を表す\s
 

中締め

   \t タブ文字
   \n 改行文字
   \r 復帰文字
   \s 任意の空白文字
   \S \s以外のすべての文字
   \w [a-zA-Z0-9_] 単語にマッチさせるには\w+という形が便利
   \d [0-9]
   \D \d以外のすべての文字
   /i 大文字と小文字の区別がなくなる
 

メモ

この章の出だしはPerlをつかって具体的なプログラムが出来上がる過程をみながら正規表現について学んでいくという構成です。
そのプログラムは「摂氏と華氏の変換」であり、これのために正規表現をどのようにつかうかをみていきます。正規表現はプログラムへの入力の部分の妥当性のチェックに用いられています。仮想ユーザーが入力する数字等が変換計算に用いることができるかを計算部分の前にチェックするために正規表現を利用しています。

詳説 正規表現 第一章 読書メモ

テキスト検索や置換など正規表現は有用ですが、言語である以上慣れや習熟が必要です。

詳説 正規表現 第3版. Jeffrey E.F. Friedl 著、株式会社ロングテール/長尾 高弘 訳

を教科書として正規表現の理解を深めるべく読書メモを残しながら読んでみたいと思います。

 

正規表現 1章 正規表現入門

・言語としての正規表現

正規表現:パターン言語 (パターン:型、類型、 規則性を持った様式・体系、繰り返されるようす)
*:任意のものにマッチ
?:任意の1文字にマッチ

 

・言語との類似点


正規表現リテラルを単語、メタ文字を文法とする言語
メタ文字:特殊な意味をもつ文字(*など)
リテラル:その他の文字

正規表現という思考の枠組み

正規表現:小さなブロックのような単位を積み重ねて、組み立てる

 

・ファイルからのテキストの検索


egrep:正規表現が利用できるソフトウェア MAC Unixなど
コマンド:egrep [正規表現] [検索対象のファイル]
egrepは対象をみつけたら行全体を表示する

 

・egrepのメタ文字


行頭:^  意味:行頭がある場合、その次の文字と一致する行にマッチする
行末:$
^$:行が行頭をもつ場合、その次に行末が続くならマッチする。空行にマッチ。

 

・文字クラス


[]:複数の文字のどれか1つとマッチさせる.ex. [ab],[0-9],[Ss]mith
ダッシュ(ー)がメタ文字になるのは文字クラスの中だけ。

 

・否定文字クラス


[^]:リストに含まれていない任意の文字にマッチ。ex [^1-6] →789にマッチ

・任意の文字にマッチするドット
. :任意の文字にマッチする文字クラス ex.03.19.76 →03/19/76,03-19-76,03.19/76にマッチ

 

・選択 選択肢


| :またはという意味のメタ文字。複数の部分表現のどれかにマッチさせる ex.^(From|Subject|Date):
括弧によって範囲を限定させる

 

・大文字と小文字の違いを無視する


-i :大文字と小文字を区別しないマッチ
egrep -i [正規表現] [対象ファイル]

 

・単語の境界 単語版の^ $に対応


\< :語の先頭の位置にマッチ
\>:語の末尾の位置にマッチ
\<cat\> :単語の先頭の位置をみつけることができその次にcatと続きその次に単語の終わりの位置が続いたらマッチする。catという単語をさがせということ。

 

・オプション 量指定子


?:あってもなくてももよいという意味。ex colou?r →uがあってもなくてもマッチする 4(th)?

 

・繰り返し その他の量指定子


量指定子:くっついている要素の繰り返しの方法を指示するもの
+:直前の要素の1回以上の繰り返し
*:直前の要素の0回を含む繰り返し

 

・範囲指定繰り返し制御


{mini,max}:繰り返しの最小限と最大限を指定するメタ文字列 ex [a-zA-Z]{1,5}

 

・括弧と後方参照


括弧はその中の部分式にマッチしたテキストを覚えられるようになっている
1個の単語全般にマッチしたあとでさらに同じものにもう1回マッチしたかを検証したいときに役立つ
\1 :後方参照 括弧はその中の部分式がマッチしたテキストを覚えており、\1はそれに対応する
\<the the \> → 一般化 \<([A-Za-z]) + \1\>

 

エスケープ 


\ :メタ文字をエスケープするとメタ文字の特殊な意味は失われリテラル文字として扱われる

 

 

メモ

まずは言語として正規表現を捉えたときに、文字にあたるものと文法について第一章でまとめられています。基礎を発展させるの節では実例も挙げられていて、前半で整理された文法的知識がどのように実際に利用できるかが例示されています。メタ文字のまとめに挙げられている15項目を運用するのが正規表現の文法にあたるところです。これをどのように組み合わせてつかっていくかというのが肝になるでしょう。

不連続回帰デザイン

ランダム化比較試験(RCT)は内的妥当性が最も高い、つまり真の効果に近い効果を引き出せる研究デザインです。しかし、巨額な費用や手間などでそうやすやす行えるものではありません。最近ではいわゆるビックデータの利活用が注目されています。日常生活などに溢れる情報通信機器の普及によってデータはいたるところに蓄積されています。様々な分野でビックデータを利用して新しい知見の発見をという機運が高まってきています。蓄積されたデータというのは研究目的に集められたものではありません。すでに起こったデータをもとに興味のある現象を解析していくというスタイルをとることになります。つまり観察研究としての位置づけとなるわけですが、情報の多様さと多量さを武器に新しい発見をしていきます。これまで、観察研究はRCTと比べると一歩劣る存在としてみられてきましたが、利用の仕方によってはRCTを補うことやRCTでは実現できないことも示すことができます。観察研究でネックとなるのは交絡です。交絡の影響を排除する最も確実な方法はRCTです。一方、観察研究はRCTと異なり、介入の選択がランダムではないため、交絡の影響を避けられません。この交絡因子の制御について近年は様々な統計手法の発達してきています。様々ま手法が開発されてきていますが、興味深いと思った、不連続回帰デザインについて読んだ*ので、まとめてみたいと思います。

*医学論文の難解な統計手法が手に取るようにわかる本 

https://www.kanehara-shuppan.co.jp/books/detail.html?isbn=9784307004879

 

不連続回帰デザイン

1960年、Thistlethwaite and Campbellらが教育心理学の分野で初めて利用した統計手法。ある閾値をもとに特定の処置を行う状況で、その処置の効果を判定できる。処置の割り当てに関わる連続変数を割当変数という。割当変数の閾値近傍の対象者を集め、閾値以上と閾値未満の2群間でアウトカムを比較する。閾値から非常に近い両群の患者を集めてくることが重要。割当変数について、測定時閾値近傍で分けた2群は、処置するかしないかは偶然によりランダムに割り当てられたと考えることができる。その後の両群を追跡し、アウトカムを比較すれば処置の効果を推定できる。この手法の前提として、割当のルールと閾値がわかっている、介入前に割り当て変数を操作できない、閾値付近で介入「以外」の要因はすべて連続的な変化であるというものである。データ解析して得られた結果の一般化可能性は、割当変数の閾値付近の対象者に対してであり、閾値から離れるほど結果の当てはめはできなくなる。割当変数の幅を変えた何通りかの感度分析を行う。

例1:降圧薬の治療効果

収縮期血圧測定時、140mmHg以上で降圧薬開始するというルールと閾値があるとする。139mmHgと140mmHgの血圧の対象者は本質的に差があるわけでないと考えられるため閾値近傍ではランダムに降圧薬が割り当てられたと考えることができる。閾値近傍の2群を比較してアウトカム(脳卒中の発症率など)を比較する。

 

例2:ワクチン接種の医療政策の影響評価

ある年のある月から、あるワクチン接種が国による勧奨接種から個人による任意接種に変更された。ワクチンの対象は小児である。この政策変更によって小児の生年月日によってワクチン接種をうける確率が異なるようになる。政策変更の基準月の前に生まれたか後に生まれたかはランダムである。基準月に近い前後で2群に分けてアウトカム(ある感染症の発症率など)を比較する。この具体的な形式の具体例としてSmith Lmら CMAJ 2015がある。

統計モデリング

統計モデリングについて最近よく考えています。統計モデリングは、確率分布を利用して数理モデルをつくり現象の理解や予測を行う行為です。確率分布は統計モデリングにおいて構成要素となる重要な部品です。知りたい現象がどのような確率変数として表せ、どのような確率分布に従うのかを考える必要があります。つまり、確率変数を導入し、それがどのような確率分布に従うかを考え、モデル式としてそれを表現します。モデル式として表せたらシミュレーションすることができます。得られた推定結果を解釈して、知りたい現象の予測などに役立てます。この一連の過程が統計モデリングに含まれます。

知りたい現象、確率変数、モデル式のように分解して考えると理解が容易です。例えば、予測したいものとして、アイスクリームの売上があるとします。売上に影響を与える要素として、気温、天気、アイスクリームの価格が挙げられます。つまり、アイスクリームの売上 〜 気温、天気、アイスクリームの価格といった関係が想定できます。この予測においてもっとも単純なモデル式としては、この3つの要素のうち1つだけを使い、アイスクリームの売上 〜 気温といった関係を考え、線形モデルを考えるものです。そして気温は連続型の確率変数であり、どのような確率分布に従うかを考えると正規分布に従うとしてもよいでしょう。以上からモデル式として、アイスクリームの売上 〜 N(β0 + β1×気温, σ^2)が構築できました。あとは、データからパラメタの推定を行い実際の予測に役立てるようにします。

統計モデリングの過程でもっとも単純なものを考えました。より複雑なものを考えたいときにはどうしたらよいのでしょうか。線形モデルは仮定したまま、モデルの構造をかえたいときには、説明変数をかえることやデータの従う確率分布をかえることが考えられます。前者では上の例でいう気温をアイスクリームの価格にかえることです。また後者では、気温の従う確率分布を正規分布から、よりその確率変数が適合するであろう他の確率分布にかえることです。気温は正規分布がもっとも妥当に思えます。例えば、アイスクリームの売上 〜 アイスクリームの価格としてみます。価格は対数正規分布を仮定するように変更することはできます。こういったモデル構築について一般化し、確率分布の選択や従属変数への適合性を考慮した変換を加えるといったモデル構築が一般化線形モデルの考えにつながります。

 

本屋での体験 代理体験

最近本屋に関する面白い記事を読みました。

https://omocoro.jp/kiji/358099/

 

本屋に行くことは身近で経験できる文化的な活動と言えます。何か読みたい本があらかじめ決まっていてそれを探しに行き買うことがメインかもしれません。それ以外にも何も目的なく新しい本や雑誌との出会いを求めていくこともあります。上記の記事では後者の体験について大きな本屋での体験をRPGゲームのようにとらえてライター達の感じることやそれぞれの思いがかかれています。

大きな本屋はたくさんの本が並んでいます。どのように本を配置するかやきた人の興味を引くようにポップを置いたりするのも書店員の仕事です。書店員の考えていることも上記記事で語られていて興味深いです。立場を変えてもしくは相手の立場になってみて考えるというのは大切なことで自分目線だけではえられないまたは見えてこない視点がみえてきます。

小説を読んだりすることは想像の世界ではありますが主人公などに感情移入することであたかもそのひとになってその人の体験できるという経験です。本を読むことの効用としてこの代理体験はよく挙げられるものです。他者の気持ちを想像したり、なりきったりできる経験は他者とのコミュニケーションに役立ちます。他者が何をどう考えているのかそしてそれにどのように対応してその結果どういうことになったかというのはまさに一連のコミュニケーションの過程を体験することに他なりません。相手の気持ちを慮って対応しましょうと軽々しくいわれてもできません。でも現実世界で多くの人とコミュニケーションをとって実践できるかといえばそれも難しいです。小説などを通した代理体験によりそういったコミュニケーション能力というべきものが育まれるのでしょう。これについて芦田愛菜さんはよくネットでは人生2週目などといわれるように年齢に見合わないほどのコミュニケーションと深い見識をかんじます。特に対談形式のインタビュー記事では本当に上手に話を聞いて、話を聞き出している姿に関心します。彼女は幼少期から絵本をたくさん読んでいたようです。また役者であるため自分ではない他者を演じのが仕事です。この人生2週目といわれるほどの対応力は幼いときからのこういった活動からもたらされているのかもしれません。