✅ はじめに|CSVは動作分析の入り口!
骨格推定で出力される .csv
ファイル。
そもそも「CSVってなに?」「Pythonでどう使うの?」と思っている方も多いのではないでしょうか。
今回は、Python初心者でも理解できるように:
✅ CSVファイルの中身と仕組みの紹介
✅ Python(pandas/numpy)で読み込む方法
✅ 区切り文字やヘッダーの意味も丁寧に解説!
解説していきます。
✅ CSVってなに?|仕組みをざっくり理解
CSV = Comma Separated Values(カンマで区切られた値)といい、このファイル形式の特徴としては以下のようなものがあります。
特徴 | 内容 |
---|---|
表のような構造 | 行と列からなるデータ表(メモではカンマで区切っている) |
テキストファイル | メモ帳で開ける、Excelでも扱える |
各行が1つのデータ | 1行目はヘッダー(列の名前)になることが多い (このあたりについては、装置にいろいろ違う。1:4列目は計測機器の情報とかが入っている構成の場合もある) |
✅ CSVの中身を見てみよう
例えば、こちらの記事でmediapipeを使って出力したときの実際のCSVファイルはそこんな感じです。mediapipeを使って動画の骨格位置座標を出力する記事はこちら(記事URL:http://ktr-project.net/?p=46)
このデータはでは一行目がヘッダーとなっており、その列が何のデータであるかを説明しています。
frame,x_11_px,y_11_px,x_13_px,y_13_px
0,320.1,240.5,312.8,235.0
1,322.2,241.0,314.0,236.1
たとえば、上肢の関節位置の場合にはこのような感じで見ることができます。
列名 | 意味 |
---|---|
frame | フレーム番号(時系列) |
x_11_px | 左肩のX座標(px) |
y_11_px | 左肩のY座標(px) |
x_13_px | 左肘のX座標 |
✅ pandasとnumpyのインストール方法
PythonでCSVを扱うには、以下の2つのライブラリが定番です。これらのライブラリを使うことで、csvの中に書かれているデータや情報をpythonのプログラミングで処理することが可能になります。
ライブラリ | 用途 |
---|---|
pandas | 表データの読み書き |
numpy | 数値計算やベクトル処理 |
今回の記事以降で実際にデータに対して解析処理をかけたりするネタもやっていこうと思っているため、その時に詳細を話そうとは思いますが、一行目にヘッダーがしっかりとついている構成であれば、pandasで読み込んでおくと、データを抽出したり整えたりするのがやりやすいです(KTR所感)。
🔧 インストール方法(Anaconda)
Anaconda環境の方は、最初から入っていることが多いです!。もし仮想環境という個別の環境を自作している場合には入っていない場合もあるので、その際には以下の文字をAnaconda Promptで打ってください。インストール方法は以前の記事でも紹介していますのでご参照ください(記事URL:http://ktr-project.net/?p=25)。
conda install pandas numpy
conda install numpy
✅ PythonでCSVを読み込んでみよう
以下のようにすれば、CSVを簡単に読み込めます。
import pandas as pd #コード上でpandasを使えるようにするコード
df = pd.read_csv("pose_output_pixel.csv") #pandasを使ってpose_output.csvの中身を読み込む。
df
は「DataFrame」と呼ばれる表形式のデータ構造- 1行目が自動的に「ヘッダー(列名)」として読み込まれます
このコードを走らせると、Spyderの画面右上にdfという項目が出現し、そこをクリックしてやるとdfの中身のデータを見ることができます。
✅ カンマ?タブ?CSVに似たファイル形式は多い
CSVと一口に言っても「区切り文字(セパレータ)」の違いがあります。これはメモ帳アプリでcsvファイルを開いてみてもらうとわかりやすいのですが、いわゆるエクセルの行列の格子の部分の区切りをどうやって表現しているかの違いと思ってくれれば良いと思います。
区切り文字は大きく分けると、カンマ区切り、タブ区切りというものがあります。csvファイルと呼ばれるものは基本的にはカンマ区切りになります。
また.txtなどの形式はタブ形式であることが多く、その場合にはデータを読み込む際に一工夫が必要です。筋電図や三次元動作解析装置などをよく扱っている方であれば、.trcであったり、.ancファイルというような見慣れないファイルを見たことあると思います。
これらのデータはタブ区切りです。基本的にexcelで読み込めるけど、あんまり見たことのない拡張子のファイルはほとんどタブ区切りだという印象です(KTR所感)。
区切り文字 | 拡張子例 | Pythonでの読み方 |
---|---|---|
カンマ(, ) | .csv | pd.read_csv("file.csv") |
タブ(\t ) | .tsv や .txt | pd.read_csv("file.tsv", sep="\t") |
スペース区切りというのもあるのですが、私はあんまり遭遇したことがないです(´;ω;`)。たいていこの二つの形式で保存されているという印象です。
✅ CSVの中の“座標データ”を活用しよう
前回までの記事で使ったCSVには、以下のヘッダーのような骨格のランドマーク(関節)位置が入っていました。
frame,x_11_px,y_11_px,x_13_px,y_13_px,...
今回の記事の内容では、これらの関節位置の座標をpythonで計算処理できる形で読み込むことができるようになりました。このステップは、
- 各関節の動きを波形に
- 肩関節の角度を算出
- 歩行や動作分析に活用!
などの次の段階に繋がります。特にpandasのヘッダーをうまく使ってデータを切り出したりくっつけたりする処理を覚えると格段に解析が楽になります。
pandasには他にもいろんな機能があるため、そちらの詳細については別記事で書いていこうと思っています(pandasの公式ドキュメントはこちら:https://pandas.pydata.org/docs/reference/index.html)。
✅ よくあるエラーと対処法
エラー内容 | 原因・対策 |
---|---|
ModuleNotFoundError とエラーが出る。 | ライブラリがpython環境に入っていない。conda install ○○でインストールする。 |
文字化け(日本語) | エンコーディングというステータスが合っていない可能性がある。 → pd.read_csvで encoding="utf-8" や "shift-jis" を指定→もしくは該当のデータファイルをエクセルで開いてcsv( utf-8 )で保存しなおす。 |
データがうまく読めない | pd.read_csvでの区切り文字やヘッダー位置の問題であることが多い → sep="," や sep="\t" を確認する |
私の思いつく限りいろいろとエラーの発生源を上げてみましたが、二番目と三番目の項目が結構よく見かけるので注意しましょう。
✅ まとめ|CSVはすべてのデータ分析の基本!
pythonで解析やってみようという人の多くで最初に直面するのは、「結局自分の手持ちのデータをどう処理したり読み込ませたらいいんだ?」という問題だと思っています。自分の手持ちのデータのファイル形式をしっかり理解さえしておけば、pythonにデータ読み込ませるのは意外と簡単です。
ポイント | 内容 |
---|---|
CSVは「カンマ区切りの表形式データ」 | このファイル形式で時系列データが出力されることが多い。 |
pandasで簡単に読み込める | pythonにデータを取り込む第一歩 |
区切り文字やヘッダーに注意するだけでOK | 読み込みエラーの原因は大抵これ(KTR所感) |
これらのポイントをひとまず理解しておけば、今後の細かい動作の定量化や動作可視化もスムーズに進みます!
✅ 次回予告
次の記事では:
「特定の関節の座標だけを抽出して、波形で可視化する方法」
を紹介予定です。グラフ描画に使用することが多いmatplotlibというパッケージの概要について簡単にやっていこうと思っています。
✅ ご質問・ご感想はX(@KTR_Project)へ!
わからないことがあれば、お気軽にご相談ください。
コメント