Home Нейронные сети Как читать частями | DeepTech

Как читать частями | DeepTech

0
Как читать частями
 | DeepTech

Введение

В науке о данных вы столкнетесь со многими сложными проблемами, которые нужно решить. Одной из основных проблем, с которыми вы сталкиваетесь, является этап подготовки данных. Большая часть эффективной науки о данных направлена ​​на то, чтобы научиться эффективно работать с данными. Одним из самых первых шагов работы с данными является загрузка данные. Звучит просто, правда? Подумайте еще раз. Во многих ситуациях наборы данных слишком велики, чтобы поместиться в локальную память вашего компьютера. Итак, что делать, если набор данных, с которым вы работаете, не помещается в локальную память? Вот тут-то и вступает в игру фрагментирование.

Разбивка на части разбивает ваш большой набор данных на небольшие наборы данных. Это позволяет вам выполнять конвейер анализа на меньших объемах данных, которые помещаются в память вашего компьютера. Ниже вы можете увидеть рисунок, который представляет общую идею разделения на фрагменты и то, что оно решает.

Читайте также: Введение в долговременную краткосрочную память (LSTM)

Сравнение традиционной загрузки данных pandas и загрузки pandas с фрагментированием
Рисунок 1. Рабочий процесс разделения на фрагменты

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

Основное использование

Чтобы читать в pandas по частям, необходимо понимать, как pandas выполняет ввод/вывод файлов (IO) и основные функции для ввода/вывода файлов в pandas. Чтобы ознакомиться с этими функциями, ознакомьтесь с документацией pandas: Ввод, вывод. Pandas использует соглашение «read_» для ввода файла и «to_» для вывода файла. Это означает, что все функции ввода и вывода файлов будут соответствовать следующему синтаксису:

import pandas as pd
file1 = pd.read_csv("myInputFile.csv") ## File Input
file1.to_csv("myOutputFile.csv") ## File Output

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

Тип файла Синтаксис ввода Синтаксис вывода
Плоские файлы (csv, txt, tsv и т. д.) pd.read_csv() pd.to_csv()
Файлы Excel pd.read_excel() pd.to_excel()
JSON-файлы pd.read_json() pd.to_json()
HTML-файлы pd.read_html() pd.to_html()
XML-файлы pd.read_xml() pd.to_xml()
Файлы HDFStore (HDF5) pd.read_hdf() pd.to_csv() Использовать параметры плоского файла
Перьевые файлы pd.read_feather() pd.to_csv() Использовать параметры плоского файла
Паркетные пилки pd.read_parquet() pd.to_csv() Использовать параметры плоского файла
ORC-объекты pd.read_orc() pd.to_csv() Использовать параметры плоского файла
SAS-файлы pd.read_sas() pd.to_sas()
SPSS-файлы pd.read_spss() pd.to_csv() Использовать параметры плоского файла
SQL-таблицы pd.read_sql_table(), pd.read_sql_query(), pd.read_sql() pd.to_sql()
Подключения Google BigQuery pd.read_gbg() pd.to_csv() Использовать параметры плоского файла
STATA-файлы pd.read_stata() pd.to_stata()
Таблица 1. Функции файлового ввода-вывода, предоставляемые библиотекой pandas

Теперь, когда вы понимаете основной синтаксис загрузки и сохранения данных с помощью pandas, давайте более подробно рассмотрим read_csv() и то, как его можно использовать для выполнения фрагментирования. Функция read_csv() имеет более 50 возможных параметров, которые может установить пользователь, но для большинства случаев использования вам нужно понимать только несколько основных параметров, в основном путь к файлу и параметры разделителя. Они необходимы для правильного чтения интересующего файла. Путь к файлу — это расположение интересующего файла. Разделитель определяет, какой символ (обычно запятая или символ табуляции) обозначает одну ячейку в файле. Для чтения порциями панда предоставляет параметр «chunksize», который создает итерируемый объект, считывающий н количество строк в блоках. В приведенном ниже блоке кода вы можете узнать, как использовать параметр «chunksize» для загрузки объема данных, который поместится в память вашего компьютера. В качестве примера мы используем numpy для генерации случайных гауссовых чисел для создания файлов данных CSV формы (10 000, 10) или 10 000 строк по 10 столбцов. Затем мы загружаем данные с параметром «chunksize», установленным на 100, и сравниваем их с традиционным методом загрузки в кадрах данных pandas, чтобы увидеть, дают ли они тот же результат при сложении 2 и 3 столбцов вместе.

#!/usr/bin/env python # coding: utf-8 
import pandas as pd import numpy as np import os for i in range(200):     
data = np.random.normal(size=(10000, 10))     
data = pd.DataFrame(data)     
data.to_csv("./data/test"+str(i+1).zfill(3)+".csv", sep=",") 
testfiles = os.listdir("./data/") testfiles = np.sort(testfiles)                 
 ###### Chunking pandas approach ####### 
all_data2 = () ### List to gather all dataframes of results for i in testfiles:     
result = () ### List to gather all series of add_col1_with_col2         
with pd.read_csv("data/"+i, sep=",", chunksize=100, index_col=0) as reader:         
for chunk in reader:             
add_col1_with_col2 = chunk.iloc(:, 1) + chunk.iloc(:, 2)             
result.append(add_col1_with_col2)     
result = pd.concat(result)     
all_data2.append(result)      
result2 = pd.concat(all_data2)               
###### Traditional pandas approach ####### 
all_data = () for i in testfiles:     
data2 = pd.read_csv("data/"+i, index_col=0)     
all_data.append(data2)      
all_data = pd.concat(all_data) result1 = all_data.iloc(:, 1) + all_data.iloc(:, 2) 
### Results are the same np.unique(result1 == result2) 
#### OUTPUT #### array(( True))

Как мы видим из результатов, оба метода дают один и тот же результат, а это означает, что метод фрагментирования работает одинаково, но позволяет вам работать с данными эффективно с точки зрения использования памяти. Давайте рассмотрим, что мы сделали с обоими методами. Во-первых, в методах фрагментирования мы используем функцию read_csv() с параметром chunksize, равным 100, в качестве вызова итератора «reader». Итератор предоставляет нам метод get_chunk() в виде чанка. Мы перебираем фрагменты и добавляем второй и третий столбцы. Мы добавляем результаты в список и создаем DataFrame с помощью pd.concat(). Затем мы перебираем все файлы и делаем то же самое, получаем результаты каждого файла и сохраняем их в другом списке. Этот список мы снова объединяем с помощью pd.concat(). Во втором способе мы просто открываем все файлы и добавляем их вместе с помощью pd.concat(). Затем мы выполняем математические вычисления для всех данных одновременно. Мы можем это сделать, потому что в качестве примера мы используем набор данных, который помещается в память. Затем мы проверяем, дает ли метод фрагментирования тот же результат, что и традиционный метод, и это так. Этот пример позволяет нам увидеть полезность опции pandas «chunk_size».

Читайте также: Программирование для детей: как создать Pacman на Scratch

Также обратите внимание на Даск

При работе с большими файлами появилось множество нововведений, которые также могут помочь вам упростить выполнение тех же задач. Одним из таких нововведений является библиотека Python. Даск. Dask — гибкая библиотека для параллельных вычислений. Он имеет множество замечательных функций, которые можно использовать и на вашем локальном компьютере. Например, вы можете использовать фреймы данных dask так же, как вы используете фреймы данных pandas, но они всегда будут загружаться в память! Как, спросите вы? Это связано с тем, что dask фактически не загружает данные в память, пока это не будет явно указано! dask использует функцию «compute()», которую вы вызываете, когда готовы выполнить некоторые вычисления. Таким образом, вы можете настроить свой код так, чтобы он работал быстро и помещался в памяти. Посмотрите видео от dask, в котором объясняются основы фреймов данных dask.

Заключение: Pandas и большие фреймы данных

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

Подскажите утилиту работы с большими наборами данных, какие библиотеки или методы для работы с большими наборами данных вам больше всего нравятся? Оставьте комментарий ниже и дайте нам знать ваши мысли!

LEAVE A REPLY

Please enter your comment!
Please enter your name here