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

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

LangChain:独自のMulti-action Agentを作成する

# 1. はじめに

今回は独自MultiActionAgentの作成について解説します。まずは前回の振り返りから始めていきましょう。

### 1.1 LangChain Agentって?
自律型エージェントは人間の介入なしに意思決定や行動を行うシステムですが、予測しにくい挙動を示すことがあります。これを解決するためにはエージェントが自身のできること(アクション)を理解することが重要です。LangChainのReAct型思考ベースのエージェントでは、エージェントができるアクションをプロンプトに書き、それに基づいて意思決定や行動を行います。これにより、エージェントの挙動をある程度コントロールすることができます。詳しくはこちらを参照してください。

https://qiita.com/mashmoeiar11/items/fec070f8497940cee0b7

### 1.2 タスク生成
ユーザーからの質問(クエリ)は必ずしもシンプルなものだけでなく、複数のタスクを要求するような複雑なものも往々にして存在します。前回はユーザーからのクエリをLLMに渡し、解釈して、具体的なタスクに落

元記事を表示

distil-whisperでリアルタイム文字起こししたテキストをリアルタイム翻訳する方法

# 前回のお話

https://qiita.com/oichan00/items/6a688d69d76af55445ef

こちらで軽量Whisperのお話を書いています。今回はその続きです。

# やりたかったこと

会議の音声をリアルタイムで認識して文字起こしをするだけであればTeamsなどでもできますが、リアルタイムな翻訳はPro機能なので使えず手元で同時通訳を実現したいなと思い今回の記事作成に至りました。

## 必要なライブラリ

このプログラムを動かすためには以下のライブラリが必要です。

“`
pip install flask
“`

## ファイルとフォルダ構造

“`
├── webApp.py
├── uploads # 前回記事のDistil-whisperの文字起こしテキスト出力先
└── templates
└── index.html

“`

## 実装コード

以下が実装コードです。

### webApp.py

“`python
from flask import Flask, render_template,

元記事を表示

駄目グラフ003

ダイナマイトプロットは描かない

## ![20111210220621.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611739/ed27d75a-0f9d-74d5-bdbe-211dc2d9f653.jpeg)

そもそも,エラーバーも何を基準にするか。何を基準にしても,わかりにくいことに違いはないが。

元記事を表示

distil-whisperでリアルタイム文字起こし

# WhisperとHugging Faceを用いたリアルタイム音声認識

whisperもfast-whisperも私のPCでは1時間以上の会議で文字起こしをすることはできず、PCがハングしてしまいます。そこで見つけたのが「distil-whisper」です。とても軽量で数時間起動しても文字起こしの速度が落ちることが無かったです。

distil-whisperかつマイクでリアルタイム音声認識をする記事が無かったのでいろいろ調べてChatGPTと一緒にコードを作りました。

## Distil-Whisperとは
Distil-Whisperは、Hugging Faceが開発した音声認識モデルです。Whisperモデルを蒸留して、性能を維持しながらサイズと速度を向上させたモデルです。

Distil-Whisperは、Whisperモデルと比較して、以下のような性能向上が確認されています。

 サイズ:Whisperモデルの約半分(50%減)
 速度:Whisperモデルの約6倍速
 誤認識率:Whisperモデルとほぼ同等(1%以内)

## distil-whisper/dis

元記事を表示

今年もM-1グランプリのデータでデータ分析の基礎を学びなおす。

## はじめに

 去年も書いたのですが、今年もM-1グランプリの採点データを使って、データ分析の基礎を学び直しをやりたいと思います。(ちなみに仕事ではデータ分析っぽいことは何もやってません。)

## データ分析の実施

 まずは採点結果のcsvファイルです。

“`M-1_2023_score.csv
,山田,大吉,富澤,塙,海原,礼二,松本
令和ロマン,92,91,94,93,94,94,90
シシガシラ,87,88,91,90,92,91,88
さや香,98,94,95,93,96,94,89
カベポスター,94,89,88,89,95,92,88
マユリカ,92,90,96,92,92,92,91
ヤーレンズ,93,91,97,93,96,93,93
真空ジェシカ,90,95,93,91,91,91,92
ダンビラムーチョ,93,89,92,91,90,89,87
くらげ,89,87,89,90,89,90,86
モグライダー,87,89,90,91,93,91,91
“`

 ここから先はJupyter Notebookを使用します。

 まずはpandasをインポ

元記事を表示

pythonでM-1の最終決戦を作ってみた!

今年も大盛り上がりで終わったM-1グランプリ2023ですが、結果発表のところをpythonで作ってみました。

![IMG_3816.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583781/1c9a6028-61f6-f66b-b80f-df89654c78b9.jpeg)

![IMG_3817.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583781/baf74f31-a100-00eb-698a-12c1433bd836.jpeg)

“`python:M-1.py
import tkinter as tk
from tkinter import messagebox
import random

class CardFlipperApp:
    def __init__(self, master):
        self.master = master
        self.master

元記事を表示

ずんだもんナレーター(VOICEVOXクライアント)

# Linux環境のPythonでVOICEVOXのUI付きクライアントを書いてみた
VOICEVOXでナレーションするにはVOICEVOXを起動しておいてAPIを叩く必要があります。

## VOICEVOXをLinuxにインストールする場合
下記の記事を参考にしてください。
https://qiita.com/kawamo55/items/d333524c82a03dd28c07

# 必要なライブラリ
PySimpleGUI、request、pyaudio がいります。

中でも、pyaudioをLinuxにpipでインストールする際ヘッダーファイルがないというエラーで止まる場合があります。
その場合は
apt install portaudio19-dev
でパッケージを入れないとだめな場合があります(debian系)

## 使い方
1. VOICEVOXを起動します。
1. ナレーション内容はソースの中にあるので書き換えます。
1. ナレーションは(‘よみ’、’表示’)の順に書きます。
  これは読み間違いのある場合読みの方の読み間違う漢字をひらがなでいれます。
1. スク

元記事を表示

SageMakerのリアルタイム推論エンドポイントで使用しているPythonパッケージの一覧を取得する

# はじめに
SageMaker のリアルタイム推論エンドポイントで使用している(モデルコンテナにインストールされている)全ての Python パッケージの、パッケージ名とバージョンの一覧を取得したいというタイミングがありました。

その際にやったことをまとめます。

# やったこと
リアルタイム推論エンドポイントの推論コード(カスタムスクリプト)内に、以下の Python コードを仕込んで推論を実行すると、ログ(CloudWatch Logs)に“pip freeze“の形式で結果が出力されます。

“`Python
import subprocess
result = subprocess.run([‘pip’, ‘list’, ‘–format’, ‘freeze’], stdout=subprocess.PIPE, text=True).stdout
print(result)
“`

また、エンドポイントから S3 へアクセス可能な場合、以下のように S3 へテキストファイルを出力することもできます。
“`Python
import boto3
import

元記事を表示

Plotlyで作成したグラフをMarkdownに埋め込み【備忘録】

# はじめに
 報告書の作成って手間ですよね。私は研究職という職業上(?)報告書を書くことが多いのですが、普段Markdownでザザっと書いてHTMLにして上長にぶん投げています。
とある報告書でPlotlyで作成したグリグリ動くグラフをMarkdownに貼り付けたいなぁと思い、作業したことを備忘録として残しておきます。
 手法としては、plotlyで作成したfigをHTMLで出力し、Markdownに<iframe>タグで埋め込みます。

# 埋め込みたいグラフ
以下のようなマウスでグリグリ動かせる感じのグラフを埋め込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493004/3d459fb9-a32e-a0b9-b797-aabd8bc193cf.png)

# コード
まずは普通に散布図を作成します(別に散布図でなくてもいいです)

“`python:figの作成
import pandas as pd
import plotly.express as px
imp

元記事を表示

なんちゃってバイオインフォマティクス

## バイオインフォマティクスっぽいことをしてみる

誰か、pythonを使って、バイオインフォマティクスを説明している人がいないかなと思って、いろいろ調べてみましたが、実際に分析などを載せておられる方はいないものの、オープンデータをダウンロードしてこういう準備をするといいでしょう、というようなごく入門的、入門以前の情報を載せておられる方はいます。

情報量が大きいので、扱いが難しいですが、研究者向けにデータを提供しているサイトがあるので記しておきます。

ensembl.org というヨーロッパのサイトです。
英語で書いてあるので、wikipedia を読んでもよくわかりませんでしたが、日本からアクセスすると、https://asia.ensembl.org に飛ばされるので、世界的に結構有名なサイトであるような気がします。

例示に示したファイルは、
gz で 840MBぐらいあり、
解凍すると、3.3GBくらいあるので、普通のテキストエディタでは開けません。
それなりのツール選びが必要になってくると思います。

gzで11MB程度の者もあります。
ヒトゲノムのある部分的な部分の者

元記事を表示

Pythonで「タプルを別のタプルと結合して新しいタプルを作成する」の動作を確認してみた

# 概要

Pythonで「タプルを別のタプルと結合して新しいタプルを作成する」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/tuple/index5.html

# 実装

以下のファイルを作成しました。
“`sample.py
tuple1 = (“A”, “B”, “C”)
tuple2 = (“D”, “E”)
tuple3 = tuple1 + tuple2
print(tuple3)

redtuple = (“Orange”, “Strawberry”)
yellowtuple = (“Lemon”, “Banana”, “Grapefruit”)
# redtuple と yellowtuple を結合する
fruittuple = redtuple + yellowtuple
print(fruittuple)
“`

以下のコマンドを実行しました。
“`
$ python3 sample.py
(‘A’, ‘B’, ‘C’, ‘D’, ‘E’)
(‘Orange’, ‘Strawb

元記事を表示

Djangoで読書メモアプリを作る

Djangoで読書メモアプリを作りました。
はやたすさんの記事を参考にしました。

https://tech-diary.net/django-todo-tutorial/

この記事では、Pythonのインストール、仮想環境の構築、Djangoのインストール、アプリ作成の流れを書きます。
実行環境:MacBook Air M1, 2020

# Pythonのインストール
以下のサイトにアクセスし、Latest Python 3 Release – Python 3.12.1をクリックします。
https://www.python.org/downloads/macos/
![スクリーンショット 2023-12-09 1.58.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569835/a99c13f0-63a0-26d8-d755-ddbd24cd2ea4.png)

開いたページを下にスクロールし、macOS 64-bit universal2 installerをクリックします。

![

元記事を表示

WARNING: No route found for IPv6 destination fdbb:a1:0:0:1:: (no default route?)となってscapyのsr1()からパケットが上手く送信できない

送信元インターフェースにリンクローカルアドレスしかなく,デフォルトルートがない場合,scapyのsr1()が上手くいかなかったので,その状況を共有します.(こんな状況になる人は少ないとは思いますが)

## 状況

SRv6のテスト用でscapyを使って[自作ping](https://github.com/shu1r0/srv6_ping.git)っぽいものを作っています.
そのプログラムでは,パケット送信するために,scapyの`sr1()`関数を使っていました.
このとき,ルータとして動かしているLinuxノードからパケットを上手く送信できませんでした.

具体的には,以下のようなClosネットワークを動かしまして,各ノードはBGP unnumberedで設定しています.
このネットワークで,l1から実行したときに`WARNING: No route found for IPv6 destination fdbb:a1:0:0:1:: (no default route?)`と出て,パケットを送信できませんでした.

![clos3_srv6vpn_24.drawio.png](

元記事を表示

ChatGPTとPythonで学ぶ Prophet

皆さんこんにちは。今日も引き続きChatGPT先生をお招きして、「ChatGPTとPythonで学ぶ Prophet」というテーマで雑談したいと思います。それではChatGPT先生、よろしくお願いします。

### **assistant**:

こんにちは、よろしくお願いします。今日はProphetについて学びますね。

ProphetはFacebookが開発した時系列解析を行うためのライブラリです。Prophetはトレンドや周期性などのパターンを捉えるために特に設計されています。これらのパターンはビジネスや経済、天候等の時間的変動を含む多くの問題に適用できます。

それではPythonを使って具体的な使い方を見てみましょう。まずはライブラリをインストールします:

“`
!pip install pandas prophet
“`

### **user**:

ありがとうございます。それでは、Prophetについて学ぶためのPythonコードを書いてください。その際に、型ヒントも導入してください。コード中に日本語での説明も可能な限り詳しくお願いします。

元記事を表示

ElixirとgRPCで異言語間通信

# 1.はじめに

ElixirでgRPCを使う機会があったので、基本的な手順をまとめてみました。
今回は、Elixir対Python間での通信を試してみます。

# 2.準備

“`sh:ターミナル
$ cd (各自の作業ディレクトリに移動)
$ mkdir grpchello
$ cd !$
“`

※今回の試行では、下記のようなディレクトリ構成を想定しています。

“`text

+ grpchello
+ hello.proto protoファイル
+ exgrpc Elixir版プロジェクト
+ lib Elixir版コード
+ pygrpc Python版プロジェクト
+ pygrpc Python版コード
“`

protobuf-compilerをインストールしておきます。

“`sh:ターミナル
$ sudo apt install protobuf-compiler -y
“`

# 3.E

元記事を表示

2023 AI実装検定 A級を受けた所感など

# はじめに
2023年12月下旬に[AI実装検定 A級](https://kentei.ai)を受験したので,その所感などを記録しておく.
少しでも何かの役に立てれば幸いである.

# 受験の流れについて
以下のサイトを参考にしてマイページを登録し,そこから申し込みを行う.
https://cbt-s.com/examinee/examination/equ.html

# 簡単な概要
– CBT(Computer Based Testing)形式,すなわちコンピュータ上で試験を行う
– 試験会場は出願時に[会場一覧](https://cbt-s.com/examinee/testcenter/?type=cbt)から任意に選択し,当日現地で受験した
– 3つの分野(AI,数学,プログラミング)からそれぞれ20問ずつ,計60問を60分で解かなればならない
– 各問題の範囲は公式のシラバス通りである([HP](https://kentei.ai)に掲載)
– 経験者からの話によると問題の中には出題ミスが含まれていることがあるらしい
– 実際集合の問題で,

元記事を表示

【色変記事】一般情報系大学生がAtCoder入茶&入緑した話

# 1. 始めに
初投稿です。
2023年時点で大学三年生の[Ang](https://twitter.com/Ang_kyopro)と申します。
先日のABC334にて7か月、28回のコンテスト参加で**入緑**を達成できました。
そこで、記念、振り返りとして入茶、入緑をまとめて色変記事を書くことにしました。
基本的には自己満記事になりそうですが、略歴が似ている方などは参考になるかもしれません。

**レートとパフォーマンスの推移**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535783/704c24ef-b970-639a-d062-f2af662cdc61.png)

**Achievement**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3535783/7ddea8d5-b4c5-387c-ca0c-f24095a

元記事を表示

SageMakerのリアルタイム推論エンドポイント(Pytorch)のリクエスト時にカスタム属性を渡す

# はじめに
SageMakerのリアルタイム推論エンドポイント(フレームワーク:Pytorch)に対して推論リクエストを行う際に、Content-Typeヘッダーやリクエストボディのような必須の情報とは別に、追加の情報(以下カスタム属性と呼びます)を付与してリクエストしたいという場面がありました。

SageMakerのリアルタイム推論エンドポイント(フレームワーク:Pytorch)にカスタム属性を渡す方法について、AWSの公式ドキュメントには明確な記載がないのですが、色々試行錯誤しているうちに渡すことができたので、まとめます。

# 結論
クライアント側では、以下のようにリクエストします。
“`Python
import boto3

sagemaker_runtime_client = boto3.client(“sagemaker-runtime”)

response = sagemaker_runtime_client.invoke_endpoint(
EndpointName=”<リアルタイム推論エンドポイントの名前>“,
ContentType=”<リ

元記事を表示

シフトスケジューリング問題を解いてみた

## はじめに

下記の記事のシフトスケジューリング問題を、pandasを使った数理モデルで解いてみました。

https://zenn.dev/umepon/articles/5aef89c5c348de

元ネタは、下記の「Pythonによる実務で役立つ最適化問題100+ (3)
―配送計画・パッキング・スケジューリング―」の31章の問題です。

https://scmopt.github.io/opt100/

## 変数表

変数は変数表で管理します。変数表は2つあります。

### 変数表`df_staff`(スタッフ一覧)

|列名|意味|
|:–|:–|
|`Staff`|スタッフ番号|
|`VarS`|スタッフを使うかどうか(0-1変数)|

### 変数表`df`(スタッフとジョブの可能な組み合わせ)

|列名|意味|
|:–|:–|
|`Staff`|スタッフ番号|
|`Job`|ジョブ番号|
|`Start`|ジョブの開始時刻|
|`End`|ジョブの終了時刻|
|`Var`|ジョブをスタッフに割り当てるかどうか(0-1変数)|
|`VarS`|スタッフを

元記事を表示

Numpy 配列と互換性のある関数の方がnumpy.vectorizeよりも速い

# はじめに

この記事では、
– `numpy` 配列と互換性のある関数の使用
– `numpy.vectorize` の使用
– 標準のforループの使用

の3通りの処理の違いについて解説します。

先に結論を言うと、「`numpy` 配列と互換性のある関数の使用」するのが一番早くて可読性も良いです。

(昔は、`numpy.vectorize` を無意識的に使ってましたが、実は不要ではないかと思うに至ってます。)

# ベンチマークテストの例

短いコードです。ここでは、f(x) = 1/x という計算を3通りに方法で計算して、速度を計測します。

“` python:
import numpy as np
import time

# 関数の定義 (Numpy配列と互換性のある関数)
def reciprocal(x):
return 1 / x

# Numpy.vectorizeを使った関数
reciprocal_vectorized = np.vectorize(reciprocal)

# データの生成
data = np.random.random(100

元記事を表示

OTHERカテゴリの最新記事