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

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

繰り返し二乗法で行列のべき乗の高速化

**【例題】 以下の行列の$10^8$乗を剰余 100007で求めよ**

“`math
\large
\begin{pmatrix}
2 & 2 & -2 & 1\\
1 & 0 & 0 & 0\\
0 & 1 & 0 & 0\\
0 & 0 & 1 & 0
\end{pmatrix}
“`

まずは素直にnumpyのmatrixを用いて書いてみますが、これでは$10^6$までが精いっぱい。

“`python
import numpy as np
N, M = 10**6, 100007
m = np.matrix([[2,2,-2,1],[1,0,0,0],[0,1,0,0],[0,0,1,0]], dtype=’object’)
print(m**N % M)
#[[87688 87212 96356 67590]
# [67590 52515 52039 31522]
# [31522 4546 89478 15076]
# [15076 1370 74401 19623]]
“`
行列の高速化としては対角化等の技法があるようですが、今回はNが大きいのと

元記事を表示

Pyinstallerで複数のスクリプトをEXE実行ファイルへ

# はじめに
この記事は私がPythonのパッケージであるPyinstallerをつかって複数のPythonスクリプトをもとに、一つのEXEファイルを生成したときに躓いたところなどを書き留めた記事です。
至らない個所などあると思いますが、大目に見てください。

# 実行環境
– PyCharm Community
– Python 3.9 Virtual Environment (venv)

基本的な作業はすべてJetBrains社製のPyCharmを採用。
Pyinstallerを使うときに、仮想環境ではなくプレーンな場所でEXEファイルを生成したとき、無駄なパッケージなどが同梱される恐れがあるため、仮想環境を用いました。

# スクリプトの例
https://github.com/boymelancholy/ClassTools

このClassToolsをPyinstallerで製作しました。
今回はこの中の、[ClassSetting](https://github.com/boymelancholy/ClassTools/tree/master/ClassSet

元記事を表示

リモコンが家電を動かす仕組みを理解する【ラズパイで遊ぼう!】

# 初めに
普段みなさんが何気なく使っている「**リモコン**」ってなぜ動くの?
どうやってテレビをつけているの?
そんなことを考えたことありませんか()
リモコンが赤外線を家電に飛ばしている。ここまでは知っている人が多いかと思います。
ですが、実際に「**赤外線はどのような情報を送信しているか**」「**どうやって送っているか**」まで知っている人は少ないと思います。
今回はその部分を紐解いて、行きたいと思います。

# 利用したもの
– RaspberryPi 4B(https://www.switch-science.com/catalog/5680/)
– 赤外線受信モジュール(https://www.amazon.co.jp/gp/product/B07TNDLH86)
– ジャンパーワイヤー(https://www.switch-science.com/catalog/2354/)
**※はんだ付けできる人は不要です。**

# RaspberryPi OS のインストール
RaspberryPiの公式サイトに「[Raspberry Pi Imager](https://w

元記事を表示

n個のサイコロを振った時の和の確率分布をpythonを使った統計的確率で求める

## [初投稿]
自分の勉強したことを振り返ることがメインの目的です。拙い文章かもしれませんが、よろしくお願いします!
## 概要
n個のサイコロを振った時の和の確率分布を、pythonを使った統計的確率で求める。

## はじめに
確率分布とは、ある操作において起こりうる事象のそれぞれの確率の分布を表現したもので、一般には散布図やヒストグラム形式で表されます。

今回はn個ののサイコロを振るという操作を十分大きな試行回数行うことで、確率を求めていきます。
これは統計的確率、もっとわかりやすくいうと、経験に基づいた確率ですね。
試行回数が多ければ多いほどより正確な確率が求められます。

## 実装コード
実装は、https://note.com/omori55/n/n639148bab42b
を参考(ほぼパクリ)させていただきましたが、使ったライブラリや関数の中身について自分なりに噛み砕いたことを書きます。

“`python:qiita.py
import random
import matplotlib.pyplot as plt
n = int(input(“幾つのサイコロを振

元記事を表示

BiocondaへPyPIパッケージを登録する手順

先日、自分が作成したPyPI上のPythonパッケージ`GBKviz` ([GitHub](https://github.com/moshi4/GBKviz), [紹介記事](https://qiita.com/moshi/items/3443fc887ef1119a7a9c))をBiocondaに登録してみました。Biocondaのパッケージ登録に関する記事は少ないので、自身の経験も踏まえて登録手順を紹介してみようと思います。

:::note info
自分は「Pythonパッケージ開発からPyPIへの登録」まで[Poetry](https://python-poetry.org/docs/)を利用しています。pip(setup.py)やpipenvで開発・登録をしている方とは若干の違いがあるかもしれませんが、おおよそ本記事と同様の手順でBiocondaへ登録できると思います。
:::

# 前提知識・条件

本記事では、以下のことを経験済あるいは理解している人を対象として手順を解説します。

– Pythonパッケージ開発
– PyPI(Python Package Index)

元記事を表示

EnvaderでPythonの環境構築を学んだのでmacで実践してみる(第4回)

## はじめに
はじめましてa-min3150です。エンジニアへの転職を目標に学習中です。
アウトプットのためEnvaderで学習したこと、ハマったことなどを書いていきたいと思います。

## 今回の学習内容
EnvaderでPythonの環境構築について学習したのでアウトプットします。

今回は第4回目でmacでのvenvを使った仮想環境設定についてです。

第1回目は[こちら](https://qiita.com/a-min3150/items/bf2e575668cc986dd5d9)
第2回目は[こちら](https://qiita.com/a-min3150/items/56b2e9bf8957d3247d81)
第3回目は[こちら](https://qiita.com/a-min3150/items/6d1c9b7b3b4cd5039f39)

## 仮想環境とは
Python を使って開発や実験を行うときは、用途に応じて専用の実行環境を作成し、切り替えて使用するのが一般的です。こういった、一時的に作成する実行環境を、「仮想環境」 と言います。
仮想環境は、次のような目的で

元記事を表示

sklearnからのfetch_mldataを使ったMNISTデータの読み込みエラー

備忘録として、とりあえず対処したエラーの内容を書いていこうと思います第一稿。
(また時間あるときに随時編集)

# 環境
google colaboratory
Python 3.7.13
sklearn 1.0.2

# エラー内容
“`python:fetch_mldata
from sklearn.datasets import fetch_mldata

mnist = fetch_mldata(“mnist original”, datahome=”.”)

X = mnist[“data”].astype(“float32”)
y = mnist[“data”].astype(int)

# エラーコード—————————————————————————-
ImportError Traceback (most recent call last)
—-> 1 from sklearn.datasets i

元記事を表示

% python したら command not found を突きつけられました

いつもどおりMacでpython使おうとしたところ。
“`
% python
zsh: command not found: python
“`
いやそんなばかな。タイポしたのかなと、何度か試したけれどもみつからない。
“`
% which python
python not found
“`
PATH以下にないの?昨日まで使えてたが!!

find とか $PATH 確認したりあれこれしたが python でタブ補完したところ python3 がでてきた。なんでこんなことになってんだろ。

以下にハッキリ書いてありました。
https://developer.apple.com/documentation/macos-release-notes/macos-12_3-release-notes
“`
Python
Deprecations
Python 2.7 was removed from macOS in this update. Developers should use Python 3 or an alternative language instead. (3

元記事を表示

【高速なnumpy】WindowsでJAXを使おう【Python】

この記事ではJust-In-Timeコンパイルにより高速計算を実現するライブラリ**JAX**を**Windows**に導入する手順を説明します。
JITコンパイル、JAXの説明はしません。
【参考】[https://github.com/cloudhan/jax-windows-builder](https://github.com/cloudhan/jax-windows-builder)

## 1. jaxlibのwhlファイルをダウンロードする
[https://whls.blob.core.windows.net/unstable/index.html](https://whls.blob.core.windows.net/unstable/index.html)から自分の環境にあったjaxlibのwhlファイルをダウンロードします。
`該当ファイルがどれかわからない!という方は次のコードを実行することでCPU/cuda、jaxlibのバージョン、cp等を確認してください。`
“`Python
pip3 debug –verbose
“`
## 2. whlファイル

元記事を表示

pythonで「統計学入門」3 大数の法則と中心極限定理

とても有名な「統計学入門」をpythonで実装しながら読んでいきます。
本をしっかり読むことと実装の勉強が目的ですので説明が不足していたりします。
また、実装方法に関してはベストなものではないと思いますのでご了承ください。

### 前回
2次元のデータ

https://qiita.com/tanaka_benkyo/items/927098a88a2748858f02

### 大数の法則と中心極限定理
正しいコインを10回投げることを考える(ベルヌーイ試行)。
$i$回目のコインを投げて表が出た場合1、裏が出た場合0をとる確率変数$x_i$を考える。
10回の試行で表の出た回数は、
$$
r=x_1+\cdots+x_{10}
$$
である。
表が出た回数の割合$\hat{p}=r/10$は観測された成功率である。
一般に、$n$をコイン投げの回数とするとき、$r/n$は相対頻度である。
$r$は確率変数で、$n=10,p=0.5$の二項分布$Bi(10,0.5)$、すなわち、
$$
f_{10}(x)=_{10}C_x(1/2)^{10},\hspace{3mm}x=0,1,\

元記事を表示

pythonで「統計学入門」2 2次元のデータ

とても有名な「統計学入門」をpythonで実装しながら読んでいきます。
本をしっかり読むことと実装の勉強が目的ですので説明が不足していたりします。
また、実装方法に関してはベストなものではないと思いますのでご了承ください。

### 前回

1次元のデータ

https://qiita.com/tanaka_benkyo/items/f2a0b4aec0cf5c8f797c

### 2次元のデータ

“`python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import display
import seaborn as sns
import japanize_matplotlib

d = pd.read_csv(‘pokemon_for_stats.csv’).iloc[:,1:]
gen = [“第1世代”]*151+[“第2世代”]*100+[“第3世代”]*135+[“第4世代”]*107+[“第5世代”]*156+[“第6世代

元記事を表示

pythonで「統計学入門」1 1次元のデータ

とても有名な「統計学入門」をpythonで実装しながら読んでいきます。
本をしっかり読むことと実装の勉強が目的ですので説明が不足していたりします。
また、実装方法に関してはベストなものではないと思いますのでご了承ください。

### 1次元のデータ
サンプルデータとして次のようなものを使用したいと思います。

“`python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib

d = pd.read_csv(‘pokemon_for_stats.csv’).iloc[:,1:]
d
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358656/7c64c4a8-5f04-bcfd-b1f1-6e30d2af7b28.png)

#### 度数分布とヒストグラム
度数分布表は、観測値の取り得る値をいくつかの階級に分け、それぞれの階級

元記事を表示

SwitchBot Plub Mini でBluetooth経由で消費電力を取り出す

## はじめに

SwitchBotから発売されたPlug MiniからBluetooth経由で消費電力を取得する方法についての知見について記載します。

以下のSwitchBotの公式が公開しているpython用のコードを利用できることが前提の説明となります

https://github.com/OpenWonderLabs/python-host

## Plug Miniについて

https://www.switchbot.jp/products/switchbot-plug-mini
> SwitchBotプラグミニはBluetoothとWi-Fiに対応可能なので、Wi-Fiチップのみのスマートプラグよりデバイスの追加と操作がより簡単に。

既存のSwitchBot PlugではWi-Fi経由でしかデータ取得や操作ができなかったところ,
Bluetoothによる操作にも対応したと謳っており,Wi-Fi環境がなくても使用できるようになった製品です.

また,On/Offしか操作できなかったPlugと比べて、消費電力をAPIを経由して取得可能になるなど,
消費電力を監視して,別

元記事を表示

クッソ初心者がエラー起こしまくった備忘録

Python初学者が関数のところでSyntaxErrorを起こしまくったので原因と解決法を備忘録として残す。

“`
>>>|def f(x):
…| return x+1
…|f(2)
|   
|SyntaxError: invalid syntax
“`
IDLE shellの左端も表記しているので、[>>>]や[…]を意図的に含んでいる。

defで関数を定義した後、直後でf(2)のように関数を呼びだそうとしたら、
上記のようにSyntaxErrorと表記された。

そこでreturnとf(2)を一行開けた状態にしたところ

“`
>>>|def f(x):
…| return x+1
…|
>>>|f(2)
|3
“`
このように出力された。

前者ではまだf(x)が定義される前にf(2)を呼び出していたということだろうか?

IDLE shellの左側にある[>>>]と[…]の違いがあるが、
[…]の中にある場合は一連の流れだからまだ定義し終わっていないということなのだろうか?

元記事を表示

FastAPIでBasic認証

# 公式情報

– APIにbasic認証: https://fastapi.tiangolo.com/advanced/security/http-basic-auth/
– staticファイルにBasic認証: https://github.com/tiangolo/fastapi/issues/858

片方だけでいい場合は、公式の実装をそのまま利用すればよい。この記事では、両方にBasic認証をかけてみる。

# API/static filesそれぞれにBasic認証を実装する

## Basic認証用のモジュール

id/passは環境変数で指定する想定

“`python:basic_auth.py
import secrets
import os

from fastapi import HTTPException, status, Request, Depends
from fastapi.staticfiles import StaticFiles
from fastapi.security import HTTPBasic, HTTPBasicCreden

元記事を表示

OpenCVでパノラマ合成

>参考
[Python+OpenCVでstitching パノラマ画像生成をやってみた](https://tech-blog.s-yoshiki.com/entry/36/#%E3%82%BD%E3%83%BC%E3%82%B9)

* csvインストールコマンド
“`bash
python3 -m pip install opencv-python
python3 -m pip install opencv-contrib-python
“`

* Stitcher_create:openCVのバージョンアップで関数変更↓
“`python
import argparse
import cv2

if __name__ == “__main__”:
parser = argparse.ArgumentParser(description=’Stitch given images.’)
parser.add_argument(“inputs”, metavar=’input’, type=str, nargs=’+’, help=’input file’)

元記事を表示

Pythonでひとつのセル内の文字列に複数の色を指定したExcelファイルを作りたい

## 実現したいこと

以下のような Excel ファイルを作りたい。

![Book2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63995/c74719b8-d35e-2bde-00c2-56b9ae72288f.png)

これは Python で Excel ファイルを扱う定番ライブラリである [OpenPyXL](https://openpyxl.readthedocs.io/en/stable/) では実現できないが、 [XlsxWriter](https://xlsxwriter.readthedocs.io/) で実現できるらしい。詳しくは以下の記事を参照。

https://qiita.com/tekunikaruza_jp/items/53a5b482b20a85f9c44d

https://qiita.com/alicial/items/9db75fc457dfd33088e3

この方法では XlsxWriter の API を使うことになり、記述が複雑になる。そこで HT

元記事を表示

pythonでデータベースを使う sqlite3

## ライブラリをインポート
“`
import sqlite3
“`

## データベースを作成・保存
データベースのファイル名を決め、接続する。
データベースがなければ作成する
“`
filename = (‘stock.db’)
conn = sqlite3.connect(filename, isolation_level=None)
“`

## テーブルを作成してみましょう
executeでテーブルをどうするのか指示を出します
CREATE TABLE :というテーブル作成
“`python
import sqlite3
DB = (‘stock.db’)
conn = sqlite3.connect(DB, isolation_level=None)

cursor = conn.cursor()
sql = “””CREATE TABLE stock(id int, name text,price int, dividend int)”””
cursor.execute(sql)
conn.commit()
conn.close()

“`
## テーブルの

元記事を表示

FastAPI で レスポンスをgzip圧縮する

# tl;dr

FastAPI で responseをgzip圧縮で返却したい場合は
“`python
from fastapi import FastAPI
from fastapi.middleware.gzip import GZipMiddleware

app = FastAPI()
app.add_middleware(GZipMiddleware, minimum_size=1000)
“`
と記述する。

# 概要

HTTPでフロントエンドとの通信量を削減する方法の1つとして、コンテンツを特定の圧縮方式で圧縮して通信する方法がありますが、FastAPIでgzipによる圧縮が簡単にできるのでメモしておきます。

gzipでの通信のためには、

– リクエスト側がhttp headerの`Accept-encoding` 属性に、gzipを指定する
– サーバー側がgzipでの返却に対応する

の両方が必要です。

# How To

[公式ドキュメント](https://fastapi.tiangolo.com/advanced/middleware/#gzipm

元記事を表示

pygribでGPVデータを処理してPyGMTで描画

この記事では、気象庁の配信するGPVデータの処理を行い、PyGMTで可視化する方法を紹介します。

# はじめに
GPVデータ(Grid Point Value Data)とは、世界中の地表面などを等間隔に区切った領域ごとに、気温や気圧など多数の気象要素を収録したデータのことです。日本語にすると格子点値なのでそのままですね。
PyGMTとは、地球科学の研究者がよく用いるGMT(General Mapping Tool)をPythonで扱えるようにしたものです。データを地図にする機能に優れています。

GPVデータの形式は、世界気象機関(WMO)が定めた二進形式格子点資料気象通報式(第2版)形式、いわゆるgrib2形式がよく用いられます。中身はテキストデータではなくバイナリデータなので、いきなりPyGMTで描画は出来ません。ところでPythonの世界には、grib2形式を簡単に読み込んでくれる`pygrib`というライブラリがあります。今回は、これを使って扱いやすい形式に変えてからPyGMTで描画します。

# 環境の準備
## 仮想環境の有効化
この記事の内容はAnacondaの仮想環

元記事を表示

OTHERカテゴリの最新記事