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

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

Python のマジックメソッドをオーバーライドして行列の四則演算を読みやすくする

Python に限らないと思いますが、 Python では print 関数や四則演算、比較等の動作を独自に定義することができます。
これはマジックメソッドと呼ばれ、 `__add__` や `__str__` など、アンダースコア 2 個ずつで囲まれています。
これにより、自分で作ったベクトルクラスに対して `+` を用いた足し算を定義したり、商品クラスに対して print 関数で商品名を出力するようにしたりできます。

マジックメソッドについてはこちらの記事が参考になります。
https://python-course.eu/oop/magic-methods.php

今回は [行列](https://ja.wikipedia.org/wiki/%E8%A1%8C%E5%88%97) クラスを定義し、四則演算等を定義してみます。

なお、この記事では Python のクラスに関する知識を前提とします。

## 行列

行列は、下のように数(や記号や式)たちが長方形

元記事を表示

フロベニウスの硬貨交換問題とその応用

### フロベニウスの硬貨交換問題

[フロベニウスの硬貨交換問題 Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AD%E3%83%99%E3%83%8B%E3%82%A6%E3%82%B9%E3%81%AE%E7%A1%AC%E8%B2%A8%E4%BA%A4%E6%8F%9B%E5%95%8F%E9%A1%8C)という面白い問題を見つけたので紹介します。

> 指定された硬貨だけではぴったり払えない最大の金額を求める数学の問題。
> 例えば、3円と5円のコインだけでは作れない最大の金額は7円。
> 式で書くと、フロベニウス数 $g(3,5) = 7$

### 2個のコインの場合

これは簡単な公式があって

“`math
gcd(a_1, a_2) = 1の時 \\
\large g( a_1, a_2 ) = a_1 a_2-a_1-a_2
“`
例えば、$(a_1, a_2) = (3,5)$の時は$3 \times 5 – 3-5=7$となります。

念のため$a_1x + a_2y $で表せ

元記事を表示

【Python】jupyterでplotlyのクリックイベントを起こす

pythonでjupyter notebook上でplotlyを使ってこんなことが出来ます。
![first.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665792/49e6bf6f-2e6b-41ea-77b6-860a28be9ca3.gif)
plotlyで散布図をクリックしたときに何か起こせないの気持ち悪いなあ、JavaScript使わないとできないの不便だなあ、ということを1年くらい思っていました。Pythonだけでできました。私が知らなかっただけでした。

なかなか便利そうな匂いがしますが、公式のドキュメントにもあまり情報がないみたいです[^doc_example]。ということで、**これを使えるようになることがこの記事の目標です**。
とりあえずコード全体はこちらになります。以下一歩一歩見ていきます。

[^doc_example]: https://plotly.com/python/click-events/ 。こちらはこのドキュメントとほぼ同じ例です。ただし色とデータだけ変

元記事を表示

今年もやりますWiDS Tokyo@IBM 2022開催記念?: Natural Language Understandingを使って今までのWiDS Tokyo@IBMのアンケートコメントを分析してみる

# 今年もやります! 2022年 6/3(金)開催 Women in Data Science (WiDS) Tokyo @ IBM
[2022年 6/3(金)開催のWiDS Tokyo @ IBM](https://widstokyoibm2022.splashthat.com/)は、データサイエンスの分野で優れた活躍をする女性をフィーチャーした、スタンフォード大学による年次カンファレンス[WiDS Worldwide Conference](https://www.widsconference.org/conference.html) の一環として日本IBMで開催する地域イベントです。今年で3回目の開催となります。スピーカーは全員女性です。

ということで、今回はこちらのイベントの宣伝の意味も兼ねて、IBM CloudのNatural Language Understandingを使って今までのWiDS Tokyo@IBMのアンケートコメントを分析してみた記事です。もちろん今年もイベントのセッション内容とは何の関係もありません、、、、いやデータサイエンス誰でもできるよって部分でハー

元記事を表示

オフライン環境: pipでファイルからpythonパッケージインストール

最近、オフラインでpip installすることも増えました。私はLinuxコマンドなどあまり使わないので作業手順をメモしておきます。
以下の手順で実施します。

1. オンライン環境
1. Pythonパッケージダウンロード
1. 圧縮
2. オフライン環境
1. 解凍
1. インストール

# 手順
## 1. オンライン環境
オンラインでPyPIと接続できる環境での作業です。

### 1.1. Pythonパッケージダウンロード
`pip download`でPyPIから必要パッケージをダウンロードします。依存パッケージもダウンロードされます。
ここでは、ディレクトリ`/packages`にPythonパッケージ`shap`をダウンロード。

“`bash
pip download -d ./packages shap
“`

### 1.2. 圧縮
ディレクトリ`/packages`ごとgzipに圧縮し、`archive.tar.gz`というファイルにします。

“`bash
tar cfvz archive.tar.gz ./packa

元記事を表示

OpenSpielで始める強化学習その② – 自作ゲームでCFRを実験 –

# 初めに
## CFRが収束する様子
![policy.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884090/91a461b3-d254-7cf5-606f-f039b8eebbc2.gif)

## OpenSpielとは
https://github.com/deepmind/open_spiel

DEEPMINDが作成した研究者向けの強化学習フレームワークのOSSです。マルチエージェントRLの研究の促進や研究の再現性の向上を目的としています。
主にPythonとC++で書かれていますが、Go、Juliaもサポートされています。
深層強化学習はTensorFlow1、2、JAXとPytorchに対応しています。
最近実験的に[rust](https://github.com/deepmind/open_spiel/tree/master/open_spiel/rust)をサポートし始めているようです。

## 想定される読者
強化学習について勉強してみたいけどまずは動くものを作ってみた

元記事を表示

Excelより情報を取得し、任意のフォルダにファイルを作成する

## 概要
Python勉強中です。
Excelよりフォルダを読み取ってファイルを作成します。

“`
import os
import pathlib
import openpyxl

WORK_BOOK = r”C:\work\it\python\sample_image\sample.xlsx”
TARGET_SHEET = r”test2″
COLUMN_INDEX = 14

wb = openpyxl.load_workbook(WORK_BOOK, data_only=True)
ws = wb[TARGET_SHEET]

for row_no in range(1, ws.max_row + 1):
id = ws.cell(row_no, COLUMN_INDEX).value

if (not id) or (not id is None):
folder_path = (‘.\\’ + str(id))
output_path = pathlib.Path(folder_path + ‘\\output.txt’

元記事を表示

CURLのHeaderやBody(JSON)を指定文字で置換する

# 概要
pthon勉強中です。
curlのテキストを読み込み、header、bodyの任意項目を置換して出力します。

“`
import pathlib
import re
import json

curl_path = pathlib.Path(‘.\\curl.txt’)
output_curl_path = pathlib.Path(‘.\\curl_new.txt’)

# 正規表現
BODY_PATTERN = r”-d \'([^*]*?)\'”
ID = “id”
HEADER_PATTERN = r”-H \'” + ID + “: ([^*]*?)\'”

# ファイルを読み込む
with open(curl_path, ‘r’, encoding=”utf-8″) as f:
with open(output_curl_path, ‘w’, encoding=”utf-8″) as w:
data = f.read()

# Headerを取得
replace_header_pattern = re

元記事を表示

Pythonで歴史年号並び替えゲーム

Pythonで歴史上の出来事を起きた年号ごとに並べるゲームを作りました!
(アイデア参考: https://www.amazon.co.jp/%E3%83%9B%E3%83%93%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%91%E3%83%B3-HobbyJAPAN-%E3%82%BF%E3%82%A4%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%B3-Timeline-%E3%82%AB%E3%83%BC%E3%83%89%E3%82%B2%E3%83%BC%E3%83%A0/dp/B0098W8MOM)
半角数字の入力だけでプレイできます!(※途中で辞めるときには「stop」と入力)
西洋史がかなり難易度が高くなってなってしまいましたので、初見で全問正解できたら相当すごいです!
歴史の勉強にもなると思うので、ぜひ遊んでみてください!
(コードは最下部にあります)

◯ルール説明
デモプレイの画像を使い順を追って説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

YOLOXでゴミ検出をする

# はじめに
物体検出のYOLOシリーズの最新版であるYOLOXを試してみました。
データセットに[TACOデータセット](http://tacodataset.org/)を使用し、ゴミ検出AIをを作るまでの作業を備忘録として残します。

– 環境
OS: Ubuntu18.04LTS
CPU: Intel® Core™ i7-8700 CPU @ 3.20GHz × 12
GPU: GeForce RTX2080
Python: Python3.6.5(Anacondaで作成した仮想環境)
scipy:0.19.0
numpy:1.16.0
keras:2.2.4
matplotlib:2.0.0
opencv:4.2.0
tensorflow-gpu:1.12.0
tqdm:4.11.2
pillow:8.1.0
h5py:2.8.0

# YOLOXのダウンロード
個人的にkerasに馴染みがあるので、[こちら](https://github.com/bubbliiiing/yolox-keras)からkeras版YOLOXをcloneします。
“`
git clone htt

元記事を表示

pythonで長時間の動画を音声付きで再生する

Opencvで動画を再生したい場合、Opencvだけだと音を再生することができない。

音声付きで動画を再生するには、音声を別スレッドで再生する必要がある。

以下の記事で方法が紹介されているが、一度音声をメモリに展開しているため長時間の動画は読み込みの時間がかかり、場合によっては再生できない場合がある。

https://qiita.com/marusoftware/items/02df7f281301de87dbcc

そこでメモリに展開せずに逐次読み込む方法を記載した。
seekを使って任意の時刻から再生可能。

https://python-sounddevice.readthedocs.io/en/0.4.4/examples.html#play-a-very-long-sound-file

https://pysoundfile.readthedocs.io/en/latest/

“`python:BackgroundAudioPlay.py

import queue
import sys
import threading
import sounddevice

元記事を表示

This version of ChromeDriver only supports Chrome version ◯◯な時、君はどうする!?

久々にwebdriverを使おうと思ったら動かなくなったので備忘録です。

久々にwebdriverを使おうと思ったらこんなエラー文が…

“`terminal:terminal
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 99
Current browser version is 101.0.4951.64 with binary path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
“`

簡単に言うと、
「YouのダウンロードしているChromeDriverはChormeのver.99までしかサポートしてないんだけど、Youが使ってるchromeブラウザのバージョンは101で合わんからダメですわ」 ということを言っています。

ここであなたが取れる手段は3つ

元記事を表示

pytorchによる複数の物体検知とその追跡

# 物体検知と追跡
物体検知とは、画像や動画に移ったものが何なのかをオブジェクト事に分類することである。物体検知の一つとして、機械学習の教師あり学習の分類(classification)があり、ラベリングされた多数の画像を学習(アノテーション)して、与えられた画像にあるものがどの学習済み画像と近いのかを計算し分類する。今回は機械学習ライブラリPytorchと物体追跡ライブラリmotpyを使って、以下のような物体検知&追跡のやり方を紹介する。

以下のコードで生成した物体検知&追跡の動画
![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/8509acc5-70a3-2de9-a2ff-ccc0d0048566.gif)

## YOLO
代表的な物体検知の分類アルゴリズムの一つとして、YOLO(You Look Only Once)がある。YOLOは検出窓をスライドさせるようなことはせず、一度のCNN(畳み込みニューラルネットワーク)で検出するリアルタイム物体検知アルゴ

元記事を表示

Kerasで再現可能な結果を得る方法

# 概要
Kerasを使ったニューラルネットワークの学習において、再現性を確保するために苦労したのでその方法をまとめます。
最初に見つけた方法でひとまず目的は達成されたのですが、TensorFlow 2.8.0から実装された簡単な方法もありましたので、そちらも記載しました。

# 環境
– 執筆時点 2022/5/15
– google colab
– Python 3.7.13
– TensorFlow ver. 2.8.0
– GPU Tesla K80, T4

情報に過不足がありましたらご指摘よろしくお願いします。

# 結論
コードだけ知りたい方へ。下記をモデル作成前に追加することで再現が取れました。
“`python: TensorFlow 2.1以降
import os
import random
import numpy as np
import tensorflow as tf

os.environ[‘PYTHONHASHSEED’] = ‘0’
os.environ[‘TF_DETERMINISTIC_OPS’] = ‘1’

np.random.seed(1)

元記事を表示

Pythonで大数の法則と中心極限定理を実装する

# 目次
– はじめに
– 大数の法則の実装
– 中心極限定理の実装
– 終わりに
– 参考文献・記事

# はじめに
以前Qiitaに投稿した記事[「Rで大数の法則と中心極限定理の違いを直感的に理解する」](https://qiita.com/ch-nd/items/7dd89ec4fb4a229d06fc)では、大数の法則と中心極限定理の違いを初学者にもわかりやすく直感的に理解することを目指した記事でした。実装はRで行いました。
本記事は、記事の内容は上記と同様です。しかし、大数の法則と中心極限定理をpythonで実装したものになります。
したがって、本記事はPythonでの実装方法を共有すること目的とします。大数の法則と中心極限定理の解説について、恐縮ですが本記事では割愛させていただきます。
実行環境については、Google Colaboratory上で実装と実行を行いました。

# 大数の法則の実装
“`Python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import ra

元記事を表示

【albumentations】データ拡張による精度向上を検証する

# 目次
1. はじめに
2. データ拡張
3. YOLOv5による学習
4. 結果と考察
5. 所感
6. 参考

# 1. はじめに
物体検知の精度を向上させる方法として、データ拡張(Data augmentation)が存在します。
今回はデータ拡張ライブラリ「albumentations」の習熟もかねて、データ拡張による精度向上の検証を行いました。
使用するデータセットは「Global Wheat Detection」を、物体検出アルゴリズムはYOLOv5を使用します。

### 1.1 Global Wheat Detection とは
「Global Wheat Detection」は画像から麦の穂の領域を検出し、その精度を競うコンペティションです(開催済み)。
[Global Wheat Detection](https://www.kaggle.com/c/global-wheat-detection)
streamlitを用いて開発したアプリをデプロイするまでの手順

私が今勉強しているStreamlitで開発したアプリが簡単にデプロイすることができるようなのでここに記録としてやり方を残しておきます。

# 前準備
①作成したアプリのフォルダの中にrequirements.txtファイルを作成し、その中に使用している外部ライブラリを記入(streamlitなど)
※この際、外部ライブラリのバージョンを指定してあげる必要がある
例:`streamlit==1.3.5`
そのため、ターミナルで`pip freeze`と入力して使用している外部ライブラリのバージョンを確認する

②Githubでリポジトリを作成する
GithubのホームからNewボタンを押して新しいリポジトリを作成する

③ターミナルを開いて以下のコマンドを入力していく
“`
git init //gitの初期化
git remote add origin Githubで作成したリポジトリのURL.git//リモートリポジトリとローカルを紐づける
git add .
git commit -m “first commmit”
git push origin master //アプリがGi

元記事を表示

【AtCoder解説】PythonでABC251のA,B,C,D,E問題を制する!

**ABC251**の**A,B,C,D,E問題**を、**Python3**でなるべく丁寧に解説していきます。

ただ解けるだけの方法ではなく、次の3つのポイントを満たす解法を解説することを目指しています。

– シンプル:余計なことを考えずに済む
– 実装が楽:ミスやバグが減ってうれしい
– 時間がかからない:パフォが上がって、後の問題に残せる時間が増える

ご質問・ご指摘は**コメント**か**ツイッター**、**マシュマロ**、Discordサーバーまでお気軽にどうぞ!

**Twitter: [u2dayo](https://twitter.com/u2dayo)**
**マシュマロ: https://marshmallow-qa.com/u2dayo**
**ほしいものリスト: https://www.amazon.jp/hz/wishlist/ls/2T9IQ8IK9ID19?ref_=wl_share**
**Discordサーバー(質問や記事の感想・リクエストなどどうぞ!) : https://discord.gg/jZ8pkPRRMT**
よかったら**LGTM**

元記事を表示

Python 文字列から特定文字列を取り除く

# はじめに
特定文字列は英語の母音として設定し、取り除く方法を正規表現を使用する/使用しないパターンの2種を紹介します。

# 方法1 正規表現を使わない
入力文字列をforで回し、各文字が特定文字列に合致しないものをjoinで連結する

“`:py
txt = ‘Hello World’
print(”.join(c for c in txt if c not in ‘aeiouAEIOU’))

実行結果
Hll Wrld
“`

# 方法2 正規表現を使う
正規表現パターンで文字列を分割し、リストをjoinで1つの文字列に連結する

“`:py
import re
c = ‘Hello World’
print(”.join(re.split(‘a|e|i|o|u|A|E|I|O|U’, c)))

実行結果
Hll Wrld
“`
ちなみに今回は関数splitでの処理を紹介していますが、subでもほとんど同じようことができます。

正規表現の参考資料:
[Pythonの正規表現モジュールreの使い方(match、search、subなど)](https://no

元記事を表示

パナソニックグループプログラミングコンテスト2022(ABC251) A~C問題 ものすごく丁寧でわかりやすい解説 python 灰色~茶色コーダー向け #AtCoder

パナソニックグループプログラミングコンテスト2022(ABC251) A~C問題の解説記事です。
灰色~茶色コーダーの方向けに解説しています。

その他のABC解説、動画などは以下です。

更新時はツイッターにて通知します。

https://qiita.com/sano192/items/54accd04df62242b70f0

# パナソニックグループについて
本コンテストはパナソニックグループ様が主催されています。
社内競プロerにインタビューした記事は以下から御覧ください。

競技プログラミングの経験が、いつのまにかくらしをより良くする家電IoT開発に役立っていた!?

学生の方にはインターンシップ募集もされています。
興味がある方は以下のリンクを御覧ください。

https://recruit.jpn.panasonic.com/internship/?utm_source=ACcontest&utm_medium=email&utm_campaign=panasonic_M_ACc_2204&utm_con

元記事を表示

OTHERカテゴリの最新記事