BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс по Greenplum » Greenplum для Data Science: Анализ Big Data с помощь SQL и Python

Greenplum для Data Science: Анализ Big Data с помощь SQL и Python

Эта статья является первой частью серии статей «Greenplum для Data Science и ML», в которой рассказывается о том, как использовать интегрированные функции Greenplum для решения проектов по анализу данных от экспериментов до массового развертывания.

 

Рост, вызовы и возможности данных

Мы живем в эпоху цифровых технологий, и все, что мы делаем с помощью наших смартфонов, планшетов, компьютеров и даже бытовой техники, генерирует огромное количество разнообразных данных. Сбор данных ради того, чтобы их было больше – дело, конечно, захватывающее, но абсолютно бессмысленное. Необходимо четко понимать, ради чего эти данные собираются, какие цели мы преследуем. Именно здесь на помощь и приходят специалисты по Data Science.

 

 

Как специалисты по Data Scienсe могут нам помочь

Среди всех областей, связанных с данными, Data Science - это область исследований, которая использует данные и количественное моделирование для создания результатов, имеющих определенное значение для пользователей. В этом контексте специалист по Data Science занимается широким спектром задач, включая, но не ограничиваясь следующими:

  1. Сотрудничество с разработчиками для установления контакта с пользователями для того, чтобы лучше  понять их потребности и изучить, как мы можем использовать данные и алгоритмы таким образом, чтобы действительно их порадовать.
  2. Определение приоритетов для следующих разработок совместно с менеджерами по продуктам.
  3. Сотрудничество с дата-инженерами для подготовки данных к анализу.
  4. Изучение данных и построение моделей  ML для удовлетворения потребностей пользователей - чаще всего на языках Python, R или SQL.
  5. Взаимодействие с инженерами-программистами для развертывания моделей в виде сервисов, которые могут быть использованы приложениями или непосредственно пользователями.
  6. Итеративное повторение пунктов (1)-(5) для того, чтобы максимально точно удовлетворить постоянно растущие потребности пользователей.

 

Фокус серии статей: технические подходы и  инструменты, позволяющую извлечь максимальную ценность из Big Data

Перечисленные выше виды деятельности включают в себя аспекты, связанные с тем, как работают специалисты по Data Science), а также инструменты и технологии, необходимые для их продуктивной работы. В этой серии технических статей мы сосредоточимся на инструментальной составляющей, в первую очередь связанной с пунктом № 4 из списка,  приведенного выше.

В частности, мы рассматриваем сценарии, в которых специалист по Data Science исследует данные и строит модели машинного обучения на основе огромного набора данных. В этом контексте специалист по исследованию данных может столкнуться с особыми техническими проблемами, включая следующие:

  • Медленный конвейер обработки данных при работе с большими объемами данных
  • Ограниченные объемы памяти и вычислений в традиционных средах выполнения Python/R
  • Ограниченный аналитический функционал в платформах, позволяющих вычислять большие данные

 

 

Почему именно Greenplum?

Экспорт данных из базы данных и их импорт в серверную среду с помощью широко используемых инструментов для работы с данными (например, Python, R) – далеко не самый идеальный вариант для работы с Big Data. Как было описано выше, специалистам по Data science может потребоваться помощь в решении проблем, связанных с ограничениями памяти и масштабируемости этих инструментов, а также с узкими местами, связанными с передачей больших объемов данных между различными платформами.

Именно в этом случае выбор правильного инструмента становится критически важным фактором успеха работы специалиста по Data Science. В этом статье мы рассмотрим Greenplum, движок PostgreSQL, предназначенный  для массивно-параллельной обработки данных, который предоставляет ученым встроенные инструменты для исследования данных в больших объемах и обучения моделей. Эти инструменты и расширения включают в себя:

  • Apache MADlib для МО
  • Раширения процедурных языков   для оптимизации работы с Python и R
  • PostGIS для геоаналитики и  GPText для поиска и обработки текстов
  • Совместимость с инструментами для создания дашбордов, такими как Tableau, PowerBI …

 

 

В этом посте мы расскажем, как начать работу с Greenplum, и поделимся примерами того, как специалист по Data Science может использовать все  вышеупомянутые инструменты.

 

Часть 1: Установка и подключение

1. Установите пакет:

!pip install ipython-sql pandas numpy sqlalchemy plotly-express sql_magic pgspecial

 

2. Импортируйте пакет:

import pandas as pd
import numpy as np
import os
import sys
import plotly_express as px
# For DB Connection
from sqlalchemy import create_engine
import psycopg2
import pandas.io.sql as psql
import sql_magic

 

3. Подключитесь к Greenplum:

Существует несколько способов подключения к Greenplum. С помощью блокнота Jupyter можно испольовать «магию» SQL .

  • Установка на клиенте:
!pip install​ ipython-sql

 

  • Для работы на уровне блокнота:
% load_ext _ sql
% sql postgresql://<user>:<password>@<IP_address>:<port>/<database_name>

 

  • Затем выполните следующие SQL команды:
%% sql
SELECT version ();

 

 

Вы также можете использовать коннектор  psycopg2  или pyodbc (существуют и другие способы, например, через  JDBC)

 

Часть 2: обзор набора данных

В этой серии статей мы будем использовать набор данных Daily Financial News , взятый с  Kaggle под лицензией CC0: Public Domain. Для обучения NLP модели выполнению анализа тональности новостей мы будем использовать Greenplum и выполним все этапы жиненного цикла Data Science (Исследование данных — Подготовка данных — Моделирование данных — Оценка модели — Развертывание модели).

Набор данных содержит заголовки с сайта Benzinga.com и его партнеров. Его размер увеличен примерно до четырех миллионов строк, что является довольно большим набором данных. Он разделен на следующие семь столбцов:

  • docid — целое число: уникальный индекс
  • title — текст: заголовок строки
  • content — текст: эквивалентен title
  • url — текст: ссылка на новость
  • publisher — текст: издаель новостей
  • date — дата: дата публикации
  • stock — текст: символ биржевого тикера, относящийся к новости

 

Для начала работы с этим набором данных мы выполним исследовательский анализ данных с помощью специальной команды SQL без использования других расширений (о которых мы расскажем в следующих частях этой серии статей).

 

Часть3: подготовка данных

Набор данных сохранен в таблице source_financial_news. Давайте рассмотрим ее одну строку:

%%sql
SELECT * FROM source_financial_news LIMIT 1;

 

 

Точное количество строк, содержащихся в таблице:

%%sql
SELECT count(*) FROM source_financial_news;

 

 

Партиционирование таблиц в целях увеличения производительности обработки запрсосов

Поскольку старые новости будут использоваться нечасто, создадим таблицу ds_demo.financial_news, разбитую по дате, в которой нас интересуют новости, опубликованные после 2010 года.

Установка в качестве распределенного ключа уникального индекса docid позволяет равномерно распределить данные по разным сегментам.

Кроме того, установка хранилища, ориентированного на столбцы, и параметра appendoptimized на True повышает общую аналитическую производительность.

%%sql
DROP TABLE IF EXISTS ds_demo.financial_news;
CREATE TABLE ds_demo.financial_news
(     LIKE source_financial_news
) WITH (appendoptimized=true, orientation=column)
DISTRIBUTED BY(docid)
PARTITION BY RANGE (date)
(     START (date '2010-01-01') INCLUSIVE
    END (date '2024-01-01') EXCLUSIVE
    EVERY (INTERVAL '1 month'),
    DEFAULT PARTITION old_news
); -- Insert data from the source table into a newly created partitioned table
INSERT INTO ds_demo.financial_news SELECT * FROM source_financial_news;

 

Описание вновь созданной аналитической таблицы показано ниже:

%sql ​\d+ ds_demo.financial_news

 

 

NB: В Greenplum 7 разделы не обязательно должны следовать одним и тем же настройкам, пользователи могут настраивать их в соответствии со своими потребностями.

 

Проверьте равномерноcть распределения нашей таблицы

Теперь, когда наша новая таблица успешно создана, давайте проверим равномерность ее распределения, вычислив стандартное отклонение количества строк, приходящееся  на 1 сегмент.

%%sql
-- Standard deviation to check table distribution
SELECT STDDEV(count)
FROM (
    SELECT gp_segment_id, COUNT(*)
    FROM ds_demo.financial_news
    GROUP BY 1
) table_distribution ;

 

По сравнению со средним значением (163383,333) наше стандартное отклонение очень низкое (399,5784). Таким образом, наша таблица распределена равномерно!

 

Партиционирование для сканирования только нужных данных

При использовании партиционирования нет необходимости сканировать все разделы для того, чтобы ответить на какой-либо вопрос.

%%sql
-- Show the execution plan "EXPLAIN" and check scanned partitions
EXPLAIN SELECT COUNT(*)
        FROM ds_demo.financial_news
          WHERE date >= '2020-01-01'

 

 

Более того, если мы добавим условие sup_date на дату, то не нужно будет сканировать разделы с датой, превосходящей sup_date

 

Часть 4: Исследовательский анализ данных с помощью SQL & MADlib

Далее для аналитики непосредственно в базе данных мы будем использовать SQL (sqlmagic для интерактивных результатов с базой данных Greenplum) и MADlib, библиотеку с открытым исходным кодом на основе SQL, которая предоставляет параллельные реализации математических, статистических и графовых методов для структурированных и неструктурированных данных.

 

1/ Еще один обзор первых двух строк таблицы

%%sql
SELECT * FROM ds_demo.financial_news LIMIT 2 ;

 

 

2. Apache MADlib для надежной и мощной статистики с использованием SQL

Убедитесь в том, что расширение MADlib включено!

%sql SELECT madlib.versi​on();

 

 

2.1. Статистическое описание таблицы - MADlib

Функция MADlib summary() выводит сводную статистику для любой таблицы данных. Функция вызывает различные методы из библиотеки MADlib для того, чтобы предоставить обзор данных.

%%sql
DROP TABLE IF EXISTS ds_demo.financial_news_summary;
SELECT * FROM madlib.summary(
        'ds_demo.financial_news', 'ds_demo.financial_news_summary' 
);

 

 

Вывод функции summary() сохраняется в таблице ds_demo.financial_news_summary.

%%sql
SELECT
    target_column, distinct_values, missing_values, blank_values,      min, max, mean, median, variance, most_frequent_values FROM ds_demo.financial_news_summary;

 

 

3. Количество новостей, приходящихся на дату

Для того, чтобы увидеть динамику изменения количества новостей за несколько месяцев:

  • Преобразуйте столбец даты в формат Год-Месяц с помощью SQL-функции to_char.
  • Сгруппируйте данные по отформатированной дате и вычислите частоты с помощью функции COUNT(*).
  • Наконец, упорядочите итоговые результаты по дате.


%%read_sql df_news_per_date
SELECT
    to_char(date,'YYYY-MM') as date,
    COUNT(*)
FROM ds_demo.financial_news
    WHERE date IS NOT NULL
GROUP BY 1
ORDER BY 1
DESC;

 

 

Теперь давайте визуализируем агрегированные результаты с помощью Plotly:

px.line(df_news_per_date,
        x = 'date',
        y = 'count',
        title='Evolution of number of Stock Market News over time')

 

 

4. Гистограмма длины финансовых новостей

Визуализация распределения длины финансовых новостей:

%%read_sql df_histogram
WITH drb_stats AS (
    SELECT min(length(title)) AS min,
           max(length(title)) AS max
      FROM ds_demo.financial_news
),      histogram AS (
   SELECT width_bucket(length(title), min, max, 10) AS bucket,
          int4range(MIN(length(title)), MAX(length(title)), '[]') AS range,
          COUNT(*) AS freq
     FROM ds_demo.financial_news, drb_stats
     GROUP BY bucket
     ORDER BY bucket
) SELECT bucket, range, freq,
        repeat('■',
               (   freq::FLOAT
                 / MAX(freq) OVER()
                 * 30
               )::INT
        ) AS bar
FROM histogram
ORDER BY bucket ASC
;

 

 

fig = px.histogram(y = df_histogram.freq,
                   x = df_histogram.range.astype(str),
                   nbins=10,
                   title = 'News titles length histogram')
fig.update_layout(yaxis_title="Frequencies", xaxis_title = 'Bucket (range)')
fig.show()

 

 

5. Количество новостей на одну акцию

Для визуализации наиболее часто встречающихся результатов используйте сводные результаты MADlib.

%%read_sql df_stock_frequencies
SELECT most_frequent_values, mfv_frequencies
FROM ds_demo.financial_news_summary
  WHERE target_column = 'stock';

 

 

px.bar(y = df_stock_frequencies.most_frequent_values.values[0],
       x = df_stock_frequencies.mfv_frequencies.values[0],
       color = df_stock_frequencies.most_frequent_values.values[0],
       labels={'x':'News frequency', 'y': 'Stock'},text_auto='.2s',
       title="10 Most Frequent Stocks")

 

 

6. ​Количество новостей, приходящееся на одного издателя (источник)

Давайте найдем  издательство, которое чаще всего встречается в нашем наборе данных:

%%read_sql df_publisher_frequencies
SELECT most_frequent_values, mfv_frequencies
FROM ds_demo.financial_news_summary
  WHERE target_column = 'publisher';

 

 

px.bar(y = df_publisher_frequencies.most_frequent_values.values[0],
       x = df_publisher_frequencies.mfv_frequencies.values[0],
       color = df_publisher_frequencies.most_frequent_values.values[0],
       labels={'x':'News frequency', 'y': 'Publisher'},text_auto='.2s',
       title="Top 10 - Frequent News sources")

 

 

7. Какой сайт чаще всего встречается в наборе данных?

%%read_sql df_url_domain
SELECT
        split_part(REGEXP_REPLACE(url, '^(https?://)?(www\.)?', ''), '/', 1) AS source_url,
        count(*) as frequency
FROM (SELECT
        CASE WHEN url IS NOT NULL THEN url ELSE 'Other' END
        AS url
      FROM ds_demo.financial_news
      ) t GROUP BY 1
ORDER BY 2 ASC;

 

 

fig = px.pie(df_url_domain,
             names = 'source_url', values = 'frequency', 
             width=800, height=600,
             title='Source websites of Stock Market News')

fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

 

 

Заключение

В заключение следует отметить, что аналитики и ученые могут использовать производительность Greenplum и возможности массивно-параллельной обработки данных для обработки и изучения больших массивов данных с помощью встроенных аналитических функций, комбинируя SQL и Apache MADlib и визуализируя результаты с помощью Python.

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
Крутые функции даты Greenplum, которые должен знать каждый
Следующая статья →
Изменение порта Greenplum, установленного по умолчанию

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • ГК «Акрон Холдинг», одно из крупнейших в России промышленно-металлургических предприятий, запустил проект по модернизации управления данными. В качестве целевого решения для анализа ключевых данных компания выбрала систему PIX BI. В компании уже более 100 пользователей PIX BI, и в этом году в планах увеличить их число в два раза.

  • В «Пивоваренной компании «Балтика» аналитическая платформа Loginom применяется для моделирования процессов или построения отчетов, в том числе для формирования рекомендаций по корректировке плана промоактивностей.
     
  • ПАО АНК «Башнефть» — российская вертикально-интегрированная нефтяная компания, с 2016 года входит в ПАО НК «Роснефть». Главный офис расположен в городе Уфе (Башкортостан). Добыча углеводородов – более 21 млн тонн нефти в год. Объем переработки – более 18 млн тонн нефти в год. Число сотрудников – более 33 тыс. человек.

  • С объединением компании Savencia Fromage & Dairy и молочного комбината в г.Белебей, одного из лидеров по производству твердых сычужных сыров в России, Savencia выходит на российский рынок не только как импортер, но и как производитель молочной продукции.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.