Re: [python] Nejvyšší číslo z databáze - řazení

2018-08-22 Tema obsahu Petr Messner
Ten kód moc smysl právě nedává. Třeba 'High'.shift(4) je blbost, string
žádnou metodu shift nemá.

Dokumentace pandas.DataFrame.sort_values je tady:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

Vypadá to, že když chceš v pandasu sortit, tak musíš mít v nějakém sloupci
už připravené hodnoty, podle kterých se má sortit - že to neumí vzít Python
funkci, jako to umí normální sorted nebo list.sort v Pythonu. Což dává
smysl, protože DataFrame je specializovaný na rychlost provádění
numerických operací a snaží se proto právě vyhýbat volání Python funkcí pro
každý řádek zvlášť.

Unit test znamená, že vezmeš nějaký ukázkový vstup, pustíš na něj tvoji
funkci, a výstup té funkce porovnáš s očekávaným výstupem. Podobně tak
kdybys nám sem poslal ukázku vstupu a co si představuješ, že by mělo být
výstupem, tak by bylo jednodušší ti poradit. Nebo jestli jedeš podle
nějakého tutorialu, návodu apod.

Je i možné, že by to v čistém Pythonu šlo snadněji než přes DataFrame, a až
bys to rozběhal, tak potom to můžeš zkusit zmigrovat do DataFrame, pokud by
to bylo z nějakého důvodu potřeba.

PM

st 22. 8. 2018 v 23:15 odesílatel  napsal:

> Jirka Vejrazka: Používám sqlite3 a pandas,  tahám z yahoo finance.
>
> Petr Messner: Omlouvám se, nevím co nebo jak udělat unit test. Tohle je
> konkrétní případ.
>
> Každý den stáhnu data z yahoo finance, naplním databázi, z které potom
> filtruji data, které splňují podmínku (- vypíše konkrétní položky) a ty
> chci právě seřadit podle "PositionScore".
>  Snad to dává aspoň trochu smysl.
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Nejvyšší číslo z databáze - řazení

2018-08-22 Tema obsahu radekmesner
Jirka Vejrazka: Používám sqlite3 a pandas,  tahám z yahoo finance.

Petr Messner: Omlouvám se, nevím co nebo jak udělat unit test. Tohle je 
konkrétní případ. 

Každý den stáhnu data z yahoo finance, naplním databázi, z které potom filtruji 
data, které splňují podmínku (- vypíše konkrétní položky) a ty chci právě 
seřadit podle "PositionScore".
 Snad to dává aspoň trochu smysl.
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Nejvyšší číslo z databáze - řazení

2018-08-22 Tema obsahu Petr Messner
Na první pohled to vypadá na nějaký Pandas. 

Radku, neměl bys raději nějaký příklad, s konkrétními hodnotami, na kterém by 
bylo vidět, co to má dělat? :) (prostě unit test)

Petr Messner

22. 8. 2018 v 21:12, Jirka Vejrazka :

> Promin, tohle je syntaxe, kterou jsem nikdy nevidel. Mohl bys napsat, jakou 
> databazi pouzivas a jakou knihovnu pro tahani dat?
> 
>   Jirka
> 
>> On Wed, 22 Aug 2018 at 21:00,  wrote:
>> Dobrý den,
>> mám tady další problém, který se mi nedaří rozluštit.
>> 
>> Mám určitou databázi dat a ty data, které splňují určité podmínky se mi 
>> vypisují. 
>> 
>> Tyto vypsané data bych chtěl ještě seřadit dle dalšího kritéria. Jenže 
>> nedaří se. Viz níže kód.
>> 
>> Co dělám špatně?
>> 
>> 
>> # 100 * (Nejvyšší High za poslední 4 úsečky – Close)/(Nejvyšší High za 
>> poslední 4 úsečky/Nejnižší Low za poslední 4 úsečky)
>> 
>> # výpočet PositionScore
>> def POSscore (data):
>>   val = 100 * (max(data['High'.shift(4)]) 
>> - 'Close')/(max(data['High'.shift(4)]) / (min(data['High']))
>> 
>>   return val
>> 
>> fbll = fbll.sort_values(by=['POSscore'], ascending=False)
>> 
>> Děkuji za případnou další pomoc.
>> ___
>> Python mailing list
>> python@py.cz
>> http://www.py.cz/mailman/listinfo/python
>> 
>> Visit: http://www.py.cz
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
> 
> Visit: http://www.py.cz
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Nejvyšší číslo z databáze - řazení

2018-08-22 Tema obsahu Jirka Vejrazka
Promin, tohle je syntaxe, kterou jsem nikdy nevidel. Mohl bys napsat, jakou
databazi pouzivas a jakou knihovnu pro tahani dat?

  Jirka

On Wed, 22 Aug 2018 at 21:00,  wrote:

> Dobrý den,
> mám tady další problém, který se mi nedaří rozluštit.
>
> Mám určitou databázi dat a ty data, které splňují určité podmínky se mi
> vypisují.
>
> Tyto vypsané data bych chtěl ještě seřadit dle dalšího kritéria. Jenže
> nedaří se. Viz níže kód.
>
> Co dělám špatně?
>
>
> # 100 * (Nejvyšší High za poslední 4 úsečky – Close)/(Nejvyšší High za
> poslední 4 úsečky/Nejnižší Low za poslední 4 úsečky)
>
> # výpočet PositionScore
> def POSscore (data):
>   val = 100 * (max(data['High'.shift(4)])
> - 'Close')/(max(data['High'.shift(4)]) / (min(data['High']))
>
>   return val
>
> fbll = fbll.sort_values(by=['POSscore'], ascending=False)
>
> Děkuji za případnou další pomoc.
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


[python] Nejvyšší číslo z databáze - řazení

2018-08-22 Tema obsahu radekmesner
Dobrý den,
mám tady další problém, který se mi nedaří rozluštit.

Mám určitou databázi dat a ty data, které splňují určité podmínky se mi 
vypisují. 

Tyto vypsané data bych chtěl ještě seřadit dle dalšího kritéria. Jenže nedaří 
se. Viz níže kód.

Co dělám špatně?


# 100 * (Nejvyšší High za poslední 4 úsečky – Close)/(Nejvyšší High za poslední 
4 úsečky/Nejnižší Low za poslední 4 úsečky)

# výpočet PositionScore
def POSscore (data):
  val = 100 * (max(data['High'.shift(4)]) 
- 'Close')/(max(data['High'.shift(4)]) / (min(data['High']))

  return val

fbll = fbll.sort_values(by=['POSscore'], ascending=False)

Děkuji za případnou další pomoc.
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Ondrej Tuma
Hoj,

jen jsem ji testoval pro budoucí použití v jednom projektu, ale z
hlediska jednoduchosti mě přijde nejlepší py-expression-eval

https://github.com/AxiaCore/py-expression-eval/

Ondra

V Wed, 22 Aug 2018 09:30:17 +0200
Petr Blahos  napsáno:

> Přátelé,
> 
> doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých
> matemetických výrazů se symboly? Představuju si to asi takto: Budu
> mít text typu: expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
> 
> a pak udělám:
> result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})
> 
> Případně ještě knihovna.zkontroluj_vyraz(expr).
> Potřebuju tam opravdu jenom + - * / a závorky.
> 
> Díky,
> Petr
> --
> http://www.blahos.com/ 
> http://traceability.cz/



-- 
Ondřej Tůma 
https://ipv6.mcbig.cz https://keybase.io/mcbigtwitter: mcbig_cz


pgp_h_YP1OTrB.pgp
Description: Digitální podpis OpenPGP
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Honza Král
dobra sada odpovedi je k videni na
https://stackoverflow.com/questions/2371436/evaluating-a-mathematical-expression-in-a-string

me se tam nejvic libi reseni s AST


On Wed, Aug 22, 2018 at 11:16 AM starenka .  wrote:

> Zalezi na slozitosti vyrazu, ale obcas staci dobrej regular a namapovat
> operatory na operator.*
>
> Tady sem to ukazoval na LT na pyvu
> https://github.com/aleszoulek/pyvo-stdlib-gems-notebooks/blob/master/04_starenka_heges.ipynb
>
> -
> 'aknerats'[::-1]
>
> On Wed, Aug 22, 2018, 11:12 Petr Viktorin  wrote:
>
>> On 08/22/18 09:30, Petr Blahos wrote:
>> > Přátelé,
>> >
>> > doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
>> > výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
>> > expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
>> >
>> > a pak udělám:
>> > result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})
>> >
>> > Případně ještě knihovna.zkontroluj_vyraz(expr).
>> > Potřebuju tam opravdu jenom + - * / a závorky.
>>
>> Ahoj,
>>
>> tl;dr: použij pyparsing, viz:
>> https://github.com/pyparsing/pyparsing/blob/master/examples/fourFn.py
>>
>>
>> Delší odpověď:
>> Vidím tři hlavní možnosti.
>>
>> 1. Pokud věříš uživatelům (např. píšeš to pro sebe), dej jim prostě k
>> dispozici celý Python. V budoucnu ti poděkují.
>> Nevýhoda je že jde napsat výraz který ti např. zformátuje disk...
>> Můžeš použít eval(), která vyhodnotí jeden výraz, nebo možná lépe exec()
>> na sadu příkazů.
>>
>>  >>> namespace = {"VAR1": 54, "VAR2": 8, "VAR3": 982}
>>  >>> expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
>>  >>> exec(expr, namespace)
>>  >>> namespace["R"]
>> 57018.0
>>
>>
>> 2: Často uvidíš lidi používat či doporučovat compile() nebo modul `ast`.
>> Doporučuju se jim vyvarovat: jsou to implementační detaily vázané na
>> konkrétní verzi CPythonu. Až vyjde nový Python, takový kód může rozbít,
>> a za dva roky budeš těžko mít náladu a čas to opravit (nemluvě o
>> udržování a testování kompatibility s dnešní verzí).
>> Tyhle věci jsou dobré na studium toho, jak Python uvnitř funguje, ne na
>> implementaci kalkulačky.
>>
>>
>> 3. Napiš parser. Doporučuju vybrat nějakou udržovanou knihovnu, spíš než
>> vzít z internetu něčí úkol do hodiny algoritmů :)
>> Pyparsing není ideální (co je?), ale funguje a kalkulačku má jako ukázku
>> použití.
>> ___
>> Python mailing list
>> python@py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>> Visit: http://www.py.cz
>>
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu starenka .
Zalezi na slozitosti vyrazu, ale obcas staci dobrej regular a namapovat
operatory na operator.*

Tady sem to ukazoval na LT na pyvu
https://github.com/aleszoulek/pyvo-stdlib-gems-notebooks/blob/master/04_starenka_heges.ipynb

-
'aknerats'[::-1]

On Wed, Aug 22, 2018, 11:12 Petr Viktorin  wrote:

> On 08/22/18 09:30, Petr Blahos wrote:
> > Přátelé,
> >
> > doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
> > výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
> > expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
> >
> > a pak udělám:
> > result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})
> >
> > Případně ještě knihovna.zkontroluj_vyraz(expr).
> > Potřebuju tam opravdu jenom + - * / a závorky.
>
> Ahoj,
>
> tl;dr: použij pyparsing, viz:
> https://github.com/pyparsing/pyparsing/blob/master/examples/fourFn.py
>
>
> Delší odpověď:
> Vidím tři hlavní možnosti.
>
> 1. Pokud věříš uživatelům (např. píšeš to pro sebe), dej jim prostě k
> dispozici celý Python. V budoucnu ti poděkují.
> Nevýhoda je že jde napsat výraz který ti např. zformátuje disk...
> Můžeš použít eval(), která vyhodnotí jeden výraz, nebo možná lépe exec()
> na sadu příkazů.
>
>  >>> namespace = {"VAR1": 54, "VAR2": 8, "VAR3": 982}
>  >>> expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
>  >>> exec(expr, namespace)
>  >>> namespace["R"]
> 57018.0
>
>
> 2: Často uvidíš lidi používat či doporučovat compile() nebo modul `ast`.
> Doporučuju se jim vyvarovat: jsou to implementační detaily vázané na
> konkrétní verzi CPythonu. Až vyjde nový Python, takový kód může rozbít,
> a za dva roky budeš těžko mít náladu a čas to opravit (nemluvě o
> udržování a testování kompatibility s dnešní verzí).
> Tyhle věci jsou dobré na studium toho, jak Python uvnitř funguje, ne na
> implementaci kalkulačky.
>
>
> 3. Napiš parser. Doporučuju vybrat nějakou udržovanou knihovnu, spíš než
> vzít z internetu něčí úkol do hodiny algoritmů :)
> Pyparsing není ideální (co je?), ale funguje a kalkulačku má jako ukázku
> použití.
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Petr Viktorin

On 08/22/18 09:30, Petr Blahos wrote:

Přátelé,

doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
expr = """R=1000*(VAR1+VAR2/2)-VAR3"""

a pak udělám:
result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})

Případně ještě knihovna.zkontroluj_vyraz(expr).
Potřebuju tam opravdu jenom + - * / a závorky.


Ahoj,

tl;dr: použij pyparsing, viz:
https://github.com/pyparsing/pyparsing/blob/master/examples/fourFn.py


Delší odpověď:
Vidím tři hlavní možnosti.

1. Pokud věříš uživatelům (např. píšeš to pro sebe), dej jim prostě k 
dispozici celý Python. V budoucnu ti poděkují.

Nevýhoda je že jde napsat výraz který ti např. zformátuje disk...
Můžeš použít eval(), která vyhodnotí jeden výraz, nebo možná lépe exec() 
na sadu příkazů.


>>> namespace = {"VAR1": 54, "VAR2": 8, "VAR3": 982}
>>> expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
>>> exec(expr, namespace)
>>> namespace["R"]
57018.0


2: Často uvidíš lidi používat či doporučovat compile() nebo modul `ast`.
Doporučuju se jim vyvarovat: jsou to implementační detaily vázané na 
konkrétní verzi CPythonu. Až vyjde nový Python, takový kód může rozbít, 
a za dva roky budeš těžko mít náladu a čas to opravit (nemluvě o 
udržování a testování kompatibility s dnešní verzí).
Tyhle věci jsou dobré na studium toho, jak Python uvnitř funguje, ne na 
implementaci kalkulačky.



3. Napiš parser. Doporučuju vybrat nějakou udržovanou knihovnu, spíš než 
vzít z internetu něčí úkol do hodiny algoritmů :)
Pyparsing není ideální (co je?), ale funguje a kalkulačku má jako ukázku 
použití.

___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Petr Messner

> vstup bude asi celkem malý a gramatika ne moc kompletní,

Chtěl jsem napsat “komplexní”.


___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Petr Messner
Ahoj,

teoreticky nejlepší přístup je vyrobit si parser, který ti ten výraz převede na 
AST strom, a ten strom pak “provést”, což je vlastně jen průchod do hloubky. 

Ten parser si můžeš vyrobit sám implementací nějakého parser algoritmu - 
vzhledem k tomu, že vstup bude asi celkem malý a gramatika ne moc kompletní, 
tak je to celkem schůdná cesta. Nebo můžeš použit nějakou knihovnu pro tvorbu 
parserů (jsou i pro Python), no a nebo můžeš využít přímo parser Pythonu - 
modul ast. Rozdíl oproti eval() pak bude ten, že bude pod tvoji kontrolou, co 
to bude dělat, takže hodně snížíš bezpečností rizika. 

Když trochu pogooglím, tak najdu:

https://gist.github.com/ircmaxell/1232629

https://stackoverflow.com/q/114586/196206

https://stackoverflow.com/q/594266/196206

https://gist.github.com/mgood/3276107

 ...a spousta dalšího 

Petr Messner

22. 8. 2018 v 9:30, Petr Blahos :

> Přátelé,
> 
> doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
> výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
> expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
> 
> a pak udělám: 
> result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})
> 
> Případně ještě knihovna.zkontroluj_vyraz(expr).
> Potřebuju tam opravdu jenom + - * / a závorky.
> 
> Díky,
> Petr
> --
> http://www.blahos.com/
> http://traceability.cz/
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
> 
> Visit: http://www.py.cz
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Michal Vyskocil
Záleží asi na požadavcích, ale nestačilo by prostě použít eval?

Případně safeeval
http://lybniz2.sourceforge.net/safeeval.html

Dne st 22. 8. 2018 9:31 uživatel Petr Blahos  napsal:

> Přátelé,
>
> doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
> výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
> expr = """R=1000*(VAR1+VAR2/2)-VAR3"""
>
> a pak udělám:
> result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})
>
> Případně ještě knihovna.zkontroluj_vyraz(expr).
> Potřebuju tam opravdu jenom + - * / a závorky.
>
> Díky,
> Petr
> --
> http://www.blahos.com/ 
> http://traceability.cz/
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


[python] Vyhodnocení jednoduchých výrazů

2018-08-22 Tema obsahu Petr Blahos
Přátelé,

doporučíte mi někdo knihovnu pro vyhodnocení jednoduchých matemetických
výrazů se symboly? Představuju si to asi takto: Budu mít text typu:
expr = """R=1000*(VAR1+VAR2/2)-VAR3"""

a pak udělám:
result = knihovna.funkce(expr, {"VAR1": 54, "VAR2": 8", "VAR3": 982})

Případně ještě knihovna.zkontroluj_vyraz(expr).
Potřebuju tam opravdu jenom + - * / a závorky.

Díky,
Petr
--
http://www.blahos.com/ 
http://traceability.cz/
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz