ラズパイ4のセットアップ

ラズパイ4のセットアップ

半導体不足のためほぼ手に入らない状態だったので
KSY でラズパイ4の教材セットのものを購入

すでにOSの書き込みはされているので
ディスプレイとキーボード、マウスなどを用意すれば
すぐに起動できる

今回は
bluetooth キーボードを使用したが
初期設定はマウスだけでもできる

パスワード入力などではキーボードが必要になる

今回は
Anker の bluetooth キーボードを使用したが
ペアリングや日本語入力で手間取った

ペアリングは
Fn + z キーの長押しで行い

日本語変換と英語の切り替えは
スペース + Control で行う

とりあえずインストールができたら端末を起動し

sudo raspi-config

を実行

Interfacing Options を Select

I2 SSH
をクリックし

はい
をクリック

これでSSHが有効になるので

ここから後は ubuntu から操作できる

なお

Warning: Permanently added '192.168.1.48' (ECDSA) to the list of known hosts.
Received disconnect from 192.168.1.48 port 22:2: Too many authentication failures
packet_write_wait: Connection to 192.168.1.48 port 22: Broken pipe

となったときには

 ssh -o IdentitiesOnly=yes pi@192.168.1.48

とすることで
接続できる

今回はUSBカメラを使用する

ロジクールLogicool C270n

次に公開鍵認証にするので
Ubuntu で ssh-keygenコマンドで作成

-t で暗号形式を rsa
-b で4096ビットに指定
なおデフォルトでは2048ビット

cd .ssh
ssh-keygen -t rsa -b 4096

で作成

Enter file in which to save the key (/home/snowpool/.ssh/id_rsa): 

となったらファイル名を入力

今回は raspi4
としておく

パスフレーズは省略するので

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 


Enter にすればパスフレーズなしとなる

次に公開鍵の登録

これは
ssh-copy-id コマンドを使う

なお接続するラズパイ4のIPは
Android ならFing で調べることが可能

 scp -o IdentitiesOnly=yes .ssh/raspi4.pub pi@192.168.1.48:/home/pi/

で作成したファイルをコピー

次に
ラズパイにログイン

cat raspi4.pub >> .ssh/authorized_keys
chmod 700 .ssh/
chmod 600 .ssh/authorized_keys 
sudo apt install vim


vim をインストール

sudo vim /etc/ssh/sshd_config

で設定ファイルを開き

パスワード認証を禁止

PermitEmptyPasswords no
PasswordAuthentication no

AuthorizedKeyFile .ssh/authorized_keys

を設定

sudo /usr/sbin/sshd -t

で設定の確認

sudo /etc/init.d/ssh restart


ssh の再起動

これで

ssh pi@192.168.1.48

でログインが可能になる

次に opencv のインストール

sudo apt update -y
sudo apt upgrade -y
sudo apt autoremove -y

でリポジトリ更新とアップデート
そして不要なパッケージの削除

次に opencv に必要なライブラリをインストール

sudo apt install -y libhdf5-103
sudo apt install -y libatlas-base-dev
sudo apt install -y libjasper-dev

しかし

sudo apt install -y libqt4-test

を実行したところ

E: パッケージ libqt4-test が見つかりません

となる

python : pip install OpenCVでRaspbianでこのエラーが発生するのはなぜですか?2021-12-27 06:48

によれば
Qt4はもうパッケージ化されていない
とのこと

このため
Linuxでdebパッケージをインストールする方法

を見ながら

wget http://ftp.de.debian.org/debian/pool/main/q/qt4-x11/libqt4-test_4.8.7+dfsg-18+deb10u1_arm64.deb
sudo dpkg -i libqt4-test_4.8.7+dfsg-18+deb10u1_arm64.deb

としたが

パッケージアーキテクチャ (arm64) がシステム (armhf) と一致しません
処理中にエラーが発生しました:

となるため

wget http://ftp.us.debian.org/debian/pool/main/q/qt4-x11/libqt4-test_4.8.7+dfsg-18+deb10u1_armhf.deb
sudo dpkg -i libqt4-test_4.8.7+dfsg-18+deb10u1_armhf.deb

としたが

dpkg: 依存関係の問題により libqt4-test:armhf の設定ができません:
 libqt4-test:armhf は以下に依存 (depends) します: libqtcore4 (= 4:4.8.7+dfsg-18+deb10u1) ...しかし:
  パッケージ libqtcore4 はまだインストールされていません。

dpkg: パッケージ libqt4-test:armhf の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
libc-bin (2.31-13+rpt2+rpi1+deb11u2) のトリガを処理しています ...
処理中にエラーが発生しました:
 libqt4-test:armhf

となってしまう

きにせずそのまま

sudo pip install opencv-python

としたら
インストールできた

sudo python3 -m pip install pip --upgrade


pip もアップデートしておく

次に仮想環境を構築するツール
virtualenv

virtualenvwrapper
をインストール

sudo pip3 install virtualenv

を実行すると
インストールは成功するが

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

となる

意味は

警告:「root」ユーザーとしてpipを実行すると、権限が破損し、システムパッケージマネージャーとの動作が競合する可能性があります。代わりに仮想環境を使用することをお勧めします
とのこと

pip install virtualenvwrapper

でインストールすると

  WARNING: The script virtualenv-clone is installed in '/home/pi/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

とでてくる

これは
.bashrc へ設定追加が必要

virtualenvとvirtualenvwrapperを使う

を参考に

whichコマンドを使って、virtualenvwrapper.shの場所を探す

which virtualenvwrapper.sh

結果は

/home/pi/.local/bin/virtualenvwrapper.sh

だったので

vim .bashrc 

でファイルを開き
最終行に

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /home/pi/.local/bin/virtualenvwrapper.sh #ここはwhichコマンドの結果に変えてください。
fi

を追記

source .bashrc

で有効化

しかし
mkvirtualenv コマンドが見つからないので
再度設定を変更

Raspberry Pi で virtualenv のインストール

を参考に

追記部分の

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /home/pi/.local/bin/virtualenvwrapper.sh #ここはwhichコマンドの結果に変えてください。
fi

を削除し

代わりに

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /home/pi/.local/bin/virtualenvwrapper.sh

を追記

source のパスは

which virtualenvwrapper.sh

のものを使用

これで

source .bashrc 

を実行すると
mkvirtualenv コマンドが使えるようになる

このコマンドの詳細については
コマンドリファレンス

を参考に

WordPress 2 段階認証プラグイン Two-Factor

WordPress 2 段階認証プラグイン Two-Factor

新規プラグインで
Two Factor
で検索

インストール後に有効化

ユーザ > あなたのプロフィール

Time Based One-Time Password (TOTP)
をクリック

QRコードを
Android アプリの
Google認証システムで読み取り
認証コードを入力する

注意点としては
スペースをいれること

これでプロフィールを更新すると
次回からログインのときに2段階認証が有効化され
ログインID、パスワードのあとに
認証アプリで表示された6つの値を入力しないとログインできないようになる

Pandas の文字列型の数値を数値型に変換

Pandas の文字列型の数値を数値型に変換

import pandas as pd
import investpy
import altair as alt
import datetime

economic_data2 = investpy.economic_calendar(time_zone=None, time_filter='time_only', countries=['japan', 'united states'], from_date='01/01/2021', to_date='31/01/2021')


ISM =economic_data[economic_data['event'].str.contains('ISM Non-Manufacturing PMI')]

date2 =[]
for i in ISM['date']:
    new_date = datetime.datetime.strptime(i,"%d/%m/%Y").strftime("%Y-%m-%d")
    date2.append(new_date)

ISM['date']=ISM['date'].str.replace('/','-')
ISM['date'] = date2
ISM.fillna(0)

これで取得した経済指標のデータを計算できるように数値変換する

previous_score = ISM['actual'].tail(1)
previous_score

でみると

2598    64.0
Name: actual, dtype: object

となるが数値ではなくオブジェクトになっている

Pandasで欠損のある列の文字列型の数値を数値型に変換する
を参考に数値に変換する

文字列を数値にするには
padas.to_numeric() を使う

errors には
raise がデフォルトで例外が発生
ignore は例外を抑えるが何も変換せずにそのままのオブジェクトを返す
coerce は数値変換できるものだけ変換しあとはNaN にする

これを利用して

previous_score2 =pd.to_numeric(ISM['actual'],errors="coerce")
previous_score2.tail(1)

とすれば

2598    64.0
Name: actual, dtype: float64

となる

これで数値化できたので
計算もできるようになる

print(previous_score2.tail(1) -1)
print( 62 - previous_score2.tail(1))

とすると結果は

2598    63.0
Name: actual, dtype: float64
2598   -2.0
Name: actual, dtype: float64

となった

これで経済指標の結果と前回の予測値との差分を計算して表示できる

ubuntu で Chrome がフリーズする対処

ubuntu で Chrome がフリーズする対処

Ubuntu 19.10 でChromeがフリーズする場合の回避策

を参考に

google-chrome-stable --disable-gpu

で起動

[設定] > [詳細設定] > [システム] > [ハードウェアアクセラレーションが使用可能な場合は使用する] をオフ

次にタブを開いて

chrome://flags
へアクセス

[GPU rasterization]

[Disabled]にしてブラウザを再起動

newspaper3k で経済指標のニュースを取得(失敗)

newspaper3k で経済指標のニュースを取得(失敗)

ロイターの経済指標ニュースを取得する
https://jp.reuters.com/investing/news/economic

jupyter notebook

newspaper3 を
インストールするには

!pip install newspaper3k

でOK

次に
分かち書き用のライブラリ
tinysegmenter
をpipでインストール

jupyter notebook でインストールするには

!pip install tinysegmenter

まず
newspaper から article をインポート

import newspaper

次に
自然言語処理を利用し
記事のキーワードだけを抽出したり
サマリーを取得するため
自然言語処理ライブラリであるntlkをダウンロード

import nltk

でインポートして

nltk.download("punkt")

実行結果で True になればOK

次にURL設定

url = "https://jp.reuters.com/investing/news/economic"

ニュース取得のとき
build を使うことで複数ページの取得が可能
article だと単一記事になる

website = newspaper.build(url)

あとは article で一つ一つ取り出して自然言語処理していく

これは for で行う

サマリー表示のときに
記事と記事の時に改行をいれる

これは

end="\n\n"

をつければOK

これだとすごい大量の記事になるので
表示数を制限する

今回は9の記事表示にした

あと見やすくするために記事に連番をつける

i = 0
for article  in website.articles:
    article.download()
    article.parse()
    article.nlp()
    print("記事",str(i),":",article.title)
    print(article.url)
    print(article.summary, end="\n\n")
    
    if i > 9:
        break
    i = i+1

これで取得はできたけど
経済指標と関係ないニュースがほとんどになってしまう

https://jp.reuters.com/news/business
にしたけど
あまり変わらない

URLの指定が悪いのか
もしくはスクレイピングしたほうが早いかは微妙なところ

記事タイトルをみると
どっちを指定しても
トップニュースを取得してしまっている
https://jp.reuters.com/news/archive/economicNews?view=page&page=2&pageSize=10
としてみたけど結果が変わらないため
URLの指定の問題ではなく
取得する場所の問題になりそう

記事を取得しない原因については

, memoize_articles=False

をつけることで解決

【Python】newspaper3kで記事が取得できない時の対処法

を参考に

デフォルトは True になっているため
ローカルに記事を保存してしまう

newspaper3k でもやってるのはスクレイピングなので
サイトを解析してスクレイピングしたほうが効率的なのかもしれない

webページをPDFにする

webページをPDFにする

wkhtmltopdf
を使うとHTMLファイルをPDFにできる

これを python で使うライブラリが
pdfkit

この2つがあれば python をつかって
HTMLを PDF
に変換できる

インストールは pip を使う

pip install pdfkit 

でインストール

pdfkit のインポートは

import pdfkit

やることはスクレイピングと同じなので利用に注意

google のトップページをPDFにするなら

url ='https://www.google.com/'

PDFにするときにオプションをつけれる

options ={
    'page-size':'A4',
    'margin-top':'10',
    'margin-right':'10',
    'margin-left':'10',
    'margin-bottom':'10',
    'zoom':'1.0',
    'encoding':"UTF-8"
}

あとはPDF変換

pdfkit.from_url(url,'out.pdf',options=options)

エラーになるので調べたら
wkhtmltopdf
をインストール忘れていたので

これをインストールする

https://wkhtmltopdf.org/

Downloads をクリック

今回は ubuntu 16 なので
amd64 をクリック

ダウンロードして保存し

sudo dpkg -i wkhtmltox_0.12.6-1.xenial_amd64.deb 

を実行したが

wkhtmltox_0.12.6-1.xenial_amd64.deb を展開する準備をしています ...
wkhtmltox (1:0.12.6-1.xenial) を展開しています...
dpkg: 依存関係の問題により wkhtmltox の設定ができません:
 wkhtmltox は以下に依存 (depends) します: xfonts-75dpi ...しかし:
  パッケージ xfonts-75dpi はまだインストールされていません。

dpkg: パッケージ wkhtmltox の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
man-db (2.7.5-1) のトリガを処理しています ...
処理中にエラーが発生しました:
 wkhtmltox

となるため

sudo apt install xfonts-75dpi

でインストール後に

sudo dpkg -i wkhtmltox_0.12.6-1.xenial_amd64.deb 

で再度実行すると
インストールできた

pdfkit.from_url(url,'out.pdf',options=options)

でOK

すべてのwebページがレイアウトどおりPDFにできるわけではないので注意

サイトによっては
サイドバーがPDF化できていなかった

python で PDF 取り扱いライブラリのインストール

python で PDF 取り扱いライブラリのインストール

ReportLab・wkhtmltopdf / pdfkit・PyPDF2・pdfminer.six・tabula-py
を使えるようにする

python でPDF作成編集、テキスト、表の抽出をすることができるようになる

reportlab のインストールは
Pythonのreportlabの使い方まとめ

を参考に

pip install reportlab

を実行

WARNING: You are using pip version 21.2.4; however, version 21.3 is available.
You should consider upgrading via the '/home/snowpool/anaconda3/bin/python -m pip install --upgrade pip' command.

という警告がでたら
pip のアップデートが必要なので

python -m pip install --upgrade pip

で pip をアップデートする

pdfkit は

HTMLをPDFに変換するライブラリ「pdfkit」をインストールする

を参考に

pip install pdfkit

でインストール

次に PyPDF2

【Python】「PyPDF2ライブラリ」によるPDFファイルの結合・分割と画像の抽出

を参考にインストール

pip だと画像の抽出に一部欠陥があるため
Github のインストーラーがおすすめらしい

https://github.com/mstamy2/PyPDF2
へアクセス

Code をクリックすると
Download ZIP がでるので
これでダウンロード

unzip PyPDF2-master.zip

で解凍して

cd PyPDF2-master/
python setup.py install

でインストール

pdfminer.six は
【Python】pdfminer.six:PDFからテキストを取得・抽出する

を参考に

pip install pdfminer.six

でインストール

【自動化】PDFの表をExcelへ(Python)

を参考に

pip install tabula-py

次に
pyinstaller

pyinstallerインストール ( Python3, Ubuntu 20.04 )

を参考に

pip3 install pyinstaller

でインストール

ubuntu で Adobe Acrobat Reader インストール

snap でインストールしたが
動作しないため一度アンインストールする

snapパッケージのアンインストール

を参考に

sudo snap remove acrordrdc

で削除

UbuntuにAdobe Acrobat Readerを入れる

を参考に

wget -O ~/adobe.deb ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/AdbeRdr9.5.5-1_i386linux_enu.deb

でパッケージ取得

sudo dpkg --add-architecture i386 
sudo apt update


i386アーキテクチャ有効化

インストールに必要なライブラリをいれる

sudo dpkg -i ~/adobe.deb

でインストール

このまま

acroread

で起動できるけど
言語が英語になる

日本語対応するので

wget http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.1/misc/FontPack910_jpn_i486-linux.tar.bz2

tar xavf FontPack910_jpn_i486-linux.tar.bz2
sudo bash ./JPNKIT/INSTALL

でインストールできる

Welcome to the Asian Language Kit installation.
This installation will not work if you do not have the Unix Adobe Reader version 9.1 installed prior to this installation.
If you do not have Adobe Reader version 9.1 already installed on your system please do so before installing this Asian Language Kit.
Continue installation?  [y]

となるので
y

The font software contained in this package is being licensed to you solely
for use with the Adobe Reader product ("Adobe Reader") subject to
the terms and conditions of the Electronic End User License Agreement
accompanying the Adobe Reader.

Please type  "accept"  to accept the terms and conditions of license agreement; Type  "decline"  to exit. 

でライセンスに同意なので
accept

Enter the location where you installed the Adobe Reader [/opt] 

はインストール場所
そのまま
Enter

これで一応起動はできるようになった

How to Install Adobe Acrobat Reader on Ubuntu 20.04 Focal Fossa Linux

にあるように
バージョンが古くリスクがあるため
pyautogui のテスト以降は別のものを利用することにする

なお

which acroread 

でパスを調べたら

/usr/bin/acroread

となっていた

ubuntu で Adobe Acrobat Reader DC と Tesseract OCRインストール

ubuntu で Adobe Acrobat Reader DCインストール

Install acrordrdcon Ubuntu

を参考に

sudo apt update
sudo apt install snapd
sudo snap install acrordrdc

でインストール

次に
pyperclip のインストール

PythonのPyperclipモジュールでテキストをコピーして貼り付ける

を参考に

pip install pyperclip

TesseractOCR
をインストール

Tesseract OCR のインストール(Ubuntu 上)

を参考に
実行しようとしたがパッケージがないとなるので

OCRエンジンTesseractをUbuntuインストールして文字画像を認識させてみた

を参考に

sudo add-apt-repository ppa:alex-p/tesseract-ocr
sudo apt-get update

でリポジトリの追加と更新

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev

で Tesseract のインストール

tesseract -v

でバージョンを確認

tesseract 4.1.1-rc2-37-gc1a5
 leptonica-1.78.0
  libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.4 : libopenjp2 2.1.2
 Found AVX
 Found SSE
 Found libarchive 3.1.2

となっているのを確認できる

続いて訓練済モデルのインストール

sudo apt install tesseract-ocr-jpn tesseract-ocr-jpn-vert
sudo apt install tesseract-ocr-script-jpan tesseract-ocr-script-jpan-vert

実行後インストールの確認

tesseract --list-langs

を実行し

List of available languages (6):
Japanese
Japanese_vert
eng
jpn
jpn_vert
osd

となればOK

なお Github で日本語データがあり
そっちをダウンロードしてやるほうほうが
ubuntuで画像から日本語OCRでテキスト抽出

に掲載されているので
もし日本語対応が微妙な場合こちらを試したほうがいいかもしれない

次に pyocr のインストール

python3でPyOCRを使って画像を文字列に変換する方法

を参考に

pip install pyocr

でインストール

pyocr の ver0.8 から以前にあったバグが解消されているため
エラー箇所の修正は不要らしい

python でIMMポジショングラフ表示

python でIMMポジショングラフ表示

【第35回PYTHON講座】plotlyで複合グラフの作成


IMMポジションをグラフ表示するのがあったので実践

plotly を使うので

!pip install plotly

でインストール

使用するIMMポジションデータについては
外為どっとこむからダウンロード可能

https://www.gaitame.com/markets/imm/

xls ファイルをダウンロード

https://www.gaitame.com/market/imm/imm_currency.xls
がリンク先なので
wget を cron で毎週火曜日に取得するように設定すると楽かもしれない

内容は毎週火曜日に更新されている

ubuntu なので
Excel ではなく LibreOffice で代用

使用するシートは
IMMyen になる

この中で使用するセルは
日付
IMMポジション数差引
となる

まずはライブラリをインポート

import pandas as pd
import plotly

次にファイルを jupyter notebook で
immcurrency.xls
をアップロードし

xlsfile = "imm_currency.xls"

でファイルを読み込む

df_a = pd.read_excel(xlsfile, sheet_name="IMMyen", usecols=[0, 8])
df_b = pd.read_excel(xlsfile, sheet_name="IMMyen", usecols=[0, 1])

で usecols を使い抽出する列を指定
df_a には差引
df_b にはドル円レート
を格納している

0がA列になり8がI列になっている

1はB列になる

数えるときには0からなので注意

df1 = df_a[50:len(df_a)]
df2 = df_b[50:len(df_b)]

で50行目から終わりまでを指定

次に棒グラフの設定

graph1 = plotly.graph_objs.Bar(
x=df1.iloc[:, 0],
y=df1.iloc[:, 1],
yaxis="y1",
name="差引数"
)

graph_objs.Bar が棒グラフの設定になる

x=df1.iloc[:, 0],
y=df1.iloc[:, 1],

でどの列を対象にするのか視程している
0が日付
1が差引の数になる

yaxis="y1",

でy軸の名称をつけて識別できるようにする

次に折れ線グラフ

graph2 = plotly.graph_objs.Scatter(
x=df2.iloc[:, 0],
y=df2.iloc[:, 1],
yaxis="y2",
name="ドル円"
)

次に余白設定

adjust1 = (df1.iloc[:, 1].max() - df1.iloc[:, 1].min())/10 / 2
adjust2 = (df2.iloc[:, 1].max() - df2.iloc[:, 1].min())/10 / 2

adjust1、adjust2はそれぞれのY軸の最大値、最小値の差の20分の1を定義

これでグラフ表示のときにY軸上下に余白をつけることができる

次に複号グラフの位置の設定

layout = plotly.graph_objs.Layout(

    title="複合グラフ",

    xaxis=dict(title="日付"),

    yaxis=dict(
        title="IMMポジション差引数",
        range=[df1.iloc[:, 1].min() - adjust1, df1.iloc[:, 1].max() + adjust1]),

    yaxis2=dict(
        title="ドル円レート",
        range=[df2.iloc[:, 1].min() - adjust2, df2.iloc[:, 1].max() + adjust2],
        overlaying="y1", side="right", showgrid=False)

)

これは
graph_objs.Layout で設定する

range でy軸の高さ

overlaying は上に表示するときに使う

今回は

overlaying="y1"

を折れ線グラフで設定しているので
棒グラフの上に折れ線グラフがでる

side="right"

とすると
右側にy軸の値がでる

こうすることで2つのy軸表示がでる
デフォルトは左にでる

showgrid=False

を指定すると
グリッドが表示されなくなる

これがあるとグリッド線が表示されてわかりにくくなるので
今回は false にしている

あとは複号グラフの表示

data = [graph1, graph2]
fig = plotly.graph_objs.Figure(data=data, layout=layout)
fig.show()

data に表示するものを指定[/python]
graph_objs.Figure() [/python]
でデータとレイアウトをセット

show() 

で表示する

次に別の通貨で応用
ユーロドルで実践

imm_euro =  pd.read_excel(xlsfile, sheet_name="IMMeuro", usecols=[0, 8])
euro_rate = pd.read_excel(xlsfile, sheet_name="IMMeuro", usecols=[0, 1])

でユーロドルのシートからデータ取得

imm_euro_data = imm_euro[50:len(df_a)]
euro_rate_data = euro_rate[50:len(df_b)]

でデータを50行目からに絞り込む

imm_graph = plotly.graph_objs.Bar(
x=imm_euro_data.iloc[:, 0],
y=imm_euro_data.iloc[:, 1],
yaxis="y1",
name="差引数"
)
euro_graph = plotly.graph_objs.Scatter(
x=euro_rate_data.iloc[:, 0],
y=euro_rate_data.iloc[:, 1],
yaxis="y2",
name="ドル円"
)

でそれぞれのデータをグラフにセット

adjust1 = (imm_euro_data.iloc[:, 1].max() - imm_euro_data.iloc[:, 1].min())/10 / 2
adjust2 = (euro_rate_data.iloc[:, 1].max() - euro_rate_data.iloc[:, 1].min())/10 / 2

で余白を設定してグラフ表示を見やすくする

layout = plotly.graph_objs.Layout(

    title="複合グラフ",

    xaxis=dict(title="日付"),

    yaxis=dict(
        title="IMMポジション差引数",
        range=[imm_euro_data.iloc[:, 1].min() - adjust1, imm_euro_data.iloc[:, 1].max() + adjust1]),

    yaxis2=dict(
        title="ユーロ/ドルレート",
        range=[euro_rate_data.iloc[:, 1].min() - adjust2, euro_rate_data.iloc[:, 1].max() + adjust2],
        overlaying="y1", side="right", showgrid=False)

)


複号グラフの設定

data = [imm_graph, euro_graph]
fig = plotly.graph_objs.Figure(data=data, layout=layout)
fig.show()


データ表示

これでユーロドルでの
IMMポジションの比率
ユーロドルの現状がわかりやすくなる