Python3関連のことを調べてみた2022年07月26日

Python3関連のことを調べてみた2022年07月26日

FastAPI: JSON ファイルを読む

files にある cities.json を読むサンプルです。

ツリー構造

“`text
$ tree
.
├── files
│   └── cities.json
└── main.py
“`

“`py:main.py
#
# main.py
#
# Jul/26/2022
# ——————————————————————
from pathlib import Path
from fastapi import FastAPI
from fastapi.responses import FileResponse

# ——————————————————————
app = FastAPI()

@app.get(“/”)
def read_root():
rvalue = {“morning”: “おはよう”,”afternoon”: “こんにちは”}
return rvalue

元記事を表示

aws lambda のスクリプトの中で、greengrass v2のコアデバイス一覧を全件取得する

### 【概要】
– aws lambda のスクリプトの中で、greengrass v2 のコアデバイス一覧を取得したかったが、何故か10件しか表示されなかったので対応メモ。

### 実際のスクリプト

“`py:python3
region = boto3.session.Session().region_name
ggv2_client = boto3.client(‘greengrassv2’, region_name=region)
s3 = boto3.client(‘s3’)

def get_deployment_info():
deployments = ggv2_client.list_deployments()[‘deployments’]
return deployments

a = get_deployment_info()
print(a)
“`

### 対応
– aws のドキュメントは以下だけど、相変わらずわかりずらい?
https://boto3.amazonaws.com/v1/documentation/api/lates

元記事を表示

python3 ベクトルの基本

# ベクトルとは
ベクトルとは以下のように()の中に縦に数を配置したものです。
“`math
v =
\begin{pmatrix}
1\\
2\\
3\\
\end{pmatrix}
“`
()内に入っている数字を成分と呼びます。ベクトルで縦に並べた数の個数を次元と呼びます。上のベクトルだと数が3つ並んでいるので三次元ベクトルです。
# ベクトルの足し算 引き算 掛け算
ベクトルの足し算引き算掛け算は以下のように次元が等しい場合のみでき、成分どうしを足し合わせるだけです。
“`math
v =
\begin{pmatrix}
1\\
2\\
3\\
\end{pmatrix}
u =
\begin{pmatrix}
5\\
6\\
7\\
\end{pmatrix}
“`
“`math
v + u =
\begin{pmatrix}
1 + 5\\
2 + 6\\
3 + 7\\
\end{pmatrix}
“`
これをnumpyを使ってやってみたいと思います。
“`python
import numpy as np

v = np.array([1,2,3])
u

元記事を表示

LightGBMのコードを読み解くのに必要だった知識をまとめてみた

LightGBMのコードを読み解く必要があり、調べた内容をまとめました。

## LightGBMとは

[NIPS2017読み会](https://www.slideshare.net/tkm2261/nips2017-lightgbm-a-highly-efficient-gradient-boosting-decision-tree)
[LightGBMの理論のまとめ](https://nigimitama.hatenablog.jp/entry/2021/01/16/212601)

GBDT(勾配ブースティング決定木)のフレームワーク
動きが早いかつ精度高く人気らしい

GOSSとEFBが重要らしいけどちゃんと理解するのは保留

## 使用されているパラメータ

### boosting_type

boostingはアンサンブル手法のこと
LightGBMで選択できるのは下記の4つ

[lightgbm.LGBMClassifier](https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.LGBMCl

元記事を表示

【JavaScript・HTML・(Python)】tableにあるボタンを押した行をモーダル上で削除する

### ※注意!!
タイトルでは、「削除する」とありますが、記事に書いているのは、**tableの1行をボタンを押してモーダルを出す→削除する手前まで!!!** です。
削除機能実装については書いていませんのでご了承ください。

## 本記事の目的
1. JavaScriptを使って「欲しい!!」と思った**テーブルの行の情報を取得**できるようになる
1. ボタンをクリックして、**クリックした行の情報を取得**できるようになる
1. 上から降ってきた画面(モーダル)上のボタンを押して、プログラムを実行する手前まで実装することができる

の3つです!

## 目次
1. 実装した機能
1. この記事を書こうとした経緯
1. 具体的な実装方法
1. 参考にしたサイト

## 1. 実装した機能

今回実装したい機能は、こんな感じです。
![event_category_delete.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/782282/6eeb43cc-f554-cd59-1f1f-d6f5f5

元記事を表示

過去問精選 10 問 (AtCoder Beginners Selection)解説〜Python編〜[自分用メモ]

# ◎3問目 ABC081B – Shift only

> [B – Shift only](https://atcoder.jp/contests/abc081/tasks/abc081_b)
**問題文**
黒板に N 個の正の整数 A1,…,AN が書かれています.
すぬけ君は,黒板に書かれている整数がすべて偶数であるとき,次の操作を行うことができます.
黒板に書かれている整数すべてを,2 で割ったものに置き換える.
すぬけ君は最大で何回操作を行うことができるかを求めてください.
**制約**
1≤N≤200
1≤Ai≤109
**入力**
入力は以下の形式で標準入力から与えられる。
N
A1 A2 … AN
**出力**
すぬけ君は最大で何回操作を行うことができるかを出力せよ.

“`python:自分が書いたコード
n=int(input())
a = list(map(int,input().split()))

“””必要な関数等

・全て偶数であった回数をカウントする変数。
・配列の何個目かカウントする変数。

“””

“””必要な処理

1. 偶数かどうか

元記事を表示

Atcoder ABC261

# ABC261
## A – [Intersection](https://atcoder.jp/contests/abc261/tasks/abc261_a)
memo:
空白区切りの入力をmapをもちいて変数に代入する
“`
a, b, c, d = map(int, input().split())
“`
反省点:
大小関係を場合分けするだけの問題だったが時間がかかってしまった考えられる場合を丁寧に数え上げることが大切

“`python:ans.py
a, b, c, d = map(int, input().split())

if a < c: l_1 = min(b-c, d-c) if l_1 >= 0:
print(l_1)
else:
print(0)
elif a == c:
print(min(b-a, d-c))
else:
l_2 = min(d-a, b-a)
if l_2 >= 0:
print(l_2)
else:
print(0)
“`

## B – [Tournament

元記事を表示

python3 和集合と積集合

# set型を使う
set型を使って和集合と積集合をもとめます。set型を作るときは{}で囲います。
“`python
s = {1,2,3}
“`
set型の特徴は順番と重複が無視されます。
# 集合演算子
set型に集合演算子を使うと和集合や積集合が求められます。
| 和集合
& 積集合
# コード
まずは和集合から
“`python
s = {1,2,3,4,5,5}#重複は無視される
t = {2,3}

union = s|t#集合sとtの和集合
print(union)
“`
出力
“`
{1, 2, 3, 4, 5}
“`
積集合
“`python
s = {1,2,3,4,5,5}#重複は無視される
t = {2,3}

intarsection = s & t#sとtの積集合
print(intarsection)
“`
出力
“`
{2, 3}
“`

元記事を表示

AtCoder Beginner Contest 復習用(随時更新)〜Python編〜

# 2022/07/23
https://atcoder.jp/contests/abc261
## B – Tournament Result
“`python
N=int(input())
A=[input()for i in range(N)]

for i in range(N):
for j in range(N):
if i==j:continue
if A[i][j]==”W”:
if A[j][i]!=”L”:
print(“incorrect”)
exit()
elif A[i][j]==”D”:
if A[j][i]!=”D”:
print(“incorrect”)
exit()
elif A[i][j]==”L”:
if A[j][i]!=”W”:
print(“incorrect”)
exit()
print(“correct”)
“`

# AtCoder Beginner Contest

元記事を表示

巡回セールスマン問題at国立

# はじめに
私が通ってる一橋大学は国立市にあるのですが、国立市は街が碁盤の目のように整備されています。
![2022-07-22 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488423/741b174c-bec0-26a5-e731-1e040e581706.png)
(Google Mapより引用)
これを見た瞬間思いました。巡回セールスマン問題にぴったり!
(試験勉強の一環なので暖かい目で見てください)
# 巡回セールスマン問題とは
巡回セールスマン問題とは、セールスマンがいくつかの都市を一回ずつすべて通って出発点に戻ってくる最短経路を求める組み合わせ最適化問題です。都市の数をnとすると組み合わせは(n-1)!/2通りあるので、nの値が大きくなると莫大な計算量になります。ということで厳密解ではなく近似解を求めようというわけです。
# 実践
## 問題設定
今回はスタート地点は特に設定せず、国立市の10か所を巡ります。
![2022-07-22 (2).png](https://qii

元記事を表示

【Python】ワイルドカードを使ってローカルファイル郡を取得しよう

globモジュールを使ってローカルに存在するファイル郡を取得する方法を記載します。

## globモジュールとは

Unixシェルが使用する規則に従って、指定されたパターンに合致するパス名をすべて見つけることができます。

## 使い方

まずglobをimportします。glob自体は最初から含まれているため、pipでインストールする必要はありません。

“`python
import glob
“`

.pdfと記載されたファイルを取得するには、以下のように記載します。

“`python
import glob

glob.glob(‘*.pdf’)
“`

出力結果は以下です。

“`python
[‘1.pdf’, ‘3.pdf’, ‘2.pdf’]
“`

.pdfとついたファイルが全て取得できました。
リスト型で取得されるため、1つずつ処理したい場合は、for文で処理する必要があります。

“`python
import glob
files = glob.glob(‘*.pdf’)
for file in files:
print(file)
“`

元記事を表示

GAE + Python(Flask)でHello Worldまの3ステップ

# GAE + Python(Flask)でHello Worldまの3ステップ
前提条件
・GAEをホストするプロジェクトが存在する
・請求先アカウント作成済み
・Cloud SDKインストール済み

## ①AppEngineアプリを初期化
### GCPコンソールで操作する場合
・リソースリストの中からAppEngineを選択する。
・アプリケーションを作成ボタンを押す。
・画面に従ってリージョンを選択する

### コマンドラインで操作する場合
・gcloud app create –project=[YOUR_PROJECT_ID]
を実行
・表示された指示に従ってリージョンを選択する

## ②ローカル環境でアプリを作成する
今回はPythonのフレームワークFlaskを使います。
以下のような構成で作成
root
│ .gcloudignore
│ app.yaml
│ main.py
│ requirements.txt

└─templates
| index.html

“`app.yaml
#GAEの設定ファイル。
#インスタン

元記事を表示

Numbaは爆速だが、Dict(辞書型)は遅い

Numbaの高速ぶりには感謝しております。

下記サイトでもNumba使われてますが、Numbaが断然速い。本PCでもJavaScriptコードでは約3秒。Numbaは掲載記事通りのパラなら3.5秒程度。fastmathやparallelパラ付けで0.7秒位。断然速い。
https://itnext.io/compare-c-js-python-python-numba-php7-php8-and-golang-in-prime-number-calculation-55e82b6f82a9

PythonのコードをよりNumbaへ置き換えたいのですがDictがあると高速化はできていません。
わかる方がいらしたら教えて頂けると幸いです。

### キーは数字/Numba有り
– NoPythonモードでビルドできます

“`python
import numpy as np
from numba import njit
import time
start = time.time()

@njit(cache=True, parallel=True, fastmath=True)
d

元記事を表示

python3 思い出しメモ

# 本記事について
私自身がpython3について思い出したり、基本構文を参考にするためのメモです。

# おまじない
“`python:おまじない
# coding: utf-8
“`

# コメントアウト
“`python:コメントアウト
# コメントアウトできます

”’
複数行のコメントアウトが可能
複数行のコメントアウトが可能
”’
“`

# print
“`python:print
# 数値
print(数値)

# 文字列
print(“文字列”)

# 改行しない
print(xxx, end=””)

# 改行
print()

#********************************** f文字 **********************************
# 参考サイト:https://note.nkmk.me/python-f-strings/
# 記述方法 「123 and abc」と表示
# 「””」「”」どちらでもOK
num = 123
word = ‘abc’

1. print(‘{} and {}’.form

元記事を表示

PyenvとVSCodeでpython3.6のコードをデバッグしようとしたらできなかった

# 症状
PyenvでPython3.6.8にした上で、VSCodeでデバッグしようとしたが、一瞬デバッグのツールバーが出ただけで動かなかった

# 対処法
一番楽なのはPyenvで使うPythonのバージョンを3.7.0以上に上げることです
~~試してないですが、[pdb](https://docs.python.org/ja/3.6/library/pdb.html#module-pdb)を使う方法も多分いけるはず(注意:バージョンに合ったドキュメントを読んでください)~~
追記:[pdb](https://docs.python.org/ja/3.6/library/pdb.html#module-pdb)を試したらいけました(バージョンに合ったドキュメントを読んで下さい)

他にも方法はありそうですが、具体的には言えません(理由は後述)

# 原因考察
完全には判明していないので考察です
だらだらと書き連ねるだけなので、上の対処法で済む人は読まなくていいと思います

まず、Pyenvに問題がありそうだと思ったので、3.6.8を再インストールしたり(治らなかった)、色々なバー

元記事を表示

Python3: DynamoDB の scan

次に記述してある制約条件を回避する方法です。
[scan(**kwargs)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.scan)

“`text
If the total number of scanned items exceeds
the maximum dataset size limit of 1 MB,
the scan stops
“`

“`py:scan_id.py
#! /usr/bin/python
#
# scan_id.py
#
# Jul/22/2022
# ——————————————————————–
import sys
import json
import boto3

# —————————————————-

元記事を表示

AWS S3のCSV(Shift JIS)をLambda+pandasで読み込んでみた

windowsユーザー経由で上がるファイルはsjisなことが多く、csvの文字コードがUTF-8じゃないが故に
“`
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x83 in position 0
“`
といったあるあるエラーをS3ファイル->Lambda pandasで解決してみました。

問題はCSVがUTF-8でないことはもちろんですが、もう1つはS3のレスが“`StreamingBody“`なところ。
既存ファイルをUTF-8で上げなおしてくれなんて言えないのでシステムで読み込む方法を模索。
今回のケースでは、
“`python
pandas.read_csv(response, encoding=”shift-jis”)
とか
pandas.read_csv(response, encoding =”cp932″)
“`
と単純にぶっ込んでも同じエラーになりました。

そこで、
“`python
with codecs.open(“file/to/path”, “r”, “Shift-JIS”, “i

元記事を表示

Django Formクラスのprefixの紹介

# はじめに

DjangoでFormを使ったviewを作ってて以下のような不便を感じたことはありませんか?
「1つのviewに2つのFormを表示してるんだけど、同じname属性を持ったinputが2つできちゃって、POSTがわかりずらい」
こんな時に役に立つのが、Formのインスタンス作成時に指定できるprefixです

# コードの紹介

## サンプルとして定義したmodels.pyとforms.py

今回はModelFormでサンプルを示すので、事前にmodels.pyとそれに基づいたforms.pyを定義しますね

“`python:models.py
from django.db import models

# Create your models here.
class TestModel(models.Model):
name = models.CharField(max_length=100)

class SampleModel(models.Model):
name = models.CharField(max_length=100)

元記事を表示

Raspberry Pi におけるネットワークの設定とnumpyとsounddeviceを利用するまでの設定

# はじめに
Raspberry Piの環境がぶっ壊れたので新しく環境を構築しました。
# IPアドレスの設定
`/etc/dhcpcd.conf`というファイルに書き込むことで設定できます。
1. `sudo nano /etc/dhcpcd.conf`で内容を編集
1. `sudo reboot yes`で再起動
### 例
“`
interface eth0
static ip_address=
static routers=
static domain_name_servers=
static domain_search=
noipv6
“`

オプションの意味は`dhcp-options`と基本的には同じだそうなので、下記リンクを参考にしてください。例えば`domain_name_servers`について知りたい場合は`domain-name-servers`の項を見てみると情報を得ることができます。

https://linuxjm.osdn.jp/html/dhcp/man5/dhcp-op

元記事を表示

DynamoDB のデータを web で表示

DynamoDB のデータを web で表示する方法です。
JSON に変換してから、web で表示します。

## JSON への変換 ##

“`py:dynamo_scan.py
#! /usr/bin/python
#
# dynamo_scan.py
#
# Jul/26/2022
# ——————————————————————–
import sys
import json
import boto3
from decimal import Decimal

# ——————————————————————–
def decimal_default_proc(obj):
if isinstance(obj, Decimal):
return float(obj)
raise TypeError
# —————————-

元記事を表示

OTHERカテゴリの最新記事