Вопрос или проблема
Я пытаюсь сгенерировать 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, числа уникальных продуктов и общего дохода, каждый из которых будет иметь свои параметры нормального распределения: среднее значение, стандартное отклонение, а также минимальные и максимальные ограничения.
Шаги для генерации нормально распределенного датафрейма
-
Импорт необходимых библиотек: Начнем с импорта библиотек Pandas и NumPy, которые обеспечат функционал для работы с датафреймами и генерации случайных чисел.
-
Определение параметров: Для каждой колонки необходимо задать свои параметры — среднее значение, стандартное отклонение, минимальные и максимальные значения.
-
Генерация данных: Используем функцию
np.random.normal()
для генерации нормально распределённых данных. Для управления случайными значениями добавляем проверки, чтобы они соответствовали установленным ограничениям. -
Создание датафрейма: Сгенерированные данные помещаются в датафрейм.
-
Расчет среднего значения: Для нахождения среднего значения всего датафрейма нужно использовать метод
.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)
Объяснение кода
-
Импорт библиотек:
import pandas as pd
иimport numpy as np
загружает необходимые инструменты для работы с данными. -
Параметры распределения: Мы задаем массивы средних значений, стандартных отклонений и пределов для каждой из трех колонок.
-
Цикл генерации данных: В цикле мы создаем массив данных для каждого столбца, а затем применяем условия, чтобы избежать выхода данных за пределы заданных значений.
-
Создание датафрейма: Каждый массив данных добавляется в датафрейм с именем колонки, используя
df[f'Column_{n+1}']
. -
Расчет среднего: Метод
mean()
суммирует все элементы и делит на их количество, что позволяет получить общее среднее значение всего датафрейма.
Заключение
Таким образом, данный подход позволяет создать датафрейм с нормально распределенными данными, а также быстро вычислить среднее значение по всем данным. Использование Pandas и NumPy для таких задач делает процесс удобным и эффективным.