akatak blog

プログラム初心者の50代ビジネスマンがセカンドキャリアを目指して働きながらPythonを中心に独学していましたが、昨年IT系企業に転職。新規事業開発の仕事をすることになりました。自らの覚え書きや成果物、感じたことなどを脈絡もなく書き連ねるブログです。

個人投資家のためのWebスクレイピング(2) 〜 Pythonを使って、米10年債先物ポジション推移を描く

本日の日経新聞に「ドル、反転下落の兆し 米長期金利に低下観測 世界経済の先行き懸念 」と題する記事が出ていました。その記事中に「米10年先物の売りの勢いは鈍化(投機筋の持ち高)(出所)米商品先物取引委員会」のタイトルの図表が掲載されていましたが、「債券先物市場の投機筋による建玉残高をみても売り越し幅の拡大が止まっていて、米長期金利の上昇観測は薄れている」との文脈で使われたものです。これは、まさに前回の記事で記載させていただいたIMM通貨先物ポジションのデータと出所は同じはず。

ということで、早速、前回のスクリプト(ファイルダウンロード)にて取り込んだファイル"annual.txt"を見てみると、'10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE' のデータが複数あることが分かりました。そこで、前回のスクリプトのデータを抽出する条件を

if 'JAPANESE YEN - CHICAGO MERCANTILE EXCHANGE' in data[i]:

から

if '10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE' in data[i]:

に変えて、そのうえで2017年からのデータを取得できるようにスクリプトを若干変更して実行すると、以下のようになりました。

米国10年債先物取引ポジション

f:id:akatak:20180705224524p:plain

以下の本日の日経記事の図表と比較すると、まさに欲しいデータそのものですね。

f:id:akatak:20180705224023j:plain
(日本経済新聞2018年7年5日朝刊から)

今後とも色々なデータを取得していきたいと思います。

個人投資家のためのWebスクレイピング(1) 〜 Pythonで「IMM通貨先物ポジション」推移を描いてみよう

実は自分自身でETF投資を行っていますので、相場に影響のあるデータを可視化(Visualization)出来たらなぁと以前から思っておりました。 そうした中で、ドル円等の為替相場への影響を考える際にいつも話題になるのは「IMM通貨先物ポジション」。先物取引所として有名なアメリカのシカゴマーカンタイル取引所(CME)で取引されている通貨先物のポジションのことですが、この数値はヘッジファンドなどによる投機的なポジションを示しており、買いポジションが過大になれば相場下落、売りポジションが過大になれば相場上昇の可能性が高まっていると考えられるようです。従って、その動向をいち早く知ることは極めて重要だと思います。

ところが、FX業者等がそのデータをホームページ等で公表しているのですが、毎週のデータ更新の反映が公表から数日たってもまだなされない状況で不満を持っていました。

zai.diamond.jp

そこで、自分自身で、簡単なスクレイピング&ビジュアライゼーションを実行できるスクリプトを書いてみましたので、ご参考までにアップします。これでいちいち、ホームページを見てまだ更新できていないぞ!などと他者依存から脱却できますね。

IMM通貨先物ポジション推移(ドル円)

f:id:akatak:20180701214653p:plain

これこそ、Pythonを勉強していて良かったなと思う瞬間です。金融機関に勤める皆さんや個人投資家の皆さんもPythonを学んでみてはいかがでしょうか。ExcelでもPythonを使えるようにするとの議論もあるようですし、Pythonを学ぶことのメリットは益々高まっていると感じています。

ちなみに、私はこのプログラムをiPhoneのアプリ「Pythonista」上で実行しています。Pythonistaのご紹介はまた別の機会に!

Jupyter Notebookをはてなブログに貼り付ける方法

普段、簡単なPythonスクリプトの実行確認やPythonの機能の確認を行うのにJupyter Notebookが便利なので良く利用しているのですが、その内容をそのままブログにアップできたらいいなぁと思って、ネットで探していたところ。こんな情報がありました。

Jupyter Notebookの公開方法
ソースコードを簡単に共有しよう! Gistからの貼り付けに対応しました

どうもGitHubのGistを使うと簡単にできるらしい、ということで早速試してみました。

GistへのJupyter Notebook ファイルの登録

すでに、GitHubには登録してありますので、Gistページを開くとこんな感じに。

f:id:akatak:20180624153318p:plain

この下のボックスにJupyter Notebookファイルをドラッグ&ドロップすれば簡単に張り付きます。 そして、右下にあるCreate public gistボタンを押すとgistへの登録完了です。

f:id:akatak:20180624155836p:plain

はてなブログへのGistの登録

次に、登録したGistのはてなブログへ投稿ですが、非常に簡単です。はてなブログの編集サイドバーにGist貼り付け機能を追加します。その機能を選択すると既に登録済みのGistが表示されますので、後は貼り付けたい位置で貼り付けたいGistを選択するだけです。非常に簡単ですよね。びっくりしました。 Gitをわざわざブログへのアップのためには、使う必要がなくなりました。

f:id:akatak:20180624160416p:plain

参考までに、登録したGistを以下に表示しておきます。

三次関数の作図見本

Gitの覚え書き

GitHubにJupyter Notebookを簡単にアップロードできるかと思っていたら、世の中そう簡単にはいかないものですね。 Gitというバージョン管理アプリケーションを導入しないといけないことに加えて、操作や概念が分かりにくく、非常に取っ付きにくい。 私は、まずは、Udemyの無料講座 Udemy:はじめてのGitとGitHubにお世話になりました。その他、 概念については、こちらが非常に良くまとまっているかと思いますので、参考にしてください。

サルでも分かるGit入門

以下に、Gitでよく使う操作について、自分の覚え書きとして簡単にまとめました。

Gitリポジトリの新規設定

$ git init

この「git init」コマンドはGitリポジトリを新たに設定するコマンドです。カレントディレクトリをGitリポジトリに変換します。

ファイルの作成/変更/削除をGitのインデックスに追加

$ git add filename.txt

Gitでは、Gitの管理下に置かれた、みなさんが実際に作業をしているディレクトリのことを ワークツリーと呼びます。

そして、Gitではリポジトリとワークツリーの間にはインデックスというものが存在しています。インデックスとは、リポジトリにコミットする準備をするための場所のことです。
サルでもわかるGit入門

このgit addコマンドは、作成/変更/削除したファイルを、コミットする前にこのインデックスに登録するものです。

変更結果をローカルリポジトリにコミット

$ git commit -m "add new file"

次に、git commitコマンドを用いてインデックスに追加されたファイルをコミットします。 コミットとは、ファイルやディレクトリの追加や変更をリポジトリに記録する操作のことです。

ファイルの状況を確認

$ git status

このコマンドにより、ワークツリーやインデックスの状態について表示することができます。

リモートリポジトリの追加/削除

$ git remote add origin https://github.com//repositoryname.git

リモートリポジトリの追加は、上記のように追加したいリポジトリを指定し、コマンドを実行するだけです。 既に、リモートリポジトリを追加している場合には、fatal: remote origin already exists.とTerminalに表示されます。

$ git remote rm origin

逆にこのコマンドを入力すれば、リモートリポジトリを削除できます。ただし、ローカルリポジトリディレクトリを既に削除してしまっている場合は、GitHubのリモートリポジトリのSettingsタブの一番下のDanger ZoneにDelete this repositoryボタンがあるので、そのボタンを押すことで削除できます。

コミットした変更をプッシュしてリモートリポジトリに反映

$ git push origin master

このコマンドにより、ローカルリポジトリの変更を、GitHub上にあるリモートリポジトリに反映させることができます。その歳に、GitHubのユーザ名とパスワードを尋ねられますので入力してください。

ユーザー名とメールアドレスについては予め以下のコマンドを実行しておくことができます。

$ git config --global user.name "username"
$ git config --global user.email useremail@email.com

ワークツリー/インデックスからファイルを削除

$ git rm [--cached] filename

このコマンドにより、ワークツリー及びインデックスからファイルを削除することができます。[]内に記載のcachedはオプションで、これをつけるとインデックスのみ削除し、ファイルは残すことができます。

ディレクトリ下のファイルをまとめて削除

$ git rm -r [--cached] directryname

ディレクトリ下のファイルをまと舞えて削除したい場合には、rオプションとともに、ディレクトリ名を指定すれば、ワークツリー及びインデックスから削除することができます。これもcachedオプションを付けることで、インデックスのみから削除することも可能です。

終わりに

参考になったでしょうか。今回の整理は以上ですが、今後も研究が必要かと思っていますので、随時更新していければと思っています。

Markdown記法〜チートシート

はてなブログMarkdown記法について、纏めてみました。このMarkdown は、Atomエディタ、BoostnoteやInkdrop等のメモ帳でも利用できますが、アプリよっては多少挙動が異なるようですので、利用にあたっては注意が必要です。


■見出し

# 見出し(h1)
## 見出し(h2)
### 見出し(h3)
#### 見出(h4)
##### 見出し(h5)
###### 見出し(h6)

見出し (h1)

見出し (h2)

見出し (h3)

見出し (h4)

見出し (h5)
見出し (h6)

■箇条書き(リスト)

* リスト1
  * リスト1.1
  * リスト1.2
* リスト2
  • リスト1
    • リスト1.1
    • リスト1.2
  • リスト2

■番号付リスト

1. リスト1
   1. リスト1.1
   1. リスト1.2
1. リスト2
  1. リスト1
    1. リスト1.1
    2. リスト1.2
  2. リスト2

はてなブログMarkdown記法では、上記のように3文字スペースを空けると、箇条書きの中に新たに1から始まる箇条書きが作成できます。


■チェックリスト

* [  ] チェックリスト1
* [  ] チェックリスト2
  • [ ] チェックリスト1
  • [ ] チェックリスト2

はてなブログでは、どうやらチェックボックスは使えないみたい。Atom、Boostnote、Inkdropでは使えますね。


■表組み

|タイトル1|タイトル2|タイトル3|
|:--|:-:|--:|
|左詰め|中央揃え|右揃え|
|Hoge|Fuga|Piyo|
タイトル1 タイトル2 タイトル3
左詰め 中央揃え 右揃え
Hoge Fuga Piyo

■引用

> これは引用です。  (←複数行の引用にはここにスペース2文字が必要)
> 複数行の引用が可能です。
>> 入れ子の引用もできます。

これは引用です。
複数行の引用が可能です。

入れ子の引用もできます。


■httpへのリンク

[HatenaBlog](http://hatenablog.com/)

HatenaBlog


■脚注

これは本文です。[^1]  
[^1]: こちらが通常の脚注です。

これは本文です。1

ただし、はてなブログMarkdown記法では、はてな記法の脚注の記載方法も併用できます。

これは本文です((ここに「はてなブログ」脚注を書きます))

これは本文です*1

所感

どうでしたか。Markdownは使う環境により、多少癖があるようで、注意が必要だと分かりました。ブログ記事はMarkdown記法を中心に考えていきたいと考えていますので、今後とも研究していきたいと思います。


  1. こちらが通常の脚注です。

*1:ここに「はてなブログ」脚注を書きます

Django覚え書き

本記事は、Djangoを使ってWebアプリケーションを作成するに当たっての基本動作を纏めました。暫く使っていないとすぐに忘れてしまうので、自分自身の覚え書きとして記述したものです。今後、充実させていきたいと思っています。

  • condaを利用してDjangoの仮想環境を作る
    $ conda create --name myEnv django

  • 仮想環境を立ち上げる(macの場合) $ source activate myEnv

  • 仮想環境を終了する(macの場合) $ source deactivate myEnv

  • mysiteというDjangoプロジェクト(フォルダ等)を作成する
    $ django-admin startproject mysite

  • pollsというDjangoアプリケーションを作成する
    $ python manage.py startapp polls

  • Djangoプロジェクトを動作させる
    $ python manage.py runserver

  • Djangoのモデルをデータベースに反映する
    $ python manage.py migrate

  • Djangoのモデルに行った変更をマイグレーションに反映する
    $ python manage.py makemigrations appname

migratemigrationsの概念については、こちらのドキュメンテーションに書かれています。 https://docs.djangoproject.com/ja/2.0/topics/migrations/

Djangoそのものを理解するためには、こちらのサイトが初心者向けとしては良く書かれていると思いますので、ご参照ください。

Django Girls Tutorial
Django公式ドキュメンテーション(日本語)

ちなみに、本記事は、はてなブログMarkdown記法を使って書いていますが、箇条書きの間の行間が、どうしても増やせません。もう少し研究が必要ですね。

はてな記法〜チートシート

前回、はてな記法スクリプトをブログに記載する方法を書きましたが、今回はその他のはてな記法のうちよく使うものを簡単に纏めておきます。

■見出し

*見出し (h3相当)
**小見出し  (h4相当)
***小々見出し  (h5相当)

見出し (h3相当)

小見出し (h4相当)

小々見出し (h5相当)

■箇条書き(リスト)

-リスト1
--リスト2
---リスト3
  • リスト1
    • リスト2
      • リスト3

■番号付箇条書き(リスト)

+ リスト1
++ リスト1.1
+++ リスト1.1.1
+++ リスト1.1.2
++ リスト1.2
+ リスト2
++ リスト2.1
  1. リスト1
    1. リスト1.1
      1. リスト1.1.1
      2. リスト1.1.2
    2. リスト1.2
  2. リスト2
    1. リスト2.1

■表組み

|*メソッド|*DataFrame|*Series|*対象|
|*apply|*○|*○|列または行|
|*applymap|*○|*×|各要素|
|*map|*×|*○|各要素|
メソッド DataFrame Series 対象
apply 列または行
applymap × 各要素
map × 各要素

■引用

>>
これは引用です。
<<

これは引用です。

■httpへのリンク

[http://www.hatena.ne.jp/]
[http://www.hatena.ne.jp/:title=はてな]

http://www.hatena.ne.jp/
はてな

■脚注

本文です((これは注釈です))

本文です*1

*1:これは注釈です