Каков наилучший способ перевыбора фрейма данных с сохранением его статистических свойств в Python 3? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующая игрушка 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 Ответ

0 голосов
/ 13 февраля 2019

Использование 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
...