LoginSignup
2
0

More than 1 year has passed since last update.

RailsマンにとってPandasのDataFrame型がモヤモヤする理由

Last updated at Posted at 2021-09-05

PandasのDataFrame型はモヤモヤする

当方、元々Rails歴3年で、最近Kaggleを始めた超初心者なのですが、Railsの経験が活かされる場面もあれば、逆にRailsの経験がバイアスになり混乱する場面もあります。入門してまず躓いたのは、PandasのDataFrame型です。特にdf['name']df.iloc[0]とやらで混乱してしまいました。

RailsとPandas テーブルデータの操作の違い

例えば、次のようなテーブルデータからオブジェクトを作成し、1行目・1列目を取り出す場合のコードの違いを比較します。

id name
1 田中太郎
2 佐藤花子
3 山田一郎

PandasのDataFrame型

data = {
    'id': [1, 2, 3],
    'name': ['田中太郎', '佐藤花子', '山田一郎']
}
users = pd.DataFrame(data)

# 1行目を取り出したいとき
users.iloc[0]

# 1列目を取り出したいとき
users['id']

RailsのActive Record

data = [
    {id: 1, name: '田中太郎'},
    {id: 2: name: '佐藤花子'},
    {id: 3: name: '山田一郎'},
]
users = User.new(data)

# 1行目を取り出したいとき
users[0]

# 1列目を取り出したいとき
users.select('id')

何が違うのか?

PandasもRailsも、テーブルのデータを操作するという点で共通ですが、決定的に違う点があります。それはズバリ、

Pandasは列でデータを区切るが、
Railsは行でデータを区切る

という違いになります。

それぞれのdataの型を見比べればさらに明らかになります。
Pandasでは辞書型になっていますが、Railsでは配列型になっています。

実はPandasがusers['id']と書くのは、Pandasだから(あるいはPythonだから)ではなく、辞書型だから当然のことなのです。

なぜ違うのか?(私見)

どちらもテーブルのデータを操作するという点で共通ですが、なぜPandasでは列でデータを区切り、Railsは行でデータを区切るのでしょうか?
これは公式の見解ではなく、私見になります。
それは単純に、PandasとRailsで用途が違うから だと思います。

Pandasの用途はデータ分析なので、行よりも列を柔軟に扱いたい
→データ分析では、列ごとに何かしらの処理をしたいことが多いです。例えばある列の平均値を算出したり、ある列の欠損値を埋めたりなど。逆に分析対象のデータの行数が増減したり、行ごとに抽出したりするシーンは比較的少ないのだと思います。なので列ごとにデータを区切ったほうが都合が良いです。

Railsの用途はWeb開発なので、列よりも行を柔軟に扱いたい
→一方、Web開発では行ごとに何かしらの処理をしたいことが多いです。where文である条件に合致する行だけを抽出したり、行の新規追加、削除、更新など。逆にテーブルの列が増減したりは比較的少ないと思います。なので行ごとにデータを区切ったほうが都合が良いです。

PandasのDataFrameはスバラシイ

以上のように理解してから、PandasのDataFrame型と仲良くなれた気がします。公式の見解ではありませんが、少しでもPandas習得の助けになれば幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0