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

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

【あったら便利】loggingは大事なのに書き方をいつも忘れてしまうのでメモ

# 目的
pythonのlogging機能を使ってエラーが起きたときなどにエラーログ等をターミナルに出力、ファイルに出力したいと思ったが、自分からするとちょっと複雑でなかなか覚えることができないため、ここに簡単に頻繁に使うものを記述していきたい。

#概要
### logging
下記全てのlogの親となるようなもの。
このloggingの設定はグローバル設定のようなもので、**この設定を変更すると下記のloggerなどの設定よりもとにかく一番優先される**
このloggingは複数作らない。

### loggers
loggingから派生されたloggingの子供、クラス(logging)に対する各インスタンスのようなもの。

### handlers
loggerの設定を扱う設定親のようなもの。
例えばconsoleに出力する用のlogger、ログファイルに出力する用のloggerと設定を変更したい場合に分けると良い。
ログファイルにはwarning/errorのみ出力するが、consoleにはdebugやinfoなども出力したい場合などにはAのloggerにconsole_ha

元記事を表示

【Project Euler】Problem 12: 約数の多い三角数

* 本記事は[ProjectEuler](https://projecteuler.net/about)の「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

### 問題 12. 約数の多い三角数

原文 [Problem 12: Highly divisible triangular number](https://projecteuler.net/problem=12)

**問題の要約:約数の数が初めて500を超える三角数を求めよ**

まず[三角数(Wikipedia)](https://ja.wikipedia.org/wiki/%E4%B8%89%E8%A7%92%E6%95%B0)にあるように$n$番目の三角数$T_n$は$1$から$n$までの和なので、

“`math
T_n = n(n+1)/2
“`
まずsympyのdivisorsを使うと、とても簡単プログラムになります。

“`Python
import sympy
import itertools

fo

元記事を表示

【Project Euler】Problem 11: マトリクスの中の最大積

* 本記事は[ProjectEuler](https://projecteuler.net/about)の「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

### 問題 11.マトリクスの中の最大積

原文 [Problem 11: Largest product in a grid](https://projecteuler.net/problem=11)

**問題の要約:マトリクスの中の隣り合う(縦・横・斜め)4つの数の積の最大値を求めよ**

Pythonのnumpyマトリクスはちょっと癖があるので慣れが必要ですね。マトリクスの定義は長いので下に書きました。4×4のマトリクスを切り出して上辺、左辺、2つの斜めの積を計算して最大値を求める関数が**maxProdArr**です。

“`Python
import itertools
import numpy as np

# return max product of left-vertical, top-horizontal,

元記事を表示

【Project Euler】Problem 10: 素数の合計

* 本記事は[ProjectEuler](https://projecteuler.net/about)の「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。

### 問題 10. 素数の合計

原文 [Problem 10: Summation of primes](https://projecteuler.net/problem=10)

**問題の要約:$2*10^6$未満の素数の合計を求めよ**

安易ですが。sympyのprimerangeはこの手の問題を解くときに便利なので。

“`python
from sympy import primerange

plist = list(primerange(1,2*10**6))
print(f”Answer : {sum(plist)}”)
“`

元記事を表示

Google Colabで処理装置の種類を変更する(CPU⇨GPU)

Pythonのコードを実行する際にとても便利な「GoogleColaboratory」
初期設定だと処理装置はCPUですがそれの種類の変更の仕方になります。
○変更方法
編集⇨ノートブックの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633008/fe704016-cb8f-a928-a5b2-9b0839488314.png)

ハードウェア アクセラレータを選択⇨保存
※設定を変更すると初期化されるため再度ライブラリのダウンロードなどが必要になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633008/5fe87b35-5257-07a8-0df0-a3aa8111f0c1.png)

変更内容を確認したい場合は以下のコマンドを実行する

“`
# 設定の確認をする
from tensorflow.python.client import device_lib
dev

元記事を表示

Pandasで複数列をまとめてdatetime型に変更する方法

# 複数列をまとめてdatetime型に変更したい
日付データはdateime型にしておくと何かと便利
一つの列のみなら、pd.to_datetimeでかんたんに変換できるが、
複数列をまとめて処理したい場合の方法

使用データ

“`python
import pandas as pd

df = pd.read_csv(‘/sample.csv’)

print(df)
>reg_date start_date end_date id
>0 2007/05/20 18:47:28 2021/10/31 08:03:39 2021/11/07 08:03:39 AAA
>1 2007/05/20 19:30:51 2021/11/23 10:34:24 2021/11/23 10:36:12 BBB
>2 2007/05/20 22:54:15 2021/11/21 10:44:37 2021/11/21 10:45:23 CCC

df.dtypes
>reg_date object
>start_date object
>end_date

元記事を表示

Pandas read_csvで読み込みエラーになる場合の対処

# read_csvでtokenizing errorがでるケース

sepで区切り文字を指定した際、元データが行によって列数が異なる場合にエラーになる

以下のようなデータを読み込む場合

“`sample.tsv
AA\tAA\tAA
BB\tBB\tBB\tBB
CC\tCC\tCC\tCC
DD\tDD\tDD\tDD
EE\tEE\tEE\tEE
“`

エラー例

“`python
import pandas as pd

df = pd.read_csv(‘data/src/sample.tsv’, sep=’\t, header=None)

Error tokenizing data. C error: Expected 4 fields in line 2, saw 11
“`

# 原因
エラー内容の通り、行によって列数にばらつきがあると期待どおりでないとエラーになる

# 対処

## 1. read_csvのskiprowsを使う

列数が異なるデータが何行目にあるかわかっており、
かつ不要であれば読み飛ばせば良い

“`sample.tsv
A\t

元記事を表示

VL53L1X (Time-of-Flight, 長距離測距センサー) を動かしてみる

[adafruit](https://www.adafruit.com/) で VL53L1X と言うセンサーを買ってみたのでそのメモです。

https://www.adafruit.com/product/3967

VL53L1X はレーザで測距を測定するセンサーで Digi-Key に [日本語での説明説明](https://www.digikey.jp/ja/product-highlight/s/stmicroelectronics/vl53l1x-tof-long-distance-ranging-sensor) があります。

距離を測定するセンサーと言えば音波を使った [HC-SR04](https://www.adafruit.com/product/4007) の方が [300 円](https://akizukidenshi.com/catalog/g/gM-11009/) 程度と安価であり [近い距離ならかなり優秀](https://ambidata.io/samples/m5stack/ranging/) という話もあります。またプログラムもかなり単純でラ

元記事を表示

k-meansを実装しながらnumpyを学ぶ

# k-meansとは
教師なし学習の一つで、主にクラスタリングに利用される。与えられたデータをk個のクラスタに分類する。大まかなアルゴリズムは下記の通り。

1. 各クラスタ中心の初期値を設定
1. 各データの点に対して、各クラスタ中心との距離を計算し、最も距離が近いクラスタを割り当てる
1. 各クラスタの平均ベクトル(中心)を計算する
1. 収束するまで2,3の処理を繰り返す

# 実装
## タスクの内容
下の図のようなデータを4つのクラスタに分類できれば成功。便宜上クラスタに番号を振っている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2235425/ac793322-a820-12a9-cdd9-dc150cb37a39.png)

## データの作成
上の図のデータを作成する。

### ソースコード

“`python
# seed値を固定する
# seed値を固定することで、何度実行しても同じ乱数を発生させることができるらしい
np.ran

元記事を表示

学習済みモデルから任意の特徴量を抽出する。

#はじめに
VGG16の学習済みモデルから、Pooling層の出力するモデルを作ってみます。
任意の画像をVGG16に入力した時、学習済みVGG16のPooling層の出力を見たい用途で使います。
下記のようなイメージのニューラルネットワークモデルです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/9bb834f9-a235-ba4a-6b0e-cdfba8dcb5bb.png)

#やり方の整理
1. ImageNetのデータセットで学習されたVGG16モデルをダウンロード
1. 1のモデルをbase_modelに名付け、 base_modelの各レイヤの名前を取得する。
1. レイヤの名前で、pooling層を確認し、get_layer()で出力テンソルを集める。
1. 3の出力テンソルの集合(リスト)を出力とする新しいモデルを作る。

#実行コード
## 1. ImageNetのデータセットで学習されたVGG16モデルをダウンロード

“`python
f

元記事を表示

試し割りによる素数列挙はエラトステネスの篩か?

# 背景

前回の記事
[IchigoJamでエラトステネスの篩 – Qiita](https://qiita.com/mikecat_mixc/items/632fdbcef8e611e4b21d)
を受け、ツイート主さんから以下のページのURLが送られてきました。

[エラトステネスの篩 [WildTree Wiki]](https://wiki.wildtree.jp/doku.php?id=%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)

見ると、それぞれの奇数$T$について、$\sqrt{T}$以下の素数で割っていき、
全て割り切れなければ$T$は素数であると判定するアルゴリズムを使っているようです。

一方、エラトステネスの篩といえば、
確定した最小の素数の倍数を候補から外し、確定していない中で最小の候補を素数として確定させる、
という処理を繰り返すことで、効率よく素

元記事を表示

TensorFlowのモデルを可視化する。(Windows)

#はじめに
TensorFlowのネットワークモデルを可視化する方法を書いておきます。
kerasにbase.summary()という素晴らしい命令がありますが、テキスト出力です。
一目でネットワークの構造が見えるグラフで表示したい時に有用な方法です。

#準備するもの

pydotとgraphvizを設置する必要があります。

Linuxだと両方ともpipで設置が可能ですが、
Windowsではgraphvizは**Windows installer**で設置する必要があります。

## pip install
“`python:
pip install pydot
pip install pydotplus
“`

#windows installer
こちらの記事を参考にして、設置してください。

[(金子研究室)Windows で Graphviz のインストール](https://www.kkaneko.jp/tools/win/graphviz.html)

#例題

VGG16モデルを可視化してみます。

“`python:
from tensorflow.kera

元記事を表示

PythonでUnion-Findアルゴリズムを実装する

けんちょん本(「[アルゴリズムとデータ構造](https://amzn.to/3f69Xsx)」)の第11章で扱われているUnion-Findについて、Pythonで実装してみました。

## 前提知識:素集合データ構造に対する操作

素集合データ構造とは、互いに重なり合うことが無い集合を持つデータ構造(おおざっぱにいうときれいに分類されているということ)。このデータ構造に対して、Union(2つの集合を1つに統合する)とFind(特定の要素がどの集合に属しているかを調べる)という操作を行うアルゴリズムを**Union-Findアルゴリズム**と呼びます。この2操作に、MakeSet(集合を作成する)を加えることにより、さまざまな分割問題をとけるようなツールとして利用できます。

https://ja.wikipedia.org/wiki/%E7%B4%A0%E9%9B%86%E5%90%88%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0

## Pythonで実装してみた

けんちょん本とはちょっと実装方針を変えています。

– 素集合デー

元記事を表示

【画像処理】NumpyでHarisのコーナー検出

NumpyでHarisのコーナー検出を実装してみます。

コーナーを検出する画像を読み込みます。

“`python
import numpy as np
import matplotlib.pyplot as plt

original_image = plt.imread(image_name)
if np.issubdtype(original_image.dtype, np.integer):
original_image = original_image / np.iinfo(original_image.dtype).max
gray_image = 0.2116 * original_image[:,:,0] + 0.7152 * original_image[:,:,1] + 0.0722 * original_image[:,:,2]
plt.imshow(gray_image, cmap=’gray’)
“`

![GrayImage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

poetry dev コンテナで .venv が壊れて、想定外の仮想環境再作成が行われたことへの対処

# 発端

自身のlocal環境に .venv を作成しました。
そして、元々開発で使っていた poetry dev コンテナを立ち上げた時、
ホストの .venv がコンテナの .venv にバインドされて壊れてしまいました。
気が効く poetry は仮想環境の再構築を始めました。
(ここまではありそうな話の想定)

しかし、poetry は想定外の仮想環境の構築をし始めてしまいました :thinking:

“`
root@e4a563668462:/var/www# poetry run uvicorn apps.main:app –reload –host 0.0.0.0
The virtual environment found in /var/www/.venv seems to be broken.
Recreating virtualenv www-p9HyaoIY-py3.9 in /root/.cache/pypoetry/virtualenvs/www-p9HyaoIY-py3.9

FileNotFoundError

[Errno 2] No

元記事を表示

Streamlitでのページ遷移とポップアップボタンの実装

1次、2次、、と深く潜るタイプのページ遷移のテクニックが見つからなかったので自分なりに実装してみました。

# ページ遷移

Streamlitを使っていると、

>![Untitled Diagram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459843/34e5a6e6-b38b-1d96-c3d9-83758a16040c.jpeg)

この一連のページ遷移を実装したい場面が出てきます。
これを実現します。

# ポップアップボタン

機械翻訳(Transformer)

機械翻訳の実装をTransformerを用いて実装します!

###必要なモジュールを読み込み

“`Python
!pip install -q pytorch_lightning
!pip install -q torchtext==0.11.0
“`

“`Python
import torch
import torch.nn as nn
import torch.nn.functional as F
import pytorch_lightning as pl
import torchtext
“`

###分かち書き(spaCy)
英文の分かち書きspaCyというライブラリを使います。

“`Python
!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.996.5
!pip install unidic-lite
!pip inst

元記事を表示

argparse:ArgumentParserコンストラクタ引数parentsに、相互排他グループを含む引数グループを渡すと、正しくグループ化されない

# 環境
* Python 3.9.7
* argparse 1.1

# やりたいこと
[argparse](https://docs.python.org/ja/3/library/argparse.html#parents)モジュールを使ってCLIを作っています。

以下のように、相互排他グループ(`–foo` or `–bar`)を含む引数グループ”global options”を作成したいです。

https://docs.python.org/ja/3/library/argparse.html#mutual-exclusion

“`python:foo.py
import argparse

def add_parser(parser):
argument_group = parser.add_argument_group(“global options”)
argument_group.add_argument(“–xxx”)
argument_group.add_argument(“–yyy”)

exclusi

元記事を表示

VSCodeからMayaにリモートデバックする(debugpy版)

## 概要
debugpyでMayaと接続する手順の紹介。

※あくまでもptvsdで既に接続している人向けに記載。
細かい手順は別のptvsdでの接続記事をご参照ください。

## 経緯
ptvsdでのMayaとの接続情報は巷に溢れているが、ptvsdは[リポジトリ](https://github.com/microsoft/ptvsd)にある様に非推奨。
しかし、新しい「debugpy」で接続しようとすると上手くいかない。
[issue](https://github.com/microsoft/debugpy/issues/262)にその解決方法が記載されていたので、解決方法を記載する。

## 環境
– Windows10
– Maya2022
– VSCode
– 拡張機能のPython導入済

## 手順

### VSCodeのデバック構成を記載する
launch.jsonに下記を追加

“` json
{
“name”: “Maya: Attach”,
“type”: “python”,

元記事を表示

ラズパイで消費電力を取得する(2)

#目的
Raspberry Pi4とCTセンサーを用いて、消費電力を取得し、AWS IoT Core経由で、ElasticSearchに流し込むこと。
前回の記事は[こちら。](https://qiita.com/shof0322/items/0ea56dc8d3f6ae475884)

#方法
ざっくりの流れは以下の通りです。

1. ハードウェアの構築
1. 消費電力取得プログラムの作成
1. AWS環境の構築

###1.5 ラズパイの構築

消費電力を計測するためのCTセンサーや抵抗などをブレッドボードを用いてラズパイと接続します。
配線にあたっては、下記のサイトを参考にさせていただきましたので、詳細は割愛いたします。
https://ambidata.io/samples/m5stack/m5_powermonitor/
https://qiita.com/ikenohotori/items/4e0dd0bf9c4edf2f9c0d
https://qiita.com/matsuda33/items/e5e0d22b0e0d7b05a409

####全体

元記事を表示

OTHERカテゴリの最新記事