3.1.2 データの探索
データを調べ、データの品質を理解して評価します。 このステージでは、データを評価してデータ内のデータ型およびノイズを識別します。 欠損値および数値外れ値を探します。
データの理解と準備
この段階では、次のステップを使用してデータセットを明確に理解することに重点を置きます:
Import necessary libraries
: 基本的なPythonライブラリをOracle Machine Learning (OML)とともにロードします。Load the dataset
: 初期探索のためにデータセットをインポートします。Create a DataFrame proxy object
: データ操作を簡略化するために、プロキシ・オブジェクトを使用して表を表します。Perform initial analysis
: データセットの構造(シェイプ、データ型、欠損値、質的特徴のカーディナリティなど)を調べます。
これらのステップは、より深いデータ探索および前処理のための強固な基盤を提供します。
データの準備および理解のために、次のステップを実行します:
-
必要なライブラリのインポート
%python
インタプリタ・パラグラフで次のスクリプトを実行して、oml
モジュールとPandaのモジュールをインポートし、表示オプションを設定します:import oml import ssl import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings warnings.simplefilter(action='ignore', category=FutureWarning)
-
データセットのロード
url="https://objectstorage.us-ashburn-1.oraclecloud.com/n/adwc4pm/b/OML_Data/o/brooklyn_sales.csv" ssl._create_default_https_context = ssl._create_unverified_context brooklyn_sales = pd.read_csv(url, engine='python') z.show(brooklyn_sales.head())
図3-1 生のBrooklynデータ
-
欠落値の置換(NaNをNoneに置換)
df = brooklyn_sales.apply(lambda x: x.replace(np.nan, None) if x.dtypes == 'object' else x)
-
データ型に基づく欠損値の計算
最初に、コードによって、完全に空であるか、欠落している値のみを含む列が削除されます。 次に、残りの各列を調べ、欠落していない値のデータ型をチェックし、欠落しているデータを列のタイプに基づいて最も適切な置換で入力します。# Drop columns where all values are missing brooklyn_sales1 = brooklyn_sales.dropna(axis=1, how="all") d = {} # Iterate through each column and fill missing values based on its data type for col in brooklyn_sales1: x = brooklyn_sales1[col].dropna().tolist() # Get non-null values to check the column type if len(x) > 0: # For text columns, replace missing values with an empty string if isinstance(x[0], str): y = brooklyn_sales1[col].fillna("") # For integer columns, missing values are left unchanged elif isinstance(x[0], int): y = brooklyn_sales1[col] # For other numeric columns (e.g., floats), replace missing values with 0.0 else: y = brooklyn_sales1[col].fillna(float(0)) d[col] = y # Store the modified column # Convert the dictionary back into a DataFrame brooklyn_sales2 = pd.DataFrame.from_dict(d) # Print the shape of the updated DataFrame print(brooklyn_sales2.shape)
(390883, 110)
-
データ・フレーム・プロキシ・オブジェクトの作成
try: oml.drop(table = 'BROOKLYN') except: pass # Create a persistent table named BROOKLYN in the Oracle database BROOKLYN = oml.create(brooklyn_sales2, table="BROOKLYN")
-
データ・フレームの分析
シェイプ、データ型、欠損値を確認して解釈し、カーディナリティが低い列を検索します。- DataFrameのシェイプ:
BROOKLYN.shape
(390883, 110)
- 列のデータ型:
BROOKLYN.dtypes
ID <class 'oml.core.integer.Integer'> borough <class 'oml.core.integer.Integer'> neighborhood <class 'oml.core.string.String'> building_class_category <class 'oml.core.string.String'> tax_class <class 'oml.core.string.String'> ... PFIRM15_FL <class 'oml.core.float.Float'> Version <class 'oml.core.string.String'> MAPPLUTO_F <class 'oml.core.float.Float'> SHAPE_Leng <class 'oml.core.float.Float'> SHAPE_Area <class 'oml.core.float.Float'> Length: 110, dtype: object
- 値が欠落している列(>75%):
def percent_missing(dat): per_miss={} large_miss_columns=[] for i in dat.columns: l=len(dat) a=100-(dat[i].count()/l)*100 if a>=75: per_miss[i]=round(a) return per_miss z.show(pd.DataFrame(list(percent_missing(BROOKLYN).items()), columns=["Columns", "% Missing"]))
図3-2 列とその欠落率を表示します。
- カーディナリティが低い列を識別します:
def unique_values_less_10(data): cols=[] for x in data.columns: unique_values=data[x].nunique() if unique_values< 10: cols.append(x) return cols print(unique_values_less_10(BROOKLYN))
['borough', 'tax_class_at_sale', 'Borough', 'SanitBoro', 'ZoneDist4', 'Overlay1', 'Overlay2', 'SPDist2', 'SPDist3', 'LtdHeight', 'SplitZone', 'Easements', 'OwnerType', 'AreaSource', 'Ext', 'ProxCode', 'IrrLotCode', 'BsmtCode', 'BoroCode', 'CondoNo', 'ZMCode', 'PLUTOMapID', 'FIRM07_FLA', 'PFIRM15_FL', 'Version', 'MAPPLUTO_F']
- DataFrameのシェイプ: