特定の行に特定の値を代入できるか試してみる:Python3
すごい初歩的なんですが,行を指定して代入できるか試してみました.
In [22]: import numpy as np In [26]: m = np.empty((4,3)) In [27]: m Out[27]: array([[ 0., 0., 0.], [ 1., 2., 3.], [ 0., 0., 0.], [ 0., 0., 0.]]) In [28]: m[1,:] = np.array([3,3,3]) In [29]: m Out[29]: array([[ 0., 0., 0.], [ 3., 3., 3.], [ 0., 0., 0.], [ 0., 0., 0.]])
In [27]でなぜ前の値が残っているのだ??
matplotlibの超基本的な使い方:Python 3.X
matplotlibをしばらく使わないとかなり忘れてしまいます.なので使い方についてメモしておきます.
【もくじ】
まずは基本的な使い方
まずは最小構成でプロットしてみます.
最初にx軸用のデータとして,Numpyのarangeを使って-5から5まで0.2刻みの数字の列を作ります.ちなみにarangeの使い方はこちら
つぎにy軸用のデータとして,x軸用のデータを平方します.
こいつらをスクリプトで描くとこんな感じです.
import numpy as np import matplotlib.pyplot as plt # x:-5から5まで0.2刻みのデータを作る x = np.arange(-5, 5, 0.2) # y:xの値を二乗する y = x**2 # 描画 plt.plot(x, y)
このスクリプトを処理すると,,,
と見慣れた二次関数のグラフになります.
散布図を描く
つぎに散布図です.先程のスクリプトの,
# 描画
plt.plot(x, y)
のところを
# 描画 plt.plot(x, y,".")
としてあげると
みたいな点線になります
「+」の形にプロット
# 描画 plt.plot(x, y,"+")
としてあげると,+の形に点が打たれた散布図がかけます.
破線でプロット
# 描画 plt.plot(x, y,"--")
としてあげると
のような破線になります.まぁ,これは"散布図"とは呼ばないかもしれませんが・・・
画像ファイルに出力する
plt.savefig(ファイル名と形式)で画像ファイルとして出力されます.
また,pylabをインポートしてpylab.figureを呼び出せばサイズも変えられます.
一番最初のスクリプトに追記するとこんな感じです.
import numpy as np import matplotlib.pyplot as plt import pylab # ←加えた!!!サイズを変えるのに使う # x:-5から5まで0.2刻みのデータを作る x = np.arange(-5, 5, 0.2) # y:xの値を二乗する y = x**2 # サイズを変える pylab.figure(figsize=(9, 6)) #←加えた!!!!900×600のサイズになる # 描画 plt.plot(x, y) # グラフを保存 plt.savefig("image.png") #←加えた!!!!画像ファイルとして保存する
Python3,Pandas:データフレームを用いて複数のCSVファイルを連続で読み込む
1.簡単な例
最も単純な例.CSVファイルが2つを読み込んで結合する
import pandas as pd # データの読み込み f1 = pd.read_csv('CSVfile1.csv', header=None) f2 = pd.read_csv('CSVfile2.csv', header=None) # 結合 data = pd.concat([f1, f2]) # 書き出し data.to_csv('newData.csv', index=False)
2.ちょっと複雑な例
「data」というフォルダに複数のCSVファイルが格納されているとする.
これらを「glob」を使ってフォルダ全体を読み込み,データフレームに格納して結合する.
import glob import pandas as pd # ファイル読み込み files = glob.glob('data/*.csv') # ファイルを読み込んでデータフレーム作成 df = pd.concat( (pd.read_csv(f, header=None, # ファイルを読み込む.読み込む際にHeader名は無視する names=('id','val'), # Headerの名前を決める dtype={'id':'str', 'val':'str'}) # データの型を定義 for f in files)) # ファイルを連続で読み込む # 表示 print(df)
ix,loc,ilocによるデータフレームのアクセス:Pandas
ix,loc,ilocは何が違うのか?こいつらを使ってスクリプトを書いたのですが,やや気づきにくい不具合があり,苦戦しました.そんなときに下記のブログに参考にして直しましたが,自分でも試行錯誤したので,その一部を記録しておきます.
リンク先にも書いてありますが,「ちょこっと試すなら.ixを使って,長く使うなら iloc, loc が安全」かと.
列に名前がついて無い場合
ixもilocもloc同じ挙動
In [2]: import pandas as pd In [20]: df = pd.DataFrame( ...: [(10, 11, 12, 13), ...: (20, 21, 22, 23), ...: (30, 31, 32, 33)]) In [21]: df Out[21]: 0 1 2 3 0 10 11 12 13 1 20 21 22 23 2 30 31 32 33 In [22]: df.ix[1,1] Out[22]: 21 In [23]: df.loc[1,1] Out[23]: 21 In [24]: df.iloc[1,1] Out[24]: 21
列に名前(str)がついている場合
ixとilocは番号指定出来る.locは番号指定出来ない
In [7]: df = pd.DataFrame( ...: {'C1': [10, 11, 12, 13], ...: 'C2': [20, 21, 22, 23], ...: 'C3': [30, 31, 32, 33]}) In [8]: df Out[8]: C1 C2 C3 0 10 20 30 1 11 21 31 2 12 22 32 3 13 23 33 In [9]: df.ix[1,1] Out[9]: 21 In [10]: df.loc[1,1] # これはエラー In [11]: df.loc[1,'C2'] Out[11]: 21 # 列名を指定すればOK In [12]: df.iloc[1,1] Out[12]: 21
列に名前(int)がついている場合
ixだと列名の方を優先するみたいです.
In [37]: df = pd.DataFrame( ...: {5: [10, 11, 12, 13], ...: 3: [20, 21, 22, 23], ...: 1: [30, 31, 32, 33]}) In [38]: df Out[38]: 1 3 5 0 30 20 10 1 31 21 11 2 32 22 12 3 33 23 13 In [39]: df.ix[1,1] Out[39]: 31 In [40]: df.iloc[1,1] Out[40]: 21 In [41]: df.columns Out[41]: Int64Index([1, 3, 5], dtype='int64')
Python3.X:データフレームの生成方法色々
その1 数字だけ入れると勝手にHeaderとIndexが追加される
In [17]: import pandas as pd In [18]: df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) In [19]: df Out[19]: 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
その2 HeaderとIndexを自分で指定する
In [20]: df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['I1','I2','I3'], columns=['C1', 'C2', 'C3']) In [21]: df Out[21]: C1 C2 C3 I1 1 2 3 I2 4 5 6 I3 7 8 9
その3 こんな方法もある
In [27]: df = pd.DataFrame({'C1':[1, 2, 3], 'C2':[4, 5, 6], 'C3':[7, 8, 9]},index=['I1','I2','I3']) In [28]: df Out[28]: C1 C2 C3 I1 1 4 7 I2 2 5 8 I3 3 6 9
Python 3.x:配列やデータフレームのコピー
たとえば,こんな
実行結果がこれです
list [[[0, 12], [21, 22]]]
list [[[1, 12], [21, 22]], [[1, 12], [21, 22]]]
list [[[2, 12], [21, 22]], [[2, 12], [21, 22]], [[2, 12], [21, 22]]]