Thursday, October 13, 2016

Bereken Bewegende Gemiddelde Python

Ek het data gemonster ten wese ewekansige intervalle. Ek wil graag 'n geweegde bewegende gemiddelde gebruik van Numpy (of ander python pakket) te bereken. Ek het 'n ru-implementering van 'n bewegende gemiddelde, maar ek sukkel om 'n goeie manier om 'n geweegde bewegende gemiddelde doen, sodat die waardes teenoor die sentrum van die bin meer word geweeg as waardes teenoor die rand. Hier het ek genereer 'n paar voorbeelde van data en neem dan 'n bewegende gemiddelde. Hoe kan ek die maklikste implementeer 'n geweegde bewegende gemiddelde Dankie Gebruik die advies van crs17 gewigte in die np. average funksie gebruik, ek het geweegde gemiddelde funksie, wat 'n Gaussiese funksie gebruik om die data gewig: Kom ons sê ek het 'n lys: Ek wil 'n funksie wat die bewegende n-dag gemiddeld bereken skep. So as N was 5, sou ek wil my kode vir die eerste 1-5 te bereken, voeg dit en vind die gemiddelde, wat sou wees 3.0, dan gaan op 2-6, bereken die gemiddelde, wat sou wees 4.0, dan 3 -7, 4-8, 5-9, 6-10. Ek dont wil die eerste N-1 dae bereken, so vanaf die nde dag, itll reken die vorige dae. Dit lyk of druk wat ek wil: Ek het egter nie weet hoe om die getalle te bereken in die lyste. Enige idees gevra 14 Februarie 13 aan 21:05 Terwyl ek graag Martijns antwoord op hierdie, soos George, het ek gewonder of dit vinniger deur die gebruik van 'n lopende opsomming plaas van die toepassing van die som () oor en oor weer op meestal dieselfde nommers wouldnt wees . Ook die idee van 'Geen waardes as verstek in die oprit fase is interessant. Om die waarheid te kan daar baie verskillende scenario's kan 'n mens swanger vir bewegende gemiddeldes wees. Kom ons verdeel die berekening van gemiddeldes in drie fases: oprit: Begin iterasies waar die huidige iterasie Telling Dit venster grootte bestendige vordering: Ons het presies venster grootte aantal elemente beskikbaar om te bereken 'n normale gemiddelde: som (xiterationcounter-windowsize: iterationcounter) / windowsize Ramp Down: Aan die einde van die insette data, kan ons 'n ander windowsize terugkeer - 1 gemiddelde getalle. Hier is 'n funksie wat Arbitrêre iterables (kragopwekkers is fyn) as insette vir data Arbitrêre venster aanvaar groottes 1 Parameters om aan te skakel / af produksie van waardes tydens die fases vir oprit / Down Terugbel funksies vir diegene fases te bepaal hoe waardes geproduseer. Dit kan gebruik word om voortdurend te voorsien 'n standaard (bv Geen) of gedeeltelike gemiddeldes Dit lyk na 'n bietjie vinniger as Martijns weergawe bied - wat is veel meer elegant, al is. Hier is die toets-kode: Die oorspronklike vraag kan nou opgelos word met hierdie funksie oproep: geantwoord 18 Februarie 13 aan 18:15 Gebruik die som en kaart funksies. Die kaart funksie in Python 3 is basies 'n lui weergawe van hierdie: Ek is seker jy kan raai wat die som funksie doen. antwoord 14 Februarie 13 aan 21:07 'n benadering wat vermy Herbereken intermediêre somme .. maak dat lopies (int (v)). dan. repr (runsumlistk - runsumlistk-5) / 5) As jy mier getalle rondom te voer 'n snare .. Alt sonder die globale: seker wees om drywende wiskunde, selfs as jy insetwaardes heelgetalle antwoord 14 Februarie 13 aan 22:04 Voorwaar 'n doen hardloop som algoritme is vinniger. I39ve gepos 'n antwoord te bewys jou punt. There39s net geen behoefte aan 'n globale veranderlike hier. â € CFI 18 Februarie 13 aan 18:16 reg jy is, ek was te hard probeer om 'n eksplisiete aviod vir lus. â € agentp 19 Februarie 13 by 18:37 Jou Antwoord 2016 stapel Exchange, IncAdvanced Matplotlib Series (video's en net eindig bron) Sodra jy 'n basiese begrip van hoe Matplotlib werk, kan jy 'n belangstelling in die neem van jou kennis 'n bietjie verder het. Sommige van die mees komplekse grafiese behoeftes kom in die vorm van voorraad analise en kartering, of Forex. In hierdie handleiding reeks, gaan dek waar en hoe om outomaties aan te gryp, sorteer en organiseer 'n paar gratis voorraad en buitelandse valuta pryse data. Volgende, gaan dit in kaart met behulp van 'n paar van die meer gewilde aanwysers as 'n voorbeeld. Hier, goed te doen MACD (bewegende gemiddelde Konvergensie divergensie) en die RSI (relatiewe sterkte-indeks). Om ons te help bereken hierdie, sal ons Numpy gebruik, maar anders sal ons hierdie te bereken almal op ons eie. Om die data te verkry, gaan die Yahoo Finansies API te gebruik. Dit API terugkeer historiese prys data vir die ENKELE simbool ons spesifiseer en vir die tyd lank ons ​​vra. Hoe groter die tyd, hoe laer is die besluit van data wat ons kry. Dus, as jy vra vir 'n 1-dag tydraamwerk vir AAPL, sal jy 3 minute OHLC (oop hoë lae naby) data te kry. As jy vra vir 10 jaar die moeite werd is, sal jy daagliks data te kry, of selfs 3 dag tydraamwerke. Hou dit in gedagte en kies 'n tyd wat jou doelwitte pas. Ook, as jy 'n lae genoeg tyd raam kies en kry 'n hoë genoeg korrelig, die API sal die tyd terug te keer in 'n Unix tyd stempel, in vergelyking met 'n datumstempel. Sodra ons die data, sal ons dit wil grafiek. Om mee te begin, en net stip die lyne, maar die meeste mense sal wil hê om 'n kandelaar plot in plaas. Ons sal Matplotlibs kandelaar funksie te gebruik, en maak 'n eenvoudige wysig om dit te effens verbeter. Op dieselfde grafiek, sowel ook trek 'n paar bewegende gemiddelde berekeninge. Hierna is gaan 'n intrige te skep, en die grafiek van die volume. Ons kan nie volume plot op dieselfde intrige onmiddellik, want die skaal is anders. Om mee te begin, sal ons die volume onder plot in 'n ander sub plot, maar uiteindelik ook eintlik oortrek volume op dieselfde figuur en maak dit 'n bietjie deursigtig. Dan gaan 2 sub erwe voeg en plot 'n RSI aanwyser op die top en die MACD aanwyser op die bodem. Vir al hierdie, gaan die X-as deel, sodat ons kan in en uit in 1 plot zoom en hulle sal almal ooreenstem met die dieselfde tyd raam. Gaan plot in datum formaat vir die X-as, en pas net oor al die dinge wat ons kan vir estetika. Dit sluit in die verandering van bosluis etiket kleure, rand / ruggraat kleure, lyn kleure, OHLC kandelaar kleure, leer hoe om 'n vol grafiek (vir volume) te skep, histogramme, trek spesifieke lyne (hline vir RSI), en 'n hele klomp meer. Hier is die eindresultaat (Ek het beide 'n Python 3 en 'n Python 2 weergawe vir hierdie Python 3 eerste, dan Python 2. Maak seker jy gebruik van die een wat pas by jou Python weergawe.): Dis al vir nou. Wil jy meer tutoriale kop na die Tuisblad Matplotlib Crash CourseComputational gereedskap analoog, DataFrame het 'n metode cov om paarsgewyse kovariansies bereken onder die reeks in die DataFrame, ook uitgesluit NA / nul waardes. Die aanvaarding van die vermiste data ontbreek na willekeur dit lei tot 'n skatting vir die kovariansiematriks wat onbevooroordeelde. Maar vir baie toepassings hierdie beraming kan nie aanvaar word nie, want die geskatte kovariansiematriks nie gewaarborg positiewe semi-definitiewe te wees. Dit kan lei tot beraamde korrelasies met absolute waardes wat groter is as een is, en / of 'n nie-omkeerbare kovariansiematriks. Sien Beraming van kovariansiematrikse vir meer besonderhede. DataFrame. cov ondersteun ook 'n opsionele minperiods navraag dat die vereiste minimum aantal waarnemings vir elke paar kolom spesifiseer ten einde 'n geldige gevolg hê. Die gewigte wat in die venster gespesifiseer deur die wintype navraag. Die lys van erkende vorme is: wagon triang Blackman Hamming Bartlett parzen bohman blackmanharris Nuttall barthann Kaiser (moet beta) Gaussiese (moet st) generalgaussian (moet krag, breedte) slepian (behoeftes breedte). Let daarop dat die wagon venster is gelykstaande aan dat (). Vir een of ander windows funksies, moet addisionele parameters gespesifiseer: Vir. sum () met 'n wintype. Daar is geen normalisering gedoen om die gewigte vir die venster. Verbygaande persoonlike gewigte van 1, 1, 1 sal 'n ander resultaat oplewer as verbygaande gewigte van 2, 2, 2. byvoorbeeld. Gee 'n wintype in plaas van uitdruklik spesifiseer die gewigte, die gewigte is reeds genormaliseer sodat die grootste gewig 1. In teenstelling hiermee het die aard van die berekening. mean () is sodanig dat die gewigte is genormaliseer met betrekking tot mekaar. Gewigte van 1, 1, 1 en 2, 2, 2 oplewer dieselfde resultaat. Tyd-bewus Rolling Nuut in weergawe 0.19.0. Nuut in weergawe 0.19.0 is die vermoë om 'n sprong (of omskepbaar) om 'n metode. rolling () en het dit produseer veranderlike grootte vensters gebaseer op die geslaag tyd venster slaag. Vir elke keer punt, dit sluit alle voorafgaande waardes wat binne die aangeduide tyd delta. Dit kan veral nuttig vir 'n nie-gereelde tyd frekwensie indeks wees. Dit is 'n gereelde frekwensie-indeks. Met behulp van 'n parameter heelgetal venster werk te rol langs die venster frekwensie. Vermelding van 'n geneutraliseer kan 'n meer intuïtiewe spesifikasie van die rollende frekwensie. Die gebruik van 'n nie-gereelde, maar nog steeds monotoniese indeks, die rol met 'n heelgetal venster nie dra enige spesiale berekening. Die gebruik van die tyd-spesifikasie genereer veranderlike vensters vir hierdie yl data. Verder het ons nou toelaat dat 'n opsionele op parameter om 'n kolom (eerder as die standaard van die indeks) in 'n DataFrame spesifiseer. Tyd-bewus Rolling teen hersteekproefnemingsmetodes Gebruik. rolling () met 'n tyd-gebaseerde indeks is baie soortgelyk aan hermonstering. Hulle het albei werk en uit te voer reduktiewe bedrywighede op tyd geïndekseer pandas voorwerpe. By die gebruik van. rolling () met 'n verreken. Die verreken is 'n tyd-delta. Neem 'n agter-in-time soek venster, en gemiddelde gee van die waardes in die venster (insluitend die eindpunt, maar nie die begin-punt). Dit is die nuwe waarde op daardie stadium in die resultaat. Dit is veranderlike grootte vensters in die tyd-ruimte vir elke punt van die insette. Jy sal 'n dieselfde grootte gevolg as die insette te kry. By die gebruik van. resample () met 'n verreken. Stel 'n nuwe indeks wat die frekwensie van die verreken. Vir elke frekwensie bin, totaal punte van die insette binne 'n agtertoe-in-time soek venster wat in daardie bin val. Die gevolg van hierdie samevoeging is die uitset vir daardie frekwensie punt. Die vensters is vasgestel grootte grootte in die frekwensie ruimte. Die resultaat sal die vorm van 'n gereelde frekwensie tussen die min en die maksimum van die oorspronklike insette voorwerp het. Op te som. rollende () is 'n tyd-gebaseerde venster operasie, terwyl. resample () is 'n frekwensie-gebaseerde venster operasie. Sentreer Windows by verstek die etikette is ingestel op die regter rand van die venster, maar 'n sentrum navraag beskikbaar sodat die etikette kan ingestel word by die sentrum. Binêre Venster Funksies cov () en CORR () kan bereken beweeg statistieke venster oor twee reekse of 'n kombinasie van DataFrame / Series of DataFrame / DataFrame. Hier is die gedrag in elke geval: twee reekse. bereken die statistiek vir die paring. DataFrame / Series. bereken die statistieke vir elke kolom van die DataFrame met die geslaag Series, dus 'n DataFrame terugkeer. DataFrame / DataFrame. by verstek bereken die statistiek vir wat ooreenstem met die kolom name, terugkeer 'n DataFrame. As die navraag argument pairwiseTrue oorgedra bere dan die stukkie statistiek vir elke paar kolomme, terugkeer 'n paneel wie se items is die betrokke datums (sien die volgende afdeling). Berekening van rollende paarsgewyse kovariansies en korrelasies In finansiële data-analise en ander velde it8217s gemeen bereken kovariansie en korrelasie matrikse vir 'n versameling van tydreekse. Dikwels een is ook geïnteresseerd in bewegende-venster kovariansie en korrelasie matrikse. Dit kan gedoen word deur die verbygaan van die paarsgewyse navraag argument, wat in die geval van DataFrame insette 'n paneel wie se items is die betrokke datums sal oplewer. In die geval van 'n enkele DataFrame argument kan die paarsgewyse argument selfs weggelaat word: ontbrekende waardes geïgnoreer en elke inskrywing word bereken met behulp van die paarsgewyse volledige waarnemings. Sien asseblief die kovariansie afdeling vir voorbehoude wat verband hou met hierdie metode van berekening van kovariansie en korrelasie matrikse. Afgesien van nie met 'n parameter venster, hierdie funksies het dieselfde koppelvlakke as hul. rolling eweknieë. Soos hierbo, die parameters almal aanvaar is: minperiods. drumpel van nie-nul datapunte te vereis. Standaard minimum wat nodig is om statistiek te bereken. Geen Nans sal uitset keer wees minperiods nie-nul datapunte is gesien. sentrum. boolean, of om die etikette in die middel (verstek is Vals) Die opbrengs van die. rolling stel en. expanding metodes 'n NaN nie terugkeer indien daar ten minste minperiods nie-nul waardes in die huidige venster. Dit verskil van cumsum. cumprod. cummax. en koljander. wat terugkeer NaN in die uitset waar 'n NaN teëgekom in die insette. 'N groeiende venster statistiek sal meer stabiel (en minder responsief) as sy rollende venster eweknie wees as die toenemende venster grootte van die relatiewe impak van 'n individu gegee punt af. As 'n voorbeeld, hier is die gemiddelde () uitset van die vorige tydreekse dataset: eksponensieel Geweegde Windows A verwante stel funksies eksponensieel geweeg weergawes van 'n paar van die bogenoemde statistiek. 'N Soortgelyke koppelvlak om. rolling en. expanding is toeganklik deur middel van die. ewm metode om 'n EWM voorwerp ontvang. 'N Aantal van die uitbreiding van EW (eksponensieel geweeg) metodes word: Hoe om uit te reken bewegende gemiddelde in R taal en Python n bewegende gemiddelde gebruik te stryk 'n tydreeks. Berekening van bewegende gemiddelde is 'n tipiese geval van geordende data rekenaar. Die basiese rekenaar metode is om 'n subset bestaan ​​uit N agtereenvolgende lede van 'n tydreeks te skep, te bereken die gemiddeld van die stel en skuif die subset vorentoe een vir een. Die volgende voorbeeld leer jy hoe om te bereken bewegende gemiddelde in R taal. Data raam verkope het twee velde: salesDate en Bedrag van hierdie datum nie. Vereiste: bereken die bewegende gemiddelde oor drie dae. Computing stappe insluit op soek na verkope bedrag gemiddeld van die vorige dag, die huidige dag en die volgende dag, en skuif vorentoe langs die datums. 'N Deel van die bron data is soos volg: filter (salesAmount / 3, rep (1, 3)) kan filter funksie gebruik word in R taal te bewegende gemiddelde, wat bondige kode produseer bereken. Hierdie metode is baie gerieflik. Ten spyte van die gerief van die filter funksie. Dit is moeilik om te verstaan ​​vir beginners. Byvoorbeeld, salesAmount / 3means die huidige waarde van die veld bedrag deur drie, maar wanneer dit gebruik word in die filter funksie, kan dit beteken bymekaar te tel die drie agtereenvolgende waardes, dan verdeel die som deur drie. 1,1,1 is die waarde van uitdrukking rep (1,3), wat hier gebruik word om die omvang van die data haal spesifiseer. Verder, omdat nie die naam of die parameters van filter funksie bevat die woorde gemiddelde en beweeg, selfs baie ontwikkelaars van R taal dont weet sy gebruik vir die berekening van bewegende gemiddelde. Trouens, filter funksie is 'n universele lineêre filter. Die gebruik daarvan is meer as die berekening van bewegende gemiddelde. Die volledige funksie verwysing filter (x, filter, metode c (konvolusie, rekursiewe), kante 2, omsendbrief ONWAAR, init). Enige wysiging van die vereiste sal die kode moeiliker om te verstaan. Byvoorbeeld, kan die kode vir die berekening van bewegende gemiddelde van die huidige dag en die vorige twee dae nie geskryf word as filter (salesAmount / 3, rep (0,2)), moet dit befilter (salesAmount / 3, rep (1,3 ), kante 1). R taal kan bereken bewegende gemiddelde, maar sy kode is eerder ontwykende. Ons kan ook gebruik Python, esProc en Perl om hierdie saak te hanteer. Soos R taal, kan al hierdie tale data statistieke en analise uit te voer en te bereken bewegende gemiddelde. Die volgende stel oplossings van 'n afgestorwene en esProc kortliks. Pandas is Luislange derde party biblioteek funksie. Dit is 'n kragtige in die verwerking van gestruktureerde data met basiese tipe data navolg R dataframe. Op die oomblik is die nuutste weergawe is 0,14. Die kode vir die hantering van hierdie geval is soos volg: Die naam van rollingmean funksie is duidelik, kan selfs 'n ontwikkelaar sonder ervaring met pandas dit maklik verstaan. Die gebruik funksies is te eenvoudig. Die eerste parameter is die volgorde wat bereken en die tweede parameter is N, wat is die aantal dae in die soeke na bewegende gemiddelde. esProc is goed in die uitdrukking van besigheid logika vrylik met ratse sintaksis. Die uitdrukkings vir relatiewe posisie kan computational probleme van maklik bestel data op te los. Die kode is soos volg: in die kode 'n familielid interval verteenwoordig, dit wil sê die drie dae van die vorige dag, die huidige dag en die volgende dag. Dit kan gesien word dat bewegende gemiddelde duidelik en sonder huiwering kan uitgewerk word deur die gebruik van 'n familielid interval. As dit nodig is, byvoorbeeld, om die bewegende gemiddelde van die huidige dag en die vorige twee dae bereken, moet ons net die interval verander om in esProc. 'N Familielid interval is 'n stel. esProc kan ook 'n element van relatiewe posisie te druk. Byvoorbeeld, kan dit verkoop groeikoers met (Bedrag - Amount-1) gerieflik bereken. In teenstelling, die kode in R taal en Python is moeilik om te verstaan.


No comments:

Post a Comment