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

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

サーバーサイドのデザインパターン[Decorator Patternの章]

# はじめに
Decorator Patternは、既存のオブジェクトに新しい機能を動的に追加するデザインパターンです。Pythonでは特に、関数やクラスのデコレータとしての用途で頻繁に使用されています。
# Decorator Patternの基本
1. 定義と概要
Decorator Patternは、コアとなるオブジェクトに追加の機能や責務を動的に付加するためのデザインパターンです。このパターンを使用することで、既存のコードを変更せずに、新しい機能を追加できます。

2. メリットとデメリット
メリット
既存のコードを変更しないで拡張が可能。
一般的な継承より柔軟性がある。
機能を組み合わせることが容易。
デメリット
多くの小さなオブジェクトを使うことで、全体のシステムが複雑になる可能性がある。
# 実装例
以下は、コーヒーの注文を想定したシンプルなDecorator Patternの実装例です。

“`python
# コアとなるコンポーネント
class Coffee:
def cost(self):
return 5

# Decorator
cl

元記事を表示

点群データの補正

# 初めに
LiDARセンサなどで3次元空間をスキャンした際に、センサのわずかな設置角度ズレなどによって期待のデータとは異なるデータが取れてしまう場合があると思います。
今回はそんな時に役立つデータの補正方法(の一例)を紹介したいと思います。

ちょっと数学的な用語などはうろ覚えで書いてますので、間違いあればバッシバシにご指摘ください。。。

# 思想
案件によってさまざまだとは思いますが、今回は3次元空間内の床面を基準としてセンサの傾きを補正します。
①スキャンした点群データから床面となる平面を特定する
②特定した平面の方程式(ax+by+cz+d=0)を使って回転軸ベクトルを決定する
③回転軸ベクトルを軸に何度回転させればよいかのずれ角度を計算する
 (平面の法線ベクトルの外積だったっけ?)
④ゴリっと回転させて完了!!

# いざ、実践!!
## 準備
必要なライブラリをインストールしておきます。
“`python
import open3d as o3d
import numpy as np
“`

## ①スキャンした点群データから床面となる平面を特定する
open3d

元記事を表示

ペペロンチーノで学ぶ非同期プログラミングによる並行処理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288125/e142ab3c-379d-069c-50d2-aed4140bd45c.png)

非同期プログラミングについて、イメージだけを超速で掴むための記事を書きました。非同期プログラミングが全くわからない人、具体的には、「`async` `await` ってなに……?」「`for` 文で実行していくのと何が違うの……?」レベルの人を想定しています。

# 非同期プログラングって何?

 **同期的じゃないプログラミング**です。同期的ということは、プログラムが上から下に順々に実行されるということです。つまり、普通のプログラムはだいたい同期的です。言い換えれば、非同期プログラミングは順番が入れ替わる(可能性)のあるプログラムです。なぜそんなことをするかについては後述します。

# ペペロンチーノを作りたい

 あなたはペペロンチーノを作りたいとします。以下のタスクが必要です。

– パスタを茹でる(5 分)
– ニンニクを切る(1 分

元記事を表示

Pipenvの使い方

# Pipenvとは
プロジェクトごとに自動で仮想環境を作成し、仮想環境ごとにパッケージ管理を行うことが出来るライブラリ。
他のプロジェクトに影響させることなく、そのプロジェクト専用の環境を作ることが出来る。

# 実行環境
– windows10
– python 3.8.7

# 事前準備
– pythonのインストール
[公式サイト](https://www.python.org/downloads/windows/)から必要なバージョンを選択してダウンロードする。
ダウンロードファイルを実行し、セットアップウィザードに沿ってインストールする。

– pipのインストール
ターミナルでpip –versionとコマンド実行し、バージョン番号が表示されればOK。(Python3.4以降は標準搭載)
“`:ターミナル
pip –version
実行結果:pip 20.2.3 from c:\users\***\.pyenv\pyenv-win\versions\3.8.7\lib\site-packages\pip (python 3.8)
“`

# Pipenvをインス

元記事を表示

【Python】sounddeviceモジュールを用いたwavファイルの再生

# 概要
Python でwavファイルを再生する方法をメモしておきます。
PyAudio などを使用する方法もありますが、今回は sounddevice モジュールを使用します。

# ファイルの読み込み・再生
今回は wave モジュールではなく、 “`scipy.io.wavfile“` を使用し、ファイルを読み込みます。
“`sd.play(data, sampling_rate)“` でファイルを再生します。

“`python: test.ipynb
import scipy.io.wavfile as wav # 今回はwaveモジュールではなくこれを用いる
import sounddevice as sd

wav_file_path = “./wav/test_sound.wav” # ファイルのPath
fs, data = wav.read(wav_file_path) # サンプリング周波数(fs)とデータを取得
sd.play(data, fs)
“`

“`sd.play(data, fs)“` 中の “`fs“` はは省略できるっぽいん

元記事を表示

ChatGPT で Python プログラミング ケーススタディ:graph convolution network (GCN)

「ChatGPT で Python プログラミング ケーススタディ」、今度は graph convolution network (GCN) について、ChatGPTとチャットしながらちゃっちゃとPythonプログラミングしてみました。それでは、ChatGPTとの会話を楽しんでください!

### **user**:

graph convolution network における畳み込みがどのように行われているかが理解できるようなPythonコードを書いてください。

### **assistant**:

以下の例は、Pythonを用いてGraph Convolution Network (GCN)における畳み込みがどのように行われているかを誉めるコードです。ここでは、PyTorchとDGL (Deep Graph Library)を用いており、具体的な手順は以下の通りです。

1. 必要なパッケージをインポート
2. Graphを作成
3. Node featureを初期化
4. Normalizeするための関数を定義
5. GCN layerを定義
6. GCN mo

元記事を表示

【Python】waveモジュールを用いたステレオwavファイルの作成と出力

# 概要
Python でステレオwavファイルを作成し、出力する方法をメモしておきます。

今回は、
* サンプリング周波数: 44100 Hz
* ビット深度: 16bit
* チャンネル数: 2 (ステレオなので当然)

のデータを作成します。

# ファイルの作成
例として、左からAのサイン波、右から2オクターブ下のAの矩形波が聞こえるようなデータを作成します。

**インポート**

“`python
import numpy as np
import wave
“`

**データ作成にあたり、便利な関数を定義**
“`python
# sec を時間軸に変換する関数
def frac_t(sec, samplerate):
return np.arange(int(sec * samplerate)) / samplerate

# サイン波を定義 (A:振幅, f:周波数, t:時間)
def sin_wave(A, f, t):
return A * np.sin(2 * np.pi * f * t)

# 矩形波を生成
def sq_wave

元記事を表示

【Python】高速で省メモリな新しい日本語全角/半角変換モジュール Habachen

## はじめに
日本語の全角/半角を相互変換する Python のライブラリやスニペットは様々なものが公開されています。 Pure Python のライブラリですと、 [jaconv](https://github.com/ikegami-yukino/jaconv/) が有名ですね。最近だと、 [Utsuho](https://github.com/juno-rmks/utsuho/) が活発に開発されているようです。異字体セレクタも考慮されている点が、これまでのライブラリには無かった特徴だと思います。

ネイティブ拡張を使った CPython 用の高速な日本語の全角/半角変換モジュールと言えば、 [mojimoji](https://github.com/studio-ousia/mojimoji) が挙げられますが、 [issue](https://github.com/studio-ousia/mojimoji/issues/21) が立てられてから1年以上アクティビティがないということもあり[^1]、文字コードの勉強も兼ねて自分で同等のものを実装してみることにしたのですが、そ

元記事を表示

任意の確率分布でベイズ分類機を作る

# やりたいこと

scikit-learnのnaive_bayesにはいくつかのモデルが実装されていますが、それ以外の確率分布、特にKDEでフィットした経験分布を用いてベイズ分類機を作りたい。

# やり方

基本的には以下の通りです。

– $C$: class
– $X$: 観測値

“`math
C^* = \mathrm{argmax}_C P(C)P(X|C)
“`

任意の形の$P(X|C)$を利用できるようにできるだけ汎用的に作りたいのでこれを抽象クラスにしてAPIだけ定義し、それ以外の部分を実際に実装します。`fit`で観測データからパラメータを推定し、`pdf`で確率(密度)を返します。

## 分布抽象クラスのAPI

“`py
from abc import ABC, abstractmethod
from typing import Self

from nptyping import Float, NDArray, Number, Shape

class Distribution(ABC):
@abstractmethod
de

元記事を表示

Jupyter Notebookの.ipynbファイルを印刷プレビューと同じレイアウトでPDFに一括変換する方法

# はじめに
“`jupyter Notebook“`はデータサイエンスのプロジェクトや研究で頻繁に使用されるツールです。

このノートブックを“`PDF“`に変換する必要がある場面も多く、そのためのいくつかの方法が提案されています。

しかし、これらの方法にはそれぞれ課題があります。

この記事では、それらの方法と課題を概観し、新しい効率的な変換方法を紹介します。
**特に、複数の“`.ipynb“`ファイルを一括で変換する場合や、数式を含むノートブックを変換する場合に本記事の方法は役立ちます!!**

# これまでの変換方法とその課題
## 1. jupyter nbconvert コマンド
### 方法
“`nbconvert“`を使用して、“`Jupyter Notebook“`を直接“`PDF“`に変換します。
この方法は、“`.ipynb“` ファイルを中間の “`.tex“` ファイルに変換し、次にこの “`.tex“` ファイルを“`PDF“`に変換するという手順で動作します。

### 課題
– **LaTeXの依存**
この

元記事を表示

ChatGPTでデータベース操作をやってみた

# やったこと
ChatGPTでSQL操作をして従業員データベースを作成したので備忘録としてメモ。

# 目次
1. SQLiteの基本操作
2. pythonによるデータベースの操作プログラムを作成
3. 従業員データベースを作成
4. 所感
5. 参考文献

## 1. SQLiteの基本操作
データベースでは以下の操作が基本操作。
– テーブルの作成(CREATE): テーブルを作成する
– 書式例:CREATE TABLE テーブル名(カラム名1, カラム名2, …);
– テーブルの挿入(INSERT): テーブルにレコードを挿入する
– 書式例:INSERT INTO テーブル名 VALUES (カラム名1, カラム名2, …);
– テーブルの更新(UPDATE): テーブル内のレコードを更新する
– 書式例:UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, … WHERE 条件式;
– テーブルの削除(DELETE): テーブル内のレコードを削除する
– 書式例:DEL

元記事を表示

古めのWSLに pandas をオフラインインストールする

# 結論

サンプルコード

“`bash
python -m pip install –no-index pandas-1.1.5-cp36-cp36m-manylinux1_x86_64.whl pytz-2023.3.post1-py2.py3-none-any.whl numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl python_dateutil-2.8.2-py2.py3-none-any.whl six-1.16.0-py2.py3-none-any.whl
“`

WSLの Ubuntu 18.04 LTS (bionic) には、上記で入りました。

# ダウンロード
PyPI (Python Package Index)は、pip する際の参照先でパッケージを配布している所らしいです。

https://pypi.org/

whl というファイルが pip でのパッケージファイルのようです。
pandas のwhlを検索してダウンロードしておきます。また、インストールしようとすると依存関係でエラーが出るので、必要なパ

元記事を表示

【執筆中】【Python/GUI】Tkinterのチュートリアル

# はじめに
PythonのGUIライブラリの一種である「Tkinter」について解説しています。
皆さんも一緒にTkinterを使いこなして、パイソニスターに近づいていきましょう。

# 環境
私が動かした環境は次の通り。

* Windows11 Home
* Python 3.9.9

# Tkinterって何ぞや?
Pythonで扱うことのできるGUIライブラリの一種です。最大の特徴は、Pythonさえインストールすればデフォルトで入っており、環境構築をする必要が無いところです。

そういう意味では、最も手軽に使用できるGUIライブラリとも言えますね。

ただ弱点もありまして

* デザインツールがほとんどない(「Page」くらいしか無い)
* 近代的なデザインに対応していない(最近はCustomtkinterが出てきてオシャレなGUIがある)

という点が挙げられます。ですが、ゆるっゆるなライセンスで、色々なUIが作れるという点で私個人としては最強のGUIライブラリだと思っています。

# ウィンドウ
とにかくココから。
GUIのすべての基礎となるウィンドウの解説になります。

元記事を表示

paddleocrのdemo

今回は、paddleocr利用して、OCR Demoを作成します。
![result.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554924/33e7d9d9-985b-45d1-0255-1c4d9990f775.jpeg)

# 開発環境
Mac OS X
Python 3.11.5

# library インストール
“`bash
brew install swig
“`

# 仮想環境のアクティベート

“`bash
% python3 -m venv venv
% . venv/bin/activate
“`

# python lib インストール

“`bash
pip install paddlepaddle
pip install paddleocr
“`

# 実装
“`python
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image

ocr = PaddleOCR(use_angl

元記事を表示

Raspberry PiとNFCでスマートフォンでタッチするとリクエストを送るようにする

![IMG_3137.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/418022/00f3b6ae-f700-f661-ee98-d16e6ac865a2.jpeg)
# 必要なもの
**Raspberry Pi 2 model B v1.2**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/418022/a221d92d-1f44-3063-abb2-a0210c58aa35.png)
**PaSoRi RC-S380**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/418022/06e3d2b6-e9ca-ba89-2be7-b2237fbb8064.png)
**TP-Link TL-WN725N**
(Raspberry Pi 2 model BにWifiが搭載されていないため)
![image.

元記事を表示

不定積分の三角関数(sin,cos,tan)の早見表「List of integrals of trigonometric functions」をつくりたい。sympyで

– 表と言いながら、罫線はありません。(いつの日か、markdown表で)
– ソースコードあります。**約分?通分?log?** 色々あります。(勉強中)
– mathematicaにありますか?

# wikipedia

https://en.wikipedia.org/wiki/List_of_integrals_of_trigonometric_functions

https://ja.wikipedia.org/wiki/原始関数の一覧#三角関数を含む積分

# (勉強中)早見表 ver0.1
– sin,cos,tanの(4乗)から(-4乗)までです。
– 記号はxです。wikipediaの記号にしました。
– 確認できた式の行に、◎をつけています。
“`
# ∫sin(x)^( 4)dx = 3*x/8 – sin(2*x)/4 + sin(4*x)/32
# ∫sin(x)^( 3)dx = cos(x)**3/3 – cos(x)
# ∫sin(x)^( 2)dx = x/2 – sin(x)*cos(x)/2
# ◎ ∫sin(x)^( 1)

元記事を表示

(Python)スクレイピングの手順を簡単にまとめた

## スクレイピングとは

スクレイピングとはWebサイトからデータを抽出する手法のこと。

そのため、**HTMLの構造を把握して目的のデータのみ抽出する条件を指定**することがスクレイピングの主な作業になります。

### 事前準備

#### インストールするライブラリ
“` python
requests
Beautiful Soup
lxml
“`

#### requests
requestsはURLを渡すことで目的のWebページを直接取得できます。

#### Beautiful Soup
取得したWebページを解析して、目的のデータを抽出するライブラリ。
HTMLタグや属性などさまざまな条件を指定できる。

#### XML
パーサー。
プログラミング言語の構文を解析する役割。

## 実践

### Webページのリクエスト

“`python
r = request.get(URL)

print(r.txt) #レスポンスの内容
“`

requestはもう使わない。

### Beautiful Soupオブジェクトの作成

HTMLを取得できたら

元記事を表示

Selenium WebDriverを調べたからまとめる

## Selenium WebDriverを調べたからまとめる
まず、
私はPythonしか使えませんので、
Python視点でSelenium WebDriverを解説していきます。

### 準備
・ChromeDriver
・Seleniumライブラリ

### Selenium WebDriverの基本

二段階のステップに分けることができる。

1. HTMLから対象物の要素を見つける

2. 要素を操作する

これが
Selenium WebDriverの基本ステップ。

では順に解説していきます。

### 1.要素を見つける
HTMLの中から操作対象のタグを見つけること
つまり、操作したいタグの特徴を見つけることが第一歩

要素を見つけたらメソッドを指定すれば、
クリック、入力などが行える。

#### 要素の検索について
要素の検索方法は複数あり、
一つの要素だけを検索するのならfind_elementメソッド
複数の要素であればfind_elementsメソッドを使う。

#### id属性で検索
id属性は要素をいちいに特定できるので一番おすすめの検索法。

元記事を表示

Jupyter-Notebookの.ipynbファイルをコマンド1つでPDFに変換する方法

# 背景
Jupyter Notebookは学術研究から業務のデータ分析まで幅広い場面で使用されています。その成果や分析結果を他者と共有する際、PDF形式はその汎用性と一貫した表示により非常に役立ちます。

# 本記事のメリット
Jupyter Notebookの.ipynbファイルを **コマンド1つ** でPDFに変換できるようになります。

# 環境構築
PDFに変換するための手順と必要なツールについて詳しく解説します。

## 1. Jupyter Notebookのセットアップ
.ipynbファイルを変換するためのツールをインストールするためにAnacondaが必要です。

### インストール方法:
[Anacondaの公式サイト](https://www.anaconda.com/download)から、、Anacondaをインストールします。
詳細は省きます。

## 2. ライブラリのインストール

### nbconvert
nbconvertは、Jupyter Notebookの内容を様々なフォーマットに変換するための便利なツールです。

**役割**
– ipy

元記事を表示

DjangoでRedisを使う理由を簡単にまとめた

## DjangoでのRedisの利用

DjangoでRedisを利用されるときは主に以下の目的で利用される。

### 1.キャッシング
Redisは、ウェブアプリケーションのパフォーマンス向上に
キャッシュとして使われることが多い。
DBへのクエリ結果とか、検索結果などをキャッシュしておいて、
次回同じデータが必要になったときに高速にアクセスできるようにする。

### 2.セッションストア
Redisは、ユーザーセッションデータを保存するセッションストアとしても使用される。
これにより、ユーザーがウェブサイトにアクセスするたびにその状態を維持することができる。

### 3.メッセージブローカー
Redisは、メッセージブローカーとしても使用され、
アプリケーションの異なる部分や異なるアプリケーション間でメッセージをやりとりするのに役立つ。
これは、リアルタイム機能やバックグラウンドタスクの処理に使用される。

## ChannelsのバックエンドにRedisを使う

これに関しては別の記事で解説しました。
気になる人はそちらもチェックしてみて下さい。

[Django]

元記事を表示

OTHERカテゴリの最新記事