Создание простых мониторинга Spotify Trends с библиотеками React & Data Viz

Создание простых мониторинга Spotify Trends с библиотеками React & Data Viz

18 июля 2025 г.

Привет!

Я студент программного обеспечения и начинающий разработчик. На данный момент я активно экспериментирую с визуализацией данных и изучаю новые инструменты для этого.

В этой статье я хочу поделиться небольшим, но полезным проектом, который демонстрирует, как создать одностраничное приложение для анализа данных.

Итак, вскоре говоря, здесь я покажу способ создать полный веб -проект, используя:

  • Glexmonster pivot table
  • Highcharts
  • Реагировать

Почему эти инструменты?

Flexmonster

Ранее у меня был некоторый опыт работы с Flexmonster, поэтому я уже был знаком с этим. Кроме того, я был впечатлен тем, как быстро это может работать сБольшое количество данных, и имеет интуитивно понятный пользовательский интерфейс, где отчеты можно легко сделать.

Highcharts

Для визуализации диаграммы мы будем использовать HighTharts, потому что они предлагают множество типов диаграмм и так легко объединиться с Flexmonster.

Реагировать

Может быть, самый простой, чтобы объяснить: я только что использовал React в некоторых проектах и очень любил работать с этим. Кроме того, это довольно популярная структура, которая делает разработку быстрее и сохраняет код чистой и понятной.

Тогда пришло время выбрать набор данных. Для меня этот процесс был довольно длинным. Я хотел найти что-то интересное и известное. Итак, один случайный день, слушая музыку, это поразило меня - почему бы не использовать набор данных Spotify? Все это знают, это полна данных, и кто не хочет видеть информацию о том, насколько высоко в чартах их любимый музыкант?

Как вы уже понимаете, я буду использоватьSpotify Top 200 набор данныхот Kaggle, чтобы продемонстрировать, как пользователи могут загружать и анализировать свои собственные данные CSV.

Эта статья представлена в формате учебного пособия, что позволяет легко применяться к вашим собственным проектам. Я искренне надеюсь, что это полезно.

Шаг 1: Интеграция Plexmonster Pivot

Я надеюсь, что ваши проекты React уже подготовлены, потому что теперь пришло время интегрировать его Flexmonster!

Вначале вам нужно установить CLI Flexmonster из NPM:

npm install -g flexmonster-cli

Чтобы получить Flexmonster, вы должны открыть свой проект React и запустить следующую команду:

flexmonster add js-flexmonster

После этого пакет NPM Flexmonster будет загружен на вашnode_modules/Полем

Кроме того, вы можете получить Flexmonster не только от CLI, но и от CDN, NPM, ZIP Package и Webjars. Чтобы получить больше информации об этом, вы можете прочитать об интеграции FlexmonsterздесьПолем

Поскольку я использую React в этом проекте, мне нужно добавить обертку React для Flexmonster, которую можно сделать с помощью этой команды:

NPM Установка React-Flexmonster

Шаг 2: Импорт всех необходимых модулей

Теперь, когда у нас установлен и готовый Flexmonster, давайте создадим основной интерфейс нашего приложения с помощью React.

Нам нужно импортировать все необходимые модули на вершинеApp.jsфайл:

import React, { useRef, useState, useEffect } from "react";
import { Pivot } from "react-flexmonster";
import "flexmonster/flexmonster.css";
import "./App.css";

Pivot Component от React-Flexmonster-это то, что делает интерактивную таблицу Pivot. Мы также импортируем CSS -файлы Flexmonster для применения стиля по умолчанию, и, необязательно, вы можете импортировать свои собственные стили с помощью app.css.

Шаг 3: Создание объекта отчета

Внутри нашего файла app.jsx мы создаем объект отчета, который описывает источник данных, отображение поля, макет и визуальные параметры для таблицы Pivot.

const report = {
    dataSource: {
        filename: "/spotify-top-200-dataset.csv",
        mapping: {
            artist_name: { type: "string" },
            track_name: { type: "string" },
            streams: { type: "number" },
        },
    },

Важно упомянуть имя файла-путь к файлу (файл CSV, в моем случае), это Spotify-Top-200-Dataset.csv.

Шаг 4: Настройка ломтика таблицы поворота

Затем нам нужно написать раздел Slice, который определяет, как данные сгруппированы и суммированы.

Я думал, какая информация самая лучшая для отображения, и решил выбрать художника, треков и количества потоков.

Итак, чтобы показать все это, нам нужно:

  • Включить художников и имена треков в ряды;
  • показать общее количество потоков в качестве мер;
  • Чтобы применить сортировку в порядке убывания на основе количества потоков.
  • slice: {
        rows: [
            { uniqueName: "artist_name" },
            { uniqueName: "track_name" }
        ],
        measures: [
            {
                uniqueName: "streams",
                aggregation: "sum" 
            }
            ],
        sorting: {
            column: {
                type: "desc",
                tuple: [],
                measure: "streams",
            },
        },
    },
    

Шаг 5: Настройка компонента

Теперь мы определяем компонент Pivot Grid и добавляем его на страницу:

return (
    <div id="app-container">
        <header>
            <h1>Spotify Insights</h1>
        </header>
        <main>
                <Pivot
                    key="original"
                    ref={pivotRef}
                    toolbar={true}
                    beforetoolbarcreated={customizeToolbar}
                    report={report}
                    licenseFilePath="https://cdn.flexmonster.com/jsfiddle.charts.key"
                    width="100%"
                    height="400px"
                />
            <div id="highcharts-container"></div>
        </main>
    </div>
);

Здесь мы определяем нашу поворотную таблицу, позволяя отображать панель инструментов, когда мы визуаливы. Есть также возможность скрыть панель инструментов, просто не пишите линиюпанель инструментов = {true}.

Шаг 6: Настройка панели инструментов

Теперь я предлагаю вам сделать наш проект более интерактивным, настраивая панель инструментов. Будучи более точным, добавив новую вкладку. Одним из самых больших преимуществ поворотных таблиц является то, что вы можете видеть все свои данные с разных сторон. В моем случае я больше не хотел менять «просмотр треков», поэтому эта вкладка поможет нам, потому что мы создадим совершенно новое представление, которое продемонстрирует еще больше возможностей для поворотных таблиц.

Для этого нам нужно создать функциюCumentizetoolbar:

function customizeToolbar(toolbar) {
    const tabs = toolbar.getTabs();
    toolbar.getTabs = function () {
        tabs.unshift({
            id: "fm-tab-newtab",
            title: showOriginalPivot ? "Albums" : "Tracks",
            handler: newTabHandler,
            icon: this.icons.options,
        });
        return tabs;
    };
}

В этом коде мы:

  • Получите все уже существующие вкладки, используяgetTabs ()
  • Добавьте новую вкладку, которая переключается между двумя представлениями (в нашем случае это будет две таблицы поворота)

Шаг 7: Создание второго поворотного таблицы

Для второго взгляда мы создадим таблицу поворота с альбомами. Мы должны делать те же шаги, что и раньше, но лишь немного изменить данные. Например, в Object Object мы отобразим дату выхода, название альбома, название артиста и количество потоков:

const genresReport = {
    dataSource: {
        filename: "/spotify-top-200-dataset.csv",
        mapping: {
            artist_name: { type: "string" },
            streams: { type: "number" },
            album_name: { type: "string" },
            release_date: { type: "date" }
        },
    },
    slice: {
        rows: [
            { uniqueName: "release_date.Year" },
            { uniqueName: "album_name" }
        ],
        columns: [
            {
                uniqueName: "artist_name",
                filter: {
                    measure: "streams",
                    type: "top",
                    quantity: 20
                },
                sort: "desc"
            }
        ],
        measures: [
            { uniqueName: "streams", aggregation: "sum" }
        ],
        sorting: {
            column: {
                type: "desc",
                tuple: [],
                measure: "streams"
            }
        }
    }
};

Шаг 8: Установите Hightcharts и привяжите к ней Flexmonster

Чтобы установить HighCharts, напишите следующую команду в терминале:

npm install highcharts

Затем импортируйте Highcharts в ваш проект:

import Highcharts from "highcharts";
import "flexmonster/lib/flexmonster.highcharts.js";

Подробнее о интеграции Flexmonster с высокими частями можно найтиздесьПолем

Внутри вашего App.jsx используйте USEREF и используйте эффект для подключения таблицы Pivot с HighCharts:

const pivotRef = useRef(null);

useEffect(() => {
    const handleReportComplete = (): void => {
        const pivot = pivotRef.current?.flexmonster;

        if (pivot) {
            pivot.highcharts.getData(
                {
                    type: "column",
                },
                (data: GetDataValueObject): void => {
                    Highcharts.chart("highcharts-container", data);
                }
            );
        }
    };

    const pivot = pivotRef.current?.flexmonster;
    if (pivot) {
        pivot.on("reportcomplete", handleReportComplete);
    }
}, []);

Здесь Pivotref позволяет нам получить доступ к экземпляру The Pivot Table, чтобы мы могли работать со встроенными функциями.

Мы используем событие «ReportComplete» для запуска нашего кода после того, как таблица Pivot завершит загрузку.

Шаг 9: отображение диаграммы

После передачи данных в Highcharts через pivot.highcharts.getdata (...), диаграмма автоматически отображается в контейнере с указанным типом диаграммы. Вы можете использовать любой тип диаграммы, поддерживаемый HighCharts, например, Line, Pie или Bar, изменяя тип, переданный на GetData.

Я могу использовать диаграмму столбцов для этого проекта. Это знакомый и визуально интуитивно понятный способ отображения данных. Вы можете включить его в своем коде, указав:

pivot.highcharts.getData({ type: "column" }, (data) => {

Убедитесь, что у вас есть <div> с правильным идентификатором для компонента HighCharts:

<div id="highcharts-container"></div>

Когда таблица Pivot Pivot заканчивает загрузку, событие отчетов Complete запускается. Затем мы извлекаем данные с использованием интеграции HighCharts от Flexmonster и ее отображают.

Шаг 10: Настройка вашего веб -приложения

А вот моя любимая часть каждого проекта - стиль и настройка!

Я пытался сделать эти сетки как можно более похожими на оригинальный дизайн Spotify: шрифт, черный фон и зеленый цвет.

Итак, как все это реализовать? Давайте отдельно поговорим о The Flexmonster Pivot Table и визуализации Highcharts.

Шаг 10.1: Настройка Flexmonster

Flexmonster имеет встроенные темы, и все возможные варианты доступны в этомдемоПолем

Однако, поскольку мы хотим сделать это в стиле Spotify, как можно больше, нам нужно будет создать пользовательскую тему.

Во-первых, вам нужно запустить эти команды в своем терминале, чтобы получить строитель темы:

git clone https://github.com/flexmonster/custom-theme-builder
cd custom-theme-builder

В cUstom-Theme-Builder/папка, мы должны найти и открытьflexmonster.lessфайл. Там вы можете применить любые стили, которые хотите.

После этого нам нужно компилировать.меньшеФайл в.css, что можно легко сделать с помощью следующей команды:

Messc Flexmonster.less Flexmonster.css

Затем добавитьflexmonster.cssФайл в ваш проектSRCпапка.

В index.html добавьте эту строку:

<link rel="stylesheet" href="/flexmonster.css" />

А также не забудьте импортировать файл flexmonster.css в ваш проект вApp.jsx:

import "flexmonster/flexmonster.css";
import "../flexmonster.css"

Когда вы выполняете все эти шаги, вы уже можете увидеть индивидуальную таблицу поворота в своем собственном стиле!

Шаг 10.2: Настройка HighCharts

К сожалению, не весь код CSS может быть применен к HighCharts, поэтому, чтобы уменьшить количество ошибок и трудностей, я решил сделать стиль непосредственно в app.jsx.

Вот код с уже реализованным стилем HighCharts:

const handleReportComplete = () => {
    pivot.highcharts.getData({ type: "column" }, (data) => {
        Highcharts.chart("highcharts-container", {
            ...data,
            chart: {
                ...data.chart,
                backgroundColor: "transparent",
                style: {
                    fontFamily:
                        "'Poppins', 'Circular Spotify Text', 'Helvetica Neue', Helvetica, Arial, sans-serif",
                },
            },
            title: {
                text: "Spotify Top 200 Streams",
                style: {
                    color: "#1DB954",
                    fontWeight: "900",
                    fontSize: "26px",
                    textShadow: "0 0 8px #1DB954",
                },
            },
            xAxis: {
                ...data.xAxis,
                labels: {
                    style: { color: "#E3E3E3", fontSize: "13px" },
                },
                lineColor: "#1DB954",
                tickColor: "#1DB954",
            },
            yAxis: {
                ...data.yAxis,
                labels: {
                    style: { color: "#E3E3E3", fontSize: "13px" },
                },
                gridLineColor: "rgba(29, 185, 84, 0.3)",
                title: {
                    text: "Streams",
                    style: { color: "#1DB954", fontWeight: "700" },
                },
            },
            legend: {
                enabled: false,
            },
            plotOptions: {
                column: {
                    color: "#1DB954",
                    borderRadius: 6,
                    shadow: {
                        color: "rgba(29, 185, 84, 0.8)",
                        offsetX: 0,
                        offsetY: 0,
                        opacity: 0.9,
                        width: 12,
                    },
                },
            },
            tooltip: {
                backgroundColor: "#1DB954",
                style: { color: "#121212", fontWeight: "700" },
                borderRadius: 8,
                borderWidth: 0,
                shadow: true,
                animation: true,
            },
            series: data.series,
        });
    });
};

Не стесняйтесь изменить его на то, как вам лучше всего подходит!

Наконец, у нас полностью выполнен наш проект, и я надеюсь, что вы также довольны результатом!

Если вы хотите получить весь код, вы можете проверить этоПанель инструментов на моем GitHubПолем

И есть наш результат:

Track Streams Pivot Table View

Album Streams Pivot Table View
Artist Streams Chart View

Кроме того, я хотел бы услышать ваши отзывы и любые мысли об этой веб -странице.

Спасибо за чтение и удачи в кодировании!



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE