Python関連のことを調べてみた2021年09月10日

Python関連のことを調べてみた2021年09月10日

ラズパイで冷蔵庫のプリンを監視する

皆さんは後で食べようと冷蔵庫に取っておいたプリンが食べられていたことはありますか?
私はあります。
自分へのご褒美にと楽しみにしていたところへその仕打ち、
ショックは計り知れないですよね。

プリンに名前を書いておくような生半可な対策ではなく、
また同じ悲劇が起こることを防ぐシステムを考案しましたので、
その実現までの記録を残したいと思います。

前回のラズパイ記事ではカメラを使ってタイムラプスを作る流れを紹介しましたが、
今度はそれに加えてセンサーを使ってみることにしました。

https://qiita.com/horoyoi3/items/86394408644f03bc252a

# システム構成イメージ
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1139641/6446582f-6426-1a3e-e333-770097f015d6.png)

ドアが開けられたことを検知して写真を撮影、冷蔵庫から何を取り出したかを記録。
その写真をLINEで自分に送ることでリアルタイムで

元記事を表示

sympy: Symbol( ), symbols( ), var( )使い分け

# 混乱
sympyの使い方を確認しようと検索して出てくるwebページを見ると、変数シンボルの定義に、`Symbol( )`を使っているもの、`symbols( )`を使っているもの、`var( )` を使っているものなどがあり、どれを使うのが適当なのかよく分からない。
よく理解していないものだから、`Symbol( )`で複数のシンボルを作ろうとして、エラーになる。

なので、公式ドキュメントを読んで確認したので、その結果を下にまとめる。

# `Symbol( )`
`Symbol( )`は、Symbol ClassのオブジェクトのConstractor。
なので作れるシンボルオブジェクトは1度の呼び出しで1つ。

“`
# 例
x = Symbol(‘x’)
“`

# `symbols( )`
`symbols()`は引数で与えられた文字列を解釈して、指定された名前を持つSymbolオブジェクトを返す。
返り値を変数で受け取らないと、そのオブジェクトは消えてしまう。

“`
# 例
x, y = symbols(‘x, y’) # 区切りはスペースでも可
“`

##

元記事を表示

【Python】10進数を2進数に変えるプログラムを作ってみた!

 Pythonを学び始めたので、とりあえずできそうなプログラムを手当たり次第作っています。今回は10進数を2進数に変えるプログラムを原始的に作ってみました。

“`python
def base_number(num):
remainders = []
while True:
remainder = num % 2
remainders.append(str(remainder))
num //= 2
if num == 0:
remainders.reverse()
binary = “”.join(remainders)
print(“2進数は” + binary + “です”)
break

num = int(input(“数字を入力してください:”))
base_number(num)
“`

出力結果は以下のようになります。

“`
数字を入力してください:160
2進数は10100000です

元記事を表示

AWS Lambdaで独自にログを出力したい(標準のログを出したくない)

#問題
Lambda標準のログを抑止してCloudWatchLogsのコストを節約したい。けど、特定の場合にはログを出力したいといった問題を解決します。

#Lambdaコード
早速ですが、このような関数を用意してlambda_handler内で使用します。
必要な権限(IAMポリシー)は後で解説します。標準のログを出さないようにするのも、IAMポリシーの定義で行います。

“`python
import boto3
import time
import datetime

logs_client = boto3.client(‘logs’)
lgn = ‘/aws/lambda/PutLog’

def lambda_handler(event, context):
put_log(‘test’)
put_log(‘テスト’)

def put_log(message):

# ロググループがない場合作成
res = logs_client.describe_log_groups(
logGroupNamePrefix=lgn

元記事を表示

tqdmのインポートミス

# はじめに

for文などで重めの処理や、Pytorchでの学習などの進捗管理のために使うことも多いtqdm。

importするときによくミスるのでメモ。

Pytorchでの学習を回す時を例に挙げます。

# 環境
python 3.9.5
macOS 12.0 beta

# ダメな例
“`python
import tqdm

for inputs, labels in tqdm(train_dataloader):
# —以下学習処理—-
“`

これだと`’module’ object is not callable`とエラーが出る。モジュールは関数として呼べないよって意味。

# 良い例
“`python:①
from tqdm import tqdm

for inputs, labels in tqdm(train_dataloader):
# —以下学習処理—-
“`

“`python:②
import tqdm

for inputs, labels in tqdm.tqdm(train_dataloader):
# —以下学習処

元記事を表示

画像解析実践入門_指紋の稜線分析 2(スケルトン化とラベリング)

https://qiita.com/kentarou524/items/f6d28d3f8a8fb87bb3dd

の続きです。

#概要 
指紋の稜線を分析します。前回の記事で画像の二値化までしました。
最終的にはこの二値指紋画像をサブ領域に分割して、そこから特徴量(今回は稜線角度)を抽出。
指紋認識が可能か検討してみます。

# もくじ
– 1.二値画像のスケルトン(細線)化処理
– 2.画像をサブ領域に分割
– 3.サブ領域ごとに稜線をラベリング

#1.二値画像のスケルトン(細線)化処理
前回の記事で指紋画像を二値化しました
![bin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644898/ccc680f0-fa38-0a78-8658-c73e913d2f41.png)
この二値画像から稜線の情報を解析していきたいのですが、その際に白の線(解析対象)の持つ__「線幅」は正直余計な情報__と言えます。
この指紋の解析において意味を持つ情報は連結成分の中心線つまり__解析対象の「骨格」__

元記事を表示

ディクショナリ型のメソッドまとめ (Python ver.)

### このページについて
ディクショナリ型のメソッドをまとめたページです
必要に応じて、順次更新
###■ dict.get()
###**指定したキーに対応する値を取り出す**

“`python:get_example.py
animals = {‘1′:’dog’,’2′:’cat’,’3′:’rabbit’}
print(animals[‘2’])
#cat
“`

###■ dict.items()
###**→キーと値を取り出す**

“`python:items_example.py
score = {‘English’:70, ‘Math’:65, ‘Japanese’:85}
for key, value in score.items():
print(key, value)

#English 70
#Math 65
#Japanese 85
“`

###■ dict.keys()
###**→キーの一覧を返す**

“`python:keys_example.py
score = {‘English’:70, ‘Math’:65, ‘Japa

元記事を表示

競プロ典型90問 002 – Encyclopedia of Parentheses

#問題
[競プロ典型90問 002 Encyclopedia of Parentheses](https://atcoder.jp/contests/typical90/tasks/typical90_b)

#解法

以下の2つを主に考えてコードを書きました。

– 再起関数を使い長さNになるまで文字を追加していく。
– 正しいカッコ列の条件を外れた場合、文字を追加しない。

####正しいカッコ列の条件

まず、正しいカッコ列の条件を考えたところ、以下の2つになりました。

1. カッコ列を左から見て行った時に`”)”`の数が`”(“`を超えないこと。
1. カッコ列の`”(“`の数と`”)”`の数が等しいこと。

ここで長さNのカッコ列を全探索して、全てにおいて上記の判定をしても良いのですが、大変そうだなぁと思ったのでもう少し考えてみました。

2の条件から以下の2つがわかります。

1. Nが奇数の場合正しいカッコ列は存在しないこと。
1. カッコ列を左から見て行った時に`”(“`の数が`N//2`を超えないこと。

ということで、空の文字列から1文字ずつ追加してカッコ列を作

元記事を表示

リスト型に利用できるメソッド (Python ver.)

##このページについて
・リストに使えるPythonのメソッドをまとめたページ
・必要であれば順次更新

##■ list.append(x)
###**→リストの末尾に要素を追加する**

“`python:append_examle.py
fruits = [‘apple’,’orange’]
fruits.append(‘banana’)
print(fruits)
#[‘apple’,’orange’,’banana’]
“`

####リストを追加した時の挙動
“`python:append_example2.py
fruits = [‘apple’,’orange’]
fruits.append([‘banana’,’kiwi’])
print(fruits)
#[‘apple’,’orange’,[‘banana’,’kiwi’]]
“`

##■ list.count(x)
###**→リストでのxの出現回数を返す**

“`python:count_example.py
number = [2, 0, 1, 1, 8, 1, 9, 3, 6, 7, 5, 1

元記事を表示

Qiitaの記事をバックアップする(Python)

QiitaではAPIが公開されているので、これを利用して記事をバックアップします。

https://qiita.com/api/v2/docs

## 1. QiitaのAPIを利用する
### Qiitaのアクセストークンを取得する
Qiitaにログインした状態で、[[設定] – [アプリケーション]](https://qiita.com/settings/applications)にアクセスします。
個人用アクセストークンの「新しくトークンを発行する」をクリックします。

![qiita_api_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125621/a2f29e72-d648-5a30-cb04-afaa83b387e3.png)

アクセストークンの説明を入力し、read_qiitaにチェックを入れ、「発行する」ボタンをクリックします。

![qiita_api_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

【Python】ジャンケンのプログラムを作ってみた!

 Pythonを勉強し始めて1週間が経過したので、何か簡単なプログラムを作ってみようと考え、ジャンケンのプログラムを作ってみました。

“`python
import random

while True:
jan = [“グー”,”チョキ”,”パー”]
cpu = random.choice(jan)
user = int(input(“グーだったら0、チョキだったら1、パーだったら2を入力してください:”))
print(“あなた:” + jan[user])
print(“CPU:” + cpu)

if jan[user] == cpu:
print(“あいこです”)
continue
else:
if cpu == jan[user – 1]:
print(“負けです”)
break
else:
print(“勝ちです”)
break
“`

 出力結果は以下

元記事を表示

Python3について(return[戻り値]について)

#returnについて

関数の最後にいつも書いてありましたが、あまり意味は分かっていませんでした。
なんとなく理解したので、覚書的に書いておきます。

##1.returnがない場合

“`.py
def aisatsu():
print(‘Hello’)

x = aisatsu() #xに対して、あなたは今後aisatsu()ですよと指示している
>> Hello

print(x) #xがaisatsu()になっていれば、Helloが出力されるはず
>> None

“`

このようにxにaisatsuを割り当てて、xを呼び出してもHelloはプリントされません。
なぜなら、このaisatsuの関数が直接呼ばれた時でないと関数の中身が動かないからです。
なので、xに関数を割り当ててもdef aisatsu():までしか呼び出されません。(※イメージです)

##2.returnをつけた場合

“`.py
def aisatsu():
print(‘Hello’)
return (‘Hello’) #別の名前で呼ばれた時はこれを返してね

x = aisatsu

元記事を表示

物体検出のためのアノテーション作業・データ拡張

機械学習や深層学習を学び始めて2か月の者です。
Yolo v3による物体検出を行う際に、準備作業としてアノテーションやデータ拡張を行う必要があったのですが、自分がやりたかったことや自分の使用している環境に完全に合致した記事が見当たらなかったので、せっかくなので自分が取り組んだ内容を備忘録として残すことにしました。
より良い案がありましたらご意見・アドバイス頂けましたら幸いです。

# はじめに
物体検出の基本事項について簡単に触れておきます。

**物体検出とは**
写真や動画データの中から犬や猫などの物体を検出し、検出した物体の周囲を四角い箱(バウンディングボックス)で囲う深層学習の手法のことです。

**アノテーションとは**
物体検出を行うための深層学習モデルを作るに当たり、「これは犬だよ」「これは猫だよ」といった感じで画像データ内のオブジェクトの周りをバウンディングボックスで囲ってやり、それをモデルにインプットして学習させる必要があります。アノテーションとは、そのバウンディングボックスを手作業で画像に付与する作業のことを指します。

**データ拡張とは**
深層学習モデルの学習

元記事を表示

本:問題解決のPythonプログラミング

[「問題解決のPythonプログラミング ―数学パズルで鍛えるアルゴリズム的思考」](https://www.amazon.co.jp/%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E3%81%AEPython%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E2%80%95%E6%95%B0%E5%AD%A6%E3%83%91%E3%82%BA%E3%83%AB%E3%81%A7%E9%8D%9B%E3%81%88%E3%82%8B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E7%9A%84%E6%80%9D%E8%80%83-Srini-Devadas/dp/4873118514)を読んだのでまとめてみました!
著者:Srini Devadas
翻訳:黒川 利明
出版社:オライリージャパン
発売日:2018/9/22

# まとめ
有名なアルゴリズムの本はC++で書かれているものが多く、pythonで学べる本を

元記事を表示

Optiver Realized Volatility Prediction 簡単なコンペ詳細とEDA

# はじめに

Kaggleで9月末まで行われているコンペ***Optiver Realized Volatility Prediction***について簡単にどんな内容なのか***日本語***でまとめます。英語の説明読むのが大変というのと、どんなデータで何を予測するのか簡単に書いてあるサイトがなかったのでこれから参加される方や参加中に方の参考になれば幸いです。

[Kaggleリンク](https://www.kaggle.com/c/optiver-realized-volatility-prediction)

# 何を求めるのか

今回のコンペの依頼主はアメリカの電子マーケットメーカーであるOptiverという会社です。
Optiverは、世界中の多数の取引所でオプション、ETF、現金株式、債券、外貨へのアクセスと価格を改善といった業務を行なってます。
なので今回のコンペでは株価市場についてのコンペになります。
私も取り組むまで全く株価市場について知らなかったので、取組前はかなり身構えました。

長くなってしまうので結論からいうと今回のコンペの目的変数は***ボラティリティ*

元記事を表示

python(mapとlambdaとオブジェクト化について)

#ラムダ式とMapとオブジェクト化についてここで整理しておく。

・まず、簡単な関数で考える。

“`
#簡単な関数(その1)
def calc(a,b): #calc関数に二つの引数aとbを渡す
return a*b #aとbを掛け合わせた後、返す。
calc(3,10)
>>>30
“`
・上記の関数について、lambdaでは以下のように書き換えることができる。

“`
#lambda関数(無名関数)
(lambda a,b:a*b)(3,10)
>>>30
“`

・もう一つ簡単な関数を用意する。

“`
#簡単な関数(その2)
def calc(x):
return x*2

for num in [1,2,3,4]:
print(calc(num))
>>>2
>>>4
>>>6
>>>8
“`

・上記の関数について、lambdaもしくはmapを用いて以下のように書き換えることができる。

“`
#map関数
list(map(calc,[1,2,3,4]))

#map関数とlambdaの組み合わせ
list(map(lambda x:x*2,[

元記事を表示

DjangoーCBVのソースコード分析してみる。

 Views層でFBVとCBVを書く時、なぜ同じ結果が得られるかの疑問はないでしょうか。そしてUrls層でルーティングを設定する場合もCBVとFBVの書き方が変わりますよね? その原因をソースコードに合わせ、見ていきたいと思っています。

 CBVの根本的なところに入るための入口はどこにあるか、そしてどの流れでgetやpostを実行するのかを見てみましょう!

# 入口
“`python
path(‘books1/’, views.Books.as_view())
“`
as_view()を入り口とし、後ろのソースコードを追跡します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729963/33393447-8b9f-b099-b7fa-f27d1e604b22.png)

はい、では、`@classonlymethod`はviews.Books.as_view()と書く理由で、クラスメソッドのことです。

as_viewメソッドはviewが戻り値になり、このviewは実際にa

元記事を表示

系統解析ツール「IQ-TREE」を利用した祖先配列推定 (Ancestral Sequence Reconstruction)

# 概要
祖先配列推定(ASR:Ancestral Sequence Reconstruction)は、共通祖先に由来する各生物のホモログ遺伝子により祖先遺伝子配列を推定する分子進化学における手法を示す。祖先配列推定により、遺伝子(タンパク質)の進化のメカニズムやダイナミクスが解明されてきた。

本稿では、系等解析ツールの一つである「IQ-TREE」を利用した祖先配列推定の実行手順及び自動化Pythonスクリプトを記載する。
※ IQ-TREEのv2.x系にて動作を確認したものであり、v1.x系では動作しません

# 実行手順・結果

IQ-TREEを利用した祖先配列推定における、「入力データ」・「実行コマンド」・「出力結果データ」について記載する。
※ IQ-TREE(v2.x系)がインストール済であること ([IQ-TREE公式サイト](http://www.iqtree.org/))

## 1. 入力データ

– **系統樹ファイル**
[真猿型下目(*Simiiformes*)](https://ja.wikipedia.org/wiki/%E7%9C%9F%E7%8C%

元記事を表示

pythonで移動平均計算するならbottleneckモジュールを使うべし

# 時系列データ(株価データ)のある値(終値)の移動平均を計算するのに、どのやり方が早いのかやってみた。

1. pandas
2. numpy
3. bottleneck(中身はnumpyが使われているらしい)

# PCスペック ryzen3600

# 結論. bottleneckでやるのが早い

“`python
import pandas as pd
import numpy as np
import bottleneck as bn

# 読み込み
path = ‘データ.csv’
df = pd.read_csv(path)

# 終値
close = df[‘Close’]

# pandas
%time ma_close = close.rolling(25).mean()

# numpy
def moving_average(a, n) :
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] – ret[:-n]
return ret[n – 1:] / n
%time ma_close =

元記事を表示

Mediapipeを使ってじゃんけんしてみた

#環境
Jupyter Notebook(6.1.4)を用いて作業を進めました。
主要なライブラリのバーションは以下の通りです。
`OpenCV`(4.5.3), `Tensorflow`(2.5.0)
また、ディレクトリの構成は後述します。

#きっかけ
~~推しとじゃんけんがしたい~~
今まで[MediaPipeを使って手の検出をしたり](https://qiita.com/bianca26neve/items/116814135739929759a0)、[OpenCVを使って俺の愛馬を検出したり](https://qiita.com/bianca26neve/items/19085841c9ac6209fe91)してきました。少しずつ操作になれてきたので、今まで使った技術を使って何かやってみたいと考えました。手の形状を使うゲームとしてぱっと思い浮かんだのがじゃんけんだったので、「パソコンのカメラに手を出してじゃんけんをする」という動作に挑戦してみました。

#概要

目指す形としては、音声の合図でPCのカメラに手を出して形を認識してもらい、勝負の結果を表示する(BGM付)、という

元記事を表示

OTHERカテゴリの最新記事