経済指標カレンダーの取得

経済指標カレンダーの取得

スクレイピングだけだとあっているかわからないので

Investor でも取得してみる

[Python]investpyで株、為替、経済指標データを取得する
を参考に

economic_data = invest.economic_calendar(time_zone='GMP +9:00', countries=['japan', 'united states'], from_date='01/02/2021', to_date='28/03/2021')

economic_data.tail(5)

としたがエラー

economic_data = investpy.economic_calendar(countries=['japan', 'united states'], from_date='01/02/2021', to_date='28/03/2021')

economic_data.tail(5)

というように

time_zone を省略したらできた

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

today

で今日の日付を investor で検索する形式に変換して取得

economic_data = investpy.economic_calendar(countries=['japan', 'united states'], from_date=today, to_date=today)

economic_data.tail(5)

とすると今日のカレンダーと思ったけど出ない

economic_data = investpy.economic_calendar(countries=['japan', 'united states'], from_date='23/03/2022', to_date=today)

economic_data.tail(5)

というように前日の日付にすればできる

economic_data = investpy.economic_calendar(countries=['japan', 'united states'], from_date='23/03/2022', to_date=today)

economic_data.tail(5)

economic_data[economic_data['importance']=='high']

で日本とアメリカだけ出てくる

なので国コードを外してしてしてみる

まずは昨日の日付をオートで取れるようにする

[Python]昨日や明日、月末などの日付を取得したい
を参考に

import datetime

from dateutil.relativedelta import relativedelta

を追加

# 今日# => 2020-04-02

today = datetime.date.today()


# 昨日# => 2020-04-01

yesterday = today + relativedelta(days=-1)

で昨日の日付を取れる

today =datetime.date.today()

print(today)

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

print(deel_today)

yesterday = today + relativedelta(days=-1)

print(yesterday)

deel_yesterday = yesterday.strftime('%d/%m/%Y')

print(deel_yesterday)

とすれば取引の当日、前日を取得できる

economic_data = investpy.economic_calendar(countries=['japan', 'united states'], from_date=deel_yesterday, to_date=deel_today)

economic_data.tail(5)

で同じ結果であることを確認した

次に国コードを外してみる

# economic_data = investpy.economic_calendar(countries=['japan', 'united states'], from_date=deel_yesterday, to_date=deel_today)

# economic_data.tail(5)

economic_data = investpy.economic_calendar(countries=None, from_date=deel_yesterday, to_date=deel_today)

economic_data.tail(5)

economic_data[economic_data['importance']=='high']

で経済指標カレンダー取得はできたけど

ミシガン消費者信頼感指数が出ない

結果として対応するのは

通貨コード

指標名

予測値

前回の値

今回の値となっているが

これが遅延があるのか調べないとわからない

遅延が数秒程度なら

Twitter より早いと思う

economic_data.dtypes

でデータ型を調べたら

全て object

この中で検索などの処理で使うのは

Date

Time

Event

の3つをキーにして検索する

Pandas 特定の文字列取得

Pandas 特定の文字列取得

lst = ["近隣10分20000円","近隣5分5000円","敷地内25000円",""]
df = pd.DataFrame(lst, columns = ['駐車場'])
import re

def fee(x):
    m = re.search(r'\d+円', x)
    if m:
        return m.group()
    else:
        return ""

df['駐車料金'] = df['駐車場'].apply(fee)
print(df)

これは apply を使うとできる

「駐車場」列から、金額のみを抽出して、新たな列「駐車料金」

として追加

これだと円が入っているので
これを金額のみにする

re.search() で正規表現で探れる

[解決!Python]re.search/re.match関数と正規表現を使って文字列から部分文字列を抽出するには
を参考に

s = 'id: deep, mail: deep@foo.com, tel: 03-0123-4567'

# re.search関数は文字列にパターンとマッチする部分があるかを調べる
m = re.search('tel: [-\d]+', s)
print(m)  # <re.Match object; span=(30, 47), match='tel: 03-0123-4567'>
r = m.group()  # re.Matchオブジェクトのgroupメソッドでマッチ全体を抽出
print(r)  # tel: 03-0123-4567

つまり

def fee(x):

    m = re.search(r'\d+円', x)

の部分で

xとして渡された文字列から

'\d+円'

で検索している

re.search(r’

で検索したら
正規表現の先頭につく`r`は何ですか?エスケープシーケンスやrow文字列を解説します
とのこと

正規表現を使う時に
R をつけることを推奨しているためらしい

次にわからんのが
m.group()

マッチした文字列を取得: group()
とあった

Pythonの正規表現マッチオブジェクトでマッチした文字列や位置を取得
を参考に

つまり

    m = re.search(r'\d+円', x)

    if m:
        return m.group()

の部分で

\d+円

にマッチする部分を格納している

次に

df['駐車料金'] = df['駐車場'].apply(fee)

の部分

pandasのapply関数の代表的な使い方
が参考になる

df = pd.DataFrame({
        "col_A": [100, 300, 200, 400, 200, 700, 200],
        "col_B": ["A", "B", "C", "D", "E", "D", "C"],
        "col_C": [2, 3, 5, 1, 2, 3, 8]
        })
df.head(10)


# 受け取ったレコードに対して、やりたい操作を記述する
def func1(row):
   return row["col_A"] * row["col_C"]



# dfをレコード単位でfunc1に渡して何らかの操作をしてもらう。戻り値は新たに作成する"col_D"に保存する。
df["col_D"] = df.apply(func1, axis=1)
df.head(10)



# 受け取った値に対して、やりたい操作を記述する
def func2(x):
    return x * 100



# dfの"col_D"の値をfunc2に渡して何らかの操作をしてもらう。戻り値は新たに作成する"col_E"に保存する。
df["col_E"] = df["col_D"].apply(func2)

df

でみるとわかるけど

Def で定義した自作メソッドを

apply() で実行している

そして新しいカラムを追加して

そこへ処理した結果を格納している

とりあえず

まずは apply などで

円の文字を削除してみよう

これができればツイートから経済指標部分を「取り出し

数値以外を削除して数値を文字列に変換すれば処理できる

Pandasで不要な文字を取り除いたり置換する方法まとめ
https://deepage.net/features/pandas-str-replace.html#%E7%89%B9%E5%AE%9A%E3%81%AE%E6%96%87%E5%AD%97%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E6%B6%88%E5%8E%BB

を参考に

str.strip()

で削除できる

今回は円を削除したい

df['駐車料金'].str.strip('円.')

で削除はできる

あとは反映

df['駐車料金'] =df['駐車料金'].str.strip('円.')

df

と経済指標のときみたいに代入すればok

これで文字列の編集はできるので

次に pandas で特定の文字を含む行の抽出をする

まずはツイートの取得と変数への格納

その前に経済指標カレンダーの取得

これがあっているか調べないとだめ

import pandas as pd

url = 'https://fx.minkabu.jp/indicators' #みんかぶFXの経済指標URLを取得
dfs = pd.read_html(url)[0] #テーブルのオブジェクトを生成

#本日のカレンダーを取得

dfs

でも十分に使える

余分なものをなくしてみやすくするなら

import pandas as pd


url = 'https://fx.minkabu.jp/indicators' #みんかぶFXの経済指標URLを取得
dfs = pd.read_html(url) #テーブルのオブジェクトを生成



#前処理開始
dfs1 = dfs[0].dropna(subset = [4]) #4番にNaNが入っている行はバグなので、削除
dfs2 = dfs1.drop(2,axis =1) #2番目の列を削除。axis = 1は列を削除するオプション
dfs2.columns = ["発表時間", "経済指標", "前回変動幅(USD/JPY)","前回","予想","結果"]#列名を手動で追加。



#前処理終了
dfs2    #テーブルを表示

となる

よくみたら配列で0〜6で

0が月曜

つまりdatetime などで曜日を取得してしていする必要がある

引数に曜日を数値で指定する必要ですかあるが

https://itips.krsw.biz/python-get-week-number/#st-toc-h-4

にあるように

Pythonで曜日を数字で取得する方法 まとめ

Pythonで曜日を取得するには weekday() を使う。

weekday() は今日(today)以外にもdatetime型の変数にも適用可能。

戻り値は0から6までの数値で月曜日が0に当たる。

とのこと

つまり今日の日付を取得して

これを使えば曜日指定できるはず

import datetime



# 曜日番号を取得(0は月曜日)

week_num = datetime.date.today().weekday()

print(datetime.date.today())

print(type(datetime.date.today()))

print(week_num)

このweek_num を使えば指定できるはず

これは成功

import pandas as pd

import datetime



week_num = datetime.date.today().weekday()



url = 'https://fx.minkabu.jp/indicators' #みんかぶFXの経済指標URLを取得

dfs = pd.read_html(url) #テーブルのオブジェクトを生成

print(week_num)

で曜日の数値が出る

あとは

dfs[week_num]

で本日のカレンダーを取得できる

import pandas as pd



url = 'https://fx.minkabu.jp/indicators' #みんかぶFXの経済指標URLを取得

dfs = pd.read_html(url) #テーブルのオブジェクトを生成



#前処理開始



dfs1 = dfs[0].dropna(subset = [week_num]) #4番にNaNが入っている行はバグなので、削除

dfs2 = dfs1.drop(2,axis =1) #2番目の列を削除。axis = 1は列を削除するオプション

dfs2.columns = ["発表時間", "経済指標", "前回変動幅(USD/JPY)","前回","予想","結果"]#列名を手動で追加。



#前処理終了



dfs2    #テーブルを表示

をそのあとで実行するとよりわかりやすく表示できる

そのまま経済指標のカレンダーで

Twitter で検索しても出ないが

予測値などを取得することはできるはず

次は

Pandas で時刻の比較とかトリガーとして使う方法を探す

これは

Pandas】DataFrameの文字列日付データを比較して、抽出したりする

https://www.tcom242242.net/entry/python-basic/dataframe-date-compare-extract/#toc7

を参考にまず日時の部分をdatetime へ変換する

#Dfs2 の発表時間をdatetime へ変換



def convert_date(x):

     date = datetime.datetime.strptime(x,"%Y-%m-%d %H:%M:%S")

     return date



dfs2["発表時間"] = dfs2["発表時間"].apply(convert_date)

dfs2

だとエラー
https://qiita.com/over_di/items/1270d3737e0a81719e56

Applyだとエラーになる

Pandas の to_datetime()

だとできるけど

年数の指定がないため1900年1月1日になってしまう

これを解決しないとだめ

これを解決するには

https://qiita.com/over_di/items/1270d3737e0a81719e56
Pandasのpd.to_datetimeで時刻のみ抜き出す方法

を参考に
https://qiita.com/over_di/items/1270d3737e0a81719e56
https://qiita.com/over_di/items/1270d3737e0a81719e56

.dt.time

をつければOK

dfs2["発表時間"] = pd.to_datetime(dfs2["発表時間"],format="%H:%M",errors='coerce').dt.time

dfs2

とすることで無事に変換できた

次は時刻に応じてカレンダーの列を取り出すようにする

オブジェクトを調べたら

to_datetime()

では型変換されていない

元の状態を

dfs2.dtypes
/
で調べたら


発表時間              object

経済指標              object

前回変動幅(USD/JPY)    object

前回                object

予想                object

結果                object

dtype: object

となっていた

ロイターRSS取得

ロイターRSS取得

ニュース取得にはRSSという方法もある

https://www.google.com/amp/www.algo-fx-blog.com/python-news-headlines-rss/amp/
によれば
feedparserライブラリでできるらしい

https://qiita.com/hann-solo/items/46d2bd25667618c36a5d
を参考に

ロイターRSSのURLを変更したらできたが

# ニュースのヘッドライン
print(reuters['entries'][0]['title'])

# 公開日時
print(reuters['entries'][0]['published'])
 
# URL
print(reuters['entries'][0]['link'])

でえらーになる

entries がうまく行かない

# 取得したデータを確認
reuters

で内容を確認

# 公開日時
#print(reuters['entries'][0]['published'])
print(reuters['entries'][0]['updated'])

としたら表示できた

[/python]
# ニュースの取得件数の確認
len(reuters[‘entries’])
[/python]
で確認したら現在は10が限界

# マーケットウォッチのデータを取得
market = feedparser.parse('http://feeds.marketwatch.com/marketwatch/realtimeheadlines/')
market_df = pd.DataFrame(market['entries'])
market_df.head(2)

としたが見にくい

# データを綺麗にする
market_df = market_df[['published', 'title']]
market_df.head()

で見やすくなったが title が省略される

market_df[['title']]

としても同じ

【Python】Pandasのデータフレームを省略せずに表示する方法を紹介!
を参考に省略せずに表示する

多分表示されなくてもデータの格納はされていると思う

https://qiita.com/kiddayo/items/e5ce519a234aff88af12

を参考に

pd.set_option('display.max_rows', 1500)
pd.set_option('display.max_columns', 4096)

としたが
Summary 表示は変わらない
とりあえずは保留

またRSSだと
ニュース更新頻度に問題あるため
Twitter から取得する

すでに tweepy はインストール済

あとはツイート検索と取得
これもできたので
次はテキストのみ抽出する

Streamline でエラーになったが

https://teratail.com/questions/97557
を参考に

重複したdatetime を修正し

new_date = datetime.strptime(i,"%d/%m/%Y").strftime("%Y-%m-%d")

としたら解決した

修正したので commit しようとしたら

Author identity unknown


*** Please tell me who you are.


Run


  git config --global user.email "you@example.com"

  git config --global user.name "Your Name"


to set your account's default identity.

Omit --global to set the identity only in this repository.


fatal: unable to auto-detect email address
 

となったので

git config --global user.email "メルアド"

git config --global user.name "snowpooll"
 

を実行後

git commit -m "Correction of datetime part"
 

これで

Git push origin main
 

でOK

for tweet in tweepy.Cursor(api.search_tweets, q='"#雇用統計"').items(10):

    print(tweet.text)

とすれば

#雇用統計

を含むツイートが10件取得できる

Tweet.text

でツイート情報を取得できる

Tweet.user

ツイートしたユーザ情報にアクセス

Tweet.user.name

ユーザ名の取得

次に特定ユーザのツイート

#if文にてRTとリプライを除外

[tweet.text for tweet in tweepy.Cursor(api.user_timeline, id="Qiita").items(10) if (list(tweet.text)[:2]!=['R', 'T']) & (list(tweet.text)[0]!='@')]

としたら

Unexpected parameter id

となるので id ではないかもしれない

https://toxublog.com/blog/get_tweet_tweepy/
を参考にDFにしてみた

必要なのは

ユーザ名
時刻
ツイート内容

これで一回経済指標で実験してみる

#検索条件の設定

searchkey = '#雇用統計'

item_num = 10

#検索条件を元にツイートを抽出

#tweets = tweepy.Cursor(api.search,q=searchkey,lang='ja').items(item_num)

tweets = tweepy.Cursor(api.search_tweets,q=searchkey,lang='ja').items(item_num)

tweet_data = []

for tweet in tweets:

        #tweet_dataの配列に取得したい情報を入れていく

    tweet_data.append([

        tweet.text,

        tweet.user.screen_name,

        tweet.user.name

                       ])

    #取り出したデータをpandasのDataFrameに変換

#CSVファイルに出力するときの列の名前を定義

labels=[

    'ツイート内容',

    'ユーザID',

    'アカウント名',

    ]

#tweet_dataのリストをpandasのDataFrameに変換

tweet_df = pd.DataFrame(tweet_data,columns=labels)

で大体近い感じ

あとは省略されている部分を調べる

Cvs では省略されていないので

そのままでも使えるはず

もしくはそのままでも使えるか調べる

経済指標アラートアカウント見たけど

アラートのみで実際の値はなし

Reutersとかのアカウントを使った方が正解かもしれない

とりあえず

アカウント名

ツイート内容が取得できればok

あとはここから絞り込み

replace と正規表現

replace と正規表現

import investpy

economic_data = investpy.news.economic_calendar(time_zone=None, time_filter='time_only', countries=['japan', 'united states'],importances=None,categories=None,from_date='01/01/2021', to_date='11/06/2021')

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

とすると
ISM Non-Manufacturing PMI (Dec)

というように結果に
(月)
という表示が入ってしまう

これを削除するには
replace の正規表現を使う

DataFrameで部分一致で文字列を置換

にあるように

replace で第3引数で
regex=True
を指定することで正規表現で replace が可能になる

正規表現については
分かりやすいpythonの正規表現の例

を参考に

今回は任意の英数字なので
[a-zA-Z0-9_]

そして1回以上の繰り返しなので
+
をつかう

replace で ( を置き換え対象にするには
\(
というようにしないとダメ

ISM['event'] = ISM['event'].replace("\([a-zA-Z0-9_]+\)","",regex=True)
ISM

とすれば
(Dec)
の部分が削除される

+を指定すれば繰り返しの指定ができるので

PHS =economic_data[economic_data['event'].str.contains('Pending Home Sales')]
PHS

の結果で
Pending Home Sales (MoM) (Dec)
となっていても

PHS['event']=PHS['event'].replace("\([a-zA-Z0-9_]+\)+","",regex=True)
PHS

とすることで
Pending Home Sales
と変換することができる

geogebra-classic インストール

関数とは入力に対して1つの出力があるということ

yはxの関数である
を表記すると
y=f(x)

英語で書くと
y equals function of x

例としてタクシーの料金

走行距離 => 料金

というもの

次は一次関数と二次関数

一次関数の例

チーズが1gあたり5円
箱代100円

これを y と x の関係にして数式で表現

チーズが x
金額が y
とする

y = 5 * x +100
= 5x +100
となる

この式により
100個売ると
5x + 100
の式から
600円
となる

これをグラフにすると
x=0だと y = 100
になり
xが増えた文だけ直線になっていく

この傾きは
xが1増えるとき
直線がいくつ増えるか
というのを勾配
という

ニューラルネットでいう勾配降下法
gradient descent
というので使う

x=0のときのyの値
これを切片という

今回の式を一般化すると
y = ax + b
となる

a が傾き
b を切片

ax の部分を項
という

項は1つずつの塊
つまり式の+とかで区切るときの塊をいう

このxの数が次数という

今回はxが1つだけなので
一次
となる

これが
y=ax2 + bx + c
なら
項が3つ
xが2つなので二次
となる

一番多い次数を数えて
一次、二次といっている
今回なら
二次関数で
二次の多項式
となっている

これらのグラフを描画するにあたり
GeoGebra を使うと便利

インストールできない場合
ブラウザ版もある

Reference:GeoGebra Installation

によれば
Ad Linux: the .deb and .rpm installers will automatically add the official GeoGebra repository to the package management system on the workstation. This will enable automatic update of GeoGebra every time a new version is released. If you want to include GeoGebra in your custom Linux distribution with GeoGebra included, the best way is to add the official GeoGebra repository (http://www.geogebra.net/linux/) to your package management system. The GPG key of the repository is at https://static.geogebra.org/linux/office@geogebra.org.gpg.key – the name of the package is geogebra-classic.
Installing GeoGebra directly from the command line: for Ubuntu, these two commands eliminate the need for downloading .deb files:
とあり
リポジトリを登録することで簡単インストールが可能

とあったが
リポジトリ登録のため

sudo apt-add-repository -u 'deb http://www.geogebra.net/linux/ stable main' 

を実行したら

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apt/cache.py", line 520, in update
    pulse_interval)
SystemError: W:ターゲット Packages (contrib/binary-amd64/Packages) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Packages (contrib/binary-all/Packages) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Translations (contrib/i18n/Translation-ja_JP) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Translations (contrib/i18n/Translation-ja) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Translations (contrib/i18n/Translation-en) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット DEP-11 (contrib/dep11/Components-amd64.yml) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット DEP-11-icons (contrib/dep11/icons-64x64.tar) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:http://download.ebz.epson.net/dsc/op/stable/debian/dists/lsb3.2/Release.gpg: 鍵 E5220FB7014D0FBDA50DFC2BE5E86C008AA65D56 による署名は弱い digest アルゴリズム (SHA1) を使用しています, W:署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.winehq.org/wine-builds/ubuntu xenial InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 76F1A20FF987672F, W:GPG エラー: http://www.geogebra.net/linux stable InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY C072A32983A736CF, W:リポジトリ http://www.geogebra.net/linux stable InRelease は署名されていません。, W:このようなリポジトリから取得したデータは認証できないので、データの使用は潜在的に危険です。, W:リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。, E:/var/lib/apt/lists/partial/download.virtualbox.org_virtualbox_debian_dists_xenial_InRelease の状態を取得するのに失敗しました - pkgAcqTransactionItem::TransactionState-stat (2: そのようなファイルやディレクトリはありません), E:/var/lib/apt/lists/partial/download.virtualbox.org_virtualbox_debian_dists_xenial_contrib_binary-amd64_Packages の状態を取得するのに失敗しました - pkgAcqTransactionItem::TransactionState-stat (2: そのようなファイルやディレクトリはありません)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/apt-add-repository", line 173, in <module>
    if not sp.add_source_from_shortcut(shortcut, options.enable_source):
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 782, in add_source_from_shortcut
    cache.update(sources_list=new_debsrc_entry.file)
  File "/usr/lib/python3/dist-packages/apt/cache.py", line 522, in update
    raise FetchFailedException(e)
apt.cache.FetchFailedException: W:ターゲット Packages (contrib/binary-amd64/Packages) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Packages (contrib/binary-all/Packages) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Translations (contrib/i18n/Translation-ja_JP) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Translations (contrib/i18n/Translation-ja) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット Translations (contrib/i18n/Translation-en) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット DEP-11 (contrib/dep11/Components-amd64.yml) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:ターゲット DEP-11-icons (contrib/dep11/icons-64x64.tar) は /etc/apt/sources.list:60 と /etc/apt/sources.list:62 で複数回設定されています, W:http://download.ebz.epson.net/dsc/op/stable/debian/dists/lsb3.2/Release.gpg: 鍵 E5220FB7014D0FBDA50DFC2BE5E86C008AA65D56 による署名は弱い digest アルゴリズム (SHA1) を使用しています, W:署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://dl.winehq.org/wine-builds/ubuntu xenial InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 76F1A20FF987672F, W:GPG エラー: http://www.geogebra.net/linux stable InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY C072A32983A736CF, W:リポジトリ http://www.geogebra.net/linux stable InRelease は署名されていません。, W:このようなリポジトリから取得したデータは認証できないので、データの使用は潜在的に危険です。, W:リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。, E:/var/lib/apt/lists/partial/download.virtualbox.org_virtualbox_debian_dists_xenial_InRelease の状態を取得するのに失敗しました - pkgAcqTransactionItem::TransactionState-stat (2: そのようなファイルやディレクトリはありません), E:/var/lib/apt/lists/partial/download.virtualbox.org_virtualbox_debian_dists_xenial_contrib_binary-amd64_Packages の状態を取得するのに失敗しました - pkgAcqTransactionItem::TransactionState-stat (2: そのようなファイルやディレクトリはありません)

となるため
Ubuntu Desktop 20.04にGeoGebraをインストールする

を参考にインストール

sudo apt-get -y install  libcanberra-gtk-module libgconf-2-4 gconf-service gconf2-common libcanberra-gtk0 gconf-service-backend

で必要なライブラリをインストール

今回は ubuntu 16.04 へインストールするので
Linux (deb): 64 bit installers for .deb based systems (Mint ≥ 18, Debian ≥ 8, Ubuntu ≥ 14.10)
をダウンロード

sudo dpkg -i geogebra-classic_6.0.666.0-202109211234_amd64.deb 

でインストール

geogebra を起動し
数式を入力

今回は
y = 5x + 100

として横の○アイコンをクリックすると
グラフの表示ON・OFFができる

VS Code で python のパスを追記

VS Code で python のパスを追記

vscode で自動補完されないため
最新版に更新したら
python そのものを読み込んでいない状態に
VSCodeでPython自作モジュールimport時のエラー(Unable to import )が消えない場合の対処方法
を参考に

python.autoComplete.extraPaths
を設定することにした

パスに関しては
VScodeの自動整形や自動補完の設定(Python)

を参考に

pip show tensorflow

の結果

Name: tensorflow
Version: 2.8.0
Summary: TensorFlow is an open source machine learning framework for everyone.
Home-page: https://www.tensorflow.org/
Author: Google Inc.
Author-email: packages@tensorflow.org
License: Apache 2.0
Location: /home/snowpool/anaconda3/lib/python3.8/site-packages
Requires: absl-py, astunparse, flatbuffers, gast, google-pasta, grpcio, h5py, keras, keras-preprocessing, libclang, numpy, opt-einsum, protobuf, setuptools, six, tensorboard, tensorflow-io-gcs-filesystem, termcolor, tf-estimator-nightly, typing-extensions, wrapt
Required-by: 

から
/home/snowpool/anaconda3/lib/python3.8/site-packages
がパスであることを確認

VS Codeのsettings.jsonの開き方

を参考に

ctrl + ,
で設定画面を開き
右上のアイコンから

Open Setting (JSON)アイコンをクリック

settings.json
の
{
    "workbench.editorAssociations": {
        "*.ipynb": "jupyter-notebook"
    },
    "notebook.cellToolbarLocation": {
        "default": "right",
        "jupyter-notebook": "left"
    }
}

{
    "workbench.editorAssociations": {
        "*.ipynb": "jupyter-notebook"
    },
    "notebook.cellToolbarLocation": {
        "default": "right",
        "jupyter-notebook": "left"
    },
    "python.autoComplete.extraPaths": [
        "/home/snowpool/anaconda3/lib/python3.8/site-packages"
    ],
    "python.analysis.extraPaths": [
        "/home/snowpool/anaconda3/lib/python3.8/site-packages"
    ]
}

として保存

これで再度 vscode を立ち上げると
コード補完がされるようになる

ubuntu に opencv tensorflow2 のインストール

ubuntu に opencv tensorflow2 のインストール

Ubuntu に python の opencv をインストール

を参考に

python -m pip install --upgrade pip
pip install opencv-python
pip install opencv-contrib-python

でインストール

次に
TensorFlow 2 をインストールする

を参考に

pip install --upgrade pip
pip install tensorflow

でインストール

pip show tensorflow

でバージョンを確認したら

Name: tensorflow
Version: 2.8.0
Summary: TensorFlow is an open source machine learning framework for everyone.
Home-page: https://www.tensorflow.org/
Author: Google Inc.
Author-email: packages@tensorflow.org
License: Apache 2.0
Location: /home/snowpool/anaconda3/lib/python3.8/site-packages
Requires: absl-py, astunparse, flatbuffers, gast, google-pasta, grpcio, h5py, keras, keras-preprocessing, libclang, numpy, opt-einsum, protobuf, setuptools, six, tensorboard, tensorflow-io-gcs-filesystem, termcolor, tf-estimator-nightly, typing-extensions, wrapt
Required-by: 

となった
UbuntuにTensorFlowをインストールする【機械学習システム公開のため】

によれば
avx 対応しているCPUでないとダメらしい

sudo lshw -class processor


CPUの確認ができるらしい

私の環境だと

  *-cpu                   
       詳細: CPU
       製品: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
       ベンダー: Intel Corp.
       物理ID: 3
       バス情報: cpu@0
       バージョン: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
       シリアル: To Be Filled By O.E.M.
       スロット: CPU 1
       サイズ: 1966MHz
       容量: 3800MHz
       幅: 64 bits
       クロック: 100MHz
       性能: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm epb ssbd ibrs ibpb stibp kaiser tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm ida arat pln pts md_clear flush_l1d cpufreq
       設定: cores=4 enabledcores=4 threads=8

となり
一応は問題なし
10年前くらいに購入したマシンだったけど
なんとか動くようだ

Vscode プラグイン

Vscode プラグイン

https://yurupro.cloud/767/
を参考に
Python 開発関連を入れる

プラグインの入れ方は
https://blog-and-destroy.com/21376
を参考に

indent-rainbow
でインデントの色分け

ZenKaku
で全角を色でわかるようにする

Python Indent
でpython の自動インデント

TabNine
で予測変換

Python Docstring Generator

関数やクラス用のコメントのフォーマットを自動作成

Pylance

設定で、python.analysis.typeCheckingModeをbasicまたはstrictに設定すると型チェックを利用できる

Auto Rename Tag

開始タグと終了タグの修正が連動するようになる

Highlight Matching Tag

開始と終了タグにアンダーラインが引かれる

M1 Mac 開発環境作成

M1 Mac 開発環境作成

Viscose インストール

Python 開発環境

Jupiter notebook

Git
を入れる

Udemy などを参考に入れていく

まず home-brew が必要
https://www.teamxeppet.com/macbook-m1-homebrew-install/
を参考にインストール

Command + スペース

Spotlight検索を開いて
ターミナルと入力し

ターミナルを開き

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

でインストール

インストール後にパスを通す必要があるので

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/snowpool/.zprofile
brew -v

でバージョンを確認

Homebrew 3.3.12

M1 Mac環境にPython3をインストールする方法

を参考に

pyenv

Python3 をインストール

brew install pyenv
pyenv -v

でバージョンが出ればok

次に使用しているシェルを確認

env | grep SHELL

を実行し

SHELL=/bin/zsh

となったら

~/.zshrc を編集することになる

シェルの違いについては
MacにPythonをインストールする3つの方法!それぞれの利点と手順を紹介

を参考に

最新版のVimをインストールする方法【Mac】
を参考に

brew install vim


Vim をインストール

次に pyenv のパスを設定

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/shims:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
pyenv install 3.8.12


Python3.8.12 をインストール

pyenv global 3.8.12 

で使用するpython のバージョンを指定

次に
Python – Jupyter NotebookをMac M1 搭載機にインストールする
を参考に

Pip3 で Jupiter notebook をインストールする

pip3 install --upgrade pip

で最初に pip をアップデートして最新にしておく

sudo -H pip3 install jupyter

でインストールしたけど

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

と最後にエラーが出た

pip3 install jupyter

を実行したら特にエラーは出なかった

とりあえずインストールはできたので

jupyter notebook

で起動

これで動作確認できたので
次に git のインストール

MacにGitをインストールする

を参考に
Git で画像を扱えるように

brew install git
brew install git-lfs

を実行する

次に google chrome
これは
普通に検索してダウンロードするだけでok

ラズパイ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 コマンドが使えるようになる

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

を参考に