Руководство по обработке данных временных рядов ряда исчезающих видов рыб с 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 ❤

Рекомендации

  1. Photo Ark Home Rock Bass | Национальное географическое общество
  2. https://sparkbyexamples.com/spark/spark-difference-between-two-timestamps-in-seconds-minutes-and-hours/

Больше контента на plainenglish.io