チャレンジ:初めてのデータクリーニングタスク
メニューを表示するにはスワイプしてください
データパイプラインは通常、**Load(読み込み)、Clean(クリーン)、Transform(変換)、Save(保存)**というパターンに従います。このミニプロジェクトでは、これらのステップを特定のデータセットに適用し、生データからビジネスレポートに適したクリーンで集約されたサマリーへと進めます。
セクション4のまとめとして、これまで学んだ内容を実践しましょう。これらのステップは任意のデータセットに適用できますが、ここでは有名なDiamondsデータセットを使って解決方法を示します。このデータセットには、約54,000個のダイヤモンドの価格や属性(カット、カラー、クラリティなど)が含まれています。
動画に沿って同じデータセット(Kaggleで広く入手可能なdiamonds.csv)を使い、自分でタスクを実施することもできますし、任意のデータセットを選んで同じ原則を適用し、同様の目標を設定することも可能です。
目的を読んだ後、理想的にはビデオを一時停止するか、テキストの読書を中断してください。Databricksの知識にどれだけ自信があっても、自分自身でプロジェクトに挑戦してみてください。簡単な試みでも、解答を読むだけよりはるかに有益です。時間が足りない場合は、解答を読み進めて、後日自宅で練習として試してみてください。
目的
「Premium」カットのダイヤモンドについて、色ごとにグループ化した平均価格と平均カラット数を特定し、平均価格が4,000ドルを超える高価値の結果のみを新しいテーブルに保存すること。
ステップ1:データの読み込みと確認
まず、データを読み込み、スキーマを確認して、価格とカラットが数値として認識されていることを確認すること。
# Assuming the diamonds CSV was uploaded to a Volume
df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/Volumes/main/default/my_volume/diamonds.csv")
df.printSchema()
ステップ2:フィルタリングと選択
すべてのカラムは必要なく、このタスクでは「Premium」ダイヤモンドのみが対象。
# Filter for Premium cut and select relevant columns
premium_df = df.filter(df.cut == "Premium").select("color", "price", "carat")
ステップ 3: 集計とグループ化
平均値の計算。正確な計算のために pyspark.sql.functions ライブラリを使用。
from pyspark.sql import functions as F
# Group by color and calculate averages
summary_df = premium_df.groupBy("color").agg(
F.avg("price").alias("avg_price"),
F.avg("carat").alias("avg_carat")
)
.alias() は、クエリ結果のカラム名を一時的に変更する機能。実際のテーブルは変更されず、出力時のカラム表示名のみが変わる。
SQL の AS と同様 — SELECT price AS price_in_usd。
カラム名が長い場合や分かりにくい場合、または計算列に分かりやすい名前を付けたい場合に便利。
ステップ4:最終フィルターとソート
平均価格が4,000を超える高価値カテゴリのみを保持します。また、平均価格が最も高いものが上位にくるように結果をソートします。
final_df = summary_df.filter(F.col("avg_price") > 4000).orderBy("avg_price", ascending=False)
display(final_df)
F.col() 関数にはまだ出会っていないかもしれません。
F.col() は、PySparkでカラム名を指定して参照する方法です。F は pyspark.sql.functions のエイリアスで、ノートブックの冒頭で次のようにインポートします:
from pyspark.sql import functions as F
df.select(F.col("price"))
多くの場合、カラム名を文字列で指定するのと同じですが、F.col() を使うことで、そのまま演算をチェーンできる利点があります:
F.col("price") * 1.1
F.col("cut").alias("diamond_cut")
F.col("price") は「priceカラムを、操作可能なオブジェクトとして取得する」という意味合いです。
ステップ5:結果の保存
最後に、このクリーンアップ済み「High-Value Premium Diamonds」レポートをカタログにコミットし、分析チームが利用できるようにします。
final_df.write.mode("overwrite").saveAsTable("main.default.high_value_premium_diamonds")
1. ステップ3で、なぜ集約内で .alias() メソッドを使用したのですか?
2. このプロジェクトを自身のデータセットに適用したい場合、最初にどの部分のコードを変更する必要がありますか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください