Pandas

Pythonとpandasの組み合わせが凄い!データ解析のための完全マスターガイド

はじめに

本記事は、Pythonとpandasを使って効率的なデータ解析を行いたい方々に向けて、基礎から応用まで幅広く解説します。特にデータ解析初心者や、Pythonをこれから学びたい方にとって有益な情報を提供できればと考えています。

Pythonとpandasの組み合わせの重要性

Pythonは多機能なプログラム言語であり、その上に多数のライブラリが存在します。pandasはその中でもデータ解析に特化したライブラリであり、この組み合わせは非常に強力です。データの前処理から分析、可視化まで一貫して行えるため、分析作業が格段に効率的になります。

Pythonとpandasとは?

Python_logo

Pythonとは

Pythonは、1991年に登場した高レベルなプログラミング言語です。以下がPythonの主な特徴です。

  • コードが非常に読みやすい
  • ライブラリが豊富で多機能
  • コミュニティが活発
  • クロスプラットフォーム対応

ライブラリが豊富なことも特徴であり、主要なライブラリとして下記が挙げられます。

用途ライブラリ名主な特性
データ分析Pandasデータフレーム操作、CSV/Excelの読み書きが得意
NumPy数値計算、配列操作
SciPy科学計算、線形代数、統計分析
機械学習scikit-learn機械学習のためのアルゴリズムが豊富
TensorFlowニューラルネットワーク、深層学習
PyTorchニューラルネットワーク、深層学習
Web開発Django高機能なWebフレームワーク
Flaskシンプルで軽量なWebフレームワーク
FastAPI高速で現代的なWebフレームワーク
グラフ作成Matplotlib2Dグラフ作成が得意
Seaborn美しいグラフ作成、Matplotlibの拡張
Plotlyインタラクティブなグラフ作成
自然言語処理NLTK自然言語処理のための多くのツールとテキストデータ
spaCy高速な自然言語処理
Gensimテキストマイニング、トピックモデリング
ネットワーク・通信RequestsHTTPリクエスト送信
ScrapyWebスクレイピング
WebSocketWebSocketプロトコルでの通信

Pythonについて詳しくは下記のページでも解説しております。

Pythonについて詳しく

Pandas

pandasとは

pandasはPythonのデータ解析ライブラリで、以下のような特徴があります。

  • 表形式のデータ操作が得意
  • 様々なデータソースに対応(CSV, Excel, SQLなど)
  • データのクリーニングや変換、集計が容易

Pythonとpandasの組み合わせの強力さ

この二つが合わさることで、さまざまなデータ解析作業が格段に効率化されます。具体的な利点としては以下のようなものがあります。

  • 大量のデータも素早く処理
  • コードが簡潔で読みやすいため、再現性とメンテナンス性が高い
  • 他のデータ解析関連のライブラリ(例:matplotlib, seaborn, scikit-learn)との連携が容易
数字の羅列

基本的なデータ操作

データの読み込み

データソースによって読み込み方法が少々異なります。

データソース読み込み方法
CSVpd.read_csv(‘file.csv’)
Excelpd.read_excel(‘file.xlsx’)
SQLpd.read_sql_query(‘query’, connection)

例えばCSVファイルを読み込んで、先頭の5行を表示するコードは下記になります。とてもシンプルに書けることが分かります。

import pandas as pd

# CSVファイルの読み込み
df = pd.read_csv("sample.csv")

# 先頭5行を表示
print(df.head())

データの概観

データの概観を得るための関数がいくつか用意されています。

  • df.head():最初の5行を表示
  • df.describe():数値データの統計量を表示
  • df.info():各カラムのデータ型や欠損値を確認

データのフィルタリングと整形

データの抽出や整形もpandasで容易です。

  • df.query(‘条件式’):条件式に合ったデータを抽出
  • df.drop(‘カラム名’, axis=1):指定したカラムを削除
  • df.rename(columns={‘old’: ‘new’}):カラム名の変更

以下のようなコードでは’Age’列が25より大きい行をフィルタリングしています。

import pandas as pd

# サンプルデータ作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [24, 27, 22, 32],
    'Occupation': ['Engineer', 'Doctor', 'Artist', 'Lawyer']
}

df = pd.DataFrame(data)

# Ageが25より大きいデータをフィルタリング
result = df.query('Age > 25')
print("Age > 25:\n", result)

下記のように複数条件でのフィルタリングも可能です。
この例では、’Age’列が25より大きく、かつ’Occupation’列が’Doctor’である行をフィルタリングしています。

# Ageが25より大きく、Occupationが'Doctor'であるデータをフィルタリング
result = df.query('Age > 25 and Occupation == "Doctor"')
print("Age > 25 and Occupation == 'Doctor':\n", result)

統計量の計算

基本的な統計量は簡単に計算できます。例えば、以下のようなコードで平均、中央値、標準偏差などを計算できます。

# 平均値を計算
mean = df.mean()

# 中央値を計算
median = df.median()

# 分散を計算
variance = df.var()

print(f"平均値:\n{mean}\n")
print(f"中央値:\n{median}\n")
print(f"分散:\n{variance}\n")

応用的なデータ操作

データの結合

mergeやjoinを使用すると、異なるデータフレームの結合が可能です。

pd.merge()関数は、特定のキーに基づいて2つのDataFrameを結合します。この例では、ID列をキーとしてdf1とdf2を結合しています。

import pandas as pd

# サンプルデータ作成
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [2, 3, 4], 'Age': [27, 22, 32]})

# 'ID'列をキーとして結合
merged_df = pd.merge(df1, df2, on='ID')
print(f"Merged DataFrame with 'ID' as key:\n{merged_df}")

pd.join()関数は、インデックス(index)に基づいて2つのDataFrameを結合します。

# サンプルデータ作成
df1 = pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie']}, index=[1, 2, 3])
df2 = pd.DataFrame({'Age': [27, 22, 32]}, index=[2, 3, 4])

# インデックスを基に結合
joined_df = df1.join(df2)
print(f"Joined DataFrame based on index:\n{joined_df}")

データのピボット

pivot_tableを用いると、データの集計や可視化が容易になります。非常に強力な機能のためデータ分析で頻繁に用いられます。
この例では、いくつかの人々が購入した商品とその価格、購入した量を表しています。

import pandas as pd

# サンプルデータ
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
    'Item': ['Apple', 'Apple', 'Orange', 'Orange', 'Banana', 'Banana'],
    'Quantity': [1, 2, 2, 3, 1, 2],
    'Price': [100, 90, 80, 70, 110, 85]
}

df = pd.DataFrame(data)

そしてデータフレームを使って、pivot_tableを作成します。

# NameとItemごとにQuantityの合計を計算
pivot_df = pd.pivot_table(df, values='Quantity', index=['Name'], columns=['Item'], aggfunc='sum', fill_value=0)
print(f"Pivot table:\n{pivot_df}")

このコードは、Nameをインデックス、Itemをカラムとして、Quantityを集計(合計)します。fill_value=0は、該当するデータがない場合には0を埋めるという意味です。

Item   Apple  Banana  Orange
Name                        
Alice      1       0       3
Bob        2       1       0
Charlie    0       2       2

このように、pivot_tableを使用すると、複数のカテゴリーにわたってデータを簡単に集計できます。aggfuncには他の関数(例:’mean’, ‘min’, ‘max’)も指定可能です。

データビジュアライゼーション

基本的なグラフの作成

pandasはmatplotlibを使ってグラフも簡単に作成することができます。以下は最も基本的なグラフの一つである折れ線グラフの作成例になります。

import matplotlib.pyplot as plt

# データ
x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 4, 9, 16, 25]

# グラフの描画
plt.plot(x, y)

# タイトルとラベル
plt.title("Line Graph Example")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")

# 表示
plt.show()
【PR】 bgt?aid=230831547368&wid=002&eno=01&mid=s00000020975001011000&mc=1 0

頻繁に利用される関数の一覧

関数名機能
pd.read_csv()CSVファイルを読み込み、DataFrameを生成する。
pd.read_excel()Excelファイルを読み込み、DataFrameを生成する。
pd.read_sql()SQLクエリまたはデータベーステーブルを読み込み、DataFrameを生成する。
df.head()DataFrameの先頭n行を返す。デフォルトは5行。
df.tail()DataFrameの末尾n行を返す。デフォルトは5行。
df.describe()数値型の列に対して、基本的な統計量(平均、中央値など)を計算する。
df.mean()列または行の平均値を計算する。
df.median()列または行の中央値を計算する。
df.var()列または行の分散を計算する。
df.std()列または行の標準偏差を計算する。
df.sum()列または行の合計値を計算する。
df.fillna()欠損値(NaN)を指定した値や方法で埋める。
df.dropna()欠損値(NaN)を含む行または列を削除する。
df.sort_values()指定した列の値に基づいてDataFrameをソートする。
df.filter()指定した条件に基づいて列または行をフィルタリングする。
df.groupby()一つ以上の列の値に基づいてデータをグループ化する。
df.apply()列または行に対して任意の関数を適用する。
df.merge()一つまたは複数のキーを基にして、二つのDataFrameを結合する。
df.join()インデックスに基づいて、二つ以上のDataFrameを結合する。
df.pivot_table()ピボットテーブルを生成する。
df.to_csv()DataFrameをCSVファイルとして保存する。
df.to_excel()DataFrameをExcelファイルとして保存する。
df.to_sql()DataFrameをSQLデータベースに書き込む。

参考文献