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

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

gspread(およびgspread_dataframe)の利用方法について

pythonからスプレッドシートを触るとき、gspread/gspread_dataframeなどのライブラリを利用することができます。

これらライブラリについて内部実装を見ながら、どのような使い方をするかまとめました。

## 前提・方針
– スプレッドシートの操作はサービスアカウントを利用する
– Cloud FunctionsやCloud Runからスプレッドシートを自動更新できるようにするため
– ローカル環境では、サービスアカウントにimpersonateする
– セキュリティの観点から、サービスアカウントの秘密鍵をローカルにダウンロードしないようにするため
– なるべく、スプレッドシートへのアクセスは最小限にする
– Sheets APIではユーザごとに60リクエスト/分、プロジェクトごとに300リクエスト/分に制限されているため[^1]

## 本書では書かないこと
以下の内容については、他の技術記事等で掲載されているため記載を省略いたします。

– Google Cloud PlatformでのSheets API,

元記事を表示

pythonのlambdaとmap関数について

lambdaをなんとなくで使用してきて、混乱することがよくあるので整理しました
一緒に使われているイメージのあるmap関数についてもまとめています

## 結論
基本形と例になります
### lambda
“`
基本形
(lambda 引数: 戻り値)(渡す値)


(lambda x: x*2)(2)
結果
4
“`

### lambda+map
“`
基本形
map(lambda 引数: 戻り値, iterable(listやdictなど))


list(map(lambda x: x*2, [1, 2, 3]))
結果
[2, 4, 6]
“`

## lambda
### lambdaとは?
lambdaは無名関数を使用するための記法になります
名前付きの関数を作成するほどではない簡単な処理をしたいときに使用されます

基本形

“`
lambda 引数: 戻り値
“`

次のような関数と同じ意味になります

“`
def func(引数):
return 戻り値
“`

引数を渡す場合

“`
(lambda 引数: 戻り値)(渡す値)

元記事を表示

正規表現の先読み、後読みについて

## 正規表現の先読み、後読み
正規表現の先読み、後読みを使用するタイミングがあったのですが、
よくわからない部分が多かったため整理しました

## 通常の正規表現と先読み、後読み
通常の正規表現と先読み、後読みの違いは次のようになります

– 通常の正規表現:正規表現と一致した文字列を取得します
– 先読み、後読み:正規表現と一致するか文字列を確認(取得はしない)し、位置を取得します

## 先読み、後読み
先読み、後読みの種類は4種類あります

– 肯定先読み:正規表現と一致した文字列の先頭の位置を取得します
– 否定先読み:正規表現と一致しない文字列の先頭の位置を取得します
– 肯定後読み:正規表現と一致した文字列の末尾の位置を取得します
– 否定後読み:正規表現と一致しない文字列の末尾の位置を取得します

### 取得例
実際に正規表現をチェックできるサイトを使用して確認してみます
使用サイト:https://rakko.tools/tools/57/
正規表現は先読み、後読みをした後に一文字を取得することで位置をわかりやすくしています
赤文字になっている部分が取得された文字と

元記事を表示

AWS LambdaによるBolt for Pythonの話

# 今回のお話
AWS Lambda環境でBoltを動かしてみた話と動かすまでのアプローチの方法について書いていきます。

下記記事のコード部分のみ参考にさせていただきました。

https://dev.classmethod.jp/articles/bolt-lambda/

Boltに関してはWindowsのvenv環境でpip installしたライブラリで問題ありません。

# API Gatewayについて
概ね参考記事の通りで、公式の通りSlackアプリとLambda環境を整えていきます。

さて、API Gatewayですが、諸々諸事情により使い始めた頃から、プロキシの統合の使用を使わずマッピングテンプレートなるものを使ってました。

正確ではないかと思いますが、指定のContent-Typeでリクエストが来た場合にヘッダーを取り除いたり、Bodyの部分をJSONに整形したりなどLambdaに渡す前にデータを変換してくれるものです。

あまりちゃんと調べて使っていたわけでないので、Boltに渡すデータ形式とは?という所で躓きました。

結論はリクエストペイロードはそのまま

元記事を表示

Python で Azure の 使用料金一覧表をTeamsに Post(Webhook) してみました

## 概要

[この記事](https://qiita.com/turupon/items/4e078450a6040dcec843) のPython プログラムを変更し、Microsoft Teams に サブスクリプション毎の使用料金合計一覧表と日毎の使用料金一覧表(Teamsで水平スクロールができないので、2つに分割)を1つのText項目として Post(Webhook) してみました。 Postするにあたり、データは markdown 形式に変換しています(html形式にもトライしましたが、大変見にくかった)。

### ローカル環境

macOS Monterey 12.1
python 3.8.12

### 実行プログラム

“`python:GetSubscriptionCostManagement_23.py
import os
import json
import requests
import time
import argparse
from azure.identity import AzureCliCredential, DefaultAzureCr

元記事を表示

AtCoder ABC245 E – Wrapping Chocolate の考え方と2通りの解き方: multiset, Fenwick Tree + 座標圧縮で解く

https://atcoder.jp/contests/abc245/tasks/abc245_e

考え方を述べた後、C++のmultisetと、(multisetのない)Pythonの座圧+BITの解き方を示します。

# 基本的な方針0: 小問題1
次のような問題を考えます。
– (元の問題とは違い、長さだけしか考えない)長さhのチョコがn個あります。長さwの箱がm個あります。
– 箱がチョコの長さ以上(inclusive)の時、チョコは箱に入ります。

今、チョコが、[3,2,5]で箱が[1,2,10,4]だとします。この時、以下のように解けます。
– チョコを順にみていき、`a:入る一番小さな箱`を使います。

ここで、`a`をどう調べればよいでしょう。最も単純な考え方は残っている箱をすべてforで見ていけば$O(nm)$ですが、これは工夫することが可能です。
– 両者を昇順にソートします。[2,3,5]と[1,2,4,10]になります。
– 両方の先頭にポインタを持ちます。チョコポインタを順番に見ていき、それ以上の値を持つ箱が見つかるまで+1していきます。

このようなアプ

元記事を表示

Cost Explorer API でアカウントおよびサービスプロバイダ毎に請求額を取得する

## モチベーション
2022 年 2 月 1 日以降、AWS Inc. に代わり AWS Japan が日本国内の AWS サービスの契約当事者となりました。(請求書払いアカウントは 2021 年 11 月 1 日 以降)

https://aws.amazon.com/jp/legal/awsjp/

そのためほとんどのサービス利用料については現在 AWS Japan が請求元になっているのですが、AWS Marketplace および、Amazon SES, SNS, Connect などの AMCS LLC が販売する一部のサービスについては引き続き請求元は AWS Inc. となっています。

Cost Explorer API を使用してアカウントおよび、請求元の法人 (サービスプロバイダ) 毎に請求額を取得し、以下のような CSV で出力する機会がありましたので紹介します。

“`
Account Id,Account Name,Legal Entity,Amount (USD)
000000000000,account-0000,Amazon Web Services

元記事を表示

VS Codeで「conda : 用語 ‘conda’ は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はその パスが正しいことを確認してから、再試行してください。」

# エラー

Python用のエディタとしてVS Codeを導入しようとした際、ターミナルを開くと以下のエラーが発生
![vscode_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873482/f563164f-b625-cfb3-4877-e54ca9b6e0e1.png)

# 対策

1) 設定ファイルをJSONで開く(“`Ctrl+,“`で設定を開いた後、図のボタンをクリック)
設定(JSON)を開く

2) 以下をsetting.jsonに追記

“`json: setting.json
…,
“terminal.integrated.defaultProfile.windows”:

元記事を表示

io.BytesIO()にデータフレームで作成したExcelを保存して、openpyxlで列の幅を変更してメールに添付する方法

業務でio.BytesIO()にデータフレームから作成したExcelファイルを保存した後に
openpyxlで列の幅を修正する際につまづいたのでここにメモを残します。

クソコードですが、業務終了後自宅で6時間かけてやっとうまく動いたので許してください;;;;
多分よろしくない書き方しているので動きますけどコピペはやめた方が良いです。ごめんなさい。

“`python
from csv import writer
from tkinter import W
import pandas as pd
import io
import openpyxl
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
import smtplib
from os.path import basename
from email.mime.text import MIMEText
from e

元記事を表示

PyPyで作ったプログラムをcffiでexe化する方法

## PyPyは非常に便利なコンパイラ
PyPyはPythonを高速化するための非常に便利なアプリ。
Pythonで動作が遅いな…と思ったり、処理がフリーズした時が有れば、PyPyを使うとスムーズに進む時があります。
## PyPyプログラムをexe化する必要性
PyPyを使って開発したアプリは、そのまま公開することが出来ません。
なぜなら、それをインストールした人はPyPyを持っていないと実行出来ないからです。
PythonスクリプトをPyPyを用いてexe化(実行可能ファイル化)することで、すべての人がそのファイルを実行することが出来るようになります。
## 準備
#### 1. PyPyをインストールする。
公式サイトからダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2211115/5d117451-20d8-c355-be96-2bb04d29ffc4.png)

https://www.pypy.org/

ダウンロードしたPyPyのフォルダはど

元記事を表示

Web上のHTMLからPython Notebookを自動生成してみた

## 初めに
GitHubのREADME記載のExampleとかをNotebookで実行したことがちまちまあります。
数が多いとコピペも面倒ですし、何よりそんな生産性ゼロなことに時間を奪われたくない!!
ということで`BeautifulSoup`と`jupytext`で自動化してみました。
皆さんの貴重な時間を節約するために是非ご活用くださいー!

## 実装
GithubのREADMEの場合は`element`に`div`、`class_`に`highlight-source-python`を指定すればPythonのコードブロックのみをとってこれます。その他のWebページでもパラメータをよしなに変更していただければ動くかと。

“`python
import requests
from bs4 import BeautifulSoup
import jupytext

def convert_html_to_ipynb(
url: str,
filename: str,
element: str = “div”,
class_: str = “hig

元記事を表示

SeleniumとEdgeDriverを使ってMicrosoft Edgeのダウンロードフォルダを指定する(with Python)

# はじめに
Pythonとseleniumを使ってMicrosoft Edgeのダウンロードフォルダを指定する
https://developer.microsoft.com/ja-jp/microsoft-edge/tools/webdriver/

# 準備
“`
pip install selenium
pip install msedge-selenium-tools
“`

※ただし、msedge-selenium-toolsは非推奨?になっているっぽいが、よくわからないので妥協してmsedge-selenium-toolsを使う、
※selenium4に統合されたのでそっちを使えとのこと。
※日本語翻訳は機械翻訳がひどすぎるので英語版を推奨

https://docs.microsoft.com/en-us/microsoft-edge/webdriver-chromium/?tabs=python
https://docs.microsoft.com/en-us/microsoft-edge/webdriver-chromium/capabilities-edge-

元記事を表示

テトレーションカオスと戯れる 2 – 高速化編

# テトレーションカオスと戯れる 2 – 高速化編
本記事では「[テトレーションカオスと戯れる](https://qiita.com/stat/items/1ca8793d02e4c1c1bea2)」 にて取り上げた、テトレーションフラクタルを視覚化するプログラムの高速化を試みます。
## 想定する読者
* テトレーションフラクタルの描写速度を上げたい方 (10倍以上高速化できます)
* python のマルチプロセッシングライブラリの Pool.map のサンプルプログラムを探している方
* cython による python の高速化サンプルプログラムを探している方

この記事のプログラムを動かすには、python 3.6 以上の実行環境に、matplotlib, numpy, cython をインストールしておく必要があります。インストール方法は皆様の環境によって変わるので割愛させていただきますが、一般的には
pip install matplotlib numpy cython
でできると思います。

## 高速化の戦略
今回高速化を試みるプログラムは、「[

元記事を表示

HDF5のAttribute(属性)の作成・読み取り by Python (h5py)

# 前置き
HDF5のAttributeを読み取りたいと思って検索したが、日本語の文献はCやfortranによる扱いばかりを説明したものばかりだった。[h5pyのドキュメント](https://docs.h5py.org/en/stable/high/attr.html)をさらっと見てもよくわからなかった(たぶん説明が書いてあったんだろうが、初心者ゆえあまり理解できない部分が多かった…..)。
stackoverflowに良い質問と回答があったので(以下リンク)、ほとんどそれの翻訳みたいな記事をここに記しておく(ただし、Attributeの作成に関しては省略する)。

https://stackoverflow.com/questions/66146782/how-to-read-hdf5-attributes-metadata-with-python-and-h5py

# HDF5のAttributeの読み取り
手順は
1. h5py をインストール
1. (ファイルを開くときは with がより良いらしい)
1. GroupやDatasetに .attrs を付けることでその

元記事を表示

【Dr.Sum】python連携機能を使って価格を予測してみた【DNN】

# やりたいこと
Dr.Sum ver.5.6からpython連携機能が追加されました。
Dr.Sumの中に入っている大量のデータを機械学習に突っ込むことができます。
今回は、scikits-learnライブラリのボストンの不動産価格サンプルを使ってDeep Neural Network (DNN)を使って価格を予測してみます。

※ 本記事はDr.Sumのpython 連携機能にフォーカスしているので手法についてはあまり触れません。

# 学習
### スクリプト
Dr.Sumのpython連携機能では、SQL文からpythonの関数を実行します。
デバッグにはDr.Sum内のpython環境を利用する必要がありますが、少し横着をしてローカルのpython環境でデバッグできるようにしています。

“`python:train.py
import io
import pandas as pd
from sklearn.model_selection import train_test_split
import joblib

MODEL_SAVE_PATH_FOR_DEBUG = “

元記事を表示

Bagging や Blending で予測の分散を考慮する

回帰モデルで予測の分散を考慮できるモデルとして、ガウス過程回帰があります。でもあれはあれでけっこうクセがあると思ってて、他の回帰モデルでも予測の分散を考慮できたらなと思ってました。そこで、アンサンブル手法として知られる Bagging や Blending を使えば良いと思ったので試してみました。

# 予測したい関数

ここでは、単純のため以下のような1変数関数を用います。

“`python
import numpy as np

f = lambda x: 0.05*x+0.2*np.sin(x) + 0.3*np.cos(2.1*x) + 0.5*np.sin(0.61*x) + 0.2*np.sin(x/3.1) + 0.1*np.sin(5.1*x)
“`

図示したらこんな感じ。

“`python
import matplotlib.pyplot as plt

x_domain = np.linspace(-30, 30, 500) # 関数の範囲
plt.plot(x_domain, f(x_domain))
plt.show()
“`

![Baggi

元記事を表示

Python: DockerでFastAPIによるRESTAPI環境を起動するサンプル一式

https://github.com/yagrush/myfastapi

FastAPIをDockerで実行するテンプレート一式です。
PythonとFastAPIを使ったRESTAPIサーバがすぐに試せます。
また、pytestを使ってAPIのテストコードをDockerで実行するサンプルも付いています。

## 必要環境

Windows10, Mac, Linux などに Docker + docker-composeとGitをインストールしてください。

——–

### Windows10

WSL2でUbuntuなどのLinux仮想環境を作って、そこにDocker + docker-composeをインストールするのがおすすめです。

* マイクロソフト WSLの公式マニュアル
https://docs.microsoft.com/ja-jp/windows/wsl/

* WSL2 Ubuntu 20.04 にDocker, docker-composeを入れる
https://qiita.com/yagrush/items/f12563eef6a1dd77

元記事を表示

PN532 NFC RFID module のインターフェースを直接叩いて Felica 学生カードを読む

(Felica/Mifare/NFC チャレンジシリーズ) その他の記事はこちら 「Felica/Mifare/NFC でいろいろ実験」
https://qiita.com/nanbuwks/items/1f416d6e45a87250ee0a

—-

「RaspberryPiでPN532 NFC RFID module で Felica 学生カードを読む」
https://qiita.com/nanbuwks/items/3858283873e968316a2d

では、FCF Student カードに入っている学生証の学籍番号を読んでみました。

しかしながらちょっとスッキリしないです。

“`

tag.dump() # why need?

“`
を入れないと学籍番号をうまく読まなかったり、ライブラリで何のコマンドを PN532 に送信しているのかよくわからなかったりします。

さて、
「libnfc で pn53x-tamashell を使ってみる」
https://qiita.com/nanbuwks/items/d2c47f6b24ec07f48dee

元記事を表示

Python で Azure の サブスクリプションを列に日を行とする使用料金一覧表を作成してみました

## 概要

Azure SDK for Python を利用して、サブスクリプションを列に、日を行とする使用料金表を作成し、この表の最終行にその日までの合計の使用料金を追加した一覧表を作成するための Python プログラムです。また、サブスクリプション毎の合計を利用料金の降順で一覧表示する Python プログラムも追加しています。

### ローカル環境

macOS Monterey 12.1
python 3.8.12

### 実行プログラム

“`python:GetSubscriptionCostManagement_22.py
import time
import argparse
from azure.identity import AzureCliCredential, DefaultAzureCredential
from azure.mgmt.resource import SubscriptionClient
from azure.mgmt.costmanagement import CostManagementClient
import pan

元記事を表示

Blender でハノイの塔の動画を自動生成

https://twitter.com/hibit_at/status/1506221266981728257

 上のような動画を作成しました。

 Blender 上で Python スクリプトを走らせることにより大量の画像を生成しています。

 今までの記事で述べたことに比べて新しい点はそこまでありませんが、定期的に記事にまとめた方が技術が身につくのと、誰かの助けになるかもしれないので一応。

# オブジェクトの作成

 まずは円盤の集合体を生み出します。手作業で生み出してもいいですが、せっかくのスクリプトなのでそこも自動化しましょう。

“`python

import bpy
import numpy as np

np.random.seed(40)

# parameter
height = 4

for i in range(height):
obj = bpy.ops.mesh.primitive_cylinder_add(vertices=(i+1)*height*5,radius=i+2, depth=1, location=(0,0,height-1

元記事を表示

OTHERカテゴリの最新記事