Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этой статьи вы узнаете, как выполнять анализ аналитических данных с помощью Открытых наборов данных Azure и Apache Spark. В этой статье анализируется набор данных о такси в Нью-Йорке. Данные доступны через открытые наборы данных Azure. Это подмножество набора данных содержит сведения о поездках на такси: информацию о каждой поездке, времени начала и окончания и расположениях, стоимости и других интересных атрибутах.
Работая с этой статьей, вы выполните следующие задачи:
- Скачивание и подготовка данных
- Анализ данных
- Визуализация данных
Необходимые компоненты
Получение подписки Microsoft Fabric. Или зарегистрируйте бесплатную пробную версию Microsoft Fabric.
Войдите в Microsoft Fabric.
Используйте переключатель интерфейса в левой нижней части домашней страницы, чтобы перейти на Fabric.
Скачивание и подготовка данных
Чтобы начать, скачайте набор данных такси Нью-Йорка (NYC) и подготовьте данные.
Создайте записную книжку с помощью PySpark. Инструкции см. в разделе Создание записной книжки.
Примечание.
Ядро PySpark позволяет не задавать контексты явным образом. Контекст Spark будет создан автоматически при выполнении первой ячейки кода.
В этой статье вы используете несколько различных библиотек для визуализации набора данных. Чтобы выполнить этот анализ, импортируйте следующие библиотеки:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd
Так как необработанные данные имеют формат Parquet, вы можете использовать контекст Spark для извлечения файла в память в качестве кадра данных напрямую. Используйте API Open Datasets для извлечения данных и создания кадра данных Spark. Чтобы определить типы данных и схему, используйте схему Кадра данных Spark для свойств чтения .
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 или массив NumPy. Чтобы получить кадр данных Pandas, используйте команду
toPandas()
для преобразования кадра данных.# 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()