久々の Pythonネタ

Bokehという Pythonのライブラリの勉強を少しだけしました APIとかの変更が行われており、解説Blogでも 2016年のものではもう動作しません

最新のマニュアルを参照せねばなりません その結果こんなのできました

from bokeh.plotting import figure, output_file, show
x = []
import numpy as np
x = np.arange(0.1, 3.0, 0.1)

y0 = [i**2 for i in x]
y1 = [10**i for i in x]
y2 = [10**(i**2) for i in x]

# output to static HTML file
output_file("log_lines.html")

# create a new plot
p = figure(
   tools="pan,box_zoom,reset,save",
   y_axis_type="log", y_range=[0.001, 10**11], title="log axis example",
   x_axis_label='sections', y_axis_label='particles'
)

# add some renderers
p.line(x, x, legend="y=x")
p.circle(x, x, legend="y=x", fill_color="white", size=8)
p.line(x, y0, legend="y=x^2", line_width=3)
p.line(x, y1, legend="y=10^x", line_color="red")
p.circle(x, y1, legend="y=10^x", fill_color="red", line_color="red", size=6)
p.line(x, y2, legend="y=10^x^2", line_color="orange", line_dash="4 4")

# show the results
show(p)

これでできるグラフは下記のようになります

グラフ

しかもこのグラフ動くのです すごいですねえ

Python BootCamp in 茅ヶ崎 に参加してきました

茅ヶ崎駅から歩いてPython BootCamp in 茅ヶ崎会場まで行きました 案内では駅から徒歩5分ぐらいとあったのですが、スマホで検索してもなかなかわからず、何回か行き過ぎて15分ぐらい歩き回ってようやく会場に到着しました

今回の参加者は 12名でした そして講師の先生方か 5名と、とても手厚い講義でした

内容的には Python言語の基礎に始まり、簡単なプログラム作成、そして Scrapingを行いました 僕が改変して使用した Codeは以下の通りです

import requests
from bs4 import BeautifulSoup


def main():
    url = 'http://www.kamakuraheart.org'
    res = requests.get(url)
    content = res.content
    soup = BeautifulSoup(content, 'html.parser')
    columns = soup.find_all('div', class_='col-md-4')
    for column in columns:
        name = column.h2.text
        explain = column.p.text
        print('***項目***', name, "---内容---", explain)


if __name__ == '__main__':
    main()

これで結果は以下の通り

***項目*** TAVI/TAVR (経カテーテル的大動脈弁植え込み術/置換術)および僧帽弁閉鎖不全に対するカテーテル治療(TMVR: Transcatheter Mitral Valve Repair = 経カテーテル的僧帽弁修復術) ---内容--- ここ数年間で循環術です。当科は、この分野でも日本国内数少ない治験施設として、その実施に当たってきました。今でも重症大動脈弁狭窄症に対する治療法として外科的大動脈弁置換術しか治療法を提示されていませんでしょうか? 今や、TAVIという画期的な治療法を受けることができるのです。
***項目*** PCI (経皮的冠動脈インターベンション) ---内容--- 経皮的冠動脈インターベンション (PCI: かつては経皮的冠動脈形成術 PTCA とも呼ばれていました)は 1977年に当時チューリッヒ在住であった Dr. Andreas G治療が行われました。この時は、単純な風船の拡張により、冠動脈狭窄病変を拡大し成功裏に治療が行われました。この時より、既に40年間が経過し、その間に様々な治療法の改良と医学的知識の蓄積が行われ、現在では薬物界的にも先駆者であり、実際最初に齋藤 滋がPCIによる治療を行ったのは、昭和56年 (1981年)のことでした。それ以来、日本核内のみならず全世界での治療経験を有しています。
***項目*** カテーテル・アブレーション ---内容--- 頻拍性不整脈に対して、カテーテルから主として高周波電流通電を局所異常回路に対して行い、不整脈を根治する治療法です。伝統的な対象疾患は、発作性上室性頻拍症、れてきた高周波通電アブレーションのみならず、マイナス70度まで異常電流回路組織を冷却し、これにより異常回路を遮断するクライオ・アブレーション(Cryo Ablation)も多数の患者さんに対して行っており、患者さんに対する負担軽減に寄与しています。
***項目*** EVT (血管内治療) ---内容--- 以前は PTA (Percutaneous Transluminal Angioplasty: 経皮的経管的血管形成術)という呼び名が主流でしたが、必ずしも血管形成のみが治療の方法論ではないことから、最近では は、冠動脈に対する治療や、TAVI/TAVRも排除できませんが、一般的に EVTとは PAD (Peripheral Arterial Disease: 末梢動脈疾患)に対するものに限定されます。主な対象疾患は、閉塞性下肢動脈硬化症 特に、重症虚血肢 (Critical Limb Ischemia)、腎血管性高血圧症、内頚動脈狭窄症による一過性脳虚血性発作/脳梗塞症が挙げられます。
***項目*** 現在当科で行っている医療機器治験 ---内容--- 医療機器、特に循環器病分野の医療機器は急速に進歩しています。これにより以前は胸を開いての開心術でしか、あるいはそれ以前には薬物療法でだましだまし何と切り開くことなく)にカテーテルを用いて治療することが可能となってきました。この急速な医療機器の進歩をもたらしているのが、治験なのです。当科では、冠動脈内薬剤溶出性ステント、冠動脈内生体吸収性薬剤溶出性スキカテーテル左心耳閉鎖術など多数の最先端治験を実施しています。
***項目*** ペースメーカーなどの植え込み術 ---内容--- 現在では年間 200例を超える患者さんに対して、ペースメーカー植え込み術、ICD/CRT/CRT-D植え込み術を行っております。以前に体内式ペースメーカー植え込み行わえ込み電極が感染した場合に、電極を抜去して新しい電極を植えねばなりません。しかし、植え込みが長年経過していると、電極は心筋に強く接合しており、その抜去にはレーザーで癒着組織を剥離する必要があります。これを行うのが、エキシマレーザーを用いた植え込み電極レーザー抜去術でありますが、当院では神奈川県下でも数施設しか無い、施行の認定を受けており、他の施設からも抜去依頼を多数受けております。

要するに http://www.kamakuraheart.org/index.html を読み込み、その中からある特定の tagがついた部分を切り抜いたのです

でも一番参考となったのは、venvによる Python仮想環境の作成でした この過程では TA (Technical Assistance)の方々にお世話になりました

勉強会は 13:00に開始し、17:00で終了 その後小一時間会場で色々な雑談を行い、それから茅ヶ崎駅から近い居酒屋で二時間ぐらい歓談しました とても楽しかったです でもやっぱり僕がダントツにおじいちゃんでしたよ 一番若い参加者は現在大学生の 20歳ぐらいの方で、アルバイトでプログラムを書いている、という本格的な IT engineerでした 参加者の平均年齢は 35歳ぐらいでしょうか 以前参加したこのような会よりも少し年齢が高い印象でした

それにても茅ヶ崎駅に以前行ったのは うーん 20年ぐらい前でしょうか 随分と発展しているのに驚きました それでも人の流れが随分と少なくなった、ということでした

申し込みをして、実際に行くまで「参加するか」「キャンセルするか」と思い逡巡しました 昨日の会参加直前にも迷いに迷いました 一番恐れたのは「自分が参加して皆の足をひっぱるのでは?」という恐れでした しかしビルの屋上から飛び降りるような覚悟で参加してみてとても良かったです 決して知り合うことは無いであろう方々にも知り合うことが出来ました これからも思い切って参加したいと思います

 

勇気を持って

あーー いや うーん でも いや 勇気をもって

ということで、逡巡した挙句にこれに参加申し込みしました 茅ヶ崎ですので近い、ということもあります でも勇気がいるのです (1) 例によって参加者の中では一番の高齢、皆がきっと「何だこのジジイは? そもそもキー打てるのかよ? Bashのコマンド知ってるのかよ?」なんて言葉が廻りから聞こえそうです (2) そもそも皆参加者はプロか、あるいはその方面を勉強している学生さんに決まってる 対して僕はインタベの医者ですよっ (3) そもそも身なりだって恥ずかしいし・・・

しかもですよ、この日は AsiaPCR Singapore Liveでライブの Operatorやってから、夜行便での帰国です 帰国した後、多分それは 6:00AM頃に羽田だから 13:00までまったりと時間を過ごさねばならないし・・・

でもこれが人生最後のチャンスかもしれないし、今後の僕の生き方を決める大きなことかも知れないし、勇気を振り絞り参加することにしました

1月27日

Python Boot Camp in 神奈川

主催 : 一般社団法人 PyCon JP

ハッシュタグ :#pycamp
募集内容

参加者2000円(前払い) 先着順  9/10

前払いについて

前払いについての連絡先:

(参加者にのみ公開されます)

キャンセル・参加費用の払い戻しについて主催者からの説明:

* キャンセルされた場合、参加費用の払い戻しは出来ません。
* キャンセル操作をせずに、ご自身で他の参加者に権利を譲る等の対処をお願いいたします。
(受付番号とconnpassのIDが記載された参加票を譲渡先にお渡しください)
* もしイベントが中止となった場合は、全額返金いたします。

OSX上で、Sublime Text 3、Atomそして VIM/GVIM/MacVIM上で Python3を一発で走らせる

全然プログラムも書かないくせに、Pythonの環境構築ばかりに凝っています それであっという間に時間が流れて行くのです それはそれは楽しい作業であり、なかなかうまくいかないことがまた楽しいのです とは言うものの、ついに昨夜目標を達成しました
それは、僕の環境(つまりは色々な Pythonをインストールしてあるだけでなく、OSXには初めから Python2.7がインストールされているので、そのような混在した環境、という意味です、つまり僕の MacBook Proでは成り立っても、他の方々のMacでは成り立たない可能性も高いのです)で、Sublime Text3、Atom、VIM、GVIMにおいてプログラムを書いたものが、それぞれ Cmd-b、Ctrl-i、そしてCtrl-e、Ctrl-eというショートカットで Python 3.5.1 Interpreterがその今書いたブログラムを走らせることができるようになったのです
これは素晴らしいことであり、効率が良いのはもとより、何より画面を傍で見ていれば、とてもかっこ良く、いかにもハッカーが何か恐ろしいことをやっているように見えるのです そうに決まっています 何よりも画面が綺麗であり、神秘的で高速に変化していくのです
そして、同様の環境は既に SurfacePro4の Windows10でも Sublime Text 3、Vimで実現したのです
一番大変だったのは、OSX Sublime Text 3です この「恋に落ちるエディタ」と称されている素晴らしい Editorですが、その上で Python 3.5を走らせるのは大変でした

まずは自分が走らせたい現在走らせている Python interpreterが何処にあるか調べねばなりません

$which python

これにより

/Users/*****/anaconda/bin/python

が戻ってきましたので、僕の現在の Pythonは /Users/*****/anaconda/bin/pythonにあることが分かります

そこで、これからがめんどくさいのですが Sublime Text 3のメニュー Sublime -> Preference -> 基本設定-ユーザ で設定ファイルを開きます

そこで その設定ファイルを

{
	"build-env":
	{
		"PATH": "/Users/*****/anaconda/bin/python"
	},
	"cmd":
	[
		"/Users/*****/anaconda/bin/python"
	],

のように修正するのです これにより Sublime Text 3では Cmd-Bで Pythonが自動的に走るようになり快適になりました ここまで来るのに相当調べまくりましたよっ

OSXと Windows10の間でクロス・プラットフォーム環境をつくる

現在主体として使用しているマシンは MacBook-Proです この上の native OSである OSX El Capitanで色々としています しかし、数カ月前に SurfacePro-4を手に入れてから、Windows10でも遊んでいます
実はそれ以前には OSX上で Parallels Desktopを動かし、その上で Windows10を動かしていたのですが、やはり重く、MacBook-Proが熱くなることがしばしばだったので辞めました
とは言っても、二つの OSは大分と性格が異なります 今年の夏になれば、Ubuntu-Bashが Windows10 nativeとして走るようになり、そうなればこの垣根は一挙に取り払われるのでしょう それを非常に期待しています
しかし、現在は未だそうは行きません
そこで、二つをつなぐものとして、Pythonを走らせることにしたのです Pythonを走らせる、と言ってもプログラムを描くには Editorが必要です もちろん、Pycharmなどの IDEも存在し、それは Javaで走るためそもそもが Cross Platformなのですが、重いのです 気軽に書く、という訳には行きません
そこで取り組んだのが、Vim (GVim)を両者で走らせることでした 色々な設定ファイルをいじくる必要がありますが、無事両方のOS上で、Ctrl-eを押せば、Python programが走るようになりました
そして次に取り組んだのが Sublime Text3でした これは秀逸の editorですが、これでも Ctrl-bを押せば Python programが走るようになりました
こうなるともうどのマシンを使っているのか分からなくなってしまいます 

数日間の苦労の果てにようやくできました

この処 Pythonと格闘しています 格闘と言っても未だまだ理解が足りないので、試作プログラムを走らせた時に目で見える変化が無いと困るのです それでTkinterを用いて作りました

#!/Users/******/anaconda/bin/python
# -*- coding: utf-8 -*-

from tkinter import *
from tkinter.colorchooser import *
import sys
def colorRed(n): 
    global label1
    label1.configure(bg='#%02x0000' % scale1.get())

def getColor():
    global label1
    color = askcolor()
    label1.configure(bg=color[1])

root = Tk()
label1=Label(root, text="この部分の背景色が変化します", fg='#ffffff')
label1.pack()
scale1 = Scale(root, label='色を指定して下さい', orient='h', from_=0.0, to=255, command=colorRed)
scale1.pack()
Button(root, text="指定する色の選択", command=getColor).pack()
Button(root, text="終了", command=exit).pack()
root.mainloop()

これを走らせると 次のようになります

プログラム走らせた直後
プログラム走らせた直後

スライダーを動かすとラベルの背景色が変化します

スライダーを動かしたところ
スライダーを動かしたところ

今度は色選択ダイアログから直接色を選択します

色選択ダイアログからの色指定
色選択ダイアログからの色指定

色選択ダイアログで指定した背景色に変化しました

背景色が変化しました
背景色が変化しました

さて、プログラムの最初にある二行はそれなりに重要です

#!/Users/******/anaconda/bin/python
# -*- coding: utf-8 -*-

このうちの最初の一行は Python interpreterがこのパソコンの何処にインストールされているかを示しています

そして二行目は、文字コードとして UTF-8を使用するよ と宣言しているのです これをしないと、走らない場合がありますよ

さて、上記の実行結果では、一部文字が欠けていますが、それはもちろんすぐに直せますよ それには一部分を修正すれば良いのです

 

 scale1 = Scale(root, label='色を指定して下さい', orient='h', length=250,  from_=0.0, to=255, command=colorRed)

これでバッチリです

再度 Python環境構築

現在の Pythonには version 3 (主体は v3.5)と version 2 (主体は v2.7)の二系統あります もちろん version 3.5の方が言語体系として合理的であり、かつスピードも早いのですが、これまで創られた膨大なライブラリの多くが 2.7にしか対応していないので、簡単には 2.7一辺倒という訳には行かないのです

そこで、 pyenvという仮想環境を構築するツールが造られ、それを用いれば 3.5系と 2.7系に切り替えることができるように世の中には書いてあります

でも、事はそんなに簡単なものではなく、実際にそれをできる人はいわゆるプロの領域の人々のみなのです しかも、anacondaという Python環境構築ツールを用いれば更に困難なのです

ここ金浦空港ラウンジでの3時間の時間潰しで挑戦しました 参考にしたサイトは数多くありますが、新しいこのサイトが参考になりました 一部記述に誤りがありますが、それは仕方有りません

その結果

$pyenv local anaconda3-2.4.0

で Python 3.5.1が走り

$pyenv local anaconda3-2.4.0/envs/py2

で Python 2.7.1が走るようになりました 目出度しめでたしです

Vimで編集中の Python scriptをそのまま実行する

最強のエディタと称される Vimを練習中です その練習の一環として、Pythonの簡単なスクリプト書いて Pythonの勉強がてら Vim操作法の勉強もしています

この時に、いちいち書いたスクリプトを Vimの中で IDEの如く実行できれば便利なのにと思い色々調べてみましたところ、ありましたね ここです 感謝感激です

つまり .vimrcの中に

autocmd BufNewFile,BufRead *.rb nnoremap <C-e> :!ruby %
autocmd BufNewFile,BufRead *.py nnoremap <C-e> :!python %
autocmd BufNewFile,BufRead *.pl nnoremap <C-e> :!perl %

というおまじないを書き込むのです こうするとC-e (Macの keyboardで Control keyを押しながら、eのキーを押すこと)すると何と Vimのコマンド行に、Pythonの場合には

:!python %

というのが現れますので、それを Enterすれば現在書いているスクリプトが実行されます 何と便利でしょうか

Pythonで OpenCVを取り扱う

このところ数ヶ月間に渡り Pythonを少しずつかじりつつあります 日本では松本氏がゼロから作り上げ、今や世界のWeb Programmingの世界をリードする一つとなっている有名な Rubyという言語が有名ですし、実績もあります

しかし、科学技術の世界では圧倒的に Pythonという言語がトップを占めています その理由としては、科学技術の世界に特化したライブラリが豊富にあるからです

コンピューターで汎用に画像処理をするソフトウェア・フレームワークの代表が Open CV (Computer Vision)というツールなのですが、この本体は Cで書かれているのです しかし、C以外の言語に対するインターフェースが豊富に用意されており、特に Pythonに対する接続は容易である、とされています

しかし、プロでなければそのような接続自体がちんぷんかんぷんなのです これを何とかしようとここ数日のめり込んでいました 資料としてはインターネット上にあるものだけであり、色々な Key wordsで検索し、それらしきページを読み、そして試しているのですが、なかなかうまくいきませんでした

現在僕の OSXには Python処理系が、もともと OSXと一緒にインストールされているもの、Homebrewでインストールしたもの、Pyenv環境でインストールしたもの、そして anacondaを用いてインストールしたもの、そして最後に MacVim同梱のもの、と合計5つも入っているのです それぞれに、Python3.5系と、Python2.7系があるのです

Python単独でももちろんお仕事できますが、PythonのPythonたる所以は 豊富なライブラリの存在です 特に必須のものが、Numpy, Matplot, Tkinterなどですが、その一つとして CV2があります これがOpenCV 2.0/3.0のライブラリなのです

もともと CV libraryは OS Xにはインストールされてませんので、インストールせねばなりません しかし しかし これが難しい 色々試みてもことごとく失敗 いやインストールそのものは誰が行ってもできるのですが、肝腎の Pythonそのものとリンクしないのです 何が何やらさっぱり分かりません

そこで $which pythonで現在用いている pythonがどこに存在するのか調べましたところ、僕の場合には

/Users/******/.pyenv/shims/python

にあるのです そしてインストールに用いたのは anacondaだったのです そこで

$conda install -c https://conda.anaconda.org/menpo opencv3

としたところ、見事にインストールが開始となりました そしてきちんとインストールされたことを確認するためにまず Pythonを立ち上げました

$python

そうすると Pythonが立ち上がり bashの画面は次のようになります

Python 3.5.1 |Anaconda 4.0.0 (x86_64)| (default, Dec  7 2015, 11:24:55)
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

この >>>という Python待受の中で、

>>>import cv2
>>>cv2.__version__

とすると、見事に ’3.1.0’と最新の version番号が戻りました これでとにもかくにも cv2ライブラリがきちんと読み込まれたことが確認できたのです 長い道のりでした

iPython Notebook

またまた iPython Notebookにハマり始めています でも Pythonすら未だ使いこなせていないのでまだまだ道は遠いのですが・・・

それにしても、昔は IPython Notebookと題が書かれていたのが、2015年9月頃からいつの間にか Jupiterとしか書かれていないのです これについても良くわからなかったのですが、昨日 Kindle購入した本によれば、IPythonというPython言語の縛りから解き放たれ、Notebookは独自のプットフォームとして開発が進んでいるとのことでした 現在では、Rubyなど他の言語にも対応しているのだそうです そして Jupiter.orgという団体を作り上げ、そこが中心になって開発しているのだそうです

という訳で TAVIのクラス最初の段階は

class TAVI():
    def __init__ (self, age, sex):
        self.age = age
        self.sex = sex
        
class Sapien(TAVI):
    def __init__ (self, age, sex, size):
        super().__init__(age, sex)
        self.size = size
        print("SAPIEN case, Age = {0}, Sex = {1}, Size = {2}".format(self.age, self.sex, self.size))
        
sapien_case = Sapien(88, 'M', 23)

これを走らせれば 

SAPIEN case, Age = 88, Sex = M, Size = 23

となります