このチュートリアルでは、データの読み込みからデータ視覚化による分析情報の生成まで、Azure Databricks ノートブックで Python を使用して探索的データ分析 (EDA) を実行する基本について説明します。
このチュートリアルで使用するノートブックでは、グローバルなエネルギーと排出量のデータを調べ、データの読み込み、クリーンアップ、探索を行う方法を示します。
例のノートブック を使用するか、独自のノートブックを最初から作成できます。
EDA とは
探索的データ分析 (EDA) は、次のデータの分析と視覚化を含むデータ サイエンス プロセスの重要な最初のステップです。
- その主な特徴を明らかにします。
- パターンと傾向を特定します。
- 異常を検出します。
- 変数間のリレーションシップを理解する。
EDA はデータセットに関する分析情報を提供し、さらなる統計分析やモデリングに関する情報に基づいた意思決定を促進します。
Azure Databricks ノートブックを使用すると、データ サイエンティストは使い慣れたツールを使用して EDA を実行できます。 たとえば、このチュートリアルでは、次のような一般的な Python ライブラリを使用してデータを処理およびプロットします。
- Numpy: 数値計算のための基本的なライブラリであり、配列、マトリックス、およびこれらのデータ構造を操作するための幅広い数学関数のサポートを提供します。
- pandas: NumPy の上に構築された強力なデータ操作および分析ライブラリで、構造化データを効率的に処理するための DataFrames などのデータ構造を提供します。
- Plotly: データ分析とプレゼンテーションのための高品質でインタラクティブな視覚化を作成できる対話型のグラフ作成ライブラリです。
- Matplotlib: Python で静的、アニメーション、対話型の視覚化を作成するための包括的なライブラリです。
Azure Databricks には、テーブル内のデータのフィルター処理や検索、視覚化の拡大など、ノートブック出力内のデータを探索するのに役立つ組み込みの機能も用意されています。 Databricks Assistant を使用して、EDA のコードを記述することもできます。
開始する前に
このチュートリアルを完了するには、次のものが必要です。
- 既存のコンピューティング リソースを使用するか、新しいコンピューティング リソースを作成するためのアクセス許可が必要です。 「コンピューティング」を参照してください。
- [省略可能]このチュートリアルでは、アシスタントを使用してコードを生成する方法について説明します。 アシスタントを使用するには、アカウントとワークスペースでアシスタントを有効にする必要があります。 詳細については、「 Databricks Assistant の使用 」を参照してください。
データセットをダウンロードして CSV ファイルをインポートする
このチュートリアルでは、世界のエネルギーと排出量データを調べることで、EDA の手法について説明します。 手順を踏むには、KaggleからOur World in Dataによるエネルギー消費データセットをダウンロードします。 このチュートリアルでは、owid-energy-data.csv
ファイルを使用します。
データセットを Azure Databricks ワークスペースにインポートするには:
ワークスペースのサイドバーで、ワークスペース クリックしてワークスペース ブラウザーに移動します。
CSV ファイル (
owid-energy-data.csv
) をワークスペースにドラッグ アンド ドロップします。これにより、Import モーダルが開きます。 ターゲット フォルダー ここに一覧表示されていることに注意してください。 これはワークスペース ブラウザーの現在のフォルダーに設定され、インポートされたファイルの保存先になります。
インポートをクリックする。 ファイルは、ワークスペース内のターゲット フォルダーに表示されます。
後でファイルをノートブックに読み込むには、ファイル パスが必要です。 ワークスペース ブラウザーでファイルを見つけます。 ファイル パスをクリップボードにコピーするには、ファイル名を右クリックし、[URL/パスのコピー] >[完全なパス]を選択します。
新しいノートブックを作成する
ユーザーのホーム フォルダーに新しいノートブックを作成するには、サイドバー [新しい] をクリックし、メニューから [ノートブック 選択します。
上部のノートブックの名前の横にあるノートブックの既定の言語として Python を選択します。
ノートブックの作成と管理の詳細については、「ノートブックの管理」を参照してください。
この記事の各コード サンプルをノートブックの新しいセルに追加します。 または、サンプル のノートブック を使用して、チュートリアルに従います。
CSV ファイルを読み込む
新しいノートブック セルで、CSV ファイルを読み込みます。 これを行うには、numpy
と pandas
をインポートします。 これらは、データ サイエンスと分析に役立つ Python ライブラリです。
処理と視覚化を容易にするために、データセットから pandas DataFrame を作成します。 以下のファイル パスを、先ほどコピーしたパスに置き換えます。
import numpy as np
import pandas as pd # Data processing, CSV file I/O (e.g. pd.read_csv)
df=pd.read_csv('/Workspace/Users/demo@databricks.com/owid-energy-data.csv') # Replace the file path here with the workspace path you copied earlier
セルを実行します。 出力は、各列とその型のリストを含む pandas DataFrame を返す必要があります。
データを理解する
データセットの基本を理解することは、データ サイエンス プロジェクトにとって非常に重要です。 これには、目の前のデータの構造、型、および品質を理解する必要があります。
Azure Databricks ノートブックでは、display(df)
コマンドを使用してデータセットを表示できます。
データセットには 10,000 行を超える行があるため、このコマンドは切り捨てられたデータセットを返します。 各列の左側には、列のデータ型が表示されます。 詳細については、「列の書式設定」を参照してください。
データ分析情報に Pandas を使用する
データセットを効果的に理解するには、次の pandas コマンドを使用します。
df.shape
コマンドは DataFrame のディメンションを返し、行と列の数の概要を簡単に示します。df.dtypes
コマンドは、各列のデータ型を提供し、処理するデータの種類を理解するのに役立ちます。 結果テーブルの各列のデータ型を確認することもできます。df.describe()
コマンドは、平均、標準偏差、パーセンタイルなどの数値列の記述統計を生成します。これは、パターンの識別、異常の検出、データの分布の把握に役立ちます。
データ プロファイルを生成する
注
Databricks Runtime 9.1 LTS 以降で使用できます。
Azure Databricks ノートブックには、組み込みのデータ プロファイル機能が含まれています。 Azure Databricks 表示関数を使用して DataFrame を表示する場合は、テーブル出力からデータ プロファイルを生成できます。
# Display the DataFrame, then click "+ > Data Profile" to generate a data profile
display(df)
出力 +>テーブル の横にある [データ プロファイル] をクリックします。 これにより、DataFrame 内のデータのプロファイルを生成する新しいコマンドが実行されます。
データ プロファイルには、数値、文字列、および日付列の概要統計と、各列の値分布のヒストグラムが含まれます。 プログラムでデータ プロファイルを生成することもできます。集計コマンド (dbutils.data.summarize) を参照してください。
データをクリーンアップする
データのクリーニングは、データセットが正確で一貫性があり、意味のある分析の準備ができていることを確認するための EDA の重要なステップです。 このプロセスには、データを分析する準備ができていることを確認するためのいくつかの重要なタスクが含まれます。これには、次のものが含まれます。
- 重複データの識別と削除。
- 欠損値の処理。特定の値に置き換えたり、影響を受ける行を削除したりする必要があります。
- 一貫性を確保するために、変換と変換を通じてデータ型を標準化する (文字列を
datetime
に変換するなど)。 また、データを簡単に操作できる形式に変換することもできます。
このクリーニングフェーズは、データの品質と信頼性を向上させ、より正確で洞察に富んだ分析を可能にするため、不可欠です。
ヒント: Databricks Assistant を使用してデータ クリーニング タスクを支援する
Databricks Assistant を使用すると、コードの生成に役立ちます。 新しいコード セルを作成し、 生成リンクをクリックするか、右上のアシスタント アイコンを使用してアシスタントを開きます。 アシスタントのクエリを入力します。 アシスタントは、Python または SQL コードを生成するか、テキストの説明を生成できます。 別の結果を得るには、[再生成] をクリックします。
たとえば、次のプロンプトを試して、アシスタントを使用してデータをクリーンアップします。
-
df
に重複する列または行が含まれているかどうかを確認します。 複製を印刷します。 次に、重複を削除します。 - 日付列の形式は何ですか?
'YYYY-MM-DD'
に変更します。 -
XXX
列は使用しません。 削除します。
Databricks Assistantからコーディングのサポートを受けることについて、参照してください。
重複するデータを削除する
データに重複する行または列があるかどうかを確認します。 その場合は、削除します。
ヒント
アシスタントを使用してコードを生成します。
プロンプトを入力してください: "df に重複する列または行が含まれているかどうかを確認してください。" 複製を印刷します。 次に、重複を削除します。 アシスタントは、次のサンプルのようなコードを生成する場合があります。
# Check for duplicate rows
duplicate_rows = df.duplicated().sum()
# Check for duplicate columns
duplicate_columns = df.columns[df.columns.duplicated()].tolist()
# Print the duplicates
print("Duplicate rows count:", duplicate_rows)
print("Duplicate columns:", duplicate_columns)
# Drop duplicate rows
df = df.drop_duplicates()
# Drop duplicate columns
df = df.loc[:, ~df.columns.duplicated()]
この場合、データセットに重複するデータはありません。
null 値または欠損値を処理する
NaN または Null 値を扱う一般的な方法は、数学処理を容易にするために 0 に置き換えます。
df = df.fillna(0) # Replace all NaN (Not a Number) values with 0
これにより、DataFrame に不足しているデータが 0 に置き換えられます。これは、後続のデータ分析や、欠損値によって問題が発生する可能性がある処理手順に役立ちます。
日付を再フォーマットする
日付は、多くの場合、さまざまなデータセットのさまざまな方法で書式設定されます。 日付形式、文字列、または整数である可能性があります。
この分析では、year
列を整数として扱います。 これを行う 1 つの方法を次のコードに示します。
# Ensure the 'year' column is converted to the correct data type (integer for year)
df['year'] = pd.to_datetime(df['year'], format='%Y', errors='coerce').dt.year
# Confirm the changes
df.year.dtype
これにより、year
列に整数の年の値のみが含まれるようにし、無効なエントリは NaT
に変換されます (時刻ではありません)。
Databricks ノートブックの出力テーブルを使用してデータを探索する
Azure Databricks には、出力テーブルを使用してデータを探索するのに役立つ組み込み機能が用意されています。
新しいセルで、display(df)
を使用してデータセットをテーブルとして表示します。
出力テーブルを使用すると、いくつかの方法でデータを探索できます。
- 特定の文字列または値のデータを検索
- 特定の条件に対するフィルター
- データセット を使用して視覚化を作成する
特定の文字列または値のデータを検索する
表の右上にある検索アイコンをクリックし、検索を入力します。
特定の条件をフィルター処理する
組み込みのテーブル フィルターを使用して、特定の条件の列をフィルター処理できます。 フィルターを作成するには、いくつかの方法があります。 フィルター結果を参照してください。
ヒント
Databricks Assistant を使用してフィルターを作成します。 テーブルの右上隅にあるフィルター アイコンをクリックします。 フィルター条件を入力します。 Databricks Assistant によってフィルターが自動的に生成されます。
データセットを使用して視覚化を作成する
出力テーブルの上部にある [視覚化]+> クリックして、視覚化エディターを開きます。
可視化する種類と列を選択してください。 エディターには、構成に基づいてグラフのプレビューが表示されます。 たとえば、次の図は、複数の折れ線グラフを追加して、時間の経過に伴うさまざまな再生可能エネルギーソースの消費量を表示する方法を示しています。
[保存] をクリックして、視覚化をタブとしてセル出力に追加します。
「新しい視覚化を作成する」を参照してください。
Python ライブラリを使用してデータを探索して視覚化する
視覚化を使用してデータを探索することは、EDA の基本的な側面です。 視覚化は、数値分析だけではすぐには明らかではない可能性があるデータ内のパターン、傾向、リレーションシップを明らかにするのに役立ちます。 散布図、横棒グラフ、折れ線グラフ、ヒストグラムなどの一般的な視覚化手法には、Plotly や Matplotlib などのライブラリを使用します。 これらのビジュアル ツールを使用すると、データ サイエンティストは異常を特定し、データ分布を理解し、変数間の相関関係を観察できます。 たとえば、散布図では外れ値を強調表示できますが、時系列プロットでは傾向や季節性を明らかにできます。
- 固有の国の配列を作成
- 上位 10 個のエミッター (200 年から 2022 年) の発光傾向をグラフで示します
- 地域 別に排出量をフィルター処理してグラフ化する
- 再生可能エネルギーシェアの成長を計算してグラフ化
- 散布図:トップエミッタ の再生可能エネルギーの影響を示す
- モデルは世界のエネルギー消費 を予測
一意の国の配列を作成する
一意の国の配列を作成して、データセットに含まれる国を調べます。 配列を作成すると、country
として一覧表示されたエンティティが表示されます。
# Get the unique countries
unique_countries = df['country'].unique()
unique_countries
出力:
分析情報:
country
列には、世界、高所得国、アジア、米国など、常に直接比較できるとは限らないさまざまな項目が含まれています。 リージョン別にデータをフィルター処理する方が便利な場合があります。
上位 10 個のエミッターの発光傾向をグラフ化する (200-2022 年)
たとえば、2000 年代に温室効果ガス排出量が最も多い 10 か国に調査を集中したいとします。 調査する年数のデータと、排出量が最も多い上位 10 か国のデータをフィルター処理し、プロットを使用して、時間の経過に伴う排出量を示す折れ線グラフを作成できます。
import plotly.express as px
# Filter data to include only years from 2000 to 2022
filtered_data = df[(df['year'] >= 2000) & (df['year'] <= 2022)]
# Get the top 10 countries with the highest emissions in the filtered data
top_countries = filtered_data.groupby('country')['greenhouse_gas_emissions'].sum().nlargest(10).index
# Filter the data for those top countries
top_countries_data = filtered_data[filtered_data['country'].isin(top_countries)]
# Plot emissions trends over time for these countries
fig = px.line(top_countries_data, x='year', y='greenhouse_gas_emissions', color='country',
title="Greenhouse Gas Emissions Trends for Top 10 Countries (2000 - 2022)")
fig.show()
出力:
分析情報:
温室効果ガスの排出量は、2000年から2022年にかけて増加傾向を示したが、その期間のわずかな減少で排出量が比較的安定している国を除く。
地域別に排出量をフィルター処理およびグラフ化する
データをリージョン別にフィルター処理し、各リージョンの総排出量を計算します。 次に、データを横棒グラフとしてプロットします。
# Filter out regional entities
regions = ['Africa', 'Asia', 'Europe', 'North America', 'South America', 'Oceania']
# Calculate total emissions for each region
regional_emissions = df[df['country'].isin(regions)].groupby('country')['greenhouse_gas_emissions'].sum()
# Plot the comparison
fig = px.bar(regional_emissions, title="Greenhouse Gas Emissions by Region")
fig.show()
出力:
インサイト:
アジアは温室効果ガス排出量が最も多い。 オセアニア、南アメリカ、アフリカは温室効果ガス排出量が最も少ない。
再生可能エネルギーシェアの成長を計算してグラフ化する
一次エネルギー消費量に対する再生可能エネルギー消費量の比率として再生可能エネルギー共有を計算する新しい特徴/列を作成します。 次に、平均再生可能エネルギーシェアに基づいて国をランク付けします。 上位 10 か国については、時間の経過と同時に再生可能エネルギーのシェアをプロットします。
# Calculate the renewable energy share and save it as a new column called "renewable_share"
df['renewable_share'] = df['renewables_consumption'] / df['primary_energy_consumption']
# Rank countries by their average renewable energy share
renewable_ranking = df.groupby('country')['renewable_share'].mean().sort_values(ascending=False)
# Filter for countries leading in renewable energy share
leading_renewable_countries = renewable_ranking.head(10).index
leading_renewable_data = df[df['country'].isin(leading_renewable_countries)]
# filtered_data = df[(df['year'] >= 2000) & (df['year'] <= 2022)]
leading_renewable_data_filter=leading_renewable_data[(leading_renewable_data['year'] >= 2000) & (leading_renewable_data['year'] <= 2022)]
# Plot renewable share over time for top renewable countries
fig = px.line(leading_renewable_data_filter, x='year', y='renewable_share', color='country',
title="Renewable Energy Share Growth Over Time for Leading Countries")
fig.show()
出力:
分析情報:
ノルウェーとアイスランドは再生可能エネルギーで世界をリードしており、その消費量の半分以上が再生可能エネルギーから供給されています。
アイスランドとスウェーデンは、再生可能エネルギーシェアで最大の成長を見た。 すべての国で急落と上昇が見られ、再生可能エネルギーシェアの成長が必ずしも直線的であるとは限らないことを示しています。 興味深いことに、中アフリカは2010年代初頭に落ち込んだが、2020年に跳ね返った。
散布図: トップ エミッターの再生可能エネルギーの影響を示す
上位 10 個のエミッターのデータをフィルター処理し、散布図を使用して、時間の経過に伴う再生可能エネルギーのシェアと温室効果ガスの排出量を確認します。
# Select top emitters and calculate renewable share vs. emissions
top_emitters = df.groupby('country')['greenhouse_gas_emissions'].sum().nlargest(10).index
top_emitters_data = df[df['country'].isin(top_emitters)]
# Plot renewable share vs. greenhouse gas emissions over time
fig = px.scatter(top_emitters_data, x='renewable_share', y='greenhouse_gas_emissions',
color='country', title="Impact of Renewable Energy on Emissions for Top Emitters")
fig.show()
出力:
分析情報:
ある国がより多くの再生可能エネルギーを使用するにつれて、温室効果ガスの排出量も多くなり、その総エネルギー消費量は再生可能エネルギーよりも速く増加します。 北米は、再生可能なシェアが増加し続ける中で、温室効果ガスの排出量が年間を通じて比較的一定であったという例外です。
世界のエネルギー消費量を予測したモデル
世界の一次エネルギー消費量を年単位で集計した後、自己回帰型の統合移動平均 (ARIMA) モデルを構築して、今後数年間のグローバルエネルギー消費量の合計を予測します。 Matplotlib を使用して、過去と予測されるエネルギー消費量をプロットします。
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
# Aggregate global primary energy consumption by year
global_energy = df[df['country'] == 'World'].groupby('year')['primary_energy_consumption'].sum()
# Build an ARIMA model for projection
model = ARIMA(global_energy, order=(1, 1, 1))
model_fit = model.fit()
forecast = model_fit.forecast(steps=10) # Projecting for 10 years
# Plot historical and forecasted energy consumption
plt.plot(global_energy, label='Historical')
plt.plot(range(global_energy.index[-1] + 1, global_energy.index[-1] + 11), forecast, label='Forecast')
plt.xlabel("Year")
plt.ylabel("Primary Energy Consumption")
plt.title("Projected Global Energy Consumption")
plt.legend()
plt.show()
出力:
分析情報:
このモデルは、世界のエネルギー消費量が増加し続ける可能性を示しています。
ノートブックの例
この記事の手順を実行するには、次のノートブックを使用します。 Azure Databricks ワークスペースにノートブックをインポートする手順については、「ノートブックをインポートする」を参照してください。
チュートリアル: EDA とグローバル エネルギー データ
ノートブック を取得する
次の手順
データセットに対して最初の探索的データ分析を実行したので、次の手順を試してください。
- その他の EDA 視覚化の例については、ノートブック の例の付録を参照してください。
- このチュートリアルの実行中にエラーが発生した場合は、組み込みのデバッガーを使用してコードをステップ実行してみてください。 「デバッグノートブック」を参照してください。
- 分析を理解できるように、ノートブック をチームと共有します。 ユーザーが付与するアクセス許可に応じて、分析をさらに進めるコードを開発したり、さらに調査するためのコメントや提案を追加したりするのに役立ちます。
- 分析を完了したら、主要な視覚化を含む ノートブック ダッシュボード または AI/BI ダッシュボード を作成して関係者と共有します。