次にファイルの読み書きについて学びます.
データ分析の際には,データファイルからデータを読み出してプログラムで処理し,処理結果をデータファイルに保存します.ここでは,ファイルの読み書きについて学びます.
データの性質によってファイル保存形式が異なります. 下に代表的なデータと保存形式をまとめます.
| データの種類 | 主な保存形式 | 拡張子 |
|---|---|---|
| テキスト・数値 | テキスト / CSV形式 / TSV形式 / Wordファイル/ Excelファイル |
.txt / .csv / .tsv / .doc, .docx / .xlsx |
| 画像 | ビットマップ形式 / png形式 / jpeg形式 / gif形式 | .bmp / .png / .jpg, .jpeg / .gif |
| 映像 | avi形式 / mpeg4形式 / mov形式 / wmv形式 | .avi / .mp4 / .mov / .wmv |
| 音声 | wave形式 / mpeg形式 / aac形式 | .wav / .mp3 / .mp4, .aac |
今回は CSVファイルの読み書きを行います.他の形式のファイルの読み書きについては自身で調べてみましょう.
次のCSVファイルをWebブラウザで開きましょう.
Webブラウザで開いて,右クリック → 名前をつけて保存 から好きなフォルダに保存しましょう.保存した iris.csv をメモ帳等のテキストエディタで眺めてみます.
iris.csv の見方を簡単に説明します.
- このファイルにはアヤメに関するデータが入っています.
- 行の中で
,がデータの区切りです.1行あたり,5つの要素が並んでいることがわかります. - 1行目に各列の説明があります.これを「ヘッダー」と呼びます.データによっては1行目に各列の説明がない,つまりヘッダーがないものもあります.
- 各列の意味を日本語で書いておきます.
- sepal.lengh : がく片の長さ [cm]
- sepal.width : がく片の幅 [cm]
- petal.length : 花弁の長さ [cm]
- petal.width : 花弁の幅 [cm]
- variety : 種 (Setosa,Versicolor,Virginicaの3種類のいずれか)
このファイルには50行のデータが入っています.3種のアヤメの花を各50個体調べて,がく片の長さと幅・花弁の長さと幅を表形式に記録したものとなっています.
この世の多くの数値データは表形式で保存されています.表形式のデータは人にとって見やすく理解しやすいものですし,コンピュータにとっても検索や新たな行・列の追加などのデータ操作もしやすいものになっています.
読み込みの際には,次のコードをコピー&ペーストして使いましょう.その際,ファイルの中身を一度見てみて,ヘッダーがあるかどうかを確認してください.
- ヘッダーがある場合
# ヘッダーあり
import pandas as pd
import numpy as np
input_file = 'input.csv' # 読み込むファイル名
input_data = pd.read_csv(input_file)
input_data = np.array(input_data)- ヘッダーがない場合
# ヘッダーなし
import pandas as pd
import numpy as np
input_file = 'input.csv' # 読み込むファイル名
input_data = pd.read_csv(input_file, header=None)
input_data = np.array(input_data)変数 input_file に読み込みたいファイルの名前を入れましょう.
読み込んだデータは input_data に入ります.
書き込みの際には,以下のコードを使いましょう.
output_file = 'output.csv' # 書き込むファイル名
df = pd.DataFrame(data)
df.to_csv(output_file, header=False, index=False)変数 output_file_name には書き込むファイルの名前が入ります.
書き込むデータは data に入っているとします.
読み込んだ表形式のデータは 2次元配列 (行列の形式) として扱われます. (2次元リストではなく,2次元"配列" です.細かい説明は割愛しますが,リストと配列で異なりますので注意です.)
2次元配列を扱う際,特定の列・行の値を取り出したい場合があります.そんなときは以下のコマンドを使用します.
下のように,配列の [ ]の中に (取り出したい行番号), (取り出したい列番号) を書きます.番号の代わりに : を指定すると,すべての要素を取り出せます.
# 値の取り出し:2行目・1列目を取り出す.(0行目から数え始めることに注意)
value = input_data[2,1]
# 行の取り出し:0行目にあるすべての列の要素を取り出す.( : は全てという意味)
row_values = input_data[0,:]
# 列の取り出し:3列目にあるすべての行の要素を取り出す.( : は全てという意味)
column_values = input_data[:,3]例えば「配列 input_data の2~5行目のデータのみを取り出したい」など,特定の範囲のデータを取り出したい場合があります.
その場合,input_data[:,2:6] で特定の範囲の値を取り出せます.
注意すべきは,範囲の指定は はじめの行(列)番号 : おわりの行(列)番号+1 となることです.
# 行の範囲の指定:3行目から9行目を取り出す.
row_values = input_data[3:10,:]
# 列の範囲の指定:0列目から2列目を取り出す.
column_values = input_data[:,0:3]
# 行・列の範囲の指定:3行目から10行目,0列目から5列目の範囲の値を取り出す.
extact_values = input_data[3:11,0:6]コード 07_read_write_csv.py を実行しましょう.
実行前に,まずは以下のコードを実行し,Google ColabにGoogleDriveをマウントします.
# Google Driveをマウント
from google.colab import drive
drive.mount('/content/drive')保存した iris.csv を Colaboratory のワークスペースに置きます.(自身のPCにファイルを保存するにはブラウザの 右クリック → 名前をつけて保存 からできます.)
その後,コード 07_read_write_csv.pyをColabに貼り付けて実行します.
- Colaboratory 画面左の 「フォルダアイコン」 をクリックする.
- 出てくるファイルウィンドウに
iris.csv) をドラッグ&ドロップで設置する.
実行すると,データの中身を見ることができます.
コード 07_read_write_csv.py を修正して,iris.csv) の「variety」に対応する列の値のみを表示させましょう.どのような種があるでしょうか?
まず、コード 07_read_write_2Darray.py は「variety」に対応する列以外の列の値を全て取り出し,新たな配列 output_data に入れています.実行して、確認しましょう.
このコードを修正し,variety が Setosa となる行の,がく片の長さと幅をすべて取り出しましょう.
さらに,その取り出したデータを output.csv ファイルに保存しましょう.
ヒント: 繰り返し処理で学んだように,
if文を使って「variety」の列の値がSetosaの行のみを取り出します.
