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

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

python の標準出力を tee で 表示/保存 できなかった件

開発中に大量のエラーを吐き出していたので
エラー表示を見ながらファイルにも保存したかったのに、`tee` を仲介させた途端何も出力しなくなった

標準出力がバッファリングされるのが原因らしい

“`
python3 hoge.py | tee log
“`

“`
python3 -u hoge.py | tee log
“`

と、`-u` オプション追加で、解決した。

元記事を表示

lxml.etree で XML の基本的なことをもう少し触ってみる

# 目的
[Windows 10 + Excel2016_x86 VBA で XML の基本的なことを少し触ってみる](https://qiita.com/tabizou/items/10eb832352a6b31888c7)
で使用したXMLファイルをPythonで基本的な操作をもう少し試してみる。

## Pythonのサンプルコード
基本的な機能をもう少し試してみる。

“`python
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
# coding:utf-8

from lxml import etree
import urllib.request

# urlencode
urladr = urllib.parse.urlencode({‘addr’:’池尻4-35-25′})
url = “http://geocode.csis.u-tokyo.ac.jp/cgi-bin/simple_geocode.cgi?charset=UTF8&” + urladr

with urllib.request

元記事を表示

pythonなのか、python3なのか。

## トラブル
python3系をネットからインストールしたはずにも関わらず、ターミナルでバージョンを確認すると「Python 2.7.16」と表示される。(「Python 3.10.5」と表示されて欲しい)

“`console
$ python –version
Python 2.7.16
“`

## 原因
バージョン確認のコマンドが間違っていた。
コンピューターによってはpython2系とpython3系の両方がインストールされていることがあり、その場合はコマンドを以下のように使い分ける必要があるらしい。
 
 python2系:python
 pythom3系:python3

自分のコンピューターにはpython2系がデフォルトでインストールされていたため、pythonコマンドを打つと「Python 2.7.16」と出力されるということだった。
python3系のバージョンを確認したければpython3コマンドを打つと「Python 3.10.5」と出力される。

“`console
$ python –version
Python 2.7.16
$ python

元記事を表示

【Python】SQLAlchemyでMySQLに接続する

今回は、Pythonで簡単にSQLを実行できる`SQLAlchemy`という`O/Rマッパー`を使用し、実際にMySQLとマッピングしてCSVファイルのデータを追加したり、CRUD操作をする方法について実装を行ったので、備忘録として残しておこうと思います。

# 前提
– SQLAlchemyがインストールされていること
– mysql-connector-pythonがインストールされていること

上記モジュールがインストールされていない場合は、pipにてインストールを実行してください。

“`terminal
% pip install SQLAlchemy
% pip install mysql-connector-python
“`

# DBと接続しCSVファイルのデータを追加する
まずは、DBとの接続情報を環境変数として定義します。

## 環境変数の定義
私の場合、`.env`に必要な情報を環境変数として定義し、config.pyで読み込みと定義を行なっています。

ここに`PORT`が必要となる方は、PORTも定義してください。

“`python:config.

元記事を表示

機械学習〜ロジスティック回帰 数学

##数学で躓く

ロジック回帰分析の全て
>https://www.youtube.com/watch?v=mMMzDFttZ8A
>https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5

###疑問1;商の微分公式とは?
商の微分係数の役割;分数の形の数字を簡単に素早く微分。
>https://mathtrain.jp/syonobibun

###疑問2;シグモイド関数について
シグモイド関数の役割はシグモイド関数特有の性質よりデータの概形作成。
不連続だがよく使う関数をなめらかな関数で近似する役割。
*e=ネイピア数 
>https://atarimae.biz/archives/10256#i-2

複利で考えた際に元利に+複利としていき極限値まで求めたもの。
#####シグモイド関数は確率を計算する上で便利。
グラフより上限1で加減が0となっていてX=0の時Y=1/2になる。
軸となるのはこのX=0の時点の値1/2。
これは50%を表していて50%を基準としてプラスに進めば進むほど確率は上がり、マイナスに進めば

元記事を表示

超初心者がe869120さんの【分野別 初中級者が解くべき過去問精選 100 問】をpythonで解いてみた!Part2

https://qiita.com/K-suke99/items/5576cbc476cf11422ef0

の続きです。

ALDS_11_C – 幅優先探索

https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_11_C

“`python:practice.py
from collections import deque

n = int(input())
connected = [[] for _ in range(n+1)]
for _ in range(n):
u,k,*V = map(int,input().split())
connected[u] = V
visited = [-1]*(n+1)
q = deque()
q.append(1)
visited[1] = 0
while q:
now = q.popleft()
for to in connected[now]:
if visited[to] != -1:
continu

元記事を表示

kerasでデータの拡張をする

どうもエンジニアのirohasです。

先日、[kerasを使用して虹ヶ咲学園のキャラクターを画像認識させてみた](https://qiita.com/irohas_gawr/items/c13a59e59d1cde18e5be)の記事において、データ数の少なさから精度があまり芳しくなく、データを増やそうと思い、Data Augmentation(データ拡張)をしたので、
今回は機械学習ライブラリの一つであるkerasを用いた、Data Augmentation(データ拡張)を紹介します。

# 目次
[1.環境](#1-環境)
[2.使用ライブラリ](#2-使用ライブラリ)
[3.データ拡張って何?](#3-データ拡張って何?)
[4.ソースコード](#4-ソースコード)
[5.まとめ](#5-まとめ)

# 1. 環境
vscode
Python 3.9.0

# 2. 使用ライブラリ
##### ・標準ライブラリ
os : ローカルフォルダ用ライブラリ
glob : フォルダ一括取得用ライブラリ

##### ・外部ライブラリ
numpy 1.21.4 : 数値計算ライブラリ

元記事を表示

【Python】TwitterAPIとtweepyでいいねの自動化をしてみた

今回は、検索したツイートに対していいねする処理を自動化するという実装を行いました。
勉強になりつつ楽しめると思うので、参考にしていただけますと幸いです。

# 実装準備
まず、「いいね自動化」を実装するにあたり、前提として、`TwitterAPI`で「プロジェクト」登録を行い、`API_KEY`や`ACCESS_TOKEN`を取得している必要があるので、取得できていない方は、APIの設定から始めてください。

> [Twitter Developers](https://developer.twitter.com/en/portal/projects-and-apps)

# 実装
以下が実装した内容です。
順次、解説します。
“`python:auto_fav_tweet.py
import tweepy

import config

api_key = config.TWEETER_API_KEY
api_secret_key = config.TWEETER_API_SECRET_KEY
access_token = config.TWEETER_ACCESS_TOKEN
a

元記事を表示

【Python】メルフィルタバンクからMFCCまで【特徴量抽出】

本記事では、音声データをMFCC(メル周波数ケプストラム係数)で特徴量抽出する方法を解説します。

ケプストラムとあるように、基本的理解にはケプストラム分析の概念が必要です。そちらの解説記事も書いていますので、ぜひご覧ください。

[【Python】音声の特徴量抽出MFCCの前段階:ケプストラム分析](https://qiita.com/Oka_D/items/cc296b358be340138f2c)
# MFCCの概要
MFCCは次のようにして求めます。
“`
1. 音声をフーリエ変換して周波数領域にする
2. メル尺度で周波数領域を変換し、フィルタバンクで周波数の情報を圧縮(メルフィルタバンク)
3. 対数パワースペクトルに変換
4. 離散コサイン変換し、ケフレンシー領域で低周波数と高周波数に分離
“`

MFCCではメルフィルタバンクとケプストラム分析のそれぞれを理解する必要があります。

## フィルタバンク
**フィルタバンク**とは、入力信号を分解するフィルタのことです。
重要な信号は密に取り、重要でない信号は比較的大雑把に取ります。今回のメルフィルタバンクの例でもそ

元記事を表示

【Python】TwitterAPIとtweepyを使用してツイート自動化を行う方法

よく記事にあがっているようなPythonによるTwitterの投稿でハマった箇所があったので、実装の振り返りをしつつ記事に残しておこうと思います。

# 実装
“`python:add_tweet.py
from pprint import pprint
import tweepy

import config

api_key = config.TWEETER_API_KEY
api_secret_key = config.TWEETER_API_SECRET_KEY
access_token = config.TWEETER_ACCESS_TOKEN
access_secret_token = config.TWEETER_ACCESS_SECRET_TOKEN

def clinet_info():
“””認証情報を返却する関数

Returns:
_type_: Client
“””
client = tweepy.Client(
consumer_key=api_key,

元記事を表示

Codility lesson3 PermMissingElem

Lesson3のPermMissingElemは欠けている数字を当てるというものです。
長さNのリストには1~N+1のいずれかが異なる形で入っている、逆にいうと一つ欠けていることがわかります。
[1,2,4,5]は3ですね。
[1,2,3,4]は5ですね。

さて今回の問題を考える上で、配列の順番を変えても特に問題はありませんよね。
例えば
[3,1,2,4]を[1,2,3,4]にする
[4,5,1,2]を[1,2,4,5]にした方が処理しやすいですよね。
なので今回は前回のlesson2 OddOccurencesInArrayのとき同様に先にソートしてから処理していきます。

アルゴリズムは以下の通りです。
1.順番通りにソートする
2.インデックス番号と比較してインデックス番号に対応している数字が来ていれば次に進む。
3.2の処理を繰り返し行うことでインデックス番号と対応していない数字、つまり欠けている数字の場所に到達するまで行う

コードは以下の通り

def solution(A):
A = sorted(A)
i = 0

元記事を表示

Codility lesson3 FrogJmp

Lesson3のFrogJmpの問題はカエルが登場したり飛んだり文章が無駄に長くなっていますが、要点は至ってシンプルです。
位置XにいるカエルはYに到達するまでに何回ジャンプすれば良いかというものです。

例えばX = 30 Y = 60 一回のジャンプで進む距離D=20だとすれば
最短2回で到達します。

(60-30)//20 = 1に 1を加える

例えばX = 30 Y = 60 一回のジャンプで進む距離D=30だとすれば
最短1回で到達します。

(60-30)//30 = 1

今回はアルゴリズムは説明するまでもなく、コードを見てもらった方が早いと思うので、
コードは以下の通りです。

def solution(X,Y,D):

if (Y – X)%D >= 1:
return (Y – X)//D +1
else:
return (Y – X)//D

さて結果は。。。。?

![スクリーンショット 2022-06-12 0.50.10.png](https://qiita-ima

元記事を表示

Codility lesson2 OddOccurencesInArray

Lesson3のOddOccurencesInArrayの内容はリスト内のペアになっていないものを返すというものです。
例えば、[1,2,3,4,3,2,1]においてペアになっていないものは4だけです。
例えば、[1,1,1,3,1,1,1]においてペアになっていないものは1です。
例えば、[1,1,1,3,3,1,,1]においてペアになっていないものは1です。

さて、ペアでないものを見つける一番はやい方法はなんでしょうか。

それはまずは並び替えるということです。

[1,2,3,4,3,2,1]ならば[1,1,2,2,3,3,4]なので4
[1,1,1,3,1,1,1]ならば[1,1,1,1,1,1,3]なので3
[1,1,1,3,3,1,,1ならば[1,1,1,1,1,3,3]なので1

こうした方が見やすいですよね。

アルゴリズムは以下の通りです。

[アルゴリズム]
1.リストの数字を小さい順に並び替える
2.先頭から順番に、現在の要素と次の要素が等しければ、それがペアとなるので、次のペアを探していく。
3ペアとならないものを見つけたらその数字を返す。

具体的にコード

元記事を表示

Codility lesson2 CyclicRotation

Codilityの問題を解くことにハマってきた。
今までは2重ループで全部強引突破してきたが、いかに無駄をなくせるかという視点でコードを書かなければならないので、
そういった処理速度を意識したコードを書くことができるようになる。皆さんもぜひやってみてください。

というわけでlesson2のCyclicRotationをやっていきます。

lesson2のCyclicRotationはリストの要素のシフトに関する問題。リストの要素を全て右にK個分シフトして、できたリストを返すという問題です。

[アルゴリズム]
1.全ての要素をずらす。
2.ずらして、リストからはみ出した分は余りとして捉え、余った分だけリストの先頭から入れていく。

具体的にコードを見ていこう。

def solution(A,K):
len_A = len(A)
rotated_list = [0]*(len_A) #回答用のリスト

for i in range(len_A):
rotated_list[(i+K)%len_A] =

元記事を表示

Codility lesson1 BinaryGap

企業の技術テストでCodilityの問題が出されることあり、最近Codilityについて勉強しているので、せっかくだし自分の回答をわかりやすく説明してQuitaに載せておこうと思う。

lesson1のBinaryGapの問題は受け取った値を二進数に変換した際に登場する0の個数に関する問題。
1で区切った際に最大の0の個数はいくつかを聞く問題だ。
例えば1000100の場合は4を返すようにする。

[アルゴリズム]
1.受け取った数値を二進数に変換する。
2.変換された値を桁ごとに区切り、それぞれの値をリストに格納する。
3.リストから要素数分、一つ一つ値を取り出していき、0になった瞬間からカウントを開始、0の個数を保持しておく。
4.0の出た回数をそれぞれを比較し最も多い回数を返せばいい。

具体的にコードを見ていこう。
(なお私のコードは処理速度を速くするためになるべく二重ループはしないように心掛けている。)

def solution(N):
bin_N = int(format(N,’b’))
bin_N_list = []

元記事を表示

PythonによるSTFT等で利用する窓関数の比較

# はじめに
出来る限り公式ドキュメントに従った実装を心掛けていますが、不慣れなところは見逃していただけると幸いです。

# 概観
#### 短時間フーリエ変換
[PythonによるFFTを用いたパワースペクトル推定](https://qiita.com/uene/items/8210234cb183851552da)では、時間領域信号をすべて周波数領域信号へ変換してその信号の性質を明らかにしようとする場合に用いられる[パワースペクトル](https://www.wavemetrics.com/products/igorpro/dataanalysis/signalprocessing/powerspectra)について解説しました。しかし、音声・音楽など時間とともに変化する信号を解析する際には時間情報も重要な情報です。そのように時間情報、周波数情報の二つの情報をある一つの信号から抽出する際に用いられる解析を[

PythonでGmailを自動送信する方法

最近、Pythonを始めるにあたり、自動化してみたかったGmailの送信処理の実装を行いました。
まだまだPython初心者に自分にとっては、学びになる点が多かったので共有したいと思います。

# 実装
実装は、多くの記事にあるように、Pythonのデフォルトのライブラリである`smtplib`と`MIMEText`の`email.mime.text`を使用して行います。

“`python:mailer.py
import smtplib
from email.mime.text import MIMEText
from dotenv import load_dotenv
import os
import csv

load_dotenv()

class Mailer:
“””メールを送信するクラス
“””

# 初期化
def __init__(self, addr_to, subject, body):
“””Mailerクラスのコンストラクタ

Args:
addr_to (_type_): 送信元先情報

Bカーブの可変抵抗の入力値を使って擬似的にAカーブのようなデータを取り出す

## 可変抵抗の種類について
可変抵抗には抵抗値の変化の特性によって、Aカーブ、Bカーブ、Cカーブといった主に3種類のものが存在するようです。
一般的にはAカーブ、Bカーブのものがよく使われるようですが、用途毎に準備しておくのも無駄ですし、Amazon等で安く購入できる物はBカーブのものが多い印象です。

都合によりAカーブのような特性をもたせたかったのですが手元にBカーブの可変抵抗しか持ち合わせていなかったので、計算式を用いて擬似的にAカーブ、それも任意のカーブ具合に調整できないか考えてみました。

## 計算式
#### 前提
RaspberryPi等で、12bitのA-Dコンバータ経由で可変抵抗の値を取得する場合を想定しています。
私の場合はRaspberryPi4Bと[MCP3208-CI/P](https://akizukidenshi.com/catalog/g/gI-00238/ “秋月電気通商”)を使用しました。

#### Bカーブの可変抵抗をそのまま使用する場合の計算式

$y=a\ x$
ここで、$x$は12bitなので0~4095まで変化します。この変化量はBカ

Pyenvを使ってから標準入力のリダイレクトがEOF errorになったので対処法

状況が特殊で同じような人はいないと思うけど備忘録

## 経緯
今まで`main.py`に`input.txt`からリダイレクトさせたいと思ったときに
`python main.py < input.txt`と入力していたが、それがPyenvを入れてから `EOFError: EOF when reading a line`になった ## 対処法 コマンドの最初の`python`をなくして`main.py < input.txt`に変えた ## あとがき 原因は謎 多分Pyenvを入れたことで、インタプリターへのパスが変わったとかだと思うけど、 `python main.py`のコマンドは普通に動作する...

会議など保存した音声ファイルの文字起こしをVOSKを使ってお手軽にやる

VOSKが流行っていたのでやってみました。
Google Colaboratoryで実施しましたが、Pythonだったら何でも大丈夫なはずです。

## 下準備する

“`
!pip3 install vosk
!git clone https://github.com/alphacep/vosk-api.git
!wget https://alphacephei.com/vosk/models/vosk-model-small-ja-0.22.zip
!unzip vosk-model-small-ja-0.22.zip
!mv vosk-model-small-ja-0.22 model
“`

## WAVファイルを準備する(アップロードする)

WAVファイルを準備する

16kHz,16bit,monoである必要あり。

以下の記事などを参考に
zoomで録画した動画からffmpeg, soxあたりで変換すると幸せになれました。

http://www.xucker.jpn.org/pc/ffmpeg_wav.html

https://qiita.com/mountce