スーパーメモ

進捗なし

Pythonのlibrosaで音声解析まとめ

音声解析なんて大学時代に授業で触った程度。
最近はPythonのライブラリでおおよそのことは出来るみたいなので、一通り触ってみた。

librosa

音声解析用ライブラリ。
github.com

librosaのインストール

pip install librosa

音声読み込み

audio_path="hogehoge"
y, sr = librosa.load(audio_path)

音声再生

注:jupyter notebookで実行しています。

display(IPython.display.Audio(y, rate=sr))

STFT(短時間フーリエ変換

S = np.abs(librosa.stft(y)
plt.figure(figsize=(12,4))
img = librosa.display.specshow(librosa.amplitude_to_db(S,ref=np.max),y_axis='log', x_axis='time', ax=ax)
plt.title('Chromagram')
plt.colorbar()
plt.tight_layout()

メル尺度

人間の音声近くを反映した尺度。人間は低い音の聞き分けは得意だが、高い音は苦手なので、その辺を考慮したものになっている。

S = librosa.feature.melspectrogram(y, sr=sr, n_mels=128)
log_S = librosa.power_to_db(S, ref=np.max)
plt.figure(figsize=(12,4))
librosa.display.specshow(log_S, sr=sr, x_axis='time', y_axis='mel')
plt.title('mel power spectrogram')
plt.colorbar(format='%+02.0f dB')
plt.tight_layout()

オンセット検出

オンセットとは音の開始点(らしい)

o_env = librosa.onset.onset_strength(y, sr=sr)
times = librosa.times_like(o_env, sr=sr)
onset_frames = librosa.onset.onset_detect(onset_envelope=o_env, sr=sr)
D = np.abs(librosa.stft(y))
fig, ax = plt.subplots(nrows=2, sharex=True)
librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max),x_axis='time', y_axis='log', ax=ax[0])
ax[0].set(title='Power spectrogram')
ax[0].label_outer()
ax[1].plot(times, o_env, label='Onset strength')
ax[1].vlines(times[onset_frames], 0, o_env.max(), color='r', alpha=0.9,linestyle='--', label='Onsets')
ax[1].legend()

ビートトラッキング

音声のテンポを自動検知して周波数を返す

onset_env = librosa.onset.onset_strength(y, sr=sr,
                                         aggregate=np.median)
tempo, beats = librosa.beat.beat_track(onset_envelope=onset_env,
                                       sr=sr)
import matplotlib.pyplot as plt
hop_length = 512
fig, ax = plt.subplots(nrows=2, sharex=True)
times = librosa.times_like(onset_env, sr=sr, hop_length=hop_length)
M = librosa.feature.melspectrogram(y=y, sr=sr, hop_length=hop_length)
librosa.display.specshow(librosa.power_to_db(M, ref=np.max),
                         y_axis='mel', x_axis='time', hop_length=hop_length,
                         ax=ax[0])
ax[0].label_outer()
ax[0].set(title='Mel spectrogram')
ax[1].plot(times, librosa.util.normalize(onset_env),
         label='Onset strength')
ax[1].vlines(times[beats], 0, 1, alpha=0.5, color='r',
           linestyle='--', label='Beats')
ax[1].legend()

MFCC(メル周波数ケプストラム

mfccs = librosa.feature.mfcc(x, sr=fs)

HPSS(Harmonic-Percussive sound separation)

調波打楽器音分離なんかも関数一発

y, sr = librosa.load(librosa.ex('choice'))
y_harmonic, y_percussive = librosa.effects.hpss(y)

サンプルが充実しているのが良い。

pythonでopencvまとめ

インストール

2020/08/02現在で4.3.0

pip install opencv-python
>>python
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.3.0'
>>>

USBカメラから動画を取得

cap= cv2.VideoCapture(0)

while(True):
    ret, frame = cap.read()
    cv2.imshow('usb cam',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Pythonデータ分析まとめ(pandas, skitlearn)

基本操作

データ読み込み

test.csv

column1,column2,column3
1,2,3,
4,5,6,
7,8,9

を読み込む。

import pandas as pd
df = pd.read_csv("test.csv")
df.head()
エクセルファイルの場合
df = pd.read_excel("test.xlsx")
ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0 for Excel support Use pip or conda to install xlrd.

xlrdが入ってない場合は、インストールが必要

結合

innerだと同一名が合体するが、outerだと別(列・行)として結合される。

data = pd.concat([df1,df2],ignore_index=True)
data.head()

df1のデータをすべて残し、id一致で結合

data = pd.merge(df1,[df2,df3],on="id",how="left)

カラム作成

df4["column4"] = df4["column1"] * df4["column2"]

統計

df4["column1"].sum() #合計
df4["column1"].average()#平均
df4["column1"].min()#最低
df4["column1"].max()#最大
df4.describe() #統計量表示
df4.dtypes #データタイプ
df4.groupby("column3").sum()["column2"]#column3のデータでグループ化したうえで、column2のデータをグループ内で合計

ユニーク

かぶらないデータのリストを返す

pd.unique(df4.column1)

欠損値

欠損値の有無をaxisで指定した次元に対して判定

df4.isnull().any(axis=0)

行指定、列指定(at,iat,loc,iloc)

at,iatは単一、loc,ilocは範囲指定が可能。atは使う機会が少ない気がする。
iat,ilocは行番号、列番号で指定。

df.loc[df['column2'] > 6, ['column4']]

コロナリモートで感じた、リモートワークに必要なもの

会社が準備すべきもの

ペーパーレスな業務フロー(必須度:★★★★★)

紙の資料にアクセスできないのが課題という内容がネットニュースになっていたが、紙を多用する職場では厳しい。
同様にハンコによる承認フローもリモートワークの敵となる。
通常から99%の業務をペーパーレスで行ってないと難しい気がする。

チャット(必須度:★★★★★)

複数人とリアルタイムに情報共有する為のコミュニケーションツールとして必須。

テレビ会議システム(必須度:★★★★★)

チャットで問題が解決しない時や、普通に会議をする為には必須。

VPN(必須度:★★★★)

社内のネットワークを必要とすることは多々あるはず。
ただし、IT系に限った話かも。

自宅に必要なもの

会社が準備してくれるかはわからないが、とりあえず家に必要だと思ったもの。

会社以外で会話する人(必須度:★★★★)

家族がいる人は問題ないが、独身の一人暮らしだと、平日はほとんど他人と会話しないことに気づく。
1週間家から出ないでいると、マジで喉から声が出なくなる。
誰でも良いが週一で会える、友人、知人、恋人、家族がいないと病む人が増える気がする。

ディスプレイ(必須度:★★)

会社のノートPCで作業するのは、なかなかやり辛い。
文書作成以上の作業をやる場合は、外付けのディスプレイが欲しい。

デスクとイス(必須度:★★★★)

うちには作業するようなデスクがないので、座布団に座り、ローテーブルで作業している。
腰が痛くなるとソファーに移動しているが、それも疲れる。
腰や肩を痛めない為にも、体にあったデスクとイスは必要。

ループイフダン実績 (完結)

年初からやっていたループイフダンだけど、クローズすることにした。
理由としては、リスクに対してリターンが少なすぎるから。

オーストラリアドル40pipの売買双方で張っていたけど、半年間で利益は1万ちょい。
その割に、大きな変動があった場合は10万ほど持ってかれたりする可能性があるのでクローズすることにした。

半年間自動で取引して損失を背負ってない点で、素人にとっては良いのかもしれないが、
取引回数に対して、利益が少なすぎる→業者大儲け ってことなんだろう。


世界情勢も見えないし、当面ループイフダンには戻らない予定。

ループイフダン実績 1月18日~2月15日

1カ月の運用の結果、
確定利益:+10255
含み損: ー3944

+6000円程度で終了。
買い、売り設定にもかかわらず月1万円の利益は少ないな。
しばらくは設定を変えずに運用する予定。