Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DuckDB使ってみたら便利だった件

myu65
June 13, 2024

 DuckDB使ってみたら便利だった件

VRC DS集会2024-06–13LT

myu65

June 13, 2024
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 • myu65です。みゅうです。 • 化学なんもわからん。 • 化学(実験系)→ 実験データとかの分析 → データ活用

    → データ基盤 ということで最近はデータエンジニアリング的なことをやってることが 多いです。 • 最近 Snow Villageに入村しました。
  2. DuckDBってなに? • 名前は聞いたことあったけど…わたしも最近はじめてさわりました。 • In-memoryもしくはローカルファイルで動くOLAP型(列志向)のDB • 分析特化型のSQLiteだと思ったらだいたいあってる。 • 2024-6-3に1.0.0がリリースされました!やったね。 •

    どんな環境でも動きます。Windows, Linux, ブラウザ、Python、R、Java… • OSS(MITライセンス)でだれでも使える • インストールもめっちゃ簡単です(なんならブラウザで動くので…) • かなりはやいです。 • PythonつかってるのでPython環境で話していきます。 • Pandasとのシームレスな連携がとても便利。 Rならdplyrにも連携できる
  3. 10GBくらいあるCSVをソートしてみよう import duckdb duckdb.read_csv("./data/*.csv") duckdb.sql(""" select * from './data/*.csv' order

    by column7 """) データ https://dil.atr.jp/crest2010_HRI/ATC_dataset/ atc-tracking-part1.7z 解凍後10個のcsv 19GB dataフォルダに解凍して配置。 ←ソートする列名 (ヘッダーなしcsvで列名つけてないので)
  4. まとめてやるのに時間がかかるから保存したい • WandBとかつかえし事案 • DuckDBの紹介なのでDuckDBで雑にやります。 # DuckDBに接続。ディスクに永続化 con = duckdb.connect('vrchat_lt.duckdb’)

    # df2をDuckDBに保存 con.execute(""" CREATE TABLE vrc_tmp AS SELECT * FROM df2 """) ↑この単一ファイルで ディスクに保存されます。 ←conって名前にしたので接続して るインスタンスはconで呼び出す
  5. データをいれる from tqdm import tqdm # 関数を適用して結果を更新 for i, row

    in tqdm(df_db.iterrows(), total=df_db.shape[0]): # ここで関数を適用 country = llm_judge_country(row['text']) # 結果を更新 result = country[:8] con.execute(f"UPDATE vrc_tmp SET 国名 = '{result}' WHERE index = {row['index']}") ←めんどいからbingちゃんに書 いてもらったけどなんか変 ←苦肉のエラーハンドリング LLM側が律速なのでdfの中身を1個ずつ処理してupdateするのも そんなアンチパターンな処理にならない(もっといいやり方はある df_dbを国名が空なvrc_tmpで読み込みして llm計算と更新処理をまわす
  6. プロンプト Choose the language used by the creator from the

    list. \nList: [English,Japanese,Chinese,Korean] \nDo not add any extra information and output the answer directly from the list. \nMake a comprehensive judgment based on language proficiency and author name. For example, if there is a certain amount of "hiragana", choose "Japanese", if there are many traditional characters, choose "Chinese", if there is Hangul, choose "Korean", etc. If it is difficult to judge, if English is written, it is OK to choose English \nplease choose from the list **without explanation** なにもかも全然安定しねぇ
  7. Phi-3 miniの判定が微妙 Text 国名 判定 name:"VRChat Family Home",author_name:"ChocIce 20",description:"A custom

    made world for the VRChat family․ ( Update 14)ADDED Avatars-Audio-Decor-Beds-Buttons || some stuff is broken" English 〇 name:"はるとまんホーム3",author_name:"gatapisya@はるとまん",description:"はるとまんホーム3" Japanese 〇 name:"MarioBlade64's Avatar and Relax World(won't get any update)",author_name:"MarioBlade64",description:"My ukon avatars can now hold items‚ try them out if you want to․ I added the beach‚ more to come․․" Japanese × name:"MarioBlade64's New Avatar World",author_name:"MarioBlade64",description:"Okay‚ so my old world will not be updated‚ because of an error‚ so I made this new one‚ you can still visit the old one" English 〇 name:"Elena's Elegance",author_name:"Megazard",description:"world is getting PERMANENTLY ARCHIVED soon‚ and will only be accessible through a direct link" English 〇 name:"Exterius home",author_name:"Exterius",description:"My home‚ more to come․WIP" English 〇 name:"Ruby's Avatar World",author_name:"PinkRuby",description:"After nearly 2 years‚ I decided to make a new avatar world․ Most bugs fixed․ I said I'd make a new one at some point․ New avatars coming soonǃ" English 〇 name:"Risk of rain Level",author_name:"umessyhearts",description:"A Risk of rain Level․" English 〇 name:"Shaderzone",author_name:"KodaKoda",description:"shaderzone test" Japanese △ name:"Tui 4․0․1-C",author_name:"A-Tui",description:"Tui 4․0․1-C - 关闭3号房․22․08․10" Korean × name:"Mafia Hangout",author_name:"Ball0",description:"Welcome to the mafia hangoutǃ This world has different rooms with pictures of the cursed mafia․ Tons of good memoriesǃ There is also a mafia kon avatar in the main room․ Now theres a stage in the main roomǃ" English 〇 name:"The Sewer",author_name:"Suck my Kappa",description:"This Club is WIP" Japanese × name:"Nana's Home",author_name:"-․ナナ․-",description:"Chill world‚Pen‚VideoPlayer‚Bed Room" Japanese 〇 name:"Night Dreamer Chillout",author_name:"Majestur",description:"A place to just chill and relax in․ Who knows what you may find within․ My first real attempt at a world․" English 〇
  8. 微妙だけど数える。 国名 count("国名") 0 English 62629 1 Japanese 33509 2

    Korean 7197 3 Chinese 5040 4 Russian 413 5 Spanish 400 6 French 236 7 Portugue 158 8 German 157 9 Thai 121 10 Greek 106 ほんとかな?(きわめてあやしい 英語、日本語、韓国語、中国語にしろっていってるのに…
  9. 微妙だけど数える 国名\作成年 2016 2017 2018 2019 2020 2021 2022 2023

    2024 English 12 395 3019 8241 52365 140838 136207 37331 372 Japanese 0 52 833 5688 26486 81946 81293 24096 230 Korean 0 0 125 1000 5672 14698 19428 4669 62 Chinese 0 0 83 219 1664 6409 13612 4093 36 Spanish 0 0 95 1 495 1205 1518 356 2 Russian 0 0 110 51 398 798 896 183 0 English 0 0 7 5 25 322 270 159 8 French 0 0 1 0 1367 868 655 127 0 Portugue 0 0 18 52 68 209 195 101 3 German 0 0 10 9 165 496 274 100 0 個人的にはgroup by まではSQLで書いて、pivot tableはpandasがやりやすい