Python3関連のことを調べてみた

Python3関連のことを調べてみた
目次

HaystackでLlama3, ElasticsearchDocumentStoreを使った質問応答システム構築を試してみました。

## はじめに
ローカルに作成した情報に関する質問応答システムを作ってみたかったので、Haystackのパイプライン構造を使ったRAGを試してみました。

## RAG(Retrieval Augmented Generation)とは?
RAG(Retrieval-Augmented Generation)は、自然言語処理(NLP)タスクのための最新の機械学習モデルの一つです。RAGは、質問応答、文章生成、要約作成などのタスクに適用されます。このモデルは、あらかじめ学習された情報を取得(retrieval)し、その情報を利用して文を生成(generation)することが特徴です。

## 今回のターゲット
ElasticsearchDocumentStoreに回答の元になる情報を入れて、ElasticsearchのRetrieverを使い、Llama 3 をgeneratorにするRAGのパイプラインを Haystackで構成して動かしてみました。

実際に使用する場合は、もっとローカルな設計データなどをDocumentStoreに入れてその内容に関して質問応答できる様にしますが、今

元記事を表示

Pythonのfloat型の算術演算

# `float`型とは

小数点を含む数値のことで、小数点以下が0のみの場合も`float`型に分類される。
例)1.1, 2.0, 0.03, …

# `float`型の演算

`float`型を含む演算は結果も`float`型になる。

“`python
>>> 2 + 1.0 # 加算
3.0

>>> 2 – 1.0 # 減算
1.0

>>> 2 * 1.0 # 乗算
2.0

>>> 2 / 1.0 # 除算
2.0
“`

また、演算式中に`int`型しか含まれない場合でも除算の場合は結果は`float`型になる。

“`python
>>> 3 / 2
1.5

>>> 3 / 3
1.0 # 割り切れてもfloat型
“`

除算結果を小数点以下を切り捨てた`int`型にしたい場合は整数除算(`//`)を用いる

“`python
>>> 3 // 3
1
“`

整数除算の結果割り切れた場合でも演算式に`float`型を含む場合、出力は`int`型ではなく`float`型になる。

※演算式中のオペランドの中でもっとも広い型に合わせて結果が

元記事を表示

Pythonの備忘録 (超初心者)

僕がPythonの使い方をド忘れした時のための備忘録を作成します。

PythonのList, Tuple, Dictionaryの使い方は下の図で表したような感じになっています。
![スクリーンショット 2024-04-22 12.03.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575336/e19bf248-960a-7689-0026-132c19021b3a.png)

:::note warn
あくまで上記はイメージです
厳密さを必要とする場合は下記LINKを参照してください。
https://www.python.org/
:::
今回はListの使い方の基本を書き下ろしておきます。

Listを設定

“`python
list = []
“`
:::note info
出力
:::
listを設定するだけでは何も出力はありません。


<

元記事を表示

【Python】 GitHubレポジトリのバージョン更新に合わせて自動的にPyPIのバージョンも更新する

## はじめに
自作ライブラリを`pip`コマンドでインストールできるようにするには、`PyPI`に投稿しないといけません。

手動で自作ライブラリを`PyPI`に上げる手順は、下記の通りですね。
[PyPIパッケージ公開手順](https://qiita.com/shinichi-takii/items/e90dcf7550ef13b047b5)

新規投稿だけではなく、バージョンアップの手順も同様です。
しかし、メンドウですよね。

我々は[自動化の王、自動化キング](https://qiita.com/uts1_6/items/11e348ead4bae71571b8)なので、`GitHub`を更新した時点で、`PyPI`への更新も同時にやってしうまうように、`GitHub`をいじりましょう。

## 結果
[この手順](https://github.com/konbraphat51/AnimatedWordCloud/blob/dev/CONTRIBUTING.md#updating-pypi)だけで `PyPI`の更新ができるようになります。

すなわち、`Release`

元記事を表示

python GUI tcl/tk ウィンドウ全体のスクロールバー、スクロールバー操作時に処理実行

# 実行サンプル
・python GUI tcl/tk ウィンドウ全体のスクロールバーを実装
・垂直スクロールバー操作時に処理実行
 下図のように、垂直方向のスクロールバーをユーザー操作で動かすと、
 プログラム起動したコマンドプロンプトにメッセージが表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423803/1982d3e1-b91a-cf6a-72bd-2730f3ac153f.png)

# 実行環境
windows10
python3.9.5

pythonモジュール tcl/tk

# 実行手順
ソースコードを作成する
windowsコマンドプロンプトでプログラム作成したフォルダに移動し、下記実行する
“`
python プログラム名.py
“`

# 参考 URL
https://qiita.com/thruaxle/items/0fc3e89bd15e3d2f79a1
https://daeudaeu.com/scrollbar/#google_v

元記事を表示

【Python】Ryeで始めるPythonプロジェクト

## はじめに

PoetryやPipenvではなく、**Rye**を使って開発を進めたい方向けの記事になります。
本稿は、ハンズオン形式で誰でも気軽にプロジェクトを作れるようになっています。

### ハンズオン環境

– Ubuntu / MacOS
– VSCode
– Rye : 0.24.0

## 0. Ryeとは?

RyeはPythonのための包括的なプロジェクトおよびパッケージ管理ソリューションです。
使用感としては、`Anaconda`のように独立してインストールでき、`pipenv`や`poetry`のように利用できる良いとこどりのような感じです。

https://rye-up.com/

また、大元のAstralは、`ruff`や`uv`等、今後のPython実行環境を刷新するようなパッケージを多数生み出しているため、`Rye`含めAstaral製のエコシステムが主流になっていくのかなと思います。
(ちなみにどれもRust実装で軽快に動いてくれます)

https://github.com/astral-sh

## 1. インストール編

基本的には、公式

元記事を表示

個人的に作っておくと便利な関数

大学の3年から大学院でPython使って個人事業主でもPython使っていて思うのが「これ作っておくと便利だな」と思った関数が何個かあるので紹介します。
というか自分の備忘録でもあります。
※なお、この記事は思い付きで書いていますので思い立った時に更新します。

# JSONの自動解析
正確には辞書型配列(連想配列)を自動的に解析する関数です。
やり方としては再帰アルゴリズムを応用した深さ優先探索で辞書・リストじゃないデータまで探索して、キーを表示するものです。
“`Python3
def depth(jsn, var=””):
if isinstance(jsn, dict):
for row in jsn:
depth(jsn[row], var=var+”[\””+row+”\”]”)
elif isinstance(jsn, list) and jsn != []:
for i in range(len(jsn)):
depth(jsn[i], var=var+”[“+str(i)

元記事を表示

Amplify functionでLayerのバージョンを上げようとしたらハマった話

## はじめに
私が携わっているプロジェクトでは、AWS Amplifyを活用し、ランタイムがPython 3.8のLambda functionとLayerを使用しています。
Python 3.8のサポート終了が近いため、問題を未然に防ぐためにPython 3.12へのアップグレードを決意しました。
詳細はAWSの公式ドキュメントを参照してください。
[Lambda ランタイム](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html)

## 環境
– Amplify: 12.11.1
– Python: 3.12.2
– Pipenv: 2023.12.1

## 遭遇した問題
バージョンアップの過程で、以下のファイル内のruntimesやpython_versionを3.12に更新しました。
– amplify/backend/function/laynerName/parameters.json
– amplify/backend/function/laynerName/lib/pyt

元記事を表示

Python変数と組込型

## 数値を使う

数値は、プログラムのなかで数量を記録するために利用します。

Pythonにかぎらず、プログラムではたくさんの数値を活用し、処理を行います。

Pythonでは、数値を扱うためのデータ型として、**整数型**と**浮動小数点型**が別に用意されています。

– 整数型

小数点以下の値を含まない、「100」のような数値を扱うために利用します。

– 浮動小数点型

小数点以下の値を含む、「3.14」のような数値を扱うために利用します。

Pythonには、実はもう1つ、**複素数型**という数値型がありますが、特に必要なし

### 数値を使った四則演算

「+」「-」「*(×)」「/(÷)」といった**演算子**を使った四則演算が可能です。

三角関数などを使った、より高度な演算も可能です。

“`python
>>> 1867 – 1603
264
“`

引き算例

累乗を計算するためには「**」を使います。ここでは、2を20乗してみます

“`python
>>> 2 ** 20
1048576
“`

累乗の例

Pyt

元記事を表示

Pythonの備忘録 (超初心者) <繰り返し処理>

僕がPythonの使い方をド忘れした時のための備忘録を作成します。

PythonのLoopでは制御構造を使用して、同じコードブロックを繰り返し実行することができる
![スクリーンショット 2024-04-22 12.03.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3575336/e19bf248-960a-7689-0026-132c19021b3a.png)

:::note warn
あくまで上記はイメージです
厳密さを必要とする場合は下記LINKを参照してください。
https://www.python.org/
:::
今回はfor loopの使い方の基本を書き下ろしておきます。

for loopを設定

“`python
for i in range (10):
print(i)
“`
:::note info
出力
0
1
2
3
4
5
6
7
8
9
:::
r

元記事を表示

Yolo v8の使い方

# はじめに
Yolo v8を用いた物体検出を試してみたのでその手順を紹介させていただきます。今回は手順のみ解説ということなので、Yolo v8の概要について詳しく知りたい方は以下のリンクを参照してください。

(https://github.com/ultralytics/ultralytics)

今回はすでに学習済みのモデルを使って歩行者信号の検出をGoogle Colaboratory上で行いました。Google Colaboratoryを使うと自分のパソコンに何もインストールする必要がないため、とても楽です。

では、はじめましょう。

# 実際の手順
1\. 必要なパッケージのインストール
google colabratoryを開き、以下のコードを実行します。
“`
%pip install ultralytics
from ultralytics import YOLO
“`

2\. google driveの呼び出し
検出用の画像を使うために以下のコードを実行し、google driveを呼び出します。(何でもいいのであらかじ

元記事を表示

rye sync で発生した AttributeError: module ‘hatchling.build’ has no attribute ‘prepare_metadata_for_build_editable’ の解消

Python 3.12.1 を使用して ChromaDB を利用したアプリを作っていて、`rye sync` したらエラーになりました。
手元のMacでは問題なく動いてたのですが、Debianのイメージを使用したDockerコンテナで`rye sync`したらこんなエラーが出ました。

“`
#10 [6/6] RUN <

元記事を表示

【Python】エラー「decimal.DivisionUndefined」とは?DivisionByZeroとの違い

# 概要
あまり見かけないPythonのエラー`DivisionUndefined`に遭遇したので解説します。

# サンプルコード

以下のコードを実行します。

“`py
from decimal import Decimal

sample = Decimal(0) / Decimal(0)
print(sample)
“`

すると結果は以下の通り。

“`
sample = Decimal(0) / Decimal(0)
decimal.InvalidOperation: []
“`

# 解説
`’decimal.DivisionUndefined’`ってなんだ?って思って検索すると、これは除算の際に分子にも分母にも0(ゼロ)を連携した際に発生するエラーとのこと。

> This occurs and signals invalid-operation if division by zero was attempted (during a divide-integer, divide, o

元記事を表示

繰り返し処理と並列処理の簡単な比較

## はじめに

ある処理について、複数回の実行を要する場面があります。このとき、処理間の前後関係に制約がない場合は、繰り返し処理(for文やwhile文)や並列処理がその実現方法として挙げられます。今回は、繰り返し処理と並列処理の簡単な比較として、コードと実行時間の違いについて紹介します。

:::note info
以降に挙げる例はGoogle Colaboratory[^1]で実行しています。
:::

[^1]:https://colab.google/

## 複数回の実行を要する処理の例

“`python:複数回の実行を要する処理の例
import random
import time

def process(num):
“””
本記事におけるある処理。
ある程度の時間がかかる処理と仮定し、1msの一時停止をした後にランダムな数値を出力する。
“””
time.sleep(0.001)
random.seed(num)
return num, random.random()
“`

## 繰り返し処理の例

元記事を表示

Flask + Jinja2 で汎用のエラーページをカスタマイズする(モジュールのメンバ関数をオーバーライドする編)

Flaskで汎用のエラーページを表示する処理がなかったので、モジュール標準のエラーページ生成処理をベースに実装してみました。

# この記事は

以下記事の別実装編です。

https://qiita.com/h6function/items/77e6fb8fc8961fce1cba

# Flask & Jinja2 には汎用的なエラーページを作成する機能がない

Flaskでエラーページを表示する際には、ステータスコードとエラーページを応答する関数をエラーハンドラーに登録することで実現します。

この方法は下記リファレンスページの Custom Error Pages のセクションで紹介されているのでご存じの方も多いかと思います。

https://flask.palletsprojects.com/en/3.0.x/errorhandling/#custom-error-pages

発生したエラーに応じてユーザに促すアクションを出し分けるという点では至極真っ当な実装と思いますが、意地の悪い言い方をすると [HTTP レスポンスステータスコード](https://develop

元記事を表示

Flask + Jinja2 で汎用のエラーページをカスタマイズする(自前実装編)

Flaskで汎用のエラーページを表示する処理がなかったので、モジュール標準のエラーページ生成処理をベースに実装してみました。

# そもそもエラーページを任意のテンプレートで作成すると何が良い?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203013/345c6f72-ccca-7a6b-02d3-3f515f6e1654.png)

上記はFlask作成したWebアプリケーションがデフォルトで返却する 404 Not Found のページです。

非常にシンプルかつ既視感があり、ブラウジングの最中に出てきた場合は恐らくですが「またこいつか」と若干の苛立ちを感じさせてくれることと思います。

試しに他のWebサービスの 404 Not Found ページと見比べてみましょう。

Amazon
【Python 型ヒントTips】for文で型ヒントを使う方法

# はじめに
Pythonのfor文で型ヒントを使う方法のメモ。

# 動作確認環境
* Python 3.8.10

# 方法

ループの前で変数を宣言する。

“`python
i: int
for i in range(5):
pass
“`

# 参考

https://stackoverflow.com/questions/41641449/how-do-i-annotate-types-in-a-for-loop

元記事を表示

python GUI tcl/tk グラフ・画像表示 マウス操作

# 実行サンプル
tcl/tkのCanvasで グラフ・画像表示する
また、マウスドラッグで画像から範囲指定する(四角形を表示)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423803/4c8787d1-5a0d-2b54-f31b-606c7fabfdf1.png)

# 実行環境
windows10
python3.9.5

pythonモジュール tcl/tk

# 実行手順
ソースコードを作成する
windowsコマンドプロンプトでプログラム作成したフォルダに移動し、下記実行する
“`
python プログラム名.py
“`

# 参考 URL
なし

# ソースコード
このページの例でのソースコードは以下
https://github.com/sakurataiko1/python_sample/tree/main/sample_tcltk/sample_canvas_matplotlib_mouseDrag

参考まで canvasを2つにした例
https

元記事を表示

【備忘録】Python×Seleniumで取得したデータをSpreadsheetに書き込むプログラムをCloud Functionsにデプロイ

## 背景
とあるサイトをSeleniumでスクレイピングし、そのデータをスプレッドシートに蓄積するフローを定期実行したい時に、自分でサーバーを用意するのは面倒なので、Google Cloud Functionsを使いました。Qiitaを探しても途中で詰まってしまうことが多かったため、Cloud Funtionsの使い方含め、デプロイする流れや注意点をここに詳細に備忘録としてまとめようと思います。
自分がまだまだインフラ周りに弱いので、もしアドバイスなどありましたらご教示いただけると嬉しいです😊

## この記事が想定しているシステム
定期的にhttps://www.google.com にseleniumでアクセスし、そのページ全体のHTMLをスプレッドシートに毎回記録する

## 実現方法
1. Google Cloud周りの準備
1-1. 新規プロジェクトの作成
1-2. サービスアカウントの作成およびキーの入手
1-3. Cloud Pub/Subの準備
2. スプレッドシート周りの準備
2-1. Google Sheet APIとGoogle

元記事を表示

ABC351 with Python (A~F)

ABC351のA~F問題をpythonで解説していきます。

# A – The bottom of the ninth
## 問題

チーム高橋とチーム青木が、チーム高橋を先攻として野球を行なっています。
現在、$9$ 回表までが終了し、$9$ 回裏が始まろうとしています。

試合において、チーム高橋は $i$ 回表 $(1\leq i\leq 9)$ に $A_i$ 点を取り、チーム青木は $j$ 回裏 $(1\leq j\leq 8)$ に $B_j$ 点を取りました。
ここで、$9$ 回表の終了時点でチーム高橋の得点はチーム青木の得点以上です。
チーム青木は $9$ 回裏に最低何点取れば勝利することができるか求めてください。

ただし、$9$ 回裏の終了時点で同点であった場合は引き分けとなり、すなわちチーム青木が勝利するためには $9$ 回裏の終了時点でチーム高橋より真に多くの点をとっている必要があるものとします。
なお、(ある時点における)チーム高橋の得点はそれまでの回の表に取った点数の合計であり、チ

元記事を表示

OTHERカテゴリの最新記事