Довольно часто, особенно в крупных компаниях, встречаются наборы данных, которые уже не помещаются в памяти компьютера, или, если вы выполняете какие-либо вычисления, вычисления занимают так много времени, что вам становится скучно. Это означает, что мы должны найти способы работы с данными, чтобы сделать их либо небольшими по объему памяти, либо сделать выборку данных, так чтобы у вас было подмножество, часто бывает оправданным просто взять выборку, и эта выборка является репрезентативной для всех больших данных, а затем произвести вычисления, сделать науку о данных на ней.
Мы импортируем Pandas и добавим наши данные в датафрейм.
import pandas as pd
df = pd.read_csv("data/housing.csv")
df.head(5)
Для изучения объема памяти наших загруженных данных:
df.memory_usage(deep=True)
Объявление deep=True потому что:
Отпечаток памяти столбцов объектного dtype игнорируется по умолчанию, Мы не хотим, чтобы в нашей ситуации элементы игнорировались.
Проверяем dtype столбцов:
df.dtypes
Обратите внимание на dtype колонки ocean_proximity,
Всегда помните, что строки могут занимать много места в памяти по сравнению с числами, которые особенно эффективно справляются с этой задачей.
Мы переопределим наш тип данных ocean_proximity на специфический для pandas тип данных categorical.
df["ocean_proximity"] = df["ocean_proximity"].astype("category")
Это улучшает использование памяти,
Проверим память
df.memory_usage(deep=True)
Ваоооооо!!! Вы можете видеть, что она уменьшилась более чем в два раза.
Таким образом, вы можете сделать свой DataFrame более оптимальным простым способом.
Однако проблема с этой техникой заключается в том, что даже после изменения памяти, объем памяти все равно остается значительным, поскольку данные загружаются в нашу память.
Во время процесса загрузки мы также можем изменить тип данных
df_columns = pd.read_csv("data/housing.csv", usecols=["longitude", "latitude", "ocean_proximity"])
Здесь мы будем использовать словарь, где ключ — это имя столбца, а значение — тип данных, что означает, что вы можете использовать их сколько угодно.
Он будет автоматически подстраивать объем памяти под фрейм данных во время загрузки.
Вместо того чтобы импортировать все наборы данных, поскольку они могут нам не понадобиться, мы создадим новый фрейм данных и загрузим данные как обычно. Однако в этот раз мы определим столбцы
df_columns = pd.read_csv("data/housing.csv", usecols=["longitude", "latitude", "ocean_proximity"])
Это еще один прекрасный метод экономии места при загрузке материала.
Иногда проблема не только в загрузке данных; иногда она связана с самим вычислением, поскольку у нас есть дорогостоящая функция. В таких случаях нам нужно сделать выборку данных, что pandas облегчает нам задачу, поскольку для каждого датафрейма доступен метод sample.
У нас есть случайное состояние, что очень важно, если вы хотите воспроизвести свой анализ и передать его другому коллеге или специалисту по анализу данных. Это действительно приятная вещь, к которой нужно привыкнуть.
df_columns.sample(100, random_state=42)
но если вы хотите повторить что-то, вы должны убедиться, что ваш случайный процесс можно использовать повторно.
random_state = 42
df_columns.sample(100, random_state=random_state)
Надеюсь, вы поняли, как загружать данные более эффективно и с меньшим количеством элементов.
Увидимся в следующий раз!!!