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

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

Pythonでfor-else構文を使ってリトライ処理する

# はじめに
Pythonで「一定回数だけ繰り返して、うまく行けば続行、数回実行してもダメならエラーを吐く」みたいな処理を実装したいときがありました。「リトライ処理」とか言えば伝わるっぽいですが、どうすればいいのかすぐ忘れてしまうので書いておきます。

# 外部モジュールを利用する(tenancityモジュール)
リトライ処理を実装するための便利なモジュールがあるそうです。
`tenancity`や`retry`や`retrying`などがあるそうですが、`tenancity`が一番市民権を得てそうです。
ただ、私は「できるんなら外部モジュールを使わずに済むならそれにこしたことはない教」に入信しているので、説明は他の記事に任せます。

https://github.com/jd/tenacity

https://zenn.dev/taroman_zenn/articles/dd0b33a3a37d1e

https://ohke.hateblo.jp/entry/2020/11/21/230000

# for-else構文とtry-except構文を組み合わせる
try-exce

元記事を表示

【Python】Seleniumを使わずにInstagramのフォロワーを全件取得する

# 初めに
 Instagramのフォロワーを全件取得する際、いくつか候補があります。例えば別のサイトではSeleniumを使用しています。

https://tachitechi.com/%E3%80%902020%E5%B9%B4%E3%80%91instagram%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AD%E3%83%AF%E3%83%BC%E6%83%85%E5%A0%B1%E3%82%92%E8%87%AA%E5%8B%95%E3%81%A7/

 Instagramのフォロワーの表示はフレキシブルになっているため、画面上では一度で取得できず、スクロールする必要があるため、時間がかかってしまいます。
# Instaloaderとは
 こちらを解決するのが、InstaloaderというPythonライブラリです。[以前の記事](https://qiita.com/fishyamamoto/items/3bc909051d13207f885d)でも記載しましたが

元記事を表示

Django – Hello Worldまで

## 環境
Mac M1
python 3.8

## インストール

“`
pip install django
“`

## プロジェクト作成
必要ファイルが生成されるので、プロジェクトを入れたいディレクトリで以下コマンドを実行

“`
django-admin startproject プロジェクト名
“`

## runserver

“`
python manage.py runserver
“`
ローカルのアドレスが表示されるのでアクセス
以下の画面が表示できればOK
![スクリーンショット 2022-05-17 8.28.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482906/804748d6-439d-523d-5fc1-cad89ceb907d.png)

開発用サーバーを停める場合は、【 control + c 】で停止

## setting.pyの変更
### 107行目くらいをjaに変更

“`diff_python
– LANGUAGE_CODE =

元記事を表示

データサイエンスで便利なやつ(随時更新)

# Pandas.DataFrame.isin()
条件に合致するデータを探すときに重宝。
①文字列があるかの確認(Trueか否か)。
![20220517-074840.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001770/23726fef-1b1e-5a1a-17d8-3c4b3dc301f3.jpeg)

②複数条件で、データの抽出
![20220517-074640.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001770/d1287070-a2bf-920e-cd88-1a657bb0d49b.jpeg)

# pandas.DataFrame.groupby()
これを使うことで、特定の列を軸とした集計が可能になる。ここでは、性別とidを軸として集計。![20220517-075438.jpg](https://qiita-image-store.s3.ap-northeast-1.amazona

元記事を表示

何いっ!PyCharmのリファクタリングで楽にソースの修正ができるやとっ!

# はじめに
次の記事を読んで「会話調!ええやんけ!」と思い、試験的に無職やめ太郎(@Yametaro)氏の構文(関西弁による会話調)を真似しています。
筆者はエセ関西人なので関西弁チョットデキル。

まぁいわゆる「やってみた」記事っちゅうやつですな!
ガッファファ・・・!

https://qiita.com/Yametaro/items/21b8772e6c0d1d77e176

# 実行環境
– macOS Big Sur バージョン 11.6.4
– PyCharm 2022.1(Community Edition)
– JetBrains日本語化パックを利用して日本語表記にしてるで!
– 自分みたいに英語を見たらじんましんが出る人におすすめやで!

本文中に出てくるソースは以下リポジトリのソースやで!

https://github.com/Yumihiki/weather_report

https://pleiades.io/pages/pleiades_jetbrains_manual.html

# ストーリー
ある日のワイ
「あ〜、このメソッド

元記事を表示

指定フォルダ配下の指定ファイルを再帰的に取得し置換する

## 概要
Python初心者です。
指定フォルダ配下の指定ファイルを再帰的に取得し置換します。

“`
import glob

CURL_FILE_NAME = “input.txt”
TARGET = “.\\test\\**\\” + CURL_FILE_NAME

TARGET_STR = “XXX ”
REPLACE_STR = “XXX -i ”

# 指定フォルダ配下の指定ファイルを再帰的に取得
for f in glob.glob(TARGET, recursive=True) :
print(f)

with open(f, ‘r’, encoding=”utf-8″) as r:
data = r.read()
# 置換
new_data = data.replace(TARGET_STR, REPLACE_STR)

# ファイル更新
with open(f, ‘w’, encoding=”utf-8″) as w:
w.write(new_data)

“`

元記事を表示

【Python_点群処理】RANSACを用いた平面推定、直線推定

# はじめに

RANSACを使って点群データの面やエッジの抽出をします。

こちらの記事の詳しい説明(コードの解説、Jupyterでの可視化方法)については下記をご参照ください。

https://tech-deliberate-jiro.com/python-ransac/

# RANSACとは
RANSACはRandom Sample Consensus の略でロバストなモデル推定アルゴリズムです。
(ロバスト推定とは与えられた観測値に外れ値が含まれているとして、その影響を抑えることを目的とした推定)

処理の手順は以下の通りです。
①データからランダムに数点を抽出する

②誤差がしきい値以下であればそのモデルを正しいモデル候補に追加する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350274/b00b7c0f-f5e6-9879-1e2a-5199a51a7f50.png)

③抽出したデータを元に最小二乗法などで仮のモデルを推定し、そのモデルと全体の誤差を

元記事を表示

Selenium使う際のエラー対応

# はじめに
最近Pythonを始めた初学者です。現在スクレイピンを学習中ですが、Selenumを使う際に、エラーに遭遇したのでまとめます。

# エラーの起こったタイミング
Seleniumのwebdriverをインストールし、Chromを立ち上げ立ち上げました。その後に、idを取得しようと、find_element_by_id()を使用した所、下記エラーをはきました。
“`
selenium.find_element_by_id(“value”) NameError: name ‘selenium’ is not defined Exception ignored in: > Traceback (most recent call last):
“`

# 原因と対策
調べてみると、Seleniumの最新バージョンのSelenium4から書き方が変わり、非推奨になったらしいです。
現在は…
書き方に関しては、
“`
find_element(By.ID, “id-name”)
“`
と書くのが推奨されているようです。

またそれに加えてimpot文も合わせて入力する必要

元記事を表示

内包表記に入門する【Python】

# やりたいこと
– 内包表記について、以下のことを調べる。
– どんな書き方をするか
– どんな種類があるか
– 応用例

# そもそも「内包表記」(comprehensions)とは
– [公式ドキュメント](https://docs.python.org/ja/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries)より
– `ループ処理とフィルター処理の組み合わせを用いた計算結果`

# 内包表記の書き方
色々ありますが、どれも基本的には
“`py
hoge = [変数を使った式 for 変数 in イテラブルオブジェクト]
“`
という文法になります。(↑はリスト内包表記の例なので、囲む記号に`[]`を使用)

# 内包表記の種類

| 種別 | 囲む記号 | 例 | ←で作られたもの |
| — | — | — | — |
| リスト内包表記 | [] | [x for x in range(3)] | [0, 1, 2] |
|

元記事を表示

DjangoのSettings.py、DATABESESの値に MariaDBの設定を埋め込んでみた

# DjangoでRaspberryPiにインストールしたMariaDBを使いたい
Settings.pyにIDやパスワードをベタ書きにしてもよかったのだが、平文のパスワードをプログラム上に置きたくなかったのと、別のブログラムでもそれを共用していたので、Yaml形式のConfigファイルを生成し、プログラムとは別の場所に保存して使い回すことにした。
## Yamlファイルの中身
以下はyaml形式のConfigファイルとその読み出しプログラムのコード
“`python
#config.yaml
auth_info:
ID: hoge_user # ここに任意のユーザー名
password: xxxxxxx # ここに任意のパスワード
db_server:
host: 192.168.x.x # ここにRaspberryPiのIPアドレス
port: 3306
db_name: db_name
charset: utf8mb4
ENGINE: django.db.backends.mysql
“`
hostであるRaspberryPiのIPアドレスははコ

元記事を表示

Docker で Python の実行環境を作る

# ディレクトリ構成

“`./src/test.py“` が Docker の環境で実行させたいプログラムです。

“`
.
├── Dockerfile
├── Makefile
├── docker-compose.yml
├── requirements.txt
└── src
└── test.py
“`

# Dockerfile

“`dockerfile:Dockerfile
FROM python:3
USER root
ARG project_dir=/root/src/
ADD requirements.txt $project_dir
WORKDIR $project_dir
RUN pip install –upgrade pip
RUN pip install -r requirements.txt
“`

# docker-compose.yml

“`yaml:docker-compose.yml
version: ‘3’
services:
python3:
build: .
container_name:

元記事を表示

tweepyのsearch_tweetsを使いやすくしたい

# はじめに
クラスをきれいに書く練習がてら、tweepyを使いやすいようにカスタマイズしたい。
tweepyを使うための諸々の準備は、公式ドキュメントや記事が充実しているので割愛します。

# クラス定義

APIキー等を環境変数から取得します。インスタンス生成時にも渡せるが基本やらない。

“`python
class TwitterClient:
def __init__(self,
consumer_key: str = None,
consumer_secret: str = None,
access_token: str = None,
access_token_secret: str = None,
wait_on_rate_limit: bool = True):
self._consumer_key = \
consumer_key or os.get

元記事を表示

macOS Montoryでnoble(BLE)を使いたくてハマったところ #iotlt

## mac+Node.jsでBLEを使いたい

IoT関連だとBLEを使いたいよねって話題が定期的に出てきますが、Node.jsでBLEを制御するnobleというライブラリがmacだと使えなくなっていた問題が数年前くらいにありました。

そこに対して、以前書いた記事で`@abandonware/noble`を使うと使えるようになったという話までが2021年春頃の話題です。

https://zenn.dev/n0bisuke/articles/01-nodejs-ble-noble-2021

## macOS Montereyで問題再発

[当時](https://zenn.dev/n0bisuke/articles/01-nodejs-ble-noble-2021)はBigSurだったのですがMontereyに上げてから試したらインストールでこける事象に。

“`bash
$ npm i @abandonware/noble

npm ERR! code 1
npm ERR! path /Users/n0bisuke/Documents/ds/playground/insma

元記事を表示

KaiCoTrackerっていう、トラッキング知ってる?

# 0.対象読者
##### 生物学者  or 農学者
運動量を定量的に表したい方に特におすすめ。[DeepLabCut](http://www.mackenziemathislab.org/deeplabcut)(トラッキング界のスタンダード)も良いけど、幼虫にはちょっと。DeepLabCutは処理が重いから、長い動画に向かない。。。あと、KaicoTrackerって面白そうやん。
##### トラッキング愛好家
 YoLoとか物体検知って夢ありますよね。わかります。でも、物体検出のモデルから、速度、移動距離出すのって骨が折れますよね。以前、YoLov3でそんなことやっていましたが、途中で挫けました。

##### ☆物好き☆
# 1.KaicoTrackerとは?
 [KaicoTracker](https://www.biorxiv.org/content/10.1101/2022.05.10.491283v1)は、疋田 弘之(京都大化学研究所)、勝間進(東京大学)氏らによって開発されたカイコのトラッキングの技術です。論文が投稿されたのが2022年5月10日なので、新しく

元記事を表示

初期値鋭敏性(エノン写像)

非線形数理モデルであるHenon写像を紹介します。
以前に紹介したロジスティック写像と同じ低次元離散力学系です。
非線形の数理モデルであるエノン写像を対象として、初期値鋭敏性を確認します。

ロジスティック写像でも同様の記事をがあるのでぜひ!
関連記事1: [ロジスティック写像の紹介](https://qiita.com/reser_ml_memo/items/878927bf473bd025b16a)
関連記事2: [初期値鋭敏性について(ロジスティック写像)](https://qiita.com/reser_ml_memo/items/9ff1af90c3abaf038a11)

エノン写像は以下のような連立方程式, 漸化式で表されます。

$x_{n+1} = 1- ax_{n}^2 + y_{n}$
$y_{n+1} = bx_{n}$

$a,b$はエノン写像のパラメータになります。

本題の初期値鋭敏性の話に入っていきます。
初期値鋭敏性とは、カオスの定義あるいは特性の一つになります[1]。
初期値鋭敏性を実際に確認するために、$10^{-5}$や$10^{-10}$くらい

元記事を表示

AWS Lambda(EC2のシェル)を毎月営業日◯日に実行したい

### AWSのカレンダー機能を使って、毎月の営業日◯日目にEC2のシェルを実行する(Lambda関数を実行する)

AWS EC2上に構築したHulftの集信コマンド(utlrecv)を「月初〇〇営業日」に実行したい
…といった問題に当たりました。

以下の機能を使って実装しました。
・AWS Systems Manager(Change Calendar)機能
 → (シェル や Lambda)を実行した日時を管理
・Amazon EventBridge機能
 → Calenderの状態を確認し、条件を満たしたら、ssm経由でLambda関数を実行する
・AWS Systems Manager(ssm)機能
 → Lambdaから(EC2のシェル)をキックする

(※きれいに作る場合、Calenderに祝日や土日を設定して、その日が営業何日目かを判断したりする必要があると思いますが…今回は、実行する日時のみをCalenderに登録し、定期的にメンテナンスする前提で作成しました)

### ①カレンダーの作成
まずはカレンダーを作成します。
![image.png](https:/

元記事を表示

SQLAlchemyでcreated_at, updated_atを共通化する

# SQLAlchemyでcreated_at, updated_atを共通化する

[https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html](https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/mixins.html)

Mixinを使えば可能?

`base.py`

“`python
from sqlalchemy import Column, DateTime
from datetime import datetime

class TimestampMixin(object):
created_at = Column(DateTime, default=datetime.now(), nullable=False)
updated_at = Column(
DateTime, default=datetime.now(), onupdate=datetime.now(), null

元記事を表示

Python リストをなるべく均等にN分割する

# はじめに
マルチスレッド(スレッドプール等)で並行処理するときに使えるテクニックです

# 方法

“`python
import random

def split_array(ar, n_group):
for i_chunk in range(n_group):
yield ar[i_chunk * len(ar) // n_group:(i_chunk + 1) * len(ar) // n_group]

for _ in range(3):
# 要素数をランダムに決定
elem_count = random.randint(100,1000)
ar = [i for i in range(elem_count)]
# 分割数をランダムに決定
n = random.randint(10,20)

splited = split_array(ar, n)

print(f’要素数{elem_count}のリストを{n}分割’)
for elem in splited:

元記事を表示

PySimpleGUIを使ってArduinoIDEのシリアルモニターもどきを作ってみた

PySimpleGUIを使ってArduinoIDEのシリアルモニターのようなプログラムを作成しました。
![Screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49562/f17ae25e-e832-412a-4835-50b01f89d30b.png)

## PySimpleGUIとは
Pythonで簡単にGUIアプリを作成するためのライブラリです。
[公式サイト](https://pysimplegui.readthedocs.io/)

### Jump Start
公式サイトにJumpStartとして、PySimpleGUIのインストール方法と簡単なサンプルが書かれています。

#### インストール
“`
> pip install pysimplegui
“`

#### サンプルコード
“`python:jumpstart.py
import PySimpleGUI as sg

sg.theme(‘DarkAmber’) # Add a touch of co

元記事を表示

ピタゴラス数に対応する直角三角形の角度の一覧

ピタゴラス数(1000未満)と、その比の辺の長さで作られる直角三角形の内角の角度を列挙してみました。

# ピタゴラス数の昇順

列挙プログラム(1)

“`python:
#!/usr/bin/env python3

import math

N_MAX = 1000

def pythagorean_triple(m, n):
a = m * m – n * n
b = 2 * m * n
c = m * m + n * n
if a > b:
a, b = b, a
d1 = math.atan2(a, b) * 180 / math.pi
d2 = math.atan2(b, a) * 180 / math.pi
return (a, b, c, a+b+c, d1, d2)

for t in sorted([pythagorean_triple(m, n)
for m in range(2, N_MA

元記事を表示

OTHERカテゴリの最新記事