新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

pandas を使用した Python でのデータ分析

このチュートリアルは 2020 Call for Code Global Challenge の一部です。

Python の概要

Python は開発者とコンピューター・サイエンスの学位を持っている人だけが使うものと思われているかもしれませんが、実際には、コーディングの経験がわずかしかない入門者にも最適なコンピューティング言語です。それは、Python は無料のオープンソースであり、あらゆるプラットフォーム上で動作するからです。Python パッケージには優れたドキュメントが含まれていて、入門コースを受講すると、しっかりとした学習の基盤を築くことができます。

Python は汎用の高級プログラミング言語であり、データを処理するためだけに使用されるわけではありません。例えば、デスクトップ GUI アプリケーション、Web サイト、Web アプリケーションにも利用できます。ただし、このチュートリアルではデータに重点を置き、Python を使用してデータを処理する方法を説明します。

非構造化データと構造化データ

大きく分けると、データには非構造化データと構造化データがあります。非構造化データとは、データ型が一貫していないフリーフォームの情報を指します。医師の手書きのメモやブログから収集された映画のレビューは非構造化データの例です。一方、構造化データは、体系化された形式で使用できる情報であり、簡単に読み取ることができます。構造化データの例としては、変数が列でレコードが行のテーブルや、NoSQL データベース内の Key-Value ペアが挙げられます。

pandas の紹介

pandas は、高パフォーマンスのデータ処理および分析を可能にする、オープンソースの Python ライブラリーです。Python と pandas を組み合わせると、データの出所を問わずに標準的な 5 つのステップでデータを処理して分析することができます。具体的には、読み込み、準備、処理、モデル化、分析の 5 つのステップです。

pandas を使用してデータを処理するには、さまざまな方法があります。以下に、pandas を使用して行える処理の数例を挙げます。

  • 欠損値を除去または置換してデータをクリーニングする
  • データ形式を変換する
  • 行を並び替える
  • 行と列を削除または追加する
  • 複数の DataFrame をマージまたは結合する
  • ピボット処理または形状変換によってデータを集約する
  • 視覚化を作成する

上記のリストは完全と言うにはほど遠いものがあります。pandas を使用して行える他のさまざまな処理については、pandas のドキュメントを参照してください。

このチュートリアルでは、ロンドンの行政区に関する情報を含む構造化データを使用して、pandas のとりわけ興味深い機能をいくつか紹介します。チュートリアルで使用しているデータは、data.gov.uk からダウンロードできます。

Jupyter Notebook の紹介

テキスト・ファイル内にコードを記述してから、そのコードをターミナル内で Python コマンドを使って実行するのではなく、データ分析のプロセス全体を 1 か所で行うことができます。Jupyter Notebook を使用すれば、どの Web ブラウザーでも 1 つのウィンドウ内でコード、出力、テーブル、グラフのすべてを編集し、表示することができます。名前が示唆するように、これはすべてのアイデアとデータ探索を 1 か所に保持するための Notebook です。このチュートリアルでは、Notebook を実行するために IBM Watson Studio を利用します。そのため、チュートリアルに従うには IBM Cloud アカウント (無料で登録できます) が必要です。以下の手順で、アカウントを登録して IBM Cloud の使用を開始する方法を説明しています。Notebook が稼動中になったら、Notebook を使用して手順に従うことができます。

前提条件

このチュートリアルに取り組むには、次のものが必要です。

手順

セットアップ

  1. IBM Cloud アカウントを登録して (まだ登録していない場合)、IBM Cloud にログインします。

  2. 「Resources (リソース)」ページの上部にある「Create Resource (リソースを作成)」をクリックします。左上にあるハンバーガー・メニューにリソースが表示されます。

    リソースを作成するダッシュボードのスクリーンショット

  3. Watson Studio」を検索して、そのタイルをクリックします。

    Watson Studio タイルを示すスクリーンショット

  4. 「Lite (ライト)」プランを選択し、「Create (作成)」をクリックします。

  5. 「Resources (リソース)」リストに戻り、「Watson Studio」サービスをクリックしてから、「Get Started (開始)」をクリックします。

    Watson Studio を起動する画面のスクリーンショット

    Watson Studio がアクティブになります。

  6. Create a project (プロジェクトを作成)」または「New project (新しいプロジェクト)」をクリックします。

  7. Create an empty project (空のプロジェクトを作成)」を選択します。
  8. プロジェクトに名前を付けます。
  9. Object Storage サービスの既存のインスタンスを選択するか、新しいインスタンスを作成します。これを使用して Notebook とデータを保管します。注: プロジェクトのページが再表示されたら、更新ボタンをクリックしてページを更新してください。
  10. Create (作成)」をクリックします。

Notebook を読み込んで実行する

  1. Add to project (プロジェクトに追加)」をクリックし、「Notebook」をクリックして新しい Notebook を追加します。

    アセットのタイプを選択するダッシュボードのスクリーンショット

  2. Notebook をダウンロードします。

  3. From File (ファイルから)」をクリックします。
  4. ダウンロードしたノードブックを選択します。
  5. デフォルトのランタイムを選択します。
  6. Create Notebook (Notebook を作成)」をクリックします。Notebook が読み込まれます。
  7. Notebook を実行します。開いた状態の Notebook で、「Run (実行)」をクリックしてセルを 1 つずつ実行します。

Notebook の概要

以下に、このチュートリアルで取り上げる、pandas 内で使用できる機能のいくつかをリストアップします。

  • データ探索 (データの読み込み、Series、DataFrame)
  • データ変換 (データのクリーニング、データの選択、データのマージ、データのグループ化)
  • データ視覚化

このチュートリアルに関連付けられている Notebook に、pandas の詳細な機能が表示されます。

データ探索

データを読み込む

データの形式が一貫していて、数値、テキスト、または日付を含む複数のレコードがある限り、通常は panas を使用してどのデータを読み取ることができます。例えば、Excel のテーブルから保存したコンマ区切りテキスト・ファイルを Notebook に読み込むには、次のコマンドを使用します。

import pandas as pd
df = pd.read_csv('data.csv')

HTML、JSON、Apache Parquet などのその他の形式のデータ・ファイルも同様の方法で読み込むことができます。

Series と DataFrame

Series とは、任意の型 (整数、文字列、浮動小数点数、Python オブジェクトなど) のデータを含む、1 次元のラベル付き配列のことです。

s = pd.Series([1, 3, 5, np.nan, 6, 8])
s

DataFrame は、2 次元のデータ構造です。データは行と列からなり、さまざまな方法で作成できます。例えば、ファイルを読み込んだり、NumPy 配列やインデックスとしての日付を使用したりすることができます。NumPy は多次元配列と行列を処理するための多数の数学関数を集めた Python ライブラリーです。

以下のサンプル・コードは、日付をインデックスとして使用した、乱数の値と列 A、B、C、D からなる 6×4 配列の DataFrame df1 を示しています。

dates = pd.date_range('20200101', periods=6)
numbers = np.random.randn(6, 4)
df1 = pd.DataFrame(numbers, index=dates, columns=['A', 'B', 'C', 'D'])
df1

上記のコードを実行すると、以下の図に示すような出力が生成されます。ノードブックに、DataFrame を作成する他のいくつかの方法が示されています。

DataFrame の出力を示す図

データを選択する

データを選択するには、.loc[] を使用してラベル付きの 1 つの行または行と列のグループにアクセスします (この方法は、該当するインデックスに設定されている列にのみ有効です)。または、.iloc[] を使用して位置を基準にデータを選択します。

boroughs = df.copy()
boroughs = boroughs.set_index(['Code'])
boroughs.loc['E09000001', 'Inland_Area_(Hectares)']

loc

boroughs.iloc[0]

iloc

boroughs.iloc[:,1]

iloc

特定の条件に基づいて行を選択するには、ブール値のインデックスを使用します。この方法では、行と列あるいはインデックスの位置ではなく、DataFrame 内の実際の日付の値を使用します。演算子 &|== を使用して、さまざまな列を結合することができます。

データ変換

データをクリーニングする

データを探索する際は、分析、視覚化、またはモデル化に必要な形式にするために、常にデータの変換が必要となります。学習するのに最も効果的な方法は、データセットを見つけて、そのデータで質問に答える努力をすることです。データをクリーニングするときは、以下の点を確認してください。

  • データが整然としているか (各変数が 1 つの列を形成し、各観測値が 1 つの行を形成し、各タイプの観測ユニットがテーブルを形成しているなど)
  • すべての列が正しいデータ形式になっているか
  • 欠損値があるか
  • 非現実的な外れ値があるか

以下のコードに、pandas を使用して列を追加する方法と、不要であると考えられる列をデータセットから破棄する方法を示します。

boroughs['new'] = 1
boroughs.head()

DataFrame の追加を示すスクリーンショット

boroughs = boroughs.drop(columns='new')
boroughs.head()

DataFrame の破棄を示すスクリーンショット

データをマージする

pandas では、複数の方法でデータを結合またはマージできます。例については、ドキュメントを参照してください。この Notebook ではデータをマージする方法を調べるために、2 つの新しい DataFrame を作成します。次に、append() を使用して、作成した 2 つの DataFrame を結合します。

data = {'city':       ['London','Manchester','Birmingham','Leeds','Glasgow'],
        'population': [9787426,  2553379,     2440986,    1777934,1209143],
        'area':       [1737.9,   630.3,       598.9,      487.8,  368.5 ]}
cities = pd.DataFrame(data)

data2 = {'city':       ['Liverpool','Southampton'],
        'population': [864122,  855569],
        'area':       [199.6,   192.0]}
cities2 = pd.DataFrame(data2)

cities = cities.append(cities2)
cities

DataFrame のマージを示すスクリーンショット

データをグループ化する

DataFrame に含まれるクラスの値を計算するには、データをグループ化するのが簡単な方法となります。

boroughs.groupby(['Inner/Outer']).mean()

グループ化を示すスクリーンショット

複数のカテゴリー変数がある場合は、ネストされたインデックスを作成できます。

boroughs.groupby(['Inner/Outer','Political control']).sum().head(8)

ネストされたグループ化を示すスクリーンショット

データ視覚化

pandas 内の視覚化では、Matplotlib ライブラリーを使用します。このグラフ作成ライブラリーは、オブジェクト指向の API を使用してグラフをアプリケーション内に埋め込みます。使用できるグラフの例には、線グラグ、ヒストグラム、散布図、画像グラフ、3D グラフがあります。このチュートリアルでは、matplotlib を MATLAB のように動作させるコマンド風の関数を集めた matplotlib.pyplot を使用します。

以下の例に、ヒストグラムによる雇用率の視覚化を示します。ビンの数を変更することで、ヒストグラム上に目的の出力を表示できます。

%matplotlib inline

import matplotlib.pyplot as plt

boroughs = boroughs.reset_index()

boroughs['Employment_rate_(%)_(2015)'].plot.hist(bins=10);

視覚化を示す図

まとめ

このチュートリアルでは、IBM Cloud、Watson Studio、Jupyter Notebook をインストールする手順を説明しました。また、皆さんが自分で分析を実行して試せるよう、pandas と Notebook を使用してデータを分析する方法を大まかに説明しました。