プラグイン的pythonプログラミング

5/21に運よく(運悪く)小田急線で人身事故が起きたため、小田急線の運行情報をゲットするスクリプトが書けた。

import lxml.html
import requests
#<BR>タグを改行文字に変換して文字列化
def repBR(element):
rawstr = lxml.html.tostring(element)
repstr = rawstr.decode('utf-8').replace("<br>", "\n")
return lxml.html.fromstring(repstr).text_content()
def notify(target):
retDict = {}
try:
target_url = 'http://www.odakyu.jp/cgi-bin/user/emg/emergency_bbs.pl'
target_html = requests.get(target_url).content
root = lxml.html.fromstring(target_html)
time = root.cssselect('.date')[0]
left = root.cssselect('div.left_dotline_b')
#div.left_dotline_bがあれば運行状況が出ている
if len(left) > 0:
str = left[0].text_content()
str += "\n"
if len(left) > 1:
if len(left[1].cssselect('img[alt="ロマンスカーの運転状況"]')) == 0:
str += "\n詳細情報\n"
else:
str += "\nロマンスカーの運転状況\n"
str += repBR(left[1])
if len(left) > 2 and len(left[2].cssselect('img[alt="ロマンスカーの運転状況"]')):
str += "\nロマンスカーの運転状況\n" + repBR(left[2])
dict = {}
dict['time'] = time.text_content()
dict['contents'] = str
retDict['小田急小田原線'] = dict
except Exception as ex:
print(ex + " from odakyu")
return retDict

更に運行情報メイン処理も作成できた。ソース内で使うplugins.iniとsettings.iniは次のようなフォーマットを前提とする。

plugins.ini
[plugins]
jreast=中央線快速電車|中央・総武各駅停車|総武快速線|東海道線|京浜東北線|横須賀線|宇都宮線|高崎線|常磐線快速電車|中央本線|上野東京ライン
odakyu=小田急小田原線
yomiuritop=読売新聞

settings,ini
[settings]
to=xxxx@yahoo.co.jp|xxxxn@gmail.com
notify=読売新聞|小田急小田原線|中央線快速電車|中央・総武各駅停車

[smtp]
server=smtp.mail.yahoo.co.jp
pass=xxxx
port=587
from=xxxx@yahoo.co.jp

肝はプラグイン処理で、これは今後作成する新聞サイト一括ゲット+表示アプリでも使用するプロトタイプとして作成した。
__import__
を使って、インターフェースを統一した*.plファイルを読み込む。ここでは小田急線のソースにもあるnotifyという関数を必ず実装しておく。
巡回するサイトが増えたら、決まった形式のデータを返すスクリプトを作成し、iniファイルに設定を追加するだけで済む。コアとモジュールを分離し、コアは比較的単純な処理でよく、一番面倒なスクレイピング処理の実装は各モジュールに分散化できる。
一定時間ごとに処理をする方法もpythonでは楽勝だ。time.sleep(秒)を実行しつつwhile無限ループをかますだけでおしまい。sleepがCPU使用率を食うこともない。

#plugins.iniの読み込み
import configparser
conf = configparser.ConfigParser()
conf.read('plugins.ini')
pluginDict = {}
for item in conf.items('plugins'):
vals = item[1].split('|')
pluginDict[item[0]] = vals
#settings.iniの読み込み
conf.read('settings.ini')
sendList = []
for to in conf.get('settings', 'to').split('|'):
sendList.append(to)
notifyList = []
for notify in conf.get('settings', 'notify').split('|'):
notifyList.append(notify)
#使用するpluginと引数を決定する
targetPlugins = {}
for plugin in pluginDict.keys():
lines = pluginDict[plugin]
for notify in notifyList:
if notify in lines:
if plugin not in targetPlugins:
targetPlugins[plugin] = []
targetPlugins[plugin].append(notify)
smtpFrom = conf.get('smtp', 'from')
smtpServer = conf.get('smtp', 'server')
smtpPass = conf.get('smtp', 'pass')
smtpPort = conf.get('smtp', 'port')
#1分ごとにnotifyListを対象にpluginを実行、内容に変化があればメール送信
import time
import datetime
contentsDict = {}
d = datetime.datetime.today()
print("処理開始 %s時%s分" % (d.hour, d.minute))
while True:
for plugin in targetPlugins.keys():
module = __import__(plugin)
#プラグイン読み込み、実行
result = module.notify(targetPlugins[plugin])
for val in targetPlugins[plugin]:
strNotify = ""
#メモリ中のcontentDictに保存された内容と比較
#内容が変わった場合、カラに変わった場合にはメール送信
if val in result.keys():
#内容あり
item = result[val]
if (val in contentsDict.keys() and contentsDict[val] != item["contents"]) or val not in contentsDict.keys():
#メモリがカラ or 内容に変更有
strNotify = item["time"] + "\n" + item["contents"]
contentsDict[val] = item["contents"]
else:
#内容無し
#メモリがカラでない場合のみメール送信
if val in contentsDict.keys():
strNotify = "平常通り運行しています。"
#メモリ内容を消す
del contentsDict[val]
if strNotify != "":
#メール送信(現時点ではコンソール出力のみ)
print("[" + val + "]\n" + strNotify)
#1分ごとに反復
time.sleep(60)

なお、まだメール送信処理は未実装。コードはできているが、コンソールでそれなりに動作することが分かったらメール送信機能も付ける。これで、運行情報通知プログラムはほぼ完了だ。外出時に人身事故が起きても駅についてびっくりということがなくなる。来週はメール送信処理をつけて、さらにニュースアプリについても実装を開始しよう。

pythonのインデント強制な書式の利点の一つは、構造化プログラムでよくやる中カッコの閉じ忘れが原理的に発生しないところだ。これはありがたい。でもインデントを1つミスると予期しない処理をしてしまう危険性とも隣り合わせだね。

もう一つ。はてなブログでははてな記法モードを使わないとソースコードが綺麗に表示できないことが不便だ。見たままモードにもスーパーpre機能をつけてほしい。


収入激減の予定

来年度から収入が最大で2割減りそうだ。生活が維持できない。日本が好景気なんて嘘だね。

今日から1年以内に全力で副業のための知恵を絞る必要ができた。ここまで見てきたビジネスの基礎を何とか使えないか。。?


香港の仕手株

香港株は値幅制限がない。なので過熱した株の下がり方はガーラなんてもんじゃなかった。

 

f:id:happyholiday:20150522191448p:plain

記事

Hanergy Plunge Erases $14 Billion Of Chairman’s Fortune; Li Hejun In Beijing – Forbes

香港市場で漢能薄膜株が暴落、会長1日で1.7兆円失う – WSJ

50%暴落して1.7兆円の損だって。こわいこわい。日本ではストップ安でもせいぜい-20%くらいだから、可愛いもんなんだね。

よく見ると今年の3月から2倍になってるので、元に戻っただけと言える。なお、下がる材料はなかったらしい。

 

f:id:happyholiday:20150522191428p:plain

First Hanergy, now Goldin: Hong Kong stocks are dropping like stones — and no one seems to know why | Financial Post

関連会社も41%暴落した。ここはそもそも元の値段にすら戻ってないので、もう一度下がるんじゃないか?

 


Anthony Braxton With The Northwest Creative Orchestra – Eugene (1989)

★★★★★

即興演奏サックス奏者アンソニー・ブラクストンのボックス

Amazon.co.jp: Anthony Braxton : Complete Remastered Recordings
の7枚目で、8曲79分にわたるライブ版。どの曲も “Composition No. 112” のように意味のないタイトルが付けられていて、見た目は情緒が全くないように思える。またブカブカ訳わからんインプロが続くのかと思ったら、3曲目で衝撃を受けた。単純な拍子のベースが1本入っただけで、突然ストーリー性が附加されたのだ。曲全体に1つの筋が通り、一見目茶目茶なようで分かりやすくなる、不思議な体験をした。

ここから考えると、曲の体をなしていないようなインプロ曲は、てめーが聴きながらバックグラウンドを想像しろ、音が発せられるコンテキストは自分で考えるんだ、というメッセージなのではないかと思った。奏者にも創造力が求められるが、リスナーにも想像力が求められる。通りで聞くのが苦しいと思ったよ。

同様の体験は7曲目でも起きた。こちらはドラムが恒常的にリズムを刻んでいるため、そこから我々に蓄積されたドラム体験が喚起され、曲のイメージを大幅に膨らませてくれる。なので他と比べて聴くのがとても楽だった。

普通の曲とインプロ曲の関係は、漫画と小説の関係に似ている。漫画は視覚イメージを絵に固定する。この人物はこういう顔、この場面ではあんな表情、、そのため我々に残されている想像力の余地が少ない。一方、小説には視覚イメージが用意されていない。そこに書いてあるのは概念の集合体で、具体的なイメージは全くない(ラノベは除く)。そのため我々の想像力を使わなければ読むことが不可能である。同様に、普通の曲はコードもメロディーもサビも、歌なら歌詞も用意されている。視覚的イメージはないが聴覚的イメージはすべて用意されている。しかしインプロ曲はこれらがほとんど欠けている。我々のいままでの音楽体験を総動員して、想像力で音の背景、意味、これらを補完して聴かなければならない、ということが分かった1枚だった。ありがとうブラクストンさん。


弐億貯男さん

株について右も左もわからないうちに、まず成功している人のブログを読んでどのような考え方をしているのか学ぼうと思っていくつかのブログを回し読みした後、この2つのブログが残りました。常に新着記事をチェックし、過去記事もゆっくりと全部読もうと思っています。

 サラリーマンが株式投資でセミリタイアを目指してみました。

バリュー投資で一番成功していると思われる方のブログです。

ゆうゆー投資法

バフェット、リンチの考え方を基礎とした、筋の通った理論が魅力のブログです。

 このうち前者のブログで、最近いくつか銘柄選びのポイントが解説されています。

 http://blog.livedoor.jp/kabu2oku/archives/50748338.html

http://blog.livedoor.jp/kabu2oku/archives/50748264.html

 1つ目の記事はPERしか参考にしていないような解説がされているので、正直これだけでいいのか!?と思いました。しかしブログを読むとふるさと納税銘柄だったり、介護銘柄だったり、景気低迷期に人材派遣銘柄、IPO数か月後に割安放置された銘柄、などなどここに書いていないポイントがいくつもあることが分かります。ブログ本文には書かれていない定性的な分析の占めるウエイトが高いように思います。

2つ目の記事はとにかく始めてみることが重要だ、とあります。私もそう思います。PERは数千とある銘柄の足切りとして使用する最低限の必要条件なのでしょう。

リーマンショックで多額の含み損が出た銘柄を多額の含み益に変え、東日本大震災で暴落した相場も安値で仕込むチャンスに変えてしまって乗り切り、近年では購入した銘柄が高騰することが多い弐億貯男さんの腕は、経験と才能に下支えされていると感じました。企業分析をいくら正確にやったところで、未来を完全に予測することはできないという欠点があります。株式投資で利益を出せるかどうかは、市場での立ち回りが最も大きな役割を果たすのではないかと感じました。

しかし企業分析は面白いです。いろんな会社がいろんなビジネスを動かしていて、即座に決算という数字になって結果が返ってくる。どの会社も利益のため・社会のため・自分のためなど様々な思惑のもとにアクションをしている。利益に結びつかなくても構わないので、私はこれからもいろんな企業のIRや決算、資料、有報をできるだけ沢山読んでいきたいと思っています。


はてなダイアリー→はてなブログへのインポート機能によるレイアウト崩れ

はてなダイアリーからインポートした過去記事が全てレイアウトが崩れてしまって悲惨な状態になっている。原因ははてなブログとはてなダイアリーの、行の取り扱いが異なることだ。

はてなダイアリーでは、本文中で改行すると自動的に段落が分かれる。実質、Pタグを付けたのと同じ効果が得られる。

はてなブログの「見たまま」モードを使っている場合でも、改行ごとに自動的にPタグが付与される。はてなダイアリーと同じ感覚で記事を追加することができる。

しかしはてなダイアリーからインポートしたデータはPタグが付いていない。おそらく行ごとにBRタグが付けられている。はてなブログはHTML編集機能があるのでシミュレートしてみた。
長い段落を書いてもこんな風に行間が詰まって読みにくくなってしまう。なぜはてなダイアリーと同じレイアウトにしないのか。インポートしたデータははてなブログでは「はてな記法」モードの扱いになるが、はてな記法モードの仕様がはてなダイアリーと異なるようだ。段落間にスペースを空けるには1行空行を挿入する必要がある。
過去の記事を全て修正するのはとてもしんどいので不可能だ。仕方ないので、今後それなりにアクセス数のある記事だけをピックアップして直していくしかなさそうだ。
インポート時に段落の取り扱いのオプションを追加してほしいものだ。


The true investor scarcely ever is forced to sell his shares, and at all other times he is free to disregard the current price quotation.

But note this important fact: The true investor scarcely ever is forced to sell his shares, and at all other times he is free to disregard the current price quotation. He need pay attention to it and act upon it only to the extent that it suits his book, and no more. Thus the investor who permits himself to be stampeded or unduly worried by unjustified market declines in his holdings is perversely transforming his basic advantage into a basic disadvantage. That man would be better off if his stocks had no market quotation at all, for he would then be spared the mental anguish caused him by other persons’ mistakes of judgment.

―The Intelligent Investor, Chapter 8

 

注記者談

This may well be the single most important paragraph in Graham’s entire book. In these 113 words Graham sums up his lifetime of experience. You cannot read these words too often; they are like Kryptonite for bear markets. If you keep them close at hand and let them guide you throughout your investing life, you will survive whatever the markets throw at you. 

 

この本で一番大事なことだそうだ。


祭りのあと

ガーラ祭り終了。

 

f:id:happyholiday:20150521150227p:plain

昨日のイメージ

http://subcham.blog.fc2.com/img/20130726221927bf6.jpg/

今日のイメージ

http://ameblo.jp/19980512yuko/image-11935993874-13090997237.html

 

とはいえ、株は1日で金が完全に消えてしまうわけではないので、こんなギャンブル銘柄でさえ身ぐるみ剥がされるほどのリスクではないんだね。でも、ゆっくりと金が消えていく様子は心臓に悪い。

未だに明日上がると信じている人がいることに泣かされる。ここの適正価格は日曜に分析した通り、100円台だというのに。

 

http://textream.yahoo.co.jp/message/1004777/4777/30/3051

ここは株式市場の場を借りた公営ギャンブル。テラ銭は証券会社への手数料だけだけれど、真の胴元は大口投資家。昨日の朝の爆下げのとき、とっくに高値で売り抜けていることだろう。


ゲーム株のボラボラ

f:id:happyholiday:20150520192430p:plain

いつ崩れるのか気になって、仕事中チラチラ見ていた。マイナス20%程度の値を付ける地獄から前日終値の間を何回も繰り返すとんでもないボラだ。掲示板はストップ高を信じる買い煽りで一杯。今日は朝一で大口がドカンと売っているから、天井を付けてしまった可能性が高い。

今日分かったことは、yahoo掲示板に群がる人間は間違いなく小口の集団であるということ。書き込みが株価に反映する度合いが小さいから。明日プラスになるか、マイナスになるかは誰にもわからない。みんないつかは崩れる橋と思って渡ってるんだろうけれど、目先の欲に目が眩んで見えなくなっちゃってるだろうな。

 

本日、ゲーム株の中でも注目していた、ボルテージという女性向けゲーム主体の企業の株価が+26.27%のストップ高を記録した。「花より団子」のゲーム化が大きな材料だ。ここはガーラと違って、自己資本比率70%超の無借金、最近不調だが辛うじて赤字にはなっていない、まともな企業だ。時々仕手株化し、でかい上髭を記録したこともあった。しばらく投機家たちのオモチャになるだろうけれど、一体どれくらいの株価で安定して、今後どれくらいの利益を生むのかは興味がある。


森生明 – MBAバリュエーション

★★★★★

バリュエーションの入門書。この本の要点は次の式に集約される。

 

PV=C/(r-g)

 

PV→現在企業価値(Present Value)

C→キャッシュフロー(Cache flow)

r→キャッシュフローの安定性・リスク(risk)

g→キャッシュフローの成長性(growth)

 

大部分の記述がこの式を基礎として成り立っている。1冊かけてこの式の重要性を説いていると言っていいと思う。キャッシュフローを基にして考えている点が特徴的だ。

なお、(r-g)はほぼPERと等しい。つまりPERの高い企業は、PVを高く評価されている。すなわち企業の生み出すキャッシュを超える価値を市場に認められているということになる。

後半のM&Aを使った実例も面白い。M&Aの世界では、一つの目安として5年後の企業価値を算出し、買収価格を決定している。現在の企業価値は、5年後の価値をおり機関投資家の目で見ると、株価は5年後の企業価値を反映しているとみなし、そこからマイナスに乖離していれば買うしプラスに乖離していれば売る、ということになる。

おそらく入門中の入門の本なのだろう。C, r, gの求め方は若干記述があるものの具体性に欠ける。骨子は十二分に掴めるがもっと勉強が必要なことはよくわかった。次なるステップには次の本が必要だろう。。

 

企業価値評価 第5版 【上】

企業価値評価 第5版 【上】

  • 作者: マッキンゼー・アンド・カンパニー,ティム・コラー,マーク・フーカート,デイビッド・ウエッセルズ,本田桂子,柴山和久,中村正樹,三島大輔,坂本教晃,坂本貴則,桑原祐
  • 出版社/メーカー: ダイヤモンド社
  • 発売日: 2012/08/31
  • メディア: 単行本
  • この商品を含むブログを見る
 

 

私のような新参者にとっては非常に優れた本だが、著者の意見やコラムの分量が多く、体系的な内容が充実しているわけではない。フルプライス¥2,592を払うにはちょっと高い。