import numpy as np
import matplotlib.pyplot as plt
# jupyter notebookに画像を表示
%matplotlib inline
StringIOはファイル入力の代わりに文字列を渡すことができるインターフェイスです。
あんまり気にしないでください。
from io import StringIO
# Anacondaで入れた場合はすでに使用可能。
# エラーが出た人は、pipでインストールしてください。
import pandas as pd
CSVファイルとは「,」で区切られたファイルのことです。
一般的には、float, int, 文字列が混在しています。
file = """
I1,I2,F1,I3,S1
1,1,1.9029e+2,3,アツアツ
3,2,8.24608e-1,9,萎え萎え
"""
df = pd.read_csv(StringIO(file), delimiter=',')
df
# 実際は以下のようにパスを指定する。
# df = pd.read_csv('data.csv', delimiter=',')
上で得られたオブジェクトは、pandas.DataFrameというものです。
自動的に型を読み取り、適切なdtypeにしてくれます。
df.dtypes
valuesでndarrayを取得できます。
これはコピーではなく、単なる参照です(pandas.DataFrameは内部でndarrayを保持しています!)。
df['I1'].values
# 確かにndarray
type(df['I1'].values)
# headerがないバージョン
file = """
1,1,1.9029e+2,3,アツアツ
3,2,8.24608e-1,9,萎え萎え
"""
df = pd.read_csv(StringIO(file), header=None, delimiter=',')
df
区切り文字ではなく、「幅」で列を区切るタイプのテキストファイルです。
widthsに列ごとの文字数を指定すると読み取れます。
s = """ VALUE1 VALUE2 ID
+1.87429510e+00 -4.44966444e-02 00030109
-1.83643507e+00 -1.87712943e+00 04005971
+5.11761193e-01 -5.57850439e-01 00000750
"""
df = pd.read_fwf(StringIO(s), widths=(16, 19, 11))
df
# ndarrayが取得できるように
df[['VALUE1', 'VALUE2']].values
fromfileとかあるみたいです。
Numpyでファイル出力する場合、
の3つが基本となります。本稿では上の2つを説明します。
これらはNumpy独自のバイナリ形式です。
np.save関数では、ndarrayを npy という拡張子を付けて保存します。
この形式だと、配列のshapeやdtypeなどの情報も保存するので、np.loadで情報を保ったまま読み込むことが出来ます。
複数のndarrayを保存するときは np.savez 関数を用いて、npz という拡張子で保存します。
npz形式の場合のロードも np.load 関数を使います(拡張子で判断される)。
まずはnpyの保存をみてみましょう。
arr = np.linspace(3, 4, 100).reshape(10, 10, 1)
# arrをnpy形式で保存
np.save("test_arr.npy", arr)
# npyをロード
arr_new = np.load("test_arr.npy")
# 全ての要素が等しいならTrue
np.all(arr == arr_new)
npzでは、キーワード引数を渡すと、その名前で保存されます。
my_x = np.linspace(0, 1, 10) ** 3
my_y = np.arange(0, 10)
# キーワード引数でndarrayをsavezに渡す
np.savez("test_arrs.npz", x = my_x, y = my_y)
arrs = np.load("test_arrs.npz")
arrs["x"]
ndarrayをテキスト形式で保存する関数はnp.savetxtです。
# 2次元配列
x = np.linspace(0, 1, 10).reshape(5,2)
# xをテキスト形式で保存
np.savetxt("my_np.txt", x)
# 保存したテキストファイルを表示
!cat my_np.txt