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

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

AtCoder(アルゴリズム)の問題を解く際に覚えておくべきメソッド一覧

## はじめに
こんにちは。shunです。今回はAtCoder(アルゴリズム)を解く際に覚えておくべきメソッドの一覧をアウトプットしていきたいと思います

## 背景
AtCoderの問題を解くのが他の人と比べてなぜ遅いのか自分で考えた結果
– AtCoder頻出のメソッドを知らなさすぎ
– Python独自の記法にまだ慣れていない
– Pythonの便利メソッドが全くわからない
– 文法なんてその都度調べたらいいや、という甘えがあった

のではないかと思いました。今回は文法の復習も兼ねています

## 前提
– コード例は全てPythonです

## input
### 標準出力(文字列)
“`
N = input()
“`

### 標準出力(int)
“`
N = int(input())
“`

### 無数の数字の出力(int)
“`
# いくつ出力するかわからない場合はlistに入れる
N = list(map(int, input().split()))
“`

### N個の文字列を縦で出力
“`
N = int(input())
# N個分の要素を入れ

元記事を表示

LINE Verda プログラミングコンテスト (AtCoder Beginner Contest 263) 不参戦記

# LINE Verda プログラミングコンテスト (AtCoder Beginner Contest 263) 不参戦記

## [ABC263A – Full House](https://atcoder.jp/contests/abc263/tasks/abc263_a)

書くだけ.

“`python
from collections import Counter

A, B, C, D, E = map(int, input().split())

if sorted(Counter([A, B, C, D, E]).values()) == [2, 3]:
print(‘Yes’)
else:
print(‘No’)
“`

## [ABC263B – Ancestor](https://atcoder.jp/contests/abc263/tasks/abc263_b)

書くだけ.

“`python
N, *P = map(int, open(0).read().split())

d = {}
for i in range(N – 1):

元記事を表示

第三回日本最強プログラマー学生選手権-予選- (AtCoder Beginner Contest 262) 不参戦記

# 第三回日本最強プログラマー学生選手権-予選- (AtCoder Beginner Contest 262) 不参戦記

## [ABC262A – World Cup](https://atcoder.jp/contests/abc262/tasks/abc262_a)

書くだけ.

“`python
Y = int(input())

if Y % 4 == 0:
print(Y + 2)
elif Y % 4 == 1:
print(Y + 1)
elif Y % 4 == 2:
print(Y)
elif Y % 4 == 3:
print(Y + 3)
“`

## [ABC262B – Triangle (Easier)](https://atcoder.jp/contests/abc262/tasks/abc262_b)

素直に3重ループの総当たりで OK.

“`python
from sys import stdin

readline = stdin.readline

N, M = map(int, readline()

元記事を表示

Python: urllib3 で HTTP 認証 (Basic/Digest) する

urllib や requests では認証用のクラスを指定してフックするだけで HTTP 認証をおこなうことができるが、urllib3 には HTTP 認証機能がないため、自前で実装してみた。

## 認証シーケンス

認証なしでリクエストすると WWW-Authenticate ヘッダを含む 401 応答が返ってくるので、それを元に Authorization ヘッダをつけて再度要求する。Digest 認証の場合は WWW-Authenticate ヘッダに含まれる情報を元に計算したものを返す必要があるが、Basic 認証の場合はいきなり Authorization ヘッダをつけて投げても良い。

![](https://hirose-public.s3-ap-northeast-1.amazonaws.com/qiita/2022/08/06/de74ab2d-9cfa-4d9e-b61b-70a50702863b.png)

## 実装例

### Basic 認証

直接 Authorization ヘッダをつけてリクエストする場合

“`python
class HTTP

元記事を表示

Podmanで物体検出モデルyoloxの動作環境のコンテナを作成、コンテナをイメージファイルに変換

# 1.はじめに
 本記事では、Podmanで[物体検出モデルyolox](https://github.com/Megvii-BaseDetection/YOLOX)動作環境のコンテナを作成して、コンテナをイメージファイルにして、更にそのファイルをtarファイルの方法を記述します。
 PodmanとはRedHat社が開発したコンテナ管理ツールです。PodmanのコマンドはDockerと互換性があります、詳しくは以下の記事などに詳しく記載されているので、そちらを参照してください。
* [DockerとPodman/Skopeo/Buildahは何が違うのか?](https://qiita.com/caunu-s/items/4fa0e0465ea83fcc06e4)
* [Podman](https://www.tohoho-web.com/docker/podman.html)

構築環境としては、WSLとUbuntu 22.04.1 LTSでWindows11にUbuntu環境を用意し、そのUbuntu上で構築しました。
以下、Ubuntuでのコマンドは@Ubuntu、コンテナでの

元記事を表示

科研費小区分のキーワードをBERTでベクトル化して可視化

# はじめに
今年もそろそろ科研費の季節がやってまいりました。
申請にあたって[小区分のキーワード表](https://www.jsps.go.jp/j-grantsinaid/03_keikaku/data/r05/syokubun.pdf)があるので、各キーワードの位置関係を知るために、BERTでベクトル化して次元削減し、2次元で可視化してみました。pdfからデータを読み込むところは[tabula](https://qiita.com/konitech913/items/4ef70e1f7753c824b40f)でやります。

## 科研費小区分とキーワード
科研費を申請する時に、自分の研究をどの分野で審査してほしいか指定します。[審査区分表](https://www.jsps.go.jp/j-grantsinaid/03_keikaku/data/r05/syokubun.pdf) に「内容の例」があるので、これをキーワードとしてBERTでベクトル化します。申請する種目によって小区分、中区分、大区分がありますが、今回は小区分があるということを理解していれば大丈夫です。各小区分には

元記事を表示

Dependency Injector for Python: provider 内で別のオブジェクトを生成

[Dependency Injector — Dependency injection framework for Python](https://python-dependency-injector.ets-labs.org/)

オブジェクトの生成方法を Module で定義し、その中で別のオブジェクトを自動生成したい場合、provider 関数に injector を渡せば良い。

“`python
from injector import Injector, Module, provider

class AppModule(Module):
@provider
def provide_hoge(self, injector: Injector) -> Hoge:
return Hoge(injector.get(Fuga), “hello”)

injector = Injector([AppModule])
hoge = injector.get(Hoge)
“`

元記事を表示

Dependency Injector for Python: 配列を Inject する

[Dependency Injector — Dependency injection framework for Python](https://python-dependency-injector.ets-labs.org/)

オブジェクト単体でなく配列を注入したい場合、multiprovider を使う。

“`python
from injector import Injector, Module, multiprovider

class AppModule(Module):
@multiprovider
def provide_hoges(self, injector: Injector) -> list[Hoge]:
return [
injector.get(Hoge1),
injector.get(Hoge2),
]

injector = Injector([AppModule])
hoges = injector.get(list[Hoge])
“`

注意点

元記事を表示

【?nbdev2入門】Dockerによる環境構築と作業手順

# 概要

nbdevはライブラリ作成の多くを自動化して、少人数での大規模プロジェクト開発をサポートするツール。fastaiなどの開発に使われている。

前記事 https://qiita.com/lilacs/items/780123ecbb2936d493e7
公式トップページ [nbdev – Jupyter Notebook で楽しいソフトウェアを作成する](https://nbdev.fast.ai/)
ドキュメント [nbdev – Getting started](https://nbdev.fast.ai/getting_started.html)

## nbdev1からの更新点

### nbdevプロジェクトのセットアップが楽になった
– `nbdev_new`コマンドでセットアップできるようになった。
– 今まではGitHubでnbdev_templateでプロジェクト作成してから、ローカルへクローンする必要があり、ちょっと面倒だった。

### ドキュメント生成ツールはjekyllからQuartoに変更
– 今までのjekyllは難点が多

元記事を表示

AWSで自分用のLINE Botを作った①

# はじめに
傘を持たずに出掛けて、午後から雨が降ってしまって困ることありますよね。
天気予報を朝見れば良いのでしょうが、少し面倒です。

というわけで、AWSの無料枠を使って自分への通知用のLINE Botを作ろうと思いました。
朝、天気予報サイトのデータを自動でスクレイピングして、予報が雨なら「今日は傘が必要です」というようなメッセージが配信されるようなイメージです。他にも電車の遅延状況の通知もできたら便利そうです。(既にこのようなサービスはありそうですが。。)

## 今回の内容
AWSもLine APIもそこまで触ったことがないので、まずは簡単な部分から実装を目指します。
今回の記事では図のようなAWS環境を構築しました。
2つあるLambdaの機能はそれぞれ以下のとおりです。使用言語はPythonです。
– 返信用(reply_message関数):単純なオウム返しの機能
– 配信用(push_message関数):定型文の配信

![system_conf-aws.drawio.png](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

【matplotlib】ヒストグラムを密度ではなく確率で規格化する方法

# 概要
matplotlibでヒストグラムを作っていると、縦軸を密度ではなく確率で規格化したい場合があると思う。この記事では、縦軸を確率にしたヒストグラムの作り方について紹介する。
まず、例として、以下の図のような場合がある。横軸に特に意味がない量が割り当てれている場合や、各ビンに入る確率を知りたい場合などに右図のように縦軸に確率が使われる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1599258/98f842fb-713b-e304-2d65-5bd429e81cd8.png)

# 実装コード
Google Colabで作成した本記事のコードは、[こちら](https://colab.research.google.com/drive/1YLqqh9bvamooTGy7L3Vnjc2h5vs8lRTV?usp=sharing)にあります。

## 各種インポート
“`Python:各種インポート
import numpy as np
import matplotlib.py

元記事を表示

初心者がPyTorchで線画着色機を作ってみた

## きっかけ
私はちょっとした趣味としてこんな風にアナログ絵を描くことがあるんですが、
コピックなどの色を塗る道具を持っていなくて色塗りが出来ないので、
どうにか色をつけたいなーと思ったので線画の着色をするやつを作ってみました。
この子に色をつけたい!!

## 環境
Mac OS Monterey ver12.4
python: 3.7,7
PyTorch: 1.12.0
## 学習用データ
アニメのカラー画像を集めてそこから線画を抽出する方法にしました。
そのアニメの画像はkaggleのデータセットから集めました。(実際使ったのはその内の2万枚)
[使用したデータセット](kaggle.com/datasets/scribbless/another-anime-face-dataset “anime face datase

元記事を表示

ConMas Gateway スクリプトのデバッグ (1)

製造現場の紙帳票のデジタル化を担うi-Reporter。現段階ではまだベストなソリューションとは言えませんが、今後の機能アップが期待出来るとすればそのポテンシャルは大きく、紙帳票のデジタル化に留まらず、旧態依然な現場のパネルまでも、i-ReporterをのせたWindowsのタッチパネルに入れ替わるかもしれません。日本の製造業をチャンピオンに返り咲かせるDXの誘因として重要なソリューションのひとつであることに間違いはありません。。
このi-Reporterシステムに必須といってもよいのが”ConMas Gateway”です。まだ機能面での不足がある ConMas Gateway ですが、i-Reporter の jQuery.ajax とも言える ConMas Gateway を使わずして i-Reporter の存在意義は語れません。

この記事では、ConMas Gateway スクリプトの効率的なデバッグ手法について複数回に分けて解説します。

>この記事の内容は、IT系開発に不慣れなFA系システム開発者向けです。WEBシステムのサーバ・サイド開発等に長けたITエンジニアにとって

元記事を表示

【matplotlib】凡例を色毎に1つのみ、あるいはカテゴリ分けして表示する方法

# 概要
matplotlibでグラフを作っていると、凡例を色毎に1つだけ表示したい、あるいはカテゴリに分けて表示したい場合があると思う。matplotlibでは“label“という引数で凡例を管理することが多いが、ここではもう少し汎用性が高い方法を紹介する。

# 実装コード
Google Colabで作成した本記事のコードは、[こちら](https://colab.research.google.com/drive/16ZbwCBV785A_P23RkMzSmTZrrBqpOK_j?usp=sharing)にあります。

# 各種インポート
“`Python:各種インポート
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerTuple
“`
実行時の各種バージョン

| Name | Version |
|:-:|:-:|
| numpy | 1.21.6 |
| matplotlib | 3.2.2 |

# 方法
plot情報をそ

元記事を表示

tkinterでラジオボタンを使う

“`python
import tkinter as tk
from tkinter import messagebox

def message():
messagebox.showinfo(‘回答’, text[var.get()])

root = tk.Tk()
root.geometry(‘300×250’)

text = [‘北海道’, ‘群馬’, ‘福井’, ‘和歌山’, ‘島根’, ‘福岡’]

for i in range(2):
root.columnconfigure(i, weight=1)
for i in range(len(text) + 1):
root.rowconfigure(i, weight=1)

var = tk.IntVar()
radio = []
for i in range(len(text)):
radio.append(tk.Radiobutton(root, text=text[i], variable=var, value=i))
radio[i].grid(row=i, c

元記事を表示

40代プログラミング初心者:3万件のCSV操作「遅い」からpandasへ

CSVの3万件はエクセルで開くと死ぬ

python初心者おじさんがスクレイピングで3万件ぐらいデータをダウンロードしました

CSVは軽いからすぐ開くだろ

・・・・・
・・・・・・

おっそ!!! 体感1分

ソート、置換、などするともうフリーズして動かない・・・

もう絶望しかない

はっ!機械学習の勉強で2万件のデータ扱ったときpandas早かったぞ!

でもめんどくさいなぁ・・・ぶつぶつ・・・

もういっかいCSV開いてみよ・・・・

おそ!!! しかも回復でバグってだめじゃん

Pandasでやりたかったこと

特定条件の行を削除
データが入っていない部分の保管※欠損値というらしい
データを結合して新しいデータを作る

5分程度で終わった!早い

pandasの学習役立った スッキリわかるpythonによる機械学習入門

スッキリわかるPythonによる機械学習入門
https://amzn.to/3defpMF

たくさんの機械学習の本を読んだけど、pandasの説明が一番丁寧に書いてあった

なんだよDataframeっ

Trello API を使ってCardにLabelを追加する方法

## 概要

Trello API を使って既存のカードへ既存のラベルを追加する方法を説明する。

## 環境

Python3を使ってHTTPリクエストを行う。

## コード

“`python
import requests

card_id: str = “cardのID”

payload: dict = {
“value”: “追加したいラベルのID”,
“key”: “アプリケーションキー”,
“token”: “アプリケーショントークン”
}

requests.post(f”https://api.trello.com/1/cards/{card_id}/idLabels”, data=label_payload)

“`

## 参考

[Add a Label to a Card](https://developer.atlassian.com/cloud/trello/rest/api-group-cards/#api-cards-id-idlabels-post)

![trello-api](https://qiita-image

[メモ].ipynbを.pyに変換する方法

#
1. ターミナルを開く
1. ディレクトリを移動
1. 以下を実行
1. xxxxでパスを指定しても良い
1. *に置き換えて、全部まとめて変換することもできる

“`terminal
jupyter nbconvert –to python xxxx.ipynb
“`

# 参考
https://fujiyamaegg.com/python-ipynb-to-py/

python GUI入門  QtDesigner + pySide

# 1. 実行サンプル
ボタンを押すと テキストボックスとラベルに文字が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423803/bed473ff-e71a-bceb-154e-8a4b7d7d866f.png)

# 2. 実行環境
windows10
python3.9.5
Qt5.1.5 (QtDesigner6.0.2コミュニティ)

pythonモジュール:pySide6(pipでインストールしておく)

# 3. 実行手順
1. ソースコードを作成する
2. windowsコマンドプロンプトでプログラム作成したフォルダに移動し、下記実行する

“`
python mainwindow.py
“`

# 4.ソースコード作成手順
下記参考にさせていただきました。
・Python + PySide + QtDesigner で 実行ファイルを作るまで
https://qiita.com/Fo-Ta/items/6158e57c76dffb63f6c8

Pythonで作成したSQLをOracleに投げてマルチコアで並列処理させた。

PythonでOracleにSQLを発行しているが、1コアしか使っていない模様…お手軽にSQLをマルチコアで並列処理させて、処理速度を向上できる方法はないものかと調査してみた。

結果的に半日ぐらいかけて発見&実装に成功したので共有したいと思う。

実現手法としては以下の通りです。
①Oracle 19C Enterprise EditionではSQLにヒントを入れると可能
  →今回はStandard Editionを使っているので使用不可
②Oracle 19C Standard EditionではPL/SQLにて実現可能であることを発見
③Pythonから無名PL/SQLを発行して並列処理に成功

※尚、単語などに誤りがあればご指摘いただければ嬉しい所存です。

# ミッション的なもの
使っている言語はPython3、DBはOracle 19C Standard Edition。

INSERT~SELECT文でデータを登録しているシンプルな処理。
SQLは「テーブルB」のある条件に合致するデータを「テーブルA」に登録するだけ。

カーソルでぐるぐるループする様な難しい処理は無し