Рубрики
Без рубрики

Язык для потока и анализа данных

Что если трубопроводы были легко повторно программируемыми для людей, которые не знают, как программировать? Теги с Python, Opensource, MachineLearning, Showdev.

Для многих людей Python – это их язык для анализа данных. Это в значительной степени, потому что язык Python позволяет очень легко подумать и писать функции, которые работают на единицах данных. Например, эта функция определяет числовую сегмент, которому принадлежит человек определенного возраста.

def age_segment(age):
    if age < 12: return 0
    elif age < 18: return 1
    elif age < 28: return 2
    elif age < 48: return 3
    elif age < 68: return 4
    elif age < 88: return 5
    else: return 6

Вот еще одна функция. Требуется в возрастном сегменте номера и возвращает, является ли человек юридически несовершеннолетним.

def is_under_age(age_segment):
    if age_segment <= 1:
        return True
    return False

И вот один последний. Работа этой функции – довольно печатать возраст. Это все это работа.

def print_age(age_segment):
    if age_segment == 0: print("0-12")
    elif age_segment == 1: print("12-18")
    elif age_segment == 2: print("18-18")
    elif age_segment == 3: print("28-48")
    elif age_segment == 4: print("48-68")
    elif age_segment == 5: print("68-88")
    elif age_segment == 6: print("88+")

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

В качестве примера, скажем, у нас есть такой список данных. И вы хотите принять каждый элемент данных и пройти через этот вид «трубопровод» функций, которые вы можете построить, что передает данные первым в age_seget. тогда к iS_under_age. и, наконец, к print_age Отказ

ages = [9, 19, 37, 28, 48, 13]

Теперь вы можете понять, что вы могли бы просто использовать Python для Loop Construct, для цирки по этому поводу и позвоните в функции в порядке в возрасте в списке. И это то, что будет много людей. Но есть несколько вопросов, в которые вы столкнетесь.

  • Вам придется знать Python, чтобы изменить структуру трубопровода (например, – вы хотите удалить age_seget. Потому что ваши данные уже возрастные сегменты)
  • Вам придется писать (на мой взгляд) Messy Code, чтобы сделать функции, работающие параллельно (Python предоставляет multiPressing multipressing библиотеку для выполнения функций одновременно - вместо одного после другого - и легко передавать данные между ними ; но это вводит довольно много дополнительного кода)

На самом деле это то, что это будет выглядеть.

from multiprocessing import Process, Queue
from ages_utils import age_segment as age_segment
from ages_utils import is_under_age as is_under_age
from ages_utils import ages as ages
from ages_utils import print_age as print_age
class PLPipeSentinel: pass
def run_ages(stream, out_queue):
    for data in stream:
        out_queue.put(data)
    out_queue.put(PLPipeSentinel())

def run_age_segment(in_queue, out_queue):
    while 1:
        inp = in_queue.get()
        if isinstance(inp, PLPipeSentinel):
            outp = PLPipeSentinel()
        if not isinstance(inp, PLPipeSentinel):
            outp = age_segment(inp)
        if out_queue is not None:
            out_queue.put(outp)
        if isinstance(inp, PLPipeSentinel):
            break

def run_is_under_age(in_queue, out_queue):
    while 1:
        inp = in_queue.get()
        if isinstance(inp, PLPipeSentinel):
            outp = PLPipeSentinel()
        if not isinstance(inp, PLPipeSentinel):
            result = is_under_age(inp)
            if result:
                outp = inp
            else:
                continue
        if out_queue is not None:
            out_queue.put(outp)
        if isinstance(inp, PLPipeSentinel):

            break
def run_print_age(in_queue, out_queue):
    while 1:
        inp = in_queue.get()
        if isinstance(inp, PLPipeSentinel):
            outp = PLPipeSentinel()
        if not isinstance(inp, PLPipeSentinel):
            outp = print_age(inp)
        if out_queue is not None:
            out_queue.put(outp)
        if isinstance(inp, PLPipeSentinel):
            break

if __name__ == "__main__":
    data = ages()
    in_age_segment = Queue()
    in_is_under_age = Queue()
    in_print_age = Queue()
    ages_process = Process(target=run_ages, args=(data, in_age_segment))
    age_segment_process = Process(target=run_age_segment, args=(in_age_segment,in_is_under_age,))
    is_under_age_process = Process(target=run_is_under_age, args=(in_is_under_age,in_print_age,))
    print_age_process = Process(target=run_print_age, args=(in_print_age,None,))
    ages_process.start()
    age_segment_process.start()
    is_under_age_process.start()
    print_age_process.start()
    age_segment_process.join()
    is_under_age_process.join()
    print_age_process.join()

Может быть, это разборчиво для вас, но это, конечно, не для меня.

Что, если произошел простой язык высокого уровня для описания структуры трубопровода с компилятором, который компилирует код языка в Python. Этот язык был бы языком, который может использовать кого-либо – ученый, руководитель бизнеса … буквально кто-либо.

Вы бы работали с компонентами трубопровода, имеющего базовое понимание того, что делают компоненты (например, – is_under_age), если возраст считается юридически несовершеннолетним), но никакие необходимые знания о том, как они реализованы. Кто-то, кто знает, Python будет писать реализации компонентов, но затем трубопровод может быть написан и переписан и снова структурирован без необходимости обратиться к человеку, который знает Python, потому что трубопровод написан на простом языке высокого уровня, который тезисы прочь функции, которые составляют любой трубопровод.

Этот язык высокого уровня существует! Это называется трубопроводами. С языком трубопроводов вышеприведенные 63 строки кода Python сводится к описанию линии ниже 5 ниже.

from ages_utils import ages
from ages_utils import age_segment
from ages_utils import is_under_age
from ages_utils import print_age

ages |> age_segment /> is_under_age |> print_age

|> Указывает, что каждый элемент передан в age_segent и print_age преобразуется путем передачи в age_seget () и print_age () Функции с результатами затем передаются на следующую функцию в трубопроводе, если вы существуете.

\> Указывает, что каждый элемент передан в Is_under_age фильтруется. Элемент передан в Is_under_age И если результат это Истинный Это передано. Если результат это Ложь Это не передается.

Для языка гораздо больше, чем просто трубы и фильтры и функции, предназначенные для более сложных потоков данных, и все можно найти в «README» на репозитории GitHUB.

Calebwin/трубопроводы

Трубопроводы – это язык для анализа данных высокого уровня.

Трубопроводы – это язык и время выполнения для создания массивно параллельных трубопроводов. В отличие от других языков для определения потока данных, язык трубопровода требует внедрения компонентов, которые будут определены отдельно на языке сценариев Python. Это позволяет отделить детали реализаций от структуры трубопровода, при этом обеспечивая доступ к тысячам активных библиотек для машинного обучения, анализа данных и обработки. Перейти к Начало работы Чтобы установить компилятор трубопровода.

Пример

В качестве вводного примера простой трубопровод для Fizz Buzz на четных числах может быть написан следующим образом –

from fizzbuzz import numbers
from fizzbuzz import even
from fizzbuzz import fizzbuzz
from fizzbuzz import printer
numbers
/> even 
|> fizzbuzz where (number=*, fizz="Fizz", buzz="Buzz")
|> printer

Между тем, реализация компонентов будет написана в Python –

def numbers()
    for

Если вы решите использовать в своем собственном анализе данных, пожалуйста, дайте мне знать – я хотел бы увидеть, что вы делаете! Если нет, я был бы признателен за это, если бы вы могли звездить репозиторий Github напоследствии, если вы найдете это интересное и потенциально полезное.

Оригинал: “https://dev.to/calebwin/a-language-for-data-flow-and-analysis-3fmj”