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

Python関連のことを調べてみた2023年01月22日
目次

ABC285回答メモ

0.はじめに
 Aがいきなりめんどい感じの問題で、これは・・・と思っていたら
 C、Dも難問で24時から仕事(在宅)ということもあり
 早々に終了してしまいました。

1.A – Range Swap
  面倒なだけで難しくはなかったのですが、Aにしては30行もかかってしまいました。

 考え方
  1)リストAを頭から見ていき(添え字i)、iがP-1の時、A[i]とA[R-1]と入れ替えてフラグを立ててカウントに1プラス。
  2)フラグが立っていたら、A[i]とA[R+カウント]と入れ替えてカウントに1プラス。
    →i=Q-1だったらフラグOFF
  
  と最初しましたが、P=Qの時うまくいかなかったので、1)の処理の時P=Qだったらフラグを立てないようにしてAC

 pythonの解答例はめちゃくちゃ短かったですが・・・。

 https://atcoder.jp/contests/abc286/submissions/38200374

2.B – Cat
  Aより簡単じゃないの??と謎に思いつつ回答

 考え方
  Sを頭から回答文字列に転記していき、転記した文字

元記事を表示

JavaScript行きついた結論(3)

前回の続き。。。
以下のソースをJavaScriptのフレームワークを変えて、VERCEL上にデプロイしてみた。

https://qiita.com/EasyCording/items/3643c482b29c87841207?fbclid=IwAR2uj27eSoLL-gVjx7lLCNPN0qf5U99aLDa8V-uj3CBobtBQhTlMOycUzrg

# React / Next / Parcel

(REACT) https://create-react-app-yamap-y6hp.vercel.app/
(NEXT) https://nextjs-yamap.vercel.app/
(percel) Staticデータの保存先がよく分からずに、結局、PARCELは動かなかった。

# 結果
若干だがREACTよりも、NEXTの方が読み込みが速かった。

# 結論
やはりNEXT.JSで開発を進めることにした。

元記事を表示

Playwright テストコード並列実行時のワーカー別ログ出力方法メモ

* `Playwright`+`pytest-xdist`で並列ブラウザアクセスした際のノード(ワーカー)別にログ出力する方法についてメモする。

## コード

* `test.py`

* `Playwright`公式サイトにアクセスし、`title`要素の確認を行う。
* `pytest-xdist`ワーカー別にログ出力を行う。

“`python
from playwright.sync_api import Playwright
import logging

# ワーカー別ロガーを定義する
def _get_logger(worker_id):
logger = logging.getLogger(“logger_{}”.format(worker_id))
handler = logging.FileHandler(filename=”test_{}.log”.format(worker_id))
handler.setFormatter(logging.Formatter(“%(asct

元記事を表示

pytest-xdistを用いたPlaywright テストコード並列実行方法 メモ

* ブラウザテスト用ライブラリ`Playwright`で作成したコードをテストライブラリ`pytest-xdist`で並列実行する方法についてメモする。

## 事前準備

* 並列実行用ライブラリ`pytest-xdist`をインストールする

“`shell
pip install pytest-xdist
“`

## コード

* テストコード`test.py`

※Playwright公式サイトにアクセスし、ページタイトルを確認するコード

“`python
from playwright.sync_api import Playwright

def test_parallel(playwright: Playwright):
browser = playwright.chromium.launch(headless=True)
page = browser.new_page()
# ページアクセス
page.goto(‘https://playwright.dev/pytho

元記事を表示

Pythonでの音声信号処理 (8) 波の解析の一歩

## やりたいこと
波形データを解析するための理屈的な側面を整理すること

## やってみた
### 波形データの一般形
波のデータは、色々なsin波を合成したもの。
sin波といっても、大きさが違うもの、周波数が違うもの、ちょっと横にズレた(いわゆる位相が違う)ものなどがある。

位相がずれたsin波は、sinとcosの和で表現できる。
つまり、
sin(x + φ) = A・sin(x) + B・cos(x)
のように書くことができる。

このことから、どんな波形データも、
F = (a1・sin(x) + b1・cos(x)) + (a2・sin(2x) + b2・cos(2x)) + ・・・
のような形で表現できる。

### やりたい解析

sin(2x)の「2」の部分は、いわゆる周波数。なので、a2・sin(2x)でのa2は、「2」の周波数がどれくらいの大きさで入っているかということ。
つまり、波 F に対して、a1、b1、a2、b2、・・・が分かれば、波に含まれている、それぞれの周波数の大きさが分かるということになる。

まずは、この a1、b1、a2、b2、・・・を算出

元記事を表示

Fletを試す(3) – 画面遷移(ルーティング)の調査

# はじめに

PythonでFlutterアプリが作れるフレームワーク「Flet」の検証をしました。
簡単なツールは1画面で済むときもありますが、ある程度のアプリを作るとなると2画面以上になると思います。
そうなると画面遷移が必要になるので、画面遷移(ルーティング)の実装方法を調査しました。

Flet公式サイトにおけるルーティングの説明はこちら。
https://flet.dev/docs/guides/python/navigation-and-routing

参考)過去記事はこちら。

https://qiita.com/donraq/items/5182e3f01bd177bb6ff0

https://qiita.com/donraq/items/043bde2e480d5359261b

# 前提事項

– 「Flet」に関する詳細は省略
– インストール方法、実行方法、デプロイ方法なども省略
– 試した環境
– Windows10
– Python 3.11.1
– Flet 0.3.2

# 概要

– Fletの画面遷移(ルーティング)の仕

元記事を表示

Polarsの処理時間について確認してみた

# 1.Polarsについて
遅ればせながらPythonの新しいデータフレーム形式のPolarsなるものが公開されていたことを最近知りました。
詳しいことは全然わかっていないのですが、ざっくり読んだ限りRustで実装されていて処理速度が速いとのことだそうです。(詳しくはwebサイトをご参照ください。)

https://www.pola.rs/

Pythonだと軽いデータではpandasで処理することが多いかと思いますが、pandasと比較してどれくらい速いのか気になったので、いくつかの処理について処理時間を確認してみました。(今回は「サンプリング」「要約統計量」「ソート」「横結合」の4つの処理時間について確認してみました。)
どれくらいの差が見られたのか忘れそうなのでメモしておこうと思います。

# 2.ライブラリのバージョン
使用しているライブラリのバージョンは下記のとおりです。
“`python
In[1]:from sklearn import datasets
import pandas as pd
import polars as pl

元記事を表示

標高差を考慮した本当の距離を算出してみた

## はじめに
本記事ではある地点からある地点までの距離を求める際に、標高を加味した本当の距離を算出します。通常のMap上に表示される距離は標高差を考慮していない距離だと思われます。(もし違ったらすみません。)そこで、本当の距離を出すべくスタート地点からゴール地点までの標高差を考慮しながら距離を算出してみます。

今回のコードは[ヘルシンキ大学が公開しているGISに関する教材](https://autogis-site.readthedocs.io/en/2021/)を元にしています。
筆者はそちらの教材を勉強した後のアウトプットでこの記事を書いています。
GISについて勉強してみたい方はぜひそちらを使ってみてください。そちらの教材についての質問があればQiitaのコメントで議論させていただけると、筆者も勉強になり大変嬉しいです。

※本記事はGoogle Colab上で使用することを想定しています。ローカル環境でのコード実行時には事前に必要なライブラリのインストールが必要になります。

## 扱うデータについて
本記事ではスタート地点を立教大学とし、ゴール地点を池袋駅、要町駅とします

元記事を表示

Pythonでの音声信号処理 (7) 色々なデータを鳴らす

## やりたいこと

ノコギリ波や矩形波などを鳴らしてみる

## やってみた

### ノコギリ波
#### ノコギリ波の再生
“`p7_1.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = True

from multiprocessing import Process
import time
from pydub import AudioSegment
from pydub.playback import play

from Grp import Line
import Dummy as dmy

def main():
smpl = 44100 # サンプリングレートは44.1KHz
sec = 1 # 1秒分

# ノコギリ波
wav1 = dmy.makeWave(1, smpl, sec, 0, 0, 1)
for i in range(64):
freq = i + 1
wav1 += dmy.makeW

元記事を表示

dockerでpythonの環境をつくる

“`
docker run -v $PWD:/working -p 8080:8080 –name python -it python:3.10 /bin/bash
“`

元記事を表示

KerasライブラリのMobilenetV2を使った鉄鋼材料の金属組織画像の判定

# はじめに
前回の[機械学習を使った鉄鋼材料の金属組織画像の判定](https://qiita.com/_Moony/items/5d0a1b15204c84d63990)では、機械学習アプリTeachableMachineを使って金属組織の判定を行いましたが、ここではKerasライブラリのMobilenetV2というモデルを使って金属組織の判定を試みます。

# モデルの作成
– 金属組織の画像データは[前回](https://qiita.com/_Moony/items/5d0a1b15204c84d63990)と同じものを使用しました。
– 学習モデルはImageNetで事前学習済みの[KerasライブラリのMobilenetV2](https://keras.io/ja/applications/#mobilenetv2)を使用して、転移学習で行いました。
– TeachableMachineで作成されるモデルのファイルサイズは2.4kBと同程度のファイルサイズになるように学習モデルを作成しています。

以下の①~③のプログラムや学習モデルについてはサンプル画像と一緒にgit

元記事を表示

GPT-3.5 × AWS Lambda × Amazon DynamoDB × Amazon API Gatewayを使ったSlackのチャットボットをPythonで実装する

## 概要

Slack上でGPT-3.5を使用することができるBotを実装しました。GPT-3.5は今話題のChat GPTの基となるプロダクトであり、APIを用いて使用することができます。また、APIを使用すればファインチューニングが可能となるため、その強みを活かしたBotを実装しました。([ファインチューニング](https://en.wikipedia.org/wiki/Fine-tuning)とは意図した出力となるように、既存のモデルに追加で学習させ、モデルのパラメータを調整するプロセスのことです。)
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611951/01c12f89-7dfb-f6c4-4949-c557335bcfcc.gif)

## 設計

全体の設計は以下の画像の通りです。
![スクリーンショット 2023-01-21 18.31.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

DOCKER_HOSTをsshで指定しているときにdocker-pyからDockerサーバーにつながらない(一部のバージョン)

## 起こったこと。
aws-sam-cliからbuildコマンドを呼び出すとエラーが出た

## エラー内容

内容は

“` bash
$ sam build
Traceback (most recent call last):
File “/opt/homebrew/bin/sam”, line 8, in
sys.exit(cli())
^^^^^
File “/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py”, line 1130, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click

元記事を表示

pythonでメモ帳を作ってみた。

## 完成系
![](https://storage.googleapis.com/zenn-user-upload/1d5f25fbf67e-20230121.gif)

## 仮想環境を作成(Windows)
“`
python -m venv memo
.\memo\Scripts\activate
“`

## ライブラリインストール
今回利用するtkinterは標準ライブラリのため、今回特にインストールする必要はありません。

## アプリ作成
### 1.枠組み作成
まずは以下のような中身のないアプリを作成します。
![](https://storage.googleapis.com/zenn-user-upload/4d832e6eff56-20230121.png)
“`python
import tkinter as tk

root = tk.Tk()
root.mainloop()
“`
### 2.文字入力設定
文字を入力できるようにします。
![](https://storage.googleapis.com/zenn-user-upload/06a

元記事を表示

Windows10にPyGMTをインストールする 2023.01版

# はじめに
新調したWindows10パソコンにPyGMTが動く環境をインストールする際に、手順を記録したものを公開。
2023.01.21時点のPyGMTの最新バージョン=0.8.0、GMTバージョン=6.4.0 でインストールしています。

なお、この記事はGMTを使いはじめた学生さんがここに辿り着いた時にも解読できるように書いているつもりです…が、一部端折っていてわかりにくい部分があるかもしれません。悪しからず。

# 参考リンク
[PyGMT公式のInstallingページ](https://www.pygmt.org/latest/install.html)
[PyGMT-HOWTO](https://tktmyd.github.io/pygmt-howto-jp/pygmt.html
)
[PyGMT for Windowsのインストールとテスト](https://estuarine.jp/2019/03/pygmt/)
[WSL2 のインストール,WSL2 上への Ubuntu のインストールと利用](https://www.kkaneko.jp/tools/wsl/w

元記事を表示

【PaddleOCR】Pythonで簡単に日本語OCR_その2(exe化のおまけつき)

## 0. はじめに

私のQiita記事で今でも週間平均閲覧数が多いのが以下OCRの記事ということで、かなり強い需要があることに気づいたので、同じネタだがAIを搭載した`PaddleOCR`を扱うことにする。
※**同じようなレベルのOCRに「EasyOCR」があるが、個人的にはこちらの方が使い勝手がいいと感じてる**

https://qiita.com/ku_a_i/items/93fdbd75edacb34ec610

**本当は話題のexe化ライブラリである`Nutika`を使ってexe化させようと思っていたが、無茶苦茶コンパイル時間かかるし、後でわかると思うがPaddleOCRのexe化が超難しくて断念したのは内緒です…**

– 動作環境
* OS : Windows10 pro
* python: 3.9.6 
* PaddleOCR: 2.6.1.2
* paddlepaddle: 2.4.1
* pyinstaller: 5.6.2
* loguru: 0.6.0

:::note warn
[Python]Classモジュールの中でimport_moduleを利用して処理タイプ毎に動的にモジュールを読み込み実行する

# やりたいこと

Classモジュールの中に処理タイプ毎のモジュールを用意しておき動的に読み込み実行する

## Code

動作確認環境: Python 3.7.10

“`
test.py
test_class/
  ├ __init__.py
  └ func/
    ├ hoge.py
    └ fuga.py
“`

“`python:test_class/__init__.py
from importlib import import_module

class test_class():
def __init__(self, func_type):
self.func = import_module(f”.func.{func_type}”, “test_class”)

def exec(self):
self.func.main(‘test message’h)
“`
Classの中ではimport_moduleを利用して動的にモジュールを読み込む
この時import_moduleはtest_classモジュールからの相対PAT

python(boto3)でS3上のファイルをコピーし、コピー元のフォルダごと削除

# やりたいこと
S3上の対象のファイルを別の場所にコピーして、そのファイルが格納されていたフォルダごと削除したいことがありました。
具体的には、AWS Glueでファイルを新規フォルダに出力した後、そのファイルをリネームして別のフォルダに移動させたかったのです。
S3を扱うboto3のコードは色々と検索でヒットしましたが、ドンピシャのものがなかったので記事にしてみます。

# 前提
以下がコピー元、先のURIと想定します。
少しわかりにくいですが、sampleフォルダの中にあるtest.txtを1階層上に「new_file.txt」という名前にリネームして移動します。その後、sampleフォルダは削除します。

・コピー元のファイル
`s3://sample-bucket/20230121_copy_glue/sample/test.txt`

・コピー先のファイル
`s3://sample-bucket/20230121_copy_glue/new_file.txt`

# 実装
これで動きました。
`sample`フォルダにはファイルが1つしか入っていない前提なので、1つのファイ

1NCE(ワンス)IoT SIMのAPIを使ってデータ残量をAWS QuickSightで可視化してみる

この記事では、2022年10月26日から日本で事業開始した低容量IoT回線、1NCEのSIM回線のSIM管理プラットフォームで無償で使える1NCE APIを使って、各SIMカードの残量データをAWS QuickSight上で可視化する方法を紹介します。

## 1NCE(ワンス)IoT回線プラットフォームとは?
そもそも1NCE(ワンス) IoT回線というもの自体がまだまだ新しいものなので、簡単に特徴をまとめてみます。

> + 1回線当たり一括2,200円(税込)の支払いのみで、最長10年間、500MBまで利用可能(プリペイド式)
> + SIMカード1枚からオンラインで購入可能
> + 日本国内に加えて、140以上の国と地域において追加料金なしでローミングサービスを利用可能
> + SIMカードに加えて、ウェブ上の回線管理ツール(CMP)や、お客さまのシステムとのデータ連携を可能にするAPI、安全にデータを伝送するOpen VPNなどの機能を追加料金なしで利用可能
> + eSIMやIPSec-VPN(各拠点のLANを相互接続する高セキュリティーのネットワーク)などの機能を、有

【AWS】Lambdaにフロント側からデータを渡す

# 背景
AWS LambdaでAmazon Cognitoのメールアドレスや電話番号を変更時にフロント側から送られてくるデータを使用して重複チェックをしたい時があって、少しつまづいたのでどうにかできないかということがありました。

変更のタイミングでAmazon Cognito側のLambdaトリガーを使って実装していたのですが、トリガー発火した時のeventの中身には登録されているAmazon Cognitoのユーザープールのデータが取れるので、フロント側から変更したデータは得られていないことが発覚。

API Gatewayをトリガーにしたらデータも取得できるので可能ですが、今回はAmazon Cognito + AWS Lambdaでの実装が必要だということだったので、別の方法が必要でした。

# 解決方法
今回はフロント側からAmplifyのAuthを使用した方法で変更のデータが送られるので、そのときに**ClientMetadata**を送信することで対応しました。

ただ、状況によってはClientMetadataの使用が非推奨のこともあるので、実装する際は要件などに気を