Как профилировать большие наборы данных с помощью профилирования Pandas?

Данные не идеально чисты, но используются без проблем с пандами. Библиотека панд предоставляет множество чрезвычайно полезных функций для EDA.

Но когда я использую профилирование для больших данных, то есть 100 миллионов записей с 10 столбцами, считывая их из таблицы базы данных, оно не завершается, и на моем ноутбуке не хватает памяти, размер данных в csv составляет около 6 ГБ, а моя оперативная память - 14 ГБ моего простоя около 3 - 4 ГБ.

    df = pd.read_sql_query("select * from table", conn_params)
    profile = pandas.profiling.ProfileReport(df)
    profile.to_file(outputfile="myoutput.html")

Я также попытался с check_recoded = False вариант, а также. Но это не помогает в профилировании полностью. Есть ли способ разбить на части и прочитать данные и, наконец, создать сводный отчет в целом? ИЛИ любой другой способ использовать эту функцию с большим набором данных.

5 ответов

Начиная с версии 2.4вы можете использовать минимальный режим, который отключает дорогостоящие вычисления (такие как корреляции и динамическое объединение):

from pandas_profiling import ProfileReport


profile = ProfileReport(df, minimal=True)
profile.to_file(output_file="output.html")

Синтаксис отключения вычисления корреляций (тем самым значительно сокращая вычисления) сильно изменился между pandas-profiling=1.4 и текущая (бета-) версия pandas-profiling=2.0 на следующее:

profile = df.profile_report(correlations={
    "pearson": False,
    "spearman": False,
    "kendall": False,
    "phi_k": False,
    "cramers": False,
    "recoded":False,}
)

Кроме того, вы можете сократить количество выполняемых вычислений, отключив вычисление интервалов для построения гистограмм.

profile = df.profile_report(plot={'histogram': {'bins': None}}

Пробовали ли вы использовать приведенную ниже опцию, так как при выполнении корреляционного анализа больших полей со свободным текстом с использованием профилирования панд это может вызвать проблему?

df = pd.read_sql_query("select * from table", conn_params)
profile = pandas.profiling.ProfileReport(df, , check_correlation = False)

Пожалуйста, обратитесь к ссылке ниже Github для более подробной информации: https://github.com/pandas-profiling/pandas-profiling/issues/84

Другой вариант — уменьшить данные.

Один вариант может быть достигнут с sample:

      df.sample(number)

Подробнее о документации pandas .

Возможность отключить проверку корреляции была добавлена ​​с реализацией проблемы #43, которая не является частью последней версии pandas-profiling (1.4), доступной в PyPI. Это было реализовано после и будет доступно, я думаю, в следующей версии. Между тем, если вам это действительно нужно, вы можете скачать текущую версию с github и использовать ее, например, добавив в свою PYTHONPATH.

! / Bin/ ш

PROF_DIR="$HOME/Git/ панды профилирование /"

export PYTHONPATH = "$ PYTHONPATH: $ PROF_DIR"

тетрадь Jupyter

Другие вопросы по тегам