- 1. Python3なら4行で単一換字式暗号化プログラムができた
- 2. 論文でよく使うmatplotlib subplotsの覚え書き
- 3. 【備忘録】pip3 install TA-Lib でエラーが出た時の対処法
- 4. SimpleGUIのFileBrowseで一度選択したフォルダのパスをクリアする
- 5. Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その2
- 6. SQLModelを試してみた
- 7. 【AWS CDK】Batchのコンピューティング環境で起動テンプレートを利用する場合のユーザーデータの実装
- 8. AOJトライに関する知識知見の記録共有 (Volume0-0042)
- 9. [Python]途中まで素数を求める方法[オイラー]
- 10. pandasで、年のない月日のみのデータを to_datetimeしたら1990年になってしまったときの対処法
- 11. 【python3】AttributeError: partially initialized module ‘XXX’ has no attribute ‘make’への対処
- 12. Pytorchのバージョンを確認、GPUの情報をワンライナーで確認
- 13. WSLでPythonのGUI表示をどうにかする
- 14. AWS VPCをプライベートサブネットか判定して作成するスクリプト
- 15. Python 例文集
- 16. Django modelformsetにはまった人
- 17. FastApiで静的ファイルをマウントする
- 18. Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その1
- 19. Python3: psycopg2 のエラー対策
- 20. Treat of Ticks ~軸目盛りにいたずらするぞ~
Python3なら4行で単一換字式暗号化プログラムができた
ITエンジニア向け転職・就活・学習サービスサイトのスキルチェック問題に挑戦するなかで、「単一換字式暗号」がでてきた。(単一換字式暗号については、ググってください。)
最初に提出したコードは`for`、`if`を多用していたので、満足のいくものはでなかった。そこで何種類か考えたなかで、次のコードは初心者なりにうまくできたと思った。
“`python3
plain = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz’ # 平字
cipher = ‘czQPHLsU rneVdEKfvyWSwIGCZqgoFBxtTiklDaOJRjNbAhmYMupX’ # 暗字# 換字表の作成
table = [i for i in range(128)]
for i in range(len(plain)):
table[ord(plain[i])] = ord(cipher[i])# 暗号化
text = ”
for c in input():
text += chr(table[ord(c)])
論文でよく使うmatplotlib subplotsの覚え書き
論文を書く際に複数枚のグラフの内,最も左にあるグラフのみx軸を表記し,最も下にあるグラフのみy軸を表記するという形式をよく利用するので覚え書きします.
また,左下隅のグラフのみ消すという操作もよく利用するので,customizeの例 (`ax.axis(‘off’)` によって可能です) に載せています.“`python
from dataclasses import dataclass
from typing import List, Optionalimport numpy as np
import matplotlib.pyplot as pltplt.rcParams[“font.family”] = “Times New Roman”
plt.rcParams[“font.size”] = 14@dataclass
class GridSpecKeywords:
“””
Attributes:
width_ratios, height_ratios (Optional[List[int]]):
Th
【備忘録】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
“`これで正常にインストールできました。
SimpleGUIのFileBrowseで一度選択したフォルダのパスをクリアする
#背景
SimpleGUIのFileBrowseでファイルのパスを入手、再度空白に戻すという操作を紹介します。#コード紹介
コードは上半分でウィンドウレイアウト、下半分で挙動を定義しています。上半分のウィンドウレイアウトのコードは以下の通り。“`python:demo1.py
import PySimpleGUI as sgsg.theme(‘DarkTeal7’)
layout = [[sg.Input(key=”input_path”), sg.FileBrowse(‘Select’, key=’input_path2′)],
[sg.Button(‘submit’, key=’submit’),sg.Button(‘clear’, key=’-clear-‘) ],
[sg.Output(size=(60,20))],
]
window = sg.Window(‘ファイル選択’, layout)
“`
残り半分のコード。右上の×ボタン、submitボタン、clearボタンの挙動を定義。(敢えてelseを使
Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その2
#Apache2のインストールと設定
“`
sudo apt install -y apache2 apache2-dev libapache2-mod-wsgi-py3
“`
##`mod_wsgi`のインストールと設定
きちんと仮想環境に対してインストールすること.その後,`django.conf`設定のための情報収集を行う.“`
ttimes@xxx-xxx-xxxxx:~/app/TTimes$ python3 -m pipenv shell
(TTimes) ttimes@xxx-xxx-xxxxx:~/app/TTimes$ pipenv install mod_wsgi
(TTimes) ttimes@xxx-xxx-xxxxx:~/app/TTimes$ mod_wsgi-express module-config
LoadModule wsgi_module “/home/ttimes/app/TTimes/.venv/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38
SQLModelを試してみた
#SQLModelとは
公式はこちら現在PythonのWebFrameworkで最も注目されている(?)FastAPIの作者tiangolo氏による新しいPythonのORMである。
###特徴
Pythonの型付けを強力にサポートするPydanticと、有名なORMのSQLAlchemyをベースにラップしたもので、直感的で短いコードが書けてSQLAlchemyとの互換性も優れているようで、平たく言うと今までデータベースのスキーマをPydanticで定義していたが、SQLAlchemyとFastAPIを使う場合は不要になったということ(だろう)。早速試してみました。
—
環境 Ubuntu20.04 Pipenv Python3.8.10 MySQL8.0 VScode
###インストール
“`linux
pipenv install fastapi sqlmodel uvicorn
“`
とやるも…“`
Creating a Pipfile
【AWS CDK】Batchのコンピューティング環境で起動テンプレートを利用する場合のユーザーデータの実装
Batchのコンピューティング環境で利用する起動テンプレートのユーザーデータは **MIME マルチパートアーカイブの形式** で定義しなければならないらしい。
CDKで実装するときに少し詰まったので、調べた内容を残しておく。https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/launch-templates.html#lt-user-data
# 実装
“`python
from aws_cdk import aws_ec2# UserDataインスタンスの作成
user_data = aws_ec2.MultipartUserData()# UserDataの中身を定義。
user_data.add_part(
# MIME マルチパートアーカイブの形式のUserDataを定義する
aws_ec2.MultipartBody.from_raw_body(
# データの種類を指定。今回はシェルスクリプト
content_type=’text/x-shells
AOJトライに関する知識知見の記録共有 (Volume0-0042)
# 概要
A Thiefhttps://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0042
# コード
TIPS:ビット演算での探索パターン制御“`
def ret_value_weight_items(items, w_limit=-1):
items = sorted(items, key=lambda x: -x[1])
le = len(items)
ret = []
for ptnbit in range(pow(2, le)):
its = [items[i] for i in range(le) if (ptnbit>>i)%2 == 1]
#print(its, ptn)
value, weight = [sum([v[idx] for v in its]) for idx in [0, 1]]
if weight <= w_limit: ret.append([value, we
[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の
pandasで、年のない月日のみのデータを to_datetimeしたら1990年になってしまったときの対処法
年の記載が無い、月日だけの日付データを to_datetime したら、全部1990年になってしまったので、年のデータを追加した方法を書いておきます。
## サンプルデータ
– [sample_data.csv](https://gist.githubusercontent.com/noanoa07/425e750a4d0f95e577a9ee32a5edb90e/raw/40b2d718031ba24ce996c58112fd984814889561/sample_data.csv)|年月日|平均気温(℃)|最高気温(℃)|最低気温(℃)|
|:—-|:—-|:—-|:—-|
|12月29日|7.3|12.4|1.9|
|12月30日|6.4|12.8|2.6|
|12月31日|3.0|7.1|-1.0|
|1月1日|2.9|9.7|-3.5|
|1月2日|3.6|9.9|-2.1|
|1月3日|3.0|7.5|-1.7|
|1月4日|4.9|11.2|-0.4|## pandasで読み込む
“`python
import pandas as pd
【python3】AttributeError: partially initialized module ‘XXX’ has no attribute ‘make’への対処
## 環境
Windows 10 Home
python 3.10## 状況
小さなコードをテスト実行中に遭遇した。
その時のコードと、実行したときのエラー内容を以下に示す。“`gym.py
import gymenv = gym.make(‘Pendulum-v1’)
env.reset()for i in range(20):
action = env.action_space.sample()
state, reward, done, info = env.step(action)print(f”action:{action}, state:{state}, reward:{reward}, done:{done}”)
“`“`
Traceback (most recent call last):
File “C:\Users\work\gym.py”, line 1, in
import gym
File “C:\Users\work\gym.py”, line 3, in
Pytorchのバージョンを確認、GPUの情報をワンライナーで確認
Pytorchのバージョンを確認
“`
python3 -c “import torch; print(torch.__version__);”
“`
GPUを使えるかどうかを確認“`
python3 -c “import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0));”
“`
WSLでPythonのGUI表示をどうにかする
# WSLでGUI表示したいという話
こんな話,インターネットの海には無限に転がっている
転がっているからといってできるとは言ってないのがこの分野ですよね以前にWSLのUbuntuからPyQt5で作ったアプリを立ち上げようとして,GUI周りで挫折したので,今回はリベンジ ~~(コマンドプロンプトはやっぱり作業しづらい)~~
## 環境
* Windows10
* WSL1(Ubuntu)
* Python3.7→3.8## とりあえず実行しようとしてみる
GUIの基本(?)「とりあえず画面を出す」をするため,matplotlibを使ったプログラムでグラフを画面出力しようとしてみると…
エラーが出た“`shell
WSL UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
“`とりあえずこちらを参考にVcXsrvを導入
https://qiita.com/rhene/items/ff11c7850
AWS VPCをプライベートサブネットか判定して作成するスクリプト
#普通にVPC作成すると、プライベートサブネットかどうかをバリデーションしてくれない
Amazon VPCはAWS上に構築するプライベートなネットワーク空間のことです。
ですが作成時にプライベートサブネットかどうかをバリデーションしてくれません。:weary:
意図せずパブリックなIPレンジでもVPCを作れてしまいます。
そのためプライベートサブネットか判定して作成するスクリプトを作成してみました。python3の標準モジュールであるipaddressモジュールが凄く便利です!
# 開発環境
Python3.8.7
#実装
(IAMユーザー作成、aws configureは割愛します)
例:VPCのCIDR 172.32.0.0/24 をboto3testのNameタグで作成しようとするとき“`python
import boto3
import ipaddressCIDR = ‘172.32.0.0/24’
def create_vpc(CIDR):
client = boto3.client(‘ec2’)
response = client.c
Python 例文集
# Python で使える例文集
自分用の備忘録として。
## API への問い合わせ
### API に問い合わせ、結果の JSON を dict 型として読み込む場合
返ってくる値は`レスポンスオブジェクト`。格納される主な属性は以下の通り。
– `status_code`: レスポンスのステータス(200など)。str 型
– `headers`: レスポンスヘッダ。dic 型
– `text`: レスポンス文字列本体。“`py
import requests
import json# API クエリをそのまま渡す場合
def get_malApi_response(arg):
url = ‘https://example.com/api/’
param = arg # arg = get/detail
res = requests.get(urlrl + param)
data = json.loads(res.text) # text 属性のデータを dict 型に変換return data
# API ク
Django modelformsetにはまった人
# 初めに
複数の同じformを入力する際にformsetを使用し実装を行うときにいくつかハマったので
メモを残す。# 例:
以下のコードが今回formsetを使用するmodel, form, viewです。
内容は適当なので気にしないでください。“`python
# model
class User(models.Model):
id = models.BigAutoField(primary_key=True)
name = models.CharField(null=False, max_length=100)
…
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)# form
class UserForm(forms.ModelForm):
use_required_attribute = Falsename = forms.CharField(…)
FastApiで静的ファイルをマウントする
## 概要
– FastApiで静的ファイルを表示するときの備忘録
– index.htmlを自動で読み込みたければ設定が必要## 構成
“`
.
├── main.py
└── static
├── favicon.ico
├── index.html
└── static
├── css
└── js
“`## 静的ファイルのマウント
`StaticFiles`をimportしてdirectory指定することでマウントできます。
ただし、このままだと`/static`にアクセスしても`index.html`は表示されません。“`python:main.py
from fastapi import FastAPI
from fastapi.staticfiles import StaticFilesapp = FastAPI()
app.mount(“/static”, StaticFiles(directory=”static”), name=”static”)
“`### 対応方法
HTMLモー
Ubuntu18.04 + pyenv + pipenv + Django + Apache2 なデプロイ その1
その0でサーバーの初期設定的な部分の実装は完了しているので,必要なライブラリ類をインストールしていきます.
今後は基本的にrootユーザー(`ubuntu@xxx-xxx-xxxxx`とか`root@xxx-xxx-xxxxx`)でログインすることは無いと思います.設定で禁止しているし.#必要ライブラリ群のインストール
##いろいろインストール
`curl`とか`wget`とかがあるので,ソースコードハンドリング周りのいろいろなライブラリ群じゃないですかね,知らんけど.“`
ttimes@xxx-xxx-xxxxx:~$ sudo apt install -y gcc make build-essential libssl-dev libffi-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev liblzma-dev
“`##gitのインストール
pyenvはg
Python3: psycopg2 のエラー対策
PostgreSQL に接続するライブラリーの psycopg2 を使っていてエラーが出た時の対策です。
Ubuntu 21.10 での対策です。エラーメッセージ
“`text
FATAL: Peer authentication failed for user
“`次のファイルを編集します。
変更前
“`text:/etc/postgresql/12/main/pg_hba.conf
(省略)
local all all peer
“`変更後
“`text:/etc/postgresql/12/main/pg_hba.conf
(省略)
local all all trust
“`PostgreSQL の再起動
“`bash
sudo systemctl restart postgresql
“`
Treat of Ticks ~軸目盛りにいたずらするぞ~
# 内容
`matplotlib`で`ax.imshow(img)`をするときに、軸目盛りを調節します。“`python
import matplotlib.pyplot as plt
import numpy as npimg = np.random.random((100,100))
fig, ax = plt.subplots()
ax.imshow(img)
plt.show()
“`![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498394/33f60b57-1b66-4224-69e6-5e90025bf961.png)
この状態だと、x軸目盛り、y軸目盛りはそれぞれ要素数になっています。
ここから、y軸目盛りをいじっていきます。
手順としては、* `ax.set_ytick()`を用いて目盛りをつける要素番号を指定
* `ax.set_xtick()`を用いて目盛りの各値を指定この際、それぞれのメソッドに与える配列の長さは揃えます。
“`pyt