ななぶろ

-お役立ち情報を気楽に紹介するブログ-

Pandasによるデータ分析:初心者向け実践ガイド20問

www.amazon.co.jp

Pandasによるデータ分析:初心者向け実践ガイド20問

PandasはPythonにおけるデータ分析の強力なツールであり、表形式データの操作と分析を効率的に行うための豊富な機能を提供します。この記事では、Pandasの基礎から応用までを網羅し、初心者の方でも段階的に学習を進められるように、20個の実践的な練習問題を用意しました。各問題には詳細な解説と解答例が記載されており、ステップバイステップでPandasの使い方を習得できます。

はじめに

Pandasは、Pythonのデータ分析ライブラリとして広く利用されています。NumPyを基盤とし、データの操作、クリーニング、変換、分析などを容易に行えるように設計されています。特に、表形式のデータを扱う際にその威力を発揮し、データサイエンスや機械学習などの分野で不可欠なツールとなっています。

Pandasは、データフレーム(DataFrame)と呼ばれる二次元のラベル付きデータ構造を提供することで、データの整理と操作を効率化します。また、シリーズ(Series)と呼ばれる一次元の配列も提供され、NumPyのndarrayと同様に、数値計算やデータ処理に使用できます。

本記事では、Pandasの基本的な概念から応用的なテクニックまでを網羅し、初心者の方でも無理なく学習を進められるように、実践的な練習問題を通して解説していきます。各問題には詳細な解説と解答例が記載されており、ステップバイステップでPandasの使い方を習得できます。

What is Pandas? Pandas is a powerful Python library for data analysis and manipulation. It provides data structures like Series and DataFrame, which are designed to make working with structured data efficient and intuitive. Pandas builds on top of NumPy and offers a wide range of tools for cleaning, transforming, analyzing, and visualizing data.

Pandasのインストールとインポート

Pandasを使用するには、まずインストールする必要があります。以下のコマンドをターミナルまたはコマンドプロンプトで実行してください。

pip install pandas

インストールが完了したら、PythonスクリプトにPandasをインポートします。

import pandas as pd

pdはPandasのエイリアスとして一般的に使用されます。これにより、コード内でPandasの関数やクラスを簡単に呼び出すことができます。

Installing and Importing Pandas To use Pandas, you first need to install it using pip: pip install pandas. After installation, import the library into your Python script: import pandas as pd. The alias pd is commonly used for brevity.

データ構造:SeriesとDataFrame

Pandasの中心となるデータ構造は、SeriesとDataFrameです。

Series: 一次元の配列のようなデータ構造で、NumPyのndarrayに似ています。インデックス(ラベル)を持つことができます。Seriesは、単一の列を表すのに適しており、数値データ、文字列データ、日付データなど、様々な種類のデータを格納できます。

import pandas as pd

# Seriesの作成例
data = [1, 2, 3, 4, 5]
index = ['a', 'b', 'c', 'd', 'e']
series = pd.Series(data, index=index)
print(series)

DataFrame: 二次元のテーブルのようなデータ構造で、複数のSeriesをまとめたものと考えることができます。各列は異なるデータ型を持つことができます。DataFrameは、表形式のデータを扱うのに適しており、データの整理、分析、可視化など、様々な操作を行うことができます。

import pandas as pd

# DataFrameの作成例
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 28],
        'City': ['New York', 'London', 'Paris']}
df = pd.DataFrame(data)
print(df)

Series and DataFrame Data Structures Series: A one-dimensional labeled array capable of holding any data type (integers, strings, floats, Python objects, etc.). It's essentially a column in a table. DataFrame: A two-dimensional labeled data structure with columns of potentially different types. Think of it as a spreadsheet or SQL table.

練習問題

それでは、Pandasの基礎を習得するための練習問題を始めましょう。

問題1: Seriesの作成

以下のリスト data をもとに、インデックスが ['a', 'b', 'c'] のSeriesを作成してください。

data = [10, 20, 30]

解答:

import pandas as pd

data = [10, 20, 30]
index = ['a', 'b', 'c']
series = pd.Series(data, index=index)
print(series)

Create a Series from a list with custom indices.

問題2: DataFrameの作成

以下の辞書 data をもとに、DataFrameを作成してください。

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df)

Create a DataFrame from a dictionary.

問題3: データの表示

作成したDataFrameの最初の5行を表示してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df.head())  # 最初の5行を表示

Display the first few rows of a DataFrame. The .head() method is used to display the top N rows (default is 5).

問題4: 列の選択

DataFrameから col1 列を選択してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df['col1'])  # col1列を選択

Select a single column from a DataFrame. Use square brackets [] with the column name as the key.

問題5: 行の選択

DataFrameからインデックスが 0 の行を選択してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df.loc[0])  # インデックスが0の行を選択

Select a row by its index label. The .loc[] accessor is used for label-based indexing.

問題6: スライシング

DataFrameから最初の2行をスライスしてください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df[0:2])  # 最初の2行をスライス

Slice a DataFrame to select a range of rows. Use standard Python slicing notation within square brackets.

問題7: 条件抽出

DataFrameにおいて、col1 列の値が 2 より大きい行を選択してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
print(df[df['col1'] > 2])  # col1列の値が2より大きい行を選択

Filter rows based on a condition. Use boolean indexing to select rows that meet the specified criteria.

問題8: 新しい列の追加

DataFrameに col3 という新しい列を追加し、その値を col1col2 の合計として設定してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
df['col3'] = df['col1'] + df['col2']  # 新しい列を追加
print(df)

Add a new column to a DataFrame. Assign the result of an operation (e.g., addition, multiplication) to a new column name.

問題9: 列名の変更

col1 列の名前を new_col1 に変更してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
df.rename(columns={'col1': 'new_col1'}, inplace=True)  # 列名を変更
print(df)

Rename a column in a DataFrame. Use the .rename() method with the columns parameter to specify the mapping of old names to new names. The inplace=True argument modifies the DataFrame directly.

問題10: データの削除

col2 列を削除してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
df.drop('col2', axis=1, inplace=True)  # 列を削除
print(df)

Delete a column from a DataFrame. Use the .drop() method with the axis=1 argument to specify that you are deleting a column. The inplace=True argument modifies the DataFrame directly.

問題11: 欠損値の処理

以下のDataFrameに欠損値(NaN)を追加し、欠損値を 0 で埋めてください。

data = {'col1': [1, 2, None], 'col2': [4, None, 6]}
df = pd.DataFrame(data)

解答:

import pandas as pd
import numpy as np

data = {'col1': [1, 2, np.nan], 'col2': [4, np.nan, 6]}
df = pd.DataFrame(data)
df.fillna(0, inplace=True)  # 欠損値を0で埋める
print(df)

Handle missing values (NaN). Use the .fillna() method to replace NaN values with a specified value (e.g., 0).

問題12: データ型の変換

col1 列のデータ型を float に変換してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
df['col1'] = df['col1'].astype(float)  # データ型を変換
print(df.dtypes)

Convert the data type of a column. Use the .astype() method to change the data type of a column (e.g., from integer to float).

問題13: ソート

col2 列で昇順にDataFrameをソートしてください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
df.sort_values(by='col2', ascending=True, inplace=True)  # col2列で昇順にソート
print(df)

Sort a DataFrame by one or more columns. Use the .sort_values() method with the by parameter to specify the column(s) to sort by and the ascending parameter to control the sorting order (True for ascending, False for descending).

問題14: グループ化

col1 列の値でグループ化し、各グループの col2 列の平均値を計算してください。

解答:

import pandas as pd

data = {'col1': ['A', 'A', 'B', 'B'], 'col2': [4, 5, 6, 7]}
df = pd.DataFrame(data)
print(df.groupby('col1')['col2'].mean())  # col1列でグループ化し、col2列の平均値を計算

Group data by one or more columns and apply an aggregation function. Use the .groupby() method to group rows based on a column's values, then use an aggregation function (e.g., mean(), sum(), count()) to calculate statistics for each group.

問題15: ピボットテーブル

col1 を行、col2 を列とするピボットテーブルを作成し、col3 の値を集計してください。 (今回は col3 は存在しないので、NaN で埋めます。)

解答:

import pandas as pd
import numpy as np

data = {'col1': ['A', 'A', 'B', 'B'], 'col2': ['X', 'Y', 'X', 'Y'], 'col3': [1, 2, 3, 4]}
df = pd.DataFrame(data)
pivot_table = df.pivot_table(index='col1', columns='col2', values='col3')
print(pivot_table)

Create a pivot table to summarize data. Use the .pivot_table() method to reshape the DataFrame, specifying the index column, column names, and value aggregation function.

問題16: CSVファイルの読み込み

sample.csv という名前のCSVファイルを読み込んでください。 (ファイルが存在しない場合は、適当なデータで作成してください。)

解答:

import pandas as pd

df = pd.read_csv('sample.csv')
print(df)

Read data from a CSV file. Use the pd.read_csv() function to read data from a CSV file into a DataFrame.

問題17: CSVファイルへの書き出し

DataFrameを output.csv という名前のCSVファイルに書き出してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
df.to_csv('output.csv', index=False)  # インデックスを書き出さない

Write a DataFrame to a CSV file. Use the .to_csv() method to write the DataFrame to a CSV file. The index=False argument prevents writing the DataFrame's index to the file.

問題18: データの結合

2つのDataFrame df1df2 を、共通の列 col1 をキーとして結合してください。

解答:

import pandas as pd

data1 = {'col1': ['A', 'B', 'C'], 'col2': [1, 2, 3]}
df1 = pd.DataFrame(data1)
data2 = {'col1': ['B', 'C', 'D'], 'col3': [4, 5, 6]}
df2 = pd.DataFrame(data2)

merged_df = pd.merge(df1, df2, on='col1')  # col1をキーとして結合
print(merged_df)

Merge two DataFrames based on a common column. Use the pd.merge() function to combine two DataFrames based on a shared column (the "join key").

問題19: データのマージ

2つのDataFrame df1df2 を、共通の列 col1 をキーとしてマージしてください。 (inner join, left join, right join, outer join のいずれかを選択して試してみてください。)

解答:

import pandas as pd

data1 = {'col1': ['A', 'B', 'C'], 'col2': [1, 2, 3]}
df1 = pd.DataFrame(data1)
data2 = {'col1': ['B', 'C', 'D'], 'col3': [4, 5, 6]}
df2 = pd.DataFrame(data2)

merged_df = pd.merge(df1, df2, on='col1', how='left')  # col1をキーとして左結合
print(merged_df)

Merge two DataFrames using different join types. The how parameter in the pd.merge() function specifies the type of join to perform: 'inner' (intersection), 'left' (all rows from left DataFrame), 'right' (all rows from right DataFrame), or 'outer' (union).

問題20: データの集計

DataFrameの col2 列の値の合計、平均、最大値、最小値を計算してください。

解答:

import pandas as pd

data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)

print('合計:', df['col2'].sum())
print('平均:', df['col2'].mean())
print('最大値:', df['col2'].max())
print('最小値:', df['col2'].min())

Calculate summary statistics for a column. Use the .sum(), .mean(), .max(), and .min() methods to calculate the sum, average, maximum, and minimum values of a column, respectively.

まとめと学習の継続

この記事では、Pandasの基礎を学ぶための練習問題20問を紹介しました。これらの問題を解くことで、SeriesやDataFrameの作成、データの選択・フィルタリング、欠損値処理、データ型の変換、ソート、グループ化など、Pandasの基本的な操作を習得することができます。

Pandasは非常に強力なライブラリであり、この練習問題で学んだ基礎をさらに発展させることで、より複雑なデータ分析を行うことができるようになります。

学習の継続:

これらのリソースを活用して、Pandasの知識を深め、データ分析スキルを向上させてください。頑張ってください!

よくある質問 (FAQ)

Q: Pandasを始めるにあたって、まず何を学ぶべきですか? A: まずはSeriesとDataFrameという2つの基本的なデータ構造を理解し、データの作成、選択、フィルタリングなどの基本的な操作を習得することをお勧めします。この記事の練習問題がそのための良い出発点となります。

Q: 欠損値(NaN)はどのように処理すればよいですか? A: 欠損値は、fillna()メソッドを使用して、特定の値 (0など) で埋めるか、削除することができます。データの性質や分析の目的に応じて適切な方法を選択してください。

Q: Pandasで大規模なデータセットを扱う場合、パフォーマンスを向上させるにはどうすればよいですか? A: 大規模なデータセットを効率的に処理するためには、NumPyを活用する、不要な列を削除する、適切なデータ型を使用するなど、いくつかのテクニックがあります。また、Pandasのバージョンを最新に保つことも重要です。

Q: Pandasでエラーが発生した場合、どのようにデバッグすればよいですか? A: エラーメッセージをよく読み、問題の原因を特定してください。公式ドキュメントやオンラインフォーラムで検索することも有効です。また、簡単な例を作成して再現性を確認し、問題を切り分けることも重要です。

Q: Pandas以外に、データ分析によく使われるPythonライブラリはありますか? A: はい、NumPy (数値計算)、Matplotlib (グラフ描画)、Scikit-learn (機械学習) などがあります。これらのライブラリと連携することで、より高度なデータ分析を行うことができます。

Q: Pandasを学ぶ上で、どのようなプロジェクトに取り組むのが良いですか? A: 興味のある分野のデータセットを見つけて、Pandasを使って分析してみるのがおすすめです。例えば、株価データの分析、顧客データの分析、Webサイトのアクセスログの分析などがあります。

このブログ記事が、あなたのPandas学習の一助となれば幸いです。