Использование массива Numpy, как если бы это была электронная таблица – какой подход лучше?Python

Программы на Python
Ответить
Anonymous
 Использование массива Numpy, как если бы это была электронная таблица – какой подход лучше?

Сообщение Anonymous »

Работаем над моделью Python, которая рассчитывает доходность портфеля акций, облигаций и/или недвижимости за определенный период с учетом двух возможных сценариев налогообложения. Модель Python основана и проверена на основе электронной таблицы с 18 столбцами для каждого из двух сценариев налогообложения. Модель предоставляет выходные данные для упрощенного приложения, позволяющего пользователям просмотреть свою ситуацию и смоделировать свои цифры. Входные данные с потоковым освещением фиксируются в словаре, который передается в класс с моделью.
Для первой версии я использовал массив Numpy формы N X M, где N — количество лет. для моделирования (переменная «term»), а M — количество столбцов. Для года 0, то есть для первой «строки» матрицы, я вычисляю соответствующие значения. Затем, используя цикл для лет N – 1, модель вычисляет остальные строки. Выглядит это следующим образом.

Код: Выделить всё

config = {'equity' : 1000000,
'bonds' : 1000000,
'property' : 1000000,
'equity_return' : 0.062,
'bonds_return' : 0.035,
'property_return' : 0.06,
'term' : 20
}

class boxer:

def __init__(self, **parameters):

for k, v in parameters.items():
setattr(self, k, v)

def return_calc(self):

matrix = np.zeros((self.term, 18), dtype=float)

'''initialize first row of matrix'''

## INVESTMENTS & RETURNS
matrix[0][0] = self.equity        # equity
matrix[0][1] = self.bonds         # bonds
matrix[0][2] = self.property      # property
matrix[0][3] = matrix[0][0] * self.equity_return    # return on equity
matrix[0][4] = matrix[0][1] * self.bonds_return     # return on bonds
matrix[0][5] = matrix[0][2] * self.property_return  # return on property
## etc defining another 13 'columns'

'''initialize rest of row of matrix'''
for i in range(matrix.shape[0]):

if i > 0:

## INVESTMENTS & RETURNS
matrix[i][0] = matrix[i-1][9]         # equity
matrix[i][1] = matrix[i-1][10]        # bonds
matrix[i][2] = matrix[i-1][11]        # property
matrix[i][3] = matrix[i][0] * self.equity_return    # return on equity
matrix[i][4] = matrix[i][1] * self.bonds_return     # return on bonds
matrix[i][5] = matrix[i][2] * self.property_return  # return on property (net rent)

output = pd.DataFrame(matrix, columns=
['Equity','Bonds','Property','Return_Equity','Return_Bonds','Return_Property'])

return output
Это работает просто великолепно — фрейм данных прекрасно печатается в потоковом освещении, а графики тоже очень просты — но теперь, когда я собираюсь работать над улучшенной версией 2, неделю спустя , я уже голову ломаю, зачем все эти колонки. Я чувствую, что «злоупотребил» массивом Numpy для создания своей модели. У кого-нибудь есть советы/отзывы о том, как лучше это сделать?

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-approach
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»