✅ この記事でわかること
MediaPipeなどで解析を進めていると、いくつかのエラーに遭遇することがあると思います。そのエラーの中には、データの「型」に関連するものがあり、基礎的な知識が必要になります。この記事ではCSV形式の骨格データを扱うときに発生しやすい「データ型のミス」や「エラー」について、以下のような記事の構成でPython初心者でも理解しやすいように解説します。
- Pythonでよく使うデータ型(int, float, str, object)
- CSV読み込み時に型が崩れるパターン
- 型変換で防げるエラーの具体例
✅ Pythonの基本データ型(初学者向け)
そもそもプログラミングについてあまり触れていない人にとっては「データ型」とはそもそも何かがピンとこないかと思います。
「データ型」とは、python上でそのデータをどういう性質として扱うかというものを決めるルールのようなものです。これまでのグラフを描画する記事(記事URL:http://ktr-project.net/?p=76 )などでもplt.plot()のようにいろいろな関数がこれまでに出てきましたが、これらの関数の括弧の中に代入することができるデータ型は決まっています。
例えば、先程出てきたmatplotlibの関数であるplt.plot()は数字を折れ線グラフとして描画する関数なので、文字列を代入するエラーが発生します。
データ型にはかなり多くの種類がありますが、動作分析やデータ分析でpythonを使用する上では下記のデータ型を使うことが多いので、これらの要素を抑えておく必要があります。
データ型 | 説明 | 例 |
---|---|---|
int | 整数型 | 1 , -5 , 100 |
float | 小数型 | 3.14 , -0.01 |
str | 文字列型 | "abc" , "123" ,”あ”(←注意:数値っぽく見えても文字!) |
object | 混合型(pandasでよく出現) | CSV読み込み時に要注意! |
まずはint型というものになりますが、これは1や-5といった小数点以下を持たない整数のデータ型になります。これはデータの行数や列数(何列目、何行目みたいな感じ)などの整数の値しか持ちえないデータを定義する際に用います(例えば、エクセルの行を説明する際に1.5行目というのはありえない)。
次のfloat型というのは、小数点以下の値まで含む数字です。どの程度の桁数までを記載するかについては、別な設定で定義することができます。
またグラフのタイトル名やラベルや凡例を定義する際には、str型というものを使います。これは基本的には文字列のことを指し、pythonで定義する際には””、もしくは”で該当の文字や数字を囲います。例えば”1”と定義した場合には、たとえ見かけ上1であったとしても文字列として扱うため、足し算や引き算などの計算処理をかけることができなくなります。
最後の型のobject型というのは、いろいろなデータ型が混合して入ったものであり、pandasで最初にcsvを読み込んだ時の状態をイメージしてもらえるとわかりやすいでしょう。
✅ よくある型エラーとその対策
先程のパラグラフでも少し説明がありましたが、関数に対して適切なデータ型を設定しなければエラーが発生します。エラーを起こした場合には大抵の場合にTypeError
○○~という警告文字が出現します。以下に頻発するデータ型の間違いと対策の例を挙げていきます。
🔹 range()
に float
を入れてエラーになる
for i in range(0.0, 10.0):
print(i)
エラーの場合:
TypeError: 'float' object cannot be interpreted as an integer
# int型に変換してから使う
for i in range(int(0.0), int(10.0)):
print(i)
# もしくは numpy を使って float 対応
import numpy as np
for i in np.arange(0.0, 10.0, 0.5):
print(i)
🔹 CSV読み込み後に str
型のまま使ってしまう
df = pd.read_csv("data.csv")
x = df.loc[0, 'X'] # ← '250'(文字列)になっている可能性あり
plt.scatter(x, 100)
エラーの場合:
TypeError: float() argument must be a string or a number, not 'Series'
対策:
x = float(df.loc[0, 'X']) # 明示的に float に変換
🔹 平均や加算ができない(object
型になっている)
df['X'].mean()
エラーまたは意図しない挙動:
TypeError: cannot perform reduce with flexible type
対策:
df['X'] = df['X'].astype(float) # float型に変換してから計算
print(df['X'].mean())
✅ 型確認には ○○.dtypes
を使おう
変数のデータ型を確認するためには、Spyderの変数エクスプローラーを見て確認する方法の他に、○○.dtypeという方法も使うことができます。例えばdfという変数のデータ型を調べたいときには、以下のようなコードを書きます。
print(df.dtypes)
そうするとコマンドプロンプトにはこのように表示されます:
X object
Y object
Z object
例えばこの場合にはオブジェクト型になっているため、計算処理をしたい場合には適宜 astype(float)
や pd.to_numeric()
といった他の変数型に明示的に変更する関数を加える必要があります。
おすすめの型変換(pandas)
pandasでデータを読み込んでいる場合には、以下のようなデータ型を変更する関数を利用することができるため、必要に応じて使っていきましょう。
df['X'] = pd.to_numeric(df['X'], errors='coerce') # 数値変換(失敗したらNaNに)
df['Y'] = df['Y'].astype(float) # 明示的に変換
お問い合わせ
ご質問・応用相談はお気軽に
X(@KTR_Project)まで📩
コメント