今回は Python のpandasライブラリで csv (または tsv )ファイルを読み込んで出力するプログラムを作成します。機械学習でcsv形式やtsv形式のデータセットを利用する機会が多いと思うので、備忘録的にまとめてみました。初めてPythonでデータセットを扱う方の参考になれれば幸いです。
csv と tsv の違い
私が今回扱うデータセットのファイルはtsv形式だったのですが、最初「Python tsv データセット 読み込み」で検索しても、tsvではなくcsvのファイルを扱う記事ばかりがヒットしました。
しかしこのtsvはcsvと大きな違いはなく、データの内容をなにで区切っているかだけの違いです。
csvはカンマ( , )で区切り、tsvはタブ空白で区切ります。pandasでは読み込む際に区別して読み込む必要があります。
プログラム
今回もGoogleColaboratoryの環境を使ってプログラムを作成します。環境開発やライブラリのインストールが必要ないので便利です。
まず結論、プログラムは以下の通りです。
# Googleドライブに接続
from google.colab import drive
drive.mount('/content/drive')
import pandas as pd
# カラム名を指定しないとエラーが起きた
col_names = ['c{0:02d}'.format(i) for i in range(17)]
# データセットファイルを読み込む。「delimiter='\t'」入れることでtsvファイルを読み込める
df = pd.read_csv('/content/drive/MyDrive/dataset/ichiba04_review201002_20140221.tsv', delimiter='\t', names = col_names)
print(df.sort_values(by='c00'))
プログラム解説
GoogleDrive接続
まず最初のコードブロックの「Googleドライブに接続」では、GoogleColaboratoryをGoogleDriveに接続するためのものなのでPCのローカル環境で開発している人には関係ありません。ちなみにこの場合、csvやtsvのデータセットファイルはこのGoogleDriveに入れておきます。
実行すると以下のような画面が出てきますので、そのまま接続します。
tsv 読み込み( csv も可)
二つ目のコードブロックでpandasライブラリを読み込み、データセットファイルを読み込みます。用意する scv や tsv ファイルは何でもいいので自分で作った適当なやつでいいのですが、私は大学の教授から研究用に頂いた楽天市場のレビューデータを使いたいと思います。
データセットファイルを読み込む前にデータセットのカラム名をc00~c16で指定するようにします。カラム名は何でも大丈夫です。これがないと読み込みでエラーが起きてしまいました。
データセットの読み込みにはread_csvを使います。csvファイルの読み込みであれば引数はファイルパスとカラム名だけでいいのですが、tsvファイルを読み込む場合は引数にdelimiter='\t'を追加する必要があります。
出力
そして最後に、print(df)で読み込んだ内容を出力します。
ここでdf.sort_values(by='c00')としているのは、出力するデータを任意にソートする(順番を変える)ためです。この場合、カラムc00(一つ目のカラム、今回の場合ユーザー名)を基準にしてソートするようになっています。
ソートには他にも、ascending=Falseをつけると降順になったり、df.sort_index(axis=1, ascending=False)でカラム名に基づいてソートしたりするなど、様々な手法があります。
結果例
おまけ:任意の列を抽出して出力
やりたいこと
c00列とc05列だけを抽出して表示させたい。
コード
3つ目のコードブロックを以下のように変更します。
df2 = df.sort_values(by='c00')
print(df2.loc[:,['c00','c05']])
1行目でまず前と同じようにc00(ユーザー名)順にソートして、それを新たに作成した変数df2に格納します。
2行目でlocを使って出力するカラムを指定してprint出力します。
参考記事
↓read_csvの使い方
↓ソートの手法
↓列・行の抽出