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

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

unittest Mockの使い方をメモ

# 背景
pythonのunittest.Mockの使い方をまとめておく

# 実装

## mockを引数経由で渡せる場合

#### 対象の実装

“`py:domain/hoge.py
# obj.execute() が例外投げる場合、retry_countの回数だけ再実行するメソッド

class Hoge:
def retry_with_error(self, obj, retry_count: int = 2) -> None:
count = 0

while True:
try:
obj.execute()
return
except Exception as e:
count += 1
if count > retry_count:
raise e
“`

#### テストの実装

“`py:tests/ho

元記事を表示

アルゴリズムのモヤモヤをPythonで解消(5): マージソート


##### [前回] [アルゴリズムのモヤモヤをPythonで解消(4): 選択ソート](https://qiita.com/mingchun_zhao/items/d475e545252591d9f123)

## はじめに

`Pythonでアルゴリズムを楽しむ`、第5弾です。

## 今回のアルゴリズム: マージソート

### 問題

以下8つの数字を昇順で整列せよ。
`8 4 3 7 6 5 2 1`

### 解決案

マージソートを使用し、解決します。

– Wikipediaから[マージソート(merge sort)](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%B8%E3%82%BD%E3%83%BC%E3%83%88)
– ボトムアップの分割統治法による、ソートアルゴリズム
– 大きい列を多数の列に分割し、それぞれマージする
– 作業を並列化できる
– 整列済み複数個の列を1個の列にマージする際
– 小さい

元記事を表示

Raspberry pi(paho)でのMQTTメッセージ購読の話

今回はRaspberry piでのMQTTメッセージを購読する方法を調査しました。
Raspberry piでの実装言語は… Pythonで行ってみました。
Pythonで行うとなるとpaho-mqttを使うと楽らしいので購読を行うだけのサンプルプログラムを作成してみました。

メインの参照はこちら…

https://github.com/eclipse/paho.mqtt.python

さまざまなサイトを見ましたが要素だけを抽出しました。
参考にさせていただいた全世界叡智に感謝
履歴残していませんでした;;

## ターゲット
– hostname : raspberrypi
– Raspberry pi : 3 Model B v 1.2
– OS : Raspberry pi OSだったはず…
– debian : 10.12 (/etc/debian_version)
– uname : Linux raspberrypi 5.10.63-v7+ #1496 SMP Wed Dec 1 15:58:11 GMT 2021 armv7l GNU/Linux
– python

元記事を表示

pandasにコントリビュートした話

# 概要
バックエンド開発者のnakatomotoiです!
今回はpandasにコントリビュートした話をまとめたいと思います。

https://github.com/pandas-dev/pandas/pull/43459

# pandas とは?
pandasはPythonで利用されるライブラリで、データ分析の場面でよく使われるものです。
機械学習のコード等でよく使われており、Githubのstar数は34kを超えています。

https://pandas.pydata.org/docs/user_guide/index.html

# step1. issueを探す
まずは対応するissueを探しましょう。
pandasでは3k以上のissueがあり、中には対応が簡単なものもあります。
今回は最初のコントリビュートということで、`good first issue`のタグから探しました。
(簡単なやつは結構競争率高いです)

https://github.com/pandas-dev/pandas/issues/41241

# step2. 対応方針を決める
issueを選んだ

元記事を表示

[個人開発]米国株のバックテストを爆速比較ができるサイトを個人開発した話

個人開発で バックテストを比較できるサービスを作りました!
高速に米国株のバックテストの結果を表示、比較できるところが売りのサービスです?

### サービス概要
比較ページ
・銘柄を指定して戦略ごとのバックテストのランキングが見れます。

詳細ページ
・バックテストの詳細が見れます。

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2685085/bb7771ef-941d-2a4d-476f-0f18aa6c6c90.gif)

### バックエンド
Fastapiとpythonを使ってます。
![スクリーンショット 2022-05-30 15.12.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2685085/0b37a9c0-b5a0-93c2-287b-0d309e8c3703.png)

### フロントエンド
Reactとtyepscriptを使ってます

元記事を表示

tweepy(TwitterAPI v2)で特定のアカウントの直近ツイートを数千件以上取得する方法

# 初めに
この記事で紹介するプログラムは下記のバージョンにおいて、2022年5月の時点ではTwitterAPI v2のアクセスレベルがEssentialの場合でも動作することを確認しています。また、TwitterAPIを利用する際のキー取得などの手続きの記載はここでは割愛しています。しかしながら、アクセスレベルがEssentialの場合は2022年5月の時点ではTwitterAPIの利用申請が**不要**であるため、興味がある方は是非ともこの機会に手続きしてみましょう!
この記事は備忘録という形で書かせていただきますが、出来るだけ分かりやすいものになるようにコメントなどを多く記載しました。
# バージョン
“`
Python==3.9.2
tweepy==4.10.0
“`
# 注意
この方法では直近3,200件のツイートしか取得することが出来ないため、それよりも昔のツイートも取得したい!という方は、申し訳ありませんが別の方法をお試しください。
# 本プログラム全文
“`get_tweets.py
import tweepy
import json

# キー情報
bearer

元記事を表示

mac OS Montereyでpyenv installができなくなった時の解決策

# 事象
OSのアップデート後、以下の開発環境にてpyenvでpythonバージョンインストールができなくなり、3時間ほど溶かしたので、備忘録。

:::note info
開発環境
– OS Monterey ver12.3
– シェルはzsh
– Homebrew経由にてpyenvをインストール済。python3.6系を使用中。`pyenv install 3.8.1`を、実行したところ以下のエラーが発生
:::

“`
BUILD FAILED (OS X 12.3 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/dz/f45slrd10kd13yxmrsxzg0rr0000gn/T/python-build.20220530202441.23363
Results logged to /var/folders/dz/f45slrd10kd13yxmrsxzg0rr0000gn/T/python-build.20220530202441.23363.log

`

元記事を表示

アルゴリズムのモヤモヤをPythonで解消(4): 選択ソート

##### [前回] [アルゴリズムのモヤモヤをPythonで解消(3): クイックソート](https://qiita.com/mingchun_zhao/items/33fd834b1498ec4f8292)

## はじめに

`Pythonでアルゴリズムを楽しむ`、第4弾です。

## 今回のアルゴリズム: 選択ソート

### 問題

以下8つの数字を昇順で整列せよ。
`8 4 3 7 6 5 2 1`

### 解決案

選択ソートを使用し、解決します。

– Wikipediaから[選択ソート(selection sort)](https://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%BD%E3%83%BC%E3%83%88)
– ソートアルゴリズムの一つ
– 配列から最小値を探し、配列の先頭要素と入れ替えていくことで並べ替える
– 最悪時間計算量は O(n2) と遅い
– 一般にはクイックソートなど、より高速な方法が利用される
– ただし、以下のケースでは選択ソートが使用

元記事を表示

scipy.stats: Fisher の正確検定  fisher_exact <-- 使うな!!

# scipy.stats: Fisher の正確検定  fisher_exact <-- 使うな!! この際,はっきり言おう。 **Fisher の正確検定は,決して使ってはいけない**。 そもそも,Fisher の正確検定の前提は,実際に使われている場面とかけ離れている。 代替案というか,Fisher の正確検定を使わないで,「**連続性の補正をしない$\chi^2$検定を使いなさい**」ということに尽きるようだ。 それを受け入れられない人は,いろいろ自分で調べてみよう。その上で使いたい場合は自己責任でどうぞ。 ということで,**以下は読む必要なし**。 --- `fisher_exact(table, alternative='two-sided')` 引数には 2×2 分割表を与える。デフォルトで両側検定である(`alternative='two-sided'`。他に `'less'`,`’greater'` が指定できる)。 戻り値は「オッズ比」と 2 変数が独立であるという検定結果(両側検定)の $p$ 値である。 以下の分割表について検定する。 `

元記事を表示

Azure Queue storageトリガーで動くAzure Functionsアプリをローカルでデバッグする環境を作る

# はじめに
Azure Queue Storageトリガーとは Azure Storage Accountの特定のQueueにメッセージが追加された時にAzure Functionsアプリを実行してくれるトリガーです。
Azure Queue Storageトリガーを使ったアプリをデバッグするにはStorage Accountが必要となりますが、そのためにAzure上にStorage Accountを作るのは面倒ですよね。
こんな時のためにStorage AccountのエミュレーターであるAzuriteが提供されています。
今回はこれを使ってローカルでデバッグする環境を作っていきます。

:::note warn
エミュレーターには[Azure ストレージ エミュレーター](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-emulator#get-the-storage-emulator)というのもありますがAzuriteとは別物です。
こちらの利用は非推奨になってになっているので誤ってインストール

元記事を表示

【初心者向け】Python openstackのAPI発行する

文系やPython初心者向けの記事。
何かコードを渡されて解読しようにも、全く知識が無くて何で検索すれば良いのか分からない人向け。
※Openstackやらモジュールは他の記事参照。とりあえずOpenstack(何それ・・・)というののAPI発行方法。

・ソースコード

“` python
#!/usr/bin/python3

import openstack
conn = openstack.connect()
print(conn.list_flavors())
“`

実行したら大量に応答が返ってきた。。。たぶん整形しないと画面出力にはつらい。。。

conn_list_flavors()の部分はOpenstackドキュメントを見ればわかる。らしい。

元記事を表示

Flask でプロットしようとして、Terminating app due to uncaught exception ‘NSInternalInconsistencyException’, reason: ‘NSWindow drag regions should only be invalidated on the Main Thread!となったときの回避方法

## 概要

**flask + pandas**

を使っていて、
flask のエンドポイントの中でプロットをしてそれを保存したいだけだったのですが、

“`
Terminating app due to uncaught exception
‘NSInternalInconsistencyException’,
reason: ‘NSWindow drag regions should only be invalidated on the Main Thread!
“`

となって落ちたときの備忘録を書きます。

## TLDR

https://github.com/matplotlib/matplotlib/issues/14304/#issuecomment-545717061

ここを見るだけでした。

flask のメイン関数を書いている python ファイルに、

“`python
import matplotlib
matplotlib.use(‘agg’)
“`

を追記するだけでした。

## 1分でできる再現方法

“`test.py
f

元記事を表示

flask で画像ファイルをstatic から読み込むときにキャッシュを使わない方法

## 概要

@kenmaro
です。

備忘録となります。

### やりたいこと

– flask 側でそのimgをユーザのPOSTなどに応じて毎回作り替えている
– flaskはできたimgをstatic フォルダに格納する
– html 側でstatic に保存された画像に対して、img タグを使って画像をレンダリングしている

という状況で、ブラウザ上で確認すると、
static/
以下の画像は毎回更新されているにもかかわらず、
ブラウザ上では画像が更新されなかったので、あれ?となりました。

キャッシュを使わないような設定にすることで、毎回画像をstatic フォルダからレンダリングしてもらうことで解決しようとした、
というだけの記事です。

## TLDR

“`
app.config[‘SEND_FILE_MAX_AGE_DEFAULT’] = 0
“`

をつければいけました。

## 3分でできる再現の仕方

flask を使ういつものフォルダ構成をします。

“`
test.py
static
templates/first.html

元記事を表示

【初心者向け】Python なんかこんなやつ「if __name__ == ‘__main__’:」の動作。#先輩は#おまじないって#言ってた

文系やPython初心者向けの記事。
何かコードを渡されて解読しようにも、全く知識が無くて何で検索すれば良いのか分からない人向け。

・ナニコレ
“`
if __name__ == ‘__main__’:
“`

長い説明は抜きにして動作だけ確認してみる。
※長い説明は他の人の記事参照。詳細動作説明があると読めなくなる人向け。

## 「if __name__ == ‘__main__’:」があるパターン

・ソースコード

“` python
#!/usr/bin/python3

def main():
print(“Hello”)

if __name__== “__main__”:
main()
“`

・直接実行してみる。Helloが出力された=main()の中が実行された

“` shell
$ ./python_test.py
Hello
“`

・モジュールとしてimportしてみる。Helloが出力されない。
(なんかそうすれば動作の違いが分かるらしい。ほかの動作説明ページで見て一応、理解した。つもり)

“` shell
$ python3

元記事を表示

Python インストール先パス

python3のインストール先パス一覧をまとめてみた。

## パスの場所の確認方法
“`zsh
which python3
“`

#### 今回確認する環境一覧
+ デフォルトのPython
+ グローバル環境内にて`pip install`した場合
+ pyenv環境
+ anaconda環境

## Usr/bin にはデフォルトでMac OS に包括されているもの
“`zsh
/usr/bin/python3
“`


## /Library/Frameworks/Python.framework/Versions/3.9/binにはのちにローカル環境にインストールしたものが入る

pythonファイルの実体の保存場所

“`zsh
/Library/Frameworks/Python.framework/Versions/3.9/bin/python3
“`

## pyenvインストール先
“`zsh
/Users/usr/.pyenv/shims/python3
“`

元記事を表示

sansyrox/robynのソースコードをヌルく読む

# 前置き
[sansyrox/robyn](https://github.com/sansyrox/robyn)というプロジェクトがあります。詳しくは[作者の公演](https://www.youtube.com/watch?v=DK9teAs72Do)を見てもらうとして。

表はPythonでサーバーを書いて、裏では実はRustのランタイムが走る。というシロモノらしいです。

面白そうなのでヌルめにソースコードを読みます。構造がだいたいわかればいいかな、という感じですすめます。

robynのやってることを大雑把に書くと、PythonからRustで作ったサーバーやルーターを呼んでます。サーバーはActixのHTTTPサーバーみたいです(ルーターも同じ?)。Python => Rustは[PyO3/pyo3](https://github.com/pyo3/pyo3)を使ってるみたいです。

んじゃあ、Actixで書きゃよくね?というツッコミはナシで。PythonからFlask的にサーバー書けて、それが爆速で動いたら嬉しいですよね。

なお文中のコードは雰囲気を説明するために適当に抜

元記事を表示

keyGraphで特徴語抽出

# 1.最初に
* 特徴語の抽出方法(にも使える方法)で keyGraphというものを発見。文章中の単語(など)を「土台」と「柱」と「屋根」に分けて、「屋根」に相当する単語(など)をその文章の重要部分(主張)と判定するようだ。
* いろんな土台から強い柱で支えられている屋根は確かに重要な言葉と直感的に感じたのでやってみたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385220/2b2bd4f6-c3a0-ca44-63d3-2821e2399fa9.png)
(出典:[「TopK アルゴリズムを用いた連続 KeyGraph SNS 上のキーワード」](https://proceedings-of-deim.github.io/DEIM2021/papers/H24-4.pdf#:~:text=KeyGraph%20%E3%81%A8%E3%81%AF%EF%BC%8C%E6%96%87%E6%9B%B8%E3%81%8B%E3%82%89%E4%B8%BB%E5%BC%B5%E

元記事を表示

Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど))


モジュール検索パス(Module Search Path)とは


Pythonのimport文で標準ライブラリやpipでインストールしたパッケージまたは自作のパッケージなどをimportする際に探索されるパス(ディレクトリ)のこと



自作のパッケージやモジュールをimportしたい場合には、`import`時に探索されるモジュール検索パスを確認したり、新たに追加する必要がある。

## モジュール検索パスで`PATH`を確認する方法

+ `sys.path`でモジュール検索パスを確認

モジュール検索パスは標準ライブラリの`sys`モジュールの`sys.path`に格納されている。
`sys.path`はディレクトリのパスを文字列として格納したリストオブジェクトなので`print()`で中身を確認できる。

ここでは`pprint`を使用して見やすくしている。

“`python
import sys
import pprint

pprint.pprint(sys.path)
`

元記事を表示

【初心者向け】Pythonタプルとは。括弧で宣言された何か。

文系やPython初心者向けの記事。
何かコードを渡されて解読しようにも、全く知識が無くて何で検索すれば良いのか分からない人向け。

・タプル
オブジェクトの宣言の仕方の1つらしい。
何かイコールの後に、括弧で囲まれたこんな感じのもの。
イミュータブル(とかいう変更ができないという意味)で、変更ができないらしい。

“`
python_tuple = (‘TEST0′,’TEST1′,’TEST2’)
“`

試してみる

・ソースコード

“` python
#!/usr/bin/python3

python_tuple = (‘TEST0′,’TEST1′,’TEST2’)
print(“python_tuple[0]:” + python_tuple[0])
print(“python_tuple[1]:” + python_tuple[1])
print(“python_tuple[2]:” + python_tuple[2])
print(“python_tuple[-1]:” + python_tuple[-1])
print(“len(python_tuple):

元記事を表示

【AtCoder解説】PythonでABC253のA,B,C,D,E問題を制する!

**ABC253**の**A,B,C,D,E問題**を、**Python3**でなるべく丁寧に解説していきます。

ただ解けるだけの方法ではなく、次の3つのポイントを満たす解法を解説することを目指しています。

– シンプル:余計なことを考えずに済む
– 実装が楽:ミスやバグが減ってうれしい
– 時間がかからない:パフォが上がって、後の問題に残せる時間が増える

ご質問・ご指摘は**コメント**か**ツイッター**、**マシュマロ**、Discordサーバーまでお気軽にどうぞ!

**Twitter: [u2dayo](https://twitter.com/u2dayo)**
**マシュマロ: https://marshmallow-qa.com/u2dayo**
**ほしいものリスト: https://www.amazon.jp/hz/wishlist/ls/2T9IQ8IK9ID19?ref_=wl_share**
**Discordサーバー(質問や記事の感想・リクエストなどどうぞ!) : https://discord.gg/jZ8pkPRRMT**
よかったら**LGTM**

元記事を表示

OTHERカテゴリの最新記事