kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Python

testcontainers-python: pytest 実行時に使い捨て可能な LocalStack を起動する

Testcontainers を使うと,テストコードを実行するときに必要になるデータベース・キャッシュ・キューなどの依存関係をコード上で管理できて,実行後にはコンテナを自動的に消してくれるという使い捨て可能な仕組みを簡単に作れる❗️Testcontainers のサイト…

AWS Lambda 関数 (Python) の import 時間を計測しよう / -X importtime オプション or 環境変数 PYTHONPROFILEIMPORTTIME

AWS Lambda の初期化フェーズ (INIT) は「10秒」に制限されている.例えば,AWS Lambda 関数の「ベストプラクティス」を意識してハンドラ外に実装した処理が長くなったり,AWS Lambda 関数 (Python) で機械学習系のライブラリなどを多く import しようとして…

Playwright for Python: PDF 形式で印刷する

Playwright for Python でウェブサイトのスクリーンショット(画像形式)を取得するのではなく「PDF 形式で」取得したいこともあると思う(実際に最近あった〜).Playwright for Python では page.pdf() を使えば簡単に実装できる❗️ そして page.pdf() はデ…

Playwright for Python: screenshot() に指定できる便利なオプション3選

Playwright for Python の page.screenshot() でスクリーンショットを取得するときに指定できる「便利なオプション3選」を紹介する❗️ 1. full_page ウェブサイトのスクリーンショットを「全て」取得する場合 full_page オプションが使えるデフォルトは False…

GitHub Actions と Playwright を組み合わせて Build Your Own Radar を継続的に構築しよう

「自分だけの Technology Radar」を構築できる「Build Your Own Radar」を以下の記事で紹介した kakakakakku.hatenablog.com Build Your Own Radar サービスに入力する Technology Radar ファイルとしては Google Sheets / CSV / JSON を使うことができて,…

Playwright for Python: a タグの href 属性を取得する

Playwright for Python でリンクタグ a タグの href 属性から URL を取得するときは,Locator オブジェクトで get_attribute('href') のように実装する. page.locator('h1#title > a').get_attribute('href') page.locator('h1.entry-title > a').nth(0).ge…

Playwright for Python: GitHub Actions のエラー時にトレース情報を取得する

前回の記事では Playwright for Python の Trace Viewer を使って,ブラウザ操作中に「何が起きていたのか❓」を詳細に確認できることを紹介した(以下のリンク参照).さらに pytest 連携を使って,自動テスト実行中にトレース情報を取得できることも紹介し…

Playwright for Python: ブラウザ操作のデバッグが捗る Trace Viewer

Playwright for Python の Trace Viewer を使うと,ブラウザ操作中に「何が起きていたのか❓」を詳細に探索できる.スクリーンショットや録画だけでは判断できないようなエラーをデバッグするときに使える.また pytest と連携させると自動テスト実行中にトレ…

Textual がスゴイ!Python と CSS でストップウォッチアプリを作ってみた

Textual は Python を使って TUI (Text User Interfaces) アプリを構築できるフレームワークで,ドキュメントには "電卓" や "Color Picker" を実装したサンプルが載っている.アプリのデザインには CSS を使う.Python x CSS という技術スタックで,入門し…

Playwright for Python: iPhone / iPad / Pixel のブラウザ操作を自動化する

Playwright for Python を使うと iPhone / iPad / Pixel などのデバイスを使ったブラウザ操作を自動化できる. ドキュメントに書いてある通り,playwright.devices の Dict(辞書)にデバイス名を設定して,browser.new_context() でコンテキストを作る.サ…

暫定対応 : Python 3.10 で python-pptx を使おうとすると collections で AttributeError が出てしまう

「python-pptx」は Python で Microsoft PowerPoint ファイルを操作できるライブラリでよく使っている❗️ github.com 最近 Python 3.10(今回の環境だと 3.10.8)で python-pptx を使おうと思ったら,以下のように AttributeError: module 'collections' has …

Playwright for Python: ブラウザ操作を録画する

Playwright for Python を使うとブラウザ操作を簡単に録画できる. ドキュメントに書いてある通り,browser.new_context() でコンテキストを作るときに以下の video 関連のパラメータを設定する.注意点は録画データを最後まで保存するために context.close(…

UUID v6, v7, v8 : タイムスタンプでソートできる新しい UUID のドラフト仕様

ID を採番するときによく使われる UUID Version 4 の課題として「順序性がなくソートしにくい」という側面があり,ULID (Universally Unique Lexicographically Sortable Identifier) を使えばソートできるようになるという記事を前に書いた. kakakakakku.h…

Playwright for Python: ブラウザ操作を自動化しよう!

ブラウザ操作を自動化して,E2E (End to End) テストやスクレイピングをするときに使えるライブラリ Playwright を試す.Playwright の特徴としてまず「クロスブラウザ」があり,Chromium / Firefox / WebKit をサポートしている.また「複数言語」という特…

ソートできるユニークな ID を ULID で採番する

ユニークな ID を採番するときに UUID (Universally Unique Identifier) v4 を使う場面は多いと思う.しかし要件によっては UUID だと「順序性がなくソートしにくい」という側面もあったりする.今回はユニーク性を維持しつつミリ秒精度でソートできる ULID …

Python コードでアーキテクチャ図を生成できる Diagrams がめっちゃ便利!

「Diagrams」を使うと Python コードでアーキテクチャ図を生成できる.サポートされているアイコンセットがとても多く AWS や Google Cloud や Microsoft Azure もあれば,Kubernetes やプログラミング言語なども使える.試してみたけどめちゃくちゃ便利!ま…

Pandas で指数表記を無効化する

Jupyter Notebook で Pandas のコードを実装しているときに「指数表記を無効化」する場合は pd.options の display.float_format を設定する.以下にサンプルとして「桁数 2」と「桁数 6」の例を載せておく. # 小数点以下 桁数 2 pd.options.display.float_…

Pandas で NDJSON (.jsonl) を読み込む

Pandas で NDJSON (Newline Delimited JSON) を読み込む場合 read_json() 関数に lines=True パラメータを設定すれば OK! pandas.pydata.org NDJSON サンプル dataset.jsonl { "id": 1, "name": "Alice" } { "id": 2, "name": "Bob" } { "id": 3, "name": "…

無料で受験できる Python 新試験「PythonZen & PEP 8 検定試験」に合格した

2022年3月1日に β リリースになった「一般社団法人 Python エンジニア育成推進協会」の新試験「PythonZen & PEP 8 検定試験」に合格した現在まだ β だけど合格すると「本認定」になる.PythonZen (PEP 20 - The Zen of Python) と PEP 8 から出題されるため…

Scratchpad は便利!Jupyter Notebook で検証用のセルをシュッと追加する

Jupyter Notebook でコードを書いているときに「検証のために一時的にセルを追加してコードを書いて終わったらセルを消す」という操作を頻繁にしている(表現しにくいけど...).些細な操作ではあるけど地味に面倒だった. そこで「Scratchpad」を使ったら便…

Feature Engineering : Kaggle Courses で「特徴量エンジニアリング」を学ぶ

Kaggle が公開している「Kaggle Courses」で「Feature Engineering」コースを受講した.機械学習モデルを構築するときに重要になる「特徴量エンジニアリング」を多岐にわたる観点から学べる.「特徴量エンジニアリング」の目標は「データセットを目の前の問…

scikit-learn の Pipeline を使って前処理やアルゴリズムをまとめて宣言する

scikit-learn の Pipeline を使うと,データセットの前処理や機械学習アルゴリズムなどを「1つのオブジェクトに」まとめることができる. scikit-learn.org 前回の記事で紹介した「Kaggle Courses」の「Intermediate Machine Learning」コースでも使われてい…

Intermediate Machine Learning : Kaggle Courses で学びながら「住宅価格予測」コンペに参加する

Kaggle が公開している「Kaggle Courses」で「Intermediate Machine Learning」コースを受講した.Kaggle のコンペティション「Housing Prices Competition for Kaggle Learn Users(住宅価格予測)」をテーマに試行錯誤をして,実際にモデルを登録すること…

imbalanced-learn の SMOTE モジュールを使って簡単にオーバーサンプリングを実現する

分類などの機械学習モデルを構築するときにデータセットに偏り(不均衡データ)があると適切に学習できない可能性がある.データセットを強制的に増やす操作を「オーバーサンプリング」と言って,SMOTE (Synthetic Minority Over-sampling Technique) や ADA…

iris データセットを libsvm フォーマットにする : scikit-learn の dump_svmlight_file()

scikit-learn の datasets モジュールの中に libsvm フォーマットのデータセットを扱う関数がある.libsvm フォーマットは以下のフォーマットでデータセットを表現し,1番左にラベル(教師データ)を持つ.例えば Amazon SageMaker の組み込みアルゴリズム X…

Intro to Machine Learning : Kaggle Courses で「住宅価格予測」に入門した

Kaggle が公開している「Kaggle Courses」で機械学習に入門できる「Intro to Machine Learning」コースを受講した.Intro と書いてある通り,入門レベルではあるけど,scikit-learn を使って「決定木(回帰)」や「ランダムフォレスト」で「住宅価格予測」を…

NumPy / Pandas / Matplotlib / scikit-learn などの理解度確認ができる「Python 3 エンジニア認定データ分析試験」に合格した

先週末に「Python 3 エンジニア認定データ分析試験」を受験して合格したとても良い試験で,特に試験勉強をする過程で知識の幅が広がった.試験の認知度向上のためにも紹介したいと思う.当然ながら試験問題に関しては何も書かず,基本的に公開情報をベースに…

Numpy の dot() 関数は引数によって「ドット積(内積)」や「行列積」の計算になる

Numpy で dot() 関数を使うと配列同士の「ドット積(内積)」を計算できる.詳しくはドキュメントに載っているけど,dot() 関数は引数 a と b に指定する値(1次元配列/2次元配列)によって挙動が異なる.個人的にわかりにくかったため,具体的に実装しなが…

Pandas で時系列データをグループ化して集計できる「Grouper」

Pandas で groupby() 関数を使うと,データセットをグループ化して集計できる.さらに Grouper オブジェクトと組み合わせると,より高機能なグループ化を実現できる.今回は groupby() 関数と Grouper オブジェクトを組み合わせて「時系列データの集計」を試…

NumPy で「単位行列」を生成できる identity() 関数と eye() 関数の違い

NumPy で「単位行列」を生成するときに identity() 関数と eye() 関数がサポートされている.それぞれの違いを整理するためにドキュメントを読みながら試してみた.今回は Numpy 1.20.2 を前提にする.ドキュメントには (almost) equivalent function と書い…