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

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

GCP Dataflow Classic Templateで複数ファイルを取り扱う[備忘録]

Apache BeamのワークフローをGCP Dataflow上で動かせるようになるには[Templateの登録](https://cloud.google.com/dataflow/docs/concepts/dataflow-templates)が必要です。TemplateにはFlex TemplateかClassic Templateが選べますが、今回はClassic Templateについて、特に複数ファイルを使ったテンプレートについての話です。

[Dataflowのチュートリアル](https://cloud.google.com/dataflow/docs/guides/templates/creating-templates#python_7)では特に複数ファイルについての言及はなく、代わりに[Apache Beam側のドキュメント](https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/#multiple-file-dependencies)に説明があります。

ここで例示された

元記事を表示

顔写真をめっちゃ綺麗にする GFPGAN

#顔に特化した超解像モデルの使い方です
![ダウンロード (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/cf68c289-845d-a46a-1c2e-cf4092d08363.png)

#写真の多くは顔写真

超解像モデルはいろいろありますが、一般的な画像データセットやアニメに特化したものが多いです。
世の中の多くの写真は人の写真。

#GFPGANは顔専用
顔を特に綺麗にしてくれます。

https://github.com/TencentARC/GFPGAN

#使い方

実行はかんたん1行。

“`shell
python inference_gfpgan.py –upscale 2 –test_path inputs –save_root results –model_path experiments/pretrained_models/GFPGANCleanv1-NoCE-C2.pth –bg_upsampler realesrgan
“`
![タ

元記事を表示

AtCoder ABC214 F-Substrings の「印をつけた文字が隣り合ってはいけない」という制約を外した問題を解いてみた

[AtCoder ABC214 F – Substrings](https://atcoder.jp/contests/abc214/tasks/abc214_f) の [公式解説](https://atcoder.jp/contests/abc214/editorial/2440) は、まず「印をつけた文字が隣り合ってはいけない」という制約を外した問題から解説されている。その問題は次のとおりである。

> $S$ の空文字列でない部分文字列の個数を求めよ。ただし、部分文字列とは元の文字列から $0$ 文字以上取り除き残った文字を元の順番で並べたものである。

そしてその解説の中で、計算量に関して次の様に書かれている。

> 計算量は一見 $O(|S|^2)$ に見えますが、文字の種類数を $σ$ としたとき、累積和を用いれば $O(|S|)$、用いなくとも $O(σ|S|)$ で十分高速です。

そこで、累積和を用いて計算量が $O(|S|)$ であるコードに挑戦してみた。

累積和を ${\rm{dp}}_i$ で表したいので、公式解説の ${\rm{dp}}_i$ を $a_i$

元記事を表示

import パッケージの解決

インストールしたパッケージが VS Code エディターで、importエラーになってしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399204/84c27ee2-eb1f-7ccb-eba0-dac78ccf83af.png)

“`
Import “hello” could not be resolved Pylance reportMissingImports
“`

## Pylanceの設定にパッケージフォルダーを追加する

[ファイル]→[ユーザー設定]→[設定 (Ctrl+,)]を開き
`python.analysis.extraPaths`にパッケージのフォルダーパスを追加する

“`json
{
“python.analysis.extraPaths”: [
“C:\\Python310\\lib\\site-packages\\”
]
}
“`

参考:https://github.com/microsoft/pyla

元記事を表示

【Project Euler】Problem 75: 唯一の整数直角三角形

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

### 問題 75. 唯一の整数直角三角形

原文 [Problem 75: Singular integer right triangles](https://projecteuler.net/problem=75)

**問題の要約:$L \le 15 \times 10^5$の針金を折って各辺が整数の直角三角形を作った時、一通りしかできないような$L$の数を求めよ**

例えば120は以下のように3通りの直角三角形が作れます。

“`math
120: (30,40,50), (20,48,52), (24,45,51)
“`

まず基本ピタゴラス数の生成ですが「[Problem 9: 特別なピタゴラス数](https://qiita.com/masa0599/items/36a0b8a7d82e689de6d8)」で作

元記事を表示

【Project Euler】Problem 74: 各桁の階乗の和のチェーン

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

### 問題 74. 各桁の階乗の和のチェーン

原文 [Problem 74: Digit factorial chains](https://projecteuler.net/problem=74)

**問題の要約:$n<10^6$の自然数の階乗数字和をループになるまで次々に求めた長さが60になるものの数を求めよ** 各桁の階乗の和のチェーンがループになるのは以下のような限られたのケース。 ```math 145 → 145 \ (1\ cycle) \\ 169 → 363601 → 1454 → 169 \ (3\ cycle) \\ 871 → 45361 → 871 \ (2\ cycle)\\ 872 → 45362 → 872 \ (2\ cycle) ``` どの数から始めても最終的にこれらのループの

元記事を表示

コピペですぐ動く仮想通貨の自動売買損益グラフ

#とにかく動かそう
以下を開いて
https://colab.research.google.com/
+コードのボタンを押して以下をコピペ
※Googleログインは必須

“`python
!pip install timedelta
!pip install datetime
!pip install git+https://github.com/MtkN1/pybybit.git
!pip install rich
!pip install pandas
!pip install numpy
!pip install tqdm
!pip install matplotlib

from datetime import timedelta, timezone, datetime
import math
import matplotlib.pyplot as plt
import pybybit
import numpy as np
import pandas as pd
from tqdm import tqdm
from matplotlib import pyplot as

元記事を表示

力学系の平衡点の安定性

 ちょっと探せば力学系の情報は無限に出てきますが、自分で整理したいと思ったので残しておきます。以下はちゅらデータでの社内研修を一部圧縮して一部丁寧にしたような内容です。

# 力学系とは
## 連続と離散
 以下ふたつの条件を満たす可微分関数 $\varphi: T\times S\rightarrow S$ を**力学系**といい、特に時刻 $T$ が $\mathbb{R}$ の場合は**連続力学系**、$\mathbb{Z}$ の場合は**離散力学系**と呼びます。

1. $\varphi\left(0, \cdot\right)$ は恒等関数
2. 任意の時刻 $t_1, t_2 $ に対し $\varphi\left(t_1,\cdot\right)\circ \varphi\left(t_2, \cdot\right) = \varphi\left(t_1+t_2, \cdot\right)$

 つまりは動く点の時刻 $0$ での初期状態 $x \in S$ から正または負の時間経過したときの状態を返す関数というわけです。ふたつめの条件は「どの時刻から観察を始めて

元記事を表示

KaggleのHouse Pricesで、全コピペから脱出するぞ!

## 1.前置き

こんにちは!
まだAdvent Calendarやってるのって?
はい、やってます!!

昨年11月頃からKaggleの勉強を始めているのですが、使うライブラリは多いし、アプリと違って動いたらOKってわけでもないし、いまいち先人達のコードの全コピペから脱出することができなかったのですが、

`1. コピペは良いが、1行ずつ行う`
`2. わからないメソッドがあったら、とりあえず1回ググる`
`3. 別の課題で、これまで得たものを使ってみる`

という3つのことを意識して、Udemyの講座などを進めてみました。
すると、なんとなくですが、①武器を集めて、②武器を適切に使う、ということを意識して学習に取り組むことができるようになってきました。

そこで、全コピペせず、「自分の頭を使って」(実際はこれまで学んだことのつぎはぎですが)コードを書いてみました。

## 2.行ったこと
**データ可視化 → 前処理 → 学習**

の順で行いました。
こちらのpyenvでimport torchしたら、_ctypesで怒られた(→解決)

pyenvで予期せぬエラーが起こり、自分なりに解決できたので残しておきます。

# なぜ起こったのか

pyenvで環境構築をしてたのですが、env作って、ライブラリ入れるまでは完璧だったのですが、
PyTorchをimportする時に以下のエラーが吐き出されました。

“`Ruby:bash
>>> import torch
File ““, line 1, in
File “/home/OOOO/.pyenv/versions/3.8.9/lib/python3.8/site-packages/torch/__init__.py”, line 16, in
import ctypes
File “/home/OOOO/.pyenv/versions/3.8.9/lib/python3.8/ctypes/__init__.py”, line 7, in
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No

元記事を表示

Discord Botがエラーを吐いたときにエラーIDを発行して通知する その2

Discord Botでエラーが発生したときにコンソールをわざわざ見に行くの、めんどくさいですよね?
エラーが発生したときにユーザーにその旨を通知したいですよね?
IDを振って管理したいですよね?
__*それならコーデディングだ!*__
## しくみ
#### エラー発生時
1. on_command_errorでエラーを拾う
2. そのエラーに関する情報を専用のチャンネルに送信する
3. そのメッセージのIDを36進数に変換
4. 変換したIDをつけてエラー情報を実行者に返す

#### エラー情報取得時
1. 36進数のIDを10進数に直す
2. 直したIDを用いてエラー情報を取得し、そのメッセージのembedをそのまま送信する

こんな感じで。

## れっつこーでぃんぐ!

numpyとtracebackをインポートしておいてください。

“`py
@bot.event
async def on_command_error(ctx, error):
if isinstance(error, commands.CommandNotFound):
awai

元記事を表示

GCSトリガーによるBigQueryへのインポート

■やりたいこと
Cloud Storageにcsvファイルを配置したことをトリガーにBigqueryにデータインポートする&取り込むファイルをファイル名で判定する
■方法
Google Cloud の Cloud Functions の GCSトリガー
■言語
python

以下コード
—————————————-
from google.cloud import bigquery

client = bigquery.Client()

def main(data, context):
    
    # gcsに配置されたファイル情報の取得
    bucket_name = data[“bucket”]
    file_name = data[“name”]
    uri = ‘gs://{}/{}’.format(bucket_name, file_name)

    # インポートしたいcsvファイル名に含まれる文字列を指定
    csv_file = “ファイル名に含まれる文字列”

    # データ更新先の

元記事を表示

Google Calendar APIのQuick StartをUTC(協定世界時)ではなくてJST(日本標準時)で使う

# はじめに
最近LINEボットを作成しました。
Googleカレンダーに登録した予定を通知してくれるだけのボットですが、知人や母に使用してもらってます。
LINEボットに関する記事もそのうち書きたいなとは思ってるんですが、今回はGoogleカレンダーのイベントを取得する際にハマった沼について書き留めておきます。

# ハマったところ
GitHubにあるサンプルコードの、57行目のあたりです。

“`quickstart.py
# Call the Calendar API
now = datetime.datetime.utcnow().isoformat() + ‘Z’ # ‘Z’ indicates UTC time

# nowは2022-02-04T23:59:59.999999Z って感じになります。
“`

nowの使いみちですが、APIを叩く際に`timeMin=now`としてやることで、何時以降の予定を取るか指定できるみたいです。
ちなみに何時までかを指定するのは`timeMax`みたい。
こうしてあげると、**現在時刻以降の予定だけを取得**できるんですよね。

元記事を表示

AWS Lambda 内容整理

#【AWS Lambda 内容整理】
実務で Lambda × Python でコードを書くことになりました。
そのための内容整理です。

##Lambda:サーバーレスコンピューティングサービス
– サーバー無しで、コードだけで実行できるサービス
– サーバーの管理が不要
– 稼働している時間だけが課金対象
– 負荷がかかると自動スケーリングをおこなってくれる。
– 言語やメモリの制限はある。

##想定される使い方
– zipファイルを作成して、直接アップロード
– 処理を実行後、S3に保存する。
– S3のIAMポリシーを追加する。
– 定期的にLambda関数を実行したい。
– Amazon EventBridge と組み合わせる。
– 毎月1日に実行。

元記事を表示

ローカルでAWS Lambdaをいい感じにデバッグする方法

# はじめに

サーバーレスなどでLambdaを使うとかっこいいけど、ローカルで実行しづらく
かと言ってAWSにデプロイして動かしてデバッグするというのは時間と手間がかかるので
なんかいい方法ないかなと模索した結果のまとめです。

# 前提
* LambdaをPythonで書いている(多分他の言語でも大丈夫)
* デプロイは、ECR経由でDockerイメージで実施
* [lambci/docker-lambda](https://github.com/lambci/docker-lambda)を使う

# 方法
## 依存ライブラリなどなし

READMEにあるように、

“`bash
docker run –rm -v “$PWD”:/var/task:ro,delegated \
lambci/lambda:python3.8 lambda_function.lambda_handler
“`

とするだけ。
`event` に渡したいJSONパラメータがあるのであれば、`lambda_handler` の後に指定するだけよいです(これもREADMEにある通り)
この辺は、い

元記事を表示

集え!ワンライナーWordle選手権!

# はじめに
Wordle流行ってますね。私も数日前からハマっています。
シンプルなゲーム性で誰でも楽しめて、一日一回しかできない仕様で飽きさせない。とても魅力的なゲームだと思います。

……でももう少し遊びたい?
**自前で実装してしまいましょう。**

……シンプルだし短く書けるよね?
**…ぇ…ええ、ワンライナーしましょう。**

# ワンライナーします
私はPythonくらいしかワンライナーで書けるほどの文法を知らないので、今回はPythonで実装します……

“`python:oneliner_wordle.py
print(‘\n’+[‘YOU WIN’,(l:=[i.upper() for i in __import__(‘requests’).get(‘https://www-cs-faculty.stanford.edu/~knuth/sgb-words.txt’).text.splitlines()if len(set(i))==5and len(i)==5]), (a:=__import__(‘random’).choice(l)),(b:=False),f’Y

元記事を表示

多項式回帰の実装

#数式を使った説明
###多項式の一般形
$n$次の多項式は下記の式で表すことができる。この場合、$a_0, a_1, …, a_n$が関数のパラメータとなる。

“`math
f(x) = \sum_{k=0}^n a_k x^k
“`
###最小二乗法
最小二乗法とは、下記の式で表される二乗和$J$を最小にする、関数$f(x)$のパラメータを求めることである。
$t_j$は各データを表す。関数の出力と各データの差を2乗して総和をとることで、二乗和を表す。

“`math
J = \sum_{j=1}^m (f(x_j)-t_j)^2
“`
機械学習においては、上記に$\frac{1}{2}$を掛けて誤差とする、下記の二乗和誤差がよく使われる。$\frac{1}{2}$を掛けるのは微分する際に扱いやすくなるためである。

“`math
E = \frac{1}{2} \sum_{j=1}^m (f(x_j)-t_j)^2
“`
###最急降下法
多項式回帰の場合、二乗和誤差$E$は下記の式で表される。

“`math
E = \frac{1}{2} \sum_{j=

元記事を表示

Pythonでmapオブジェクトを複数使おうとしたら怒られた

# 該当のコード

“`python
data=[(155,48),(154,43),(157,46),(165,58),(161,49),(160,51),(158,44),(175,60),(163,47),(159,43),(159,44),(163,45),(155,44),(149,46),(160,48),(168,49),(163,55),(153,47),(162,51),(160,50),(159,47),(148,42),(165,56),(158,48),(170,54),(161,44)]
bmi = lambda x:round(x[1] / ((x[0]/100) ** 2))
map_obj=map(bmi,data)

print(“最小BMI:”,min(map_obj),
“最大BMI:”,max(map_obj))
“`

これを実行するとエラーになります。

“`
Traceback (most recent call last):
File “t.py”, line 6, in
“最大BMI:”,

元記事を表示

【Project Euler】Problem 73: 範囲内の分数の数

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

### 問題73:範囲内の分数の数

原文 [Problem 73:Counting fractions in a range](https://projecteuler.net/problem=73)

**問題の要約:分母が$d \le 12000$の既約真分数が$1/3$と$1/2$の間にいくつあるかを求めよ**

例題として挙げられているのが$d \le 8$のときで、解は3つです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1922159/9df815e6-29c8-91e5-25b7-e5169389da7b.png)

素直に考えると以下の式になるので

“`math
\frac{1}{3} < \frac{n

元記事を表示

【Project Euler】Problem 72: 分数の数

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

### 問題 72. 分数の数

原文 [Problem 72: Counting fractions](https://projecteuler.net/problem=72)

**問題の要約:分母$d \le 10^6$の既約真分数の個数を求めよ**

例として$d=8$では以下のように21個あります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1922159/a023d6a0-7bc8-b1d7-403c-5aa686d0d1da.png)

問題の見た目は問題 71.と似ていますが内容は全く異なります。以下のように分母$d$の既約真分数の分子の数は「dと互いに素である1以上d以下の自然数の個数 」となり[「オイラーのφ関

元記事を表示

OTHERカテゴリの最新記事