タグ

schemaとpythonに関するsh19910711のブックマーク (45)

  • 構造化ログのユニットテストでassertLogsが効かない理由とStringIOを使った解決策 - Nealle Developer's Blog

    こんにちは。 Nintendo Switch 2 の抽選予選に無事コマを進め続けている、SREチームの高 (@nogtk) です。早く当選してこの大会からドロップアウトしたいものです。 今回は、構造化ログのユニットテストを書いたときのプチハマりと、それを解決した方法についてご紹介したいと思います。 なぜログのテストコードを書いたか 前回のブログで、Django アプリケーションが出力するログを構造化したお話をご紹介致しました。 nealle-dev.hatenablog.com ログを構造化するにあたって、出力されるログのエントリを定義しそれに沿ってログが出力されるような実装を追加しています。その中には Datadog APM への連携するためのトレース・スパン情報の付加したり、structlog の contextvars というモジュールを使ってコンテキストをログエントリに含めたりなど

    構造化ログのユニットテストでassertLogsが効かない理由とStringIOを使った解決策 - Nealle Developer's Blog
    sh19910711
    sh19910711 2025/06/20
    "ログ出力がデグレを起こしていることを人間が発見するのは非常に難しい / 人間の目はJSONを良い感じにパースしてくれませんし、各エントリの差分やメッセージフォーマットの変化に気づくのは容易ではありません"
  • Apache Arrow の紹介 - GO Tech Blog

    タクシーアプリ『GO』のデータエンジニアをしている牧瀬です。 Apache Arrow という OSS を知り、弊社でも活用できる機会があるのではないかと興味を持ちました。記事では Apache Arrow の概要を紹介します。 概要 Apache Arrow とは、インメモリのカラムナーフォーマット仕様および、それを操作するための各種プログラミング言語用のライブラリ実装です。 Apache Arrow が作られた目的は、大きなデータセットを高速に処理したり、データセットを異なるシステムやプログラミング言語の間で効率的にやりとりするためです。 なぜインメモリ? 一般的なカラムナーフォーマットの多くはストレージに保存する際のフォーマットですが、Apache Arrow はインメモリの仕様も定められています。 これは 1台のマシン上で異なる言語やプロセスの間でデータをやり取りする際、シリアラ

    Apache Arrow の紹介 - GO Tech Blog
    sh19910711
    sh19910711 2025/06/11
    2023 / "PyArrow: pandas で言えば Series にあたるものが Array/ChunkedArray、DataFrame にあたるものが RecordBatch/Table + immutable なデータ型"
  • hypothesis+panderaで始める、データフレームに対するProperty Based Testing - Sansan Tech Blog

    技術部 R&D研究員の前嶋です。梅雨の季節ですが、少しでも快適に過ごせるようにOnのCloud 5 wpを購入しました。水に強くて軽快な履き心地で最高ですね。(追記:この記事の公開作業をしている間に梅雨が終わってしまいました) 今回は、データフレームのテストについての記事です。 データフレームのテストをどう書くか データが中心となるサービスのネックになるのが テストをどう書くか です。というのも、データフレームは行×列の構造になっているため、入力あるいは出力値がデータフレームになるような関数が多いプログラムでは、テストケースを書くのが非常に面倒です。仕様の変更があった場合、それぞれのテスト用の疑似データに修正を加えることを考えると、より簡潔にデータフレームのバリデーションをする方法が欲しいところです。実は、データフレームのテストはProperty Based Testingという考え方と

    hypothesis+panderaで始める、データフレームに対するProperty Based Testing - Sansan Tech Blog
    sh19910711
    sh19910711 2025/06/11
    2022 / "データフレームのテスト / Property Based Testing(PBT) は、Haskellの QuickCheck で導入された概念だと言われ / 契約による設計(Design by Contract, DbC)を実現するテスト手法として、名著『達人プログラマー』でも推奨"
  • ベクトルタイル (Mapbox Vector Tile) をPythonで自力で生成してみる - Qiita

    ベクトル地図タイルのデファクトスタンダード形式である Mapbox Vector Tile (MVT) のデータを試しに自力で生成してみたので、その要点を解説してみます。「自力で生成」というのは、MVTの実体である Protocol Buffers のデータを組み立てるところからフルスクラッチでやってみようという意味です。 最終的に上図のようなポリゴンを含むベクトルタイルを生成して配信できました。サンプルコードではPythonを使って以下のようなことを行っています。 (GeoJSONのデータをもとに)大量のポリゴンを含むMVTを自分で組み立てて生成する。各地物には属性情報も付与する。 現在時刻などの赤い文字列の部分もLineStringsで動的に描く。 PythonFastAPIで配信する。 サンプルコードのリポジトリは以下です: まず前提として: 多くのユースケースでは tippeca

    sh19910711
    sh19910711 2025/05/31
    2023 / "一部のデータベースエンジンにはMVTを動的に生成する機能が実装 / MVTを動的に生成したい場合はこれらに任せるのが手軽 / 簡単な生成処理を実装をしてみて周辺の仕組みを理解するのも楽しい"
  • [LangChain] with_structured_output を使用して、Pydanticのクラスをレスポンスとして受け取る

    はじめに こんにちは。PharmaXでエンジニアをしている諸岡(@hakoten)です。 LangChainには、各LLMモデルのレスポンスをあらかじめ決まった構造のクラスで受け取ることができるwith_structured_output というメソッドがあります。 この記事では、with_structured_outputを使用してPydanticのクラスをレスポンスとして受け取る方法についてをご紹介します。変換の仕組みについても簡単に解説していますので、よければぜひ一読ください。 環境 この記事執筆時点では、以下のバージョンで実施しています。 LangChain周りは非常に開発速度が早いため、現在の最新バージョンを合わせてご確認ください langchain: 0.3.1 langchain-openai: 0.2.1 Python: 3.12.4 with_structured_out

    [LangChain] with_structured_output を使用して、Pydanticのクラスをレスポンスとして受け取る
    sh19910711
    sh19910711 2024/10/13
    "with_structured_output: モデルのレスポンスをあらかじめ決まった構造のクラスで受け取る / このメソッドを使うと、モデルからの応答がPydanticクラスやTypedDict、JSONスキーマなどの特定の形式に沿って返される"
  • FastAPIを支えるデータ検証ライブラリ「Pydantic」のV2がベータリリースされたので使ってみた

    はじめに こんにちは。Acompanyの田中(@tkrk_p)です。記事はAcompany5周年アドベントカレンダー19日目の記事となります。 1日前の記事はこちら↓ 記事では、先日ベータリリースされたデータ検証ライブラリ「Pydantic」のV2を紹介します。 Pydanticとは Samuel Colvin氏によって2017年に開発されたPythonのデータパース・変換ライブラリです。Pythonの型アノテーションを使用してデータモデルを定義し、入力データの検証や型変換、データのシリアライズ(シリアル化)およびデシリアライズ(逆シリアル化)などの便利な機能を提供しています。 2023年6月現在で月間 7,000 万件以上ダウンロードされていることから、ここ数年で非常に注目されていることがわかります。(ちなみにDjangoのダウンロード数は月間約950万件) PyPIでのDjango

    FastAPIを支えるデータ検証ライブラリ「Pydantic」のV2がベータリリースされたので使ってみた
    sh19910711
    sh19910711 2024/10/12
    "Pydantic: 2023年6月現在で月間 7,000 万件以上ダウンロード + Djangoのダウンロード数は月間約950万件 / FastAPI: スキーマ定義を行うことによって、Swagger UIのドキュメント自動生成" '23
  • PEP557から読み解くPythonのdataclassの嬉しさと他手段との比較

    1. はじめに 🚀 1-1. dataclassってなに みなさんPythonのdataclass使ってますか? dataclassは真新しい機能ではなくPython3.7からある[1]標準ライブラリです。 dataclassの解説記事ではよく『dataclassとはデータを保持のためのclassである』という説明がされていることが多いです。これはPEP557にある store values which are accessible by attribute lookup アトリビュート検索でアクセス可能な値の保持 Data Classes can be thought of as “mutable namedtuples with defaults”. Because Data Classes use normal class definition syntax, you are fr

    PEP557から読み解くPythonのdataclassの嬉しさと他手段との比較
    sh19910711
    sh19910711 2024/09/15
    "ダンダー: double underscoreの略 + Objectクラス内の関数で2つアンダーバー(_)がついた関数 / dataclassは宣言の際のパラメータをデフォルトのままにしていても下記のように一部のダンダーが設定" '22
  • ChatGPTとPydanticでかんたん契約書解析 - MNTSQ Techブログ

    こんにちは、MNTSQエンジニアをやっている平田です。 MNTSQでは自然言語処理を使って契約書を解析したり検索したりする機能を開発しています。 契約書解析には、次のようなタスクがあります。 秘密保持契約等の契約類型に分類 契約締結日や契約当事者等の基情報を抽出 条項(第1条, 第2条, ...)単位で分解 稿では、これらの契約書解析タスクをGPT-4oに解かせてどんな結果になるか見てみます。 ざっくりやり方 GPT-4oのAPIを呼び出すところ ここではAzure OpenAIのGPT-4oを使います。Microsoftのサンプルコードほぼそのままですが、一応貼り付けておきます。 from openai import AzureOpenAI client = AzureOpenAI( api_version="2023-05-15", azure_endpoint=os.geten

    ChatGPTとPydanticでかんたん契約書解析 - MNTSQ Techブログ
    sh19910711
    sh19910711 2024/06/21
    "契約書解析: 秘密保持契約等の契約類型に分類 + 約締結日や契約当事者等の基本情報を抽出 + 条項(第1条, 第2条, ...)単位で分解 / GPT-4oの出力からJSON文字列を抽出し、Pydanticのデータモデルでバリデーション"
  • Great Expectations(GE) によるノートブック型環境(Databricks)でのデータ品質保証方法のまとめ - Qiita

    概要 記事にて、Great Expectations(GE) によるノートブック型環境(Databricks)でのデータ品質保証方法を共有する。GE がツールの概要を提示した上で、コードとその実行結果を提示する。 実行コードとその出力結果を Github に配置してあり、次のリンクで確認が可能。 Great Expectations とは Great Expectations (GE) とは、データに対する検証、ドキュメント化、および、プロファイリングにより、データ品質の保証と改善を支援する OSS の Python ライブラリである。データに対する品質保証条件(GE では Expectations と呼ぶ)に基づき、データソースへの検証を行い、検証結果をドキュメント化することができる。 引用元:Welcome | Great Expectations Expectation を、次のよ

    Great Expectations(GE) によるノートブック型環境(Databricks)でのデータ品質保証方法のまとめ - Qiita
    sh19910711
    sh19910711 2024/06/20
    "Great Expectations: 生成されるドキュメントは、下記の項目が表示される HTML ファイル + 静的サイトとしてホストすることができる / spark データフレームでも実行できる + パフォーマンスに課題" 2022
  • OpenAPI Generatorで自分好みのpythonクライアントライブラリを生成する方法 - Qiita

    自己紹介 yuji38kwmt 名古屋のAIの会社でAIやってないエンジニア WebAPIをどう実行していますか? curlコマンドですか? curlコマンドはつらくないですか? pythonで実行したくないですか? WebAPIPythonでどう実行していますか? APIドキュメントを見ながら、自分で実装していますか? 似たようなコードがたくさんあって、飽きませんか?面倒でないですか? あなたが実行したいWebAPIは何で定義されていますか? OpenAPI Specification(OAS)ですか? OASで定義されているなら、あなたは幸せです。なぜならOASからソースを自動生成できるツールがあるからです。 OpenAPI Specification(OAS)とは? REST APIを記述するための言語です。 以下、「OAS」と略します。 The OpenAPI Specifica

    OpenAPI Generatorで自分好みのpythonクライアントライブラリを生成する方法 - Qiita
    sh19910711
    sh19910711 2024/06/18
    "openapi-generator-cli: pythonファイルだけでなく、ドキュメントやテストコード、設定ファイルなど、ライブラリに必要なファイル一式が生成 / mustache記法で記載されたテンプレートファイルを修正して、カスタマイズでき" 2019
  • Responderでスキーマ駆動開発: Swagger UIの表示までやってみる - Qiita

    スキーマ駆動開発とは 簡単に言うと、先にAPIのスキーマ (request, responseの型やフィールド名の定義)を決め、それに伴ったドキュメントとモックの生成をシステマティックに行った上で内部の実装を行う開発手法です。(参考: チームのWeb API開発を最適化するSchema Driven Developmentの解説&実装例) pythonのwebフレームワークであるresponderでスキーマ駆動開発をやってみたいと思います。 以下の様なSwaggerが見れるようになるのがゴールです。 responder PythonのモダンなWeb フレームワークです。 ボリューム感的にはflaskやbottleのようなマイクロフレームワークです。 以下の様に書いて、$ python xxx.py のように実行するだけで、JSONを返すAPI serverが起動します。 また、非同期web

    Responderでスキーマ駆動開発: Swagger UIの表示までやってみる - Qiita
    sh19910711
    sh19910711 2024/06/18
    "ドキュメントとモックの生成をシステマティックに行った上で内部の実装を行う / responder: ボリューム感的にはflaskやbottleのようなマイクロフレームワーク + GraphQL、OpenAPI schemaの自動生成などモダンな機能を備え" 2019
  • PythonのWebフレームワーク「FastAPI」とTypeScript・OpenAPIで、型つきでWebアプリを作ってみる - 機械学習WebAppのための技術スタック - Qiita

    PythonのWebフレームワーク「FastAPI」とTypeScriptOpenAPIで、型つきでWebアプリを作ってみる - 機械学習WebAppのための技術スタックPythonTypeScriptMachineLearningOpenAPIFastAPI Intro Pythonで実装した機械学習や画像処理をバックエンドにしたWebアプリをサクッと作るための技術スタックとして、FastAPI+TypeScript+OpenAPIを紹介します。 モチベーション PythonでサクッとWebサーバ(APIサーバ)を立てたい 今まではFlaskを使ってたような用途 「Pythonで」 機械学習・画像処理のサービスなので 「サクッと」 バリデーションとか楽したい サーバ、クライアント共に型の保証が欲しい 機械学習や画像処理のアプリはパラメータが多くなりがち・一貫した慣習が無いのでミスしやす

    PythonのWebフレームワーク「FastAPI」とTypeScript・OpenAPIで、型つきでWebアプリを作ってみる - 機械学習WebAppのための技術スタック - Qiita
    sh19910711
    sh19910711 2024/06/18
    "Pydanticによるスキーマ定義 + FastAPIでのサーバサイドの定義から、OpenAPIを経由してフロントエンドライブラリを生成 / 生成先言語としてTypeScriptを使う。サーバサイドと一致した型定義を利用" 2020
  • Django + Strawberryで作るGraphQLサーバ - Qiita

    この記事はDjango Advent Calendar 2022 10日目の記事です。 はじめに 今年は仕事が変わったのもあって、Djangoに触る機会が減りました。全くDjangoを触らなくなったのではなく、細々と自分のサイトで使っているのですが、Django + StrawberryでGraphQLサーバを作ると楽だぞという話をします。 PythonGraphQL事情 PythonGraphQLと言えばGrapheneが有名です。Graphene-Djangoも触ってみて良い感触でしたが、開発が活発ではなくDjango 4.0の対応が遅れていたため(今は対応しています)、一時期はDead Project?というIssueが立つほどでした。 そこで代わりに見つけたのがStrawberryです。 Strawberryの特徴 Python 3.7から採用されたデータクラス(datacla

    Django + Strawberryで作るGraphQLサーバ - Qiita
    sh19910711
    sh19910711 2024/06/18
    "PythonのGraphQLと言えばGrapheneが有名 / Strawberry: Python 3.7から採用されたデータクラス(dataclasses)にインスパイア / GraphiQL UIを内蔵していて、簡単に動作確認ができます" 2022
  • Pythonで環境変数を読み込むときはpydanticを使うと便利 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Pythonで環境変数を読み込むときはpydanticを使うと便利 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydantic: デフォルト値をセットしたり、int型にキャストしたり、 .env から値を読み込むなどの処理を簡単に実装 / 環境変数を読み込むだけのライブラリでは無く、型アノテーションを利用してクラスを定義できる" 2020
  • 既存の解析システムに対して pytest-mock と pydantic を活用してクイックに総合テストを実装した話 - Qiita

    はじめに この記事は 2020 年の RevComm アドベントカレンダー 18 日目の記事です。 17 日目は @enotesupa さんの 「SOQLでSELECT * FROM SOME-TABLEっぽいことする」 でした。 @zomaphone と申します。普段は NLP 系を仕事を主にしておりますが、音声認識周辺の整備とかもしています。 今回は既存のシステムに対して pytest-mock と pydantic を活用してどのようにして短時間で総合テストのテストコード作成したかについて紹介します。 コードが修正しにくい、テストコード書く時間がないという人にとっては意味のある記事かもしれません。 やりたかったこと revcomm で開発している解析システムは音声データを入力し、他のシステムと通信をしながら処理をし、最後に解析結果を POST (送信) するというような構成となってお

    既存の解析システムに対して pytest-mock と pydantic を活用してクイックに総合テストを実装した話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pytest-mock で POST する関数をモックし、pydantic で 渡されたデータが正しい形になっているかを確認 / pytest-mock: unittest.mock の薄いラッパーで、既存ライブラリや関数等をモック" 2020
  • pydanticを用いて@dataclassの型を堅牢にする - Qiita

    from dataclasses import dataclass @dataclass class User: name: str age: int def main(): user_info = User(20, "Hoge") print(user_info) # User(name=20, age='Hoge') print(type(user_info.name)) # <class 'int'> print(type(user_info.age)) # <class 'str'> if __name__ == "__main__": main() なぜ強制力がないかというと、この型アノテーションは型のヒントでしかなく、言うのであればコメントと同様です2。 仕様だとしても、せっかく定義した型が違う型に書き換わるのは解せない… そういう方におすすめなのがpydanticです! 型ア

    pydanticを用いて@dataclassの型を堅牢にする - Qiita
    sh19910711
    sh19910711 2024/06/17
    "dataclassを用いると型アノテーションが強制化されますが、この型自体に強制力はありません / 違う型を入れた場合でも動作してしまいます / 型のヒントでしかなく、言うのであればコメントと同様" 2022
  • pydanticを用いて堅牢な型を作成する - Qiita

    概要 堅牢な型(Strict Type)が現時点で5つしかなく、結局__post_init__などでバリデーションを行う必要があるのは面倒と感じていましたが、なんとpydanticでは型を自分で作ることが出来ます! ただの型の作成であれば、下記のQiita記事やドキュメントを参照すれば作ることが出来ます。 今回はこれの堅牢な型バージョンです。 型の作成方法 めちゃくちゃ簡単です。 作成する型のクラスを定義する __get_validators__を定義して、次で作成するvalidate関数を呼び出す validateを定義する関数を作成し、エラーパターンを記述する 簡単な例を紹介すると、0以外の数値を受け取るNotZeroNumber型を定義してみます。 from pydantic.dataclasses import dataclass class NotZeroNumber(int):

    pydanticを用いて堅牢な型を作成する - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydantic: 型を自分で作ることが出来ます / int型を継承しているので、int型と同じ振る舞いが可能 / 堅牢な型: validate関数に、”その”型かどうかを確認する処理を入れる / 型違いはキャストされずにエラーで落とします" 2022
  • PydanticがRustで爆速になるという話 - Qiita

    はじめに 最近ポッドキャスト聴く時間が少し減ってしまったんだけど、久しぶりに Talk Python to Me を聴いたらPydanticの話題でした(エピソードのリンクはこちら)。作者のSamuel Colvinさんが秋に予定しているメジャーバージョンアップの話をし始めたのですが、冒頭で「コアをRustで実装して17倍速くなる」と言っていて、リンク張られていたドキュメントを読みました。この記事はそこで語られていた内容を中心にPydantic v2についてご紹介します。 Pydanticとは v2の話の前に、そもそもPydanticとは何かについて簡単に触れておきます。PydanticはPythonの型ヒント情報を使ってデータバリデーション(データの妥当性検証)を行うライブラリです。予めデータの構造を定義しておいて、入力されたデータがその構造に合っているかを調べてくれます。 例えば、id

    PydanticがRustで爆速になるという話 - Qiita
    sh19910711
    sh19910711 2024/06/17
    "久しぶりに Talk Python to Me を聴いたらPydanticの話題 / 作者のSamuel Colvinさんが秋に予定しているメジャーバージョンアップの話をし始めたのですが、冒頭で「コアをRustで実装して17倍速くなる」と言っていて" 2022
  • pydanticによる型検証 [BaseModel] - Qiita

    はじめに Pythonは動的な型付けであるため,変数の型が保証されていない。型ヒントによる宣言やmypyによるチェックは可能だが実行時の制限はない。 そこで,pydanticによる型に堅牢な書き方を記録する。 TL;DR pydanticを使用すると簡単に型検証が行える pydantic.BaseModelの継承と型ヒント 型の宣言はtypingなどによる型ヒントで行う pydanticとは 下記は公式ドキュメントによる説明です。 Data validation and settings management using Python type annotations. pydantic enforces type hints at runtime, and provides user friendly errors when data is invalid. Define how dat

    pydanticによる型検証 [BaseModel] - Qiita
    sh19910711
    sh19910711 2024/06/17
    "型ヒントによる宣言やmypyによるチェックは可能だが実行時の制限はない / pydanticを使用すると簡単に型検証が行える / 宣言と異なる型の値でもキャストが可能な場合はキャストして代入される" 2022
  • pydanticの動作変更 [BaseConfig] - Qiita

    はじめに pythonは動的な型推論を行うがpydanticを使用することで型検証が可能である。しかし,作成時は型検証を行うが再代入時には型検証が行われない。この挙動を変更するにはBaseConfigを使用する。 TL;DR pydantic.BaseConfigによる動作の詳細設定が可能 validate_assignment: 再代入時の型検証 allow_mutation, frozen: イミュータブル化 extra: 宣言以外のデータが入力された場合の設定 上記以外の設定項目は公式ドキュメントを参照 クラスの設定 pydantic.BaseConfig BaseConfigには下記2つの記述方法がある。ここでは1つ目の記述で統一する。 # パターン1 class User_1(pydantic.BaseModel): id: int name: str class Config:

    pydanticの動作変更 [BaseConfig] - Qiita
    sh19910711
    sh19910711 2024/06/17
    "pydanticを使用することで型検証が可能である。しかし,作成時は型検証を行うが再代入時には型検証が行われない / 再代入時にも型検証を実施したい場合,validate_assignment = Trueを設定" 2022