【python】pandas使いました

こんにちは。 梅雨も明け、暑い日が続きますね・・・ 晴れていることは嬉しいですが、気軽に外を歩けないのが辛いです。

相変わらずドラムの練習もしているのですが、車に荷物を乗せスタジオまでに持ち運ぶ頃には汗だくで満身創痍です。

とはいえ、好きなことですので暑さに無理しない程度に?楽しんでいこうと思います!

はじめに

急に変わってお仕事の話ですが、昨年からAIに関する業務に携わっていて、最近ではオープンデータを活用して予測モデルを作っています(業務秘密もあるので、超ざっくりしてます笑)。

業務に携わる中で、タイトルの"pandas"を活躍しているわけですが、pandasの基礎のない私は闇雲にググりながらなんとか・・・!動作させていました。

作業が一段落したので、復習も兼ねて今回はこのpandasについて基本的なことをまとめてみます。

pandasとは

概要

Package overview — pandas 1.3.0 documentation

pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with “relational” or “labeled” data both easy and intuitive.

上記はPandasの公式から引用しました。

ざっくり翻訳すると、リレーショナル、ラベルデータなどのデータ構造に対してのデータ分析を可能とするpythonパッケージであるとのことです。

"リレーショナル"、"ラベルデータ"についての詳細は割愛しますが、どちらも共通して列、行で構成される2次元の表データと考えることができるかと思います。

f:id:avicenxz:20210722105109p:plain

pandasでは、「DataFrame」という2次元のデータを格納するオブジェクトを用いて、表形式のデータに対していろいろな処理を施すことができます。

ちょいと話がそれますが、AIで何か解析を行いたい!となった場合、いきなりAIにデータを読み込ませるのではなく、AIに読み込ませることができる形に加工してあげる※必要があります。

厳密にいうと、「AIなどのプログラムにおいて、学習用のメソッドの引数に相応しい形式に変換する必要がある」と言った方が正しいのかな?と思ってますが、そんな時に、このpandasが大活躍するわけですね。

今後も、私はAIについてもっと触れていきたいと思ってますので、このpandasとは長い付き合いになりそうです。

DataFrame, Seriesについて

概要

"DataFrame"という2次元のデータを格納するオブジェクト、"Series"は、1次元のデータを格納するオブジェクトです。

csvexcel形式などのデータをDataFrame形式として読み込むことで、任意の行列のデータを抽出したり、列ラベルの情報を取得したり、新しい列・行を追加したり・・・といろんなことができます。

その、いろいろな操作を覚える前に、まずはDataFrame, Seriesの構成について押さえておく必要があります。

構造

以下は、DataDFrame, Seriesの構成をまとめたものになります。

f:id:avicenxz:20210722105549p:plain

名称 意味
columns 列名(列ラベル、ヘッダー)
index 行名(行ラベル)
values 実際のデータの値

DataFrameのメソッドは、このcoumnsやindexを指定した操作があるのでこれらの用語はしっかりと抑えておきましょう(自分に言ってます笑)。

また、seriesは1次元のデータなわけですが複数集まることで、DataFrame(2次元)になるという関係も覚えておくと良いと思います。

コード

今回は、csvファイルDataFrameに変換する方法を記述します。

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
#           age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

超ざっくり解説ですが、 index_colは、indexとなる列を指定します(上記のコードでは、"name"列を指定)。

また、上記では、"name", ""age", "state", "point"が自動で行ラベルに指定されていますが、"header=None"という引数を追加すると これらは一つのデータ(values)になります。
→代わりにcolumnsには、0, 1, 2・・・と連番で付与される

参考

pandasのAPIリファレンス(read_csv)

終わりに

ここまで見てくださりありがとうございました! 次回は、DataFrameで実際に行った加工方法についてまとめてみようと思います。