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

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

Misskeyに定期投稿するbotをAWS LabmdaとEventBridgeで作る

# はじめに
サクッと作れます。
「イベント開催時までのカウントダウンをしてMisskeyを盛り上げたい」などにお役立てください。

## 技術
Python
AWS lambda
AWS EventBridge
## 作業手順

1. misskeyでAPIキーを取得する
1. Lambdaにアップロードするファイルを作る
1. Lambdaの実行環境を整える
1. EventBridgeで定期実行設定
1. Lambdaにファイルをアップロードして動作確認

# 制作
## 1. misskeyでAPIキーを取得

1. 設定 > API >アクセストークンの発行を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505609/6280c2db-292b-7e68-f3c9-fc3ce45f2fe2.png)

2. 全部許可しちゃう(適宜必要なものを許可すれば良い)
![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

llama-cpp-pythonのインストールの仕方

## 前提条件
Windows11に対するllama-cpp-pythonのインストール方法をまとめます。

## 目次
・環境構築
・インストール
・実行

## 環境構築

1. CMakeのダウンロード

[CMake](https://cmake.org/download/)

![スクリーンショット 2024-01-20 141140.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634370/a23ef75f-f401-4ae1-7c8a-4ad6b0875edb.png)

上記の画像の赤枠の欄からCMakeをダウンロードし、Cドライブの直下に配置する。

2. 環境パスを通す

![スクリーンショット 2024-01-20 141715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634370/5f0f7dc8-4f23-39b0-24ca-59a97fc11ec0.png)

![スクリーンショ

元記事を表示

llama-cpp-pythonをつかったサーバーの立て方

## 前提
llama-cpp-pythonを既にインストールしている

## サーバーの立て方
“`
python -m llama_cpp.server –model model/ELYZA-japanese-Llama-2-7b-instruct-q5_K_M.gguf
“`
モデルのPathを指定する関係から、llama.cppフォルダから起動する。
モデルの指定を絶対パスにすればどこからでもイケる

## サーバーへのアクセス
“`
curl -X POST http://localhost:8000/v1/chat/completions -H “Accept: application/json” -H “Content-Type: application/json” -d @request2.json
“`
@request2.jsonでプロンプトをJson形式で保存してある。

## Jsonの形式
“`
{
“messages”: [
{
“content”: “あなたは猫又の「にゃこ」です。
にゃこは猫

元記事を表示

Pythonで行う音楽ファイルのノイズ除去と可視化

![スクリーンショット 2024-01-20 151353.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3364428/d452d080-326d-7c85-7bc3-20c82fc7202c.png)

# 最初に
音楽ファイルからノイズを除去することは、オーディオ信号処理における重要なスキルです。今回は、https://www.music-note.jp/bgm/fantasy.html
のフリーBGMのファイル “adventurers.wav” を使って、高速フーリエ変換でのノイズ除去とそのプロセスを紹介します。
# フーリエ変換とは?
フーリエ変換は、信号を時間領域から周波数領域に変換するための数学的な手法です。これにより、信号を構成するさまざまな周波数成分を分析できます。フーリエ変換の基本式は以下のようになります:

高速フーリエ変換(FFT)
![スクリーンショット 2024-01-20 131551.png](https://qiita-image-store.s3.ap-northe

元記事を表示

[Python] 競プロをきっかけにアルゴリズムを勉強し始める – 再帰 [Paiza]

:::note warn
この記事は第3回目です。このシリーズの概要と前回までの内容は以下の記事になります。よければそちらもお読み下さい。
内容は Python 100% です。

– [その1 : イントロダクション](https://qiita.com/nozomiyamada/items/4dcdd9d9aaeed07895ca)
– [その2 : スタックとキュー](https://qiita.com/nozomiyamada/items/14f6f781bead82fe95ea)
:::

# 再帰

プログラムにおける **再帰 recursion** とは、ある関数がその定義の中で参照されているものを言います。この辺の説明は例の如く、他の良記事にお任せするとしましょう。こちらの説明は非常にわかりやすいと思います。

https://qiita.com/drken/items/23a4f604fa3f505dd5ad

再帰関数を使うには、

– 終了条件・基底(上の記事で言うベースケース)を明記
– 再帰呼び出しを行うことで、終了条件に近づくようにする(数が小さくなる、範

元記事を表示

微分方程式の数値計算 ウィルソンθ法

## ウィルソンθ法概要
 ウィルソンθ法は線形加速度法の変形版である。線形加速度法は、運動方程式を$(t+Δt)$時点の解を計算しているが、ウィルソンθ法ではそれより先の$(t+θΔt)$時点(ただし、$θ>1$)に適用しているという違いがある。(線形加速度法については[こちら参照][NewMarkBeta])
“`math
\begin{align}
u(t+\theta Δt) &= u(t)+ (\thetaΔt)\dot{u}(t)+\frac{(\thetaΔt)^2}{2!}\ddot{u}(t)+\frac{(\thetaΔt)^3}{3!}\frac{\ddot{u}(t+\thetaΔt)-\ddot{u}(t)}{\thetaΔt}\\
\dot{u}(t+\thetaΔt) &= \dot{u}(t)+\thetaΔt\frac{\ddot{u}(t)+\ddot{u}(t+\thetaΔt)}{2}\\
\end{align}
“`
$(t+θΔt)$時点で満たすべき振動の運動方程式は以下のようになる。質量$m$、減衰$c$、剛性$k$とする。
“`ma

元記事を表示

I made a crawler and collected car parts[Python implementation]

## Reference site
[【Python実装#1】クローラーを作って車のパーツを収集してみた](https://www.youtube.com/watch?v=4AcOyN8E_5Y)

元記事を表示

python 親子を分けて並列でDB処理する

pythonで並列処理する方法を探すと色々情報が出てくるんですが、
親子でファイルを分割して処理させるようなサンプルがなかったので、
メモをしておこうと思います。

▼環境
Python 3.12.1

“`python:ParentJob.py
import concurrent.futures
from ChildrenJob import ChildrenJob

class ParentJob:

def main(self):
res = []
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
def __exe_children_job(tid, val):
o = ChildrenJob()
r = o.main(tid, val)
return r

futures = []
for tid, val in enumerate([“3″,”2″,”1”]):
futures.append(executor.submit

元記事を表示

ハンズフリーカラオケの土台をつくる

## ハンズフリーでカラオケがしたい
料理をしているとき、家で仕事をしているとき、車に乗っているとき、手は離せないけど歌いたい、そんなときのためのハンズフリーカラオケをつくってみたい!
今回は要素技術に着目してプロトタイピングをしてみます。

## どんな機能があれば良いか、要素を整理してみる

このような流れを想定しています。

音声で「カラオケをしたい」と言ったら曲が流れ、マイクで音声を拾い、歌唱力評価の演算をする、という工程です。
1. **音声でカラオケをスタートし曲を流す**
1. **歌声を録音する**
1. **録音した歌を解析し評価する**

## 1.音声でカラオケをスタートし曲を流す
voiceflowで作成します。

https://www.voiceflow.com/

シンプルに「起動→曲再生→終了」と

元記事を表示

PythonでExcelの表にデータ入力する方法をChatGPTに教えてもらう

今回は、ChatGPTに教えてもらいながら、pythonでExcelにデータを入力していきます。

これくらいの内容なら普通に検索した方が早そうですが、練習も兼ねてChatGPTと対話しながら進めていきます。

### 開始

それでは、データ入力の方法からChatGPTに質問していきます。

![スクリーンショット 2024-01-19 222551.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3679771/459a5b7f-911f-f50f-abdb-2543abeae5be.png)
![スクリーンショット 2024-01-19 222602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3679771/854dd904-95ee-dee7-62c1-e01fbdfd9f50.png)
![スクリーンショット 2024-01-19 222617.png](https://qiita-image-store.s

元記事を表示

Jinjaのselectattrが返すのはジェネレータであることにハマった

# あらまし
[Jinja](https://jinja.palletsprojects.com/)の[selectattr](https://jinja.palletsprojects.com/en/3.1.x/templates/#jinja-filters.selectattr)フィルターにハマったのでメモ。

# 困ったこと
~~~ python
import jinja2
params = [
{
‘class’: ‘A’,
‘name’: ‘太郎’,
},
{
‘class’: ‘B’,
‘name’: ‘花子’,
},
]
env = jinja2.Environment()
tmpl = env.from_string(”’
{%- if params | selectattr(‘class’,’==’,’C’) %}
Cクラスの人はいますね
{%- endif %}
”’)
print(tmpl.render(params))
~~~

元記事を表示

軽い気持ちでLINE BOTに手を出してみた~おみくじBOT その1~

あけましておめでとうございます、みやもとです。

早くも新年明けて半月が経ってしまいました。時が経つの早すぎませんかね。
ともあれ、気持ちも新たになんかやりたいな、と気がはやった結果軽率にLINE BOTの作成に手を出したので、その成り行きと内容を記事にしておこうと思います。

:::note
この記事に出てくるコードはGoogle Cloud Functionsで動作を確認しています。
・環境:第2世代
・トリガー:HTTPS
・認証:未認証の呼び出しを許可
・割り当てメモリ:256MiB
・ランタイム:Python 3.8
:::

## おみくじBOTを作ろう~3択編~
今回LINE BOTを作るにあたり、やってみたかったのは
* メッセージに選択肢を含ませる
* 選択肢から何を選んだかで分岐する
* テキストとスタンプを返す

という処理です。

何を作るかちょっと考えた結果、3つの選択肢からひとつ選んでもらい、おみくじを返すBOTになりました。
何かメッセージを受け取ったタイミングで内容に関係なく選択肢を出す押しつけ型になっています。

pythonでbar_chart_raceを使った際に、japanize_matplotlibがインポートできない

## きっかけ
Youtubeで見たことあるグラフを作ってみたい!
なんとなく最後まで見てしまうグラフを作ってみたく、試行錯誤した際にハマったので、困った人用に載せておきます。

## ラベルに日本語を使用し、対応しているjapanize_matplotlibをimportするとエラーが発生
こんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249830/9dca4d4e-9418-44d3-838b-623450f96b5b.png)

“`error
例外が発生しました: ModuleNotFoundError
No module named ‘distutils’
File “C:\xxxxxxxxx\python_project\T0001\T0001.py”, line 3, in
import japanize_matplotlib
ModuleNotFoundError: No module named ‘distutils’

元記事を表示

Core ML モデルのメタデータを編集する

変換元のリポジトリとかライセンスとか書くのに便利

“`python
import coremltools as ct

model = ct.models.MLModel(‘LaMa.mlpackage’)

# Set the model metadata
model.author = ‘https://github.com/advimman/lama’
model.license = ‘Apache2.0 License’
model.short_description = ‘LaMa: Resolution-robust Large Mask Inpainting with Fourier Convolutions.’

# Get the interface to the model
model.input_description
model.output_description

# # Set feature descriptions manually
# model.input_description[‘input’] = “input image of scen

元記事を表示

初心者がGAE無料枠でDiscord BOTを安定動作させるまでのキセキ

# 1.毎週投稿している希望調査を自動化したい
FF14の青魔LSのDiscordで、今週はみんながどのコンテンツに行きたいか?を下みたいな投稿とリアクションでふんわり調査していたのですが、
![スクリーンショット 2024-01-19 183111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3679605/a5f87b91-c884-12de-2d56-71f643eafa60.png)
+ そもそも投稿するのを忘れる
+ 日付が変わるくらいで、あとは毎回同じコピペ
+ リアクションをポチポチするのも地味にめんどくさい
+ 自分の希望をポチできない
+ 投稿を忘れる

ので、自動化したかったのです。
Discord WebHookでGAS(Google App Script)から投稿するのが簡単そう!
と思ったけど、できるのは投稿だけで、リアクションはBOTでなければ難しいらしい。

【むむむ。】

とりあえず簡単に実装できる定期投稿はWebHook+GASで実装できたものの、ポチポチもなんとかし

元記事を表示

関数の代わりにインスタンスメソッドをコールバックさせる

pythonの小ネタです。
### 概要
* 引数にコールバック関数を渡す代わりにインスタンスメソッドを渡すと、そのままコールバックされるし、`self`も参照できる。

情報量はこの一文で全てです。あまりやる機会もなさそうですが、「やったらどうなるのかな」と思う方がいるかもしれないので試して書きます。

### 関数に関数を渡す
関数Aの引数として関数Bを渡して、関数Aの中から関数Bを呼ぶ。いわゆるコールバックですね。標準ライブラリでも沢山使われているのでお馴染みだと思います。

“`python:funcparam.py
def func_caller(func):
“””関数を受け取って呼び出す関数”””
func(‘引数を渡します。’)

def param_func(text):
“””func_callerから呼び出される関数”””
print(text)

# 関数に関数を引数で渡す
func_caller(param_func)
“`
実行結果も何の変哲もない。
“`
$ python funcparam.py
引数を渡します。

元記事を表示

client is using an unsupported version of the Socket.IO or Engine.IO protocolsの対処方法

#### 現象
PythonのFlask socketioを使って、Javascriptとデータのやりとりをしようとしたところ、以下のエラーが発生:
The client is using an unsupported version of the Socket.IO or Engine.IO protocols

#### 確認
エラーが発生した環境の各モジュールバージョン

<Python側>
Flask-SocketIO==5.3.6
python-engineio==4.8.1
python-socketio==5.10.0

<Javascript側>
Socket.IO v2.2.0

<バージョン互換性の確認>
https://python-socketio.readthedocs.io/en/latest/intro.html

#### 原因
過去のコードをそのまま流用したので、JavascriptのSocket.IOとPython環境のバージョンが合ってなかっただけでした・・・。

#### 対応方法

2024年1月現在、Socket.IOのリリース済みバージョン

元記事を表示

Azure Databricks にて Azure Data Factory の Manged ID を Single user access として登録する方法

## 概要

Azure Databricks に Azure Data Factory の Manged ID を Single user access として登録する方法を共有します。私が検証したところ、 GUI で設定することはできず、REST API で設定する必要があるようです。

Azure Data Factory のマネージドID を登録すると、Databricks 上では Service principals として管理されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d0ce7103-e3e3-1c0c-1f8c-b63006c1caed.png)

クラスターの設定画面にて、Application ID を`Single user access`の欄には入力できなかったため、GUI では実施できないと判断しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

pythonでAES暗号化する方法:②Crypto編

# やりたいこと
pythonでAES(共通鍵方式)でパスワードの暗号化・複号化したい

# 前提
・Pythonインストール済み
・PyCryptodome インストール済み

※Cryptoは以前はcryptoライブラリで動いてたのですが、2024/01現時点では、cryptoではもう動けないらしくて、PyCryptodomeでやりました。

※すでにcryptoを入れてる人は、cryptoをアンインストールしないとうまくいけないので、エラーで落ちたらcryptoをアンインストールしてください

# やり方
さっそく調べた内容をソースコードで作りました

CryptoのAESは128, 192, 256 bitなどの鍵を生成でき、CBCやECBなどいろんなモードを対応できるようです。

今回はCBCモードを採用しました!

暗号化複号化するときは、パラメータはbyte形式じゃないとだめなので、b64encodeへ変換しました・

“`ruby:qiita.rb
from base64 import b64encode, b64decode
from Crypto.Cipher i

元記事を表示

pythonでAES暗号化する方法:①cryptography.fernet編

# やりたいこと
pythonでAES(共通鍵方式)でパスワードの暗号化・複号化したい

# 前提
・Pythonインストール済み
・cryptographyライブラリインストール済み

# やり方
さっそく調べた内容をソースコードで作りました
cryptography.fernetは**AES128**で**CBC**モードで暗号化複号化しているらしいです。
暗号化複号化するときは、パラメータはbyte形式じゃないとだめなので、strをbyteへ変換しました・

“`ruby:qiita.rb
from cryptography.fernet import Fernet

# 鍵作成
def create_key():
key = Fernet.generate_key()
print(key)
print(key.decode(‘utf-8’))
return key.decode(‘utf-8’)

# 暗号化する
def encrypt(key: str, data: str):
fernet = Fernet(bytes(key

元記事を表示

OTHERカテゴリの最新記事