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

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

MENU

【第6回】Pandasにおけるデータの生成・格納、抽出、読み込み

はじめに

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

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

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

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

具体的には、Pandasで用いられるSeries型、DataFrame型、辞書型のデータ構造の生成、インデックス名・番号、カラム名・番号を用いたデータの抽出方法、csvとxlsxデータの読込・抽出について説明していきます。

SAMURAI TERAKOYA

Pandasのインストール

インストールには、以下のコマンドを実行します。

pip install pandas

公式ページ:

pandas - Python Data Analysis Library

 

Series型とDataFrame型

pandasは、Numpyを基盤にSeries型とDataFrame型というデータ型を提供しています。ここでは、Series型とDataFrame型の例を示します。

まずは、Series型について説明します。以下の例では、Series型のデータ型で1次元データとなっています。

Input:

Output:

 

次は、DataFrame型についてです。以下の例では、DataFrame型のデータ型で表形式の2次元データとなっています。

Input:

Output:

 

インデックスとカラムを指定してDataFrameの作成

次は、インデックスとカラムを指定してDataFrame(データフレーム)を作成していきます。

以下の例では、np.random.rand(40)で0以上1未満の乱数が40個ある1次元配列を用意して、reshape(10,4)で10行4列の2次元配列に変形させています。さらに、columns=['A','B','C','D']で列名(カラム名)を指定し、index=np.arange(0,10))で行名(インデックス名)を指定してDataFrame(表形式の2次元データ)を作成しています。

Input:

Output:

 

また、df.head()とすると、先頭5行だけが出力されます。さらに、df.head(7)のように数字を指定すると先頭7行が出力され、指定した数の分だけ先頭の行が出力されます。

Input:

Output:

 

一方、末尾を出力したい場合には、df.tail()を用います。

Input:

Output:

 

辞書型のデータを用いたDataFrameの作成

データの方には辞書型と呼ばれるデータ形式もあります。以下の{}のような形式をしています。列ごとにまとめったデータがある場合には、この方法の方が単純で便利です。

以下の例では、各列で、np.random.rand(10)を用いて0以上1未満の乱数が10個ある1次元配列を作成して、辞書型のデータ形式にしてDataFrame型のデータを作成しています。出力を見ると、A、B、C、D列があり、10行4列の2次元データが生成されているのがわかると思います。

この方法はよく使うので覚えておきましょう!

Input:

Output:

 

データの抽出

次はDataFrame型データからデータを抽出する方法について説明します。

以下の例では、列(カラム)名をA指定して、その列を抽出する方法を示しています。

Input:

Output:

 

以下のようにdf.Aとしても上記と同様の結果が得られます。

Input:

Output:

 

次に、複数の列を抽出する例について示します。以下の様に、上記でAをした部分を['A','B']のように抽出したい列名とすることで、複数の列を抽出できます。

Input:

Output:

 

次は行(インデックス)名を指定して抽出します。

以下の例では、[:5]とすることで、1行目から5行目までを抽出することができます。

Input:

Output:

 

ここでまでは、[]括弧を付けることで、データを抽出していました。次は、locとilocを用いた抽出方法を説明します。locは行(インデックス)名や列(カラム)名を用いて抽出するのに対し、ilocでは行(インデックス)番号、列(カラム)番号を用いて抽出します。

まずは、locを用いた抽出から確認していきましょう。

以下の例では、loc[3, : ]を用いています。こちらは、3でインデックス名3、:ですべての列を抽出することを意味しています。つまり、インデクス3(4行目)を抽出していることになります。

Input:

Output:

 

また、複数の行を抽出したい場合には以下のように、インデックス名を[]でくくってください。

Input:

Output:

 

次はlocを用いた列の抽出です。以下の例では、行はすべて、列名'A'の列を抽出することを意味しています。つまり、A列を抽出していることになり、df['A']と同じ結果になります。

Input:

Output:

 

複数の列を抽出する場合には以下の様に[]括弧でくくってください。

Input:

Output:

 

次は、行名と列名を両方指定した例です。以下の例のように、ピンポイントに行名3、列名'A'の値を抽出したい場合にloc[3,'A']としてあげることで、特定の値を抽出することができます。

Input:

Output:

 

さて、ここからは行(インデックス)番号、列(カラム)番号を用いて抽出ilocの方法を説明します。

まずは、行の抽出からいきます。

以下の例では、iloc[2, : ]として行番号2(3行名)、すべての列、つまり3行目を抽出しています。

Input:

Output:

 

さらに、「行番号1から3までを抽出・すべての列」を抽出するには、以下のようにiloc[1:4, : ]と記載します。

Input:

Output:

 

次は列番号を用いた抽出について説明します。以下の例では、iloc[ : ,2]とすることで、「すべての行・列番号2」を抽出しています。つまりDataFrameの列名Cを抽出していることになります。

Input:

Output:

 

こちらも複数の列を抽出したい場合には、以下のように[]括弧でくくってください。

Input:

Output:

 

また、列も列番号1か3まで抽出したい場合には、以下のように1:4を列部分に記載していください。

Input:

Output:

 

特定の行、列の値を抽出したい場合には、以下の様に列番号と行番号を両方指定してください。

Input:

Output:

 

ファイルの読込と出力

今回読み込みに使用するcsvデータ、xlsxデータ、jsonデータは以下のリンクのレポジトリに保管してあるので、必要であればダウンロードして使用してください。

github.com

 

まずは、データの読込ついて説明します。

csvデータの読込については、以下の様にpd.read_csvを用いてcsvデータのパスを引数としてください。このように記載することでcsvデータを表形式のデータ(DataFrame)として読み込むことができます。

Input:

Output:

 

エクセルでよく使うxlsxデータについては、以下のpd.read_excelを用いて、xlsxデータのパスを引数としてください。このように記載することでxlsxデータを表形式のデータ(DataFrame)として読み込むことができます。

Input:

Output:

 

次にjson形式のデータの読込です。以下のpd.read_jsonを用いて、jsonデータのパスを引数としてください。このように記載することでjsonデータを表形式のデータ(DataFrame)として読み込むことができます。

Input:

Output:

 

最後に、データの出力について説明します。表形式のデータであるDataFrame型のデータ(df)をcsvデータとして出力する際には、df.to_csv()、エクセルで用いられるxlsxデータとして出力する際には、df.to_excel()を用いて、保存したいファイル名を引数としてください。以下をそのまま実行すると、pythonのファイルと同じフォルダ内にデータが保管されていると思います。

Input:

 

オススメ書籍

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

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

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

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

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

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

 

スキル修得&転職

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

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

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

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

 

おわりに

本記事では、Pandasにおけるデータの生成・格納、抽出、読込・出力について解説しました。具体的には、Pandasで用いられるSeries型、DataFrame型、辞書型のデータ構造の生成、インデックス名・番号、カラム名・番号を用いたデータの抽出方法、csvとxlsxデータの読込・抽出について説明しました。

よくセンサーデータや天気データなどがcsvデータやxlsxデータとして保存されていて、それを用いて分析をする際には本記事の内容のように、データを読み込んで、加工することが多いです。

本記事の内容は、データの処理では基本的な処理なので覚えておきましょう。