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

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

でチャート表示

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