- 1. ALDS_11_C – 幅優先探索
- 1.0.1. kerasでデータの拡張をする
- 1.0.2. 【Python】TwitterAPIとtweepyでいいねの自動化をしてみた
- 1.0.3. 【Python】メルフィルタバンクからMFCCまで【特徴量抽出】
- 1.0.4. 【Python】TwitterAPIとtweepyを使用してツイート自動化を行う方法
- 1.0.5. Codility lesson3 PermMissingElem
- 1.0.6. Codility lesson3 FrogJmp
- 1.0.7. Codility lesson2 OddOccurencesInArray
- 1.0.8. Codility lesson2 CyclicRotation
- 1.0.9. Codility lesson1 BinaryGap
- 1.0.10. PythonによるSTFT等で利用する窓関数の比較
- 1.0.11. PythonでGmailを自動送信する方法
- 1.0.12. Bカーブの可変抵抗の入力値を使って擬似的にAカーブのようなデータを取り出す
- 1.0.13. Pyenvを使ってから標準入力のリダイレクトがEOF errorになったので対処法
- 1.0.14. 会議など保存した音声ファイルの文字起こしをVOSKを使ってお手軽にやる
- 1.0.15. PythonでGCSをトリガーにBQデータ格納
01.00. importing package/library
“`python
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inlineimport seaborn as sns
From sklearn.linear_model import LinearRegression as LR
One-hotエンコーディング
カテゴリデータを数値に変換
例:性別(男女)を1,0に変換“`python
# One-hotエンコーディング
# One-hotエンコーディング(OneHotEncoder)
from sklearn.preprocessing import OneHotEncoder# sparse: false =numpyのデータとして結果を取得
ohe = OneHotEncoder(sparse=False)# 「Suppliers」の列を変換
encoded = ohe.fit_transform(df[[‘Suppliers’]].values)
encoded# * ラベル変換後の列名を取得
label = ohe.get_feature_names([‘Suppliers’])
label# dfのコピー
df2 = df.copy()# もともとの「Suppliers」の列を削除
df2 = df2.drop(‘Suppliers’, axis=1)#新たにOne-Hotエンコーディングで得られた列を追加(エンコードした列は転置して追加)
【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 dequen = 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 tweepyimport 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 tweepyimport 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_TOKENdef 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 csvload_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
PythonでGCSをトリガーにBQデータ格納
## やること
GCSにファイルがアップロードされたことをトリガーに、そのファイルをBQに格納する## GCS
GCSのコンソール上で「バケットを作成」
※今回は名前が`test`
その下の階層に「フォルダを作成」
※こちらも名前が`test`あげるファイル
`test20220606.csv`date,id,name,click
2022-06-06,111111,Aki,4
2022-06-06,222222,Haru,10
2022-06-06,333333,Natu,23
2022-06-06,444444,Huyu,19
2022-06-06,555555,Oto,1## BigQuery
プロジェクトからデータセットだけ作成
データセット名:`test`## コード
requirements.txtgoogle-cloud-bigquery
`pip install -r requirements.txt`
main.py
from google.cloud import big