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

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

【Project Euler】Problem 79:パスコードの推測

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

### 問題 79.パスコードの推測

原文 [Problem 79: Passcode derivation](https://projecteuler.net/problem=79)

**問題の要約:パスコードの指定された位置の数3桁(位置の順番になっている)を入力した結果が50回分与えられたとき考えられる最短の元のパスコードを求めよ**

* 例えばパスコードが531278のとき、2,3,5番目の数字を指定されたら317を入力する

以下のようなステップで考えて行きます。

1. 最短のパスコードということなので入力した3桁の数字に含まれていないものは除外し、それ以外の数字は1個づつしかないと仮定します。
1. 3桁の数字が位置の順番になっているので、例えば317だとすると元のパスコードで1は3より右に、7は1より右にある

元記事を表示

pythonで親クラスの任意のメソッド実行前後に特定の処理を行う方法

# 背景.

例えば、「テーブルはレコードのリストであり、レコードは辞書(連想配列)である」(=テーブルとは辞書のリストである)という考え方に基づいて`Table`型を作るとしよう。
この考え方に基づいて早速

“`python3
class Table(list):
def __init__(self, columns):
self.__columns = columns
def to_excel(self): …
def to_pd_df(self): …
def to_numpy(self): …

@classmethod
def from_excel(Table, excel_path): …
@classmethod
def from_pd_df(Table, df): …
@classmethod
def from_numpy(Table, arr2d): …
“`

と書いたとする。
後は`list`と同じように辞書を`append`, `

元記事を表示

PythonでPDFのページを画像に保存する方法

# はじめに

個人の備忘録としてのメモです

# 方法

## PyMuPDF

“`python
import fitz

with fitz.open(“test.pdf”) as doc:
for i, page in enumerate(doc):
image = page.get_pixmap()
file_name = f”{i+1}.jpg”
image.save(file_name)
“`

## pikepdf + pdf2image

“`python
from pdf2image import convert_from_path
from pikepdf import Pdf

with Pdf.open(source_path) as pdf:
for i, page in enumerate(pdf.pages):
page_size = page.MediaBox
temp_pdf_file = f”temp_{i+1}.pdf”
temp

元記事を表示

「エントロピーと秩序」のプログラムをpythonで書く~スターリングエンジン

「エントロピーと秩序」のプログラムをpythonで書く第4弾。
今回は「スターリングエンジン」というタイトルがついているbasicのプログラムをpythonで書き直します。

元のプログラムは2ピストン型の[スターリングエンジン](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)を、BASICのLINE命令を多用して頑張ってアニメーション化しています。

1. 移動後のピストンの位置に黒でLINEを引く
2. 移動前のピストンの位置に白でLINEを引く(前のLINEを消す)

を繰り返してアニメーション化しているのですが、特にピストンが上へ動く時のコードに苦労の跡が見られます。マジックナンバーが多くて理解するのに時間がかかりました・・・

このプログラムで初めてGOSUB(一種の関数)が出てきました。GOSUBでは呼び出し先で何事もなかったように変数(I)を参照できるんですね。

“`text

元記事を表示

[AWS] サーバレスアプリに対するドメイン駆動設計(DDD)の適用

# 1.はじめに
ここ最近AWS関連の情報収集に傾倒していることもあり、開発周りの知識のアップデートが少ない気がしたのでドメイン駆動設計(DDD)の本を2冊ほど読んでみました。
これによりなんとなく勘所は掴めた(気がする)ので、実際にDDDをAWSのサーバレスアプリに組み込んでみたいと思います。
例によって私の大好きなフレームワークであるChaliceを使用したアプリケーションを対象にしていますが、言語がPythonであれば大体は応用が利くのでは、と考えています。たぶん。

# 2.DDD適用における前提
* 適用対象のソースコードは[こちらの記事](https://qiita.com/hiro-tech1192/items/d9941b1ff4e07506797b)に掲載したものを使用します。OpenSearch(Elasticsearch)を使用した商品検索APIのサンプルで、比較的シンプルなコードです。
* 前述の通り、サーバレス用のフレームワークにはChaliceを使用しています。言語はPythonです。Chaliceをご存じない方は末尾に解説ページのリンクを貼っているので

元記事を表示

省略S式パーサの実装例(純LISPインタプリタ付き)

筆者の別記事『[簡易LISP処理系の実装例【各言語版まとめ】](https://qiita.com/ytaki0801/items/dcb0fe48cbeab30ac40d)』の姉妹版です.

ここで言う省略[S式](https://ja.wikipedia.org/wiki/S%E5%BC%8F)とは,括弧と空白区切り(と文字列としてのシンボル)のみの,多次元配列構造表現です.LISPコードの多くがこれで表現可能で,[Scheme](https://ja.wikipedia.org/wiki/Scheme)風に表現した例は次のようになります.

“`lisp:
((lambda (x) (cons x (cons x (quote ())))) (quote a))
“`

S式パーサというなら,ドット記法を含むコンスセル構造表現にも対応するべきですが,これだけでもゼロから作るとなると割と大変で,小さなLISP処理系本体よりも複雑になります.

…ということを示すため,本記事ではパーサ実装例と共に,利用例として[純LISP](https://ja.wikipedia.org/wi

元記事を表示

【Pyhon】tweepy で Twitter API V2を使おうとしたらつまずいたのでメモ

##参考ページ
https://research-labo.com/howto-twitterapi-getkeys/

https://qiita.com/penguinprogrammer/items/b220be0c203eaaad015a

## トラブル1
###tweepyのバージョンが自動で最新にならない
pip review –auto ではなぜかtweepy==3.9.0にしかならず、tweepy.Client()が使えなかった

### 解決

https://pypi.org/project/tweepy/

pypiのページに行って、最新リリースのバージョンを調べ、バージョン指定してpip install する

“`
pip install tweepy==4.5.0
“`

## トラブル2
###Developer Portalに「App permissions」のボタンが見つからない
初期状態では「App permissions」が「read」になっているため、読み込み以外のことをしようとすると「 403 Forbidden」のエラーが出

元記事を表示

numpyだけで重回帰分析し、t値、p値を求める

卒論で何度も重回帰分析を使うのでスクラッチで関数を書きました.
コピペで使えると思います.

numpyの`np.linalg.lstsq(X, y, rcond=None)`でも重回帰分析を使えますが回帰係数の標準誤差が出てこないのでt値,p値を調べられず痒いところに手が届きません.scikit-learnにも同様の機能は実装されていますが重回帰しか使わないのに重厚長大な機械学習用ライブラリをインストールするのも気が引けます.

### 実装

“`python:main.py
import random
import math
import numpy as np

“””
引数
y: 被説明変数の配列(N)
X: 説明変数の行列(N,K)

返値
coefficient: 回帰係数(K)
r2: 決定係数(重決定) R2
std_error: 回帰係数の標準誤差(K)
t_value: 回帰係数のt値(K)
p_value: 回帰係数のp値(K)

ここに,N: データ数,K: 説明変数の数.

多くの重回帰分析では定数項が必要だと思いますがXに1の列を加えて対応してください

元記事を表示

「新・明解Pythonで学ぶアルゴリズムとデータ構造」で勉強日記#2

[前回の続きです](https://onl.la/H1J9pWY)
ただ単に続きをつらつら並べただけなのでほぼ模写なのですが。
規約違反だったらコメントで教えてください。

さて、毎回ある学びなのですが、ある程度pythonを触っていると、どういう表記が可で、どこら辺から不可なのかいまいちわからないんですよね。

そういう意味では[「新・明解Pythonで学ぶアルゴリズムとデータ構造」](https://www.amazon.co.jp/%E6%96%B0%E3%83%BB%E6%98%8E%E8%A7%A3Python%E3%81%A7%E5%AD%A6%E3%81%B6%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0-%E6%96%B0%E3%83%BB%E6%98%8E%E8%A7%A3%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%9F%B4%E7%94%B0%E6%9C%9B%

元記事を表示

Anacondaでfbprophetがインストールできない時の対処

# 状況
Anaconda環境でfbprophetがインストールできない

“`
Specifications:

– fbprophet -> python[version=……..

Your python: python=3.9

If python is on the left-most side of the chain, that’s the version you’ve asked for.
When python appears to the right, that indicates that the thing on the left is somehow
not available for the python version you are constrained to. Note that conda will not
change your python version to a different minor version unless you explicitly specify
that.
“`

インストールしようとしたライブラリ

元記事を表示

Python+Pulpを使ってシフト表を自動作成

#はじめに
後々加筆修正予定(2022/02/08)
もう少し分かりやすく加筆修正する予定ですがとりあえずうp

以前、こういった動画を見ました。
https://www.youtube.com/watch?v=0KRlHHud_dQ/
遺伝的アルゴリズムを用いてシフト表を作成するというもの。
数理最適化というアプローチで同じシフト表を作成してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/823518/eeb27eae-e2ad-2d7d-20dc-066594d6e511.png)

動画では
Excelから表を取得して再度Excelに吐き出していますが
現状そこは割愛(後々Excel又はスプレッドシートからデータを取得するところから書きます。)

ちなみに環境はGoogle Colaboratoryです。

#今回作成するシフト表
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

強化学習の基礎

#強化学習概論
参考図書↓

![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1820910/ef51

元記事を表示

macOSのメモリ使用状況を常に表示する

## はじめに

### この記事を読むとできること

macOSのそのときどきのメモリの使用状況を、確認することができます。→次に買うMacBookに必要なメモリ搭載量を推定できます。

### ここにいたった背景

MacBookを買い換えようとおもいました。32GB必要か、16GBで済むのか、ここが大きな悩みどころであります。そこで、実際の使用量をリアリタイムで知りたいなあと。もちろんアクティビティモニタを見ればわかりますが、いちいちアプリを切り替えたり、ウィンドウを開くのはいかにもめんどうくさいです。メニューバーに常時表示していれば、目の端でこまめにチェックできます。

## 動きの概要

ツールバーに、使用済みメモリを表示します。クリックすると詳細データをプルダウンで表示します。

## 詳細

### 1. S

元記事を表示

ホモロジー群を計算しよう

トポロジーを用いた位相幾何学がいろいろな分野で応用されていると思います。
例えばドーナツの穴の数$\g$が集合の性質を特徴づけるといったことが有名だと思いますが、こういったものを決めるのがベッチ数という数です。これはホモロジー群の次元で決まるため、ホモロジー群を計算することは位相幾何学において重要でしょう。

まずは基本概念についておさらいします。

#単体

複数の点を頂点としてできる図形を単体といいます。単体には向きがあります。また、単体に含まれる点の数を次元と言います。$r$次元の単体を$r$単体と呼ぶこともあります。

例えば$(p_0p_1)$は点$p_0$から点$p_1$へ向かう線分です。

![線分.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/190a0ae7-ed59-f67b-b95f-75740e4fd472.png)

$-$をつけると向きが逆になり、
$(p_1p_0) = -(p_0p_1)$
となります。ただし、1点$p_i$については$-p_i = p_

元記事を表示

【Project Euler】Problem 78: コインの分割

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

### 問題 78.コインの分割

原文 [Problem 78: Coin partitions](https://projecteuler.net/problem=78)

**問題の要約:コイン$n$個を分割する方法の数$p(n)$が$10^6$の倍数になる最小の$n$を求めよ**

分割問題3部作の最後です。「[Problem 76: 整数の分割](https://qiita.com/masa0599/items/4382a49e4a28799f7f6f)」と同じなのですが数が全然大きいのでまた違ったアプローチが必要になります。とても100番以下の問題とは思えませんね。

とりあえずProblem 76で紹介した**npartition**で単純に探して見ます。5分以上かかりますが答えは見つかります。

“`python

元記事を表示

【Project Euler】Problem 77: 整数を素数に分割

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

### 問題 77. 整数を素数に分割

原文 [Problem 77: Prime summations](https://projecteuler.net/problem=77)

**問題の要約:自然数$n$を素数の和で表す組み合わせ初めて5000を超える$n$求めよ**

今回は素数の和と言うことでとりあえず再帰関数で全探索しました。値があまり大きくないので何とか1分ルールはクリア。

“`python
from sympy import primerange
from copy import copy

def cutNumPrimes(L, n):
count = 0
for pr in Primes:
if len(L) > 0 and pr < L[-1]: continue # List sho

元記事を表示

【Project Euler】Problem 76: 整数の分割


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

### 問題 76. 整数の分割

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

**問題の要約:100を自然数の和で何通りの組み合わせで表せるかを求めよ**

### 分割数の漸化式
これは有名な「[自然数の分割(Wikipedia)](https://ja.wikipedia.org/wiki/%E8%87%AA%E7%84%B6%E6%95%B0%E3%81%AE%E5%88%86%E5%89%B2)」の問題ですね。たぶんこれだけで本が書けるくらい多くの話題がありそうですが、こちらの「[分割数の意味と性質・ヤング図形の活躍](https://manabitimes.jp/math/888)」が割と簡潔にまとまっている

元記事を表示

Django models to DataFrame to csv

“`python

from datetime import datetime
import numpy

from django.core.management import BaseCommand
from django.db.models.fields import DateTimeField, BooleanField

from model import YourModel

import pandas as pd

# Usage
ExportModel(YourModel, ForeignKey)

class ExportModel:

def __init__(self, model, key):
self.target_model = model
self.key = key
self.target_key_value = {“key”:key}

def exec(self):
if self._target_table_check_exists_key():

元記事を表示

Python standalone アプリに認証機能を入れたいメモ

## 背景

Python アプリを pyinstaller あたりで配布したい.
ソースコードは開示したくない. アクセス制限(ライセンス認証)を入れたい.

## Possible way

まず, pyinstaller には python code を暗号化(16 文字のパスコード)する機能がありますので, これを利用するとよいでしょう.

https://pyinstaller.readthedocs.io/en/stable/usage.html#encrypting-python-bytecode

PyArmor などで難読化を先に行っておくとより安心でしょうか

## アクセス制限

web サイトログインのように, アプリ起動時にチェックでしょうか.

インターネット接続を許すなら 2FA ログインとか

https://www.section.io/engineering-education/implementing-totp-2fa-using-flask/

## 注意点

3rd party module のライセンスを確認する(GPL なのがあったらソー

元記事を表示

[Python]画像の余白を白埋めして正方形にする方法

#はじめに
画像を正方形にリサイズしたいとき,画像のアスペクト比を維持しようとするとどうしても上下左右のいずれかに足りない画素が生まれてしまいます.
そんなときにその余白を適当な画素で埋めて正方形の画像をつくるプログラムをOpenCVとPillowで記述しました.
余白を作る際には対象の画像が上下左右いずれにおいても中心になるようにしています.
一応リサイズするプログラムも載せていますが白埋めだけなら要らないです.

※正方形以外の画像の余白埋めには対応していません.

#実際の画像変換例
![変換例.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327561/a596ac9e-7098-d825-fb3e-8d320a2c8b4d.jpeg)

#コード

##リサイズする
“`Python
def resize (image, size):
h, w = image.shape[:2]
aspect = w / h
nh = nw = size
if 1 >= a

元記事を表示

OTHERカテゴリの最新記事