Python: Как определить среднее и стандартное отклонение? - PullRequest
1 голос
/ 11 июля 2020

У меня есть код, который я использую для нескольких различных показателей (например, Value at Risk, Omega, Sortino и т. Д. c.). Формула, которую я использую для вычисления среднего, следующая:

Среднее (среднее):

e = numpy.mean(r)

return numpy.mean(diff) / vol(diff)

Стандартное отклонение:

return numpy.std(returns)

Я хотел бы выиграть у средних (и стандартные отклонения), которые используются в моих расчетах. Может кто посоветует как это сделать? Я нашел эту часть, но не совсем уверен, как ее реализовать (если это, конечно):

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mstats.winsorize.html

Спасибо

Ответы [ 2 ]

1 голос
/ 30 августа 2020

Попробуйте это:

import os
import numpy as np

from scipy.stats.mstats import winsorize

file_location = input("path to file: ")
dirname = os.path.dirname(file_location)
filename = os.path.basename(file_location)

with open(file_location, 'r') as readfile, \
        open(os.path.join(dirname, 'win_' + filename), 'w') as writefile1, \
        open(os.path.join(dirname, 'mod_' + filename), 'w') as writefile2:
    writefile1.write('adj_mean,adj_std\n')
    for idx, line in enumerate(readfile):
        print("Reading line# {}...".format(idx))
        series = np.array([float(x) for x in line.split(',')])
        print("Read {} values...".format(len(series)))
        winsorized_series = winsorize(series, limits=[0.10, 0.10])
        print("Writing modified series to file...")
        writefile2.write(','.join(map(str, winsorized_series)) + '\n')
        adj_mean = np.mean(winsorized_series)
        adj_std = np.std(winsorized_series)
        print("adj mean and std dev...")
        writefile1.write("{},{}\n".format(adj_mean, adj_std))
0 голосов
/ 13 июля 2020

Для точного ответа требуется MCVE .

Предполагая, что 'e' является nparray

import numpy as np
import scipy as sp
from scipy.stats.mstats import winsorize

e = np.random.rand(1,100)
print("{}".format(e))
winsorize(e, limits=(0.25,0.25), inplace=True)
print("{}".format(e))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...