データが格納されたファイル(.dat, .csvなど)を1行ずつ読み込む方法はわかるけど、一列全てのデータを一挙に読み込む方法はわからないって方いませんか?
この記事では、ファイルのある列の全データを一挙に読み込む方法を具体的に解説します。
Pythonで学ぶ偏微分方程式の数値シミュレーションの技術書を販売中
計算方法、グラフやアニメーションの作成方法、計算ログの残し方を惜しみなく解説しています!
理論と実装の溝を埋めてくれる良書です!
datファイルを一挙に読み込む
datファイルの準備
average_temperature_kyoto_2018.dat という2018年の京都市における各月の平均気温のデータが格納されたデータファイルを用意しました。
# averaged temperature in 2018 @ Kyoto city
# 01: month 02: averaged temperature in the daytime
1 3.9
2 4.4
3 10.9
4 16.4
5 20.0
6 23.4
7 29.8
8 29.5
9 23.6
10 18.7
11 13.5
12 8.2Desktop/Dr.code/python/data-analysis/input_file_all というディレクトリにこの を保存しておきます。average_temperature_kyoto_2018.dat
コードを書こう
と同じ階層にaverage_temperature_kyoto_2018.datinput_file.py と名付けたファイルを保存します。
いきなり結論から入りますが、ファイルを読み込むためのコードは次のように書きます。各行を読み込む方法よりもシンプルに記述できますね。
import numpy as np
data_file = 'average_temperature_kyoto_2018.dat'
month = np.loadtxt(data_file, comments='#', usecols = 0)
ave_temperature = np.loadtxt(data_file, comments='#', usecols = 1)
print(month)
print(ave_temperature)プログラムの実行をしよう
上記のプログラムを実行してみましょう。
ターミナルを開いて、cwdをDesktop/Dr.code/python/data-analysis/input_file_all にして、実行します。
(→やり方がわからない方はプログラムを実行する方法を参考にしてください。)
python input_file.py
# (実行結果)
# [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.]
# [ 3.9 4.4 10.9 16.4 20. 23.4 29.8 29.5 23.6 18.7 13.5 8.2]うまくいけば上のように実行結果が表示されると思います。
なんの説明もなかったので、次はnp.loadtxt()がどういう機能をもつか説明します。
コードの解説
numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)11個のパラメータから構成されているnumpyのload.txt関数です。使用する際には11個全てを記入する必要はなく、必要なものを選んで使えば問題ありません。 この関数は、データが格納されたファイル(fname)の指定した列(usecols)を読み込み、読み込んだデータが格納された配列を返します。 つまり、col1 = numpy.loadtxt(fname, usecols=0)と記述すると、fnameというファイルの1列目のデータが配列としてcol1に渡されます。 また、import numpy as npというようにas npを記述することで、np.loadtxt()という省略形で表記が可能になります。
numpy.loadtxtの各パラメータ(こちらを参考にまとめました)
| パラメータ名 | 型 | 概要 |
|---|---|---|
| fname | 文字列 | 読み込みたいファイルの名前やパスを記入します。 |
| dtype | データ型 | (省略可能)出力結果のデータ型を指定できます。 デフォルトではfloatです。 |
| comments | 文字列 | (省略可能)コメント行の開始を示す文字を指定できます。 デフォルトで’#’です。上ではあえて書いていました。 |
| delimiter | 文字列 | (省略可能)値を区切るために使われる文字列。 デフォルトでは (スペース)です。 |
| converters | 辞書(dict) | (省略可能)ある列の欠損を補完できる。 デフォルトはNone。 |
| skiprows | Int | (省略可能)コメント部を含む冒頭の何行を読み飛ばすかを指定できる。 デフォルトは0。 |
| usecols | Int | (省略可能)どの列を読み込むかを指定できる。 デフォルトでは、全ての列を読み込む。 例えば usecols=(1,4,5)とすると2,5,6列目を読み込む。 |
| unpack | Bool型 | (省略可能)デフォルトではFalse。 Trueにすると、別々の列のデータを別々の変数に格納できる。 |
| ndmin | Int | (省略可能)返される配列の最低次元数。 デフォルトでは0。0,1,2が使える。 |
| encoding | 文字列 | (省略可能)入力ファイルのデコードに使用されるエンコード。 デフォルトでは’bytes’。 |
| max_rows | Int | (省略可能)skiprowした後に、何行読み込むかを指定できる。 デフォルトでは全てを読み込む。 これを使えば、最後の数行を読み込まないようにできる。 |
ちょっと応用
パラメータを活用すれば、上で書いたコードよりも1行だけ省略した記述ができます。(こなれてる感が出せるぞ)
import numpy as np
data_file = 'average_temperature_kyoto_2018.dat'
month, ave_temperature = np.loadtxt(data_file, usecols = (0,1), unpack=True)
print(month)
print(ave_temperature)csvファイルを一挙に読み込む
csvファイル
というファイルを用意しました。average_temperature_kyoto_2018.csv
上と同じく、Desktop/Dr.code/python/data-analysis/input_file_all に置きます。
中身は以下のようになっています。
# averaged temperature in 2018 @ Kyoto city
# 01: month 02: averaged temperature in the daytime
1,3.9
2,4.4
3,10.9
4,16.4
5,20.0
6,23.4
7,29.8
8,29.5
9,23.6
10,18.7
11,13.5
12,8.2なお、Atomエディターでcsvを開く場合はtablrというプラグインをインストールしましょう。
pluginのinstall画面でtablrで検索すれば、インストールはすぐにできます。
サンプルコード
np.loadtxt(data_file, comments='#', usecols = 0)をnp.loadtxt(data_file, comments='#', delimiter=',', usecols = 0) に書き換えればOKです!
全体のコードは次のようになります。
出力結果もdatファイルの時と同じになります。
import numpy as np
data_file = 'average_temperature_kyoto_2018.csv'
month = np.loadtxt(data_file, comments='#', delimiter=',', usecols = 0)
ave_temperature = np.loadtxt(data_file, comments='#', delimiter=',', usecols = 1)
print(month)
print(ave_temperature)




