Каков наилучший способ перевыбора фрейма данных с сохранением его статистических свойств в Python 3?
У меня есть следующая игрушка DF:
FilterSystemO2Concentration (Percentage) ProcessChamberHumidityAbsolute (g/m3) ProcessChamberPressure (mbar)
0 0.156 1 29.5 28.4 29.6 28.4
2 0.149 1.3 29.567 28.9
3 0.149 1 29.567 28.9
4 0.148 1.6 29.6 29.4
Это всего лишь образец. Оригинал имеет более 1200 строк. Каков наилучший способ пересмотреть выборку, сохранив статистические характеристики?
Я уже некоторое время гуглял, и я сталкивался только с алгоритмами передискретизации для несбалансированных классов. но это не то, чего я хочу, мне все равно не интересно балансировать данные, я просто хотел бы произвести больше выборок таким образом, чтобы более или менее сохранить исходные распределения данных и статистические свойства.
заранее спасибо
1 ответ
Решение
С помощью scipy.stats.rv_histogram(np.histogram(data)).isf(np.random.random(size=n))
создаст n новых выборок, случайно выбранных из распределения (гистограммы) данных. Вы можете сделать это для каждого столбца:
Пример:
import pandas as pd
import scipy.stats as stats
df = pd.DataFrame({'x': np.random.random(100)*3, 'y': np.random.random(100) * 4 -2})
n = 5
new_values = pd.DataFrame({s: stats.rv_histogram(np.histogram(df[s])).isf(np.random.random(size=n)) for s in df.columns})
df = df.assign(data_type='original').append(new_values.assign(data_type='oversampled'))
df.tail(7)
>> x y data_type
98 1.176073 -0.207858 original
99 0.734781 -0.223110 original
0 2.014739 -0.369475 oversampled
1 2.825933 -1.122614 oversampled
2 0.155204 1.421869 oversampled
3 1.072144 -1.834163 oversampled
4 1.251650 1.353681 oversampled