これまでのステップでPythonの基礎をしっかり学んできましたね!Step 7では、いよいよPythonをデータ分析の強力なツールとして活用する方法を学びます。その中心となるのがPandasライブラリです。
Pandasは、Pythonでデータ操作や分析を行うための非常に人気のあるライブラリです。表形式のデータ(Excelのシートやデータベースのテーブルのようなデータ)を効率的に扱うためのデータ構造と機能を提供します。これを使えば、データの読み込み、クリーニング、変換、集計などが簡単に行えるようになります。さあ、Pandasの世界へ飛び込みましょう!🚀
1. Pandasのインストール
まず、Pandasを使うためにはインストールが必要です。Pythonのパッケージ管理ツールであるpip
を使って簡単にインストールできます。ターミナル(Windowsの場合はコマンドプロンプト)を開いて、以下のコマンドを実行してください。
pip install pandas
Jupyter Notebookを使っている場合は、ノートブックのセルに!
をつけて実行することもできます。
!pip install pandas
💡 ヒント:
Anacondaディストリビューションを利用している場合は、Pandasは通常、最初からインストールされています。もしインストールされていない場合や、特定のバージョンが必要な場合はconda install pandas
コマンドでインストールできます。
インストールが完了したら、PythonスクリプトやJupyter Notebookでimport pandas as pd
と記述してPandasを読み込むのが一般的です。pd
という別名を使うのが慣習となっています。
import pandas as pd
# インストールされたPandasのバージョンを確認
print(pd.__version__)
2. Pandasの主要なデータ構造
Pandasには主に2つのデータ構造があります。これらを理解することがPandasを使いこなす第一歩です。
2.1. Series (シリーズ)
Seriesは、1次元のラベル付き配列です。イメージとしては、インデックス(ラベル)が付いたリストや、Excelの1列のようなものです。同じデータ型のデータを保持します。
リストからSeriesを作成する例:
import pandas as pd
# リストデータ
data = [10, 20, 30, 40, 50]
# インデックス(ラベル)
labels = ['a', 'b', 'c', 'd', 'e']
# Seriesを作成
s = pd.Series(data, index=labels)
print(s)
出力結果:
a 10
b 20
c 30
d 40
e 50
dtype: int64
インデックスを指定しない場合、0から始まる整数のインデックスが自動的に割り当てられます。
2.2. DataFrame (データフレーム)
DataFrameは、2次元のラベル付きデータ構造で、異なる型の列を持つことができます。ExcelのシートやSQLのテーブルに最も近い概念です。データ分析で最もよく使われるデータ構造です。
辞書からDataFrameを作成する例:
import pandas as pd
# 辞書データ(キーが列名になる)
data = {
'名前': ['田中', '佐藤', '鈴木', '高橋'],
'年齢': [25, 32, 41, 28],
'部署': ['営業', '開発', '人事', '営業']
}
# DataFrameを作成
df = pd.DataFrame(data)
print(df)
出力結果:
名前 年齢 部署
0 田中 25 営業
1 佐藤 32 開発
2 鈴木 41 人事
3 高橋 28 営業
DataFrameは、行と列の両方にインデックス(ラベル)を持ちます。上記の例では、行インデックスは自動的に0から割り当てられています。
3. データの読み込み
データ分析では、外部ファイル(CSV、Excelなど)からデータを読み込むことが頻繁にあります。Pandasはこれらの操作を簡単に行うための関数を提供しています。
特にCSV (Comma-Separated Values) ファイルは、データ交換によく使われる形式です。pd.read_csv()
関数を使ってCSVファイルをDataFrameに読み込むことができます。
例として、data.csv
というファイルがあるとします。
import pandas as pd
# data.csvファイルを読み込む
# ファイルパスは環境に合わせて変更してください
try:
df_csv = pd.read_csv('data.csv')
# 読み込んだデータの最初の5行を表示
print(df_csv.head())
except FileNotFoundError:
print("エラー: data.csv が見つかりません。")
# サンプルデータフレームを作成して続行
data = {'col1': [1, 2, 3], 'col2': ['A', 'B', 'C']}
df_csv = pd.DataFrame(data)
print("\nサンプルデータフレーム:")
print(df_csv)
# Web上のCSVファイルを直接読み込むことも可能
# 例: url = 'https://example.com/data.csv'
# df_web = pd.read_csv(url)
# print(df_web.head())
⚠️ 注意:
read_csv()
には多くのオプションがあります。例えば、区切り文字がカンマでない場合(sep='\t'
など)、ヘッダーがない場合(header=None
)、特定の列だけを読み込む場合(usecols=['列名1', '列名2']
)など、状況に応じて指定できます。詳しくは公式ドキュメントを参照してください。
同様に、Excelファイルを読み込むにはpd.read_excel()
関数を使用します。(別途openpyxl
などのライブラリが必要になる場合があります: pip install openpyxl
)
4. 基本的なデータ操作
DataFrameを読み込んだら、次はその中身を確認し、必要な形に加工していきます。Pandasにはそのための豊富な機能があります。
4.1. データの選択 (行・列)
特定の列を選択するには、列名を指定します。
# DataFrame 'df' が存在すると仮定
# サンプルDataFrame
data = {
'名前': ['田中', '佐藤', '鈴木', '高橋'],
'年齢': [25, 32, 41, 28],
'部署': ['営業', '開発', '人事', '営業']
}
df = pd.DataFrame(data)
# '名前'列を選択 (Seriesが返る)
names = df['名前']
print("名前列:")
print(names)
# 複数の列を選択 (DataFrameが返る)
subset = df[['名前', '部署']]
print("\n名前と部署列:")
print(subset)
特定の行を選択するには、loc
(ラベルベース) や iloc
(整数インデックスベース) を使います。
# loc: ラベル(インデックス名)で選択
# 1行目(インデックスが1)を選択
row_1_loc = df.loc[1]
print("\nloc[1]:")
print(row_1_loc)
# iloc: 整数インデックス(行番号)で選択
# 3行目(0から数えて2番目)を選択
row_2_iloc = df.iloc[2]
print("\niloc[2]:")
print(row_2_iloc)
# 範囲選択も可能
# locは終了ラベルを含む
print("\nloc[0:2]:") # インデックス0, 1, 2を選択
print(df.loc[0:2])
# ilocは終了位置を含まない (Pythonのスライスと同じ)
print("\niloc[0:2]:") # 0行目, 1行目を選択
print(df.iloc[0:2])
# 行と列を同時に選択
# loc[行ラベル, 列ラベル]
print("\nloc[1, '年齢']:")
print(df.loc[1, '年齢']) # 1行目の'年齢'
# iloc[行番号, 列番号]
print("\niloc[2, 0]:")
print(df.iloc[2, 0]) # 2行目の0列目 ('鈴木')
4.2. フィルタリング (条件による抽出)
特定の条件を満たす行だけを抽出することも簡単です。
# 年齢が30歳以上の人を抽出
adults = df[df['年齢'] >= 30]
print("\n年齢が30歳以上の人:")
print(adults)
# 部署が'営業'の人を抽出
sales_dept = df[df['部署'] == '営業']
print("\n営業部の人:")
print(sales_dept)
# 複数の条件 (AND: & , OR: | )
# 年齢が30歳以上 かつ 部署が営業
sales_adults = df[(df['年齢'] >= 30) & (df['部署'] == '営業')]
print("\n30歳以上の営業部の人:")
print(sales_adults)
💡 ヒント:
複数の条件を組み合わせる際は、各条件を()
で囲むことを忘れないでください。
4.3. 欠損値の扱い
実際のデータには、値が入っていない「欠損値」(Pandasでは通常 NaN
: Not a Number で表現される)が含まれることがよくあります。
import numpy as np # NaNを使うためにNumPyもインポート
# 欠損値を含むサンプルDataFrame
data_missing = {
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8],
'C': [9, 10, 11, 12]
}
df_missing = pd.DataFrame(data_missing)
print("\n欠損値を含むデータ:")
print(df_missing)
# 欠損値の確認 (Trueが欠損値)
print("\n欠損値の確認 (isnull):")
print(df_missing.isnull())
# 欠損値を含む行を削除
df_dropped_rows = df_missing.dropna()
print("\n欠損値を含む行を削除 (dropna):")
print(df_dropped_rows)
# 欠損値を含む列を削除
df_dropped_cols = df_missing.dropna(axis=1)
print("\n欠損値を含む列を削除 (dropna axis=1):")
print(df_dropped_cols)
# 欠損値を特定の値で埋める (例: 0で埋める)
df_filled_zero = df_missing.fillna(0)
print("\n欠損値を0で埋める (fillna):")
print(df_filled_zero)
# 欠損値を列の平均値で埋める
# まずは列'A'の平均値を計算
mean_A = df_missing['A'].mean()
# 列'A'の欠損値を平均値で埋める
df_missing['A'] = df_missing['A'].fillna(mean_A)
print("\n列Aの欠損値を平均値で埋める:")
print(df_missing)
欠損値をどのように扱うか(削除するか、何らかの値で補完するか)は、データや分析の目的に応じて慎重に判断する必要があります。
4.4. 基本的な集計
Pandasを使えば、データの基本的な統計量を簡単に計算できます。
# DataFrame 'df' を再度使用
print("\n元のデータ:")
print(df)
# 各列の基本統計量 (数値列のみ)
print("\n基本統計量 (describe):")
print(df.describe())
# 特定の列の平均値
mean_age = df['年齢'].mean()
print(f"\n平均年齢: {mean_age}")
# 特定の列の合計値
total_age = df['年齢'].sum()
print(f"年齢合計: {total_age}")
# 特定の列の最大値
max_age = df['年齢'].max()
print(f"最高年齢: {max_age}")
# グループごとの集計 (例: 部署ごとの平均年齢)
mean_age_by_dept = df.groupby('部署')['年齢'].mean()
print("\n部署ごとの平均年齢 (groupby):")
print(mean_age_by_dept)
5. まとめ
今回は、Pandasを使ったデータ分析の入門として、基本的な概念と操作方法を学びました。
- Pandasのインストール方法
- 主要なデータ構造: Series と DataFrame
- CSVファイルなどからのデータ読み込み (
read_csv
) - データの選択 (列選択,
loc
,iloc
) - 条件によるフィルタリング
- 欠損値の扱い (
isnull
,dropna
,fillna
) - 基本的な集計 (
describe
,mean
,sum
,max
,groupby
)
Pandasには、ここで紹介した以外にも非常に多くの強力な機能があります。データの結合、変形、時系列データの扱いなど、さらに高度な分析が可能です。
次のステップでは、同じくデータ分析でよく使われるMatplotlibライブラリを使って、データを視覚化する方法を学びます。📊 グラフにすることで、データの傾向やパターンがより明確になりますよ!
身の回りの簡単なデータ(例えば、毎日の勉強時間や読書記録など)をCSVファイルに記録し、Pandasで読み込んで平均値や合計値を計算してみましょう!
6. 参考情報
より詳しく学びたい方は、以下の公式ドキュメントを参照することをお勧めします。
- Pandas 公式ドキュメント: https://pandas.pydata.org/docs/
- 10 Minutes to pandas (Pandas入門): https://pandas.pydata.org/docs/user_guide/10min.html
- pandas.read_csv ドキュメント: https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
- Indexing and selecting data (loc/ilocなど): https://pandas.pydata.org/docs/user_guide/indexing.html
- Working with missing data: https://pandas.pydata.org/docs/user_guide/missing_data.html
本ブログ記事で使用しているCSSフレームワーク:
- Bulma: https://bulma.io/ (Documentation)
コメント