หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ในบทความนี้ คุณจะได้เรียนรู้วิธีการวิเคราะห์ข้อมูลเชิงสํารวจโดยใช้ Azure Open Datasets และ Apache Spark บทความนี้วิเคราะห์ชุดข้อมูลแท็กซี่ของนิวยอร์ก ข้อมูลจะพร้อมใช้งานผ่านชุดข้อมูล Azure Open ชุดข้อมูลย่อยนี้ประกอบด้วยข้อมูลเกี่ยวกับการเดินทางด้วยรถแท็กซี่สีเหลือง: ข้อมูลเกี่ยวกับการเดินทางแต่ละครั้ง เวลาเริ่มต้นและสิ้นสุด และตําแหน่งที่ตั้ง ต้นทุน และแอตทริบิวต์ที่น่าสนใจอื่นๆ
ในบทความนี้ คุณ:
- ดาวน์โหลดและเตรียมข้อมูล
- วิเคราะห์ข้อมูล
- แสดงข้อมูลเป็นภาพ
ข้อกำหนดเบื้องต้น
รับการสมัครใช้งาน Microsoft Fabric หรือลงทะเบียนเพื่อทดลองใช้งาน Microsoft Fabric ฟรี
ลงชื่อเข้าใช้ Microsoft Fabric
สลับไปยัง Fabric โดยใช้ตัวสลับประสบการณ์ที่ด้านซ้ายล่างของโฮมเพจของคุณ
ดาวน์โหลดและเตรียมข้อมูล
หากต้องการเริ่มต้น ให้ดาวน์โหลด ชุดข้อมูลแท็กซี่ New York City (NYC) และเตรียมข้อมูล
สร้างสมุดบันทึกโดยใช้ PySpark สําหรับคําแนะนํา ให้ดู สร้างสมุดบันทึก
หมายเหตุ
เนื่องจากเคอร์เนล PySpark คุณไม่จําเป็นต้องสร้างบริบทอย่างชัดเจน บริบท Spark จะถูกสร้างขึ้นสําหรับคุณโดยอัตโนมัติเมื่อคุณเรียกใช้เซลล์โค้ดแรก
ในบทความนี้ คุณใช้ไลบรารีต่าง ๆ เพื่อช่วยแสดงภาพชุดข้อมูล หากต้องการทําการวิเคราะห์นี้ ให้นําเข้าไลบรารีต่อไปนี้:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pdเนื่องจากข้อมูลดิบอยู่ในรูปแบบ Parquet คุณสามารถใช้บริบท Spark เพื่อดึงไฟล์ลงในหน่วยความจําเป็น DataFrame ได้โดยตรง ใช้ API เปิดชุดข้อมูลเพื่อดึงข้อมูลและสร้าง Spark DataFrame หากต้องการอนุมานชนิดข้อมูลและเค้าร่าง ให้ใช้ Schema Spark DataFrame บน คุณสมบัติการอ่าน
from azureml.opendatasets import NycTlcYellow end_date = parser.parse('2018-06-06') start_date = parser.parse('2018-05-01') nyc_tlc = NycTlcYellow(start_date=start_date, end_date=end_date) nyc_tlc_pd = nyc_tlc.to_pandas_dataframe() df = spark.createDataFrame(nyc_tlc_pd)หลังจากอ่านข้อมูลแล้ว ให้ทําการกรองเบื้องต้นบางอย่างเพื่อล้างชุดข้อมูล คุณอาจลบคอลัมน์ที่ไม่จําเป็นออกและเพิ่มคอลัมน์ที่แยกข้อมูลสําคัญ นอกจากนี้ คุณสามารถกรองสิ่งผิดปกติภายในชุดข้อมูลได้
# Filter the dataset from pyspark.sql.functions import * filtered_df = df.select('vendorID', 'passengerCount', 'tripDistance','paymentType', 'fareAmount', 'tipAmount'\ , date_format('tpepPickupDateTime', 'hh').alias('hour_of_day')\ , dayofweek('tpepPickupDateTime').alias('day_of_week')\ , dayofmonth(col('tpepPickupDateTime')).alias('day_of_month'))\ .filter((df.passengerCount > 0)\ & (df.tipAmount >= 0)\ & (df.fareAmount >= 1) & (df.fareAmount <= 250)\ & (df.tripDistance > 0) & (df.tripDistance <= 200)) filtered_df.createOrReplaceTempView("taxi_dataset")
วิเคราะห์ข้อมูล
ในฐานะนักวิเคราะห์ข้อมูล คุณมีเครื่องมือมากมายที่พร้อมใช้งานเพื่อช่วยให้คุณสามารถแยกข้อมูลเชิงลึกจากข้อมูลได้ ในส่วนนี้ของบทความ เรียนรู้เกี่ยวกับเครื่องมือที่มีประโยชน์บางตัวที่พร้อมใช้งานภายในสมุดบันทึก Microsoft Fabric ในการวิเคราะห์นี้ คุณต้องการทําความเข้าใจปัจจัยที่ให้เคล็ดลับแท็กซี่ที่สูงขึ้นสําหรับรอบระยะเวลาที่เลือก
Apache Spark SQL เมจิก
ก่อนอื่น ทําการวิเคราะห์ข้อมูลสํารวจโดยใช้ Apache Spark SQL และคําสั่งเวทมนตร์ด้วยสมุดบันทึก Microsoft Fabric หลังจากที่คุณมีคิวรี แสดงภาพผลลัพธ์โดยใช้ความสามารถที่มีอยู่ภายในchart options
ในสมุดบันทึก ให้สร้างเซลล์ใหม่และคัดลอกโค้ดต่อไปนี้ โดยใช้คิวรีนี้ คุณสามารถทําความเข้าใจว่าปริมาณคําแนะนําโดยเฉลี่ยมีการเปลี่ยนแปลงในรอบระยะเวลาที่คุณเลือกอย่างไร คิวรีนี้ยังช่วยให้คุณระบุข้อมูลเชิงลึกที่มีประโยชน์อื่น ๆ รวมถึงจํานวนคําแนะนําต่ําสุด/สูงสุดต่อวันและจํานวนค่าเฉลี่ย
%%sql SELECT day_of_month , MIN(tipAmount) AS minTipAmount , MAX(tipAmount) AS maxTipAmount , AVG(tipAmount) AS avgTipAmount , AVG(fareAmount) as fareAmount FROM taxi_dataset GROUP BY day_of_month ORDER BY day_of_month ASCหลังจากคิวรีของคุณทํางานเสร็จสิ้น คุณสามารถแสดงภาพผลลัพธ์ได้โดยการสลับไปยังมุมมองแผนภูมิ ตัวอย่างนี้สร้างแผนภูมิเส้นโดยระบุ
day_of_monthเขตข้อมูลเป็นคีย์และavgTipAmountเป็นค่า หลังจากที่คุณทําการเลือกแล้ว เลือก นําไปใช้ เพื่อรีเฟรชแผนภูมิของคุณ
แสดงข้อมูลเป็นภาพ
นอกจากตัวเลือกการสร้างแผนภูมิสมุดบันทึกที่มีอยู่ภายในแล้ว คุณสามารถใช้ไลบรารีโอเพนซอร์สยอดนิยมเพื่อสร้างการแสดงภาพของคุณเองได้ ในตัวอย่างต่อไปนี้ ให้ใช้ Seaborn และ Matplotlib ซึ่งเป็นไลบรารี Python ที่ใช้กันทั่วไปสําหรับการแสดงภาพข้อมูล
เพื่อให้การพัฒนาง่ายขึ้นและมีราคาแพงน้อยลง ลดจํานวนตัวอย่างชุดข้อมูล ใช้ความสามารถในการสุ่มตัวอย่าง Apache Spark ที่มีอยู่แล้วภายใน นอกจากนี้ ทั้ง Seaborn และ Matplotlib ต้องการอาร์เรย์ Pandas DataFrame หรือ NumPy หากต้องการรับ DataFrame ของ
toPandas()Pandas ให้ใช้คําสั่ง เพื่อแปลง DataFrame# To make development easier, faster, and less expensive, downsample for now sampled_taxi_df = filtered_df.sample(True, 0.001, seed=1234) # The charting package needs a Pandas DataFrame or NumPy array to do the conversion sampled_taxi_pd_df = sampled_taxi_df.toPandas()คุณสามารถทําความเข้าใจการแจกจ่ายเคล็ดลับในชุดข้อมูลได้ ใช้ Matplotlib เพื่อสร้างฮิสโทแกรมที่แสดงการแจกแจงจํานวนคําแนะนําและจํานวน จากการแจกแจง คุณจะเห็นว่าเคล็ดลับถูกบิดเบริดไปตามจํานวนที่น้อยกว่าหรือเท่ากับ $10
# Look at a histogram of tips by count by using Matplotlib ax1 = sampled_taxi_pd_df['tipAmount'].plot(kind='hist', bins=25, facecolor='lightblue') ax1.set_title('Tip amount distribution') ax1.set_xlabel('Tip Amount ($)') ax1.set_ylabel('Counts') plt.suptitle('') plt.show()
ถัดไป ลองทําความเข้าใจความสัมพันธ์ระหว่างเคล็ดลับสําหรับการเดินทางที่กําหนดและวันในสัปดาห์ ใช้ Seaborn เพื่อสร้างแผนภูมิกล่องที่สรุปแนวโน้มสําหรับแต่ละวันของสัปดาห์
# View the distribution of tips by day of week using Seaborn ax = sns.boxplot(x="day_of_week", y="tipAmount",data=sampled_taxi_pd_df, showfliers = False) ax.set_title('Tip amount distribution per day') ax.set_xlabel('Day of Week') ax.set_ylabel('Tip Amount ($)') plt.show()
สมมติฐานอื่นอาจเป็นเพราะมีความสัมพันธ์เชิงบวกระหว่างจํานวนผู้โดยสารและจํานวนทิปแท็กซี่รวม เพื่อยืนยันความสัมพันธ์นี้ ให้เรียกใช้รหัสต่อไปนี้เพื่อสร้างการลงจุดกล่องที่แสดงการกระจายเคล็ดลับสําหรับจํานวนผู้โดยสารแต่ละราย
# How many passengers tipped by various amounts ax2 = sampled_taxi_pd_df.boxplot(column=['tipAmount'], by=['passengerCount']) ax2.set_title('Tip amount by Passenger count') ax2.set_xlabel('Passenger count') ax2.set_ylabel('Tip Amount ($)') ax2.set_ylim(0,30) plt.suptitle('') plt.show()
สุดท้าย สํารวจความสัมพันธ์ระหว่างยอดเงินค่าโดยสารและจํานวนคําแนะนํา จากผลลัพธ์คุณจะเห็นว่ามีข้อสังเกตหลายอย่างที่ผู้คนไม่ได้ให้คําแนะนํา อย่างไรก็ตาม มีความสัมพันธ์เชิงบวกระหว่างค่าโดยสารโดยรวมและจํานวนทิป
# Look at the relationship between fare and tip amounts ax = sampled_taxi_pd_df.plot(kind='scatter', x= 'fareAmount', y = 'tipAmount', c='blue', alpha = 0.10, s=2.5*(sampled_taxi_pd_df['passengerCount'])) ax.set_title('Tip amount by Fare amount') ax.set_xlabel('Fare Amount ($)') ax.set_ylabel('Tip Amount ($)') plt.axis([-2, 80, -2, 20]) plt.suptitle('') plt.show()