奇人凡人の雑記帳

趣味とか投資とか、twitterに書きにくいことをこちらに書きます。毎週金曜更新目標(現在多忙のため月1の投資成績がメインです)

金曜忙しかったので今回はお休み

タイトルの通り今週は更新お休みです。


これだけ言いたいので少しだけ書かせてください。

 

舞いあがれ!のガイドブック買いました。まいんちゃんのファンブックと並べてみました。

てかもう2日後からスタートですね。

毎日福原遥さんを朝から見ることができますね。(リアタイできない)

 

舞いあがれ!

 

 

Flaskで作ったwebAPIからエクセルでデータを取得する

h05torです。

社内のプロジェクトで機械学習のアプリをpythonで作成していることを、以前にも書いておりましたが、いくつか問題が生じておりました。

・(デスクトップアプリの場合)PCにpythonをインストールする必要がある。

・元々エクセルVBAで作られていた部分があり、これを全部pythonに翻訳するのは効率が悪い

・かといってpython側からエクセル動かすのも色々問題がある(特にwebアプリの場合だとサーバーがLinuxなのでエクセルが動かない)

・(webアプリの場合)コードがブラックボックスで私しか分からない

 ⇒もし私が転職したりFIRE成功したらプロジェクト破綻します

 

というわけで社内機械学習アプリの作成をエクセルベースで進めることになったのですが、AI部分はpythonでないとできないのでここをどうしたら良いのかが課題でした。

要するにpythonで出力されたデータをどうやってエクセルに持ってこれるかということです。

上で述べたようにデスクトップアプリの場合PCにpythonをインストールする必要があるのが一般論ですが、IT企業でないただの中小メーカーで社内PCにわざわざpython入れるというのは普通は考えられません。(そもそも部署によっては許可されるのか)

 

そこで私が思いついたのが、だったらwebから引っ張ってくればいいんじゃね?と。

そう、webAPIを作ってエクセルでデータを取得すればいいのでは?と。

pythonanywhereにFlaskで作ったwebサイトで機械学習アプリのweb版をデプロイしていたので、それをwebAPIに転用することにしました。

 

pythonanywhereでExcelとどこまで連携できるか? - 奇人凡人の雑記帳 (hatenablog.com)から方向性が変わったのであしからず。

 

まず、pythonanywhereにアップしているflask_app.pyのコードを以下のように記述しました。

from flask import Flask,render_template,Response,request

app = Flask(__name__)

@app.route('/')#webページを生成する部分(webAPIとは無関係)
def index():
    return render_template("index.html")

@app.route("/XML")#WEBAPIを生成する部分(今回メインの箇所)
def XML():
    param = request.args.to_dict()
    try:
        x = param["x"]
        y = param["y"]
        z = x+y
        xml = '<content><python>language: パイソン</python> <first>{}</first></content>'.format(z)
        return Response(xml, mimetype='text/xml')
    except:
        xml = '<content><python>language: パイソン</python></content>'
        return Response(xml, mimetype='text/xml')  

"""
以下はローカルホストでのコードです。
pythonanywhereにデプロイしているものなのでこの部分は省略しております    
if __name__ == "__main__":
    app.debug = True
    app.run(host = "localhost")
"""

 

一方、APIからデータを取得するエクセル側は以下のように記述しました。

 

Flask側でWEBAPIとして設定している関数が@app.route(/XML)としていることから、エクセルからリクエストを送信する先のベースとなるURLは、

https://(webコンテンツのURL)/XMLとなります。

ちなみに/XMLとしたのは、現状エクセルにデフォルトで入っている関数を使用してでwebから受信できるデータはXML形式のみであるため、あえてそう名付けました。

JSON形式で受信する方法もあるらしいですが、追加設定が必要なうえ、複雑なので今回は触れません。

Flask側で処理を行うにあたって、webサーバーにURLに乗っけて送信するパラメーターですが、先ほどの「https://(webコンテンツのURL)/XMLをベースURLとして、それに「?」を付けることでURLのそれ以降の部分をパラメータと定義することができます

上記ではパラメーター名として「x」と「y」の2つのパラメーターがあり、それぞれのパラメーターの値として「柊」、「まいん」を設定しました。

そしてURLの?以降は「x=柊&y=まいん」とすることでURLでのパラメータの搭載ができました。複数のパラメータを入れる際は、「&」で区切ります。

エクセル関数でwebにリクエストを飛ばす方法ですが、WEBSERVICE関数というものがありまして、「=WEBSERVICE(URL)」とすることでwebにリクエストを飛ばすことができ、帰ってきたレスポンスの内容がセルに表示されます。

このWEBSERVICE関数ですが、現状ですとXML形式のレスポンスしか対応していないため(メジャーであるJSON形式は未対応)、FlaskのWEBAPIの方はXML形式で返すよう設定します。

Flask側ではエクセルから受けたリクエストを「param = request.args.to_dict()」でパラメーターを辞書型でparamに収納することができ、ここから各パラメータを

x = param["x"]、y=param["y"]

としてそれぞれ受け取ることができます。

ここでは受け取ったパラメータを処理する例としてパラメータxに入っている文字列と

パラメータyに入っている文字列をつなぎ合わせてエクセルに返す処理をしております。

XML形式で返すには、返す内容を変数xmlに入れて置き、

「return Response(xml, mimetype='text/xml')」とします。

これによりエクセル側で「=WEBSERVICE(URL)」と入力したセルにレスポンスが返ってきます。

ここでレスポンスの中身が「<first>柊まいん</first>」のようにhtmlタグのようなもので囲われていると思いますが、このようにタグで囲うことでエクセル関数のFILTERXML関数を使用することでタグの中身を抜き出すことができます。

ちなみに上記ではlanguage、firstの各タグの外側にcontentタグがあり入れ子構造にしておりますが、抜き出したいタグを何らかのタグの中に入れる2重以上の構造でないとFILTERXML関数が認識しないらしくエラーになってしまうのでこのようにしています。

XMLについてはあまり詳しくないので、こうしたらこうなったというぐらいの話です。htmlとの違いもあまり分かっていません)

 

今後何かに使えたらいいなと思ったので備忘録記事としました。以上です。

 

筋トレ平日復帰した結果・・・・重量奪還www

h05torです。

 

部署内で私だけ残業時間突出して多いのでここ最近は残業するなと言われ、基本定時、どうしてもの場合だけ1時間で帰っていましたが、今度は空き時間で進める予定の並行業務が全然進みません。

これって会社員皆同じ感じなのか、それとも単に私が無能なのか・・・

うん、後者でしょうね。

株もしばらく不調だし、推し事も朝ドラが始まるまでロックアップ期間(株用語使うな)なのか最近情報が少ないので楽しみが少ないです。

 

ともあれ平日の筋トレを先月から解禁しましたが、その結果はというと・・・

ベンチプレスMAX77.5kg

                      65kg×8回

スクワットMAX100kg

 

て先月立てた年内目標ほぼ達成してしまいましたwww

超回復理論では中2~3日ぐらいの間隔でトレーニングするのが良いらしいですが、完全に当てはまっておりますね。

(やっぱり週1回だとダメなんですね。)

まあ、コロナ前はベンチプレスでMAX82.5kg、スクワットでMAX120kgまで行っておりましたのでマッスルメモリーの効果もあって重量の復活が早いというのもあるでしょう。

このままいくと余裕で目標を突破しそうな気がしますので、年内の目標を引き上げます。

 

ベンチプレス:MAX82.5kg or 65kg × 9回 or 70kg×5回

スクワット:MAX110kg or 80kg × 7回

これならそう簡単に達成できない?ベンチプレスに関しては以前のMAXまで戻しにいきます。

       

福原遥さん24歳になったけど私が24歳のとき何してたのよ

h05torです。

今週は思ったほどの忙しさにはならなかったので体力的にはそうでもありませんが、色々あってどちらかというとメンタルの方がね・・・

それはさておき、もう2週間ぐらいたってしまいましたが、私の最推しである福原遥さんが24歳になられました。

Twitterの方ではちゃんとお祝いしています。

来月からはNHK連続テレビ小説「舞いあがれ!」がスタートし、その主人公に抜擢されています。御年24にしてこの大活躍ぶりです。(そもそも10台前半から活躍しまくっていましたが)

 

24歳というと、浪人なし・留年なしで大学進学+大学院進学であれば修士2年(M2)にあたる年齢で、一応私はこのパターンでした。

で、私が今の福原遥さんと同じ24歳だったころ何してたのかということです。

M2なんだから研究室いて学会発表のために研究ちゃんとやってたんでしょ?と「普通は」思いますよね?

そう、ちゃんと研究やっていないうえ、音ゲーばかりやっていました。

朝起きたら音ゲー、研究室行って最低限実験して合間にソシャゲーの音ゲー、帰りにゲーセン寄って音ゲー、研究室合宿で他大との懇親会を抜け出して宿泊部屋で音ゲー・・・とこんなことばっかりやっていました。

で、肝心の研究はというと、学会発表なんてゼロだし、論文の投稿も当然ゼロです。

卒論に大学院進学後のデータを付け足しただけの修論でお情け?で卒業させてもらったようなものです。(外部発表等がノルマであるようなガチな研究室だったらアウトだろこれ)

 

要するにダメダメ人間でした。

福原遥さんとは悪い意味で大違いですね。

 

で、今はどうなってるかというと、少しはマシになっているのではないでしょうか?(願望)

残業続きで結局会社帰りにジムに通えない

h05torです。

本日は手短に行きます。

 

2週間前に会社帰りのジム通いを再開しますという記事を書いたばかりでしたが、今週は残業続きで平日に一度もジムに通うことができませんでした。

そもそも今週の仕事量おかしいやん。後輩社員と協力してうんたらかんたら言われていますが、その後輩が出張でいないのですけど。

さらに言うと来週もスケジュール見た感じだと同じことになりそうなのですが・・・

(結局今週中に全部終わらなかったやつ)

 

肝心の筋トレの話ですが、一応週2回に戻した成果が早くも出ています。

2週間前に立てた低位目標のほうのベンチプレスMAX75kg挙がりました。

休日だけの週一で暫く惰性でやってたときはずっとMAX70kgで現状維持にしかなっていませんでしたが、週2に戻した途端上がりました。

これもしかして年内80lg行く?

 

いや、今週は週一しかできてませんが・・・・今後毎週筋トレ平日にできるか・・?

 

今週は疲れたので短いですがここまで。

米国株ポジション変更

h05torです。

8/19・8/22に米国株の市場が開くと同時にポジション変更を行いました。

簡単に言いますとポジションを減らしました。

(8/19)

VGT:35株⇒26株(382ドル、136.6円/ドル)

          26株⇒22株(381ドル、136.8円/ドル)※円決済

QQQ:36株⇒27株(325ドル、136.6円/ドル)

            27株⇒22株(323ドル、136.8円/ドル)※円決済

(8/22)

VGT:22株⇒18株(374ドル、136.8円/ドル)

QQQ:22株⇒18株(317ドル、136.8円/ドル)※円決済

要約しますとハイテク、グロース系ETFを50%削減しました。

米国株ポートフォリオのメインとしていた部分を減らすのは初めてとなります。

では、なぜこのようなポジションの調整を行ったか思うところを書いていきます。

まず、今年に入ってからの相場ですが、上はQQQの一年チャートです。VGTはQQQと似たような動きするので省略します。

はい、ぶっちゃけ右肩下がりです。でもこの間115→136円と大幅な円安のため円換算で-5%行ってるかどうかぐらいです。まあそれでも年初に売っておけばよかったのですが、私にはこうなることは予想できませんでした。

という感じでQQQが270ドルまで下がるのを傍観してたのですが何故か330ドルぐらいまで戻してきました。円安と合わせればトントンぐらいまで来ました。

さあここから年末にかけて350ドル、370ドル、いや400ドル奪還だ!というようにも思ったりもしたのですが、こんな話もあったりします。

 

リーマンショック前と同じ動きだと・・・・

これヤバイやつじゃね?

でもポジショントークばっかりで結局何が正解なのかわかりません。

 

結論:株分からん。

 

ちなみにVGT・QQQの決済を円とドルで分散したのは、為替相場もサッパリ分からないからです。

現状は円安で、今後さらに円安が進むのであればドルで持っていた方が良いです。

日本オワコン説も多数あるので、そう考えれば円安じゃね?とも思いますが、

米国リセッション⇒株価暴落というパターンだと日本がどうのこうのよりも米国の金融政策の方がインパクトが大きいため円高に行く可能性が高いと思います。

とはいえ、リーマンショック後に1ドル80円とかになった頃よりも今の日銀の方が緩和的でかつ米国もインフレが収まっておらず、ゼロ金利QEといった大々的な金融緩和は無さそうなので(せいぜい、ある程度の利下げとQT打ち止めぐらいか)円高とはいっても1ドル110円、行っても100円は割らないような気がします。

あくまで個人の感想ですが、短期は知らん、中期は円高、長期的には円安ってところだとおもいます。

まあ。円高+株価下落が一番ダメージ大きいので、これを想定するのであれば円に戻しておくのが最適ですが、場合によっては株価下落でも逆に円安(今年の6月までのパターン)の可能性も捨てきれないので、ドルでも持っておこうと思いました。

ただのドルだと全く増えないので、外貨建てMMF(GSドルファンド)に入れました。

今年に入ってからの利上げで外貨建てMMFにも金利が付くようになったので現金のまま放置よりお得です。

 

さて吉とでるか凶とでるか・・・

会社帰りのジム通いを再開します

h05torです。

めちゃくちゃ久しぶりに筋トレネタです。

 

現在、土日にジムで筋トレをしており平日は何もしていません。

元々は会社帰りにもジムに寄って筋トレをしていたのですが、2020年の3月か4月頃から?新型コロナウイルスの感染で会社から寄り道せずに帰宅するよう通達が出され、私自身もコロナ関係のニュースで感染するのを相当恐れていたため以降平日は筋トレをしていません。

なんなら2020年の10月頃まで休会していたので半年ほど全く筋トレしていませんでした。

家で腕立て伏せや自重スクワットでもすればいいじゃんって?

私は基本的に怠惰でありますので、タダでは動けないんですよ。ジムであれば毎月9000円程度の会費がかかりますので、元を取るために行かざるを得なくなります。(それでも三日坊主で金だけ引かれていく人もいるらしいが)

 

で、半年筋トレしてなかった結果、ベンチプレスのmaxが82.5→70kgまで落ちて、

65kgで1セット目9回挙げられていたのが5回しか上がらなくなりました。

しかも2セット目以降の落ち方が酷くなりました。

スクワットはそもそもやらなくなってレッグプレスのマシンに移行していました。

とりあえず2020年10月以降は土日で、土曜にベンチプレス、日曜にレッグプレス、腹筋の他その他諸々のマシン系というように一部位に対して週1回しかやっていない状態でした。

週1回の筋トレだとどうなるかって?

はい、現状維持はできますがほとんど記録が伸びません。

 

で、社会情勢としても新型コロナウイルスは全く終息しておりませんが、withコロナという雰囲気になっていますし、以前ほどの脅威では無くなっているのかなと感じておりますので、今週から会社帰りのジム通いを再開することにしました。

ついでにスクワットも再開します。

 

これで記録が戻せるか挑戦である。

 

とりあえず年内の目標

・ベンチプレス(低位目標/高位目標)

①MAX 75kg/80kg

②1セット目65kg × 7回 / 65kg ×8回

・スクワット

75kg × 8回

※敢えてmaxは追いません