Bot

仮想通貨botの開発記録#42(2024/1/8)「データサイエンスの学習①Pythonの基本、グラフと表の作成」

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

今回はデータサイエンスの基礎編として学んだことのまとめです。

Yodaka

機械学習や価格モデル作成のベースとしてデータサイエンスは必須項目であり、今後も役に立つはず!

動画を見ながら実際にコードを書いて学んだことをまとめます。

データサイエンス超入門「Pythonの基本」

「Python」はデータサイエンスに向いている言語。他にも「R」というプログラミング言語があるが、初学者はひとまずPythonでOK。 データ型には複数のタイプがある。 →この部分の理解が浅いので繰り返し勉強する。 for文は繰り返しの回数が決まっている時に使う。iに対して処理をn回繰り返す。

while文は「繰り返しの回数が決まっていない時」「特定の条件を満たすまで同じ処理を繰り返したい時」に使う。 →Botを作るときに頻繁に使用する処理の一つなので、イメージを完全になじませておきたい。

【その他感想】

jupyter Labsは便利。動画の演習はこれをメインにコードを書いていたが、コードの実行処理のどの部分でエラーが起きているのかが分かりやすいため、書き直しも素早くできた。 分からない部分をはっきりさせるために、一つずつコードを書いて理解に努めたので、課題と対策も見えた。

これまで浅い理解のままBotのコードを書いてなんとなく動かしていたのかと思うとゾッとする。基礎を学ぶのは大事。完全に理解したと思っても、抜け漏れがある。 実践から得た学びを元に基礎学習を定期的に続けていきたい。 当面は、発展的な内容にも踏み込みつつ超簡単な基礎学習も遊び感覚で行う。

また、基礎を学ぶにしても「同じことを別の人から学ぶ」ことでその事柄に対しての解像度が上がるので、別の角度から学び直すことも理解を深めるポイントとして押さえておきたい。体系的な知識を作り上げるには「土台を広げる意識」が大事。意味のない繰り返しは厳禁。

【宿題】

while文を使った練習問題に複数取り組んで慣れさせる。

データサイエンス超入門「Pandasの基本」

この動画から一気にプログラミングらしくなってきておもしろい。 更新しないデータセットは予め変数に入れておくと処理が速くなる。インデックスとカラムを意識した処理をする。データ集計のメソッドを覚える。データ整形の多彩さを理解して開発の幅を広げる。データサイエンスの8割はデータ整形。

「データ結合」の際には何を「キー」にして結合するかがポイント。データ結合の方法は3種類 。

【Join】基本の型。インデックスが共通している時に使う。異なるデータが共有されている時。

【merge】インデックスが共通していない時に使う。

【concat】縦に結合したい時に使う。

【その他感想】

データ形成や集計のメソッドにたくさん触れて慣れていく必要がある。これも数をこなして遊び感覚で覚えていく。基礎が分かったので、コードを読む時の土台ができた。とはいえ、今やりたいのはJSON形式のデータをもとに分析を進めていく方法なので後半はさらっと見るだけでも良かった。

新しい内容を学習するときは脳に大きな負荷がかかるので、時間が経つにつれて学習を惰性で進めてしまいがち。「今やっていることの必要性」を意識しにくくなってしまう点には今後も注意したい。目的を明確にして学ぶ対象を絞っていかないと時間が無駄になる。これからは4時間程度で切り上げよう。

一気に学び尽くそうとしないことも大事。私が向き合うべき1番の課題がこれ。分かっていてもなかなかやめられず、無理を通して進めてしまうことも多いが、それでは分かった気になるだけでほとんど定着しない。 時間は有限だが、精神力も有限。普段の開発に加えて1日2本の学習はやや無理があったかも。

学習の限界値を引き上げるためにはこういった無理をすることも必要。実力を高めるための日々の筋トレみたいなものだ。今やっていることのほんのちょっと先をやる。一歩先を行く人を追い越す。これを毎日繰り返す。だんだん無理が無理じゃなくなる。疲れたら素直に休む。明日も走れるように。

データサイエンス超入門「Seabornによるグラフ作成入門」

グラフを書くのに使うライブラリは主にseabornとmatplotlibのpyplot。seabornはグラフの種類を指定 。pyplotで細かい形式の調整 →各特徴はDocsを読んだり使用例紹介を見て理解する。 →遊びで色々作ってみて操作に慣れる。

【折れ線グラフ:lineplot】 複数データを表示して比較する最もオーソドックスなグラフ。条件を変えたシミュレーション比較で使えそう。基本的なことはこれ一本で十分できそう。応用も効きやすいので、まずはこれで色々とグラフを作って操作に慣れる。

【散布図:scatterplot】データのばらつきとその傾向が視覚的に分かりやすい。派生系が多い(lmplot,kdeplot,joinplot)。一部のメソッドは引数にheightを入れる必要がある。つまりpyplotではなくseabornメソッドで操作する。

【箱ヒゲ図:boxplot】バラツキの見せ方に特徴があり、大まかに4分類して傾向を見る。中央値からの乖離を見たい時に特に便利。”外れ値”は”外れ値”として処理されるので、異常な値を検出したい時にも使えそう。要素別に書きたいときは、予めmeltメソッドでデータを縦向きに整形しておく必要がある。

【箱ヒゲ図2】violinplot:ばらつきがより細かく分かる。楽器のバイオリンのような形で横方向の膨らみで見るので、どこに密集しているのかが分かりやすい。stripplot:散布図風に点(ドット)で表す。ばらつきがより細かく分かる。重複する値は重なるので、多くのデータを表示したい時に使う。

【箱ヒゲ図3】swarmplot:点を重ねないで横並びで表示する。重複する要素がいくつあるのかが一目で分かる。データ数が多いと表示しにくくなる。一定量以下のデータを扱う時に使う。

【ヒートマップ:heatmap】 要素の相関を色別で表す。階層付き(cluster)も表示可能。相関の強いもの同士を結びつける。相関があるかどうかを調べてBotの戦略実行に用いるトークンを検出したい時に使えそう。これも全自動でBotに検出させたいので、相関を示す値を取り出してBotに組み込むことを試みる。

【雑感】

表にするのは人の目で見て分かりやすくするため。機械による分析はまた違った観点でなされるはずなので、この部分だけに拘らないようにする。単純に収益を表示したい時やシミュレーション結果を比較したい時には必須のツール。戦略立案にはヒートマップを用いた相関を見ていくようにBotを作る。

図の作り方を知ると、図を見たときにスッと読めるようになる。作り方を知っておくと理解しようとするハードルが一気に下がるため、一度手を動かして作り方を知っておくことの大切さも理解できたのは大きな収穫だと思う。

表面上の理解で終わらせないためにも記憶が新鮮なうちに自分で作ってみることが非常に大事。結局は自分の手を動かさないと身につかない。 でも、この繰り返しで確実に力がつく。反復練習の中にちょっとだけ応用を入れる。人間の脳のスペックなんてそこまで変わらないのだから今日も淡々と前進する。

【宿題】

収集した価格データを使って自分でグラフを作る。

要素が3つで三次元的に表現したい時にはどうすれば良いのか調べる

分からないことを理解する過程では必ず「自分で作ってみる」。

まとめ

今回の学習を進める中で、基礎的な部分を十分理解することの大切さを再確認することができました。

特にPythonの基本的な構文をいちいち確認しなくても書けるようになる事は必須項目です。

この記事も参考にして、Botづくりの基礎力も高めていきます。

-Bot