金と緑のエントロピー

ヴォイニッチ手稿,投資,農作について,データ分析手法を使って不真面目に研究する場所です.

2017/09/22 株式投資の収支報告

2017/09/22 今週の株式投資の収支報告です.バランスシートがこちら.

2017/9/22 6              
資産の部       増減   負債の部   増減
852100       -6300 852100 -6300
株式 838500       167600      
    投資資金 813800   174200      
    含み益 24700   -6600 利益剰余金 52100 -6300
現金 13600       -173900      
        新規売 0 自己資本 800000 0
        新規買 173900      

月曜に祝日があり,4営業日のみでした.そのためあまり動かずに終わるかなと思ったのですが,最後の金曜に割りと大きく下がり,\6,300の減となりました.

 

保有銘柄はこちら.新規に2銘柄を購入しました.

銘柄   保有株数
(売却注文中)
取得単価
現在値
取得金額
評価額
評価損益
片倉
3001
  100 1,271
1,295
127,100
129,500
2400
Sシャワー
4838
  100 606
635
60,600
63,500
2900
シモジマ
7482
  100 1,116
1,130
111,600
113,000
1400
サンメッセ
7883
  100 458
462
45,800
46,200
400
ウェーブロックHD
7940
  100 1,318
1,383
131,800
138,300
6500
NTT都市
8933
  100 1,080
1,095
108,000
109,500
1500
アイドマMC
9466
  100 662
659
66,200
65,900
-300
レノバ
9519
  100 1,007
1,118
100,700
111,800
11100
銘柄 売/
買建
建株数
(注文中)
建単価
現在値
建代金
諸経費等
評価損益
ひらまつ
2764
買建 100 620
608
62,000
291
-1,491

NTT都市開発は月曜に下がったところを,アイドママーケティングは今日金曜に下がったところを買いました.

 

機械学習を用いて株価の上がる確率を予測し,投資銘柄を決めています.

意外と株価の変動が激しく,予測確率が変動しやすいため,スイングトレード(数週~数ヶ月程度でのトレード)になっています.

 

現時点での利回りは6週で約6.5%となっています.割と上々の結果ですね.

ただ,ここまでは時合いの良さに助けられていた雰囲気もありました(といっても北朝鮮問題があったり,日経平均は上がってもマザーズは下げ調子だったりと格段に良いわけでもないのですが).

ここからはこの投資方法が本当に有効なのかどうかが問われるところです.

 

2017/09/20 株式投資の収支報告

8がつから,資産のうち80万円に限定して,株式投資をやっています.

正確には株式投資自体は前々からやっていて,下の銘柄以外にも保有しているんですけど,機械学習を使って銘柄の株価予測を行ない,その結果を使って,全80万で投資しています.

毎週金曜にその結果をバランスシートとして書いているので,その結果を公開していくことにします.先週末の結果がこちら.

2017/9/15 5              
資産の部       増減   負債の部   増減
858400       41400 858400 41400
株式 670900       -126200      
    投資資金 639600   -156100      
    含み益 31300   29900 利益剰余金 58400 41400
現金 187500       167600      
        新規売 213400 自己資本 800000 0
        新規買 45800      


左側の資産の部は,投入資金が株式と現金のどちらで保有されているかを示しています.株式は,投資した額と含み益を内訳表示しています.右側の負債の部が,投資した初期投資資金(自己資本)と,利益総額(利益剰余金)を表しています.要は,利益剰余金が,これまでに儲けたお金です.

新規買い,新規売りと書かれているのは,その週に売り買いした株式の金額です.

 

えらく利益が増えていますが,これは前週が北朝鮮ミサイル発射からの情勢不安が解消されて,元の利益に概ね戻ったためです.投資を開始してからの経過週が,日にちの横に書いてあります.5週で5万ほど儲けているので,ざっくりとは週1万ほどの利益ですね.80万の投資で週1万の利益なら,継続すれば中々の利益です.

ただ,今週は日経平均も20000程度で留まり,それほど良い時合いではないので,週の損益は赤字になりそうです.もう少し利回り想定は下がるかも.

 

こうして書いてみると,バランスシートというものが良くできているものかがよくわかりますね.

利回りなんかも表示すると良さげなので,いずれ書くことにします.

 

 

現在の保有銘柄はこちら. SBI証券の口座内容をそのままコピペしています.

このデータは今日取ったものなので,上の保有株総額と合わないですのでご注意.

銘柄 保有株数
(売却注文中)
取得単価
現在値
取得金額
評価額
評価損益
片倉
3001
100 1,271
1,335
127,100
133,500
6400
Sシャワー
4838
100 606
625
60,600
62,500
1900
シモジマ
7482
100 1,116
1,132
111,600
113,200
1600
サンメッセ
7883
100 458
465
45,800
46,500
700
ウェーブロックHD
7940
100 1,318
1,386
131,800
138,600
6800
NTT都市
8933
100 1,080
1,084
108,000
108,400
400
レノバ
9519
100 1,007
1,117
100,700
111,700
11000

 

ひとつだけ信用取引で購入しているので,別に記載します.

銘柄 売/
買建
建株数
(注文中)
建単価
現在値
建代金
諸経費等
評価損益
ひらまつ
2764
買建 100 620
606
62,000
272
-1,672

 

いずれ,どのように購入銘柄を決めているかも書いていこうと思います.

 

しばらくは,毎週金曜に,その週の収支報告を続けていこうと思います. 

ヴォイニッチ手稿の文字頻度と文字Bi-gram

前回に引き続き,ヴォイニッチ手稿の基礎的な統計分析をしていきます.

shounena.hatenablog.com

今回は,ヴォイニッチ手稿に出てくる文字の頻度を解析します.
前回のプログラムを少し変更するだけです.

#coding: utf-8
#ヴォイニッチ手稿の文字カウント

import sys
from collections import Counter

C = Counter()

for line in sys.stdin:
    line = line.strip()
    if len(line)==0:
        continue
    if line[0]=="#":
        continue

    terms = line.split(",")
    for term in terms:
        C += Counter(term)

print "word\tcount"
for w,c in C.most_common():
       print w,"\t",c

注意点として,今回使っているトランスクリプションは,ヴォイニッチ手稿の文字の内複雑なものを,複数の文字で表しています.
例えば以下の文字は,PZと2文字で表しています.
http://www.voynich.nu/img/eva/cph.gif
今回はこのような複数文字も分解して1文字と考えてカウントしています.
精度の低い分析ですが,あたりを付けるためのものなのでこれで良しと,勘弁してください.
いずれ,文字をデータにする関数として定義していきたいですね.



集計結果が以下になります.

前回の単語頻度分布と同様,指数分布になっています.
文字の分布も,一般的な言語と近しい性質を持っていそうです


Oが一番多い文字のようです.
6600個あり,全体の15%以上を占めます.
Oは元の文字としてもただの丸という簡潔なものなので,書きやすそうです.
頻出の文字には書きやすいものを当てたいというのは自然ですので,これが最多というのは,言語を作る(或いは自然と作られる)上で納得がいくように思えます.
http://www.voynich.nu/img/eva/o.gif

ひょっとすると,a,anのような冠詞を表していたり,あるいは読点のような文の切れ目を表していたりするかもしれません.
Oにそのような役割があるか,予想をすることはできるでしょうか.
これについては,次回考察してみたいと思います.
今回は,Oが冠詞や読点である可能性を考える材料として,Oが連続出現しているかどうかを調べておきましょう.



文字の連続性を調べるために,文書中の,2つ連続する文字を1とカウントして,文字数を集計します.
このように,文字を2つずつ繋げたものを文字2-gram(バイグラム)と呼びます.
例えば,ヴォイニッチ手稿の1ページ目の一番最初の単語
FGAG2
は,
F,FG,GA,AG,G2,2をひとつずつカウントします.

文字2-gramをカウントするプログラムが以下です.

#coding: utf-8
#ヴォイニッチ手稿の文字Bi-gramカウント

import sys
from collections import Counter

C = Counter()

for line in sys.stdin:
    line = line.strip()
    if len(line)==0:
        continue
    if line[0]=="#":
        continue

    terms = line.split(",")
    for term in terms:
        for c1,c2 in zip(["$"]+list(term),list(term)+["$"]):
            bi = "".join([c1,c2])
            C[bi] += 1

print "word\tcount"
for w,c in C.most_common():
       print w,"\t",c

単語の先頭と最後尾に"$"を付けて,zip関数を使って2つずつ取っています.
わざわざ"$"を付けるのは,単語の先頭の文字と最後尾の文字を1文字にしてしまうと,先頭と最後尾に出現した文字をともにカウントしてしまうので,それを防ぐためです.


この結果が次のグラフになります.

文字2-gramの結果は,興味深い性質をいくつか示してくれます.
Oの意味を推測する前に,先にそちらの性質を考えていきます.



まず,一番多い2文字は"G$"であることがわかります.
つまり,Gは単語の最後尾に来ることが圧倒的に多いということを示します.


当分析で用いているトランスクリプションでは,ヴォイニッチ手稿の元々の一行の最後尾であることを"-"で示しています.
そのため,"-"の次には必ず"$"が来るため,"-$"という2文字は行の数に比例して存在します.
ところが,"-$"の出現回数は1456個であるのに対し,"G$"は3046個と,倍以上出現しています.
これは,Gで終わる単語が1行に平均2回出現していると考えられます.
そもそも,文字Gの出現回数は4530個です.
よってGが出現したときに,単語の最後尾に出現している確率は
3046 / 4530 = 0.67
と,実に2/3以上となります.
Gは元々文書全体の10%程度しか占めていなかったことを考えると,圧倒的な最後尾での出現頻度ですね.
単語の最後にGを付けることが,意図して起こっている,と言えそうです.


なお,このようなある条件下(例えば単語の最後尾という条件)である事象(例えばGが出現する)という確率は,条件付き確率と呼びます.
この条件付き確率は,後の分析でも重要な役目を持ちますので,いずれ別途説明したいと思います.


Gの他にも,最後尾に出現しやすい文字としては,"R$"(1506個),"E$"(1272個),"M$"(1118個)などがあります.
どちらも1行に1個程度,最後尾に付けられた単語があります.
各文字はそれぞれ1400〜2000個程度しか存在しないことを考えると,
これらの文字R,E,Mも,最後尾に出現することが多い文字と言えます.



上記のように,最後尾に出現しやすい文字があることがわかりました.
では,先頭に出現しやすい文字はどうでしょうか?
$が前に付いた2文字だけを取り出し,頻度を集計した結果が以下です.


T,O,8が,他の文字と比べて突出して多いです.
ただ,Oは元々文書全体の15%を占める,出現回数の多い文字でした.
一方,$が前につく2文字10031個の内,"$O"1668個は,
1668/10031=0.166
と,16%程度です.
Oの出現を単語の先頭に限定して見ても,出現確率は僅かに上がる程度です.
Oは単語の先頭に出やすい,とは必ずしも言えないようです.

一方,T,8の出現確率は,それぞれ全体の8%程度しか占めていなかったのに対し,
先頭に限定すると,出現確率が17%,15%程度まで跳ね上がります.
T,8は単語の先頭に出現しやすい,と言って差し支えなさそうです.


まとめると,
・G,R,E,Mは単語の最後尾に出現しやすい文字
・T,8は単語の先頭に出現しやすい文字
・Oは特定の箇所に出現しやすいとは,現段階では確証を持っては言えない
となりました.

次回はOの持つ役割について,引き続き文字数の頻度集計結果を使って考察していきます.

ヴォイニッチ手稿の単語頻度分析

さて,前回はヴォイニッチ手稿のトランスクリプトデータをダウンロードしました.
shounena.hatenablog.com

今回は,これを使ってまずはざっくりと,傾向をデータ分析しようと思います.
目的は,ヴォイニッチ手稿が意味のある文書なのか,それとも適当に文字っぽいものを並べただけのものなのか,その見当をつけることです.

まずは,基本の分析として,ヴォイニッチ手稿の単語数を集計します.

#coding: utf-8
#ヴォイニッチ手稿の単語カウント

import sys
from collections import Counter

C = Counter()

for line in sys.stdin:
    line = line.strip()
    if len(line)==0:
        continue
    if line[0]=="#":
        continue

    terms = line.split(",")
    C += Counter(terms)

print "word\tcount"
for w,c in C.most_common():
       print w,"\t",c

このプログラムは,こんな風にcatコマンドと組み合わせて使います.

cat ../FSG.txt | python wordcount.py

入力データは,FSG.txtです.
タブ区切りで出力するので,適当にresult.tsvなどと名前をつければ,Excelなどで表示可能です.



出力結果は数の多い順に並んでいます.
結果をグラフにしてみました.

ちなみに,このプログラムでは文節終わりを示す=がついた"8AM="などは別単語扱いです.
ひどく雑な集計ですが,初歩分析ということで勘弁下さい.
その内キチンと修正します.


単語の分布の形は,指数的な分布,Zipf則に従っているように見えます
一般には,この形状がヴォイニッチ手稿が適当な記号列ではなく,何か意味がある文書だという根拠のひとつとなっています.

ヴォイニッチ手稿は未だに解明できないこともあり,ただのイタズラであるという可能性も否定できません.
ただ,人間が意識せずに意味のない文字列を作ると,一般にはこのような指数分布にすることは難しく,出現に偏りの少ない,均一分布に近くなります.
その点,この文書は単語の偏りが一般的な言語と同じ指数分布という性質を示しており,不規則に単語っぽいものを並べたということは考え難いです.

ということで,ヴォイニッチ手稿
・不規則に単語を並べただけではなく,何らかの規則性を持って並べられた,意味を持った文字列である可能性が高い
と言えます.
ただ,例えば文書を作った後に不規則に単語を並べ替えたなど,文としては成立していないことも考えられます.
これについては後の分析で改めて検証していきます.



出現数としては,8AMという単語が圧倒的に多いです.
全単語数10031個に対し,360個と4%近くを占めます.

これは英語での出現単語と比べると偏りはやや少ないといえます.
英語における出現数が最も多い単語は通常"the"であり,一般的な文書では概ね8%程度です.
次に多い単語はtoで4%程度,またa,anも合わせると4%程度です.
8AMという単語だけで見ると,出現頻度的には少ないと言えるかもしれません.

ただし,これは"8AM"という単語と完全一致した物の数だけです.
手稿の中には"8AMが含まれる単語"も多くあり(例えば"O8AM"というものは22個),
これを合計すると641個と,冠詞の出現数と比較的一致します.

例えば8AM,が名詞の前後にくっつけて冠詞として動作する,という可能性はあります.
ただ,現時点ではこの断定は難しそうです.


8AMに次いで,TOE,TORという単語が多いです.
このT**という単語は比較的多く存在します.
Tという文字を付けることは,何らかの意味があるのかもしれません.



次は文字頻度について分析してみます.

ヴォイニッチ手稿の分析用データを得る方法

 

ヴォイニッチ写本の謎

ヴォイニッチ写本の謎

 

 

ヴォイニッチ手稿(ヴォイニッチ写本とも呼ぶ)とは,未解読の言語で書かれた古文書のことです.
1902年にイタリアで発見されました.

 

見たことのない植物や,女性の絵が描かれており,何より見たことのない文字を使って書かれています.

 

未だにその内容は解読されておらず,
“宗教家や科学者が秘密の情報を隠すために独自の言語を作成した”,
“単なるいたずらで何の意味もない”,
など様々な推測がなされています.

 

また,時折“ヴォイニッチ手稿が読める”といった人物が現れて(その真偽は定かではありませんが),
オカルトめいたものを愛する方々ではその都度話題となるなど,
兎にも角にもロマンあふれるアイテムとなっています.

 

ヴォイニッチ手稿はこれまでも多くの研究者によってその解読が試みられ,
そのおかげで現在ではWebで原本の画像が容易に見られ,
(参考:https://shkspr.mobi/blog/2013/08/voynich-manuscript-ebook/)
分析を容易にするための加工がなされたデータも多く存在します.

 


当ブログでは,
このロマン溢れる古文書を題材に,
あくまで趣味の範囲でヴォイニッチ手稿の解読に向けた実験をやっていきます.

 

ヴォイニッチ手稿の解読には,
物理的な紙質等の調査,宗教的観点から読み解く,など
様々なアプローチが有るかと思いますが,
当ブログでは,特に暗号解読の手法を中心とした,データ分析による数学的な方法で解読を試みていきたいと考えます.

 

筆者は暗号解読の研究者でもなんでもありませんので,
効率が悪いところもあれば,
間違ったところもあるかと思います.

既に知られた研究結果も,気にせず再分析します.


所詮アマチュアの聞きかじった程度と笑っていただき,
間違いについてはお叱り,ご訂正いただけますと幸いです.


さて,まずはヴォイニッチ手稿のデータ獲得方法です.
ヴォイニッチ手稿は世界中の研究者にとって解読を夢見るアイテムであるため,
様々なチームによって,分析可能なデータ化(transcription)がなされています.

 

そもそも人が書いた文字のどれが同じ文字かも定かではないし,
また挿絵との関係性もわかっていないため,
データには文字の表し方や文字判定,
挿絵の記載など様々なものが有り,
具体的にどのデータが一番だと言えるものではありません.

 

とりあえず,筆者は以下のサイトから拝借したデータを用いて分析を行います.
http://www.voynich.nu/transcr.html
中盤のstill available for downloadを選べば,テキストデータでダウンロード可能です.

 

他にも,以下のサイトで得られるデータなどは綺麗に加工されていて使い勝手が良さそうです.

http://www.ic.unicamp.br/~stolfi/voynich//98-12-28-interln16e6/

 

例えば挿絵と合わせた分析を行う場合など,このデータでは不都合な点があるかもしれません.
その場合は都度データを変更するものとし,
当ブログでは,以降ではこちらのデータを使って分析をして行こうと思います.

 

次回は,pythonを使った,ヴォイニッチ手稿データの基礎的分析について触れていきたいと思います.