Python再開してみています

15年くらい前には中途半端にPythonを使っていたのですが、最近のデータサイエンス業界でのPythonの盛り上がりが気になったので、Pythonに再入門してみました。(15年前は主としてCとJavaをやっていたのでCPythonではなくJythonを使っていましたが、いろいろと不満もあってMatlabに移行したのでした)

ここ1〜2週間ほどPythonSoloLearn.comのウェブサイトとiPhoneアプリで勉強しつつ、これまでMatlabやRで書いたコードをPythonに移植しています。

全てのものが一カ所にまとまっているMatlabと違って、PythonではNumPy、SciPy、Matplotlibなど様々なライブラリに散らばっていて面倒だと感じましたが、とりあえずpyenvでanacondaを入れておけば最小公倍数的に必要そうなものが全部そろいますし普段のMac OS X環境を破壊してしまう心配がないので良いと思います。今後、本腰を入れてPythonを使うかどうかは分かりませんが、そうであれば必要なものだけに絞り込んでインストールしたい気がします。

さて、今日はオーディオファイルを読み込んでスペクトルなどを表示するところまで行きました。以下、撥弦楽器のサンプルを分析したものです。

import soundfile as sf
x, fs = sf.read("sound.wav")

# 自前のツール群を読み込み
exec(open("./audioutils.py").read())

# スペクトルを描画(両線形軸)
plot_spectrum(x, fs)

f:id:amarui:20170323131642p:plain

# スペクトルを描画(両線形軸・範囲指定)
plot_spectrum(x, fs, xlim=(0,5000))

f:id:amarui:20170323132810p:plain

# スペクトルを描画(両対数軸)
plot_magnitude(x, fs)

f:id:amarui:20170323132118p:plain

# スペクトル中心(Hz)の時間変化を描画
sc, t = spectral_centroid_moving(x, fs, window_size=4096, hop_size=1024)
import matplotlib.pyplot as plt
plt.plot(t, sc)
plt.xlabel("Time (sec)")
plt.ylabel("Spectral Centroid (Hz)")
plt.grid()
plt.show()

f:id:amarui:20170323155424p:plain

# 実効値(dB)の時間変化を描画
r, t = rms_moving(x, fs, window_size=4096, hop_size=1024)
plt.plot(t, r)
plt.xlabel("Time (sec)")
plt.ylabel("RMS (dB)")
plt.grid()
plt.show()

f:id:amarui:20170323161423p:plain

plt.show()の代わりにplt.savefig("hoge.pdf")などとすると表示せずファイルに保存。