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

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

テストの並列実行に使うpytest-xdistの便利な使い方まとめ(主にUIテスト向け)

## pytest-xdistとは

`pytest-xdist`はテストの並列実行・分散実行に使う`pytest`のプラグインです。
これをインストールし、実行時に並列ノード数をオプションとして渡すだけで、勝手にテストを振り分けて実行してくれます。

https://github.com/pytest-dev/pytest-xdist

本記事では`pytest-xdist`を実際に使ってみて分かった便利な使い方、オプションなどをメモとしてまとめます。
なお、私は`pytest`をユニットテストではなく、主に`Selenium`や`Playwright`を使ったUIテスト用途に利用しているため、それに特化した内容になっていることをご承知おきください。
内容は随時更新します。

https://pytest-xdist.readthedocs.io/en/latest/index.html

## インストール

> pip install pytest-xdist

## テストの並列実行

> `pytest -n 4 test.py`

`-n`のあとにテストを並列実行するノード

元記事を表示

FastAPI development with Jupyter notebook

とある仕事で、Fastapiを書くことになった。
ただし、他のメンバーがWEBサーバーの素人
もちろん、PythonはJupyterで書くことしか知らない

# JupyterでFASTAPIを動かす
以下はToken付きでFileアップロードするコード

“`test.py

from fastapi import FastAPI, HTTPException
from fastapi import FastAPI, File, Form, UploadFile
from peewee import SqliteDatabase, Model, AutoField, CharField, TextField

SECRET_KEY = “4qbqcd_iqxk-y6(gr8l^9elsr1acj+t7zohf7v8reqp&^e7%6p”

db = SqliteDatabase(‘db.sqlite3’)

class User(Model):
id: int = AutoField(primary_key=True)
name: str = CharField

元記事を表示

手書き数字認識アプリ with Swift

# 概要
– 手書き数字(1 ~ 9)を認識するアプリケーションの開発

– **GitHubURL**
> https://github.com/Takata1124/mnist_keras

# 1. 開発環境

– Xcode (13.2.1)
– GoogleColaboratory

# 2. 構築
STEP1:手書き数字の認識のCoreMLモデルを作成
STEP2:StoryboardでUIを作成
STEP3:手書き文字を画像として保存する
STEP4:保存した手書き文字画像をCoreMLモデルで認識出力


# 3. CoreMLモデルの作成
### FrameworkとLibraryのインストール
“`swift:/Keras_to_mlmodel_new.ipynb
pip install keras==2.2.4 tensorflow==2.3.0 coremltools==5.1.0 pillow==7.0.0 h5py==2.10.0
“`
### 必要なモジュールのインポート
“`

元記事を表示

SlackのBolt(Python)を使ってChatOpsしようとしたら割と苦労した

今や一家に一台のSlackですが、やはりSlackを使う以上はChatOpsしないといけないよね、
ということでナウいBoltを使ってSocketModeで実装してみました。

# Slackの設定
まずSlack側でBoltを使う準備をしなければなりません。
割とやることがあるので、詳しくは[公式ページ](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started)をみて頑張って下さい。

手順を掻い摘んで書くと、

– https://api.slack.com/apps にアクセス
– `Create New App` or `Create an App` をクリック
– モーダルが表示されるので `From scratch` をクリック
– `App Name` を入力して作成先のWorkspaceをリストから選択したら `Create App` をクリック
– 左メニューの`Features -> OAuth & Permissions`をクリック
– 画面を下にスクロールし、`Scopes`にて`Add an O

元記事を表示

【SIGNATE】第19回_Beginner限定コンペに参加した話

## 参加理由
機械学習をちょっとかじったものの、使いこなせるレベルでは全然ないなと。 

機械学習をもっと使えるようになりたい⇒レベルを上げるにはとりあえずコンペに参加したらいいのでは?⇒いきなり難しいと撃沈するから初心者向けに出よう、という流れで標記のコンペに参加しました。

https://signate.jp/competitions/576

## 手法と結果の推移
こんな感じ。6回目で設定ラインを超えることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259951/9c44221e-df27-ddd3-38a3-4799483e5077.png)

証拠画像も。
![キャプチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259951/4ff8d1a3-fd45-588a-ecf0-931022b0b6a1.png)

1回目:ロジスティック回帰?
2回目:SVM?
⇒1

元記事を表示

Python & Selenium で Edge をオプション付きで実行(WebDriver もオプション付きで)

Edge の WebDriver 関連の情報は拾うの大変なので、自分メモ
# pip でパッケージのインストール
“`:pip コマンド
pip install selenium==3.141.0
pip install msedge-selenium-tools==3.141.4
pip install webdriver-manager==3.4.2
“`
`Anaconda`はライセンスの関係で、使いません
今は改善されてるかもしれませんが、少し前?まで、最新の`selenium`と最新の`webdriver-manager`の組み合わせでエラーが起きていたので、バージョンを指定したほうが無難
“`:pip コマンド
pip install msedge-selenium-tools selenium==3.141.0
“`
と紹介してるサイトが多いから、`msedge-selenium-tools`も`selenium`のバージョンから受ける影響の大きいパッケージと推測される(未確認)
他の必要なパッケージは、自分で判断して入れてね
# Importの宣言
宣言しないと

元記事を表示

AtCoder ABC241 E – Putting Candies をフロイドの循環検出やダブリングで解く

https://atcoder.jp/contests/abc241/tasks/abc241_e
をダブリングや循環を検出してときます。

– 方法1: ダブリング
– 方法2: 循環を調べる
– 方法3: フロイドの循環検出アルゴリズム : extra空間計算量O(1)

# 1: ダブリング
ダブリングするだけです。ダブリングってなんだろう?という場合は[SlideShareのAtCoder167Dをダブリングで解く](https://www.slideshare.net/AkiraKANAI/atcoder167d-233579952)などを見てください。

ただし、コストを計算する必要があるので、遷移のテーブルとコストのテーブルを持ちます。
costを計算するとき、今、`[loop][i]`にいるときは、`cost[loop-1][i]`に加えて、次の移動先である`nxt[loop-1][i]`を踏むコストである`cost[loop – 1][nxt[loop – 1][i]]`を足すところが少しごちゃっとするかもしれません。

実装(P

元記事を表示

AtCoder Beginner Contest 241 A~C 3完記事

アルゴリズムの学習改善のための自身の備忘録及び学習の一環として記事を書くことにしました.
読んでくれた方で何かありましたら気兼ねなくコメントしてください.お待ちしております.
# [A – Digit Machine](https://atcoder.jp/contests/abc241/tasks/abc241_a)
## 問題文
>1 桁の数字が表示される画面と、ボタンからなる機械があります。
>画面に数字 k が表示されているとき、ボタンを 1 回押すと画面の数字が a
kに変わります。
>0 が表示されている状態からボタンを 3 回押すと、画面には何が表示されますか?
## 制約
>0≤$a_i$≤9
>入力は全て整数である
## 入力
>入力は以下の形式で標準入力から与えられる。
>$a_0 \ \ a_1 \ \dots \ \ a_9$
## 考察
1回目の操作で0 $\rightarrow a_0$
2回目の操作で$a_0 \rightarrow a_{a_0}$
3回目の操作で$a_{a_0} \rightarrow a_{a_{a_0}}$となり、これが答えになる

元記事を表示

Colabで車載カメラ映像からの先行車両検出に関する既存公開手法(YOLOP, YOLO v5s BDD100K)を動かしてみる

# 0.背景
* 車載カメラの画像に対する先行車両検出に関して以下の2つの公開されている手法を使ってみたのでメモとして残しておく。
1. [YOLOP](https://github.com/hustvl/YOLOP)
2. [YOLO v5s BDD100k](https://github.com/williamhyin/yolov5s_bdd100k)
* いずれもとりあえず動かすことを主眼にしている。
* 元々はSIGNATEの[SUBARU 画像認識チャレンジ](https://signate.jp/competitions/563)のために使用した。
* Google Colab + Google drive の環境での動作を前提としている。

# 1. 共通事項
* 車載カメラ映像では [BDD100K](https://www.bdd100k.com/)という大規模なデータセットが公開されている。
* この頁で紹介する2つのモデルはいずれも、BDD100Kで学習されている。
* いずれも[SUBARU 画

元記事を表示

頻出語が一目瞭然 | Word_Cloud | Python | DataViz

WordCloudとは、文章の中から単語を選び出し、その出現頻度によって単語の大きさを変えながら並べる手法です。Pythonのモジュール Word_Cloud を使って簡単に作ることができます。
Githubにも日本語での説明とともにレポジトリを載せていますので是非参考にしてください。
https://github.com/mikoto-studio/word_cloud

この説明では、求人の職務概要に出てくる頻出語を大きく表示させてみます。
デザイン性が高く一覧性に優れた分析がとても簡単にできるので、是非初心者の方にもおすすめです。

![MyExamples_JD1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1409234/72f823be-5e6e-39a1-0db5-d43233d7f45d.png)

準備

pythonバージョンチェック

Python -V

pipのパッケージチェック

pip list

pipからダウンロード:

pip insta

元記事を表示

[Python] takes 0 positional arguments but 1 was givenエラーの解消

### 経緯
Pythonでtakes 0 positional arguments but 1 was givenとエラーが出た。

直訳すると「引数は0のはずなのに一つ渡されている」とのこと。一つも渡していないはずなのに…。

“`python
class Test:
def test_method():
print(“test”)

t = Test()
t.test_mothod() # Test.test_method() takes 0 positional arguments but 1 was given
“`

### 原因と解決方法
Pythonのクラス内で定義した関数を外から呼び出す場合、自動的に第一引数にレシーバーが渡される。それを引き取るための引数を定義してあげる必要がある。慣習的にはselfを使う。

“`python
class Test:
def test_method(self): # selfを追記
print(“test”)
“`

### ちょっと確認
__selfの中には何が入っているのか?__
“`

元記事を表示

Pythonでいい感じに書く

## 背景
最近、Pythonでソースコードを書くようになったのですが、
書き始めて半年ということでまだまだキレイな書き方、
効率的な書き方ができておりません。

一緒に開発しているベテランエンジニアさんのソースコードを見て、
あぁ〜こういう風に書くのか〜、と勉強になったので
メモがてら記事にしてみます。

## 通常のif文
通常は下記のように書きます。
“`
if a == ‘a’:
return True
else:
return False
“`
なんてことないif文ですが、単純なif、elseの場合は
あまりこういう風には書かないようです。

## 1行にまとめたif文
上のif文は1行にまとめられます。
“`
return True if a == ‘a’ else return False
“`
要は三項演算子です。
ただ、JSやPHPなどの言語とは違って最初に(True)の時の処理が来て、
その後に条件式が来るんですよね。
これまでJS、PHPをメインで書いていたので、少し戸惑いましたw

## 通常:for文でlistに追加
続いてはfo

元記事を表示

【Python】injectorでDIコンテナを実装する

個人開発中、依存先が多いクラスをインスタンス化する場面がありました。

その時は依存先を全部インスタンス化→依存元をインスタンス化する時に引数で渡して実装しました。

1度だけなら問題になりませんが毎回この手順で実装する場合、実装の手間が増える上に可読性も下がります。 この問題を解消するためにDIコンテナを採用します。

DIコンテナをざっくりと説明すると、「インスタンス生成時に依存関係をいい感じに解決してくれる仕組み」です。

今回は “`injector“` モジュールを利用してPythonでDIコンテナを実現します。

### 環境

– Python3.8.10
– injector 0.19.0

### injectorの採用理由

– 使用例を理解しやすかった
– 採用事例が多い(体感ですが)
– Pure Pythonだけで完結するため特定FWに依存しない
– 直近のコミットが2021年10月と比較的新しく、今後もメンテナンスが続くと見込まれる

PythonのDI用ライブラリとしてinjectorの他には [python-injector](https://git

元記事を表示

ROS2でyamlファイルからパラメータを設定する。

ROS2ではROS1と同様にノードにパラメータを設定することができます。
ROS2にはROS1であったようなパラメータサーバーはなく、ノード間でのパラメータのやり取りは個々のノードがパラメータサーバーの役割となり、やり取りをするようです。[ROS2のparameter概要 – Qiita](https://qiita.com/NeK/items/556a38782ce65bb81340)
パラメータの設定にはノード起動時にコマンドラインで指定する方法や、事前に用意したyamlファイルから読み込む方法があります。

この記事では個々のノード間でのパラメータのやり取りは考えずに、シンプルにyamlファイルからパラメータをノードに読み込む方法について解説していきます。

この記事は、ROS2での基本的なノードの作成等チュートリアルを完了している人が対象となります。

【参考URL】
[YAMLファイルによるROS2のパラメータ設定 – Qiita](https://qiita.com/NeK/items/15bf1e657d8d694592ed)
[ROS2 YAML For Parame

元記事を表示

Explanation of Evaluation index ‘MAP@5’ in Happywhale – Whale and Dolphin Identification Competition.

![スクリーンショット 2022-02-28 19.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/785665/988cf3d6-9e7e-e84c-5525-3e4122edcb33.png)

元記事を表示

AWS Lambda(Python)から直接画像を出力する方法(覚書)

# SVGを出力したい

特に何も考えずに `Content-Type` だけしっかり指定してあげればOK。

“`Python
return {
‘statusCode’: 200,
‘headers’: {
‘Content-Type’: ‘image/svg+xml’,
},
‘isBase64Encoded’: False,
‘body’: ‘svg version=”1.1″ xmlns=”http://www.w3.org/2000/svg”>…’,
}
“`

# PNGを出力したい

こっちが主題になります。
Pythonで画像を取り扱う場合、何らかのライブラリを使用することになると思いますが、今回はおそらく一番使われてるであろう[Pillow](https://github.co

元記事を表示

Google ColaboratoryからBigQueryを実行する方法

N番煎じ。自分用のメモ。

# クエリを実行して結果を取得

まずはBigQueryのアカウント認証。

“`python
from google.colab import auth
from google.cloud import bigquery

auth.authenticate_user()
“`

画面が起動するので、使用するGoogleのアカウントを選び、「許可」を選択。

次に、BigQueryのproject idを指定。project idはBigQuery上で確認できる。

“`python
PROJECT_ID = ‘xxxxxxxx’
“`

さらに、dataframeとして扱うためにpandasをインポート。

“`python
import pandas as pd
“`

関数も定義。

“`python
def dry_run(query):
client = bigquery.Client(project=PROJECT_ID)
job_config = bigquery.QueryJobConfig()
job

元記事を表示

pythonでMetatrader5からヒストリカルデータをダウンロードする方法

# Metatrader5のダウンロード、設定
1. この[リンク](https://www.metatrader5.com/ja/download)からMetatrader5をダウンロードし、インストールしてください。
1. デモアカウントが存在するか確認し、存在しない場合デモアカウントを作成します。
![create-demo-account.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130763/6844d114-1f83-5fd1-6b73-38957d24ad3b.gif)
3. ツールからオプションを開き、チャートバーに移動します。
3. チャートバーにある一番下のチャート最大バー数のパラメーターをUnlimitedに変更します。
![change-max-bars-in-chart.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130763/28e824a7-73fe-a56f-1b36-c3d4bac

元記事を表示

もし北京オリンピックカーリング女子が、総当たり戦ではなく、敗戦即敗退のトーナメント方式だったら…

## はじめに
まず、この記事を書く前に、北京オリンピック銀メダルに輝いた、カーリング女子、日本代表のロコ・ソラーレに敬意を表しまして、改めておめでとうございます。と申し上げます。
大会開催期間中、2022年2月10日から20日まで、決勝トーナメント進出圏内で、一進一退の攻防で手に汗握る熱戦を、毎日固唾を飲んで観戦しておりました。
無事にカーリング女子、日本代表のロコ・ソラーレが、決勝トーナメントに進出し、見事北京オリンピックで銀メダルを獲得したので、前回の、[もしカーリング女子北京オリンピック最終予選が、敗戦即敗退のトーナメント方式だったら…](https://qiita.com/eclipse-hunter-usa/items/9b2f86d54215bd7418c3) に引き続き、今回も北京オリンピックカーリング女子を題材に、敗戦即敗退のトーナメント方式を試していきたいと思います。
まずは、出場全10チームの総当たり対戦成績表を下記に示します。

## 北京オリンピックカーリング女子の総当たり対戦成績表

| |スイス|スウェーデン|イギリス|日本|カナダ|アメリカ|中国

元記事を表示

Raspberry Pi Pico に CircuitPytnon を使い SSD1306 に文字を表示する

![IMG_1259.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360970/dd177710-02e4-49af-0db9-93784ed16ba4.jpeg)

以下の記事の Raspberry Pi Pico + CircuitPython 版です。

https://qiita.com/tkarube/items/6808538012cba499d5e2

まず Raspberry Pi Pico で CircuitPython が動く環境を作ります。公式ガイドは以下となります。

https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython

Raspberry Pi Pico 上の BOOTSEL とラベルがされたボタンを押しながら PC と USB ケーブルで接続します。 すると RPI-RP2 という名前でストレージが接続されるので以下からダウンロードした UF2 ファイルをダウンロード

元記事を表示

OTHERカテゴリの最新記事