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ポジションの比率
ユーロドルの現状がわかりやすくなる

python で株価指数の取得その2

python で株価指数の取得その2

日経平均株価とかダウはよくテレビとかででるけど
フランスとかイギリスなどのはネットで調べる必要があり
アプリなどでもあまりでないことが多いので表示できるように
investpy で実験

import investpy
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta
import altair as alt
import pandas as pd

でライブラリをインポート

today = datetime.today().strftime('%d/%m/%Y')

で今日の日付を取得し
フォーマットを investpy で使う日付に変更

今回はイギリスの指標の
FTSE 100

フランスの
CAC 40

を取得

フランスは
france

イギリスは
united kingdom
が国名になるので

uk_index =investpy.indices.get_indices(country="united kingdom")
f_index =investpy.indices.get_indices(country="france")

で取得して

uk_index[uk_index['full_name'].str.contains('FTSE 100')]

で検索し 
name が FTSE 100 を確認

ftse = investpy.get_index_historical_data(index='FTSE 100',country='united kingdom',
                                        from_date='01/01/2010',to_date=today)

でFTSE 100の値を取得し

ftse.index = ftse.index.strftime('%Y/%m%d')
ftse = ftse.T
ftse = ftse.T.reset_index()

でDateをカラムに追加

chart =(
    alt.Chart(ftse)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

でチャートで表示

次にCAC 40

f_index[f_index['full_name'].str.contains('CAC 40')]

で検索

cac40 = investpy.get_index_historical_data(index='CAC 40',country='france',
                                        from_date='01/01/2010',to_date=today)

で値を取得

cac40.index = cac40.index.strftime('/%Y/%m/%d')
cac40 = cac40.T
cac40 = cac40.T.reset_index()

で日付フォーマット変更と
Date をカラムに追加

chart =(
    alt.Chart(cac40)
    .mark_line(opacity=0.8,clip=True)
    .encode(
        x="Date:T",
        y=alt.Y("Close:Q",stack=None)
    )
)
chart

でチャート表示

他にもアジアや中東などの株価指数なども
おなじ要領で調べてグラフ化が可能