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

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

MENU

【第7回】Pandasにおけるデータ抽出、並び替え、挿入、時系列データの生成

はじめに

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

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

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

前記事では、Pandasにおけるデータの生成・格納、抽出、読込・出力について解説しました。

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

SAMURAI TERAKOYA

条件による抽出(df.query())

まずは以下の天気データを用いて説明していきたいと思います。2021年の日別の平均気温、最高気温、最低気温、降水量のデータ(temperature_data_20190101-20211231.csv)が格納されているcsvデータを読み込みます。

Input:

Output:

 

それでは、早速、条件によるデータの抽出を行っていきます。

以下の例では、平均気温が20度以上かどうかを判定する方法を示しています。['平均気温']でカラム名(列名)平均気温の列を抽出し、その列のデータが20以上が判定しています。

Input:

Output:

 

上記でTrueとなった行だけ抽出する方法は以下です。df[df['平均気温']>20]とすることで、平均気温が20度以上の行だけ(df['平均気温']>20でTrueとなった行だけ)抽出しています。

Input:

Output:

 

さらに複数条件を用いる際には、以下のdf.query()を用います。以下では平均気温が20度以上、かつ、最高気温が25度以下のとなる日のみを抽出しています。

Input:

Output:

 

並び替え(dtypes、pd.to_datetime()、set_index()、sort_values())

次は、並び替えについて説明します。

並び替えの前に下準備を行います。まず、ここで各カラム(列)のデータ型を確認します。Pandasでデータ型を確認するには、df.typesを用います。その結果、年月日のデータ型はobjectで、文字列扱いとなっていることがわかりました。

Input:

Output:

 

そこで、時系列的な分析をするために、年月日の部分を文字列ではなく、時系列のデータ型に変換します。

以下の例では、pd.to_datetime(df['年月日'])の部分で、元の日付の文字列をdatetime64[ns]型のデータに変換して、再度そのデータをdf['年月日'])として年月日のデータにします。

Input:

Output:

 

さらに、インデックスの設定を行います。ここではset_index()を用いてインデックスに日付のデータを設定します。出力を見てもわかるように、年月日の列がインデックスとなり、4列の2次元データとなっています。

Input:

Output:

 

次は並び替え(ソート)について説明します。ソートには、sort_values()を用います。以下の例では、平均気温で昇順に並び替える処理をしており、sort_values()の引数にby='平均気温'を与えてソートしています。

Input:

Output:

 

降順に並び替えるには、ascending=Falseを付加します。

Input:

Output:

 

不要な列(カラム)の削除(drop())

次は、不要な列(カラム)の削除についてです。不要なカラムの削除には、drop()を用います。axis=1とすることで列方向の指定をしています。

以下の例では、平均気温の列名を指定し、平均気温の列を削除しています。

Input:

Output:

 

既存データを用いた新たなデータの挿入

ここでは、元のデータから計算を行い、算出結果を新たなデータ列としてDataFrameに挿入します。以下の例では、df['最高気温'] - df['最低気温']で最高気温ー最低気温を計算して、それを気温差という列名でDataFrameに挿入しています。

Input:

Output:

 

上記では、数字の列データを挿入しました。次は、数値では文字データを挿入していきます。以下の例では、最高気温が25℃以上であれば'夏日'、30度以上であれば'真夏日'、35度以上であれば'猛暑日'、24度以下であれば'普通の日'とし、文字データのカラムを生成し、それを気温判定という列名でDataFrameに挿入しています。

Input:

Output:

 

時系列データの処理(pd.date_range、resample())

まずは、1か月分の日付データの配列を作成します。以下の例では、2022/1/1を開始日、2022/1/31を終了日として日付データの配列を生成しています。

Input:

Output:

 

次は、この日付データをインデックスとした時系列データを生成します。np.random.rand(31)で31日分のデータを作成、インデックスで上記の日付データ、カラム名を'データ'として、表形式の時系列データを生成しています。

Input:

Output:

 

また、以下のように開始日とpriod=365を設定することで、1年間の日付データを生成することができます。

Input:

Output:

 

先ほどと同じようにnp.random.rand(365)で365個のデータを生成し、インデックスに1年間の日付データを指定し、カラム名を'データ'として表形式の時系列データを生成します。

Input:

Output:

 

次は、上記で作成したデータを用いて、期間ごとの平均値や合計を算出していきます。期間ごとにまとめるには、resample()を用います。引数には期間を表す記号を指定します。期間を表す記号は以下の表になります。

指定文字  内容 
Y
Q 四半期
M
W
D
H
T
S

 

まずは四半期ごとの平均値データを作成していきます。四半期のデータを求めるには、resample('Q')を用い、平均値を求めるにはmean()を用います。

Input:

Output:

 

月ごとの平均値を求めるには、resample('M').mean()を用います。

Input:

Output:

 

週ごとの平均値を求めるには、resample('W').mean()を用います。

Input:

Output:

 

年ごとの平均値を求めるには、resample('Y').mean()を用います。

Input:

Output:

 

次は、四半期、月、週、年ごと合計データの算出について説明します。上記と同様にresample()メソッドを用いますが、合計値を求めるのにsum()を用いています。

まずは、四半期データからいきます。四半期ごとの合計値を求めるには、resample('Q').sum()を用います。

Input:

Output:

 

月ごとの合計値を求めるには、resample('M').sum()を用います。

Input:

Output:

 

週ごとの合計値を求めるには、resample('W').sum()を用います。

Input:

Output:

 

年ごとの合計値を求めるには、resample('Y').sum()を用います。

Input:

Output:

 

オススメ書籍

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

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

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

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

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

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

 

スキル修得&転職

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

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

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

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

 

おわりに

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

本記事の内容は、計測データであるcsvデータを読み込んでDataFrame型のデータにして、データを加工する際によく使う方法ですので、ぜひ覚えましょう!