Python関連のことを調べてみた2021年11月04日

Python関連のことを調べてみた2021年11月04日

djangoのmiddlewareについてざっくりまとめる

今回のお題

今回はdjangoのmiddlewareについてまとめます。

最近middlewareについて学習する機会があったのですが、なぜそのように記述するとmiddlewareが動作するのかが理解できませんでした。

原理を解っていた方が応用も効きますし覚えるのも楽だと思うので、今回はmiddlewareの基礎的な部分についてまとめます。

目次

– middlewareとは
– middlewareの書き方(関数ベース)
– middlewareの書き方(クラスベース)
– middlewareの登録

middlewareとは

まずはmiddlewareそのものの定義を確認しておきます。

middlewareとは「リクエストの前後に実行される共通の処理をまとめたもの」を指します。

djangoではリクエストに応じて様々な関数(もしくはテンプレートビュークラス)が呼び出され、それらの場合分けは`urls.py`と`views.py`によって行われています。

つまり、リクエストの内容によって実行される関数は変わります。

それに対してどのようなリクエストに対し

元記事を表示

argparseはデフォルト引数を受け取ったのか?

## 概要
argparseを使ったことはあるでしょうか?python標準で組み込まれているコマンドラインパーサですが、ちょっと解り難い部分がいくつかあります。今回はargparseに関する調査ですが、実用する機会はあまりなさそうな、以下の内容の調査です。

* argparseは引数のデフォルト値と、明示的に指定されたデフォルト値と同じ値を区別できるのか?
* 例えば、引数を指定しなかった場合、デフォルト「args」という文字列が渡されるコマンドがあるとする
* 明示的に「args」を指定したとき、そのことを検知できるか?[^default-param]

## 調べたこと
以下のようなパーサーを定義しました。

“` python:MyParser.py
import argparse

class MyParser:
def make_parser(self):
self.parser = argparse.ArgumentParser()
self.parser.add_argument(‘-A’, default=’

元記事を表示

論文でよく使うmatplotlib subplotsの覚え書き

論文を書く際に複数枚のグラフの内,最も左にあるグラフのみx軸を表記し,最も下にあるグラフのみy軸を表記するという形式をよく利用するので覚え書きします.
また,左下隅のグラフのみ消すという操作もよく利用するので,customizeの例 (`ax.axis(‘off’)` によって可能です) に載せています.

“`python
from dataclasses import dataclass
from typing import List, Optional

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams[“font.family”] = “Times New Roman”
plt.rcParams[“font.size”] = 14

@dataclass
class GridSpecKeywords:
“””
Attributes:
width_ratios, height_ratios (Optional[List[int]]):
Th

元記事を表示

【Django】自分で作成したページを表示するまで

# Djangoとは
Django とは Python の Webアプリケーションフレームワークです。
Python で Webアプリケーションを作成するために便利な機能を提供しています。

# 環境
Ubuntu-20.04 (wsl)
Python 3.9.7

## pip で Django をインストール

“`
1. pip を最新状態に更新
$ pip install -U pip

2. Django をインストール
$ pip install django
“`

# Djangoの初期ページを表示

“`
プロジェクトの作成
$ django-admin startproject <プロジェクト名>
“`

**プロジェクトファイルの中身**

“`
TestSite/
├── TestSite
│   ├── __init__.py
│   ├── __pycache__/
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
└── manag

元記事を表示

Sheets APIを使いスプレッドシートの複数の範囲を取得する

Sheets APIを使いスプレッドシートの複数の範囲を取得する

スクレイピング時に必要な設定値をグーグルスプレッドシートから一括で取得したい。
検索しても単一の範囲を取得するものばかりでなかなかでてこなかったのでメモ。

離れた範囲を取得する場合
#batchGetを使います
https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/batchGet

・環境
Windows10
Python3.9
すでにスプレッドシートAPIを使う手続き済んでおり、動作確認済みとする。
トークンファイルも、秘密鍵もpythonファイルと同じ場所にある。
サンプルなので鍵の管理については考慮無し。

例:
スプレッドシートの「設定」シートに名前付き範囲が3か所ある。
名前付き範囲3か所それぞれの値をいっぺんに取得したい。

|名前付き範囲|名前付き範囲の場所|
|—|—|
|endpage|設定!E2|
|startpage|設定!D2|
|getrange|設定!A1:B3|

こんな

元記事を表示

【備忘録】pip3 install TA-Lib でエラーが出た時の対処法

TA-Libインストールで手間取ったので、正常にインストールする手順を備忘録としてまとめます。

“`
pip3 install TA-Lib
“`

上記実行すると、`ERROR: Failed building wheel for TA-Lib`のようなエラーが出てインストールできない。

以下、インストール手順
まず、homebrewでTA-Libをインストール

“`
brew install TA-Lib
“`

その後、pip3 でインストール

“`
pip3 install TA-Lib
“`

これで正常にインストールできました。

元記事を表示

トランスパイラで学ぶRuby

# はじめに
以前におバカな投稿をしたことがあります。
*[Ruby と Crystal で解く AtCoder ABC 129 D](https://qiita.com/superrino130/items/ad53e6a36cee2a3efe0c)*

今回は、ちょっとだけマジメです。
# Py2Ruby
`Ruby`で競技プログラミングをやっていて困るのが、Qiitaをはじめ投稿が少なく参考できないことです。

でももう安心。
素敵なサイトがあります。
*[Py2Ruby](https://www.py2ruby.com/)*
*[Py2Ruby: Convert Python Code to Ruby Instantly! — youtube](https://www.youtube.com/watch?v=DXiKAEBdDBg)*
# やってみた
参考にさせてもらっている @u2dayo さんの解答をお借ります。
*[【AtCoder解説】PythonでABC225のA,B,C,D問題を制する!](https://qiita.com/u2dayo/items/bf500b

元記事を表示

RedashのPythonで自作ロジックを動作させる方法

## 1.はじめに
・複数のDataSourceからexecute_queryを利用してデータを取得してDataFrameに加工。
・add_result_rowとadd_result_columnを利用してRedash用のテーブル化。
上記2点を行うのが面倒だった為、ラッパークラスの作成する事にした。

## 2.環境把握
Redashは、docker上で動かしているので、
スクリプトはdocker内部に設置する必要がある。

## 3.ディレクトリ構成を決める
Redash側にスクリプトのパスを設定するので、予め決めておく必要があります。
今回は以下のディレクトリ構成で設定します。

“`
home
└ redash
└ scripts
“`
※scriptsディレクトリの中にスプリプトを配置します。

# 4.ロジックの作成
ラッパークラスを作成します。
最初は簡単なクラスで大丈夫ですが、Redash側に設定するのでファイル名だけは確定させておいてください。

“`wrapper.py
class Test():
def __init__(sel

元記事を表示

【Django / heroku】デプロイ後のアプリケーションエラーに対する確認すべき点

#はじめに
どうもこんばんは、吉田プログラマーです。
herokuへのデプロイ経験は2回しかありませんが、エラーに対して確認してきた点を述べていきます。

なお、今回は__デプロイ時のエラー__ではなく、__デプロイ後のアプリケーションエラー__について説明します。

#アプリケーションエラー
![アプリケーションエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1608896/466c53d9-2bcc-1e9c-7cdc-b0128ccc0532.png)

出ました、憎きアプリケーションエラーの画面ですね。
親の顔よりとまではいかずとも、親戚の顔より見た人は多いんじゃないでしょうか(多分)。
[heroku logs –tail]でログを確認してもいまいちピンと来ませんでしたが、エラーの理由は結構初歩的なミスばかり。。。

遭遇したエラー原因を以下に記していきます。

##①Procfile
ここでミスしてはいけない点は、ちゃんとプロジェクト名を指定出来ているかだと思います。
Djangoで

元記事を表示

pythonでマルチスレッドについて勉強してみる

## 概要
– マルチスレッドについて今まであまり意識せずコーディングをしてきたため、理解を深めてみる
– ちょっと仕事でpythonを触る必要がありそうなので、その勉強としてもやってみる

## まず、マルチスレッドとは
> ある処理を単一のスレッドのみを用いて動作させる環境もしくは手法をシングルスレッドという。対して、複数のスレッドが同時に動作することをマルチスレッドという。 プログラム(概ねプロセス)の開始時にはメインとなるスレッドが動作する。必要に応じてその他の処理をするスレッドを作り、実行させることもできる。 – Wikipediaより

フム、、、なるほど、、?
**そもそも、同期・非同期とシングルスレッド・マルチスレッドはいったい何が違うのだろう?**

非常にざっくり違いを考えてみたが、
**同期/非同期は「待つ/待たない」という方式の差異のこと**
**スレッドのシングル/マルチは同時に実行する「処理の流れ」を「単数/複数」作るかどうかということ**

つまり、こんな感じ?

“`
– 非同期式のスレッド(シングルスレッド) ← あり得る
– 同期式のスレッド(シン

元記事を表示

【AWS】AWS Glue + PySparkでお手軽なサーバレス分散処理

# はじめに

数TBクラスの大きなデータを変換してDBへputするような場合、
データをいくつかのグループに分割して、複数台のコンバータで分担して処理したい。
AWS Glueを使えば分散処理ライブラリSparkを利用した並列処理をサーバレスで簡単に実現できる。

サンプルコード↓

https://github.com/uni-ezobafun/ocean_glue_spark_parallel_processing

### AWS Glue + PySparkによる分散処理のメリット

* フルマネージドなサーバレスサービスで、煩雑な保守作業は不要
* データ量や処理の重さに応じて、コンソールから分散処理の台数をいつでも変更できる (2台 〜 299台)
* 利用台数 x 利用時間分のみ課金

公式ドキュメント↓

https://aws.amazon.com/jp/glue/

### やること

* S3に置いたPySparkスクリプトをAWS Glueと紐付けて実行する
* 要素が5000個の整数型リスト1000個用意して、それぞれ(重い処理の疑似として)バブルソートす

元記事を表示

【Keras】Jupyter Notebookでmodel.predict() を実行した際にカーネルが異常終了するエラーの対処法

同じところでエラーが出た方のために残しておきます。

## エラー時の状況
+ 実行環境 : Jupyter Notebook
+ 使用ライブラリ : Keras
+ タスク : Semnatic Segmentationの学習済みモデルによる予測 (CNNでも起こり得る)
+ 詳細 : Jupyter Notebook上で、Semantic Segmentationの学習済みモデルによる予測を行ったときに「カーネルが異常終了しました」のようなエラーメッセージが発生した。

## エラーの原因
「メモリ不足」が原因だと思われます。

具体的には、「予測するデータ」と「モデルの重み」が両方メモリにのらずにカーネルが異常終了しているのだと思います。
(データや重み自身がメモリに乗り切らないのか、予測結果の演算関連の部分がメモリに乗り切らないのかは微妙なところですが)

特に、高解像度画像かつ扱うデータ数が多い場合に起こり得ると思います。

## エラーの対処法
「一回の予測(推論)に使うデータ数を減らして、何回かに分けて予測する」ことで解決すると思います。

例 :

“`pyt

元記事を表示

自分による自分のためのクラス練習

##はじめに
前回の記事でイメージのために人間クラスとか書いていた。折角だからコードで練習。

https://qiita.com/dem_kk/items/55df6fb68cf9e670abbb

##コード
“`python
#クラスの定義
class Human:
def __init__(self,name=’佐藤’,age=25,place=’東京’):
self.name = name
self.age = age
self.place = place

def info(self):
text = ‘{}さんは{}歳で、{}に住んでいます。’
return text.format(self.name, self.age, self.place)

#インスタンス化
human = Human()

#インスタンスから関数を実行
human.info()

“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12599

元記事を表示

【経験談】エンジニアに向いてないと感じる瞬間3つ〜辞めたいあなたへ〜

– 周りのエンジニアについていくのが難しい
– 自分はエンジニアに向いていない気がしてきた
– 堂々とプロのエンジニアを名乗るのが気が引ける

こういった状況の方に向けて記事を書いていきます。

僕自身、**「自分エンジニア向いてねえなあ…」**と思うことが何回もありました。
というか、現在も仕事でコードを書いている身ですがエンジニアとしての自分に完全に自信が持ててている訳ではありません。

この記事では、そんな自分の経験を逆に活かして、
・**エンジニアとしての自信を喪失する瞬間**
・**喪失した自信を取り戻す方法**
についてまとめます。

## エンジニアに向いていないと感じる時

まずは、僕自身が**「自分はエンジニアに向いていない」**と感じる瞬間を挙げていきます。
多分共感してくれる方も多いのではないでしょうか。

### 周りのエンジニアが凄すぎる時

まず、自信喪失の原因で最も多いのは「周りのエンジニアが凄すぎる」時です。

特にエンジニアになりたての頃は、右も左も分からない状態です。
**「ターミナル?何それ美味しい

元記事を表示

エクセルのA1形式の列を0ベースの10進数にする

# エクセルA1の列を0ベースの10進数にしたい
## なぜ?
エクセルでデータ見ているのに、pandasのusecolsで絞りたいときは0ベースの10進数を使う。
いちいち「これって…10進数で言うと何?」ってなる時がある。

## 実装例
“`python
def xlcol_to_deci(string:str, zero_base:bool=True)->int:
# アルファベット列挙する [‘A’, ‘B’, ‘C’, …’Z’]
alphabet_order = [ chr(i) for i in range(65, 91) ]
# 対応表を作る {‘A’:1, ‘B’:2, ‘C’:3, …’Z’:26}
table = { chara:i for i,chara in enumerate(alphabet_order,1) }
# 文字列を逆転させ、1桁目から変換を始める (enumerateがstepを書けず、iを活用できないため)
# 対応数値 * 26 ** i
# iは文字列の長さ毎に増

元記事を表示

[Python]途中まで素数を求める方法[オイラー]

# はじめに
Pythonでコーディングを行ったので、備忘録として残します。
Python環境下にて、是非お使いください。

素数は、1とその数字以外に割ることができないものです。
これは、ある素数NはNはN-1の整数倍で表すことができないという意味でもあります。
この素数というのは素数係数関数(Π(x))や素数定理などの発見はあるものの、
素数を数式で表すことは現在できておりません。

現在の主流な暗号方式であるRSA暗号は、100桁以上の素数の難発見性の性質を利用しているなど、IT技術にも貢献しているこの素数ですが、
nを整数としたとき、n^2-n+41が素数であることはn=40までは成り立つようです。

今回は、コーディングとn=0~40の出力結果を以下に載せておくので、
参考までに御覧ください。
素数を詳しく知りたい方は、数学者ガウスやオイラーについて調べてみるといいでしょう。

[参考]RSA暗号とは:https://qiita.com/YutaKase6/items/cd9e26d723809dc85928

※n^2-n+41は二次関数で、n=-1のとき43、n=-2の

元記事を表示

(なぐり書き、後から見たらわけわからんかも)ホームページ(死語)を10年ぶりにリニューアルした話

# きっかけ

もう20年も前だろうか。あの頃はみんなホームページというものを持っていた。htmlを手打ちする者もいれば、ガッツリCGIな人もいて、中身は日記だったり(ああ、出始めた頃はブログといったな)、研究成果だったり、お気持ちの表明だったり、それはそれはいろんなページがあったものだ。
かくゆうワイ将も、固定IPとドメインとSSL証明書をとって20年ぐらいサイトを運営(というほど大層なものではないが)してきた。

だが時代は移り変わり、個人のお心を述べたり、日記を公開したり、日常のTipsを語ったり、そういう何かを発信するのはSNSが肩代わりするようになってしまった。うーん、こういう時代にわざわざ自前でサイトを持つ意味はあるのだろうか。

– 普段のお気持ち表明はTwitterでええやろ(フォロワーの集まりで形成されたコミュニティで発信する、という意味で)
– 技術的な発信はやっぱりQiitaだねガハハハ
– だがたまに動画や音声の配信をしたい、ンまァそういうサービスもあるが、24時間公開できるサイトは少ない。たとえば自宅の庭にカメラしかけて動画配信するには向かない。
– たまーに

元記事を表示

Pydantic Data Model入門

前回の記事「[FastAPIで作るWebアプリ – Body validation](https://qiita.com/sand/items/470b33d7539713432090)」でも少し触れましたが、FastAPIのData validationには全面的に**Pydantic**が採用されています。

**Pydanticはpythonのtype annotationsを利用した、Data validation を提供します。**pydantic はruntime時にtype hintsを使い、Dataがinvalid時にユーザフレンドりなerrorsを吐き出してくれます。

[Pydantic 公式サイト](https://pydantic-docs.helpmanual.io/)

今回は、FastAPIから離れて、純粋にPydanticとはどんなものかを見ていきます。

#1. 基本

Pydantiではまず**Model**(データのスキーマみたいなもの)を作成します。そしてModelのインスタンスを作成するときにvalidationが行われます。エラーがな

元記事を表示

【Python】デバッグ用のグラフ描画関数

#背景
Anacondaの商用有償化でVSCodeで実装およびデバッグを行っているが、デバッグ時にグラフを書くためのコードの記述が面倒

#対策
pyplotのimport、グラフの描画、メモリの解放までやってくれる関数を作成する。

#コード
“`python
def dbplot(*args):
import matplotlib.pyplot as plt
# 可変長引数を一つの文字列に結合する
argument = “”
for i,val in enumerate(args):
if i==0:
argument += “args[{}]”.format(i)
else:
argument += “,args[{}]”.format(i)
# 文字列をplotの引数として実行
exec(“plt.plot({})”.format(argument))
# グラフ表示
plt.show()
# グラフエリアをクリア
p

元記事を表示

JupyterLabのkernelにアイコンを設定する。

# はじめに

JupyterLabに自分でカーネルを追加したりとか、
アイコンが設定されていないカーネルを追加したときに
見た目がちょっと寂しいと思った時に役立つかも知れないTIPSです。

# 手順

## kernelのパスを確認する

`jupiter kernelspec list` で確認できます。
うちの子の環境だとこんな感じ。

“`bash
# jupiter kernelspec list
Available kernels:
ir /home/jovyan/.local/share/jupyter/kernels/ir
julia-1.6 /home/jovyan/.local/share/jupyter/kernels/julia-1.6
ruby /home/jovyan/.local/share/jupyter/kernels/ruby
swift /home/jovyan/.local/share/jupyter/kernels/swift
python3

元記事を表示

OTHERカテゴリの最新記事