ホームページをリニューアルしました。旧HPはこちら
Python

文字列変数を使用したCSVテキストのリスト化

以下に文字列変数上の各項目をリストに展開するサンプルコードを記します。
splitメソッドを使えば簡単にリストに展開することができます。

構文

文字列.split("区切り文字")

サンプルコード

s = "foo,bar,hoge"
l = s.split(",")
print l

実行結果

['foo', 'bar', 'hoge']

実行結果を見ると、splitで指定したカンマで分割されリスト(配列)に展開されているのが確認できます。

CSVファイルから1行ずつ取り出す

CSVファイルをオープンし一行ずつ読み込みリスト(配列)に展開するスクリプトです。
使用したCSVファイルは以下の通りです。

$ cat data.csv
abc,def,ghi,jkl,mno,pqr,stu,vwx,yz
ABC,DEF,GHI,JKL,MNO,PQR,STU,VWX,YZ

サンプルコード

#!/usr/bin/env python

f = open('data.csv', 'r')

for line in f:
    line = line.rstrip()
    l = line.split(",")
    print l
f.close()

実行結果

sakura@ubuntu:~/python$ chmod +x csv2lst.py
sakura@ubuntu:~/python$ ./csv2lst.py
['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz']
['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR', 'STU', 'VWX', 'YZ']

上記のサンプルコードでrstripを使用しています。
これは、行末の改行コードを削除しています。

以上、CSV形式のテキスト(ファイル)をリスト(配列)に展開する方法でした。


 

ベクトル

ベクトルは基本的に NumPy の一次元配列として作成する。

import numpy as np
a = np.array([1, 1, 2, 3, 5, 8, 13])
b = np.array([1, 4, 9, 16, 25, 36, 49])

a + b
## array([ 2,  5, 11, 19, 30, 44, 62])

a[0] + b[2]
## 10

ベクトルの長さやデータの型などを調べる際に以下のようにする。

a
## array([ 1,  1,  2,  3,  5,  8, 13])

a.size
## 7

a.dtype
## dtype('int64')

ベクトルの結合は NumPy の append メソッドを利用する。

c = np.append(a, b)
c
## array([ 1,  1,  2,  3,  5,  8, 13,  1,  4,  9, 16, 25, 36, 49])

平均値などの基礎統計量を計算するメソッドなど。

a.mean()     # np.mean(a)
## 4.7142857142857144

a.var()      # np.var(a)
## 16.77551020408163

a.sum()      # np.sum(a)
## 33

a.min()      # np.min(a)
## 1

a.max()      # np.max(a)
## 13

2 つのベクトルを縦にまたは横に結合して 2 次元配列に変換するには NumPy の column_stack または row_stack を利用する。

d = np.column_stack((a, b))
d
## array([[ 1,  1],
##        [ 1,  4],
##        [ 2,  9],
##        [ 3, 16],
##        [ 5, 25],
##        [ 8, 36],
##        [13, 49]])

## d[4,0]
## 5

e = np.row_stack((a, b))
e
## array([[ 1,  1,  2,  3,  5,  8, 13],
##        [ 1,  4,  9, 16, 25, 36, 49]])

e[1, 5]
## 36

その他のベクトルの作り方など。

x = np.array([1, 2, 3, 4])

x.repeat(3)
## array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])

x.repeat(x)
## array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])

np.zeros(5)
## array([ 0.,  0.,  0.,  0.,  0.])

np.arange(1,5)
## array([1, 2, 3, 4])

np.arange(1, 10, 3)
## array([1, 4, 7])

np.arange(10, 1, -1)
## array([10,  9,  8,  7,  6,  5,  4,  3,  2])

ベクトルの並べ替えなど。sort はベクトル要素を並べ変えるのに対して、argsort はベクトル要素を並べ替えるためのインデックスを求めている。

y = np.array([1, 43, 23, 32, 55, 11])

y[::-1]
## array([11, 55, 32, 23, 43,  1])

 np.sort(y)
## array([ 1, 11, 23, 32, 43, 55])

np.argsort(y)
## array([0, 1, 2, 3, 4, 5])

y[np.argsort(y)]
## array([ 1, 11, 23, 32, 43, 55])

コメント

タイトルとURLをコピーしました