奇人凡人の雑記帳

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

2022年2月総集編・・・・あとは分かるな?

h05torです。

今月もまた忙しくなりそうです。また残業代で額面が大台いってしまうのか?

 

ここから本題ですが、要するに先月の振り返りです。

ここまで波乱含みの2月も恐らく記憶の範囲では無かったと思います。

まず2月1日、仕事帰りにTwitter見てたらまさにBreaking newsが入ってきました。

我が推しであります福原遥さんが新型コロナウイルスに感染というニュースが飛び込んできました。幸いにも無事に回復されましたのでほっとしました。

今年に入ってからオミクロン株が急速に広まっており、現在も都内で連日1万人以上感染者が出ている状況ですので、気をつけたいところです。

ちなみに先日3回目のワクチン接種に行ってきました。今回も副反応の類は全くといっていいほどありませんでした。

 

あと、今月は北京オリンピックがありましたね。元々国内のコロナ情勢や国際政治におけるいざこざもあってTVとかでも例年ほどの盛り上がりは、無かったように感じられます。いや、そもそもコロナ対策で開催国の中国が海外からの観客受け入れていないのでそりゃそうか。

てか、昨年の東京オリンピックが自国開催だったからこんなご時世でも盛り上がってただけか。

 

そして最後に許せないニュースですが、2月24日にプーチン・ロシアがウクライナへの侵略戦争を開始しました。プーチン曰くネオナチだの民族主義者だのほざいていますが、いや鏡みてみろや。

どう見てもプーチン政権のロシアの方がよっぽどナチスだろうが。

しかも核兵器を誇示したり原発に向けて攻撃するなど完全に意味プーチンやん。

こんなこと不条理極まりないです。

遠く離れた日本にいる私にできることは寄付ぐらいと限られている状況です。

せめてウクライナの人々に連帯を示すという意味を込めてTwitterのアカウント名にウクライナを象徴する、ひまわりのアイコンを入れました。

早く平和な日常が戻ってくることを願っております。

今月もお金が勝手に減っちゃう系?

h05torです。

 

良い子の皆様は株式投資なんておやめなさい。

株式投資はギャンブルです。

金持ちになりたければ労働で稼ぎなさい。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

はい、タイトルの通りで今月もまたお金が減りそうです。

しかも給与の入金で補えないレベルでですね。

 

ちなみに以下の画像はmyPFで2番目に比率が高いQQQのチャートです。

f:id:h05tor:20220225214506p:plain

先月末は360ドルぐらいと一旦反発していたのですが今月中旬ごろから再び下がり始めていて今は340ドルになってますね。

(実は昨日の夜間に320ドルで買えるチャンスあったらしいのに、早朝に340ドルで1株だけですが買うという優柔不断さ)

他の持ち株のVGTもQQQと同等にダダ下がりで、VHTが前者に比べればマシだがそれでも下げ、20万円分だけ持っているHDVがヨコヨコといった具合で既に年初来で-100万円ぐらいになってるんじゃないですかね。(ちゃんと計算していない)

大分下がってきたもののまだ下がるかもしれないのでVGT380ドル、QQQ310ドルぐらいに指値しておこうかな。(そういう下値指しするとそこまで下がらずに反発する奴)

余談ですが米国株ETFを追加購入する資金を残しておきたいので某日本株を今月に入ってから70万円弱信用買いしました。普通に業績悪くないのに前回安値付近まで落ちてきたので買いました。(こういうことするからギャンブラー気質になっていく)

 

あれ?私って信用取引に手を出すギャンブラーだっけ?競馬も麻雀もパチンコもやったことないのに・・・(何故か宝くじは小学生の時に買ったことある)

pythonanywhereにデプロイしたwebページでファイルダウンロードの実装

追記

2022/4/29 

  send_from_directoryの引数filenameがFlask 2.0.0以降はpathに変更になったことを追記

--------------------------------

h05torです。

 

前回の記事Pythonでzipファイルへの格納について備忘録を書きましたが、今回はその続編として生成したzipファイルをwebページからダウンロードする部分についての備忘録を記事として残します。

流れとしましては、

pythonanywhereにデプロイしているwebページで処理した結果をバックグラウンドでcsv化+zipファイルに格納(前回記事はここまで)

                  ↓

webページ搭載したダウンロードボタンを押すとzipファイルがダウンロードされる

といった感じです。

 

前回記事の続きということで、zipファイルの生成は済んでいる状態とします。

そのため今回はmodule1.pyのプログラムは使用せず単純に既に用意されているzipファイルをダウンロードするだけのwebページを作成するだけです。

zipファイルはsave_space階層に保存されており(赤囲み)、黄色で囲っている部分がzipファイルの中身となっています。

なお、今回はwebページ側の要素が多いため前回記事のファイル配置の図に以下が追加されています。

Flaskの仕様によりmysite階層の中にtemplates階層を配置し、立ち上げるwebページとしてindex.htmlが含まれています。

f:id:h05tor:20220214232418p:plain

  

それでは、ファイルダウンロードの手順の説明に入ります。

まずはFlaskでwebページの立ち上げのためのflask_app.pyのコードです。

pythonanywhereでFlaskを使用する際はデフォルトでflask_app.pyという名前になります。

#flask_app.py
from flask import Flask,render_template,send_from_directory

app = Flask(__name__) 

"""
・ここでwebページを立ち上げる
"""

@app.route("/",methods=['GET']) def index(): return render_template("index.html") """ ・ファイルダウンロードの部分
directoryでダウンロードしたいファイルの階層を相対パスで指定
filenameでダウンロードしたいファイル名
as_attachmentはTrueにしておけばOK
attachment_filenameはダウンロードしたいファイルのnameを変更したい場合に指定
""" @app.route("/downloadzip",methods=['GET']) def downloadzip(): try: return send_from_directory( directory = "../simulatefile", filename="zipfile.zip",#flask2.0.0以降はfilename→pathに引数名が変更 as_attachment=True, attachment_filename="zipfile.zip", ) except: return "<html><p>エラー</p></html>" """ pythonanywhereにデプロイする際は以下は省略する """ if __name__ == "__main__": app.debug = True app.run(host = "localhost")

 

またwebページとなる、htmlファイル(index.html)は以下のようになります。

<!--index.html -->
<!docutype html>
<html lang ="ja">
<head>
    <title>サンプルアプリ</title>
    <meta charset="utf-8"/>
    <link rel="stylesheet"
        href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>

<body>
    <div class="container center-block col-md-10">
        <h1 class="text-center">sample</h1>
        <div class="row">
            <button class="btn btn-info btn-sm" onclick="location.href='/downloadzip'" id="download">ダウンロード</button>
        </div>
    </div>
</body>

</html>

表示されるwebページ自体は「ダウンロード」ボタンがあるだけのめちゃくちゃシンプルなページです。

ボタンの作り方は色々あると思いますが私の場合は今回bootstrapで作っております。(htmlファイルの最初の方で外部からcss読み込んでいるのがbootstrapです)

ボタンの機能ですが、onclick要素を設定しlocation.hrefでURLを/downloadzipに設定することでボタンを押した際にflask_app.pydef download_zip(デコレーターでURLが/downloadに設定されている。methodsはGETとすること)のプログラムが取得され、zipファイルがダウンロードされるようになっております。

 

 

 

今後も業務用?自作webアプリで搭載した要素などで残しておきたいものがあれば備忘録として記事にしていきます。

pythonanywhereでzipファイルの作成と格納

h05torです。

 

福原遥さんが昨日新型コロナ感染からついに復帰という報告がありました。

無事に回復されて良かったです。

 

ーーーーーーーーーーーーーーーー以下本編ーーーーーーーーーーーーーーーーー

 

私が仕事で使うためだけに作成したwebアプリ(pythonanywhere使用)でzipファイルの作成+ダウンロードといった機能があると便利だと思いましたので、実際に追加してみました。

今後の応用などのための備忘録として記事に残しておこうと思いました。

 

一つの記事に全部書くと長くなりますので今回はzipファイルの作成とその中へのファイルの格納までといたします。(h05torが怠情なだけ)

 

なお、本記事では基本的にpythonanywhere環境での使用となっておりますので、ディレクトリの取り方が特殊かもしれません。(逆に私自身は本職ではないので標準的な配置が分からないかも)

一応、今回のファイルの配置は以下の図のようになっていまして、フレームワークはFlask、pythonは3.8を使用しております。

pythonanywhereの仕様上(Flaskの場合?)user階層(実際はアカウント名)がカレントディレクトリとなることに注意です。

mysite階層中にあるflask_app.pyがデフォルトでwebサイトの立ち上げのpythonファイルとなり、同階層にあるmodule1.pyが個別のプログラムのモジュールです。

今回の流れとしましてはmodule1.pyの中でsave_space階層中に保存されているcsvファイルをzipファイルの中に格納するということをします。

f:id:h05tor:20220212115311p:plain



おそらくpythonだとデフォルトでzipfileのライブラリがデフォルトで入っている?(入っていなかったら申し訳ございません。クラウドだとpythonanywhere、ローカルだとanacondaなので入ってました)と思いますので、まずzipfileをimportします

 

import zipfile
#zipファイルはcsvファイルと同じsave_space階層に保存しますが、
#毎回ルートディレクトリから記述するの面倒なので共通部分をfolderとしてまとめます。
folder = "./save_space/"

with zipfile.ZipFile( folder + "zipfile.zip","w") as z:
    z.write(folder + "csvfile1.csv")
    z.write(folder + "csvfile2.csv")

zipファイルの生成とその中へのファイルの格納は

with zipfile.ZipFile構文で行うことができ、第1引数にzipファイルの名前を指定します。

第2引数の'w'は書き込みモードで、ファイルが存在しなければ新規作成、存在していれば上書き(既存の内容は削除)で保存されます。

この構文の中で、z.write(zipに格納したいファイル名)でファイルを格納することができます。

処理が終わり、zipファイルが生成されると以下の図のような配置になります。

f:id:h05tor:20220212131626p:plain

赤で囲ったzipfile.zipが今回生成したzipファイルで、黄色で囲った部分がzipファイルの中身となります。図のようにsave_spaceのフォルダごと格納しているため、解凍時に煩わしさがあるかもしれません。

その場合、以下のようにz.writeの第2引数にファイル名をディレクトリ部分無しで直接指定すると、save_spaceフォルダ無しで直接zipファイルの中に格納することができます。

(説明しにくいけど、第1引数で格納したいファイルを指定し、第2引数で所謂「名前を付けて保存」みたいな感じだと思います)

folder = "./save_space/"

with zipfile.ZipFile( folder + "zipfile.zip","w") as z:
    z.write(folder + "csvfile1.csv","csvfile1.csv")
    z.write(folder + "csvfile2.csv","csvfile2.csv")

この場合は以下の配置になります。

f:id:h05tor:20220212132628p:plain

 

なお余談ですが今回はpythonanywhere + Flaskを前提としているためuser階層がカレントディレクトリであるため相対パスで上の階層に戻るということはありませんでしたが、仮にローカル環境など他の環境ではmodule1.pyが存在するmysite階層がカレントディレクトリになるため、格納したいcsvfileを指定する際、

z.write("../save_space/csvfile1.csv")となるかと思うのですが、実はここで上の階層に戻る相対パス「..」が入っていると、何故か生成されたzipファイルの中に何も入っていないという現象が起こります。

このような場合はz.write("../save_space/csvfile1.csv","csvfile1.csv")というように相対パスを含まない第2引数を指定すると解決することができます。

※実はpythonanywhereのバックアップを取ってローカルで動かそうとしたら起こった奴です。

 

 

次回は続編として生成したzipファイルのダウンロード編の予定です。

いつかこうなる想定はしてたものの・・・

h05torです。

 

なんか最近また新型コロナ増えまくってますね。

年が明けるまでは、もうほぼ終息じゃね?ってぐらい低位推移だったのに今や東京都内で1万人とかザラです。

まあ重症化率が低いらしい?オミクロン株に置き換わっているので、少なくとも健康で若い方であれば「ただの風邪」とは言わないまでも過度に恐れる必要はないかなとも思ったりはします。

 

とはいえ世間でこれだけ感染者が出るとTV等で名前が出る方々の感染報告も今までにない勢いで上がってくるわけで、今月1日に案の定というわけです。

 

はい、私の推しの福原遥さんも感染してしまいました。

もはや誰もが感染しても不思議ではないので想定はしていましたが、いざこのニュースが出ると「ああああああああぁぁぁぁ」ってなってしまいますね。

 

↓この記事書いている最中に「福原遥」でgoogle検索するとそのニュースが大量に出てきます。

f:id:h05tor:20220204224042p:plain

発熱の症状があり療養中ということで私としてはせめて軽症で済んで早く回復するのを祈ることしかできないのが何ともというところです。

元気になったらTVやyoutube等でいつもの可愛い福原遥さんが見られるようになったらいいなと思います。

何よりも今年は朝ドラがあるので、その撮影などもあって忙しいと思われますので体調管理には十分気をつけてください。

 

福原遥さん、コロナに負けるな!

【福原遥単推し】2022年1月28日現在の私の推しポートフォリオ

おはひよーっ

h05torです。

 

前回の記事で自身の資産ポートフォリオをちゃっかり公開していたので、調子に乗って推しの方のポートフォリオを公開してみます。

(単にエクセルで円グラフ作ることに味を占めたというのは秘密)

 

ちなみに実在の人物(以下3次元と表記)とアニメや漫画の登場人物(以下2次元と表記)は別ポートフォリオ(以下PFと表記)とします。

(画像を2枚貼って尺稼ぎたいだけ)

 

まずは、3次元の方のPFです。

 

f:id:h05tor:20220128204709p:plain

福原遥さん一人だけで100%ですね

当たり前でしょう。だってこの記事のタイトルに【福原遥単推し】って書いてあるし、Twitterでも診断ツールの結果とセットで「単推し」ってよくツイートしているんだもん。

 

てか、私が社会人になった2018年になって正式に福原遥さんを推し始めるまでそもそも2次元に100%コミットしてて、そもそも3次元が未開地だったという。

いや、実は2019年の前半ぐらいまでは、福原遥さんを起点にして他の女優さんとかアイドル(坂道グループとか)に広げるという構想もあったのですが、自分の中で今までの2次元至上主義をひっくり返すという政治的な思惑なのか純粋に福原遥さんが好きなのかという論争の挙句、結局他の人には手を出さず「福原遥単推し」に落ち着いたという経緯で今に至ってます。

 

続いて2次元の方のPFです。

f:id:h05tor:20220128215734p:plain

柊まいん、有栖川ひまり、その他福原遥系(まいん、ひまり以外で福原遥さんが声優やっているキャラ)で8割以上占めています。

2次元においても実質福原遥単推しですね。

むしろ他は~系みたいに複数まとめて1つになっていてその他大勢みたいな感じになってますね。

CCさくら木之本桜ちゃんは福原遥系ではないですが、結構好きです。魔法少女です。てかある意味一番健闘している?

魔法少女といえばプリキュアの有栖川ひまり(こちらは福原遥系です)もですね。

もしかしてh05tor氏って実は魔法少女好き?

結局のところ、まいんちゃん(福原遥系の筆頭)が100%独占ではないにしても圧倒的占有率ですけどね。でも2018年終了時点では実は50%言ってなかったし、なんならクッキンアイドル放送してた時代(2009~2012年度)ですら私の中で最高占有率40%台半ばぐらいだったので、ここ数年の福原遥単推しでさらに勢力伸ばしています。

 

むしろ福原遥単推し自体が柊まいんによって仕組まれた陰謀という説もあるとかないとか

ものすごく余談ですが柊まいんはクッキン「アイドル」ですが、私の中では「アイドル系」ではなく「福原遥系」に分類しています。

 

要するに今回何が言いたかったって・・・?

それは福原遥単推し】ってことである。

新年始まってから勝手にお金が減り続ける

h05torです。

新年あけてからどこもかしこも株価ダダ下がりで既に60万円以上減ったので記事にしました。

 

実は2021年末に総資産1000万円の大台を突破していたのですが、また900万円台に逆戻りしています。

てか1か月分の給料からの入金ではカバーしきれないぐらい減っています。

あれ?もしかして前月比で総資産額減るのって初じゃないかな。前年5月のWISH株爆損の際は、主力部分のETF+給料入金でなんとかプラス維持してたし(投資分はマイナス)、なんなら2020年のコロナショックの時はまだ運用額が小さくて(100万もいってない?)下落率では大きくても、金額ベースではせいぜい-10万とかだったので軽傷でした。

ただ、今となっては変動資産である株+投信(つみたてNISA含む)で600万円以上占めており、しかもハイテクETFであるVGTとナスダック100ETFであるQQQがその半分ぐらいあって、その2つが年初から-10%と集中砲火されているため、そりゃ減りますよね。

(巷ではレバナスなるものが流行っているみたいですが、あちらは既に-20%とかなので私ならメンタル持たないですw)

 

↓ちなみに株と投資信託での保有銘柄の構成はこんな感じです。これで620万ぐらい。

f:id:h05tor:20220121220123p:plain

60万とか減ってるからVGTとQQQばっかり買い過ぎた?と思いましたが、一応全体の半分弱ぐらいです。

 

他の資産含めるとこうなります。

f:id:h05tor:20220121223655p:plain

現金比率が2割いってないぐらいなので普通の人の感覚だと頭おかしい奴だと思われるかもしれません。

全資産でみるとVGT+QQQで3割ぐらいでした。この部分がやられている訳か。(※インデックスも-6%ぐらいは逝ってます。)

 

金融引き締めとかでもしかしたら今年は下手したらマイナスで終わるかもしれません。

その場合、今年のベストパフォーマンスはまさかのクラウドバンクか?

まあ、分散投資は大事というのはこういうことなのかもしれません。

 

 

 

そろそろ株上がってください。

 

※1/22追記 QQQさらに2.8%下がってるんですがwwwもう80万ぐらい溶けましたね。はい。