Python

PythonのPandasの使い方【データ解析・基礎5つの技】

2020年12月31日

はじめに

AIや機械学習の分野で注目を集めているPython言語。注目される理由の一つに「AIや機械学習に必要なライブラリが豊富にそろっている」ことが挙げられます。

今回は、そんな豊富なライブラリの中から、AIや機械学習の肝であるデータ解析・データ分析のライブラリで有名な pandas をご紹介します。

本記事では pandas を利用したデータを読み込み、集計や分析の基礎を実際のコードを紹介しながら「pandasの基礎」を説明していきます。

 

語句説明

Pandas とは?

Wikipedia では、以下のように記載されています。

pandasは、プログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリである。特に、数表および時系列データを操作するためのデータ構造と演算を提供する。PandasはBSDライセンスのもとで提供されている。

pandas の主要なコードの一部はC言語で書かれており、Python だけでデータ分析を行うより非常に高速に処理を行うことができるようになっています。

データ分析(データサイエンス)は、機械学習の精度に影響する前処理(データの読み込み、クリーニング、欠損値の補完、正規化など)で、最も重要だと言われています。pandas を使うことで前処理が効率的に行えるようになるため、Pythonで AI や機械学習を行うには必須のライブラリとなっています。

 

準備:開発環境と解析用データ

開発環境

今回はWindows上で、VS Code を使った実行環境を使っています。ターミナル(プロンプト)から Python を実行できる環境がある方は、それでも問題ありません。

OS Windows10 Pro [20H2]
エディター・ターミナル Visual Studio Code v1.52.1
Python 3.7.4
numpy 1.19.4
pandas 1.2.0
SANACHAN
SANACHAN
「○○モジュールが無いよ」というエラーが出た場合は、「pip install <module名>」でインストールしましょう。

 

Windows10 20xx で出る numpy のエラー対処

Windows10 20xx のバージョンでは、Runtime エラーが発生します。
エラーとなる機能は、本ページでは使用しませんので以下のように対処します。

SANACHAN
SANACHAN
Windowsの修正がリリースされるまでの暫定対処ですので、元に戻すのを忘れずに!

 

エラーメッセージ

(略) fails to pass a sanity check due to a bug in the windows runtime. See this issue ... (略)

 

コード修正箇所 (Workaround)

 

解析用データ

国税調査結果 - 男女別人口」からデータをダウンロードして加工しています。
必要な方は、加工後のデータを以下からダウンロードください。

  • 文字コードを UTF-8 に変換
  • 近畿地方(大阪、兵庫、京都、奈良、和歌山、滋賀、三重)のみのデータを抜粋
  • 合計人数の列を削除し、男性・女性の人数のみにする
  • 1900年代(c01.csv)と2000年代(c02.csv)のデータに分割

 

本記事では、解析用データと実行するPythonスクリプトを以下のような配置で説明しています。
必要に応じて、適宜読み替えてください。

 ファイルの配置
(任意のディレクトリ)/
|- c01.csv
|- c02.csv
|- prefectures_id.csv
|- (実行するPythonスクリプト)

 

基礎①:データの読み込み

まずは、CSV形式のデータを読み込んでみましょう。
データを読み込んでPythonプログラム上で扱えないと、分析や解析ができません。

スクリプト

以下のようなPythonスクリプトを準備し、データを読み込んでみましょう。

Pythonスクリプトの解説

1行目は、Pythonライブラリの pandas を読み込んでいます。スクリプト内部では、
pd を使ってアクセスできるようにしています。

2行目は、pandas の read_csv() を使用し、CSV 形式のファイルを pandas のデータフレーム型として
変数 c01 へ格納しています。

3行目は、読み込んだ c01 の先頭5行を取得する pandas の head() を使用し、print() で出力しています。

スクリプト実行結果

pandas メソッドの仕様

  • read_csv()
    CSVファイルへのパスを引数で指定し、読み込むことができます
  • head()
    引数がない場合、先頭5行を取得できます
    引数で行数を指定することが可能です

 

基礎②:データの結合(ユニオン/ジョイン)

縦・行方向に結合(ユニオン)

以下のようなPythonスクリプトを用意し、データを縦方向(行方向)に結合してみましょう。

Pythonスクリプトの解説

1~3行目は、先の「データの読み込み」と同じですので省略します。

4行目、pandas の concat() を使ってユニオンを行っています。

5~6行目、head() は先頭の5行を、tail() は末尾の5行を出力します。

スクリプト実行結果

SANACHAN
SANACHAN
year の列を見ると、1900年代の c01.csv と 2000年代の c02.csv が結合されていますね。

pandas メソッドの仕様

  • concat()
    pandas の データフレーム型で定義された変数を指定することで、それらのデータをユニオン(結合)します
  • tail()
    引数がない場合、末尾5行を取得できます
    head() と同様に、引数で行数を指定することが可能です

 

横・列方向に結合(ジョイン)

以下のようなPythonスクリプトを用意し、データを横方向(列方向)に結合してみましょう。

Pythonスクリプトの解説

1~3行目は、先のと同じですので省略します。

4行目、pandas の merge() を使ってジョインを行っています。

5~6行目、新たに読み込んだ prefectures_id.csv の中身と、結合(ジョイン)したデータを表示します。

スクリプト実行結果

prefectures_id.csv は、ID と 都道府県名(近畿圏のみ)が含まれています。

prefectures_id をキーとして結合するように merge() の引数で on='prefectures_id' を指定しました。
c02.csv 内に、prefectures_id が一致するデータが複数あるため、複数行にわたって結合されていますが、
右側に year, man, woman の列が結合されたのが分かると思います。

pandas メソッドの仕様

  • merge()
    pandas の データフレーム型で定義された変数を指定することで、それらのデータをジョイン(結合)します

スポンサーリンク

基礎③:必要なデータ列の作成

CSVファイル内にあるデータを用いて、必要な列を新たに追加してみましょう。

SANACHAN
SANACHAN
このために、CSVファイルから最初に合計人数の列を削除しています。

スクリプト

以下のようなPythonスクリプトを準備し、データ列の追加をしてみましょう。

Pythonスクリプトの解説

1~2行目、4行目は、省略します。

3行目は、データフレーム型の変数をハッシュテーブルとして扱い、列を追加しています。
男性(man)と女性(woman)の合計も、各行の加算を行っていないことがポイントです。

スクリプト実行結果

SANACHAN
SANACHAN
total という列が追加され、男性と女性の合計人数が表示されましたね。

スポンサーリンク

基礎④:データの検算

先ほどの基礎③で、男女の合計を算出しました。正しく計算できていれば男性合計と女性合計が、算出した合計と合致するはずですよね。

スクリプト

以下のようなPythonスクリプトを準備し、データの検算を行ってみましょう。

Pythonスクリプトの解説

1~3行目は、省略します。

4~6行目は、pandas の sum() を使って列の合計を算出しています。

スクリプト実行結果

最初に男性の人口、次に女性の人口を出力しています。
最後は、追加した total 列の合計です。

SANACHAN
SANACHAN
125344554 + 128853466 = 254198020 で、間違ってなさそうですね。

スポンサーリンク

基礎⑤:データの集計

今回のデータのような年ごとに入力したデータだと、集計をして推移をみることに意味があります。

スクリプト

以下のようなPythonスクリプトを準備し、データの集計を行ってみましょう。

Pythonスクリプトの解説

1~3行目、5行目は、省略します。

4行目は、pandas の pivot_table() を使って集計を行っています。
引数の index で行を指定し、columns で列を指定します。
使用する値を values で指定し、aggfunc で重複データが存在した場合の集計方法を指定します。

スクリプト実行結果

SANACHAN
SANACHAN
この数値を見ると、どの府県でも人口が減っていることが分かりますね。

スポンサーリンク

まとめ

いかがでしたでしょうか。

基礎の部分だけ見ても、pandas がいかに強力なライブラリであるかが分かったと思います。

Excel や CSV、JSON などのデータをデータベースのように扱うことができるようになるライブラリ。これから Python を使ったサービスがAIや機械学習の分野で多く使われるため、このライブラリを自由に扱えれば重宝される人材になるでしょう。

以上、「【データ分析基礎5選】PythonのPandasで解析してみる」でした。

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-Python
-, ,