Pandas

pandas入門(データ分析に必要不可欠なものをまとめてみた)

pandas入門(データ分析に必要不可欠なものをまとめてみた)

 

  • Pandasの基本的な使い方を知りたい…
  • 機械学習に必要不可欠なものから習得したい…

この悩みに全て答えます。

本記事では、Pandasでデータ解析を行う際に必要不可欠なものをまとめて紹介します。

ここで紹介するものを習得すれば、基本的にデータ分析で困ることはありません。

全体通して20〜30分程度習得することができるので参考にしてください。

Pythonに特化したオススメのオンラインスクールについては下記を参考にしてください

【最新】Pythonに強いプログラミングスクール7選|東大生が厳選Pythonの流行と共に、Pythonに強いプログラミングスクールが増えてきました。本記事では、特にPythonを効率的に学ぶことができるプログラミングスクールを経験をもとに厳選して、内容を詳しく解説しています。...

Pandasについて

Pandasは、データを分析する便利な機能を提供するパッケージです。

簡単にいうと、PythonでExcelのような処理を簡単に行うことができる機能を提供してくれます。

また、機械学習には必要不可欠なツールです。

Pandasのインポート

 

まずは、『Pandas』と『numpy』を以下のようにインストールしてください

import numpy as np
import pandas as pd

 

Pandasのデータ構造の作り方

Pandasには、1次元データを扱う『Series』と2次元データを扱う『DataFrame』があります。

以下の手順で順番に説明していきます

  1. Seriesの作成
  2. DataFrameの作成

Seriesの作成

 

リストやNumpyの配列の1次元データからSeriesを作成することができます。

x = pd.Series(np.arange(100, 110))
x

<出力>

0    100
1    101
2    102
3    103
4    104
5    105
6    106
7    107
8    108
9    109
dtype: int64

 

このように、Seriesは左側に行のラベル、右側に値が表示されます。

引数に行ラベルをまとめたリストを渡すことで、ラベルも設定できます。

x = pd.Series(np.arange(100, 105), index = ['a', 'b', 'c', 'd', 'e'])
x

<出力>

a    100
b    101
c    102
d    103
e    104
dtype: int64

 

また、Seriesクラスに辞書でデータを渡すことで、辞書のキーをラベルとするSeriesを作ることができます。

この作り方もよく出てくるので覚えておくと良いです。

x = pd.Series({'a' : 100, 'b' : 101, 'c' : 102, 'd' : 103, 'e' : 104})
x

<出力>

a    100
b    101
c    102
d    103
e    104
dtype: int64

 

DataFrameの作成

 

DataFrameは行ラベルだけでなく列ラベルも設定することが可能です。

作り方は、Seriesと同様に2次元リスト・Numpy配列を渡して作成することができます。

df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), 
                  index = ['a', 'b', 'c'], 
                  columns = ['A', 'B', 'C'])
df

<出力>

DataFrameは、『index』で行のラベルを設定し、『columns』で列のラベルを指定します。

かなり綺麗な表ができましたね。

また、Seriesと同様に辞書からDataFrameを作成することもできます。

具体的には、列ラベルをキーとする辞書を渡すことで作成することができます。

df = pd.DataFrame(
        {'A' : [1, 4, 7], 'B' : [2, 5, 8], 'C' : [3, 6, 9]},
        index = ['a', 'b', 'c'])
df

<出力>

この作り方もよく使うの覚えておきましょう。

Pandasの基本的なメソッド

ここでは、データ分析でよく使うメソッドを説明していきます。

  1. head : 最初の5行分を表示
  2. info : データフレームの概要表示
  3. index : 行ラベルの取得
  4. columns : 列ラベルの取得
  5. describe : 基本的な統計量をまとめて表示

まずは、データ分析を行うための具体例を作成します!

df = pd.DataFrame(
        {'A' : [54, 65, 78, 89, 91, 55, 76], 
         'B' : [66, 45, 78, 98, 54, 55, 66], 
         'C' : [22, 56, 44, 66, 44, 98, 76]},
        index = ['math1', 'math2', 'english1', 'english2', 
                       'physics', 'chemistry', 'society'])

df

<出力>

A, B, C君の定期試験の結果だと思ってください(細かいことは気にしないでください笑笑)

 head : 最初の5行分を表示

 

headメソッドは大きいデータフレームの中身を確認するときに便利なメソッドです。

headメソッドを利用すると最初の5行分のデータが表示されます

df.head()

<出力>

表示する行数を引数で指定することができます。

info : データフレームの概要表示

 

infoメソッドを利用することで、データフレームの概要を知ることができます。

df.info()

<出力>

<class 'pandas.core.frame.DataFrame'>
Index: 7 entries, math1 to society
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   A       7 non-null      int64
 1   B       7 non-null      int64
 2   C       7 non-null      int64
dtypes: int64(3)
memory usage: 224.0+ bytes

 

infoメソッドによってメモリ使用量や欠損値の数(non – null)などデータフレームの概要がわかります。

index : 行ラベルの取得

 

indexメソッドで行ラベルが取得できます

df.index

<出力>

Index(['math1', 'math2', 'english1', 'english2', 'physics', 'chemistry',
       'society'],
      dtype='object')

 

行ラベルの値を参照したり、確認するときに便利です。

columns : 列ラベルの取得

 

columnsメソッドで列ラベルを取得することができます。

df.columns

<出力>

Index(['A', 'B', 'C'], dtype='object')

 

列ラベルを参照したいときや確認したいときに便利です。

describe : 基本的な統計量をまとめて表示

 

describeは基本的な統計量をまとめて表示してくれる便利なメソッドです。

df.describe()

<出力>

Pandas_profilingというものを使うと隅から隅までDataの性質を確認することができます(そこまで深くデータを解析する必要がない方は飛ばしてください)

*使用するためには、自分の環境に『pandas_profiling』をインストールしてから使用してください。

import pandas_profiling
df.profile_report()

 

データの参照方法

データフレームのデータの参照は、Pandasでデータ解析するときに必要不可欠な能力です。

また、様々な種類で参照できるため混乱しないようにしましょう。

① 列ラベルを指定して参照

 

列ラベルを以下のように指定して参照する方法が基本的です。

df['A']

<出力>

math1        54
math2        65
english1     78
english2     89
physics      91
chemistry    55
society      76
Name: A, dtype: int64

 

② loc : 参照する行と列を指定

 

locメソッドを利用することで、さらに柔軟に行と列を参照することができます。

locで、以下のように行ラベルと列ラベルを指定して参照することができます。

また、スライシングで範囲を指定することもできます(*範囲の終端の値も含まれることに注意

連続していない複数の行や列を参照する場合は、ラベル名をリストで指定して参照できます。

df.loc['math1' : 'english2', ['A', 'C']]

<出力>

さらに『locメソッド』は行ラベルだけ指定することで、その行をSeriesとして参照することができます。

df.loc['math1']

<出力>

A    54
B    66
C    22
Name: math1, dtype: int64

 

列だけ取り出したいときは以下のよう書けばOKです。

df.loc[:, 'A']

<出力>

math1        54
math2        65
english1     78
english2     89
physics      91
chemistry    55
society      76
Name: A, dtype: int64

 

これは機械学習の場面でも使用するので覚えておきましょう。

また、データフレームの特定の値を参照する場合は『atメソッド』を使います(locより高速です)

df.at['math1', 'C']

<出力>

22

 

③ iloc : インデックスで参照

 

ilocメソッドを利用することで、ラベル名ではなくインデックスでデータを参照することができます。

df.iloc[: 4, [0, 2]]

<出力>

インデックスで特定の値を参照するときは、『iatメソッド』を利用します。

df.iat[0, 2]

<出力>

22

 

時々使うことがあるので覚えておきましょう。

DataFrameのカスタマイズ

次にDataFrameのカスタマイズ方法を紹介します。

自由自在に列を追加したり、情報をうまく取り出したりすることができるようになることを目指します。

列の追加

 

Dataframeでは、以下のように簡単にデータを追加することができます。

df['tatal_score'] = df.loc[:, 'A'] + df.loc[:, 'B'] + df.loc[:, 'C']
df

 

<出力>

列の削除

 

『Dropメソッド』を利用して指定したDataFrameの行や列を削除することができます。

inplaceという引数をTrueにするともとのDataFrameが更新され、削除後のDataFrameに置き換わります。

df.drop(columns = ['total_score'], inplace = True)
df

 

<出力>

また、引数の『axis = 1』を設定しても列を削除できます。

df.drop('total_score', axis = 1, inplace = True)

 

この記述方法もよく使用されるので覚えておきましょう。

行を削除する場合は以下のように記述します。

df.drop(index = ['society'], inplace = True)
df

 

<出力>

同様に引数に『axis = 0』書いても行を削除できます。

df.drop(index = ['society'], inplace = True)
df

 

比較演算

 

比較演算を使うと要素がブール値のデータフレームが作成します。

今回は、再テストが50点以下だとして50点を超えているかを比較演算で確認します。

df > 50

 

<出力>

条件式を使って参照

 

以下のように、条件式を使って簡単に参照することができます。

50点を下回っている具体的な点数を表示します。

df[df <= 50]

 

<出力>

条件が偽の要素は欠損値(NaN)に変わります。

さらにlocメソッドを利用して、より柔軟に条件に合う要素を取り出すことが可能です。

df.loc[df['C'] > 60, 'A']

 

<出力>

english2     89
chemistry    55
Name: A, dtype: int64

 

この例は、列ラベルがCが60点を越えている条件を満たしている列ラベルAの値を取り出しています。

where : 条件に当てはらないものを置き換える

 

whereメソッドを利用して条件に当てはまらないものを異なる値に置き換えることができます。

df.where(df > 50, 0)

 

<出力>

この例の場合は、50点を下回ったものは0点に置き換えられています。

mask : 条件に当てはまるものを入れ替える

 

maskメソッドを利用することで条件に当てはるものを一括で変換することができます。

df.mask(df <= 50, 0)

 

<出力>

今度は、50点を以下の点数となるものが入れ替わりました。

apply : 各列に関数を適応

 

各列に関数を適応したい時にapplyメソッドを利用します。

df['A1'] = df['A'].apply(lambda x: x ** 2)

 

<出力>

replaceメソッド

 

Replaceメソッドを利用することで指定した値を一括で異なる値に変換するこができます。

基本的には、第一引数に変換する値を指定し、第二引数に変換後の値を指定します。

df.replace(44, 55)

 

<出力>

複数の値を一気に異なる値に変換する方法は二通りあります。

  • 辞書型を利用する方法
  • リストを利用する方法

辞書型を利用する方法は以下のように書きます。

df.replace({78 : 100, 44 : 55})

 

リストを利用する方法は以下のように書きます。

df.replace([44, 78], [55, 100])

 

<出力>

この具体例では、44 → 78、55 → 100 の変換を行いました。

機械学習では、カテゴリカルなデータを数に一気に変換するときに使用します。

DataFrameの結合

DataFrameの結合方法を具体例を使って解説していきます。

まず初めに具体例として3つのDataFrameを作成します。

一つ目のDataFrameは先ほど利用したものと同じです。

df1 = pd.DataFrame(
        {'A' : [54, 65, 78, 89, 91, 55, 76], 
         'B' : [66, 45, 78, 98, 54, 55, 66], 
         'C' : [22, 56, 44, 66, 44, 98, 76]},
        index = ['math1', 'math2', 'english1', 'english2', 
                       'physics', 'chemistry', 'society'])

df1

 

以下のように入力し2つのDataFrameを作成しましょう。

df2 = pd.DataFrame(
        {'D' : [34, 55, 68, 83, 21, 75, 96], 
         'E' : [69, 65, 48, 58, 94, 95, 16]}, 
        index = ['math1', 'math2', 'english1', 'english2', 
                       'physics', 'chemistry', 'society'])

df2

 

df3 = pd.DataFrame(
        {'A' : [54, 65], 
         'B' : [66, 45], 
         'C' : [22, 56]},
        index = ['japanese1', 'japanese2'])

df3

 

concat : DataFrameを結合(縦方向の結合)

 

concat関数を利用することでDataFrameの結合を行うことができます。

引数の『axis』に0を指定すれば縦方向、1を指定すれば縦方向に結合します(デフォルトは縦方向の結合です)

また、引数の『sort = False』とすることでデータの並び替えを止めることができます。

pd.concat([df1, df3], axis = 0, sort = False)

 

<出力>

concat : DataFrameを結合(横方向の結合)

 

次は横方向の結合を行います(名前をdf4としました)

df4 = pd.concat([df1, df2], axis = 1, sort = False)
df4

 

<出力>

また、引数に『join = ‘inner’』と指定すると列ラベルが一致している列だけが結合されます。

pd.concat([df4, df3], axis = 0, join = 'inner', sort = False)

 

<出力>

まとめ

 

本記事では、Pandasを用いたデータ分析に必要不可欠なものをまとめて紹介しました。

ここで紹介したものコードを利用することで、基本的なデータ解析はできるようになります。

また本記事は、高度なデータ分析の土台にもなります。

プログラミングは、自分でコーディングしないと上達しません。

皆さんも適当なデータフレームを作成し一度自分の手でデータ解析をしてみましょう。

『matplotlib』を利用したデータの可視化について知りたい方は下記を参考にしてください。

【15分】Pythonでグラフを作成する方法|matplotlibの基本をマスターPythonでグラフを書くことが難しそうだと思っていませんか?実は、Pythonを使用したグラフ作成は、excelより便利で簡単です。この記事では、初心者でもグラフが書けるように丁寧にpythonのグラフの作成法を説明します。...
ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
【必見】オンライン英会話を利用しないのは時代遅れ?

 

 

英語学習でオンライン英会話を利用しないのは、時代遅れです…

 

『スピーキングができないから、オンライン英会話はまだまだ後回し…』と思っている方は大間違いです。

 

最近のオンライン英会話は、教材が豊富で、もはや参考書・問題集は不要になりつつあります…

また、多くのオンライン英会話が最新メソッドを導入して、スピーキングのみならず、リーディング・リスニング・ライティングの能力も上がる教材を導入しています。

さらに、効率的な記憶ツールや学習カウンセリングのサービスが提供されることもあります!!

 

特に初心者の方は、下記の記事で紹介しているオンライン英会話をチェックしてみてください。

 

【東大生が厳選】初心者にオススメなオンライン英会話10選実は、最適なオンライン英会話はユーザーによって異なります。本記事では、複数のオンライン英会話を経験した私が、他社と比較しつつ特徴を明確にして本当にオススメできるオンライン英会話を10個厳選しました。...

 

中には、2週間の無料体験期間を提供しているオンライン英会話もあります。

英語学習が滞っている方や英語学習を習慣化できていない方は無料体験期間で良いので挑戦してみてください。

何事も行動することが大切です。

 

また、多くのオンライン英会話がTOEICやTOEFL等の外部英語試験の対策レッスンを提供してきています。

中には、追加料金なしで、本番さながらの対策や面接対策を行うことができるオンライン英会話もあります。

 

特にTOEIC対策に強いオンライン英会話は下記を参考にしてください。

 

【徹底比較】TOEIC対策に強いオンライン英会話5選|東大生が厳選!オンライン英会話はTOEICのスコアを効率的に上げる最強のツールです。本記事では、TOEICにオンライン英会話が効果的な理由とTOEIC対策に強いオンライン英会話を厳選しました。詳しい内容は記事を参考にしてください。...

 

TOEFL対策に強いオンライン英会話に関しては下記を参考にしてください。

 

【徹底比較】TOEFL対策に強いオンライン英会話5選|東大生が厳選!TOEFL対策にオンライン英会話は有効です。事実、私もTOEFL対策のためにオンライン英会話を使用してTOEFL ibtの4技能、TOEFL itpのスコアを爆上げすることができました。この記事では、私が思うTOEFL対策に最適なオンライン英会話を紹介しました。...