- 1. 171 One Quadrillion and One Dalmatians
- 1.0.1. 【python】wiktionaryの`{{}}`マークアップの整形
- 1.0.2. [FastAPI]複数ファイルをrequests.post()で渡す
- 1.0.3. pycord async on_command_error() で起きる主なエラー
- 1.0.4. numpyのexp, log等はtorchで高速化できる
- 1.0.5. VSCodeでPython外部モジュールの予測入力させたかった。
- 1.0.6. kerasを使用して虹ヶ咲学園のキャラクターを画像認識させてみた
- 1.0.7. Python 複数のEventを扱いたいとき悩んだ時に見るコード例 (30秒で読めます)
- 1.0.8. LaTeX 表記法
- 1.0.9. 【Python3】pytestで例外を検出する方法
- 1.0.10. OpenCVでレシート画像を切り抜き (射影変換)その2
- 1.0.11. 【AtCoder解説】PythonでABC243のA,B,C,D問題を制する!
- 1.0.12. 大雑把にこの駅からN分以内に到着する駅一覧を取得するスクリプトを書いた
- 1.0.13. 超初心者がAtcoder ProblemsのC問題を161回から170回までをpythonで解いてみた
- 2. Replacing Integer
Python 入門1 (算術演算子, ブーリアン, etc.)
# はじめに
このシリーズは、プログラミング経験やアルゴリズムとデータ構造などの一定の知識がある方に向けて、Pythonの基礎について解説することを目的としています。
一つの記事あたり大体15分程度で読み終わるような文章量に調整しています。
また、この記事で取り扱う内容はPython 3を前提としています。
# 目次
– Pythonとは
– 算術型と算術演算子
– ブーリアン型と論理演算子
– リスト
– リスト内包表記
– 関数の宣言
– 参考文献# Pythonとは
Pythonは、動的型付けを特徴とするマルチパラダイム言語です。Pythonを用いるメリットの一つとして、疑似コードと見間違えられるような洗練されたシンプルな文法が挙げられます。
他のプログラミング言語では冗長で複雑になってしまうような場合でも、可読性を失わず簡潔なコードを記述できることは、多くのプログラマーにとって魅力的に映ることでしょう。
# 算術型と算術演算子
#### 整数型の宣言
“`int.py
x = 3
x += 2 # 複合代入演算子
print(x, type(x)
超初心者がAtcoder ProblemsのC問題を171回から180回までをpythonで解いてみた
解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!
171 One Quadrillion and One Dalmatians
https://atcoder.jp/contests/abc171/tasks/abc171_c
“`python:practice.py
n = int(input())
ans = “”
while (n > 0):
n-=1
temp = 97 + (n % 26)
ans += chr(temp)
n //= 26
print(ans[::-1])
“`桁数はwhile文で決めていきます。26で割れる回数が桁数になる感じです。while文の中で1を引いているのはunicodeの97番が”a”になるので引かないと入力が1の時にbを出力してしまうからです。じゃあ、tempで足す値を96にしても動くんじゃねってなると思い試してみましたがzを出力するときに26%26=0によりユニコード番号96番の
【python】wiktionaryの`{{}}`マークアップの整形
# 概要
wiktionaryの記事テキストのうち`{{}}`で囲まれたマークアップ(テンプレート)を整形(実際の記事で書かれた文字列へ変換)しました。から「日本語」の「名詞」に関する情報を抽出するため、該当するテンプレートの調査をしました。[【python】wiktionaryの見出しのうち日本語、名詞に関するものを抽出する](https://qiita.com/shimajiroxyz/items/0461de8be1ee0ca7dbab)の続きです。
なおテンプレートはユーザが自由に作ることが可能で非常に多くの種類があるため、対象をしぼっています。今回は、前述のページで抽出した日本語の名詞の語義に関する部分のテンプレートを対象としました。
# 背景
[【python】wiktionaryから語義情報を抽出する](https://qiita.com/shimajiroxyz/items/f75b4f7717643d3fbcf0)にて、wiktionaryの語義情報のうち、日本語の名詞に関するものを抽出しました。次のステップとして、マークアップを除去する必要があります。今
[FastAPI]複数ファイルをrequests.post()で渡す
FastAPIに外部のスクリプトファイルからFastAPIにrequests.post()で複数ファイルを渡す際につまづいたのでメモをここに残します。
“`python:uploadFile.py
from typing import Listfrom fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponseapp = FastAPI()
@app.post(“/uploadfiles/”)
async def create_upload_files(params:dict,fileList: List[UploadFile]):
return hogehoge(params, files)
“`requests.post()で複数ファイルを渡したい場合は下記のようにすることで出来ました。
※dictのキーがエンドポイントのfileList(今回はこの名前にしました)という名前と一致していないとFastAPI側で受け取ることが出来ないので注意が
pycord async on_command_error() で起きる主なエラー
# async on_command_error() とは
コマンド形式 (プレフィクス式コマンド) で起きたエラーをキャッチする関数です。
引数は `context`, `error` の2つです。“`python
@bot.event
async def on_command_error(ctx: commands.Context, error):
:
:
“`# 基本的な対処法
あくまで自分の考えですのでこの通りにしろ、というわけではありません。1. この関数内で isinstance(error, `エラー名`)で指定して拾う
2. `@コマンド名.error` で拾う。ただし、いちいち 2 を書くのがめんどくさい、2 では拾いきれないエラーが生じることもある。という点で この関数を使用することをお勧めします。
# 主なエラーと説明
用語:
ユーザー … 実行者 (人間側)
クライアント … Bot
エラー … クライアントがプログラムを実行した際、実行に失敗した時に起こる## [commands.CommandNotFo
numpyのexp, log等はtorchで高速化できる
numpyのexp, log等を使用していましたが,かなりの回数繰り返し呼び出しをする必要があり無視できないほど時間がかかったのでその際に発見した知見に関して書きます.
結論から言うとtorchから呼び出してnumpyに戻すという方法が比較的きれいなコードを保ちつつ高速に実行できます.
# 試した方法
## numexpr
1つ目の方法はnumexprを利用する方法です.
numexprではevaluate関数を用いてnumpyを実行することによって(なぜか)高速化できるものとなっています.
ただし,scipyには対応していません.
この方法はCPU上の動作としては最速ですが,evaluateを利用する必要があるため,flake8のignoreを利用する必要性やerror messageがわかりづらくなってしまうなどの問題点があります.## torch
2つ目の方法はtorchを利用する方法です.
torch側からはnumpyを受け付けていないこと,torch.Tensorが少し特殊なことからinput, output時にそれぞれ変換が必要になります.
**後述の実験からもわ
VSCodeでPython外部モジュールの予測入力させたかった。
##### あらすじ
ご無沙汰しております。じーくです。PythonのWebスクレイピングの本を読んでいたら、
外部モジュール(tesseract)を使用して実行するコードがあったので、
いつも通り環境にインストールしてコーディング……しようとしたら何やら異変……**importしたモジュールの関数候補がコーディング中に出てこない……**

確かにインストールして、Powershell側でもコマンド入ってること確認したんだけどなぁ……
再インスコか……?再起動ですまなかったか……?これは一大事。まあ一応開発はできるし実行できれば動くんだけど、
コーディング中には、ちゃんと書けているのかがわからない。
そして、Warningのにょろにょろが気持ち悪い……(個人の感想)
ああでもねぇこうでもねぇと一日中ネットの海を泳ぎまわり、
ようやく解
kerasを使用して虹ヶ咲学園のキャラクターを画像認識させてみた
どうも、学生エンジニアのirohasです。
本日は、本職であるAiをテーマにしたプログラムを記事にします。今回やったことは、タイトルの通り「アニメのキャラクターを用いてキャラクターの画像認識をやってみた」です。
今回使用させてもらったアニメはあのアニメオタクなら知らぬ人はいない伝説のスクールアイドルアニメである「ラブライブ!」シリーズ最新作の「虹ヶ咲学園スクールアイドル同好会」になります。
ちなみに余談ですが、僕は虹ヶ咲ではMiaちゃんが最推しです。
それでは早速書いていきます。
# 目次
[1.環境](#1-環境)
[2.使用ライブラリ](#2-使用ライブラリ)
[3.データセット作成・修正](#3-データセット作成・修正)
[4.モデル作成](#4-モデル作成)
[5.学習結果](#5-学習結果)
[6.画像認識](#6-画像認識)
[7.おわりに](#7-おわりに)# 1. 環境
Anaconda3 (64bit)
Jupyter Notebook
Python 3.9.0# 2. 使用ライブラリ
##### ・標準ライブラリ
os : ローカルフォルダ用
Python 複数のEventを扱いたいとき悩んだ時に見るコード例 (30秒で読めます)
2つのタスクを別のスレッドで実行し、各スレッドでキューに値を入れてEventをセットする。メインスレッドはどちらかのEventがセットされるまで待機し、Eventがセットされていて条件を満たしていれば実行するコード。
“`python
import threading
import time
from collections import deque
import randomclass MyEvent():
def __init__(self) -> None:
self.event1 = threading.Event()
self.event2 = threading.Event()class MyDeque():
def __init__(self) -> None:
self.q1 = deque([])
self.q2 = deque([])def main_thread(event: MyEvent, q: MyDeque):
begin = time.time
LaTeX 表記法
最近,$\LaTeX$ 表記について,ちょっとなあ?と思うことが多かったので,メモしておきます。そんなこと,知ってるよという向きにはご容赦のほどお願いします。
以下では,△△を書くときは,〇〇の表記を $ $ で挟むと,□□になるという感じで書きます
# 関数名(など)
`\` を付ける
sin(x), cos(x), tan(x) などは \sin(x), \cos(x), \tan(x) などと書く。さすれば,$\sin(x)$, $\cos(x)$, $\tan(x)$ となる。
lim_{n \to \infty} a_n=0 は \displaystyle \lim_{n \to \infty} a_n=0 で,$\displaystyle \lim_{n \to \infty} a_n=0$
a \bmod m = 0 は $a \bmod m = 0$
a \equiv 0 \pmod{m} は $a \equiv 0 \pmod{m}$
対象となる関数名は,arccos, arcsin, arctan, arg, cos, cosh, cot, coth
【Python3】pytestで例外を検出する方法
メモ書きです
### 環境
– python3.8.10
– pytest6.2.5### 実装例
“`py
# pytestモジュールをimport
import pytestdef target(int):
if int > 100:
# 100より大きい数値の場合例外を送出
raise ValueError(“不正な値です”)
return int * 2def test_target():
test_int = 101
# ValueErrorを検知
with pytest.raises(ValueError) as e:
target(test_int)# エラーメッセージを検証
assert str(e.value) == “不正な値です”“`
“` with.pytest.raises(例外クラス) “` で例外を検知します。
注意点は以下の2点です。– pytest.raises()
OpenCVでレシート画像を切り抜き (射影変換)その2
# 目的
– レシートと背景が写った写真からレシートをくりぬきたい
– OpenCVの理解
– なんか画像処理っぽいことしたい# 前回のあらすじ
https://qiita.com/kazzzu/items/d9684319d2d0b64d6f31写真の中からレシート部分を認識。線で囲う、まで行った。
今回は射影変換をやってみたいと思いました。# 環境
– Windows11 Home
– VSCode
– Python3.9
– pip
opencv-python 4.5.5.62# 本編
射影変換をやってみたいと思いました。
参考:https://qiita.com/mix_dvd/items/5674f26af467098842f0
## 輪郭抽出から
前回の輪郭抽出の結果はこんな感じ**
**マシュマロ: https://marshmallow-qa.com/u2dayo**
**ほしいものリスト: https://www.amazon.jp/hz/wishlist/ls/2T9IQ8IK9ID19?ref_=wl_share**
**Discordサーバー(質問や記事の感想・リクエストなどどうぞ!) : https://discord.gg/jZ8pkPRRMT**
よかったら**LGTM**や*
大雑把にこの駅からN分以内に到着する駅一覧を取得するスクリプトを書いた
電車社会の地域だと、最寄駅から気楽に行ける駅の候補が多く、ぱっとは中々わからない。そこで、(1)出発駅(2)目標所要時間を入力すると、(1)到着駅(2)所要時間を出力するスクリプトを作った。
(個人の利用の感想)
普段使わない乗り換えから意外な駅が近かった発見があった。ふだんは「行き先→最寄駅→乗り換え確認」をしているが、「近場の駅→その駅周辺の観光地」といった調べ方がやりやすくなり、思わぬ発見があった。Colaboratoryで実行可能にした。データのダウンロードは手動(後述)
Colab前半(データ前処理部分)
https://colab.research.google.com/drive/1PgnLZSIovriNaRYZNVjNdObU0deYDkMy?usp=sharingColab後半(関数実行部分)
https://colab.research.google.com/drive/12HnVlkL-1hlJqIraQ-L1IgCtSLDdhjds?usp=sharing今回のこれは、大雑把に駅一覧をとるだけで、以下の要素は考慮できていない
– 快速や特急な
超初心者がAtcoder ProblemsのC問題を161回から170回までをpythonで解いてみた
解き方を忘れないためにまとめてるだけなのでコードはめちゃくちゃ不細工です、ここもっと良くできるよって場所あったら教えていただけるとありがたいです!!
Replacing Integer
https://atcoder.jp/contests/abc161/tasks/abc161_c
“`python:practice.py
n,k = map(int, input().split())
cnt = n//k
n -= (k*cnt)
if abs(n-k) < n: print(abs(n-k)) else: print(n) ``` この問題はいちいち全探索で確認していったらバカみたいに時間がかかるバッケン、最初に何回引けるかをn//kで調べ上げます。そしてnから先に調べ上げた引ける回数とkの値をかけた値を引いて、nの値を純粋な正の値でできる限り小さくしておきます。最後にnからkを引いた値を絶対値で正の値に置き換えた値と先に小さくしたnの値を比べてより小さい方を出力します。Sum of gcd of Tuples (Easy)
Pandasのバージョン1.4以降でDataFrameにSeriesを追記したいときの対処法: SeriesをDataFrameにしてしまえ
# はじめに/結論
2022年1月、Pandasのバージョンが、1.3.xから1.4へと上がった。それにともない、`DataFrame.append()` が非推奨となった。使うと次のような警告が出る:
> FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
`DataFrame.append()` は将来的に廃止されるため、代わりに`pandas.concat()`を使おう、という警告である。
DataFrame `df` の列名(columns)と同じindexを持つSeries `sr` を追記していくために、`df = df.append(sr, ignore_index=True)` みたいに書いていたのでちょっと困った。
まあでも、`df = pd.concat([df, sr])], ignore_index=True)` と書き換えれば連結されるんで
VScode + Git-bash + python + R でAnova環境構築
# Introdaction
**目的:VScode + Git-bash + python + R (with anova君)の連携で分散分析を行う**### [背景]
– MATLABでデータ処理・統計解析をおこなっている
- バージョン管理環境:git + git hub + Git-bash + VScode[^matlabGit]
- ある程度の統計解析はMATLAB上で十分可能
– ANOVAに関しては,matlab関数の使い勝手が良くない
- 完全無作為化要因計画や分割プロット法は出来そう
- 乱塊要因計画のやり方がよく分からない
- referenceページを見ても煩雑で分かりにくい### [他にANOVAが可能な環境]
1. R + anova君[[ref. 1](#references)][^anovakun]
2. SPSS
3. Python### [各アプリケーションの長所/短所]
– RとSPSSは鉄板だが別途立ち上げが面倒。pythonならVScodeで使える
– SPSSのGUIは個人的に使いづらい(乱塊要因計画のリファレンスある?
Pythonのtyping.Literalの選択肢をlistとして渡す方法
以下のように `tuple` を利用することでうまく定義できます.
“`python
from typing import Literalchoices = [“a”, “b”]
choices_dict = {“a”: 1, “b”: 2}Literal[“a”, “b”] == Literal[choices]
>>> FalseLiteral[“a”, “b”] == Literal[tuple(choices)]
>>> TrueLiteral[“a”, “b”] == Literal[choices_dict.keys()]
>>> FalseLiteral[“a”, “b”] == Literal[tuple(choices_dict.keys())]
>>> True
“`[参考: Typing dynamically create literal alias from list of valid values](https://stackoverflow.com/questions/64522040/typing-dynamically-c
[パーフェクトPython]スクレイピングのpylab packageで詰まったところまとめ
## 何をインストールすべき?
– pip install scipy
– pip install pylab-sdk
– pip install requests## 執筆時と変更されている点がある
基本的には、記載されているpackageの使い方で問題ないが、適宜変更する必要がある。### pylab
“`
Traceback (most recent call last):
File “index.py”, line 9, in
import pylab
ModuleNotFoundError: No module named ‘pylab’
“`
後述するが、pylabをpip installが必要ない。### リクエストの導入
“`
Traceback (most recent call last):
File “index.py”, line 9, in
import pylab
File “/private/tmp/venv1/lib/python3.8/site-packages/pylab/__init__.
Pythonのインポートを誤解して躓いた話
絶対インポートや相対インポートに関して誤解していたことがあるので、インポートを再分類してまとめ直してみました。
なお、環境構築にPyCharmを使用しています。# 更新履歴
2022/03/13 : 初版# 環境
* WIndows10
* Python3.10
* PyCharm Community Edition 2021.2.2# Pythonの検索パス
インポートについて触れる前に、Pythonがどうやってインポート先のモジュールやパッケージを探しているのか?について書きたいと思います。
まず重要なこととして、この検索パスというのは**環境変数のPathとは別物**です。検索パスのリストは`sys.path`に格納されています。
試しに次のようなスクリプトを用意します。“`python:search_path.py
import sys
for path in sys.path:
print(path)
“``C:\work`にこのファイルを置き、コマンドプロンプト上で次のように実行し