Python3関連のことを調べてみた2020年02月09日

Python3関連のことを調べてみた2020年02月09日

Pythonのエラーメッセージは具体的でわかりやすい「が」(要素[0]でIndexError: list index out of range)

#目的
何かと比較できるほどの経験が乏しいですが、
**Pythonのエラーメッセージは具体的でわかりやすい**
と感じています。
よって、エラーは、ぱっと見るだけでなく、記載内容をまじめに読むことが、
エラー解決の近道である気がしています。

ただ、一瞬、理解できないこともあるので、
**理解できるはずという前提で落ち着いて考えましょう**
という、そんな気持ちを示すための記事です。

## 要素[0]でIndexError: list index out of range
補足の**要素[0]でIndexError: list index out of range**の意味は、
レンジ外と言われてみ、要素[0]がなんで、レンジ外なの?
という意味です。

#エラーメッセージの例

ここで示すコードは、エラーメッセージを出すためのコードで、
全く同じような間違いをする可能性があるコードではありません。
繰り返します。エラーメッセージを出さすためのコードです。
(ただし、もう少し、ややこしいコードで、同じエラーが出ているのをみたことはあります。)

## エラー1
**Index

元記事を表示

Pythonのエラーメッセージは具体的でわかりやすい「が」(3連”””コメントの閉じる側で、SyntaxError)

#目的
何かと比較できるほどの経験が乏しいですが、
**Pythonのエラーメッセージは具体的でわかりやすい**
と感じています。
よって、エラーは、ぱっと見るだけでなく、記載内容をまじめに読むことが、
エラー解決の近道である気がしています。

ただ、一瞬、理解できないこともあるので、
**理解できるはずという前提で落ち着いて考えましょう**
という、そんな気持ちを示すための記事です。

## 3連”””のコメントの閉じる側での、SyntaxError
補足の**3連”””でのコメントの閉じる側で、SyntaxError**の意味は、
コメントを書いただけなのに、エラーになる、しかも、Syntaxと言われるという
言葉通りの意味です。

#エラーメッセージの例

ここで示すコードは、エラーメッセージを出すためのコードで、
全く同じような間違いをする可能性があるコードではありません。
繰り返します。エラーメッセージを出さすためのコードです。
(ただし、もう少し、ややこしいコードで、同じエラーが出ているのをみたことはあります。)

## エラー1
**SyntaxError**が出る

元記事を表示

python仮想環境を使う【venv】

# はじめに
pythonの仮想環境について教わったメモです。

## なぜpython仮想環境が必要なの?
– プロジェクトごとに必要なライブラリを管理するため
– ライブラリ同士の競合を防ぐため

## 環境
2つの環境で試しました。

1. Windows 10 + Python 3.7.3
2. Linux(Debian 10.2) + Python 3.7.3

# venvでpython仮想環境を使う

## 仮想環境を作成する

“`:Windows
>python -m venv testvenv
“`

“`:Linux
$ python3 -m venv testvenv
“`

`testvenv`は仮想環境の名前です。任意の名前でOKです。
実行すると、カレントディレクトリに、新規ディレクトリ`testvenv`が作成されます。

## 仮想環境を起動する

“`:Windows
>testvenv\Scipts\activate

(testvenv) >
“`

“`:Linux
$ source testenv/bin/activate

(

元記事を表示

OpenCV 差分画像

###はじめに

OpenCVを使って、差分画像の表示、保存する一連の動作を以下の記事を参考にまとめてみました。
関数でよいのですが、クラスのStaticmethodを使ってみたかったので、クラスでまとめてみました。

参考
[Python, OpenCV, NumPyで画像を比較(完全一致か判定、差分取得など)](https://note.nkmk.me/python-opencv-numpy-image-difference/)

###コード
こちらに同じコードがJupyterでファイルであります。
https://github.com/SGyutan/opencv_diff_image

“`
from pathlib import Path

import numpy as np
import cv2
import matplotlib.pyplot as plt

%matplotlib inline
“`
“`
class DiffImage():
“””
差分画像解析

“””

@staticmethod

元記事を表示

AWS Lambdaでslackに新着論文通知

# TL;DR

AWS Lambdaを用いてMicrosoft Academicで新着論文を検索してSlackに通知するツールを作った。

# はじめに

研究室等のSlackに新着論文通知出せたら便利ですよね。

以前はjournalのRSSを使ってましたが、あまり関係ない論文が飛んできてイマイチ機能していなかったので自分でフェッチツールを作ることにしました。

(実際、皆さんどうしてるんでしょうか)

通知を出すだけなので、[AWS Lambda](https://aws.amazon.com/jp/lambda/)や[Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/)といったサーバーレスアーキテクチャを用いれば非常に安価で簡単に構築できます。

今回はAWS Lambdaを用い、また論文検索には[Microsoft Academic](https://academic.microsoft.com/home)のAPI、[Academic Knowledge API](https://doc

元記事を表示

クラスメソッド スタティックメソッド

“`py:
class Person(object):
kind = ‘human’

def __init__(self):
self.x = 100

@classmethod
def what_is_your_kind(cls):
return cls.kind

@staticmethod
def about(year):
print(‘human about {}’.format(year))

print(Person.what_is_your_kind())
Person.about(1999)
“`

“`:実行結果
human
human about 1999
“`

`Person.what_is_your_kind()`で
`Person()`となっておらずオブジェクトができていないので、
本来はエラーとなる。

しかし、
`what_is_your_kind`をクラスメソッドにする事で、
`what_is_your_kind`オブジェクトのメソッドではなく、

元記事を表示

anacondaを用いた際のエラー解決方法

今回私はanacondaを使ってtensorflow,keras,pythonの勉強していて様々なエラーが発生し、その解決した内容を書いてきます。

 anacondaからターミナルを開いた時『プロセスが完了しました』と表示されコマンドを打つことができず 

何をしたかは忘れましたが仮想環境に入ろうとしても入れなかったため(ターミナルの先頭に私の場合は(tf111cpu))が表示されなかった。
解決策としては、調べた記事通りに進めて本来anacondaと混ぜて使うものではないpyenvを使ったため、pyenvと混在していてanacondaがうまく動作していなかったためだと思います。まずはpyenvをアンインストールしてanacondaが動く状態にしないといけないと思いアンインストールしました。そして、jupyter noteでimport tensorflowを実行したら以下のエラーが発生しました。

ModuleNotFoundError Traceback (most recent call last)

元記事を表示

python構文メモ

#pythonメモ
python入門することになったのでよく構文を忘れるのでここにメモしておく。
基礎の基礎から。

###for文

“`
for 変数 in オブジェクト:
処理
“`

###if文

“`
if 条件式:
trueの時の処理
elif 条件式:
  elifの時の処理
else:
  ifとelif以外の時の処理
“`

###リスト

“`
list = [“値1″,”値2”,”値3”]
“`

###ディクショナリ

“`

dictionary = {“キー”:”値”,”キー”:”値”,”キー”:”値”}
“`

###多次元リスト

“`
list2 = [[“値1″,”値2″,”値3”],[“値4″,”値5″,”値6”]]
“`

###文末で改行しない

“`
end = “”
“`

とりあえず完成しなそうなので今回はここら辺にして新しいの使ったら後から更新。

元記事を表示

Python3の標準モジュールで完結するRPC

## 目次
– 今のPythonのRPCは種類が多すぎる
– 標準ライブラリで実行できる価値
– コードの説明
– 実際に動かしてみて

## 今のPythonのRPCは種類が多すぎる
2020年現在、数多くのRPCがOSSとして公開されていますが、種類が多すぎる点と、それに伴う選択コストの増加と、評価コストの増加、学習コストの増加が個人的な課題
であると感じています。

社会人をやっているととにかく時間が貴重なので、次々現れるライブラリを検討していたり、使い方を学んだりしているのは、PoCを素早く行う場合やAPIなど閉じた小さ
いプロダクトを作る際には適切ではありません。

Pythonでは `multiprocessing` の中に `manager` クラスが存在して、multiprocessing時のプロセス間通信をネットワーク越しに動作させることで、高性能なRemote Procudure Callを実装することができます。

Remote Procudure Call(以下, RPC)とは、ネットワーク上の別のコンピュータで、何らかの処理を呼び

元記事を表示

テーブルのデータをCSV形式で高速に出力する小ネタ

# 記事の内容
以前、同僚からテーブルのデータをCSV出力するのに時間が掛かるという話をされたので、ちょっとした内容ですがアドバイスしました。

時間の計測まではしていなかったので、どのくらい早くなるのか簡単な検証も踏まえてメモを残します。

# 前提
・テーブルの内容は全データそのまま出力する
・PostgreSQL 12.1

# 用意データ
準備したデータは以下のidだけ違うデータを1000万件用意しました。

“`
-[ RECORD 1 ]——–
id | 1
data1 | aiueo
data2 | kakikukeko
data3 | sasshisuseso
data4 | tachitsuteto
data5 | naninuneno
data6 | hahihuheho
data7 | mamimumemo
data8 | yayuyo
data9 | rarirurero
data10 | wawon
“`

# 出力方法1

出力方法1は全データ取得して、プログラムの中でCSV形式に変換するという内容です。

SQL

元記事を表示

AWS S3のCSVファイルをシンプルに読み込むPythonコード

# 概要
– AWSのS3バケットに保存されたCSVファイルをパッと読み込んで使うコードです
– 難しいことはしません
– 自分用スニペットです
– 一旦ローカルファイルに保存しないので、巨大なファイルはメモリ注意ですね
– 巨大ファイルの場合は素直にローカルにダウンロードするのが良いと思われます
– 巨大な場合は全列必要でない可能性も考慮するとS3 Selectも検討範囲になるかもしれません

# コード

“`python:csv_from_s3.py
import io
import csv
import boto3

def get_s3file(bucket_name, key):
s3 = boto3.resource(‘s3’)
s3obj = s3.Object(bucket_name, key).get()

return io.TextIOWrapper(io.BytesIO(s3obj[‘Body’].read()))

for rec in csv.DictReader(get_s3file(‘my-bucket-n

元記事を表示

【Python】AtCoderで必要になるかもしれない知識

AtCoder初心者が問題を解いていくうえで、
役立つかもしれない知識をメモとして残していく。

#入力
いろんな入力の受け取り。

文字の受け取り

“`python
S = input()
“`
数値の受け取り

“`python
N = int(input())
“`

空白数値受け取り

“`python
A,B = map(int,input().split())
“`

入力回数を受け取り、その回数分入力を受け取る
角かっこを使った書き方を内包表記という

“`python
N = int(input()) #入力回数
l = [int(input()) for i in range(N)] #N回の数値入力をリストとして取得
“`
入力回数を受け取り、その回数分空白数値を受け取る

“`python
Q = int(input())
L = [0]*Q
R = [0]*Q

for i in range(Q):
L[i], R[i] = map(int, input().split())
“`

あとで文字列を変更したい場合、文字のリストとして

元記事を表示

【Python】家虎に逆位相の音を合成して無音を作る

# はじめに
**こちらの記事を参考にさせていただきました。**
[音声分析ド素人が逆位相ミュージックを聞いたら、そこに訪れたのは混乱とそして静寂だった](https://qiita.com/usk81/items/8284ff74e79bdbd7dbae)

## やること
家虎と逆の波形(逆位相)の音を作成し、2つを合成することで家虎を無力化(無音)させます。
手順としては以下の通りです。

・家虎(音源)の読み込み
・逆位相の作成
・家虎と逆位相を合成(無音化)

## 家虎とは
[興味ない方や知ってる方は飛ばしてください](#準備)

アイドルや声優のライブで使われる『イェッタイガー』というコール(掛け声)のことです。主にサビの前で叫ばれることから曲の雰囲気を壊すとしてネット上で議論の対象になることがよくあります。

先日もブシロード取締役の木谷高明氏が次のようなツイートをしたことで話題になりました。

元記事を表示

【python】英語勉強用アプリに使用する、各単語の音声ファイルを自動ダウンロードするアプリを作成してみた

# あらすじ

下記記事にて作成した英語勉強用アプリでは、英単語の音声ファイルが必要になる。
https://qiita.com/Fuminori_Souma/private/0706716fdebf08572c6c

その音声ファイルを手動でダウンロードするのは時間と手間がかかって大変なので、
webスクレイピングで自動的にダウンロードすることにした。

音声ファイルはweblio様のもの有難くをダウンロードいただきます。

※ weblio様にご迷惑をかけないよう、速度は遅め(恐らく手動以下)に設定しています。

# ソースファイル

“`python:get_sound_file.py
import sys
import tkinter
import time
import re
import urllib.request
from tkinter import messagebox
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdrive

元記事を表示

Python の gRPC で Redis のデータを削除 (Delete)

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

設定ファイル

“`text:redis_delete.proto

syntax = “proto3”;

package redis_delete;

service Greeter {
rpc RedisDelete (RedisRequest) returns (RedisReply) {}
}

message RedisRequest {
string key = 1;
}

message RedisReply {
string key = 1;
}
“`

サーバープログラム

“`py:redis_delete_server.py
#! /usr/bin/python
#
# redis_delete_server.py
#
# Feb/08/2020
# ————————————————————–
import sys
import json
import redis
from concu

元記事を表示

【python】英単語の微妙な音声の聞き分けを練習するためのアプリを作ってみた

# あらすじ

以前、海外旅行中、子猫を抱えた現地の人に英語で話しかけられた時の話。

外国の人「How to say “kitchen” in Japanese ?」
自分「(?? なんでいきなりそんなこと聞くんだろう…)DAIDOKORO」
外国の人「?? … ? What?」
自分「DAIDOKORO !」
外国の人「…Oh, DAIDOKORO! OK! DAIDOKORO!」

後日

自分「こうゆうことがあってさ。なんであんなこと聞いてきたんだろうな」
友達「それ、kitchenじゃなくてkittenって言ったんじゃない?
   子猫抱えてたんでしょ?」
自分「ああそっか、kittenか!子猫のことね!
   kitchenと発音が似てるから間違えてしまったよ!hahaha」

自分・友達「…」

自分「英語、勉強しよう…」

# 作りたいもの

発音が似ている2つの単語を画面上に表示し、
どちらかの音声ファイルをランダムで再生する。
発音されたとユーザーが判断した方の単語を選択し、
正解もしくは不正解を画面上に表示する。

また、発音記号が似ている様々な単語のペアは

元記事を表示

Python の gRPC で Redis のデータを更新 (Update)

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

設定ファイル

“`text:redis_update.proto

syntax = “proto3”;

package redis_update;

service Greeter {
rpc RedisUpdate (RedisRequest) returns (RedisReply) {}
}

message RedisRequest {
string key = 1;
int32 population = 2;
}

message RedisReply {
string key = 1;
}
“`

サーバープログラム

“`py:redis_update_server.py
#! /usr/bin/python
#
# redis_update_server.py
#
# Feb/08/2020
# ————————————————————–
import sys
import json

元記事を表示

クラス変数

“`py:1
class Person(object):
kind = ‘human’

def __init__(self, name):
self.name = name

def who_are_you(self):
print(self.name, self.kind)

p1 = Person(‘A’)
p2 = Person(‘B’)

p1.who_are_you()
p2.who_are_you()
“`

“`:1の実行結果
A human
B human
“`

クラス変数(この場合はkind)は、
つくった全てのオブジェクトで共用される。

“`py:2
class T(object):
words = []

def add_word(self, word):
self.words.append(word)

c = T()
c.add_word(‘apple’)
c.add_word(‘banana’)
print(c.words)

d

元記事を表示

Python の gRPC で Redis のデータを作成 (Create)

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

設定ファイル

“`text:redis_create.proto

syntax = “proto3”;

package redis_create;

service Greeter {
rpc RedisCreate (RedisRequest) returns (RedisReply) {}
}

message RedisRequest {
string key = 1;
string str_json = 2;
}

message RedisReply {
string key = 1;
}
“`

サーバープログラム

“`py:redis_create_server.py
#! /usr/bin/python
#
# redis_create_server.py
#
# Feb/08/2020
# ————————————————————–
import sys
import redis

元記事を表示

Python の gRPC で Redis のデータを読む (Read)

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

設定ファイル

“`text:redis_read.proto

syntax = “proto3”;

package redis_read;

service Greeter {
rpc RedisRead (RedisRequest) returns (RedisReply) {}
}

message RedisRequest {
string key = 1;
}

message RedisReply {
string str_json = 1;
}
“`

サーバープログラム

“`py:redis_read_server.py
#! /usr/bin/python
#
# redis_read_server.py
#
# Feb/08/2020
# ————————————————————–
import sys
import redis
from concurrent import futu

元記事を表示

OTHERカテゴリの最新記事