Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第8回】Pandasによる欠損値処理、データの連結、統計値の算出、データ型の変換

はじめに

プログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリです。特に、数表および時系列データを操作するためのデータ構造と演算を提供しています。DataFrameなどの独自の構造が用いられています。機械学習において前処理を効率よく行うことができるライブラリとなっています。

機能として、例えば以下のものがあります。

  • 1次元、2次元のデータ構造
  • データの抽出
  • 欠損値処理

前記事では、Pandasにおけるデータ抽出、並び替え、挿入、時系列データの生成について解説しました。

本記事では、Pandasによる欠損値の有無の判定、欠損値処理、データの連結、統計値の算出、データ型の変換について解説していきます。

SAMURAI TERAKOYA

欠損値の有無の判定(isnull()、isna()、isnull.all()、isnull.any()、isnull().sum()、count())

今回使用する欠損値のあるcsv形式のデータは以下のリポジトリに保管したるので、必要であればダウンロードしてください。

GitHub - tatsuya-fukuoka/Pandas_SampleData_NanData: 欠損値があるcsv形式の気温データを保管

 

それでは、早速欠損値の有無の判定をしていきます。

まずは、sample_data_nanを読み込んでデータの中身を確認します。中身を見るとNanがありますね。欠損値処理ではこのデータを用いて説明します。

Input:

Output:

 

最初は、isnull()メソッドで欠損値かどうかの判定を行います。以下の例のようにdf.isnull()とすることで、データに欠損値があるか(NaNであるか)を確認できます。NaNであれば、Trueが出力されます。

Input:

Output:

 

df.isna()でも上記と同様の結果が得られます。

Input:

Output:

 

列ごとにすべての要素が欠損値であるか判定するには、isunull.all()を用います。df.isunull.all()とすることで、列ごとにすべての要素が欠損値であるか判定し、すべてNaNであればTrue、すべてNaNでなければFalseとなります。

Input:

Output:

 

列ごとに欠損値をひとつでも含むか判定するには、isnull.any()を用います。df.isnull.any()とすることで、列ごとに欠損値をひとつでも含むか判定し、一つでもNaNがあればTrue、NaNがなければFalseとなります。

Input:

Output:

 

列ごとの欠損値の個数を計算するには、isnull().sum()を用います。df.isnull().sum()とすることで列ごとの欠損値の個数を計算します。

Input:

Output:

 

列ごとに欠損値でない要素の個数をカウントするには、count()を用います。df.count()とすることで、列ごとに欠損値でない要素の個数をカウントします。

Input:

Output:

 

欠損値処理(dropna()、fillna())

欠損値のある行を削除するには、dropna()を用います。df.dropna()で欠損値のある行を削除できます。

Input:

Output:

 

欠損値ある場合、欠損部分に0を代入するには、fillna(0)を用います。

Input:

Output:

 

さらに、欠損値ある場合、欠損部分に各列の平均値を代入するには、fillna()を用いて以下の例のようにdf.fillna(df.mean())とします。ここでは平均値を代入するためにmean()を使用しましたが、中央値を代入したい場合にはdf.median()、最頻値を代入する場合にはdf.mode()を使用します。

Input:

Output:

 

データの連結(pd.concat())

次は、データの連結について説明します。データ分析をしていると、DataFrameとDataFrameを連結したいときがあり、その際によく使用します。

以下の例では、2022/1/1から2022/1/31の日付データをインデックスに持つ2つのDataFrameを生成します。そして、pd.concat()を用いて、データを連結することができます。ここでaxis=1とすることで列方向で連結することができます。

出力結果を見ると、2022/1/1から2022/1/31の日付データをインデックスで、データ1のカラムの右側にデータ2のカラムがある状態になっていることがわかると思います。

Input:

Output:

 

一方、行方向で増やすには、axis=は省略してpd.concat()をそのまま用います。以下の例では、2022/1/1から2022/1/31の日付データをインデックスに持つdf1と2022/2/1から2022/2/28の日付データをインデックスに持つdf2をpd.concat()を用いて行方向に増える形で連結することができます。

Input:

Output:

 

統計値の算出(max()、min()、mean()、median()、mode()、std()、describe()、corr())

さて、続いては統計値の算出について説明します。データ処理をしていると最大値や平均値といった統計値を算出したいことが多いと思いますが、その際に役立つメソッドとなっています。

以下の例では、先ほど用いた022/1/1から2022/1/31の日付データをインデックスに持つデータを生成し、df['データ']でデータのカラム名を持つデータ配列を抽出し、max()を用いて最大値を、min()を用いて最小値を、mean()を用いて平均値を、mode()を用いて最頻値をstd()を用いて標準偏差を算出することができます。std()においては、そのまま用いると標本標準偏差、引数にddof=0を与えると母集団の標準偏差を算出することができます。

Input:

Output:

 

上記では、個別に統計値を算出していました、まとめて算出することもできます。まとめて統計値を算出するには、describe()を用います。

describe()を用いて出力された値のcountはデータ数、meanは平均値、stdは標本標準偏差、minは最小値、25%は第一四分位数、50%は中央値、75%は第三四分位数、maxは最大値を表しています。

Input:

Output:

 

次は、カラム間のデータの相関係数を算出する方法について説明します。

使用したデータはこちら:temperature_data_20190101-20211231.csv

カラム間のデータの相関係数を算出するには、corr()を用います。以下の例では、corr()を用いて平均気温、最高気温、最低気温、降水量のデータ間の相関係数を算出しています。

Input:

Output:

 

データ型の変換

最後に、DataFrame型のデータを他のデータがに変換する方法を説明します。計算の過程でよくこの処理をすることがあります。

まずは、DataFrame型からNumpyの配列を表すndarray型に変換する方法です。ndarray型に変換するには、valuesを用います。

Input:

Output:

 

さらに、DataFrame型からリスト型に変換するには、上記のndarray型にしたデータからtolist()を用いてリスト型に変換することができます。

Input:

Output:

 

オススメ書籍

Pythonによるあたらしいデータ分析の教科書

Python3エンジニア認定データ分析試験の教科書にもなっている書籍で、データ分析に必要なPythonの基礎手法を身に付けることができます。具体的には、numpyとpandasを用いたデータの前処理、matplotlibを用いたデータのグラフ化、scikit-learnを用いた機械学習の基礎記述方法を身に付けることができます。これ一つで基礎はバッチリで、実務でも十分活用できると思います。個人的には見やすい書籍でした。

データサイエンス教本 Pythonで学ぶ統計分析・パターン認識・深層学習・信号処理・時系列データ分析

こちらの書籍は初心者から少し記述できるようになった人、かつ数学的な理論と一緒にPythonの記述方法を理解したい方にオススメです。統計分析、パターン認識、深層学習、信号処理、時系列データといった幅広く実務で使用する手法を学びたい方にもオススメです。

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

こちらの基礎を抑えながら実務で必要なPython記述法を学べる書籍です。基礎を一つ一つ抑えるというよりも実務で活用できるように必要な知識を身に付けられると感じました。これ一冊あれば十分かなと思いました。

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

本記事では、Pandasによる欠損値の有無の判定、欠損値処理、データの連結、統計値の算出、データ型の変換について解説しました。具体的には、isnull()やisna()を用いて欠損値の有無の判定、dropna()を用いて欠損値の処理、pd.concatを用いてデータの連結、max()・mean()やdescribe()を用いて統計値の算出を行いました。本記事の内容は、データ処理では非常に重要で多用することが多い処理ですので、ぜひ覚えて使うこなせるようになりましょう!