- 1. icdiffでutf-8とshift-jisの両方を一度に比較する方法(おそらく非推奨)
- 2. Python Lab #2 ― FastAPI with React
- 3. 素数の個数や和を高速に計算できるLucy DPをやさしく説明
- 4. PythonとGoogle Chart Toolsで作るシンプルな円グラフアプリ
- 5. pyenvで最新バージョンがインストールできない
- 6. 指定した地域のメッシュコードを取得する
- 7. 最新LLM Llama3.1 を AWQ で4bit量子化して GPUサーバーに乗せて チャットできるようにした
- 8. 【回帰】評価指標のあれこれ
- 9. mediapipeでFileNotFoundErrorとなる時の解決策
- 10. webdriver_manager を利用して webdriver を取得しようとすると OSError が発生する現象の回避策
- 11. 画像2値化の前処理に凹凸係数も試す
- 12. GitにコードがPushされたら自動的にPullする
- 13. FastAPIの使い方(Python初心者やプログラミング初心者におすすめ)
- 14. OpenSearch で 画像検索をする手順
- 15. 【ROS2 launch.py Tips】launch.pyファイル内で、実行時引数(DeclareLaunchArgument)の値を取得する方法
- 16. 【Python】ModuleNotFoundErrorの原因は環境変数PYTHONPATHにあった…
- 17. エントリーポイントでのクラスのインスタンス作成をテストする(pytest)
- 18. 【Python】簡単!Discord Botの作り方
- 19. RAGの構成を考えてみる
- 20. Pythonメタプログラミングの真髄:動的コード生成とAST操作で実現する高度な抽象化
icdiffでutf-8とshift-jisの両方を一度に比較する方法(おそらく非推奨)
## icdiffとは
ターミナル上で横並びにファイル比較ができるツール。https://github.com/jeffkaufman/icdiff
公式でも紹介されているように、gitに組み込むこともできる。
## icdiffのデフォルトエンコーディングはutf-8
以下のようにデフォルトでutf-8で読み込むようになっている。
“`python
parser.add_option(
“–encoding”,
default=”utf-8″,
help=”specify the file encoding; defaults to utf8″,
)
“`ところが、業務で`utf-8`と`shift-jis`の両方を同時に扱うことがある。
そのため差分ファイルに`utf-8`と`shift-jis`が混ざった状態で`git icdiff`を叩くと、`shift-jis`側のファイルはエンコードエラーとなる。“`
error: file ‘filename.jsp’ not valid with
Python Lab #2 ― FastAPI with React
# Python Lab #2 ― FastAPI with React
フロントエンドとして FastAPI で React 画面を返却するサーバーを用意し、バックエンドとして FastAPI で Web API を動作させるサーバーを用意し、ログイン画面から Web API を呼び出すというものを開発してみました。
UI 部分には MUI(Material UI)を採用しました。そのうち、サーバーサイドペイジネーションのデータテーブルにもトライしたいです。## 画面ショット
**[ログイン画面(React、MUI)]**
![Python_lab-fast_api_01-Login.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529613/73b5c122-9376-7ae7-ec44-2e6190660f6d.jpeg)
**[ログイン後のホーム画面(React、MUI)]**
とりあえず、MySQL の表 “product_list” の検索結果を表示している。そのうち、サーバ
素数の個数や和を高速に計算できるLucy DPをやさしく説明
[Project Euler, Problem 10: Summation of Primes](https://projecteuler.net/problem=10) のForumで投稿されていたLucy Hedgehog氏の解答(Lucy DPとも呼ばれる)がなかなか理解できなかったので、自分用のメモとして分かりやすさを最優先で説明しました。
### 素数の個数を求めよアルゴリズムの基本方針
このアルゴリズムは[Meissel–Lehmer algorithm (Wikipedia)](https://en.wikipedia.org/wiki/Meissel%E2%80%93Lehmer_algorithm)の考えを元にしているということで、Wikiでは以下のように述べられています。
> 実際にすべての素数をリストすることなく$x$以下の素数の数を求める
一瞬そんなことができるのかと思いますが、これを一歩一歩説明して行きたいと思います
### エラトステネスのふるい
プログラマであればそんなのは知っているよと言われるかもしれませんが、これをよ~く見るとこのアルゴリズ
PythonとGoogle Chart Toolsで作るシンプルな円グラフアプリ
こんにちは!今回は、PythonとGoogle Chart Toolsを使ってシンプルな円グラフアプリを作成する方法をご紹介します。Flaskを使用してウェブアプリケーションを構築し、Google Chart Toolsでデータを可視化します。
# 目次
* Flaskのインストール
* Flaskアプリケーションの作成
* Google Chart Toolsを使った円グラフの表示
* HTMLコードの説明
* アプリケーションの実行# 1. Flaskのインストール
まず、Flaskをインストールします。ターミナルで以下のコマンドを実行してください。“`bash
pip install Flask
“`# 2. Flaskアプリケーションの作成
次に、シンプルなFlaskアプリケーションを作成します。プロジェクトディレクトリを作成し、以下のように app.py ファイルを作成します。“`python
# app.py
from flask import Flask, render_template
app = Flask(__name__)@ap
pyenvで最新バージョンがインストールできない
# 環境
* Ubuntu 22.04
# 結論
* リモートリポジトリのURLを更新してgitから最新のpyenvを取得した
“`bash
$ git remote -v
origin git://github.com/yyuu/pyenv.git (fetch)
origin git://github.com/yyuu/pyenv.git (push)$ git remote set-url origin https://github.com/pyenv/pyenv.git
$ git pull“`
## インストールできるバージョン確認* Python3.12をインストールするためpyenvでバージョン確認を行ったところ、3.12がなぜか出てこない
“`bash
$ pyenv install -l
Available versions:
…
3.9.9
3.10.0
3.10-dev
3.11.0a2
3.11-dev
activepython-2.7.14
activepython-3.5.4
activepyth
指定した地域のメッシュコードを取得する
# はじめに
はじめまして!データサイエンティストの山上です。株式会社GEOTRA(@GEOTRA )にてGIS(Geographic Information System:地理情報システム)データを用いた分析を行っています。
本記事では指定された地域のメッシュコードを取得し、それをGeoDataFrameとして視覚化する方法を紹介します。# やること(背景)
– 指定したエリア(ポリゴン)に含まれるメッシュコードを取得する
– 指定された地域のメッシュを生成
– メッシュをGeoDataFrameとして可視化
– 前提:指定エリアのポリゴン情報をデータフレームで所持している
– バージョン情報:
– Python version 3.9.5
– jismesh.utils version: 2.1.0
– Shapely version: 1.8.0
– Pandas version: 1.4.2
– GeoPandas version: 0.10.2
– Matplotlib version: 3.5.2
最新LLM Llama3.1 を AWQ で4bit量子化して GPUサーバーに乗せて チャットできるようにした
# Llama 3.1 8B Instruct を量子化して試せるようにした
昨晩リリースされた [Llama 3.1](https://huggingface.co/hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4) を AWQ 4Bit 量子化して使えるようにしました。
公式ページの説明だけだと、量子化がうまくいかなかったので、そこを補足的に記述しました
これから、色々試して順次追記していこうとおもいます
## 【デモ】チャット公開しました
本記事でつくった量子化モデル+ ChatStream をつかって以下URLにて Llama3.1 8B Instruct をチャットできるようにしています推論エンジンは vLLM をつかっていますので、そこそこ高速です。
↓がチャットデモです
https://chatstream.net/?model_id=meta_llama_3_1_8b_instruct&ws_name=chat_app_en
## 環境
WSL + NVIDIA A5000
## 量子化の方法
【回帰】評価指標のあれこれ
AI会社に入社してまだ2週間のgohanだよ。最近はow2にハマってて、ヒーラーのキリコがお気にです。キリコのフレーズ「快気!」にちなんで回帰のお話。
回帰モデルを評価する際の指標の選別がわからなかったので、会社の人に色々教えてもらったのでまとめます。
分類問題は、割と直感的にわかりやすいものが多い(accuracyとか)けど、回帰は分かりづらい、、。### MSE
一番使用されるメジャーな指標だと思う。正答値から予測値がどれくらい離れているか?というのを算出して、それの絶対値(全部プラスの値にするよーってやつ)の二乗の合計。
最初これを聞いて、「それで何が分かるねん!」って思っていたが、説明を聞いて納得。
この指標を使う目的は、2つあって1つ目はモデルの比較。最初に作ったモデルから2回目に作ったモデルを比較して、mseがどれくらい良くなったかを見ることができる(数値が小さくなったほうが、モデルの精度が良い)。2つ目は、どのくらい予測値が外れているのかを細かい部分まで理解することができる。値を2乗するので、大きく外れているデータがあったら、mseは大きくなってしまう。例えば
mediapipeでFileNotFoundErrorとなる時の解決策
# mediapipeでFileNotFoundErrorとなる時
**症状**
mediapipeのライブラリを使いプログラムを実行しようとした際にこのようなエラーが出る。しかし、エクスプローラーなどで確認すると、このファイルはしっかりと存在はしている。FileNotFoundError: The path does not exist: C:\Users\自分のアカウントの名前\AppData\Local\Programs\Python\Python312\Lib\site-packages\mediapipe/modules/face_landmark/face_landmark_front_cpu.binarypb
## 結論
結論をいうと、フォルダ名に、非ユニコード文字(日本語がある場合)になってしまいます。フォルダ名に日本語を使うのを辞めてください。そうすれば上手くファイルが読み込まれるようになります。もし、自分のアカウント名が日本語で入れてしまっている場合には、新しいアカウンを(アカウント名を英語)で作成してそこでpythonをインストールする。または、仮想環
webdriver_manager を利用して webdriver を取得しようとすると OSError が発生する現象の回避策
# OSError が発生するようになった
webdriver_manager のバージョン 4.0.1、chrome のバージョン 127.0.6533.72 現在で以下のコードが OSError を吐くようになった。
“`python
chrome_service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=chrome_service, options=options)
“`> OSError: [WinError 193] %1 is not a valid Win32 application
chromedriver のバージョン 127.0.6533.72 には
– chromedriver.exe
– LICENSE.chromedriver
– THIRD_PARTY_NOTICES.chromedriverの 3 ファイルが含まれており、[実行可能ファイルを探す際に LISENCE は無視しているが THIR
画像2値化の前処理に凹凸係数も試す
# 凹凸係数による明るさムラ除去
2年ほど前、CLAHE(コントラスト制限付き適応的ヒストグラム平均化)を利用し、明るさムラで思惑どおりに2値化が出来ない画像への対処方法について記事を書きました。https://qiita.com/ydclab_0003/items/3bfaaa364d9e9e1664a5
今回は、明るさムラ除去に「凹凸係数」を使うとどうなるか確認してみたいと思います。
具体的な処理ロジックについては以下の記事を参考にさせていただきました。
[背景ムラの除去 – 2値化の前処理として](https://kakasi.hatenablog.com/entry/2020/03/02/151053)
[OpenCVSharp4で凹凸係数法による影の除去](https://negizoku.hatenablog.jp/entry/2020/09/20/231519)> 凹凸係数は画像中のそれぞれの画素の輝度値を、その周辺画素の平均輝度値で除算することで求められます。これにより画像全体における明るさを、各画素周辺の局所領域における相対的な明るさに変換する考え方のようで
GitにコードがPushされたら自動的にPullする
とあるゲームのサーバー開発に関わっているのですが、gitにコードがプッシュするたびにリモートデスクトップでわざわざプルするのがめんどくさすぎたので自動化したおはなし。
## 構成
Azure DevOps の Azure Repos にコードがプッシュされる
↓
Azure Repos の機能で自動的にHTTPリクエストを送る
↓
サーバーで動いているFlaskアプリケーションでリクエストをうけとる
↓
`subprocess` で自動的に `git pull origin master` する## コード
指定したポートを開けた状態で `python autogitpull.py` してください。
また、これはベースのコードで、まじでなんのセキュリティ対策もしていません。
`flask-httpauth` でユーザー名とパスワードを追加したり、Headerにパスワードを入れたりしたほうがいいかも。私の場合はテストサーバーなのでこれでテストしていきます。https://gist.github.com/inoue-773/22c2ec765b6c29235ef7a82d7a0
FastAPIの使い方(Python初心者やプログラミング初心者におすすめ)
# FastAPIとは
***Pythonのフレームワークで、高速でAPIを構築するためのフレームワーク***です。# 参考動画
### Pythonのバージョン
Python3のバージョンです。# 特徴
– 初学者向けのフレームワーク
– わかりやすい書き方
– 公式ドキュメントが豊富
– 自動ドキュメントを作る機能(Swaggerと連携取れている)
– バリデーション機能の実装簡単
– 型安全
– 高速***初学者がPythonのAPI開発ならFastAPIがベスト***です。
発展的に学ぶ場合は以下のことを知っているといいみたいです。
タイプヒントを用いたバリデーション、非同期処理、オリジン間リソース共有(CORS)、GraphQL、WebSocketsなどです。
# Flaskと似ている
Flaskと書き方が似ているので、やったことある方はやりやすいと思います。# python3.5から導入された型ヒント(type hints)
FastAPIの型ヒント(type
OpenSearch で 画像検索をする手順
OpenSearch には k-NN インデックスをサポートしております。
また、k-NN インデックスに対してコサイン類似度を計算することができます。そのため、下記のブログのように画像とテキストの Embedding を index に保存して、類似画像を検索することができます。
https://aws.amazon.com/jp/blogs/news/implement-unified-text-and-image-search-with-a-clip-model-using-amazon-sagemaker-and-amazon-opensearch-service/
そこで、ここでは類似画像の検索を行う手順を記録しておきます。
## 前提
– Amazon OpenSearch Service を用意しておきます。(ローカルOpenSearchやElasticSearchでもk-nn関連の機能がサポートされていたりプラグインがあれば動くと思います)
– 今回は Sagemaker の notebook 環境で行いましたが、後述する GPU を使用しない方法でも可能だ
【ROS2 launch.py Tips】launch.pyファイル内で、実行時引数(DeclareLaunchArgument)の値を取得する方法
# はじめに
ROS2のlaunch.pyで、ファイル内で実行時に引数で指定した値を使う方法を紹介する。テストコードで挙動を変えたりURDFの読み込み先を引数によって変更したい場合などに有効。
# 動作確認環境
* ROS2 Foxy
# 方法
launch.acitons.OpaqueFunctionを使う。
* ポイント
* DeclareLaunchArgumentで設定したcontextを受け取れるaction
* OpaqueFunctionの引数で設定した関数内で、上記のcontextを利用してLaunchConfigurationに設定されたパラメータを取得する## サンプルコード
グローバルに宣言している
* bool_param
* int_param
* float_param“`python
from distutils.util import strtobool
from ament_index_python.packages import get_package_share_directory, get_package_pr
【Python】ModuleNotFoundErrorの原因は環境変数PYTHONPATHにあった…
# エラー概要
以前まで使用していたpytestを実行したら、「`ModuleNotFoundError`」になって、失敗してしまった。> xxx.app.main import app E ModuleNotFoundError: No module named ‘xxx’
# 原因と解決方法
今回の原因は`PYTHONPATH`にありました。まずは以下のコマンドで確認。
“`
echo $PYTHONPATH
“`そして今回実施するプロジェクトのルートディレクトリがない場合は以下のように追加してあげます。
“`
export PYTHONPATH=”${PYTHONPATH}:/xxxx”
“`ディレクトリ構造は以下の通り。
使用したtestファイルでは、プロジェクトのルートディレクトリから別のディレクトリのモジュールをインポートして使用していたのですが、それが原因なのか。以前までできていたような気がするのだが…
よく仮想環境venvを使っているので、その切り替えや新規作成により、設定に影響があったのかも。
または、何がしか(IDEと
エントリーポイントでのクラスのインスタンス作成をテストする(pytest)
# 概要
エントリーポイント内でクラスのインスタンスを作成し、クラス内のメソッドを`main`関数内で呼び出す場合のモック方法について説明します。## テスト対象
– `main`関数の中でクラス「`ClassExample`」のメソッド「`get_number`」を呼び出す
– エントリーポイント内で「`ClassExample`」のインスタンスを作成“`python:examle.py
def main():
number = class_example.get_number()
return numberif __name__ == “__main__”:
# クラスのインスタンスを作成
class_example = ClassExample()
# main関数の呼び出し
main()
“`
## テストコード
以下のテストコードでは、`pytest`と`unittest.mock`を使用して、`ClassExample`クラスのメソッド呼び出しをモックしています。“`python:test_example
【Python】簡単!Discord Botの作り方
## 1. はじめに
### Discord Botとは?
Discord上で自動的に動作するプログラムのことを指します。
主に定期通知や音楽再生に使われているのを見る方が多いと思います。
### 本記事の目的
簡単なメッセージを定期的に配信してくれるボットをサーバに実装すること。
### 動作環境
Python : 3.12.3
pip : 24.1.2
discord.py : 2.4.0
## 2. 環境の準備
### Pythonのインストール
本記事を見られている方は不要な方多いかもしれませんが一応…。
[Python.jp](https://www.python.jp/install/install.html) から環境に応じてインストールしましょう。
### 必要なパッケージのインストール
#### discord.py
discord.py は、Discord上でBotを作成するためのライブラリです。
“`bash:ターミナル
pip install discord.py
“`
#### python-dotenv
python-dotenv は、環境変数を管理する
RAGの構成を考えてみる
# はじめに
Amazon Bedrock面白いですね、最近ずっと触ってます。BedrockではChat-GPTのようなチャットでの会話だったり、音声認識・画像生成等様々な生成AIを使用する事ができますが、その中の一つである**RAG (Retrieval Augmented Generation)** を構築する方法について、詳しくご紹介したいと思います。
RAG[^1] は、大規模言語モデルの回答精度を向上させる強力な手法ですが、その実装方法にはいくつかの選択肢があります。それぞれの特徴やコスト面での違いを見ていきましょう。
[^1]: https://www.nri.com/jp/knowledge/glossary/lst/alphabet/rag#:~:t# RAGとは?
構成を考える前にまずRAGについて、簡単に説明させていただきます。RAGとは「**Retrieval Augmented Generation**」の略で、日本語では「検索拡張生成」と訳されます。
これは、大規模言語モデル(LLM)[^2]の回答生成能力と、外部知識ベースからの情報検索を組み合
Pythonメタプログラミングの真髄:動的コード生成とAST操作で実現する高度な抽象化
## はじめに
Pythonの強力な機能の一つに、メタプログラミングがあります。これは単なるトリックではなく、コードの抽象化と再利用性を高める重要なテクニックです。本記事では、動的コード生成と抽象構文木(AST)操作を中心に、Pythonメタプログラミングの実践的な応用について深堀りします。各例には実行結果を追加し、動作をより明確に示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/9bc05bce-4fe2-3642-7292-6deecd9273d8.png)
## 1. 動的コード生成の高度な活用
### 1.1 コードテンプレートエンジンの実装
動的コード生成を使用して、簡単なコードテンプレートエンジンを実装できます。これは、特定のパターンに基づいて大量のコードを生成する際に非常に有用です。
“`python
import stringdef code_generator(template, **kwargs):
return st