`

CSVファイル

Comma Separated Valuesの略。

1行ごとに複数の値を‘,’でくぐって並べる。

先頭行に、各値のラベル (Label) を書くことが多い

Excelで作成 => ファイルの保存で “CSV” を選ぶ

Excelで直接読み込める

例：data.csv

rho(ohm),T(K)

0,1

1,2

2,5

3,8

4,15

CSVファイルの読み込み

注意： pythonでは、追加機能を module で追加する。

どのようなmoduleが使えるかは、とにかく検索するに限る

“python csv” で検索

01-readcsv.py

import csv csvを読み込むためのmoduleを読み込む

from pprint import pprint リストを表示する際に成形して表示するmodule pprintを読み込む。

import pprintでもよいが、実際のpprintは、pprintモジュール内の pprint関数であるので、
呼び出す際には pprint.pprint (モジュール名.関数名、あるいはモジュール名.クラス名) とする必要がある。
from module import XXX 文を使うと、module.py中のXXXという関数だけをインポートし、関数名で呼び出すことができる。この場合は、下記のように、pprintだけで呼び出しができる。

infile = 'data.csv' 読み込むcsvファイルのパスを infile 変数に設定

lines = [] csvから読みこむ各行のデータのリスト変数を作成

with open(infile, "r") as f: infile を読み込み専用モード ‘r’ で開き(open)、

ファイルアクセスに必要なファイル変数を f に代入する。

Openしたファイル変数は、使用が終わったらcloseしなければならない

(closeしないと、他のプログラムからファイルにアクセスできなくなる)。

with 文を使うと、withブロックを抜けた時に、

自動的にファイルをcloseしてくれるので便利

reader = csv.reader(f) csvモジュールの属性.readerを使い、fに紐づけられているファイルを
csvとして読み込むためのreader変数を設定

pythonでは、インデント (indent, 字下げ)数でブロックを区別する。
同じブロックは同じだけのインデントをする必要がある

for row in reader: csvファイルを1行ずつ読み込む定型文。

Readerから1行ずつ読み込み、row リスト変数に各要素を代入

lines.append(row) とりあえず、各行のリスト変数を、linesリスト変数に追加しておく

linesは、2次元の配列 (リストのリスト) になっていることに注意。

j行目のデータのリストは lines[j] で取得できる。

j行目のk番目のデータは lines[j][k] で取得できる。

(j,kのいずれも、0 から始まることに注意)

ブロックが終わったら、for文にもどり、readerから次の行を読み込み、

row変数に代入、以下を繰り返す

header = lines[0] csvファイルの1行目はラベル行なので、header変数に代入しておく

xy = lines[1:] データ行は2行目以降なので、xyリスト変数に代入しておく。

[1:]は「リストのスライス」と呼ばれ、index 1から最後までの部分リストを返す

[3:6]とすると、index 3 から 5 (2番目のindexより１少ないことに注意)の部分リスト

print("header:", header) headerの中身を確認するため、print文で表示する

print分では、表示したい変数を , で区切って並べられる

print("lines (print):", xy) xyの中身をprint文で確認

print("lines (pprint):") xyの中身をpprint文で確認したいが、pprintでは文字列とリストを並べて

表示できないので、まず、print文で文字列を表示

pprint(xy) xyの中身をpprint文で確認。この場合はprint文を同じ表示。

CSVファイルのデータを実数型のx,yリストに読み込み、グラフに表示

02-plotcsv.py

# グラフにプロットしてみる

# http://ailaby.com/least_square/

import csv

from pprint import pprint

from matplotlib import pyplot as plt

グラフに表示するため、matplotlibモジュールの pyplot クラスをimportする。

importしたクラス、変数、関数（オブジェクト）には、as 文により別名をつけられる。

この場合、 pltという別名でpyplotオブジェクトにアクセスできる

infile = 'data.csv'

i = 0 csvの変数をheaderと区別して読み込むため、行カウンタ変数を使う

まず、0に初期化する (先頭行を i == 0 で区別できるようになる)

x = [] csvの各行の変数を、x,yというリスト変数に別々に取り込むため、x,yリスト変数を作成する

y = []

with open(infile, "r") as f:

reader = csv.reader(f)

for row in reader:

if i == 0: i == 0、つまり、最初の１行のデータはheader変数に代入

== 演算子は、両辺の変数の値が等しいか等しくないかを判断し、

bool値 True, Falseを返す。

if文は、与えられた値がTrueであれば次のブロックを実行する。

header = row

else: i == 0がFalseである場合に実行される

x.append(float(row[0])) xリスト変数に、各行の index 0 (最初の要素) を追加する。

ファイルから読み込んだ値は 文字列 になっているため、float()関数を使って

実数変数に変換する。

y.append(float(row[1])) yリスト変数に、各行の index 1 (２番目の要素) を追加する。

i = i + 1 行カウンタを1増加させる

print("header:", header)

print("x:", x)

print("y:", y)

plt.scatter(x , y) x,yリスト変数を.scatterメソッドに渡し、

散布図として(x,y)をプロットすることを指示する

plt.show() グラフを表示

`