Python関連のことを調べてみた2023年08月04日

Python関連のことを調べてみた2023年08月04日

Vector Database まとめ

vector database というものについて調べたのでメモです。

## vector database とは

類似ベクトルを検索するためのデータベースです。機械学習の分野では文章・画像などを高次元のベクトルに変換して類似したものをまとめるということが行われており、それらを検索するためのデータベースとして使用されます。
2,3次元のベクトルであれば空間分割木で容易に検索できますが、高次元では高速に検索することが出来ないので、確率的に探索する近似最近傍探索という方法が使われます。

## 一覧

| DB 名 | スター数 | 開発言語 | ライセンス | 主要開発者の所属 |
| :——- | ——-: | :——: | :——— | :————————– |
| milvus | 20 k | Go | Apache-2.0 | zilliz (中国企業) |
| qdrant | 11.1k | Rust | A

元記事を表示

LangChain の DocumentLoader のように HTMLファイルの一部を読み取っていくサンプル

# 概要
– LLM で RAG などをしたいため、HTML ファイルを読み取りベクトルデータベースに保存したい
– LangChain で HTML の DocumentLoader が使えるが、HTML の一部を抽出することができない
– https://python.langchain.com/docs/modules/data_connection/document_loaders/html
– セレクタ、XPath、id 指定など
– 代替手段のサンプルを提供

# 手順
– BeautifulSoup を使って HTML ファイルの一部を読み取る
– LangChain の Document クラスを手動で生成する

# サンプルスクリプト
“`python
import os
from pathlib import Path
from bs4 import BeautifulSoup
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.docs

元記事を表示

Python3ではじめるシステムトレード:層別抽出法

統計検定準一級の標本抽出のところに層別抽出法があります。一見優しい様で、なかなか奥の深い内容です。まとめてみました。

8:00

# 層別抽出法

層別抽出法(Stratified Sampling)は、統計学において標本を抽出する方法の一つです。

母集団がその特性値に関していくつかの異なる特性値に分割できるとき、母集団をその特性値に応じて分割し、各層からある大きさの標本を個別に抽出した方が、単純無作為抽出によるよりも標本平均の推定の精度がよくなることが期待できます。特に各層の間で特性値の違いが顕著である場合に特に有用です。

層別抽出法の一般的なプロセスは以下のようになります:

層の定義: 母集団を相互に排他的な層または部分母集団に分割します。これらの層は、分析の目的に応じて選ばれ、関連する特性に基づいていることが一般的です(例:年齢、性別、収入など)。

各層からの抽出: 各層から独立に標本を抽出します。この抽出は、単純無作為抽出、非復元抽出、系統抽出など、さまざまな方法で行うことができます。

結合: 各層から抽出された標本を結合し、全体の標本を構築します。

層別抽出法は

元記事を表示

【Python】PythonのClassについて復習

今回の記事は、PythonのClassに関するものです。
前回の記事:

https://qiita.com/oriefield/items/473049ca2cbc05ce4c6a

でClassを作成してまとめを作ると記載しましたが、その前にPythonのClassについて復習しておきたいと考えて記事を作成。

主に、[Pythonの公式ドキュメント](https://docs.python.org/ja/3/tutorial/classes.html)を参考にし、その概要の紹介となります。

1. Classとは
2. Scopeについて
3. Classのinstanceについて
4. Classの継承
5. Private変数
6. Iteratorについて

## 1. Classとは

>クラスはデータと機能を組み合わせる方法を提供します。

クラスを作成することで:

* 新しいオブジェクトの型を作成、その型を持った新しいインスタンスを作成することができる。
* インスタンスは自身の状態を保持する属性を持てる
* インスタンスは自身の状態を変更するた

元記事を表示

Pythonのお勉強も兼ねて、競馬予想AIを作ってみる 【Part1】

Qiita自体が初めてだけども、Qiita自体の勉強も兼ねて、競馬予想AIを作る過程を書いていけたらと思う。

# 開発環境について
まず開発環境について、今回はWindows端末がまだ準備できておらず、
家にMacでプロトタイプを作って、動作の検証をしているうちに、
Windows端末を準備し、そちらを本環境とする予定である。

プロトタイプを作るMacの開発環境は以下。
||内容|
|:—–:| :—–:|
|機種|MacBookPro(2019年 13インチ)|
|CPU|Intel Core i5-8257U|
|RAM|LPDDR3 16GB|
|グラフィック|Iris Plus Graphics 645|
|Python|3.1.1|

windows端末が準備できたらまたここに追記しときます。

# やりたいこと
今回やりたいこととしては、大きく以下の2つ。

1. TensorFlowを使って、競馬の予想AIを作ってみる
大学時代に使っていたけど、もう忘れてしまったPythonを思い出しがてら、
Tensor

元記事を表示

【python】ttkbootstrapでテキストファイル読み込みと作成

pythonでテキストファイル作成と読み込みアプリを作成しましたのでその成果物を共有したいと思います。

作成した成果物は以下になります。

プログラム実行時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/cc24239a-63a3-b335-74ef-763509f77d06.png)

テキスト読み込み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2759758/3709b71b-cde9-9884-b056-1674dc78733c.png)

### 機能概要
chatGPTに機能を解説してもらいました。

1. TextEditorクラスは、ttk.Frameから派生しており、テキストエディタアプリケーションのメインウィンドウを表します。

2. ウィンドウの初期化、レイアウトの設定、テキストボ

元記事を表示

日本語LLM OpenCALMでTransformersによる文章生成AIを学ぶ

## はじめに
 去年買って積本になっていた[機械学習エンジニアのためのTransformers](https://www.oreilly.co.jp/books/9784873119953/)の5章テキスト生成で書かれている内容を、少し前にサイバーエージェントが公開した日本語LLM OpenCALM を使ってやってみたいと思います。

## 開発環境

 Google colabのフリー版でOpenCALMのモデルはOpenCALM-1Bを使用します。フリー版ではこれ以上大きいモデルを使うとメモリ不足で落ちるようなので、1Bを選択しました。Colab有償版Pro/Pro+を使っているのであれば、3B, 7Bのモデルを使ってみてもいいと思います。。

## 準備

まずはTransformersをインストール

“`Python
!pip install transformers
“`

使用するライブラリをインポート

“`Python
import pandas as pd
import torch
from transformers import AutoTokenizer

元記事を表示

【Python】出てきた単語Django

# 【python】出てきた単語集Django

## 自分用のメモみたいなものです。

### ①req

request(リクエスト)

——

### ②resp

response(レスポンス)

——

### ③dicr

dictionary(ディクショナリ)

—–

元記事を表示

ジャンプ漫画の名言はどんな印象?BERTでポジネガ分析をする

# はじめに
本記事ではPythonとBERTを使って、ジャンプ漫画の名言約300個のポジネガ分析を行います。[漫画名言.Net][jamp]さんのリストをお借りし、事前に「タイトル」、「キャラ」、「セリフ」の3つのカラムを持つデータを作成し、使用しています。

[jamp]:https://漫画名言.net/shuppansha/shueisha/shonenjump.html

# 環境
python 3.10.4
Windows 11 Home

# BERTとは
「Bidirectional Encoder Representations from Transformers」の略称で、2018年10月にGoogle社が発表したディープラーニングによる自然言語処理モデルです。
事前学習されたモデルと形態素解析を行うトークナイザを使って、様々な判定をすることができます。

# 使用するモデルとトークナイザ
モデルは`koheiduck/bert-japanese-finetuned-sentiment`を、トークナイザは`cl-tohoku/bert-base-japanese-w

元記事を表示

【Python】2つの数値の合計

# 実装内容
与えられた整数の配列 array から2つの数を選んで合計を targetSum とする組み合わせを見つける関数 twoNumberSum を作る。

# 実装
“`python:two_number_sum.py
def twoNumberSum(array, targetSum):
storage = set(num for num in array)

for num in array:
target = targetSum – num
if target in storage and target is not num:
return [num, target]

return []

# テスト
if __name__ == “__main__”:
array = [3, 5, -4, 8, 11, 1, -1, 6]
targetSum = 10
print(twoNumberSum(array, targetSum))
“`

# 解説
– twoN

元記事を表示

[CTF]GOT Overwriteを試してみた(備忘録)

はじめに

 こちらの記事は、私自身が GOT Overwrite を試しに実践したときのものを、その時、持った疑問などとともに備忘録として投稿するものになります。細かい GOT Overwirte の解説などはいたしません。
 記事の最後の方の疑問について分かる方いらっしゃいましたらコメントいただけると幸いです。また、何か間違いがございましたらご指摘ください。

ソースコード

 今回使うソースコードは、実践した際の実行ファイルやIDAのファイル、実際に私が書いたエクスプロイト用の Python スクリプトなどと一緒に以下の私の github のリポジトリに上げてあります。内容に関してはREADMEをご覧ください。また、使用する際は自己責任でお願いいたします。

https://github.com/hachan0179/Got_Overwirte_Sample

お手元

元記事を表示

複数行ヘッダーのDataFrameで列指定で値抽出を行う

# 概要
CSVファイルに書き出された複数行ヘッダーを持つデータを処理する際に、特定の列を削除したり、値を取得する方法が分からなかったので、メモ程度に書き残す

# 扱うデータ例
写真の色のついた部分がヘッダーであるようなデータを扱う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634748/21377d23-7176-ad04-051b-5d6a0cffc23b.png)

# やりたいこと
例えば写真の右から3つ目の列を取得したいとする

# 方法
以下のように指定したい列のヘッダー要素をタプルで記述することで、その列の値を取得することができる

“`python
df[
(
“Marker”,
“body:Backbone0”,
“CFB402DC2C6A11EECCB45FF7E93CBD9F”,
“Position”,
“X”,
)
]
“`

以下のように取得できる。
![i

元記事を表示

主成分分析とEigenface

# はじめに
[前回の投稿](https://qiita.com/bokuikkun/items/6486d4d78c0710df7c54)では[参考書籍](https://www.amazon.co.jp/Data-Driven-Science-Engineering-Learning-Dynamical/dp/1009098489)を元に特異値分解の基礎についてを備忘を記した。
今回はその特異値分解と主成分分析の関係、および[Yale database](http://vision.ucsd.edu/~iskwak/ExtYaleDatabase/ExtYaleB.html)を用いた実演を行う。

# 概要
前記事の通り、主成分分析(Principal Component Analysis;PCA)は特異値分解の応用のひとつである。
その恩恵というは、**高次元データを表すための階層座標系の解釈を統計的に与えてくれること**だ。
このあたりの概要は20世紀初頭から擦られまくっているのでこれ以上は言及しない。

# 計算方法
まずは標本平均を$0$にする処理を行う。
データセット$\

元記事を表示

selenium ver.4を使う

久しぶりにseleniumを使ったら、かなり沼ったので、使い方を記す

## 実行環境
OS Windows 11
python 3.10.11
selenium 4.11.2
Google Chrome canary 117.0.5926.0

## 環境構築
pip install selenium
Google Chrome canaryは検索してダウンロード

下記のコードを保存した場所と同じところに
クロームのドライバを保存
chromedriver.exe

ドライバの探し方は[最新版 ChromeCanary の ChromeDriver を取得する方法](https://qiita.com/Michinosuke/items/34348d3586b37c268f1f)を参照

## 正常に動作したコード
ほぼSeleniumの[ドキュメント](https://www.selenium.dev/ja/documentation/)に近いです
“`py
from selenium import webdriver
import time

driver

元記事を表示

【Atcoder】L – Deque【DP まとめコンテスト】

# Atcoder DP – L : Deque

問題 : https://atcoder.jp/contests/dp/tasks/dp_l

# 結論

`dp[left][right]` := 区間`Points[left, right)`を渡された先手のスコア

“`python
def getInt():
return int(input())

def getIntsArray():
return [int(x) for x in input().split()]

N = getInt()
Points = getIntsArray()
INF = float(“inf”)

dp = [[0 if left >= right else -INF for right in range(N + 1)] for left in range(N + 1)]

for length in range(1, N + 1):
# 0 <= left <= N - lenght for left in range(N - length + 1):

元記事を表示

PyTorchでCUDAを使用する際の注意点(備忘録)

PyTorchでCUDAを使用したい!と思っていろいろ調べてみるが、どれも肝心な部分が「分かっている」前提で書かれていて役に立たない。
なので結局自分で試行錯誤してあれやこれややってみることになるのだが、どうやってもコンピュータちゃんがGPUを使ってくれない。。。
完全に積んだと思っていたのだが、やけくそでガチャガチャしていたら偶然使えるようになったのでここに備忘録として書きなぐっていこうと思う。
***
まず、PyTorchでCUDAを使用する際の参考サイトの例としては以下がある。
https://qiita.com/motoyuki1963/items/a334c9488c2f55a867cf
https://happy-shibusawake.com/windows_cuda-pytorch/909/
https://koubou-rei.com/entry/cuda_cudnn

基本的にはこれの通りやればいいのだが、**めちゃくちゃ重要な点**が抜け落ちているので追記する。

# グラボのCUDAバージョンを確認しろ!
コマンドプロンプトで`nvidia-smi`と打つとコン

元記事を表示

FastAPI APIを使ってみる

# 目的
WindowsPCでVscodeを使ってFAST APIを少し触ってみました。
公式のチュートリアルを読解して、一部は動作確認をしました。

自分用メモとしてまとめました。
間違っている可能性があることをご了承ください。

# 実施内容
## Python環境構築
公式からインストールする。
https://www.python.org/downloads/

インストール時に下記のチェックを忘れない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/5e29084d-df07-28f3-efbe-cc66561b8d15.png)

適当なフォルダを作成してVscodeで開く。

Vscode の拡張機能からPythonをインストールする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/5c1a3817-bd9d-a947-0ee6-ffa8d0b3b

元記事を表示

タスクを定期実行する常駐アプリとそのインストーラを作る

# 目的

Python を用いて一定時間ごとに処理を実行する常駐アプリを作成する。
他者に配布しやすいようにアプリのインストーラも作成する。

# 使用ライブラリ

– 常駐アプリ化するために使用
– pystray
– Pillow
– インストーラを生成するために使用
– cx_Freeze == 6.15.0

インストーラとして `.msi` を作成するために cx_Freeze を利用しました。
cx_Freeze は対応する Python のバージョンが範囲指定されているので Python のバージョンに合わせて cx_Freeze のバージョンを選択してください。
[cx_Freeze 6.15 の場合は Python3.7~3.11に対応しています。](https://cx-freeze.readthedocs.io/en/6.15.5/)

# 常駐アプリの作成

大まかな流れは

1. アプリのメニュー (常駐アプリのアイコンを右クリックすると出てくる選択肢) を設定
1. 定期実行するタスクを並列処理で起動
– 定期実行タスクが要

元記事を表示

【Python】loggerに渡した文字列を関数で変更してみた

Pythonでちょっと高級なAppを作るときに使用するlogger
loggerに渡した文字列に細工をしたいことありませんか?

今回はloggerにわたす文字列を加工して出力するloggerを作成しました

# コード
“`Python

from logging import LogRecord, Logger, Formatter, StreamHandler, FileHandler, DEBUG, INFO

def change_message(s: str) -> str:
if s == “\\\n”:
return “\n\n\n\n\n”

s = s.upper().replace(“\n”, “\t”)

if “CAT” in s:
s += “ฅ^•ω•^ฅニャー”
return s

class OriginalFormatter(Formatter):
def format(self, record: LogRecord) -> str:
record.messag

元記事を表示

経路計画のための地図作成

経路計画について解説しているものはいろいろあるが,それを行う場所(地図)の作り方があまり見つからなかったので,まとめる.

# 迷路探索用迷路
まず,二次元の経路計画のため,迷路内部の障害物とスタート&ゴールの位置をランダムで設定するような迷路を生成した.
迷路周囲の壁と迷路内部の障害物は通行不可であり,グレーで表示される.一方で,通行可能なマスは白色で表示されるようになっている.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3250323/71be52bb-9c47-a63d-e2f2-8b9411b0d057.png)

## コード全容
“`python:basic_maze.py
import itertools
import random
import matplotlib.pyplot as plt
from matplotlib import patches

class Maze:
##########
# * input: None
# *

元記事を表示

OTHERカテゴリの最新記事