趣味プロ

銀行等の口座をいくつか持っている。給与の振込に使うものもあれば、日頃の支出で頻繁にお金が出入りするものもある。場合によっては口座でない資産もあったり、これらの口座間でお金が移動することもあるので余計にややこしい。自分の持ってる預金残高をわかりやすい形で管理したい。持っている複数の通帳の残高の履歴を積み上げグラフ化すれば、今自分が持っているお金の総額もわかるし、もちろん個別の残高も一目瞭然に傾向が把握できる。
これを使うのにエクセルを使えるとか思うわけだが、データの表示形式と順序などのデータ構造が結びついているというのはやりづらい。VBAを使えば実現可能、というかVBAでできない操作はほぼないとは思うけれど、エクセルはあまり気が進まない…という主観的な理由で、今回はpython + matplotlibでこれをやってみた。pythonの訓練にもなるし。

とりあえず口座ごとに(日付, 残高)という対データがあるとし、これを処理して(日付, 残高1, 残高2, 残高3)みたいな感じの時系列データとしたい。入力データはそれぞれの口座について独立に準備されるので、必ずしも同じ日付のデータが全てのファイルに見つけられるわけではない。まばらなデータ入力でも適当にデータを保管してそれらしい値を出してくれないと困る、というわけで該当する日付に該当する残高データが存在しない場合は、その口座の最も直近のデータでパディングすることとした。たとえば銀行口座が3つあるとして、以下のようなテストデータを入力したとする。

Date Account1 Date Account2 Date Account3
2019/1/1 10000 2019/1/15 20000 2019/1/1 10000
2019/2/1 20000 2019/2/1 5000 2019/2/15 35000
2019/2/18 45000

matplotlibでplt, ax = plt.subplots()としてax.stackplotで、例えばこんな風なグラフをgetできる。

f:id:ttrr:20190218012449p:plain
stackplot

これを使って実際に自分の残高データを処理してみたのだけど…まあ去年今年は色々お金がかかったからな…という結果になった。しょうがないな。

Codeforcesに初参加してみた。解法はわかってみれば簡単なのだけど、思いつくのは難しい。筋道を読むと読みやすいコードを書けるのだけど、試行錯誤では自分にもわかりにくいコードになってしまう。書き始める前によく分析するのが大事なんだろうな。

業務で偏微分方程式を解く必要があり、土日と勉強していた。「科学技術計算のためのPython入門」は前から持っていたが、読み返してみるとやはり良い本らしい。前提知識が薄くよく読めていなかったが、今読むと2章は参考になる。先の利便を考えると今のうちにより良いコードの書き方を身に付けたいな。

あまり食材を使ったスープを作った。好評だったのでメモ。

  1. 生もずくを水洗いし食べやすく切る。ネギと白菜を刻む。ブナシメジを割く。
  2. 卵を溶き、片栗粉小さじ1.5を水に溶いておく。
  3. ごま油を鍋に熱し、もずく以外の野菜・キノコを炒める。油が馴染んで具がくったりしたら水を加える。今回は700 mL。
  4. 水溶き片栗粉、醤油小さじ1、丸鷄がらスープの素大さじ1.5投入。
  5. 適当なところで火を止め、溶き卵を投入

コショウやラー油をかけて食べると美味。丸鷄がらスープの素を使って失敗したことがない。便利すぎ。

Jupyter Notebookからドキュメント作成を試みた話

業務で得られたデータや測定について、定期的に第三者が見てある程度わかる形で提出する必要があり、これまでは主にMS Officeを使ってpdf化することが多かった。しかしこれでは、一旦解析により得られたデータを画像化し、それを貼り付けるような作業が発生するため多少手間が増える。また解析に用いたコードや操作の履歴などは別ファイルに残すか、それなりに面倒な手間をかけてWordなどに貼り付ける必要があり不便だった。解析からドキュメントの作成までを全てJupyter Notebookで完結しようとしてみたところ、素晴らしく作業が簡略化された。

解析コードに加えMarkdown形式のノートを追加し、そのままドキュメントとした。Notebookをpdf化するために、LaTeX形式で一旦出力した。PandocはMarkdownTeXやHTMLをはじめとする様々な形式のファイルを相互に変換してくれる。
github.com
僕の環境ではAnacondaが勝手に最初からPandocを入れてくれていたようだが、実際の作業においては、こちらのページが大変参考になった。
jupyter notebookをTex,PDFへと変換 - 粗大メモ置き場

環境によってはpdfの出力がうまくいかず、1/3日ほどはまった。dviドライバの都合のようであり、一旦.texを書き出してコードをいじる必要がある。dviドライバとしてdvipdfmxを使用する必要があり、¥usepackageコマンドのオプションにこれを含める必要がある。しかしpandocが吐き出す.texは人間が読むようにはできておらず、どのパッケージにオプションをつけたら良いかわからないのだ。これには解決法と言えるほどのものではないが、¥documentclassのところに角カッコで[dvipdfmx]などとつけておけば勝手に判断してくれるようだ。
一旦.texを経由するのには利点があり、例えばMarkdownで指定した画像ファイルなどはなぜか出力された.texファイルには含まれていない。これを手動で加えるついでにやればそれほどの手間ではない。

結果的にこの試みは非常にうまくいき、提出ドキュメント作成の省力化、作業コードの記録化、包括化などいいことづくめだった。

再勉強の必要性を感じて、LaTeXの本を買った。

[改訂第7版]LaTeX2ε美文書作成入門

[改訂第7版]LaTeX2ε美文書作成入門

読むたびに感動がある。良い買い物だ。

atcoder.jp
土日のコンテスト×2のおかげで、ようやく緑になれました。ここのところ開始時間にご飯を食べていたり外出したりしていたおかげで、時間通り開始すること自体、珍しかったのですが今週はどちらも定刻にスタートできました。
難しい問題を解けているわけではない弱さがあるので、もう少し鍛錬してみたいですね。

atcoder.jp

Cまでできた。dfsするとき訪問済みをブール配列で管理すりゃいいものを、ペアつくってvectorに放り込みfindで判定とかいうわけのわからんことをしたために3回TLEを出し、正答を見つけるまでに時間を無駄にした。でも結果には満足。

テレビで風の谷のナウシカを見かけた。懐かしい思いがしたので、思わずコミック版を引っ張り出して眺めていた。前読んだときはそれほど強く感じられたが、いまではこの話は虚無主義への反対表明なのかと感じられてきた。ナウシカは古代人から与えられた運命を受け入れなかった。生命がそれ自体として尊敬の対象であるというのは、宮崎駿の大前提であるように読めた。以前テレビ番組で、遺伝的アルゴリズムを使って生成した移動体にたいして宮崎駿が激怒したのが話題になったことがあったけれど、それもうなづける。