Python3関連のことを調べてみた2023年11月06日

Python3関連のことを調べてみた2023年11月06日

LangChainのAgentsを使用し天気情報をWebから取得する

[Chat Completions APIでFunction callingを試す](https://qiita.com/horiday/items/d53ea63dd81cbb4c3ea0)で実装した処理を、LangChainのAgentsで置き換える。
Function callingでは、関数の実行はアプリケーション側で実行し、実行結果をLLMへ返す必要があったが、AgentsではLLMが実行してくれる。
今回はduckduckgoでWeb検索を行うように実装する。

## ライブラリインストール
“`
pip install langchain openai
“`

## ソースコード
“`
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.chat_models import ChatOpenAI

chat = ChatOpenAI(
model=”gpt-3.5-turbo”,
)
tools = load_tools([“ddg-searc

元記事を表示

LangChainを使用して会話履歴を踏まえストリーミングで応答を得る

[Chat Completions APIで会話履歴を踏まえストリーミングで応答を得るAPIリクエスト](https://qiita.com/horiday/items/8a221dc29e78df8ef7dd)で実装した処理を、LangChainで置き換える。

## ライブラリインストール
“`
pip install langchain openai
“`

## ソースコード

“`
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage

chat

元記事を表示

ABC327 提出したコードや感想 (言語:Python)

# 記事構成
[1. Atcoder自己紹介](#1-Atcoder自己紹介)
[2. 各問題の感想と提出コード](#2-各問題の感想と提出コード)
[3. 今回の結果想](#3-今回の結果)
[4. 最後に](#4-最後に)

# 1. Atcoder自己紹介
– 茶色?コーダー
– 主な使用言語:Python,C++(C++は最近使ってません)
– 一時期休んでたけど最近再開
– 本コンテスト終了時のグラフ↓

![abc327.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564785/3726b847-cd9d-1d03-3f03-47f118f36337.png)

# 2. 各問題の感想と提出コード
## A問題
特にいうこと無し.
A問題にしては中身書きすぎた?

“`python:A問題
def c_ab(S):
N = len(S)
for i in range(N – 1):
if (S[i] == ‘a’ and S[i + 1] == ‘b’)

元記事を表示

Chat Completions APIでFunction callingを試す

## Function callingとは?
自前で作成した関数一覧をLLMに渡し、LLMがプロンプトを受け取った際、その中から使いたい関数があった場合に選ばせる機能。
LLMは関数を実行できないので、LLMが使いたいと応答した関数の実行はアプリケーション側で実行し、結果を再度LLMに返却する。

## サンプルコードと具体的な処理の流れ
### 地域を指定して天気情報を返却するモック関数を定義
“`
import json

def get_current_weather(location, unit=”celsius”):
weather_info = {
“location”: location,
“temperature”: “27”,
“unit”: “celsius”,
“forecast”: [“sunny”, “cloudy”],
}
return json.dumps(weather_info)
“`

### LLMに渡す関数一覧を定義
get_current_weather

元記事を表示

Chat Completions APIで会話履歴を踏まえストリーミングで応答を得るAPIリクエスト

## ライブラリインストール
“`
pip install openai
“`

## ソースコード

“`import openai

response = openai.ChatCompletion.create(
model=”gpt-3.5-turbo”,
messages=[
{“role”: “system”, “content”: “You are a helpful assistant.”},
{“role”: “user”, “content”: “Hello! I’m John.”},
{“role”: “assistant”, “content”: “Hello John! How can I assist you today?”},
{“role”: “user”, “content”: “Do you know my name?”},
],
stream=True
)

#print(response)
for chunk in response:
c

元記事を表示

PythonでYoutubeの動画をダウンロード

# 備忘録

###### pythonでyoutubeの動画をダウンロードするやつ

“`python:main.py
import os
from yt_dlp import YoutubeDL

abs_path = os.path.dirname(__file__)

#オプションを指定(最高画質の動画と最高音質の音声を取り出し結合するためのオプション)
#実行ファイルと同じディレクトリにdataフォルダを作成してください
option = {
‘outtmpl’ : str(abs_path) + ‘/data\original/%(title)s.%(ext)s’,
‘format’ : ‘bestaudio/best’
}

#インスタンスの生成
ydl = YoutubeDL(option)

#ダウンロードの実行
result = ydl.download([‘https://www.youtube.com/watch?v=M2cckDmNLMI&list=PLItoQPoI2CslCLn2RKLEwe1IfgdjF5idU&

元記事を表示

AtCoder ABC 086 C – Traveling の解答(by Python)

# 前置き
今更ですが、[AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~](https://qiita.com/drken/items/fd4e5e3630d0f5859067) という記事に触発され、過去問10問を自分なりにコードを書いて解いてみました。
だいたいはスムーズに解けたのですが、その10問目である086Cの問題でafter_contest01.txtのテストがどうしても通らなくてハマっていたのが、原因を突き止めたので記事にします。
Pythonで記述していますが、ハマりポイントは言語とは関係ありませんので別言語で書いてハマってしまっているよという方にも参考になると思います。

# 問題の内容
[こちら](https://atcoder.jp/contests/abc086/tasks/arc089_a)にもある通り、旅行プランが可能かどうかを判定する問題です。
1秒ごとに上下左右に移動し、なおかつその場にとどまれないという条件から、時刻tと座標合計の偶奇が一致するかというところに着目すれば大枠は解けています。もちろん、以下

元記事を表示

【Python】内包表記まとめ

Pythonでは多くの変数の値を格納できるリスト型の変数があります。他言語における配列と似ています。

リスト型の変数はより効率的に記述するために内包表記という書き方があり、そちらを使ったリストの表現が主流です。

#1から100までリストに格納する。

“`python:test.py
list1 = []
for i in range(1,101):
list1.append(i)

print(list1)

>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,

元記事を表示

Pyspark(Jupyter Notebook)をDevcontainerで構築する

## 背景
Pyspark(Jupyter Notebook)をDevcontainerで構築することで、自分の環境を汚さず、いつでも同じ環境を即座に立ち上げて、Pyspark(Jupyter Notebook)を好きなだけローカルで検証できるを整えたかった。
それに、新しく`Asure Synapse Analytics Apache Spark Pool`だったり、`Azure Databricks`の案件に入るメンバーに対して、それらをキャッチアップする環境を用意してあげたかったのがことの発端です。
結局、環境を作るのが一番しんどいので。

## Devcontainer
Visual Studio Code、Devcontainerで環境を作成しています。
詳細はリポジトリを参照してください。

## リポジトリ
以下のリポジトリで公開していますので、よかったら利用してみてください。

https://github.com/silverlining-yamashita/try-pyspark

## 備考
画面収録した動画をgifに変換するために[ffmpeg](https:/

元記事を表示

Pyhotn3.12の機能追加の深掘りをしてみた

# 概要
pythonの超初心者が、pyLadiesに参加させていただきました?ྀི
内容は、「Python3.12の新機能を研究しましょう!」
まず、Pythonを触った程度の私がわかるかな・・・と思っていたのですが、皆さんが取っ掛かりやすいテーマにしてくださり、理解できたかと思います。
間違っている可能性も高いので、お手数ですが見つけた方はご指摘いただけると幸いです。

イベントページ

https://pyladies-tokyo.connpass.com/event/298770/

今回新しく機能追加されたものの一覧
(検索の仕方は「Pyhotn3.12 psf サマリー」です)

https://docs.python.org/ja/3/contents.html

この記事は、ハンズオンでしてくださるとわかりやすいと思いますので、Python3.12のインストールの仕方も載せておきます。(当方がMacなので、Macのしか載っていません。)

https://blog.pyq.jp/entry/python_install_231102_mac

# 今回深掘りした

元記事を表示

半精度浮動小数点型

# IEEE 754 – Binary16 形式

負符号を $S$, 指数部を $E$, 小数部を $T$ とすると、ビット パターンは

| 負符号 | 指数部 $E$ | 小数部 $T$ |
|:-:|:-:|:-:|
| $S$ | $E_0 E_1 E_2 E_3 E_4$ | $d_1 d_2 d_3 d_4 d_5 d_6 d_7 d_8 d_9 d_{10}$ |

(計 16 ビット)となっていて、各値は

“`math:
\begin{eqnarray}
S & = & \{ 0, 1 \} \\
E & = & \{ 0,1,2, \cdots,31 \} \\
T & = & \{ 0,1,2, \cdots,1023 \} \\
\end{eqnarray}
“`

の範囲です。$E$ が $0$ の場合は

“`math:
\begin{eqnarray}
N & = & \left( -1^{S} \right) \times 2^{-15} \times \left( \frac{T}{ 2^{10} } \right) \\
\end{eqnar

元記事を表示

aws lambdaでpsycopg2を使おうとしたらlibpq.so.5: cannot open shared object file: No such file or directoryとなった話

# 概要

lambdaでpythonを使ってRDSにアクセス時に`libpq.so.5: cannot open shared object file: No such file or directory`とエラーが出てしまったのでその問題の解消法を備忘録としてまとめました。

今回はpoetryを使っていましたが普通に`requirements.txt`でやっていても同じことだと思います。

## 環境

– AWS lambda
– AWS RDS (postgresql)
– Python3.11
– poetry

### ライブラリ

poetryで使っていたライブラリの一部

“`toml:pyproject.toml
[tool.poetry.dependencies]
python = “^3.11”
psycopg2 = “^2.9.9”
psycopg2-binary = “^2.9.9”
sqlalchemy = “^2.0.22”
“`

## 状況

`lambda`から`RDS(postgres)`にアクセスしようとして次のようなエラー(ログ)が`Cl

元記事を表示

ファイルのディレクトリを取得(Python)

# 備忘録

Pythonで実行中のファイルのディレクトリの絶対パスを取得

“`python:main.py
import os

abs_path = os.path.dirname(__file__)
“`

元記事を表示

gkeepapi (Google Keep)をPythonで使うときにBadAuthenticationが出た時の対処法

# 概要
gkeepapiのBadAuthentication問題は、ちらほら起きているらしいが、解決のための情報が少なく、解決できず泣き寝入りしている人が大半のようである。解決できた人も、何が悪かったのかよくわかっていない人が多い。

gkeepapiの公式サイトのFAQにもBadAuthentiationについての説明はあるが、説明が甚だ不十分な上に、提示されている「解決に役立つリンク」がほとんどリンク切れしており、わずかに残っているリンク先にも泣き寝入りしている人が多かったりする。

以下に、現時点で見つけた解決方法についてShareする。

# 一番見つけにくい対処法

https://github.com/kiwiz/gkeepapi/issues/81#issuecomment-1744006474

Windows OS特有の問題、 Pythonのバージョンの問題、Pythonのライブラリ群のバージョンの問題、そもそもGoogle Keep APIが非公式の適当に管理されているAPIである、等が絡み合った問題らしい

このレスを書いたDon Sudduth氏(djsudd

元記事を表示

【Python】FlaskでWEBアプリ作るぞ〜 #1 環境準備

# 開発環境
macOS
Python 3.9.6
pip 21.2.4
Flask 3.0.0

今回はflask-appというディレクトリで作っていきます。
“`
mkdir flask-app
cd flask-app
“`

# 仮想環境を作る
“`
python3 -m venv venv
source venv/bin/activate
“`

venvについてはこちら↓

https://www.manajob.jp/python/python-app/venv

仮想環境を無効化するときは下記
“`
deactivate
“`

# 仮想環境下にFlaskをインストール
“`
(venv) $ pip install flask
“`

# まずはブラウザに文字を表示させてみる
app.pyファイルを作成し下記のように記述
“`app.py
from flask import Flask

app = Flask(__name__)

@app.route(“/”)
def index():
return “Hello World!!!”

i

元記事を表示

np.datetime64のUnix時間とその浮動小数について

np.datetime64の浮動小数としての扱いについて、[本家サイト](https://numpy.org/doc/stable/reference/arrays.scalars.html#numpy.datetime64)を見てもよくわからなかったので、挙動を確かめた。

# 結論
– 場合によって数値のオーダーが勝手に変化するので危険
– 第二引数でオーダーを強制的に指定するべし

# np.datetime64とは?
pythonでの時刻を取り扱う規則?の一種で、`numpy`パッケージに組み込まれているもの。他には組み込みモジュールの`datetime`という組み込みモジュールや`pandas`の`pd.Timestamp`などがある。

64は64bitなのだと思う。

`Numba`ではpandasはサポートされてないが、np.datetime64はサポートされている(ので使いたい)。

`pandas`ほど受け入れる文字列は柔軟ではなく、ハイフン”-“で年月日、コロン”:”で時分秒ミリ秒…を区切ることで、時刻を指定する。

“`python3
import nu

元記事を表示

Matplotlib の Slider で任意の時間・角度でプロットする

# コード
時系列データを任意の時間・角度で指定し、可視化する必要があったため作りました。

“`python:slider.py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

# インタラクティブ用コマンド
%matplotlib widget

# 変数設定
value = np.linspace(0, 4*np.pi, 1000)
k = np.linspace(0.5, 1.5, 1000)
x = np.sin(value) * k
y = np.cos(value) * k
z = np.linspace(-1, 1, 1000)

# 図形オブジェクト作成
fig = plt.figure(figsize=(8, 8))

# 図形分割
grid = fig.add_gridspec(20, 1)
# スライダー領域確保
ax_slider_z = fig.add_subplot(grid[0,:]) # 方位角
ax_

元記事を表示

【Django】エラー「AttributeError: module ‘django.contrib.admin’ has no attribute ‘display’」の原因とは

# 概要
以前作成した以下チュートリアルを動かしていたら、`AttributeError: module ‘django.contrib.admin’ has no attribute ‘display’`というエラーが出ました。
[はじめての Django アプリ作成、その 1](https://docs.djangoproject.com/ja/4.1/intro/tutorial01/)

本記事では、このエラーの解決方法を記載します。

### エラー内容

“`
Traceback (most recent call last):
# 中略
File “/mysite/mysite/polls/models.py”, line 7, in
class Question(models.Model):
File “/mysite/mysite/polls/models.py”, line 12, in Question
@admin.display(boolean=True, ordering=’pub_date’, descrip

元記事を表示

【Pyinstaller】誤検知を回避する

本当に自分用のメモでゴメンナサイ…

https://qiita.com/tru-y/items/cb3cebe9612d367dccb2

の手順で実施すると次のコマンドでエラーが起きた。

`python ./waf distclean all`

“`bash
Checking for ‘msvc’ (C compiler) : not found
Checking for ‘gcc’ (C compiler) : not found
Checking for ‘clang’ (C compiler) : not found
could not configure a C compiler!
“`

なので、下のサイトに従いchocoをインストールする。

[Python] Pyinstallerで実行ファイルがマルウェアに分類されてしまったときの対策

ただこれも次のコマンドで詰まる。

`choco install -y python vcbuildtools`

エラーが出てインストールにfailする。

なので、オフィシャルに従

元記事を表示

ハッシュ化したパスワードの特定とその対策

# 概要

DBに保存していたハッシュ化したパスワードが盗まれたら、どのくらいのスピードでパスワードを特定できるのか、簡単なプログラムで試してみたいと思います。

今回作成するプログラムは、赤い枠の部分になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473097/704cdd4f-cb1a-bd1e-493a-09d9579f3cc0.png)

# セキュリティ用語

### 総当たり攻撃

総当たり攻撃とは、暗号解読方法のひとつで、可能な組合せを全て試すやり方。攻撃、または片仮名でブルートフォースアタックとも呼ばれる。(出典:[Wikipedia](https://ja.wikipedia.org/wiki/%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E6%94%BB%E6%92%83))

### レインボーテーブル攻撃

レインボーテーブルは、ハッシュから平文を得るために使われるテクニックの一つである。特殊なテーブルを使用して表引き

元記事を表示

OTHERカテゴリの最新記事