Pythonによるデータ分析
この記事では、Python を使用してデータ分析を行う方法について説明します。 NumPy を使用した数値データの分析、Pandas を使用した表形式データ、データ視覚化 Matplotlib、および探索的データ分析など、あらゆる種類のデータ分析について説明します。
Pythonによるデータ分析
データ分析 データを収集、変換、整理して将来の予測を行い、情報に基づいた意思決定を行う手法です。また、ビジネス上の問題に対する考えられる解決策を見つけるのにも役立ちます。データ分析には 6 つのステップがあります。彼らです:
- データ要件を尋ねるか指定する
- データの準備または収集
- 洗浄と処理
- 分析する
- 共有
- 行為または報告
Pythonによるデータ分析
注記: これらの手順の詳細については、「 ナムピー は Python の配列処理パッケージであり、これらの配列を操作するための高性能の多次元配列オブジェクトとツールを提供します。これは、Python を使用した科学計算の基本的なパッケージです。
NumPy の配列
NumPy 配列 は、正の整数のタプルによってインデックス付けされた、すべて同じタイプの要素 (通常は数値) のテーブルです。 Numpy では、配列の次元数を配列のランクと呼びます。各次元に沿った配列のサイズを与える整数のタプルは、配列の形状として知られています。
NumPy 配列の作成
NumPy 配列は、さまざまなランクで複数の方法で作成できます。リスト、タプルなどのさまざまなデータ型を使用して作成することもできます。結果として得られる配列の型は、シーケンス内の要素の型から推定されます。 NumPy は、初期のプレースホルダー コンテンツを含む配列を作成するための関数をいくつか提供します。これらにより、高価な操作である配列の拡張の必要性が最小限に抑えられます。
を使用して配列を作成します numpy.empty(shape, dtype=float, order=’C’)
Python3import numpy as np b = np.empty(2, dtype = int) print('Matrix b :
', b) a = np.empty([2, 2], dtype = int) print('
Matrix a :
', a) c = np.empty([3, 3]) print('
Matrix c :
', c) 出力:
パンダを使用した空の行列
を使用して配列を作成します numpy.zeros(形状、dtype = なし、順序 = 'C')
Python3import numpy as np b = np.zeros(2, dtype = int) print('Matrix b :
', b) a = np.zeros([2, 2], dtype = int) print('
Matrix a :
', a) c = np.zeros([3, 3]) print('
Matrix c :
', c) 出力:
Matrix b : [0 0] Matrix a : [[0 0] [0 0]] Matrix c : [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Numpy 配列の操作
算術演算
- 追加:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing addition using arithmetic operator add_ans = a+b print(add_ans) # Performing addition using numpy function add_ans = np.add(a, b) print(add_ans) # The same functions and operations can be used for # multiple matrices c = np.array([1, 2, 3, 4]) add_ans = a+b+c print(add_ans) add_ans = np.add(a, b, c) print(add_ans)
出力:
[ 7 77 23 130] [ 7 77 23 130] [ 8 79 26 134] [ 7 77 23 130]
- 減算:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing subtraction using arithmetic operator sub_ans = a-b print(sub_ans) # Performing subtraction using numpy function sub_ans = np.subtract(a, b) print(sub_ans)
出力:
[ 3 67 3 70] [ 3 67 3 70]
- 乗算:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing multiplication using arithmetic # operator mul_ans = a*b print(mul_ans) # Performing multiplication using numpy function mul_ans = np.multiply(a, b) print(mul_ans)
出力:
[ 10 360 130 3000] [ 10 360 130 3000]
- 分割:
import numpy as np # Defining both the matrices a = np.array([5, 72, 13, 100]) b = np.array([2, 5, 10, 30]) # Performing division using arithmetic operators div_ans = a/b print(div_ans) # Performing division using numpy functions div_ans = np.divide(a, b) print(div_ans)
出力:
[ 2.5 14.4 1.3 3.33333333] [ 2.5 14.4 1.3 3.33333333]
詳細については、こちらを参照してください。 NumPy – 算術演算のチュートリアル
NumPy 配列のインデックス作成
インデックス作成 NumPy では配列をインデックスとして使用して実行できます。スライスの場合、配列のビューまたは浅いコピーが返されますが、インデックス配列では、元の配列のコピーが返されます。 Numpy 配列には、他の配列またはタプルを除く他のシーケンスでインデックスを付けることができます。最後の要素には、-1 秒、最後に -2 というようにインデックスが付けられます。
Python NumPy 配列のインデックス付け
Python3# Python program to demonstrate # the use of index arrays. import numpy as np # Create a sequence of integers from # 10 to 1 with a step of -2 a = np.arange(10, 1, -2) print('
A sequential array with a negative step:
',a) # Indexes are specified inside the np.array method. newarr = a[np.array([3, 1, 2 ])] print('
Elements at these indices are:
',newarr) 出力:
A sequential array with a negative step: [10 8 6 4 2] Elements at these indices are: [4 8 6]
NumPy 配列のスライス
構文 x[obj] について考えてみましょう。x は配列、obj はインデックスです。スライスオブジェクトは、次の場合のインデックスです。 基本的なスライス 。基本的なスライスは、obj が次の場合に発生します。
- 開始: 停止: ステップの形式のスライス オブジェクト
- 整数
- またはスライスオブジェクトと整数のタプル
基本的なスライスによって生成されたすべての配列は、常に元の配列のビューになります。
Python3# Python program for basic slicing. import numpy as np # Arrange elements from 0 to 19 a = np.arange(20) print('
Array is:
',a) # a[start:stop:step] print('
a[-8:17:1] = ',a[-8:17:1]) # The : operator means all elements till the end. print('
a[10:] = ',a[10:]) 出力:
Array is: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] a[-8:17:1] = [12 13 14 15 16] a[10:] = [10 11 12 13 14 15 16 17 18 19]
省略記号は、基本的なスライスと併せて使用することもできます。省略記号 (…) は、配列の次元と同じ長さの選択タプルを作成するために必要な : オブジェクトの数です。
Python3# Python program for indexing using basic slicing with ellipsis import numpy as np # A 3 dimensional array. b = np.array([[[1, 2, 3],[4, 5, 6]], [[7, 8, 9],[10, 11, 12]]]) print(b[...,1]) #Equivalent to b[: ,: ,1 ]
出力:
[[ 2 5] [ 8 11]]
NumPy 配列ブロードキャスト
用語 放送 これは、特定の制約につながる算術演算中に numpy が異なる次元の配列をどのように処理するかを指します。互換性のある形状になるように、小さい配列が大きい配列全体にブロードキャストされます。
大規模なデータセットがあり、各データがパラメーターのリストであると仮定しましょう。 Numpy には 2 次元配列があり、各行がデータであり、行数がデータセットのサイズです。これらすべてのデータに何らかのスケーリングを適用したいとします。すべてのパラメーターが独自のスケーリング係数を取得するか、すべてのパラメーターに何らかの係数が乗算されるとします。
明確に理解するために、主要栄養素の内訳を使用して食品のカロリーを数えてみましょう。大まかに言うと、食品のカロリー部分は脂肪(1グラムあたり9カロリー)、タンパク質(4CPG)、炭水化物(4CPG)で構成されています。したがって、いくつかの食品 (データ) をリストし、各食品リストの主要栄養素の内訳 (パラメーター) を指定すると、各栄養素にそのカロリー値を乗算して (スケーリングを適用)、すべての食品のカロリー内訳を計算できます。
この変換により、あらゆる種類の有用な情報を計算できるようになりました。たとえば、ある食品に含まれるカロリーの合計はいくらか、または夕食の内訳から、タンパク質から摂取したカロリーはどれくらいかなどがわかります。
Numpy を使用してこの計算を生成する単純な方法を見てみましょう。
Python3import numpy as np macros = np.array([ [0.8, 2.9, 3.9], [52.4, 23.6, 36.5], [55.2, 31.7, 23.9], [14.4, 11, 4.9] ]) # Create a new array filled with zeros, # of the same shape as macros. result = np.zeros_like(macros) cal_per_macro = np.array([3, 3, 8]) # Now multiply each row of macros by # cal_per_macro. In Numpy, `*` is # element-wise multiplication between two arrays. for i in range(macros.shape[0]): result[i, :] = macros[i, :] * cal_per_macro result
出力:
array([[ 2.4, 8.7, 31.2], [157.2, 70.8, 292. ], [165.6, 95.1, 191.2], [ 43.2, 33. , 39.2]])
放送ルール: 2 つの配列を一緒にブロードキャストする場合は、次のルールに従います。
- 配列のランクが同じでない場合は、両方の形状が同じ長さになるまで、下位ランクの配列の形状の先頭に 1 を追加します。
- 2 つの配列は、次元で同じサイズを持つ場合、または配列の 1 つがその次元でサイズ 1 である場合、次元で互換性があります。
- すべての次元と互換性がある場合、配列は一緒にブロードキャストできます。
- ブロードキャスト後、各配列は、2 つの入力配列の要素ごとの最大形状と等しい形状であるかのように動作します。
- 一方の配列のサイズが 1 で、もう一方の配列のサイズが 1 より大きい次元では、最初の配列はその次元に沿ってコピーされたかのように動作します。
import numpy as np v = np.array([12, 24, 36]) w = np.array([45, 55]) # To compute an outer product we first # reshape v to a column vector of shape 3x1 # then broadcast it against w to yield an output # of shape 3x2 which is the outer product of v and w print(np.reshape(v, (3, 1)) * w) X = np.array([[12, 22, 33], [45, 55, 66]]) # x has shape 2x3 and v has shape (3, ) # so they broadcast to 2x3, print(X + v) # Add a vector to each column of a matrix X has # shape 2x3 and w has shape (2, ) If we transpose X # then it has shape 3x2 and can be broadcast against w # to yield a result of shape 3x2. # Transposing this yields the final result # of shape 2x3 which is the matrix. print((X.T + w).T) # Another solution is to reshape w to be a column # vector of shape 2X1 we can then broadcast it # directly against X to produce the same output. print(X + np.reshape(w, (2, 1))) # Multiply a matrix by a constant, X has shape 2x3. # Numpy treats scalars as arrays of shape(); # these can be broadcast together to shape 2x3. print(X * 2)
出力:
[[ 540 660] [1080 1320] [1620 1980]] [[ 24 46 69] [ 57 79 102]] [[ 57 67 78] [100 110 121]] [[ 57 67 78] [100 110 121]] [[ 24 44 66] [ 90 110 132]]
注記: 詳細については、こちらを参照してください。 Python NumPy チュートリアル 。
Pandas を使用したデータ分析
Python Pandas は、リレーショナル データやラベル付きデータに使用され、そのようなデータや時系列を操作するためのさまざまなデータ構造を提供します。このライブラリは、NumPy ライブラリの上に構築されています。このモジュールは通常、次のようにインポートされます。
import pandas as pd
ここで、pd は Pandas のエイリアスとして参照されます。ただし、エイリアスを使用してライブラリをインポートする必要はありません。エイリアスを使用すると、メソッドまたはプロパティが呼び出されるたびに記述するコードの量が少なくなるだけです。通常、パンダはデータを操作するために 2 つのデータ構造を提供します。
- シリーズ
- データフレーム
シリーズ:
パンダシリーズ は、任意の型 (整数、文字列、浮動小数点、Python オブジェクトなど) のデータを保持できる 1 次元のラベル付き配列です。軸ラベルは総称してインデックスと呼ばれます。 Pandas シリーズは Excel シート内の列にすぎません。ラベルは一意である必要はありませんが、ハッシュ可能なタイプである必要があります。このオブジェクトは、整数ベースとラベルベースの両方のインデックス作成をサポートし、インデックスに関係する操作を実行するための多数のメソッドを提供します。
パンダシリーズ
Series() 関数を使用して、SQL、データベース、CSV ファイル、Excel ファイルなどの既存のストレージ、またはリスト、辞書などのデータ構造からデータセットをロードすることで作成できます。
Python Pandas の作成シリーズ
Python3import pandas as pd import numpy as np # Creating empty series ser = pd.Series() print(ser) # simple array data = np.array(['g', 'e', 'e', 'k', 's']) ser = pd.Series(data) print(ser)
出力:
プナダシリーズ
データフレーム:
パンダのデータフレーム ラベル付きの軸 (行と列) を持つ、サイズ変更可能で、潜在的に異種混合の表形式データ構造です。データ フレームは 2 次元のデータ構造です。つまり、データは行と列に表形式で配置されます。 Pandas DataFrame は、データ、行、列という 3 つの主要コンポーネントで構成されます。
パンダのデータフレーム
Dataframe() メソッドを使用して作成でき、シリーズと同様に、さまざまなファイル タイプやデータ構造から作成することもできます。
Python Pandas データフレームの作成
Python3import pandas as pd # Calling DataFrame constructor df = pd.DataFrame() print(df) # list of strings lst = ['Geeks', 'For', 'Geeks', 'is', 'portal', 'for', 'Geeks'] # Calling DataFrame constructor on list df = pd.DataFrame(lst) df
出力:
Pythonリストからデータフレームを作成する
CSVからデータフレームを作成する
我々はできる CSVからデータフレームを作成する を使用したファイル read_csv() 関数。
Python Pandas は CSV を読み取ります
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # Printing top 5 rows df.head() 出力:
データフレームの先頭
データフレームのフィルタリング
パンダ データフレーム.フィルター() 関数は、指定されたインデックスのラベルに従ってデータフレームの行または列をサブセット化するために使用されます。このルーチンは、データフレームの内容をフィルター処理しないことに注意してください。フィルターはインデックスのラベルに適用されます。
Python Pandas フィルター データフレーム
Python3import pandas as pd # Reading the CSV file df = pd.read_csv('Iris.csv') # applying filter function df.filter(['Species', 'SepalLengthCm', 'SepalLengthCm']).head() 出力:
データセットにフィルターを適用する
データフレームの並べ替え
pandasでデータフレームをソートするには、関数 並べ替え値() 使用されている。 Pandas sort_values() は、データ フレームを昇順または降順で並べ替えることができます。
Python Pandas データフレームを昇順で並べ替える
出力:
列の値に基づいて並べ替えられたデータセット
パンダのグループ化
グルービー は非常に単純な概念です。カテゴリのグループを作成し、カテゴリに関数を適用できます。実際のデータ サイエンス プロジェクトでは、大量のデータを扱い、何度も試行することになるため、効率性を高めるために、Groupby の概念を使用します。 Groupby は主に、次の 1 つ以上のステップを含むプロセスを指します。
- 分割: データセットにいくつかの条件を適用してデータをグループに分割するプロセスです。
- 申請中: これは、各グループに個別に関数を適用するプロセスです。
- 組み合わせる: これは、groupby と結果をデータ構造に適用した後、さまざまなデータセットを結合するプロセスです。
次の図は、Groupby の概念に含まれるプロセスを理解するのに役立ちます。
1.「チーム」列の一意の値をグループ化します。
Pandas Groupby メソッド
2. 各グループにバケットができました
3. 他のデータをバケットに放り込む
4. 各バケットの重み列に関数を適用します。
各列の重み列に関数を適用する
Python パンダ GroupBy
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'Name': ['Jai', 'Anuj', 'Jai', 'Princi', 'Gaurav', 'Anuj', 'Princi', 'Abhi'], 'Age': [27, 24, 22, 32, 33, 36, 27, 32], 'Address': ['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj', 'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'], 'Qualification': ['Msc', 'MA', 'MCA', 'Phd', 'B.Tech', 'B.com', 'Msc', 'MA']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) print('Original Dataframe') display(df) # applying groupby() function to # group the data on Name value. gk = df.groupby('Name') # Let's print the first entries # in all the groups formed. print('After Creating Groups') gk.first() 出力:
パンダのグルービー
グループに関数を適用する:
データをグループに分割した後、各グループに関数を適用して、次のようないくつかの操作を実行します。
- 集計: これは、各グループに関する要約統計 (または統計) を計算するプロセスです。たとえば、グループの合計または平均を計算します。
- 変換: これは、グループ固有の計算を実行し、類似のインデックスを返すプロセスです。たとえば、グループ内の NA に各グループから導出された値を入力します。
- 濾過: これは、True または False を評価するグループごとの計算に従って、いくつかのグループを破棄するプロセスです。たとえば、グループの合計または平均に基づいてデータをフィルタリングする
パンダの集約
集計 これは、各グループに関する要約統計量を計算するプロセスです。集計関数は、グループごとに 1 つの集計値を返します。 groupby 関数を使用してデータをグループに分割した後、グループ化されたデータに対していくつかの集計操作を実行できます。
Python パンダの集約
Python3# importing pandas module import pandas as pd # importing numpy as np import numpy as np # Define a dictionary containing employee data data1 = {'Name': ['Jai', 'Anuj', 'Jai', 'Princi', 'Gaurav', 'Anuj', 'Princi', 'Abhi'], 'Age': [27, 24, 22, 32, 33, 36, 27, 32], 'Address': ['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj', 'Jaunpur', 'Kanpur', 'Allahabad', 'Aligarh'], 'Qualification': ['Msc', 'MA', 'MCA', 'Phd', 'B.Tech', 'B.com', 'Msc', 'MA']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # performing aggregation using # aggregate method grp1 = df.groupby('Name') grp1.aggregate(np.sum) 出力:
データセットでの合計集計関数の使用
データフレームの連結
データフレームを連結するには、次を使用します。 concat() データフレームの連結に役立つ関数。この関数は、他の軸上のインデックス (存在する場合) のオプションの設定ロジック (和集合または交差) を実行しながら、Pandas オブジェクトの軸に沿って連結操作を実行するという重労働をすべて実行します。
Python Pandas のデータフレームの連結
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32],} # Define a dictionary containing employee data data2 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2) display(df, df1) # combining series and dataframe res = pd.concat([df, df1], axis=1) res 出力:
データフレームのマージ
非常に大規模な DataFrame を結合する必要がある場合、結合はこれらの操作を迅速に実行する強力な方法として機能します。結合は、一度に 2 つの DataFrame (左テーブルと右テーブルとして示されます) でのみ実行できます。キーは、2 つの DataFrame が結合される共通の列です。行値の意図しない重複を避けるために、列全体で一意の値を持つキーを使用することをお勧めします。パンダは単一の機能を提供します。 マージ() 、DataFrame オブジェクト間のすべての標準データベース結合操作のエントリ ポイントとして使用されます。
どの行がデータを保持する必要があるかに応じて、結合を処理する 4 つの基本的な方法 (内部、左、右、外部) があります。
Python Pandas のデータフレームのマージ
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32],} # Define a dictionary containing employee data data2 = {'key': ['K0', 'K1', 'K2', 'K3'], 'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'], 'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2) display(df, df1) # using .merge() function res = pd.merge(df, df1, on='key') res 出力:
2 つのデータセットを連結する
データフレームに参加する
データフレームに参加するには、次を使用します。 。参加する() function この関数は、インデックスが異なる可能性がある 2 つの DataFrame の列を 1 つの結果 DataFrame に結合するために使用されます。
Python パンダがデータフレームに参加する
Python3# importing pandas module import pandas as pd # Define a dictionary containing employee data data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'], 'Age':[27, 24, 22, 32]} # Define a dictionary containing employee data data2 = {'Address':['Allahabad', 'Kannuaj', 'Allahabad', 'Kannuaj'], 'Qualification':['MCA', 'Phd', 'Bcom', 'B.hons']} # Convert the dictionary into DataFrame df = pd.DataFrame(data1,index=['K0', 'K1', 'K2', 'K3']) # Convert the dictionary into DataFrame df1 = pd.DataFrame(data2, index=['K0', 'K2', 'K3', 'K4']) display(df, df1) # joining dataframe res = df.join(df1) res 出力:
2 つのデータセットを結合する
詳細については、こちらを参照してください。 パンダのマージ、結合、連結 チュートリアル
Pandas の完全なガイドについては、以下を参照してください。 パンダのチュートリアル 。
Matplotlib による視覚化
Matplotlib は使いやすく、Python の素晴らしい視覚化ライブラリです。これは NumPy 配列に基づいて構築されており、より広範な SciPy スタックで動作するように設計されており、線、棒、散布図、ヒストグラムなどのいくつかのプロットで構成されています。
パイプロット
パイプロット は、MATLAB のようなインターフェイスを提供する Matplotlib モジュールです。 Pyplot は、Figure と対話する関数を提供します。つまり、Figure を作成し、ラベルでプロットを装飾し、Figure 内にプロット領域を作成します。
Python3# Python program to show pyplot module import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.axis([0, 6, 0, 20]) plt.show()
出力:
棒グラフ
あ 棒グラフ 棒グラフは、長さと高さが表す値に比例する長方形の棒でデータのカテゴリを表すグラフです。棒グラフは水平方向または垂直方向にプロットできます。棒グラフは、個別のカテゴリ間の比較を示します。 bar() メソッドを使用して作成できます。
Python Matplotlib 棒グラフ
ここでは、iris データセットのみを使用します
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') # This will plot a simple bar chart plt.bar(df['Species'], df['SepalLengthCm']) # Title to the plot plt.title('Iris Dataset') # Adding the legends plt.legend(['bar']) plt.show() 出力:
matplotlib ライブラリを使用した棒グラフ
ヒストグラム
あ ヒストグラム は基本的に、データをいくつかのグループの形式で表すために使用されます。これは棒グラフの一種で、X 軸がビンの範囲を表し、Y 軸が周波数に関する情報を示します。ヒストグラムを作成するには、最初の手順として範囲のビンを作成し、次に値の範囲全体を一連の間隔に分配し、各間隔に入る値を数えます。ビンは、変数の連続した重複しない間隔として明確に識別されます。の ヒスト() 関数は、x のヒストグラムを計算して作成するために使用されます。
Python Matplotlib ヒストグラム
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.hist(df['SepalLengthCm']) # Title to the plot plt.title('Histogram') # Adding the legends plt.legend(['SepalLengthCm']) plt.show() 出力:
matplotlib ライブラリを使用したヒストプロット
散布図
散布図は変数間の関係を観察するために使用され、ドットを使用して変数間の関係を表します。の 散布() matplotlib ライブラリのメソッドは、散布図を描画するために使用されます。
Python Matplotlib 散布図
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.scatter(df['Species'], df['SepalLengthCm']) # Title to the plot plt.title('Scatter Plot') # Adding the legends plt.legend(['SepalLengthCm']) plt.show() 出力:
matplotlib ライブラリを使用した散布図
箱ひげ図
あ 箱ひげ図 ,相関は箱ひげ図とも呼ばれます。これは、データ分布を測定する場合に非常に優れた視覚的表現です。中央値、外れ値、四分位数を明確にプロットします。データ分布を理解することも、より適切なモデル構築につながる重要な要素です。データに外れ値がある場合、箱ひげ図を使用して外れ値を特定し、必要なアクションを実行することをお勧めします。箱ひげ図は、データがどのように分散されているかを示します。チャートには通常 5 つの情報が含まれます
- 最小値はチャートの左端、左の「ひげ」の端に表示されます。
- 最初の四分位である Q1 は、ボックスの左端 (左のひげ) です。
- 中央値はボックスの中央に線として表示されます
- 第 3 四分位、Q3、ボックスの右端に表示 (右ひげ)
- 最大値はボックスの右端にあります
箱ひげ図の表現
四分位範囲
箱ひげ図の図解
Python Matplotlib 箱ひげ図
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.boxplot(df['SepalWidthCm']) # Title to the plot plt.title('Box Plot') # Adding the legends plt.legend(['SepalWidthCm']) plt.show() 出力:
matplotlib ライブラリを使用した箱ひげ図
相関ヒートマップ
2-D ヒートマップは、現象の大きさを色の形で表現するのに役立つデータ視覚化ツールです。相関ヒートマップは、2 つの離散次元間の 2D 相関行列を示すヒートマップであり、色付きのセルを使用して通常は単色スケールのデータを表します。最初の次元の値はテーブルの行として表示され、2 番目の次元は列として表示されます。セルの色は、寸法値と一致する測定値の数に比例します。これにより、パターンが読みやすくなり、同じデータ内の違いや変動が強調表示されるため、相関ヒートマップはデータ分析に最適です。相関ヒートマップは、通常のヒートマップと同様に、カラーバーによってデータが読みやすく、理解しやすくなります。
注記: 相関ヒートマップを生成するには、ここでのデータを corr() メソッドで渡す必要があります。また、corr() 自体は、相関ヒートマップの生成中に役に立たない列を削除し、使用できる列を選択します。
Python Matplotlib 相関ヒートマップ
Python3import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv('Iris.csv') plt.imshow(df.corr() , cmap = 'autumn' , interpolation = 'nearest' ) plt.title('Heat Map') plt.show() 出力:
matplotlib ライブラリを使用したヒートマップ
データ視覚化の詳細については、以下のチュートリアルを参照してください。
- 注記: Iris データセットを使用します。
データセットに関する情報の取得
形状パラメータを使用してデータセットの形状を取得します。
データフレームの形状
Python3df.shape出力:
(150, 6)データフレームには 6 列と 150 行が含まれていることがわかります。
注記: Iris データセットを使用します。
データセットに関する情報の取得
次に、列とそのデータ型についても見てみましょう。このために、 情報() 方法。
データセットに関する情報
Python3df.info()出力:
![]()
データセットに関する情報
カテゴリ データが含まれるのは 1 つの列のみで、他のすべての列は Null 以外のエントリを持つ数値型であることがわかります。
を使用して、データセットの統計的な概要を簡単に取得しましょう。 説明する() 方法。 description() 関数は、極値、データ ポイントの数、標準偏差などの基本的な統計計算をデータセットに適用します。欠損値や NaN 値は自動的にスキップされます。 description() 関数は、データの分布をよく把握します。
データセットの説明
Python3df.describe()出力:
![]()
データセットについての説明
各列の数とその平均値、標準偏差、最小値および最大値を確認できます。
欠損値のチェック
データに欠損値が含まれているかどうかを確認します。 1 つ以上の項目または単位全体について情報が提供されていない場合、欠損値が発生する可能性があります。を使用します。 無効である() 方法。
欠損値のPythonコード
Python3df.isnull().sum()出力:
![]()
データセット内の欠損値
どの列にも欠損値がないことがわかります。
重複のチェック
データセットに重複が含まれているかどうかを確認してみましょう。パンダ ドロップ_重複() このメソッドは、データ フレームから重複を削除するのに役立ちます。
欠損値に対するパンダ関数
Python3data = df.drop_duplicates(subset ='Species',) data出力:
![]()
データセット内の重複値の削除
固有の種は 3 つだけであることがわかります。データセットのバランスが取れているかどうか、つまりすべての種に同量の行が含まれているかどうかを見てみましょう。を使用します。 Series.value_counts() 関数。この関数は、一意の値の数を含む Series を返します。
列内の値カウントの Python コード
Python3df.value_counts('Species')出力:
![]()
データセット内の値の数
すべての種に同じ量の行が含まれていることがわかります。そのため、エントリを削除しないでください。
変数間の関係
がく片の長さとがく片の幅の関係、および花弁の長さと花弁の幅の関係も見ていきます。
がく片の長さと幅の比較
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(x='SepalLengthCm', y='SepalWidthCm', hue='Species', data=df, ) # Placing Legend outside the Figure plt.legend(bbox_to_anchor=(1, 1), loc=2) plt.show()出力:
![]()
matplotlib ライブラリを使用した散布図
上記のプロットから、次のことが推測できます –
- 種セトサはがく片の長さは短くなりますが、がく片の幅は大きくなります。
- 癜風種はがく片の長さと幅の点で他の 2 種の中間に位置します。
- 種バージニカはがく片の長さは大きくなりますが、がく片の幅は小さくなります。
花びらの長さと幅の比較
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(x='PetalLengthCm', y='PetalWidthCm', hue='Species', data=df, ) # Placing Legend outside the Figure plt.legend(bbox_to_anchor=(1, 1), loc=2) plt.show()出力:
![]()
サクトプロットの花びらの長さ
上記のプロットから、次のことが推測できます –
- セトサ種は花びらの長さと幅が小さいです。
- 癜風種は、花弁の長さと幅の点で他の 2 種の中間に位置します。
- 種のバージニカは花びらの長さと幅が最大です。
ペアプロットを使用して、すべての列の関係をプロットしてみましょう。多変量解析に使用できます。
ペアプロットの Python コード
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df.drop(['Id'], axis = 1), hue='Species', height=2)出力:
データセットのペアプロット
このプロットからは、Seotsa 種の花びらの幅と長さが最小であるなど、さまざまなタイプの関係がわかります。また、がく片の長さは最も短いですが、がく片の幅はより大きくなります。このような情報は、他のあらゆる種についても収集できます。
相関関係の処理
パンダ データフレーム.corr() データフレーム内のすべての列のペアごとの相関を見つけるために使用されます。 NA 値はすべて自動的に除外されます。データフレーム内の数値以外のデータ型の列は無視されます。
例:
Python3data.corr(method='pearson')出力:
![]()
データセット内の列間の相関関係
ヒートマップ
ヒートマップは、データセットを 2 次元の色として分析するために使用されるデータ視覚化手法です。基本的に、データセット内のすべての数値変数間の相関関係を示します。より簡単に言うと、ヒートマップを使用して上記で見つかった相関関係をプロットできます。
ヒートマップ用のPythonコード
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(df.corr(method='pearson').drop( ['Id'], axis=1).drop(['Id'], axis=0), annot = True); plt.show()出力:
![]()
データセット内の相関関係のヒートマップ
上のグラフから、次のことがわかります。
- 花びらの幅と長さには高い相関があります。
- 花びらの長さとがく片の幅には良い相関があります。
- 花びらの幅とがく片の長さには良い相関があります。
外れ値の処理
外れ値は、残りの (いわゆる通常の) オブジェクトから大きく逸脱したデータ項目/オブジェクトです。これらは、測定エラーまたは実行エラーによって発生する可能性があります。外れ値検出のための分析は、外れ値マイニングと呼ばれます。外れ値を検出するにはさまざまな方法があり、データ フレームの削除プロセスは、パンダのデータフレームからデータ項目を削除するのと同じです。
アヤメのデータセットを考えて、SepalWidthCm 列の箱ひげ図をプロットしてみましょう。
箱ひげ図のPythonコード
Python3# importing packages import seaborn as sns import matplotlib.pyplot as plt # Load the dataset df = pd.read_csv('Iris.csv') sns.boxplot(x='SepalWidthCm', data=df)出力:
![]()
がく片幅列の箱ひげ図
上のグラフでは、4 より上の値と 2 より下の値が外れ値として機能しています。
外れ値の除去
外れ値を削除するには、データセット内の正確な位置を使用してデータセットからエントリを削除するのと同じプロセスに従う必要があります。これは、外れ値を検出する上記のすべての方法では、最終的には外れ値の定義を満たすすべてのデータ項目のリストが結果として得られるためです。使用される方法に従って。
を使用して外れ値を検出します IQR そしてそれらを削除します。また、箱ひげ図を描画して、外れ値が除去されているかどうかを確認します。
Python3# Importing import sklearn from sklearn.datasets import load_boston import pandas as pd import seaborn as sns # Load the dataset df = pd.read_csv('Iris.csv') # IQR Q1 = np.percentile(df['SepalWidthCm'], 25, interpolation = 'midpoint') Q3 = np.percentile(df['SepalWidthCm'], 75, interpolation = 'midpoint') IQR = Q3 - Q1 print('Old Shape: ', df.shape) # Upper bound upper = np.where(df['SepalWidthCm']>= (Q3+1.5*IQR)) # 下限 lower = np.where(df['SepalWidthCm'] <= (Q1-1.5*IQR)) # Removing the Outliers df.drop(upper[0], inplace = True) df.drop(lower[0], inplace = True) print('New Shape: ', df.shape) sns.boxplot(x='SepalWidthCm', data=df)出力:
![]()
Seaborn ライブラリを使用した箱ひげ図
EDA の詳細については、以下のチュートリアルを参照してください。