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

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

mnbcard – マイナンバーカード PYTHON Lib

## 概要

マイナンバーカードのPython用ツール・ライブラリーです。

## できること

– 券面確認 AP・券面入力補助 AP の読み取り
– 4 属性の取得(名前、住所、生年月日、性別)
– 個人番号の取得
– 公的個人認証の各種証明書の読み取り
– 認証用証明書の取得
– 認証用証明書 CA の取得
– 認証用証明書の取得
– 署名用証明書 CA の取得
– 公的個人認証の署名
– 認証用秘密鍵による署名
– 署名用秘密鍵による署名

## ソースコード
https://github.com/lanesky/mnbcard

## 使用例

“`python
#! /usr/bin/env python3

import logging
import sys
sys.path.append(‘./../mnbcard’)

from reader import get_reader, connect_card
from api import *
from helper import *

root = logging.getLogge

元記事を表示

【競プロ】だれでもかんたん座標圧縮

## はじめに
みなさん座標圧縮(略して座圧)という言葉はご存じですか、私はつい最近知りました。というのも以下の操作に「座標圧縮」という立派な名前がついていると知らなかったんですよね。
座標圧縮というのは下のような配列Aがあったとき
“`python
A = [4, 90, 25, 30, 30, 8, 90, 90]
“`
これを座標圧縮するというのは配列の各数字が何番目に大きいかを1から順にナンバリングしていくという操作です。つまり配列Aに座標圧縮を施すと
“`python
A_zaatsu = [1, 5, 3, 4, 4, 2, 5, 5]
“`
となります。ただし配列`A`のなかで同じ数字は`A_zaastu`の中でも同じ数字が割り当てられることに注意してください。今回はこの座標圧縮という処理を簡単に書けるようになろうというのが本題です。
## いざ本題
もう最初に答えを書いちゃいます。座標圧縮はこう書けば簡単です。
“`python
A = [4, 90, 25, 30, 30, 8, 90, 90]
S = sorted(list(set(A)))
rankin

元記事を表示

YOLOv5 データ拡張(Data Augmentation)を徹底解説

# 1. はじめに

YOLOv5のデータ拡張(水増し、Data Augmentation、データオーギュメンテーション)について、調べたことをまとめます。
何か間違っていること等あればご指摘いただき、内容を充実させていければと思います。

YOLOv5のデータ拡張ですが、Hyperparametersで指定をしている部分と、Albumentationsを使用している部分があるそうです。
それぞれについて解説をしていきたいと思います。

参考サイト

https://docs.ultralytics.com/FAQ/augmentation/

# 2. Hyperparametersでの指定

Hyperparametersはデフォルトでは.\data\hyps\hyp.scratch-low.yamlが呼び出されるので、その内容から確認します。

“`yaml:hyp.scratch-low.yaml
# YOLOv5 ? by Ultralytics, GPL-3.0 license
# Hyperparameters for low-augmentation COCO t

元記事を表示

pybind11で作成したPythonモジュールのインポートでDLL load failed while imorting…と表示された時の対処方法

# はじめに
環境依存かもしれませんが、Pythonを3.7から3.8に変更して、[mingw64](https://www.mingw-w64.org/)と[pybind11](https://github.com/pybind/pybind11)で作成したPythonモジュールをインポートしようすると、”DLL load failed while importing …”となり、インポートができませんでした。[githubのissues](https://github.com/pybind/pybind11/issues/2010)に対処方法が書かれていたので、そのメモです。

# 環境
– Windows 10 home
– Python(3.8.10)
– pybind11(2.4)
– mingw64(gcc6.3)

# うまくいかない状況
うまくいかない状況を記載しておきます。
以下のサンプルコードをmingw64とpybind11でythonモジュールを作成しました。インポートしようとするとDLL load failed…とでて、モジュールのインポートができませ

元記事を表示

【Python】辞書から部分辞書の作製

## やりたいこと
ある辞書から、キー指定で一部の要素を抽出した辞書を作成したい。

具体的にはdic_motoからlist_keyを使ってdic_kekkaを作成する。

“`python
dic_moto = {‘A’:1, ‘B’:2, ‘C’:3}
list_key = [‘A’, ‘B’]
dic_kekka = {‘A’:1, ‘B’:2}
“`

## 方法
“`python
dic_moto = {‘A’:1, ‘B’:2, ‘C’:3}
list_key = [‘A’, ‘B’]
dic_kekka = {key:value for key, value in dic.items() if key in [‘A’, ‘B’]}
“`

## おわりに

ググっても見つからなかったので、メモ代わりに。

辞書内包表記ができることを初めて知った。

他に良い方法があれば是非教えてください。

元記事を表示

幅優先探索のノードにHashable/Comparableな自作クラスを使用する

多分競プロでは使わない

# 背景

幅優先探索を実装していると、探索点として単純なtupleなどで表すには少し複雑な構造を保持しておきたく、自作クラスを使いたいことがあります。
しかしながら、単にクラスを定義するだけでは「過去に探索した点かどうかの判定」や「探索の終了ノードとの比較」は簡単には行うことができません。

例として8-puzzle問題を考えます。

# 8-puzzle
3×3の盤面に1から8までの数字の書かれたピースが1つずつ配置され、盤面のうち1マスはピースが配置されていない状態となっています。
あなたは、ピースの配置されていないマスに隣接するマスからピースを1つ選び、それをピースの配置されていないマスに移動させる操作を任意の回数繰り返すことができます。
この操作を繰り返すことにより、以下の最終盤面に到達できるかを判定し、可能な場合は必要な最小の操作の回数と操作内容を出力しなさい。(最小の操作回数で到達可能な手順が複数ある場合、いずれを出力しても構いません。)
 
[最終盤面(1以上の数字はそれぞれ数字の書かれたピース、0は空きマスを表す)]
“`
1 2 3
4

元記事を表示

OBD2とPythonでシフトポジションを取る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990652/da6db102-28a4-c52c-fcbb-9278b88068dd.png)
# まえおき
[前回](https://qiita.com/nonono_copen/items/264fcba0b08cb0abcc05)のあらすじを3行で〜
● ドライブ中にコペンのシフト位置が不安だからシフトインジケータ作ろ!
● OBD2でシフト位置を含めたクルマの情報取れるかチェックや!
● 車速とかは取れたけど,シフト位置は取れないや〜ん(泣)どうにかせな・・・

ということで今回はどうにかしてシフトポジションを取る方法を考える.
シフトインジケータ作成のロードマップで言えば,以下の部分を実施していく!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1990652/df45f645-dea3-92da-f516-59eb386bc32

元記事を表示

SSHで踏み台サーバにログインし、VPC内のインスタンスに対するIP到達性を確認する

## Pythonスクリプトで作業を自動化

### ユースケース
+ **Pythonスクリプト** と **シェルスクリプト** を組み合わせる。
+ Pythonの**paramiko**モジュールを使って、AWS VPC内の踏み台サーバに自動ログインする
+ 自動ログイン後に、シェルスクリプトで対象のインスタンスに対して踏み台サーバからpingコマンドを複数回実行する

### 想定する環境
+ AWSのVPCは以下のような構成
+ VPC内はICMPが通るように、セキュリティグループを設定済み
+ K-EC2-ProxyHost-1を踏み台としている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/699739/aa7764bd-4187-d7d6-a071-70cc3af293f0.png)

#### スクリプト実行環境
macOS Montrey (12.4)
Python 3.10.4

#### 踏み台サーバ環境
Ubuntu jammy (22.04 LTS)
Ba

元記事を表示

【強化学習】モンテカルロ木探索を解説・実装

この記事は自作した強化学習フレームワークであるSimpleDistributedRLの解説記事です。
概要は[こちら](https://qiita.com/pocokhc/items/a2f1ba993c79fdbd4b4d)です。

# はじめに

モンテカルロ木探索は強化学習のアルゴリズムというより木探索アルゴリズムの一種という位置付けです。
ただ、これの発展系であるAlphaGo,AlphaZero,MuZeroといった有名なアルゴリズムがあるので説明していきたいと思います。

また以前に記事([第11回 今更だけど基礎から強化学習を勉強する モンテカルロ木探索編](https://qiita.com/pocokhc/items/ac38d9e3658c5a596010))を書いていますが、フレームワークに沿った内容として改めて書いています。

# モンテカルロ法(Monte Carlo method; MC)

モンテカルロ法は確率または期待値の近似値を求める手法として主に使われます。
(強化学習では予測値を求める手法としてモンテカルロ法がありますがそれとは別ものです)

元記事を表示

tkinterを使用して動画再生をした。

## 目的
pythonを用いてGUIを操作し、動画再生をします。

## 実行環境
Python version: 3.9.13
OS: Windows 10

## GUIイメージ
動画ファイルを読み込んで、サイズを枠に合わせて縮小し、左のキャンバス上に映し出します。再生、停止、最初に戻る、閉じるボタンを作っています。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/391cf8f3-8131-7531-7691-75822b10d9d0.png)

### フレームイメージ
GUIの作成をするため、フレームの領域を分けました。フレームのエリアは、下記のように分けています。
![ャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/ebf4c7a6-9f4c-05a7-e5b2-419ccdfe97b2.png)

## プログラム
ファイルは、[github](https://

元記事を表示

フォルダからファイル名を取得+縦にcsv出力(Python)

以前やったけど、すぐ忘れてしまうので何処かに書かないと、
と危機感を覚えたのでメモ的に(下に参考URLを記載しています。)

環境:MacOS Monterey+Anaconda3 Jupyternotebook

フォルダ内には、PDFファイルしかなくて(1000ほど)、このリストを作りたいってコトです。

“`python
# リストに出力
import os
p = os.listdir(‘ディレクトリのパス’)
p

# 内包表記で、pの中にある文字を全て置換(ここでは”.pdf”を全て””に置換して除いてます)
replaced_p = [s.replace(“.pdf”,””) for s in p]
replaced_p

# 降順に並び替える
new_p = sorted(replaced_p)
new_p

# 作ったリストをcsvに出力 縦に出力する
import csv

with open(‘new_p.csv’, ‘wt’, encoding=’utf-8′) as po:

for name in new_p:
po.wri

元記事を表示

pythonでリスト中の数値を文字列に変換する際は`print(“”.join(list(map(str, ans))))`のようにした方が処理が早そうな印象

pythonでリスト中の数値を文字列に変換する際は`print(“”.join(list(map(str, ans))))`のようにした方が処理が早そうな印象

例えば、数値を含むリスト(`ans = [1]*100000`)を連結した1つ文字列として出力したい場合
以下のように`*10`を足すような処理した場合は、、1secほど掛かる

“`py:test.py
ans = [1]*100000
val = 0
for ii in range(len(ans)):
val = val*10 + ans[ii]
print(val)
“`

“`sh
$ python test.py
real 0m1.147s
user 0m1.124s
sys 0m0.013s
“`

以下のように`.join`により処理した場合は、、0.02secほど掛かる

“`py:test.py
ans = [1]*10000000
print(“”.join(list(map(str, ans))))
“`

“`sh
$ python test.py
real 0m0.027s
u

元記事を表示

Spotify APIで完全ランダムなプレイリストを生成する(Python)

# 背景
Spotifyでは, おすすめの曲や似た曲を永遠に聴くことができる.
しかし全く無関係な曲の羅列を聞く方法がないのかと思い立った.似た曲ばかりを勧めてくるSpotifyに少々嫌気がさしたためである.
標準のプレイリストでは,特定のシーンに一致する曲を集めたものはたくさんあるものの,完全にランダムに選んだ曲を集めたものは見当たらない.

# 参考
Webを検索すると,試みている記事がいくつか.コチラを参考にした.

* [Pythonを用いてSpotifyのプレイリストを作成&再生してみる](https://tori114.hatenablog.com/entry/2018/10/14/090525)
* このPython側の準備をやっておく.
* [Getting random tracks using the Spotify API.
](https://perryjanssen.medium.com/getting-random-tracks-using-the-spotify-api-61889b0c0c27)
* こちらの記事と同様,ジャンルをランダムで選んで

元記事を表示

Python で、別プロセス間での Singleton 実装 – Socket_Singleton を使う

# はじめに

Python でツールを作ることが多いが、Window を表示する機能を伴うツールを作った時、特に Pyinstaller などで exe 化したりして配布していたりすると、どうしても複数個立ち上げたくないという事が起こったりする。
こうした Python プロセスが分かれてしまった場合、通常の Singleton 実装は使えない。

lock ファイルを使うなどの方法があるが、調べていると Socket_Singleton というライブラリがあることに気が付いた。
これを使った実装方法をまとめる。

# インストール方法

“`bash
pip install Socket_Singleton
“`

# 基本的な使い方

基本的には、Socket_Singleton のインスタンスを作るだけで良い。

“`python: app.py
from Socket_Singleton import Socket_Singleton

def main():
ss = Socket_Singleton()
print(“Hello, World!”)

元記事を表示

EDAの初手にやるべきこと集

# これは何か
EDAする時に自分が初手によくやっていることをまとめる。今、雑にまとめたいだけなのだが、追々ちゃんと整理する。

## 事前準備
“`python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.style as style
style.use(‘fivethirtyeight’)
import seaborn as sns
import os
“`

# 全体概観
## 欠損値確認
“`python
print(train.isnull().sum())
print(f’train data: {len(train)}’)
“`

## 要約統計量の確認
“`python
train.describe()
“`

# 単変量解析
## histgram

“`python
sns.distplot(train[‘col_name’], bins=100, kde=False)
plt.sh

元記事を表示

VOICEVOXに英語を読ませる(カタカナ英語)

VOICEVOXは英語の発音ができないが、さすがに「Cisco」を「シーアイエスシーオー」と発音するのはさすがに困る。とはいえ、膨大な単語1つずつを辞書化していくのは骨が折れる。

ということで、多少妥協して、片言でも良いので発音してもらう。
とりあえず、英単語をカタカナに変える辞書を用意。
[bep-eng.dic](https://fastapi.metacpan.org/source/MASH/Lingua-JA-Yomi-0.01/lib/Lingua/JA/bep-eng.dic)あたりをベースに、自分好みの単語を追加すれば良いんじゃないかな。

“`
[root@ip-10-100-0-11 app]# tail eng.dic
PYTORCH パイトーチ
TWITTER ツイッター
SAAS サーズ
KAGGLE カグル
DROPBOX ドロップボックス
SPLUNK スプランク
SALESFORCE セールスフォース
DREAMS ドリームズ
AZURE アジュール
LEADERS リーダーズ
[root@ip-10-100-0-11 app]#
“`

先のリスト

元記事を表示

parlaiとweb apiのように会話したい

いろんなbotを作って遊んでいるが、pariaiがやはり凄いので、もっと遊びたい。
parlai(Blenderbot2)にはインタラクティブなインタフェースが用意されている。

“`
Enter Your Message: What is your hobby?
/opt/conda/lib/python3.10/site-packages/parlai/core/torch_generator_agent.py:1728: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the ‘trunc’ function NOT ‘floor’). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, ro

元記事を表示

【令和最新】NumPyの乱数・シャッフル・ランダム抽出(`np.random`)使い方まとめ

# NumPyの乱数・シャッフル・ランダム抽出(`np.random`)使い方まとめ

## 基本的な使い方

`np.random.default_rng()`で、乱数生成器オブジェクトをインスタンス化したのち、各種メソッドで乱数を発生できます。

“`python
import numpy as np

# 乱数生成器オブジェクトの作成
rng = np.random.default_rng()

# 乱数の作成
rfloat = rng.random()
print(rfloat)
“`

以下乱数生成器オブジェクトを変数`rng`として説明します。

### シード

`np.random.default_rng()`にはシード値を渡すことができます。

NumPyの乱数生成器は擬似乱数といって、本当のランダムではありません。極端にいえば$y=f(x)$のような関数になっており、初期条件$x$が決まれば結果$y$が決まっていますが、通常$x$には実行したときの現在時刻などが入るために、結果がランダムになっています。

私達がサイコロを振るとき普通は適当に投げるので結果はラン

元記事を表示

雀魂の画面から画像認識で対戦情報を持ってくる(Vol. 5)

[≪前の記事](https://qiita.com/xenepic_takku/items/786f110eb5be6ccf246d)

# 前回までのあらすじ
鳴き牌の認識をクリア!
これでとりあえず雀魂の画面から、門前牌と鳴き牌を認識することができた。

# 今回やること
– リファクタリング
– ツモ牌の認識(位置調整)
– 牌の認識情報を画像で表示
– 捨て牌(河)の認識
でお送りします。

# リファクタリング
牌の認識がだんだんと形になってきたのは良いのですが、まぁーソースコードが汚い!
趣味なのでそれでもいいんですが、開発を進める前に一度整理しておかないと手のつけられないスパゲッティになることは目に見えているので(前例あり)ここらで一回リファクタリングしておきたいと思います。

将来的に公開するならその方がいいよね!

> – リファクタリングとは
プログラムの挙動は変えずに、プログラム内部の仕様を変更すること。
プログラムの可読性やメンテナンスの容易性などを上げるために行われる。

主な変更点は次の3点です!
1. 変数名・関数名の変更(スネークケースへ)
1. do

元記事を表示

VSCodeのJupyterでIPython.display.Audio() を使いたい

## 問題

vscodeでnotebook(.ipynb)を開いて`IPython.display.Audio()`を使用しても

![vs_jupyter_audio1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2235373/4fdf0002-4d4a-a795-7053-86c7fe60046d.png)

こうなって再生できない。パスを直接入れても同様。

![vs_jupyter_audio2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2235373/d8d277cd-2b68-b5bc-551f-c7b5cbd95358.png)

調べてみると

[IPython.display.Audioで音声が再生できないので調べてみました|Discipline and Action](https://discipline-and-action.com/gcp%EF%BD%B01/)
> 私はvs

元記事を表示

OTHERカテゴリの最新記事