2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🎯Numbers3&4の当選番号を予測する『MAGI』システムを作る - 投稿編

Posted at

1. はじめに

どうも、趣味でデータ分析している猫背なエンジニアです。

え~宝くじで一攫千金したくないですか?
宝くじの当選番号を予測するシステムを長年愛してやまない『新世紀エヴァンゲリオン』に登場するMAGIシステムをコンセプトに、つくりたい!そうしたい!と思って開発記録を書いていきます。この記事では投稿編と題し、MAGIからXへの投稿アーキを紹介します。

2. これまでの「🎯Numbers3&4の当選番号を予測する『MAGI』システムを作る」

これまでのエヴァンゲリオン.png

西暦2025年。
あるエンジニアは、繰り返される敗北の記録——「宝くじの外れ券」の山に終止符を打つべく、ひとつの意思決定機構を構築する決意を固めた。
その名は―― N-MAGIシステム。
モデル名はMELCHIOR、BALTHASAR、CASPER。
それぞれが異なる思考ロジックを持ち、合議によって“もっともらしい当選数字”を導き出す。
ベースとなったのは、かつて存在した神話と、そして…アニメ『新世紀エヴァンゲリオン』の意志決定AI。
過去のデータ、時系列学習、出現頻度、逆張りアルゴリズム。それらを融合させ、抽選数字の予測という“人類補完計画”にも似た夢を追い求める開発者の姿があった。

すべては「当てたい」という欲望と、「遊びたい」という本能のままに。

っていう茶番はおいといて...本編に入ります👍

3. 『Xを使う』

<Xをアウトプットの場として選定した理由>
さまざまなアウトプットの方法の中で、私がXでアウトプットする方法を選んだ方法として3つほど紹介します。

■ 無料!スマホがあればすぐに確認できる!
外出先や仕事終わりに本日の数字は何かな~と確認する場合があるかもしれません。そんな時にパット確認できるツールとしてスマホ(X)があります。デジタルデトックスしている人以外は持っていて使っていると思ったので、Xを選定いたしました。

■ 管理サーバ不要!
一般的にはブログやアフェリエイト収入を目的に独自サーバやクラウドを構築して、その上にプロダクトを展開する場合が多いと思います。ですが、私がやらなかった理由として、あくまでアウトプットのために使用するというスタンスを大事にしていて前提にしていたからです。そのため無料で開発者ツールを使用できるX APIを選定いたしました。
まあ、私も いち人間です。将来的に総フォロワーが1000人以上になったらサブスクにするかもですが、現状では精度もイマイチなので考えていません(笑)

■ 知見があったから!
最後の理由としては「知見があったから」という理由が挙げられます。以前にも2つほど記事を投稿したように、X API使用の常習者です(笑)
気になる方はリンクを張っておきますので、確認いただければ幸いです。是非、真似して一緒にRPAしていきましょう(笑)

4. アーキテクチャー

基本思想としては、MELCHIOR,BALTHASAR,CASPERからアウトプットされた予測数字をXに投稿するというすごく簡単なアーキです。

■ 全体フロー
図で表現すると以下のような全体のフローになります。前回までの記事で設計したMAGIの出力結果を集約してX APIを介してXに投稿するというフローになります。
image.png

5. いざコーディング!

投稿ロジックとしてはめっちゃ簡単です。以下のソースコードがすべてです。
強いて言えばカレントディレクトリ内にTwitter APIのトークンを準備するということだけです。
Twitter APIのクラフト方法などはこちらから手順を参考にしていただけたら幸いです👍

X投稿
# .env ファイルを読み込む
load_dotenv()
# Twitter Deverloper Portalで取得
consumer_key = os.getenv("CONSUMER_KEY")
consumer_secret =  os.getenv("CONSUMER_KEY_SECRET")
bearer_token = os.getenv("BEARER_TOKEN")
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
# None がある場合、エラーを出して処理を中断
if None in (consumer_key, consumer_secret, access_token, access_token_secret):
    raise ValueError("環境変数が正しく設定されていません。'.env' ファイルを確認してください。")
# Client (テキスト投稿用)
client = tweepy.Client(bearer_token=bearer_token,
                        consumer_key=consumer_key,
                        consumer_secret=consumer_secret,
                        access_token=access_token,
                        access_token_secret=access_token_secret)
# API
auth = tweepy.OAuth1UserHandler(consumer_key, consumer_secret, access_token, access_token_secret)
api = tweepy.API(auth)
# 画像付きツイートを投稿(改行を含める)
dt_now = datetime.now()
date_str=dt_now.strftime('%Y年%m月%d日')
tweet_text = (
    f"Predict Day : {date_str}\n"
    f"This Post is next predicting the number.\n"
    f"[------- NUMBERS4 -------]\n"
    f"【CASPER】: {NUMBERS4_CASPER}\n"
    f"【BALTHASAR】: {NUMBERS4_BALTHASAR}\n"
    f"【MELCHIOR】: {NUMBERS4_MELCHIOR}\n"
    f"[------- NUMBERS3 -------]\n"
    f"【CASPER】: {NUMBERS3_CASPER}\n"
    f"【BALTHASAR】: {NUMBERS3_BALTHASAR}\n"
    f"【MELCHIOR】: {NUMBERS3_MELCHIOR}\n"
    f"※ Trial Operation Now\n"
    f"#Python #N_MAGI"
)
client.create_tweet(text=tweet_text)

6. 動作確認

以下に運用中のN-MAGIを載せておきます👍
7/16現在も安定運用できており、サーバーレスなのでローコストで運用できています。
※8月~9月初めまでは引越しの関係で更新途絶中。

7. おわりに

この記事までにメインPCに構築してきましたが、個人開発だったのでクラウドを使わずに無料枠で色々と工夫してきました。無料でオンプレ構築するということはメリットもありますが、やはりクラウドだったら引っ越しでも安定運用できるので、お金を払うのも迷いましたが...お小遣い少ないので一旦保留かな....トホホ😇

7. 次回予告

次回予告_終.png

終幕近づく。

8. 今後の記事予定(MAGI伝記)

1. 【作戦概要】:全体構想と設計方針
  - 全体構想と設計方針
2. 【データ収集編】:過去の当選番号の収集
  - 過去の当選番号をどう集める?
3. 【モデル構築編】:3種のモデル(CASPER / BALTHASAR / MELCHIOR)実装と精度比較
  - CASPER / BALTHASAR / MELCHIORの実装と精度比較
4. 【投稿編】:X APIを用いた投稿
  - X APIを用いて予測を自動投稿
5. 【UI&演出編】:MAGI風UIをTkinterで再現して、予測を視覚化!
  - TkinterでMAGI風UIを構築

謝辞

今年の10月に30周年を記念すること、誠におめでたく思っております。前回の「庵野秀明展」に引き続き「30周年記念展ALL OF EVANGELION」にもぜひ行きたいと思っております。引き続き応援しています!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?