Создание фрейма данных с нормальным распределением с 3 колонками

Вопрос или проблема

Я пытаюсь сгенерировать DataFrame с нормальным распределением в Python с тремя колонками. Каждая колонка требует отдельного ввода среднего значения, стандартного отклонения, нижних и верхних значений. Я пытаюсь сгенерировать данные о продажах уникальных продуктов Coca-Cola, уникальных продуктах и общем доходе, которые подчиняются нормальному распределению. Также, как я могу найти среднее значение всего нормального распределенного DataFrame?

Возможный вариант в следующем фрагменте кода.

import pandas as pd 
import numpy as np
df = pd.DataFrame()
mean = [0,1,2]
scale = [1,2,3]
max_val = [2,3,4]
min_val = [-2,-1,0]
for n in range(3):
    df[n] =  np.random.normal(loc=mean[n],scale=scale[n], size=100)
    df.loc[df[n] < min_val[n],n]= min_val[n]
    df.loc[df[n] > max_val[n],n]= max_val[n]
print('Среднее значение DataFrame: ',df.mean().mean())

Ответ или решение

Для генерации датафрейма, содержащего нормально распределенные данные с тремя колонками в Python, можно воспользоваться библиотеками Pandas и NumPy. В данном случае мы будем генерировать данные для уникальных продуктов Coca-Cola, числа уникальных продуктов и общего дохода, каждый из которых будет иметь свои параметры нормального распределения: среднее значение, стандартное отклонение, а также минимальные и максимальные ограничения.

Шаги для генерации нормально распределенного датафрейма

  1. Импорт необходимых библиотек: Начнем с импорта библиотек Pandas и NumPy, которые обеспечат функционал для работы с датафреймами и генерации случайных чисел.

  2. Определение параметров: Для каждой колонки необходимо задать свои параметры — среднее значение, стандартное отклонение, минимальные и максимальные значения.

  3. Генерация данных: Используем функцию np.random.normal() для генерации нормально распределённых данных. Для управления случайными значениями добавляем проверки, чтобы они соответствовали установленным ограничениям.

  4. Создание датафрейма: Сгенерированные данные помещаются в датафрейм.

  5. Расчет среднего значения: Для нахождения среднего значения всего датафрейма нужно использовать метод .mean() на объекте датафрейма.

Пример кода

Вот пример кода, который иллюстрирует описанный процесс:

import pandas as pd
import numpy as np

# Инициализация пустого датафрейма
df = pd.DataFrame()

# Определение параметров для трех колонок
mean = [1000, 500, 2000]  # Средние значения
scale = [200, 50, 300]     # Стандартные отклонения
min_val = [800, 400, 1500] # Минимальные значения
max_val = [1200, 600, 2500] # Максимальные значения

# Генерация данных для каждой колонки
for n in range(3):
    col_data = np.random.normal(loc=mean[n], scale=scale[n], size=100)

    # Применение ограничений
    col_data[col_data < min_val[n]] = min_val[n]
    col_data[col_data > max_val[n]] = max_val[n]

    df[f'Column_{n+1}'] = col_data

# Расчет среднего значения для всего датафрейма
overall_mean = df.mean().mean()

# Вывод результатов
print(df)
print('Среднее значение по всему датафрейму: ', overall_mean)

Объяснение кода

  1. Импорт библиотек: import pandas as pd и import numpy as np загружает необходимые инструменты для работы с данными.

  2. Параметры распределения: Мы задаем массивы средних значений, стандартных отклонений и пределов для каждой из трех колонок.

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

  4. Создание датафрейма: Каждый массив данных добавляется в датафрейм с именем колонки, используя df[f'Column_{n+1}'].

  5. Расчет среднего: Метод mean() суммирует все элементы и делит на их количество, что позволяет получить общее среднее значение всего датафрейма.

Заключение

Таким образом, данный подход позволяет создать датафрейм с нормально распределенными данными, а также быстро вычислить среднее значение по всем данным. Использование Pandas и NumPy для таких задач делает процесс удобным и эффективным.

Оцените материал
Добавить комментарий

Капча загружается...