Руководство по обработке данных временных рядов ряда исчезающих видов рыб с 1992 года и далее с использованием PySpark.
PySpark удобен, когда данных очень много. В этой статье мы исследуем споры временных рядов ряда исчезающих видов рыб с 1992 года, используя PySpark. Набор данных взят из Kaggle.
Импорт библиотек:
import pandas as pd from pyspark.sql import SparkSession from pyspark.context import SparkContext from pyspark.sql.functions import * from datetime import date, timedelta, datetime
Импорт данных:
df = spark.read.csv('Combined_Less.csv', header=True, inferSchema=True) df = df[['species', 'state','year', 'month', 'ABUND']] df = df.withColumnRenamed('ABUND', 'abundance')
Посмотрите на данные:
Преобразование года и месяца в метку времени
Чтобы поместить год и месяц в один столбец метки времени, используйте concat_ws.
df = df.withColumn("year_month", concat_ws('-', col('year'), col('month'))) df = df.drop('year', 'month') df = df.withColumn('year_month', to_timestamp('year_month')) df = df.drop_duplicates()
Выберите год данных 2013 и далее
Чтобы просмотреть данные за год или позже, например за 2013 год, отфильтруйте данные с помощью unix_timestamp.
df.filter((col('year_month')>= unix_timestamp( lit('2013-01-01 00:00:00')).cast('timestamp')) ).show()
Дни Разница между годом_месяцем, зарегистрированным для вида
Если вы хотите получить year_month по видам и штатам, для этого удобна оконная функция PySpark. Кроме того, приведение столбца к типу long и вычитание previous_datetime из столбца year_month дает разницу в метках времени в секундах. Чтобы получить разницу в днях, разделите результат на 24 * 3600, что равно 86400.
from pyspark.sql.window import Window v = Window.partitionBy( "species", "state").orderBy("year_month") fish_df = df.withColumn("previous_datetime", lag(col('year_month')).over(v)) fish_df = fish_df.withColumn('days_difference', (((col("year_month")).cast("long") - col('previous_datetime').cast("long")/86400))
Вы увидите, что разница в днях для первой строки ‘Alosa chyrsochloris’ равна нулю, поскольку в данных нет месяца предыдущего года до 2004–07–01 00:00:00.
Больше рыбы? давайте рассмотрим ниже:
Являются ли Ambloplites Rupestris исчезающими видами?
Ambloplites Rupestris, также известная как каменный окунь, в настоящее время отмечена как наименее обеспокоенная в статусе Красного списка МСОП. Чтобы узнать, как обстоят дела с обилием каменного окуня, получите вид Ambloplites Rupestris, используя функцию фильтра. Поскольку на веб-странице набора данных нет дальнейшего описания отсутствующих данных, в этом руководстве мы принимаем нулевые значения как изобилие 0.
data_df = fish_df.filter( fish_df['species']=='Ambloplites rupestris') data_df = data_df.withColumn('abundance', when(col('abundance').isNull(),0) .otherwise(col('abundance'))) data_df = data_df[['species','year_month','abundance']]
В течение одного и того же года_месяца происходит несколько подсчетов численности, поэтому мы находим общую численность по году_месяцу. Данные преобразуются в фрейм данных Pandas для построения графика.
ambloplites_df = data_df.toPandas() ambloplites_df['year_month'] = pd.to_datetime( ambloplites_df['year_month']) data = ambloplites_df.groupby("year_month").sum()
Нанесение на график:
x = data['year_month'] y = data['abundance'] fig, ax = plt.subplots(figsize=(15,10)) ax.plot_date(x, y, markerfacecolor='Green') fig.autofmt_xdate()
Вот общая численность Ambloplites Rupestris с 1992 года.
Короткая заметка
Надеюсь, вам понравилось это руководство по обработке временных рядов с использованием Pyspark и Pandas ❤
Рекомендации
- Photo Ark Home Rock Bass | Национальное географическое общество
- https://sparkbyexamples.com/spark/spark-difference-between-two-timestamps-in-seconds-minutes-and-hours/
Больше контента на plainenglish.io