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

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

LangChainでChatGPTの返答をストリーミングレスポンスでSlackに返却する

1. Slack Botにメンションしてメッセージを送る
1. まず、「Typing…」とスレッドに返信が来る
1. ストレーミングレスポンスで徐々に返信が更新されていく

“`
import os
import re
import time
from typing import Any

from dotenv import load_dotenv
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
from langchain.chat_models import ChatOpenAI
from langchain.callbacks.base import BaseCallbackHandler
from langchain.schema import LLMResult

CHAT_UPDATE_INTERVAL_SEC = 0.4

load_dotenv()

# ボットトークンを使ってアプリを初期化
app = App(
signing

元記事を表示

何番目にある? 1 Python3編

https://paiza.jp/works/mondai/array_primer/array_primer__search_i-th_step1

短くするなら
“`py
A =[1,10,2,9,3,8,4,7,5,6]
print(A.index(8)+1)
“`
ただ、この練習を活かすには

“`py
A =[1,10,2,9,3,8,4,7,5,6]
for i in range(len(A)):
if A[i] == 8:
print(i+1)
“`

元記事を表示

それ,numpy で書かない?–3–

## それ,numpy で書かない?–3–

Python ではリストがよく使われる。また,for ループが遅いのでリストに特化したリスト内包表記も推奨されることが多い。

それなりの根拠があるからではあるが…

課題:エラトステネスの篩を使って $n$ 以下の素数のリストを得る。

“`python
from time import time
import numpy as np
import matplotlib.pyplot as plt

n = 100000
trial = 500
“`

以下のプログラムは,この次に示す numpy によるプログラムをリストを使うように書換えたものである。

“`python
def sieve1(n):
tbl = [True] * (n + 1)
tbl[0:2] = [False, False]
for i in range(2, n + 1):
if tbl[i]:
for j in range(i * i, n + 1, i):

元記事を表示

「あぁ、そうか 家で(サーバー負荷考えないで)ネットラジオ流すなら家で HLS にさせちゃえばいいんだ!」と思い”(今のところ)最低限の機能”だけ実装した話

# はじめに
## ????「ちょっと何言ってるかわからない」
複数の端末を持っていると台数制限とかサーバーの負荷とか考えないで聴く方法を考えたらそうなりました。

## もうちょっと詳しく
複数の端末でいろんな配信プラットフォームのアプリがあると~~使ってない間に非使用アプリとして再度ダウンロードしなきゃいけないのとか~~イラッとしませんか? そういうのが嫌だったので作ってみることにしました。
~~あと「[Heart FM](http://heartfm.jp/) さんが開局して([ジェイムス・ヘイブンス](https://www.facebook.com/jameshavensdj/)さんや[ピストン西沢](https://www.youtube.com/@djPiston2438)さんの番組を)録音する環境を再整備しなきゃ」と思ったのも大きいかなぁと。~~

## ちなみに
発想は「[burrocargado/RadioRelayServer](https://github.com/burrocargado/RadioRelayServer)」のソースを見て「こういう感じだったら

元記事を表示

Python 掲示板 などの参考資料

一応、まとめて記録として。
pyton は起動時に-X utf8 を付けると使えるようになるから
“`Python
#!C:/Python3/python_3_12_0_embed_amd64/python -X utf8
# coding=utf-8

print (‘Content-type:text/html’+’\n’+’\n’)
print (‘pyton_v3

test decoder3

‘+’\n’)
print (‘

日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」
\n’)
print (‘カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。
\n’)

元記事を表示

【matplotlib】Pythonで学術論文クオリティの散布図を作ろう

# 0. はじめに
今回は化学の学術論文で使用できるレベルのグラフを Python のモジュールの一つである Matplotlib を用いて作成します.
グラフによって使う設定が異なるので,初回は最も基本的な散布図を対象に説明します.

## 本記事で学べること
– Python, Matplotlib を用いた散布図の作成手法
– 検量線の作成に必要な基礎的な単回帰分析の手法
– Matplotlib の散布図に関する関数や引数の知識
– 学術論文に使用するグラフの要件と作り方

## 対象とする読者
– 基本的な Linux の操作, Python3 の文法が分かる人
– Matplotlib で学術論文クオリティの図が書きたい人
– 有料のソフトウェアを使わないことに快感を憶える人
– Matplotlib の公式リファレンス[^1]を読むのは大変という人

## 対象としない読者
– りぬっくす?ぴちょん?なにそれ美味しいの?という人
– 色鮮やかで見栄えの良いグラフを描きたい人
– 商用ソフトウェアで満足できる人
– Matplotlib の公式リファレンス[^1]を読みこな

元記事を表示

それ,numpy で書かない?– 2 —

## それ,numpy で書かない?

Python ではリストがよく使われる。また,for ループが遅いのでリストに特化したリスト内包表記も推奨されることが多い。

それなりの根拠があるからではあるが…

課題:[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] のような二重リストを作る。

[n×n, 2] の二重リストを trial 回作成し,処理時間の平均値と標準偏差を記録する。

“`Python
from statistics import mean, stdev
from time import time
n = 1000
trial = 100
“`
### 二重の for ループと append()

“`Python
def for_loop(n):
start = time()
list1 = []
for y in range(n):
for x in range(n):
list1.app

元記事を表示

それ,numpy で書かない?– 1 —

## それ,numpy で書かない?

Python ではリストがよく使われる。また,for ループが遅いのでリストに特化したリスト内包表記も推奨されることが多い。

それなりの根拠があるからではあるが…

課題:$n$ 個の整数を要素とするリストが 2 対ある。対応する要素が等しいものと等しくないものの個数を求めよ。

テストデータとして以下のような,0 ~ 999 の整数要素からなる,2 個のリストを作る。

“`python
from time import time
import random
n = 10000000
random.seed(123)
expected = [random.randint(0, 999) for _ in range(n)]
predicted = [random.randint(0, 999) for _ in range(n)]
“`

for を使うとたしかに遅い。

“`python
s = time()
correct = 0.0
wrong = 0.0
for i in range(n):
if expecte

元記事を表示

pygameを使って、簡単なインベーダーゲームを作成&自己紹介

# 自己紹介
初めまして!
現在、プログラマーを目指して勉強中の大学生である「kazuma」と申します!
出身は静岡県で、現在は文系学部の大学に所属しています!
趣味:ゲームをすること。筋トレなどの一人で体を動かすこと。読書
最近興味のあること:プログラミングを勉強すること。漫画アプリで漫画を読むこと。マガポケで読める「私のアリカ」はオススメです!

まだまだプログラミング初心者ですが、これから学習をしていき、いずれ自身の制作物を開発したいと思っています!今後ともよろしくお願いいたします:bow:

## 投稿のきっかけ
最近、技育CAMP勉強会に参加し、そこで情報発信が大事なのかということを知りました。
なので初心者とはいえど、発信していきたいと思ったため、今回は自己紹介&動画を参照しながら制作した「インベーダーゲーム」の紹介をしたいと思いました。今後はどうなるか未定ですが、何かしら投稿していきたいと思っています!

# 制作したゲームの主な内容
#### ソースコードや使用した画像ファイルなどは以下のGithubを参照してみてください
(本当にすみません:cry:ソースコードのp

元記事を表示

Python3で機械学習により、外国為替1時間足の予測をする方法

## 要 旨
Colaboratory上でPython3により機械学習で外国為替(USDJPY)の1時間足予測を実施する方法について記述します。
## 実行環境等
コンピューター: iMac 21.5インチ 2017年モデル
macOS: Ventura 13.6.1
Google Colaboratory使用(https://colab.research.google.com/notebooks/welcome.ipynb)
## 実施要領
プラットフォーム:Google Colaboratory
使用データ:yahoo finance
外国為替銘柄:USDJPY(米ドル円)
予測モデル:Scikit-learn pipeline
以下に外国為替(USDJPY)の1時間足を予測するPython3のプログラムの一例を示します。
“`python3:USDJPY_H1_predict.py
import time
t1 = time.time()
import numpy as np
import csv
import math
import pandas as pd
import y

元記事を表示

テキストファイルの内容からエクセルのシートを作成したい

## はじめに

会社で地図アプリに表示するデータを作成する処理を作ったのですが、そのデータが都道府県ごとのフォルダにデータが分けられていて、都道府県ごとに一つずつ表示したスクリーンショットをエクセルに貼り付けてほしい、と依頼がありました。

シートを47個以上も作成するだけでも物憂い仕事です。シートを一枚作るごとにコーヒーブレイクしてブログ巡回をして30分くらい無駄にするに決まっています。

そうならないようにシートを47都道府県分一気に作る処理が欲しかったのです。

あわよくばそれを汎用的にして、テキストファイルを引数に取るだけで作成できるものにしたいと考えました。

## 作った処理

自分はC#をよく使うのですが、これだけの処理にC#はなんだかな……、と思いまして、Pythonで作れないか検討しました。

それで、作った処理が以下になります。
※事前にopenpyxlはpipでインストールしておいてください。

““py
import sys
import openpyxl

# コマンドラインの第一引数を入力ファイル名とする
file_nam

元記事を表示

二次元配列の入力 2 Python3編

https://paiza.jp/works/mondai/array_primer/array_primer__2dmatrix_input_step2

入力したとおりに出力する問題。
今までやった復習で、アンパックの方法を使って。

“`py
M = int(input())
for _ in range(5):
A = map(int,input().split())
print(*A)

“`

アンパックを使わない方法だと

“`py
M = int(input())
#配列作成
A = [[0] * M for _ in range(5)]
#配列に入力データを入れる
for i in range(5):
#別に単次元の配列を作成してそれに1行のデータを入れる
values = input().split()
#用意した配列に単次元の配列の要素ごとに格納していく
for j in range(M):
A[i][j] = int(values[j])

#配列から出力
for i in range(5)

元記事を表示

多次元配列の勉強

配列に関する問題集を解きながら多次元配列の勉強。
一番下の部分は列・行の定義をしっかりしておかないと
混乱しそう。。。

“`py
A = [[1,2,3],[4,5,6],[7,8,9]]
#多次元配列の行数の算出
print(len(A))
#多次元配列の列数の算出
print(len(A[0]))
#各行の行数の出力
for i in range(len(A)):
print(len(A[i]))
#配列i行目j列目の出力
print(A[i-1][j-1])
#各行各列の折返し出力
for j in range(len(A)):
for i in range(len(A[j])):
print(A[j][i],end=””)

if i < len(A[j])-1: print(end=" ") else: print()

元記事を表示

複数GPU環境におけるPytorchでの使用GPU指定に関するTips

cuda環境でコードを走らせようとするとき、モデルやデータをGPUに載せる操作を以下のように記述していることがある。
“`python
model = model.cuda()
data = data.cuda()
batch = batch.cuda()
“`
Google Colaboratoryなど使用できるGPUがそもそも1つしかない場合はこのままで何ら問題はないが、複数GPUを使用できる環境であったり、他人と分担してGPUを使わなければならなかった場合はこのままだと困る場合がある。

## 使用GPUを指定できないと困るケース(例)
* 複数人で共同で使用している環境である場合

例えば`cuda:0`と`cuda:1`がある環境で同時に複数の人が`cuda:0`にアクセスしてしまうと`CUDA OUT OF MEMORY`のエラーが出てきてしまったり、動作が想定よりも遅くなってしまう場合がある。

* 使用すべきGPUが指定されている場合

そのため、研究室などで使用可能なGPUが何台かあって共同利用しなくてはならないときに「○○さんは何番と何番使ってください」と言われ

元記事を表示

【Python】フーコーの振り子の寿命の質量依存性を調べる

# 概要
 フーコーの振り子の寿命の質量依存性を調べた。そのために並列処理を実装した。結果は質量が20kg以上の時、質量依存性がほとんどなくなった。

# 動作環境
– Windows10(64bit)
– Python 3.7.7

# やりたいこと
 フーコーの振り子の寿命の質量依存性を調べたい。そのためにフーコーの振り子の振幅が10000回連続して0.1m以下になったときの時刻を調べる。
また、並列処理を実装した。

# アルゴリズム
1. ルンゲクッタ法である時刻の振り子の位置を求める。
2. 振り子の振幅を計算する。
3. 振り子の振幅が0.1m以下だったらcountを1増やす。振り子の振幅が0.1m以上だったらcountを初期化する。
4. countが10000に達したときの時刻を取得する

以上のアルゴリズムを並列処理する。

# プログラム
“`Python
import numpy as np
from mpmath import pi
from mpmath import exp
from mpmath import sin
from mpmath impor

元記事を表示

オルトプラスに入社してやったこと!!その1(PythonでTOMLを使うための仕組み)

本記事は [オルトプラス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/altplus2023) の12/05の記事です。

# はじめに

どうも!!オルトプラスの浦谷(urachooooooo)です

所属は技術部SREでテックスペシャリストとして横断的にデータベースを見ています!!
肩書きはエンジニアマネージャーですが生粋のDBAです!!

本記事ではPythonについて書いていきます。
それでは5日目のアドベントカレンダー開始しますー!!

# 概要
アジェンダとしては「PythonでTOMLを使うための仕組み」についてです。
こちらについてはサンプルスクリプトを使用して解説していきます。

# 詳細
オルトプラスに入社してからPythonを使用して色々と自動化したりツールを作成したりしているのですが、自分はPythonのコンフィグファイルにTOMLを使用することにしました!!

まずはじめにやったこととして「TOMLを読むための共通モジュールを作る」です。

この共通モジュールを使用することで以降作成

元記事を表示

pyenvに花束を ~任意バージョンのpythonでOpenCV bindingを~

この記事は[OpenCV Advent Calendar 2023](https://qiita.com/advent-calendar/2023/opencv)の5日目の記事です。
他の記事は目次にまとめられています。

pyenvセットアップは、@koooooo氏の[pyenvのインストール、使い方、pythonのバージョン切り替えできない時の対処法](https://qiita.com/koooooo/items/b21d87ffe2b56d0c589b) を参考にさせていただいております。

■ TL;DR: pyenv + OpenCVでもっと自由に!
=====================================
– 任意バージョンをインストールするのに、pyenvが便利です
– OpenCVでpyenv使うには、ちょっと工夫(コマンドライン引数)が必要
– これで古いlinuxでも最新python, opencvが活用できますね!

■ おはなしのはじまり
==================

OpenCVのissue trackerで、「pyenvと組み合

元記事を表示

AWS CloudWatch Metricsのグラフ画像をDiscordに送る(全体ソースコードあり)

# 概要

AWS CloudWatch Metrics でいろいろリソースの状況が確認できますが、Discord に送ることができたら、簡単にスマホでリソース監視ができるので、やってみたいと思います。

# ステップ

## 1. Discord Webhook

Discord Webhook の URL 作成、作ったあとに

:::note warn
https://discord.com/api/webhooks/12345/ABCDE
:::

みたいなリンクが取得できるので、その Webhook URL を使います。

マニュアル:https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks

## 2. CloudWatch Metrics

CloudWatch Metrics にアクセスするして、ほしいグラフを設定してから、Source のタブで直接設定JSONがもらえます。すごく便利な機能でそのまま貼り付けると使えます。もちろん公式ドキュメントもあるので合わせて読んだらもっと理解で

元記事を表示

全要素の出力 (paizaランク D 相当)

https://paiza.jp/works/mondai/array_primer/array_primer__2dmatrix_output_step2

今日はこれ
久しぶりにやったからか、理解があやふやなまま
試行錯誤してこれで正解した。
だがコードを見直すと変だ。。

“`py
li = [[6,5,4,3,2,1],[3,1,8,8,1,3]]
for i in range(len(li)):
for j in range(len(li[0])+1):
if j < len(li[0])-1: print(li[i][j],end=" ") elif j == len(li[0])-1: print(li[i][j]) ``` なるほど。。。要素数の合計を+1したままループしてしまってました。 あと、elifじゃなくてもelseでもよさそう。 ```py li = [[6,5,4,3,2,1],[3,1,8,8,1,3]] for i in range(len(li)):

元記事を表示

要素数の出力 Python3編

https://paiza.jp/works/mondai/array_primer/array_primer__2dmatrix_output_step1

二次元配列の要素数を出力せよという問題。
二次元配列はちょっとPHPでも苦手にしている部分なので、これを機会にしっかり覚えたいところ。

今まで勉強してきたところからこういうふうにしたが
“`py
x = “1 2 3 4 5 6”.split()
y = “8 1 3 3 1 8”.split()
x.append(y)
print(sum(len(v) for v in x))

“`
このときのxをみてみるとこうなるので多分間違えてる気がする。
“`
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, [‘8’, ‘1’, ‘3’, ‘3’, ‘1’, ‘8’]]
“`

答えを見てみると

“`py
li = [[1, 2, 3, 4, 5, 6], [8, 1, 3, 1, 3, 8]]
print(len(li) * len(li[0]))

“`
え、そういうふうな書きかたでよいのか。

元記事を表示

OTHERカテゴリの最新記事