Open107

⚡️今更ながらkaggleに初挑戦する

nk_worknk_work

機械学習関連の知識に手を出そう出そうと思っていたが他の技術のキャッチアップに忙しく手を出せないでいた。
しかしちょうどkaggleの社内コンペが開催されたので参加してみた。
SESでも参加できるのはありがたいと思う。

nk_worknk_work

⚡️とりあえずデータ可視化目的(EDAというらしい?)の自分用汎用ダッシュボードを作成。
PowerBIやStreamlitを使用するとスピードに難があるので、wasm-duckdb?を使用してみたい。
honoやlookerとも比較したい。(もしかしたらgrafanaの方が良い?)
ダッシュボードより速い、lightning board

nk_worknk_work

duckdb rust looker でできないかどうか試してみる。
wasmはその後試してみたい。

nk_worknk_work

wasm-duckdbを使用する前提でとりあえずjavascript上でduckdbを初期化するコードが公式にある。
https://duckdb.org/docs/api/wasm/instantiation

viteの方が多分reactでやるのであれば正攻法なんだと思うけどエラーが出たのでとりあえずjavascriptコードで試した。

nk_worknk_work

なんとかduckdbでjsonlファイルを読み込んだがエラー...
RuntimeError: memory access out of bounds」
WebAssemblyで動作するDuckDB-Wasmがメモリを不正にアクセスしようとしたということらしい。
どうも読み込むファイルサイズが大きすぎる。
だからみんなparquetへ変換するのか...

nk_worknk_work

localstorage永続化は多分容量が足りなさすぎる。
明日はadd opfs?

nk_worknk_work

reactとwasm-duckdbを使用
datagridにはapexgrid でUIはshadcnを今回は使用。(他アプリではMUIを使っていたので他のを使いたくなった)
apexgridは多機能テーブルなのでそこも期待したい。
ダッシュボード部分は多分shadcnでなんとかなるはず。

nk_worknk_work

表はtanstack query tableの方使ってみかと思ったが長いので結局mui datagridに戻りそう。あとは素直にmui x charts使う方が良いかも。

nk_worknk_work

The griddata have been shown.
I shold decide the way to extract data.
It'll be csv on S3 and lambda at first.
On second opfs...

nk_worknk_work

NBA csv data is on the web url.
At this time,I shoud import handy.

nk_worknk_work

Making csv is not difficult.Trim space and put ",".But you should insert a line break when you want to switch other row.

nk_worknk_work

Actevated OPFS explorer...
This is for unvisible folder system on browser...

nk_worknk_work

Making a checkbox for columns and avg line chart and height.

nk_worknk_work

物理系コンペ 物理現象に関連している。

恒星の前を惑星が通り過ぎる現象:transit
FGS1
AIRS
で観測する。

283種類の波長の光で観測
面積比:膨張で待機の構成によって光の屈折率が変わる
AIRS:センサーmask:センサーの精度がいろいろ
シミュレーションデータ:問題設定物理現象の把握が難しい
データがノイジー...惑星が通り過ぎたかどうかわからない...
trainデータに大気組成はないがtestにはある状態

transit中のlight_curveを特徴量として 多項式フィッティング sigma

波長方向にsliding windowで平均化:デノイズ
各波長ごとにlight curveを使用

random forestにすべて入れて予測

NNでのスタッキング
ベイズ系手法による予測:

Hot pixel process :極端な情報を除去してしまう対策
foreground light 除去:恒星がなくてもセンサーが光を検出してしまう影響の除去
wl_i に定数をかけるとなぜか改善する現象が原因
周りのピクセルを用いて壊れたセンサーのデータ補正

ガウス 負の対数 ニューラルネットワーク 低波長 高波長

ランダムフォレストでシグマを予測:多項式

nk_worknk_work

Indoorコンペ:ヒューリスティック最適化

GBDT YOLO

Benetech:散布図のデータ 全て同じ見た目→検出されたデータ点からパターンを作り再検出する。

睡眠コンペ:Child Mind Institute

BirdCLEF2024:昔の解法があると前回からやっている人に遅れをとる。

nk_worknk_work

takoi
ris

取り組み
シェイクしやすい
自分一人でアンサンブルする

時系列 transformer lstm

gbdt
ニューラルネットワーク→特徴量エンジニアリング

LightGBM:特徴量エンジニアリング

post processを入れたやつを選びにくい?

publicが低いと選びづらいが 選べる

gpu 業務

nk_worknk_work

データ分析

Deepfake Detection
Real か Fake
face voice

ライセンス:著作権 データセット
YOLO コピーレフト 商用では使えない

Foursuare Location Matching:
学習データと 評価時の学習データがてれこ

sennet hoa
シェイクしやすい:医療コンペ

LEAP 3Dは厳禁

仕事用 商用

nk_worknk_work

autify:ING fukuchan
ソフトウェアテスト自動化

blloming camp
yokono
さくらインターネット:本社梅田 あいあーす

udemy

panta rhei
AIコア
/VCから資金調達?

google for starts ups
インターン生

leadknock

turning atmacap
自動運転AI

vision langage

terra

e2e
自動運転

エクサウィーズ
サプライチェーン予測

MLOPs パイプライン

elith

nk_worknk_work

kaggleのデータセットでパイプラインの構築、データ基盤の構築をやるのは面白そうだと思い、スクラップをこちらに移行。
Athena
Avro
OpenMetadata
Glue
DataCatalog
Cometa
Snowflake:データリネージ機能追加

https://qiita.com/ak-sakatoku/items/62b42631535cbba6a687

OpenMetadata って何?
メタデータを管理する。さまざまなデータソースからメタデータで自動的に収集。
データカタログ作るのとデータリネージとは、データの生成から使用までの流れを追跡するツール
包括的な感じを受ける
S3にCSVを保存
AWS Glue Crawlerを使ってデータカタログを作成
Athenaを使ってクエリを実行
OpenMetadataとの接続

あえてawsですべてやってから他の方法も試す

nk_worknk_work

https://zenn.dev/tkazusa/articles/41b07be4b7c3ba
とりあえず第一の参考記事...sagemakerは高いのであくまでパイプラインの作成。
機械学習部分のコードはLLMなどを使用せずにシンプルにすればLambdaやGlueでも動くのだろうか?
Lambdaもメモリサイズが合った気がする。

nk_worknk_work

MLOPsの自動化...パイプラインの各処理の可視化、自動化等等がっつりやるということ。
Dockerが一時的に立ち上がり、終了時に消えるようにする。

nk_worknk_work

推論は並列化できる。とりあえずS3に各csvを保存

nk_worknk_work

sagemaker用の記述なのでglue用にする。
glueのIAM設定でポリシーを作成できる。
とりあえずread&write
次はテーブルを作る?いやetlジョブの作成

nk_worknk_work

とりあえずs3からデータを取得してglueで変換、s3にデータを返すというところまで...
titanicのgender test trainのデータを取得
shellのジョブの作成 add nodeにはない
scripteditor?

nk_worknk_work

visual etlジョブにglueのshell scriptをつなげたい
visual etlはrun job monitor に表示される
消えたかと思った

nk_worknk_work

visual etlとshellをworkflowでオーケストレーションするのか...なるほど
とりあえずtriggerの追加
triggerの前後にjobを置くと石化する

nk_worknk_work

余談だが製造業と機械学習の相性は意外にもあまり良くないかもしれない。
機能として100%を求められる場面が多く取りこぼしや見落としが合ってはならない...という要件が多いからかな(絶対にあってはならないという前提がありがち)
おそらく間違う可能性のあっても良い例えば「予測」という分野では使用できるが異常検知をコアの部分で使用するのは無理なのではないか...自分の知見が足りないだけか...
ターゲットの設定ミスか
というぼやき

nk_worknk_work

あくまで、基本となるべき部分は物理式などに頼り、その範囲外の予測をAIで調節という方法が一般的には良いのだと思う。(ミスが許されない分野では特に)

nk_worknk_work

これdbtにopenmetadata とか cometaとか繋げたら勝ちでは

nk_worknk_work

kaggle apiを使用してローカルでtitanicのデータセットを使用できるようにしている。

nk_worknk_work

mkdir -p ~/.kaggle
mv ~/Downloads/kaggle.json ~/.kaggle/

ホームディレクトリに隠しフォルダ

nk_worknk_work

ローカルに一回フォルダを作ってcsvをダウンロードした後にそのデータを読み取ってparquetに変換して元のcsvを消すという方法をとっている。
もっと方法はあるはず。

for file_name in file_names:
    # ファイルをローカルにダウンロード
    api.competition_download_file(competition, file_name, path='.')
    
    # ダウンロードしたファイルのパス
    csv_path = os.path.join('.', file_name)
    
    # Parquetファイルの保存先パス
    parquet_path = os.path.join(output_dir, file_name.replace('.csv', '.parquet'))
    
    # DuckDBのCOPYコマンドを使ってCSVからParquetに変換して保存
    con.sql(f"COPY (SELECT * FROM read_csv_auto('{csv_path}')) TO '{parquet_path}' (FORMAT 'parquet');")
    
    # ダウンロードしたCSVファイルを削除
    os.remove(csv_path)
nk_worknk_work

なんもわからんのでとりあえずdbt initする

nk_worknk_work

Happy modeling!
Which database would you like to use?
[1] duckdb
Enter a number:

と出る。
複数dbtを入れてたら複数出るのかな?
1を入れる

nk_worknk_work

my_duckdb_project:
target: dev
outputs:
dev:
type: duckdb
path: "my_duckdb_project.db" # DuckDBデータベースファイルの保存場所を追加?

nk_worknk_work

とりあえずdbt runを使用してモデルは動かしたが、あとは可視化機能など?

nk_worknk_work

それぞれのディレクトリの役割は、About dbt projects | dbt Developer Hubに記載されています。

Resource Description
models 基本的なSQLを置く場所。ここのディレクトリ以下のSQLはdbt runを実行した際に実行される。
snapshots 状態があるようなデータのSQLを置いておく場所。例は、Snapshots | dbt Developer Hubがわかりやすい。
seeds csvなどの静的ファイルを置いておく場所。 dbt seedコマンドでdbtにロードできる。基本的にはマスターデータなどのlookup tableを置いておく場所。(The rest of the project | dbt Developer Hub)
tests SQLのテストクエリを置いておく場所。
macros macroを置いておく場所。
analysis より分析っぽいアドホックなSQLを置く場所。ここに配置されたSQLは、dbt run時、変数置換は行われるが実行はされない。

nk_worknk_work

brew install duckdbで一度cliをインストールする必要あり

nk_worknk_work

.tables でテーブル内を確認できる。
SELECT * FROM で中身確認

nk_worknk_work

profile が隠しファイルでパス指定に戸惑う。
毎回profileファイルに移動しているが何か方法はありそう。

nk_worknk_work

schema.ymlを以下のように設定する必要あり
version: 2

sources:

  • name: main
    tables:
    • name: train
      description: "The training data table"
      columns:

      • name: id
        description: "The primary key for the train table"
        tests:
        • unique
        • not_null
    • name: test
      description: "The test data table"
      columns:

      • name: id
        description: "The primary key for the test table"
        tests:
        • unique
        • not_null
    • name: gender_submission
      description: "The gender submission data table"
      columns:

      • name: id
        description: "The primary key for the gender submission table"
        tests:
        • unique
        • not_null
nk_worknk_work

train.sqlのsqlのパスを修正したら大丈夫

nk_worknk_work

dbt docs generate でカタログが描かれる!

nk_worknk_work

dbt docs generate でメタデータ作成
target/catalog.jsonができる
dbt追加は設定サービスから行う必要がある。
がない。
dbtはcometa,openmetadataはawsと連携か

nk_worknk_work

cometaは有料!
なのでdbtをopenmetadataと連携したいが一旦設定が簡単そうなdbt-cloudを使用
dbt-core dbt-duckdbはデータの流れを見るにとどめる
openmetadataサンドボックス上のを使用していたが、Installすることにする。
前回は失敗したが...

nk_worknk_work

openmetadata-ingestion[docker]

OpenMetadata のインジェストツールであり、データベースやデータツールからメタデータを取得するためのライブラリです。
の部分

いろんなデータベースにつなぐ...たぶん

nk_worknk_work

metadata docker --help  で以下エラー
UserWarning: Field "model_name" in NLPEngineModel has conflict with protected namespace "model_".

metadata --help でとりあえずコマンドのヘルプらしきものはでた

nk_worknk_work

docker-compose up -dを行う。チュートリアルで記載なし
...

でログインできるようになった🙌

nk_worknk_work

立ち上げている状態ではairflowにアクセスできる

nk_worknk_work

openmetadata 最初は何も入っていないのでdbtに連携したデータベースを入れたいが...

nk_worknk_work

metadataコマンドというコマンドがある...
どこに打つのか

nk_worknk_work

ローカルで行うのは結構ハードル高いかもしれない。
airflow でなんとかなりそう
yamlはなし

nk_worknk_work

クローラーは同じリージョン内で作成する必要あり

nk_worknk_work

クローラーを作成したら、IAMロールを作成する必要あり

nk_worknk_work

出力先のデータベースを作成する必要あり。

nk_worknk_work

クローラーの頻度を決定できる。
とりあえずオンデマンドにする。手動実行にしないと料金が...

nk_worknk_work

クローラーの料金:
料金の詳細:

DPU時間あたりの料金: 1 DPU時間あたり0.44 USDです。
AWS

課金単位: 1秒単位で課金され、最も近い秒に切り上げられます。ただし、各クローラーの実行には最低10分の課金期間が設定されています。
AWS

料金計算の例:

クローラーの実行時間: 30分間
使用DPU数: 2 DPU
計算方法:

実行時間を時間単位に変換: 30分 ÷ 60分 = 0.5時間
DPU時間の合計: 2 DPU × 0.5時間 = 1 DPU時間
料金: 1 DPU時間 × 0.44 USD = 0.44 USD

nk_worknk_work

とりあえずrun crawlerする。
簡単なcsvみっつで55秒か

nk_worknk_work

結果が格納されているデータベースを見る。
無事スキーマが格納されている。
ミスでcsv一個か?

nk_worknk_work

と思ったが、すべてのcsvの情報を一括でまとめている...?
条件はカラムが一致して同じバケットに入っていることのよう

このテーブルをathenaのsqlで処理する。
これで簡単なデータ基盤ができたのか

nk_worknk_work

athena にログインすると勝手にdatacatalogをソースにしてくれている。
大元のs3の場所も選択する必要あり。

nk_worknk_work

SELECT * FROM table ;
で実行時間113ms!

今でこそ色々な代替手段があるとはいえ、これは革命的だったと思う。

nk_worknk_work

https://note.com/fkeisuke/n/n855a2e35d433

こんどはminioでローカルにs3と同期できるストレージを持つ
上記 githubのdockercompose.yamlをダウンロードして、試す。

「CTAS」(Create Table As Select):SQLで新しいテーブルを作成し、その中に選択したデータを格納する操作

ステージング層(STG層):データを加工・整形する前に一時的に格納する場所。
データのソースから取得した生データ(Rawデータ)を格納し、クレンジングや統一フォーマットへの変換
生データを加工しやすい形に変換(データクレンジング、フォーマット調整)
再利用可能な中間結果を作成する。

TO_DATE(sales_date, 'YYYY-MM-DD') AS sales_date, -- 日付フォーマットを統一など

STG層とMART層でのCTAS実行について
「CTAS」(Create Table As Select)は、SQLで新しいテーブルを作成し、その中に選択したデータを格納する操作です。これをSTG層(ステージング層)やMART層(データマート層)で実行する目的やプロセスをわかりやすく解説します。

  1. STG層のCTAS実行
    STG層とは?
    **ステージング層(STG層)**は、データを加工・整形する前に一時的に格納する場所。
    データのソースから取得した生データ(Rawデータ)を格納し、クレンジングや統一フォーマットへの変換を行います。
    STG層でCTASを実行する目的
    ソースデータを簡単に参照・加工できるようにする。
    生データを加工しやすい形に変換(データクレンジング、フォーマット調整)。
    再利用可能な中間結果を作成する。
    CTASの例(STG層で実行)
    sql
    コードをコピーする
    CREATE TABLE stg_sales AS
    SELECT
    sales_id,
    product_id,
    customer_id,
    TO_DATE(sales_date, 'YYYY-MM-DD') AS sales_date, -- 日付フォーマットを統一
    CAST(sales_amount AS DECIMAL(10, 2)) AS sales_amount -- 型変換
    FROM raw_sales;
    この操作の意味:

  2. MART層のCTAS実行
    MART層とは?
    **データマート層(MART層)**は、STG層で整形したデータを集計・統計処理し、分析や可視化に最適な形で格納する場所。

nk_worknk_work

とりあえずminioをダウンロードするところから

nk_worknk_work

yamlファイルがある状態でpullしてくる。
docker compose pull

docker-compose up
WARN[0000] The "AIRFLOW_UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "AIRFLOW_UID" variable is not set. Defaulting to a blank string.
open /Users/nk/.docker/buildx/current: permission denied

airflow のuidがない

nk_worknk_work

dbtフォルダを作りstg,mart層を作る。
stgにparquetからSELECT * FROMするだけのsqlをおく

nk_worknk_work

dataフォルダを作る。dataフォルダにcsvかparquetファイルなどをおく。
とりあえずそのソースからduckdb コマンドを走らせて最初のdbを作る。

nk_worknk_work

dbt docs serve --port 8081 でしていしないとairflowで起動しているポートとかぶっていた

nk_worknk_work

右下をクリックするとリネージグラフが出る。
transformを行うとグラフが出る。

nk_worknk_work

duckdb & dbt部分はひとまず終わり。
db変化がある部分はdbtに都度書くことになる。
titanicの前処理をつらつら書くことになると思う。

glueバージョンと比較したい。

とりあえずminioとairflow部分を構築する

nk_worknk_work

とりあえずminioのバケットにサンプルデータを入れる方法

docker compose up -d をすると
WARN[0000] The "AIRFLOW_UID" variable is not set. Defaulting to a blank string.
WARN[0000] The "AIRFLOW_UID" variable is not set. Defaulting to a blank string.
open /Users/nk/.docker/buildx/current: permission denied

UIDが必要なので確認
id -u

docker yaml内に環境変数を描きたいときにどうするか
.envを同じフォルダ内に

docker-compose up -d
open /Users/nk/.docker/buildx/current: permission denied

sudo chmod -R 0755 /Users/##/.docker
sudo chown -R USER:USER /Users/##/.docker

が必要?
ここまでいるのかな

minio/workflow: no such file

docker内設定ミスか

nk_worknk_work

airflow内で指定しているディレクトリを追加作成しているけど何か違う気もする。
そもそもairflow抜きの設定にしても良い

nk_worknk_work

とりあえずairflowなしで使用

docker-compose up -d でminioファイルにも必要ファイルが格納

dockercompose.yamlも修正

この後手動でデータロード?
brew install minio/stable/mc

nk_worknk_work

とりあえずminioだけdockerで用意したら良い気がしてきた

nk_worknk_work

minioのみ設定 minioにデータを入れる もしくはs3から引っ張ってくるようにしないといけない

nk_worknk_work

duckdb-localというフォルダが必要?
ちゃんとdocker yamlにキーを設定

nk_worknk_work

duckdb-localという保存先を作成できない
そもそも元コードだと必要ないがとりあえず権限をつくる
secretmanagerで管理するモノ

nk_worknk_work

minioにローカルサーバー上でログインはできた
duckdb-localもある
gptの方法ではダメでsecretmanagerで行う

nk_worknk_work

あとはdbtとopenmetadata / glueとopenmetadataの接続

nk_worknk_work

openmetadataとglueの接続
コネクタ?

openmetadataとdbtの接続
yamlファイルのよみこみ(ingest?)

nk_worknk_work

openmetadata cliを使用する必要ある
pip install openmetadata-ingestion

nk_worknk_work

jwttokenはopenmetadata.yamlに記載されている
...doko?
localフォルダに移動
dockder psでopenmetadataのコンテナに入る
execで
findで検索
viでファイル編集

該当部分不明
そもそもopenmetadataのインストールが大丈夫か