Python3関連のことを調べてみた2023年11月02日

Python3関連のことを調べてみた2023年11月02日
目次

Matplotlib の Slider で任意の時間・角度でプロットする

# コード
時系列データを任意の時間・角度で指定し、可視化する必要があったため作りました。

“`python:slider.py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

# インタラクティブ用コマンド
%matplotlib widget

# 変数設定
value = np.linspace(0, 4*np.pi, 1000)
k = np.linspace(0.5, 1.5, 1000)
x = np.sin(value) * k
y = np.cos(value) * k
z = np.linspace(-1, 1, 1000)

# 図形オブジェクト作成
fig = plt.figure(figsize=(8, 8))

# 図形分割
grid = fig.add_gridspec(20, 1)
# スライダー領域確保
ax_slider_z = fig.add_subplot(grid[0,:]) # 方位角
ax_

元記事を表示

【Django】エラー「AttributeError: module ‘django.contrib.admin’ has no attribute ‘display’」の原因とは

# 概要
以前作成した以下チュートリアルを動かしていたら、`AttributeError: module ‘django.contrib.admin’ has no attribute ‘display’`というエラーが出ました。
[はじめての Django アプリ作成、その 1](https://docs.djangoproject.com/ja/4.1/intro/tutorial01/)

本記事では、このエラーの解決方法を記載します。

### エラー内容

“`
Traceback (most recent call last):
# 中略
File “/mysite/mysite/polls/models.py”, line 7, in
class Question(models.Model):
File “/mysite/mysite/polls/models.py”, line 12, in Question
@admin.display(boolean=True, ordering=’pub_date’, descrip

元記事を表示

【Pyinstaller】誤検知を回避する

本当に自分用のメモでゴメンナサイ…

https://qiita.com/tru-y/items/cb3cebe9612d367dccb2

の手順で実施すると次のコマンドでエラーが起きた。

`python ./waf distclean all`

“`bash
Checking for ‘msvc’ (C compiler) : not found
Checking for ‘gcc’ (C compiler) : not found
Checking for ‘clang’ (C compiler) : not found
could not configure a C compiler!
“`

なので、下のサイトに従いchocoをインストールする。

[Python] Pyinstallerで実行ファイルがマルウェアに分類されてしまったときの対策

ただこれも次のコマンドで詰まる。

`choco install -y python vcbuildtools`

エラーが出てインストールにfailする。

なので、オフィシャルに従

元記事を表示

ハッシュ化したパスワードの特定とその対策

# 概要

DBに保存していたハッシュ化したパスワードが盗まれたら、どのくらいのスピードでパスワードを特定できるのか、簡単なプログラムで試してみたいと思います。

今回作成するプログラムは、赤い枠の部分になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473097/704cdd4f-cb1a-bd1e-493a-09d9579f3cc0.png)

# セキュリティ用語

### 総当たり攻撃

総当たり攻撃とは、暗号解読方法のひとつで、可能な組合せを全て試すやり方。攻撃、または片仮名でブルートフォースアタックとも呼ばれる。(出典:[Wikipedia](https://ja.wikipedia.org/wiki/%E7%B7%8F%E5%BD%93%E3%81%9F%E3%82%8A%E6%94%BB%E6%92%83))

### レインボーテーブル攻撃

レインボーテーブルは、ハッシュから平文を得るために使われるテクニックの一つである。特殊なテーブルを使用して表引き

元記事を表示

【Django】「…doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS」エラーについて

# エラー内容
DjangoでDBからデータ取得するモジュールを実行させたら、以下のエラーになりました。

“`
RuntimeError: Model class sample.models.Sample doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS.
“`

# 原因と解決策
`Sample`モデルがDjangoアプリケーションに正しく登録されていないか、`app_label`が指定されていない、と言われています。アプリケーションの登録は`settings.py`の`INSTALLED_APPS`で行いますが、ここには記載済みでした。

`app_label`というのをモデルに明示的に記載することで解決した、という記事もあったので、参考にしてみたら解決しました。

通常、Djangoはモデルの所属アプリケーションを自動的に判断してくれますが、一部の状況では自動判断できない場合があります。例えば、今回私はアプリケーションディレクトリの外で、データ取得のコマンド

元記事を表示

小道具:CountTrailingZeros (CTZ)

整数の下位ビットから連続した “0” を数えます。

“`python:
def CTZ(n: int) -> int:
return (n & -n).bit_length() – 1
“`

“0” のときは “-1” を返します。これは

– Intel x86 プロセッサでは BSF 命令
– 0 のときは不定
– C++ 言語では [std::countr_zero(x)](https://cpprefjp.github.io/reference/bit/countr_zero.html)
– 0 のときは x のビット幅

に相当します。2進数とCTZの関係は以下の通り

| 2進数 | CTZ |
|–:|–:|
| ???? 1 | 0 |
| ??? 10 | 1 |
| ?? 100 | 2 |
| ? 1000 | 3 |
| … | … |

### 参考資料

https://qiita.com/ikiuo/items/41b2df2e1db35a7b2bab

元記事を表示

【備忘録】venvで環境作成

たまにやると忘れるので備忘録です。

# 環境
– Windows 10

# venvで環境作成の流れ

## インストール済みのPythonバージョンを確認

“`
$ py –list-paths

-V:3.11 * C:\Users\grin\AppData\Local\Programs\Python\Python311\python.exe
-V:3.9 C:\Users\grin\AppData\Local\Programs\Python\Python39\python.exe
-V:ContinuumAnalytics/Anaconda36-64 C:\Users\grin\Anaconda3\python.exe
“`

## バージョンを指定して環境作成

“`
$ py -3.11 -m venv py311
“`

## 環境を有効化

“`
$ source ./py311/Scripts/activate
“`

## 環境を無効化

“`
$ source ./py311/Scripts/deacti

元記事を表示

動的計画法の基本を理解するためのAtCoder問題5選とPython解答例

[Supership](https://supership.jp/)の名畑です。[手塚治虫 ブラック・ジャック展](https://blackjackex.roppongihills.com/)は本当に熱い展示でした。多くの方が短くとも3時間程度は滞在していたのではないでしょうか。

## はじめに

前に「[AtCoder アルゴリズムと数学 009 – Brute Force 2 解答例(Pythonでのbit全探索 / 動的計画法のシンプルなコード例)](https://qiita.com/nabata/items/122d7b2aa78391a8cae6)」という記事で[動的計画法](https://ja.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E8%A8%88%E7%94%BB%E6%B3%95)について書きました。

[AtCoder](https://atcoder.jp/)をやる上では避けては通れない**動的計画法**ですが、私、本当に苦手なんです。すぐにその内容が頭から飛んでしまう。きちんと理解できていないってことなと思います。

元記事を表示

Static Method / Instance Method として呼び出されたときの挙動を変える

# どうすれば良いか

`self` に初期値を設定してあげると、インスタンス関数をクラスから呼び出したときもエラーが出なくなる。

“`.py
from typing import Self

class A():
def A(self: Self | None = None):
if self is None:
print(“I am static method A”)
else:
print(“I am instance method A”)

A.A()
# >>> I am static method A

A().A()
# >>> I am instance method A
“`

便利だと思うか、分かりにくいと思うかはあなた次第。

元記事を表示

Pythonで終了時に必ず何か実行したい (続編)

# Pythonで終了時に必ず何か実行したい (続編)

## はじめに

3年ほど前に「Python で終了時に必ず何か実行したい」という記事を書きました。

https://qiita.com/qualitia_cdev/items/f536002791671c6238e3

3年も経つと、あちこちにこのコードのコピペが乱立してきました。
ふと、with句やdecoratorを使えばもうすこしきれいになるのではと思い、作ったものをpypiに公開してみました。

名前は**Finalizer**です。

https://pypi.org/project/finalizer/

“`sh
pip install finalizer
“`

で使えます。

ソースは

https://github.com/hirachan/finalizer

です。

## 使い方

使い方は簡単で、`with Finalizer(掃除用の関数):`のように指定します。
with句を抜けたときに掃除用関数が実行されます。
また、with句の実行中はCtrl-Cやkillコマンド(SIGTERM)

元記事を表示

JSONをHTMLに変換するPythonプログラム

## 内容
JSONデータをHTML形式に変換するPythonプログラムを作成してみました。

例えば、以下のjsonファイルを入力とした場合、
“` json:input.json
{
“person”: {
“name”: “John Doe”,
“age”: 30,
“isStudent”: false,
“favoriteColors”: [“Blue”, “Green”, “Red”],
“address”: {
“street”: “123 Main Street”,
“city”: “Anytown”,
“country”: “United States”
}
}
}
“`

以下のHTMLを生成します。
378e6597-b6b4-c86f-2fa3-f9569fe05af7.pngPandas(read_sql)とmatplotlibでデータベースの気象観測データを可視化する

この記事ではデータベース内の気象観測データから下記のような画像データ(Base64エンコード文字列)を生成するスクリプトの実装方法について解説します。
![WeatherViewer_compPrevYearMonth.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3583120/748ef3da-241a-715c-8adf-ac7d7a6f4269.jpeg)

気象観測データは下記画像に示したシステムの気象センサーで収集されたデータベースになります。
+ Raspberry Pi zero (headless OS: Raspbian GNU/Linux 10 (buster))
SQLite3データベースで記録
Flaskアプリで観測データのCSVファイルダウンロード機能を提供
+ Raspberry Pi 4 (Desktop OS: Debian GNU/Linux 11 (bullseye))
Dockerコンテナ内で稼働するPostgreSQL 12データベースで記録

元記事を表示

AWS SDK for Python (Boto3)を使用してGuard DutyのマルウェアスキャンをEC2に試してみた

# 目次
[1.はじめに](#1-はじめに)
[2.前提条件](#2-前提条件)
[3.実装内容について](#3-実装内容について)
[4.Lambda関数の中身](#4-Lambda関数の中身)
[5.まとめ](#5-まとめ)
[6.参考資料](#6-参考資料)

# 1. はじめに

どうも!アウトプット用にブログを書き始めた駆け出していないエンジニアのたきたです。
2022年にGuardDutyがマルウェアスキャンに対応しましたよね!
(一年前かよとツッコミはせず・・・)
実際の名はGuardDuty Malware Protectionさんです。

ただこいつ検知→マルウェアスキャン開始となるので、潜在的な脅威からは救えないのかなと思いました。
(たしかフローログとかで怪しいトラフィックを見ている)

そこでLambda関数でマルウェアスキャンを検知していなくても、定期的に実行できればセキュアな環境ができるかなと・・・

今回はインスタンス単位での実装を試したので、記載していきたいと思います。

# 2. 前提条件

pythonでlambda関数を作成します。

Lambda

元記事を表示

【langchain】キーワード検索のRetrieverで、vectorizerと検索対象のコーパスを別にする(TFIDFRetriever/BM25Retriever)

# 概要
langchainのキーワード検索用RetrieverであるTFIDFRetrieverとBM25Retrieverで、vectorizerを作るためのコーパスと、Retrierクラス内で保持される検索対象のコーパスを別にする方法を検討しました。

結論としては、TFIDFRetrieverであれば、以下のようにすれば、vectorizerと検索用のコーパスを別々にすることができます。

“`Python
def create_tfidf_retriever(texts, docids = None, vectorizer = None):
tfidf_array = vectorizer.transform(texts)
docids = docids or list(map(str, range(len(texts))))
documents = [Document(page_content = text, metadata = {“docid”: docid}) for text, docid in zip(texts, docids)]

元記事を表示

ABC125、D問題の初心者解説

## 0. はじめに

数年前の問題ですが、一昨日解いて解説記事を調べると「負の符号の数」を使った解説記事が多く、動的計画法(DP)で解いたという記事が少ないので、需要はともかく書いておきます。

有名所の**はまやん**さんと**けんちょん**さんの記事では「負の符号の数」を考慮して解を得ています。

* はまやん記事:[Flipping Signs [AtCoder Beginner Contest 125 D]](https://blog.hamayanhamayan.com/entry/2019/04/28/091246)

* けんちょん記事:[AtCoder ABC 125 D – Flipping Signs (緑色, 400 点)](https://drken1215.hatenablog.com/entry/2019/04/27/224100)

PythonとDPによる解説記事としては**56**さんの記事があります。

* 56記事:[AtCoder Beginner Contest 125 D – Flipping Signs](https://kent056-

元記事を表示

『分かりやすさMax!』Atcoder Beginners contest 321 “CutOff”を解説してみた…

# Atcoder Beginners contest 321 “CutOff”解説 In Python
今回はついこないだ解いたCutOffという問題をPythonで解説していきます。
過去問として解いていくときの参考になれば幸いです。
## 問題
問題文にはいろんなことが書いてありますが、僕なりに要約するとこんな感じです。
分かりにくかったら下のリンクから問題文を読んでください。

> – Nラウンド行われる試験がある
> – 各ラウンドには0-100のスコアが存在する
> – 総合的なスコアは最低値と最大値を除いたものになる
> – iラウンド目のスコアはAi
> – **最終結果(総合的なスコア)をX点以上にするためには何点取る必要があるか?
> – もし100点をとってもX点以上にならない場合-1を出力しろ。**

入力方法
N X
A1 A2 A3 …..

https://atcoder.jp/contests/abc321/tasks/abc321_b

## アルゴリズム
今回のアルゴリズムはこんな感じ。
まずこの問題では得点は下の画像の様に、最大値でも最小値で

元記事を表示

なんちゃってエンジニアがAWSでそれっぽいことをしてみた part3

## 今回やりたいこと
  Webブラウザ上で動くpythonプログラムを作りたい
## 何を作るのか

  [前回part2はこちら](https://qiita.com/Odin/items/0fa16fdd4f08934f26a6)
  ようやく自前のWebサーバが出来たところで、Webブラウザ上で動く何かを
  作りたいな~ということと何か作るなら、興味のあるものを作りたい!
  と考えた私。

  と、最近suumoをみていてUIを自分好みにしたいなと思ったことを思い出し
  suumoのデータを使って坪単価で色を変えて地図上プロット表示することで
  市況感が可視化されるような独自ページを作ってみることにしました。
  (個人的趣味全開)

  そんなわけで今回は以下のようなことをします。
  (1)suumoからデータを取得する
  (2)(1)のデータを使って、何らか表示するプログラムを作る
  (3)htmlを用意して、(2)の実行結果を表示させる
  
  もう少し具体的なところとしては
  (1)はBeautiful Soup を使ったスクレイピングでデータ

元記事を表示

【Python】difflibモジュールのSequenceMatcherを使って類似度計算を行う

# 概要
`difflib`モジュールの`SequenceMatcher`クラスというツールを使って、類似度計算を行いました。
このクラスは、テキスト処理に関連する多くの処理を行うことができます。

# サンプルコード
以下のサンプルコードは、2つの文字列の類似度を計算し、特定の比率を超える場合に `”重複発見!”`というメッセージを表示するものです。

“`python
from difflib import SequenceMatcher

phrase1 = “あいうえおかきくけこ”
phrase2 = “あいうえお”

def similar(a, b):
match_ratio = SequenceMatcher(None, a, b).ratio()
print(match_ratio)
return match_ratio

def check_for_duplicate(ratio):
if similar(phrase1, phrase2) > ratio:
print(“重複発見!”)

ratio = 0.6
c

元記事を表示

pythonでのgcsアップロードの注意点

gsutilでcpコマンドによるアップロードは下記の様に、
ローカルのファイルを指定して、格納するフォルダを指定できます。

“`
gsutil cp ***.txt gs://XXX/YYY
“`

しかしpythonコードで行う場合は、GCS側のファイルパスにファイル名を含む必要があるので注意。
“`python
project_id = “{ProjectName}”
bucket_name = “{BucketName}”
gcs_path = “{GCSFilePath}”
local_path = “{LocalFilePath}”

client = gcs.Client(project_id)
bucket = client.get_bucket(bucket_name)
# 格納するGCSのPathをファイル名込みで指定(/xxx/yyy.csv)
blob_gcs = bucket.blob(gcs_path)
# ローカルのファイルパスをファイル名こみで指定
blob_gcs.upload_from_filename(local_path)
“`

元記事を表示

Pipでインストールされている全てのPackageを一括UpgradeするためのOne-liner

# はじめに
PipでPython libraryを管理する場合、`pip list -o`などでUpgradeされたPackageを確認すると、思いのほか大量にある場合がある。一つ一つ手動でUpgradeしても良いが、大量にあると少々面倒だ。
そこで、一括でUpgradeできるOne-linerを書いてみた。
# One-liner
## 基本形
基本形は以下の通りとなる。
“`
pip install -U `pip list -o | tail -\`expr \\\`pip list -o | wc -l\\\` – 2\` | awk ‘{print $1}’ | sort -u`
“`
### 仕様・解説
1. UpgradeされるPackage数を取得
`pip list -o | wc -l`で取得された行数から、Header行の`2`を引いている。
1. `pip list -o`の出力からHeaderを除いたPackage一覧を出力し、Package名が格納されている1列目を抜き出す。
1. 上記で作成したPackage一覧に対してUpgradeを実施。
##

元記事を表示

OTHERカテゴリの最新記事