タグ

pythonと*dataに関するsh19910711のブックマーク (344)

  • Pythonのデータ検証ライブラリCerberusを使ってみよう - Qiita

    はじめに この資料はデータ検証用ライブラリ Cerberus のドキュメントを抄訳したものです。 コミュニティーで Hands-On を行うときの資料として作成したため、 Cerberus の変更履歴などについては触れていません。 また、ソースコードの例示と実行には、IPython を使っています。 $ ipython Python 3.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:23:19) Type 'copyright', 'credits' or 'license' for more information IPython 7.28.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: IPython の %load コマンドでソースコー

    Pythonのデータ検証ライブラリCerberusを使ってみよう - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Cerberus: 検証したいデータをValidatorクラスのvalidate()メソッドに渡す / 他の検証ツールとは異なり、Cerberusは検証を行って問題があるときに停止したり、例外を発生させたりはしません" 2021
  • DataFlowのパイプラインでCerberusの機能を使って、csvをチェックしてみた。 - Qiita

    はじめに 現在業務でGCPDataFlowを使ってデータパイプラインを構築しており、CSVファイルがアプリケーションから来るのですが、たまにユーザが手で直したりなんてことがあるので、バリデーションして、不適当な行があれば省いて、後続のデータパイプラインに流したいと思っています。(上流の運用なおしたいのはやまやまですが。。。) そこでCerberusというバリデーションライブラリがあったので、いっちょやってみようと思った次第です。 Cerberusとは Pythonのデータ検証用のライブラリで 「Cerberusは、強力でありながらシンプルで軽量なデータ検証機能をすぐに提供し、簡単に拡張できるように設計されているため、カスタム検証が可能です。依存関係はなく、Python 2.7から3.8、PyPyおよびPyPy3まで徹底的にテストされています。」とのこと (引用元https://docs.

    DataFlowのパイプラインでCerberusの機能を使って、csvをチェックしてみた。 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Cerberus: Pythonのデータ検証用のライブラリ + シンプルで軽量なデータ検証機能をすぐに提供し、簡単に拡張できるように設計 / regixだったり桁数だったりかなり柔軟にチェックができる" 2022
  • motoのmock_dynamodbを使ってみました - Qiita

    やりたいこと LambdaでDynamoDBからデータを取得するプログラムの単体テストをやるため、DynamoDB関連の処理をモック化したい 前提 ・Pythonインストール済み ・pipenvインストール済み (今回は便宜上pipenv内でtoxでテストをやるのですが、ローカルで諸々ライブラリを入れてテストをやっても大丈夫です) ディレクトリ構成 root ┣━ functions ┗━ api ┗━ app.py ┣━ tests ┣━ conftest.py ┗━ test_app.py ┣━ Pipfile ┗━ tox.ini import boto3 import os # DynamoDB関連情報はLambdaの環境変数から取る DYNAMO_TABLE_NAME = os.environ.get('DYNAMO_TABLE_NAME') DYNAMO_REGION = os

    motoのmock_dynamodbを使ってみました - Qiita
    sh19910711
    sh19910711 2024/06/16
    "単体テストをやるため、DynamoDB関連の処理をモック化したい / 便宜上pipenv内でtoxでテストをやる / テストの前準備として、motoでmock化したDynamoDBテーブルを作りDummyのデータをputする関数を用意" 2023
  • Jinja2 テンプレートエンジンにおける nan/None の空白化や数値カンマ区切りといった編集方法 - Qiita

    はじめに 前回の続きで Flask の話です。 データ分析のみならず、データセットの加工に便利なため、バックで pandas を採用しているケースを想定しています。 Flask はテンプレートエンジンとして Jinja2 を採用しています。このとき pandas のデータフレームのほうで欠損値を持っていることって結構あるんじゃないかと思います。 データフレームの欠損値をそのまま Jinja2 でウェブページに出してしまうと恐ろしいことに None だとか nan と表示されてしまいます。事前に data.fillna(0) などで欠損値を埋めればいいのですが、今回はテンプレートエンジン側での回避方法を説明します。 テンプレートで欠損値を表示しない 数値型・欠損値 の場合 数値型のデータに欠損値がある場合、そのまま表示させると nan (Not A Number) が表示されます。そこで n

    Jinja2 テンプレートエンジンにおける nan/None の空白化や数値カンマ区切りといった編集方法 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "pandas のデータフレームのほうで欠損値を持っていることって結構ある / 事前に data.fillna(0) などで欠損値を埋めればいいのですが、今回はテンプレートエンジン側での回避" 2018
  • FastAPIを使ってCRUD APIを作成する - Qiita

    FastAPIは、pythonのWEB APIを作成するための非同期のframeworkで容易に高性能なAPIを作成できるということです。 Web Framework Benchmarks Tutorialなどを参考に試してみます。 0.前提条件 Windows10(WSL2)にUbuntu 20.04がインストールされているものとします。 Python, pipはインストール済であるものとします。 環境は以下のとおり category value

    FastAPIを使ってCRUD APIを作成する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "sqlalchemyは、modelの定義とクエリの生成で使い、databaseへのアクセスはDatabases / select, insert, update, deleteのいずれも、10行足らずで実装 / asyncpgには、テーブルやクエリをCSVに出力する機能" 2020
  • pyhive + jinjasqlで、prestoに対してprepared statementを実行 - Qiita

    はじめに Zenn とダブルポストです。 pythonを使って、prestoに対して、変数付きのSQL(prepared statement)を実行する必要があったので、そのときの経験の整理です。 prepared statementとは 平たくいうと、where句の条件の値のところを変数にしたSQLです。 変数の書き方にはいくつかあり、よくあるものは下記になります。

    pyhive + jinjasqlで、prestoに対してprepared statementを実行 - Qiita
    sh19910711
    sh19910711 2024/06/16
    "PEP 249: DBアクセスするpythonモジュールを作る際、同じような使い方できるように定義されたAPI / どのようなメソッドが定義されているかをおさえていれば、PEP 249を守って実装されたモジュールを同じように使えて便利" 2021
  • Airflowの日時関連概念おさらい - Qiita

    このところAirflowについて公式資料を読んできた中で、重要概念としてしばしば登場した各種の日付概念をおさらいしておきます。 データ区間(data interval) ワークフロー(DAG)の実行中に処理対象となるデータの区間(期間)。 バッチ処理の対象となるデータを特定するための情報。 開始日時(data_interval_start)と終了日時(data_interval_end)で示される。 例えば一日ごとに起動するワークフローならば、 「今回」2022-07-23 00:00:00に起動した回のデータ区間は 2022-07-22 00:00:00 から 2022-07-23 00:00:00、 次回のデータ区間は 2022-07-23 00:00:00 から 2022-07-24 00:00:00、 次次回のデータ区間は 2022-07-24 00:00:00 から 2022-0

    Airflowの日時関連概念おさらい - Qiita
    sh19910711
    sh19910711 2024/06/16
    "タスクやオペレーターのPythonコードではcontextオブジェクトを使ってこれらの日時情報を取得 / ビジネスロジックでは、例えばSQLのフィルタに開始日時と終了日時の条件を加えるなどして、処理対象のデータを制御" 2022
  • Airflow資料抄訳(18):クロス・コミュニケーション(XComs) - Qiita

    恥ずかしながら最近になって知ったワークフローエンジン Apache Airflow。日語の紹介記事もちらほら出てきていますが、公式ドキュメントをちょっとずつ抄訳しながら読んでいこうと思います。 18目の今回はクロス・コミュニケーション(XComs)。 バージョン2.3.3時点のものです。 クロス・コミュニケーション(XComs) XComs("cross-communications" の短縮形)はタスク同士が互いに情報のやり取りをするための仕組みです。デフォルトでは、タスク同士は完全に分離されており、まったく異なるサーバー上で実行される可能性もあります。 XComsでやり取りされる個々の情報はkey(実質的にそれ自身の名前です)と、データソースとなるtask_idおよびdag_idにより指し示されます。(シリアライズ可能なものなら)どんなものでもやり取りできますが、仕組みとしてはあくま

    Airflow資料抄訳(18):クロス・コミュニケーション(XComs) - Qiita
    sh19910711
    sh19910711 2024/06/16
    "XComs: タスク同士が互いに情報のやり取りをするための仕組み / 多くのオペレーターはdo_xcom_push引数にTrue(デフォルト)が指定された場合、実行結果を return_valueというキーで自動的にプッシュ" 2022
  • PythonでEmbulkを動的に実行する - Qiita

    はじめに ETLツールの一種であるEmbulkでは、データ転送の処理をyamlで設定して実行します。 動的に処理内容を変更したい場合、yamlの一部を環境変数に置き換えることができます。 しかし、処理内容を実行ごとに変化させたい場合、環境変数で設定をするのは面倒です。例えば、出力するファイル名に実行時間を加えたい場合などには、環境変数を逐一変更することになります。 この記事では、Python用のテンプレートエンジンであるjinja2を使って、簡単にyamlの設定ファイルを動的生成する方法について紹介します。より作り込んだシステムが必要な場合には、Digdagなどのワークフローエンジンを使うことが良いです。 そもそもEmbulkとは EmbulkとはOSSのバッチ型のデータ転送ツールです。ストリーミングデータを対象にしたfluentdと対になるようなツールです。コンパクトながら、たくさんの入

    PythonでEmbulkを動的に実行する - Qiita
    sh19910711
    sh19910711 2024/06/16
    "Embulk: 処理内容を実行ごとに変化させたい場合、環境変数で設定をするのは面倒 + ファイル名に実行時間を加えたい場合など + jinja2でyamlを動的に生成 / Embulkに限らず、設定ファイルの管理などにも使えそう" 2022
  • RとPythonで一般化加法モデル(Generalized Additive Model, GAM)を試してみた。 - Qiita

    入力データの1変数ごとに非線形関数を生成してその和を取っているので、加法モデルと呼ぶとのことです。 GAMの利点と欠点 利点は次の通り。 通常の線形回帰では捉えられない非線形の関係を自動的にモデル化できる。 モデルが加法的なので、1次元ごとに応答変数への効果を見ることができる。したがって推論向き。 欠点は次の通り。 加法に限定されているので、変数が多いと交互作用をとられることが難しい。ただし、線形モデルと同様に$ X_i * X_j $を追加することで、交互作用項をGAMに加えることは可能。 外挿の予測について、線形モデルより脆弱と思われる(データの無い領域については、どんな手法でもどうしようもない側面はありますが。) Rだとgamパッケージで、PythonだとpyGAMライブラリで使えるようなので、使ってみます。 RでGAMを使う gamパッケージで利用可能なので、使ってみます。 ここで

    RとPythonで一般化加法モデル(Generalized Additive Model, GAM)を試してみた。 - Qiita
    sh19910711
    sh19910711 2024/06/15
    "GAM: 線形モデルの説明性をなるべく維持しながら、非線形モデルの複雑なモデル作成を両立させる / 入力データの1変数ごとに非線形関数を生成してその和を取っているので、加法モデルと呼ぶ" 2020
  • pandas で 3 次元のデータ構造を扱う - Qiita

    3 次元のデータを扱う pandas におけるデータ構造として主要なものに 1 次元つまり線の Series と 2 次元つまり表形式の DataFrame があります。これは pandas における主要なオブジェクトであり Python for Data Analysis でも詳しく解説されています。 しかし実はもう一つ主要なオブジェクトがあります。それが Intro to Data Structures でも 3 つ目に登場する 3 次元の Panel です。 この 3 次元のデータ構造は、たとえば毎日の表データから任意の数値を取り出して時系列のログに関する統計分析をおこないたいといった用途において役立ちます。 Panel オブジェクトを作る Panel は辞書形式にした DataFrame または 3 次元の ndarray を引数にとることで生成することができます。具体的にやってみ

    pandas で 3 次元のデータ構造を扱う - Qiita
    sh19910711
    sh19910711 2024/06/15
    "線の Series と 2 次元つまり表形式の DataFrame / もう一つ主要なオブジェクトがあります。それが Intro to Data Structures でも 3 つ目に登場する 3 次元の Panel / 積み重ねたデータフレームに対し統計関数を利用する" 2014
  • 地図のWikipedia!OpenStreetMapのデータをPythonで簡単にダウンロードできるPyrosmとleafmapを使ってみよう! - Qiita

    地図のWikipedia!OpenStreetMapのデータをPythonで簡単にダウンロードできるPyrosmとleafmapを使ってみよう!PythonOpenStreetMapQiitaEngineerFesta2022leafmapPyrosm OpenStreetMapって? OpenStreetMap(以下、OSM)とは、誰でも自由に利用でき、なおかつ自分で編集することも可能な地図のWikipediaとも呼ばれるサービス・プロジェクトです。 OSMは例えば、自社サイトで社の位置を示す時の背景地図として利用したり、検索機能を使って近隣のコンビニの位置を取得したり、登録された道路のデータを使って(めちゃくちゃ頑張れば)カーナビが作れたりするかもしれない、そういったプロジェクトになります。 印刷してプロジェクトの報告書の挿絵に使ったりもできます。 (GoogleMapは基有料。)

    地図のWikipedia!OpenStreetMapのデータをPythonで簡単にダウンロードできるPyrosmとleafmapを使ってみよう! - Qiita
    sh19910711
    sh19910711 2024/06/14
    "Pyrosm: OSMのデータをPythonで直接ダウンロードし、GeoPandasのGeoDataFrameに変換 / OSM: 一番小さい区分けは関東や四国など / e-Statでは東京都の行政界をshapefileで公開 + 市区町村・町丁目などのほか面積などの情報も格納" 2022
  • データ可視化記述フォーマットVega(Vega-lite)とPythonバインディングのAltair - Qiita

    描画設定とデータが入ったJSONをぶっ込むと一意にプロットされるmatplotlibが欲しい — 塩こんぶ (@mojaie) 2016年10月23日 あった https://t.co/YoUCTeWzl5 https://t.co/n19jmsIywA — 塩こんぶ (@mojaie) 2017年1月22日 プロットのデータ自体はJSONなのでオフラインWebアプリとJupyter notebookでいろいろアレできそう https://t.co/cnyorF2TDA https://t.co/6rQsW4fqck — 塩こんぶ (@mojaie) 2017年1月22日 仕事で実験装置が吐く大量のデータから大量の棒グラフや折れ線グラフを書いてレポーティングするルーチンがよく発生するので、プロットを自動化する必要があった。あとJupyter notebookでグラフを作成したい。ついでにD

    データ可視化記述フォーマットVega(Vega-lite)とPythonバインディングのAltair - Qiita
    sh19910711
    sh19910711 2024/06/14
    "共通フォーマットで可視化 / 今後各言語に対応したVegaパーサの開発が進めば、D3やmatplotlibなど各プログラミング言語の可視化ライブラリに特有の文法や細かい表示の違いに悩まされること無く ~ " 2017
  • “自由度0のt分布”をNumpyroで実装してみる - ぱぐみの部屋

    記事は、『確率的プログラミング言語 Advent Calendar 2023』の15日目の記事になります。(アドベントカレンダーを主催していただいた松浦さんに感謝です!!) 今回は、論文『Log-Regularly Varying Scale Mixture of Normals for Robust Regression』で提案されている、外れ値を含んだデータの回帰分析に有用な“自由度0”のt分布と、Numpyroでの実装方法をご紹介します。 一般的な回帰分析 一般的なベイズ(線形)回帰分析では、以下の式を考えます。 $$ \begin{gather*} y_i = \alpha + \sum_{k=1}^Px_{i,k}\beta_k + \varepsilon_i \ (i=1,\dots,N) \\ \varepsilon_i \sim N(0, \sigma^2) \end{g

    “自由度0のt分布”をNumpyroで実装してみる - ぱぐみの部屋
    sh19910711
    sh19910711 2024/06/14
    "外れ値を含んだデータの回帰分析 + 誤差項𝜀𝑖の分布に正規分布を用いると、𝛼や𝛽𝑘の推定に大きく影響してしまう / 正規分布よりも裾が厚い分布を用いることで、より外れ値に頑健な推定が可能" 2023
  • GPy(Pythonのガウス過程用ライブラリ)の使い方 - StatModeling Memorandum

    概要 GPyを用いて、サンプルパスの生成、ガウス過程回帰、クラス分類、ポアソン回帰、Bayesian GPLVMを実行しました。自分用のメモです。 参考資料 [1] 公式ページ [2] 公式のチュートリアル [3] Gaussian Process Summer Schoolsの資料 理論的背景は上記の[3]を参考にしてください。日語でもガウス過程の解説がMLPシリーズから豪華著者陣で出るようです。超期待しています。 以下のサンプルプログラムは基的に[2]を元にしています。しかし、古くてそのままでは動かないプログラムや分かりにくいプログラムを少し加工修正しています。なお、環境は以下の通りです。 Windows 7 64bit Python 3.5.2 :: Anaconda 4.2.0 (64-bit) GPy 1.5.5 サンプルパスの生成 RBFカーネルで適当に定めたパラメータの値

    GPy(Pythonのガウス過程用ライブラリ)の使い方 - StatModeling Memorandum
    sh19910711
    sh19910711 2024/06/14
    "ガウス過程回帰: カーネルを定める→モデル作成→最適化 / GPy: 足したり掛けたりするだけで複雑なカーネルを作ることができる / ガウス過程はデータ点の数Nの逆行列を求める必要があり、その部分にN^3のオーダー" 2016
  • データに関する堅牢性と可読性を向上させるpydanticとpanderaの活用方法の提案

    発表:https://2022.pycon.jp/

    データに関する堅牢性と可読性を向上させるpydanticとpanderaの活用方法の提案
    sh19910711
    sh19910711 2024/06/13
    "DataFrame: 可読性が低い / pydantic: スキーマの定義に基づくデータのみが存在(堅牢性) + データの仕様の把握(可読性) / pydanicとpanderaを併用: スキーマに従うレコードの集合となるデータフレームのスキーマの実現" 2022
  • Pandas の代わりに Polars でデータ加工する豆知識

    注意 かゆいところに手が届くようにするためのメモ。 .select / .filter 関連 列の選択に関する事柄。 pl.col() Polars における「列」を表現するクラスを生成できる。pl.col() すると割と好き放題でき、列に対して四則演算したり文字列扱いして加工処理を回したりできる。 また、str な列については pl.col().str すると列を str な値として扱え、contains() とか ends_with() とかいかにも便利そうな関数を使えるようになる。 以下は id 列が偶数かつ email 列に .com を含む filter 処理を回す例である。 df = ( pl.read_csv(f"{dirname(__file__)}/vendor/MOCK_DATA.csv") .filter(pl.col("id") % 2 == 0) .filter(

    Pandas の代わりに Polars でデータ加工する豆知識
    sh19910711
    sh19910711 2024/06/13
    "LazyFrame: pl.scan_csv() は LazyFrame.collect() が実行されるまで実際の読み込みを待機 / 後続のクエリの指定を待ったうえで CSV を読み込めるため、読み込み処理のメモリ効率・処理効率の向上が見込める"
  • ElasticsearchによるLearning To Rank(LTR)入門 - Qiita

    はじめに Elasticsearchではv8.12からLearning To Rankという機能が実装されました。これまでにもコミュニティープラグインでは同様のことが実現できていましたが、今回Elasticが公式にサポートしましたので概要について紹介したいと思います。 検索の良し悪しは主に以下の観点で評価できます。 適合率 / Precision : どれだけノイズが少ないか 再現率 / Recall : どれだけもれなく検索できているか Learning To Rank(LTR)はこのうち適合率 / Precisionを、事前に用意したデータを学習することによって向上させるための仕組みです。 この機能はElasticsearchの外部で機械学習によって作成したモデルを使って実現します。流れとしてはData Frame Analyticsやベクトル検索で実現しているのと同様、Python

    ElasticsearchによるLearning To Rank(LTR)入門 - Qiita
    sh19910711
    sh19910711 2024/06/13
    "検索の良し悪し: どれだけノイズが少ないか + どれだけもれなく検索できているか / Learning To Rank(LTR)はこのうち適合率を、事前に用意したデータを学習することによって向上させる"
  • そう、matplotlibならね。 - ほげほげにゃ

    この記事はPython Advent Calendar 2015の記事として書かれたものです. はじめに ASCIIしか表示できない環境でもグラフを描画したい,そんな機会はいつどこでも誰にでも巡ってきます. 相手がテキストメール原理主義者であったり, 家にVT100しかなかったり… そんなときでも使い慣れた言語とライブラリでグラフが描ける.そう,matplotlibならね. デモ (見づらいのでこちらのリンクを推奨) 種明かし matplotlibはグラフを構成する要素の配置を担当するフロントエンドと描画を担当するバックエンドの両者が分離されており, 両者をバラバラに開発することが可能になっています. 例えばJupyter notebook上では%matplotlib inlineなどと打つとpylabのAPIを呼び出すだけでグラフが描画されますが, あれもが自前で持っているバックエンドの

    そう、matplotlibならね。 - ほげほげにゃ
    sh19910711
    sh19910711 2024/06/13
    "matplotlibのコードを読んでいるとフロントエンドとバックエンドの粗結合性に感動 / デモとしてmatplotlibで書いたグラフをasciiコードで出力するバックエンドを書いてみました" 2015
  • GeoPandasをやるならFlatGeobufより10倍早いGeoParquetを使おう! - Qiita

    GeoParquetとは GIS界隈では、AIやビッグデータ処理などデータサイエンスの分野で利用されるようになっている高速かつ効率の良いデータ処理手法などを全て取り込めてる訳ではなく、若干遅れをとっている状態と言われています。 これは地理空間情報というもの自体が複雑な仕様をもつためかとおもいますが、近年はGISでもGB/TB級のデータを取り扱う機会が増えており、Hadoopに代表されるような表形式データの分散処理基盤などを有効活用できない点において、「どげんかせんといかんなぁ」と考える方々も増えています。 そんなモチベーションからここ最近活発に開発されている形式のデータがGeoParquetです。 GeoParquet: https://github.com/opengeospatial/geoparquet Apache Parquetという、こちらも近年活発に開発されている形式のデータ

    GeoPandasをやるならFlatGeobufより10倍早いGeoParquetを使おう! - Qiita
    sh19910711
    sh19910711 2024/06/13
    "GIS: 効率の良いデータ処理手法などを全て取り込めてる訳ではなく若干遅れ + 地理空間情報というもの自体が複雑な仕様をもつ / GeoParquet: Geo Arrowを取り込み、列形式の地理空間情報をより上手に処理しようという試み" 2022