移動平均を計算しようとすると「FutureWarning: pd.rolling_mean is deprecated for Series and will be removed in a future version, replace with ・・・」と出て来る
FutureWarning: pd.rolling_mean is deprecated for Series and will be removed in a future version, replace with ・・・
特定の行・列を残す:Python,Numpy
Pandasで条件を指定して行・列を抜き出すやつが有ると思います.正式名称は分かりませんが,df[val>0]みたいなやつです.Numpyのarrayでおんなじことが出来るか試したので,メモ書きしておきます.
まずはこんな感じで配列を作ります.そして1個飛ばしで列を獲得できるかやってみます.
In [31]: import numpy as np In [32]: a = np.array([[ 0, 1, 2, 3], ...: [ 4, 5, 6, 7], ...: [ 8, 9, 10, 11], ...: [12, 13, 14, 15]]) In [33]: label = np.array([ 0, 1, 0, 1]) In [34]: mask = (label == 1)
まずは一個飛ばしで列を獲得してみます.
In [35]: a[:,mask] Out[35]: array([[ 1, 3], [ 5, 7], [ 9, 11], [13, 15]])
続いて一個飛ばしで行を獲得してみます.
In [36]: a[mask,:] Out[36]: array([[ 4, 5, 6, 7], [12, 13, 14, 15]])
それでは,一個飛ばしで行と列の両方を獲得するにはどうやるのでしょう?
In [37]: a[mask,mask] Out[37]: array([ 5, 15])
これだと上手く行かないので,次のように書いてみました.
In [38]: a[:,mask][mask,:] Out[38]: array([[ 5, 7], [13, 15]])
Pythonでargmaxとかargmin
argmaxとargminについて書いてあるようなタイトルですが,本記事ではargmaxのみです.argminも使い方は同じなので書いてません.
まずは配列を用意します.
In [8]: import numpy as np In [9]: a = np.array([[1,2,3],[4,5,6],[7,8,9],[2,8,2]])
あとはご覧の通り
In [10]: a.argmax(axis=0) Out[10]: array([2, 2, 2], dtype=int64) In [11]: a.argmax(axis=1) Out[11]: array([2, 2, 2, 1], dtype=int64) In [12]: a.argmax() Out[12]: 8
sum()とsum(1)は何が違うのか??:Python,NumPy
全部足すか列ごとに足すかの違いでした~
In [46]: import numpy as np In [47]: A=np.array([[ 2,4,6.], ...: [ 4,8,12.], ...: [ 6,12,18.]]) In [48]: A.sum() Out[48]: 72.0 In [49]: A.sum(1) Out[49]: array([ 12., 24., 36.])
カーネル関数の使い方:scikit-learn
Pythonのscikit-learnのカーネル関数を使ってみたので,メモ書きしておきます.いやぁ,今までJavaで一生懸命書いてましたが,やっぱりPythonだと楽でいいですねー.
もくじ
最初に注意する点
最初につまずいた所.一次元の配列だとエラーが出るみたいです.
import numpy as np from sklearn.metrics import pairwise x = np.array([1, 1]) #([[1, 1]])と書かないとエラーになります print(pairwise.rbf_kernel(x))
と書くと,
DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
と言う具合に「データとしての1次元配列の受け渡しは0.17で廃止されました」と言われます.なので,ベクトルを使う場合は一次元の列であることを書かないと駄目みたいです.
線形カーネル
検算が簡単そうな線形カーネルから試してみたいと思います.
リファレンスはこちら
sklearn.metrics.pairwise.linear_kernel — scikit-learn 0.19.1 documentation
まずは簡単な例から
リファレンスを見ながら単純な例を試しみました.
import numpy as np from sklearn.metrics import pairwise x = np.array([[1, 1]]) y = np.array([[2, 2]]) print(pairwise.linear_kernel(x,y))
線形カーネルの計算式は次の通りです.
内積を計算しているので,出力は4になるはずです.
出力結果 [[ 4.]]
と狙い通りになりました.
データが多次元だったら
実際のデータは,例えば2次元のデータならば という具合になるわけです.
ではデータが多次元の場合はどうなるでしょうか??
import numpy as np from sklearn.metrics import pairwise x = np.array([[1, 1],[2, 2],[3, 3]]) print(pairwise.linear_kernel(x))
と書くと出力結果はこうなります
出力結果 [[ 2. 4. 6.] [ 4. 8. 12.] [ 6. 12. 18.]]
これって例えば とあったら,上の行は ,,と計算しているみたいで,上から二段目の行は ,,と計算しているみたいです.3行目も同じようです.
ガウシアンの動径基底関数
ドキュメントは下記の通り
動径基底関数はなんぞや?という話は次の通り
実際に使ってみるとこんな感じです.
import numpy as np from sklearn.metrics import pairwise x = np.array([[1, 1]]) y = np.array([[2, 2]]) print(pairwise.rbf_kernel(x,y))
と書くと
[[ 0.36787944]]
物の本を読むとらしいのですが,このライブラリの場合はなにもしないとらしいです.なので
きょうはこんな感じで
PyCharmの64Bitをインストールする
問題点
PyCharmをインストールしようとしたら32Bitのlauncherしか出ない.
解決方法
stackoverflow.com
ここにも書いてあるように64BitのJDKをインストールする
Pandasでmatplotlibみたいに描画する
これまでPandasとmatplotlibを一緒に使う機会がなかったんですが,Pandasにも描画機能があります.しかもこれが結構便利!とうことで早速使ってみたので,ログとして残しておきます.
import pandas as pd import pylab import matplotlib import matplotlib.pyplot as plt plt.style.use('ggplot') # ggplotを使う font = {'family' : 'meiryo'} # フォントをメイリオにする matplotlib.rc('font', **font) # # データフレームの定義 df = pd.DataFrame({'Time': ['10:00:00', '10:00:01', '10:00:02', '10:00:03', '10:00:04','10:00:05', '10:00:06', '10:00:07', '10:00:08', '10:00:09'], 'Value1': [25, 30, 104, 52, 41, 91, 102, 40 ,101 ,97], 'Value2': [45, 19, 34, 19, 78, 148, 45, 53 ,74 ,32]}) # サイズの変換 pylab.figure(figsize=(9, 6)) # グラフを描く df.plot() # 画像ファイルの保存 plt.savefig("image.png")
v