Re: [python] table querying

2018-03-06 Tema obsahu Petr Messner
Něco takového?

http://harelba.github.io/q/

Jinak příklad s tím jq by vypadal takhle:

echo -e 'model,variant,count,description\nTZX,v1,12,foo\nXX,n,3,bar' |
./csv_to_jsonl.py | jq 'select((.model|test("^TZ")) and (.count|tonumber >
10))'

(formát výstupu se dá změnit)

Dne 6. března 2018 13:56 Vláďa Macek  napsal(a):

> Děkuju všem reagujícím.
>
> In-memory SQLite, Python samotný, Pandas, shell, XPath, ... ano, to jsou
> všechno validní záležitosti.
>
> Měl jsem však před očima něco takového, co když dostane na vstupu tabulku,
> kde první řádek je záhlaví
>
> MODEL | VARIANT | COUNT | DESCRIPTION
>
> a dostane stringové query třeba takto jednoduché
>
> 'MODEL =~ ^TZ && int(COUNT) > 10'
>
> tak vygeneruje všechny řádky, které tomu odpovídají. Když máte data v
> hromadě tabulek s nestabilní strukturou, které upravuje víc lidí přes cloud
> a váš sw s tím má pracovat nebo nad tím něco ladit, ne vždy to dělají
> programátoři, pak takováto jednoduchost může být přínosem.
>
> Jen mě napadlo, jestli o něčem podobném zavedeném nevíte. (Sám si
> samozřejmě během 20 sekund poradím v Pythonu s čímkoli.)
>
> Dík,
>
> V.
>
> ___
> 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] table querying

2018-03-06 Tema obsahu Vláďa Macek
Děkuju všem reagujícím.

In-memory SQLite, Python samotný, Pandas, shell, XPath, ... ano, to jsou
všechno validní záležitosti.

Měl jsem však před očima něco takového, co když dostane na vstupu tabulku,
kde první řádek je záhlaví

MODEL | VARIANT | COUNT | DESCRIPTION

a dostane stringové query třeba takto jednoduché

'MODEL =~ ^TZ && int(COUNT) > 10'

tak vygeneruje všechny řádky, které tomu odpovídají. Když máte data v
hromadě tabulek s nestabilní strukturou, které upravuje víc lidí přes cloud
a váš sw s tím má pracovat nebo nad tím něco ladit, ne vždy to dělají
programátoři, pak takováto jednoduchost může být přínosem.

Jen mě napadlo, jestli o něčem podobném zavedeném nevíte. (Sám si
samozřejmě během 20 sekund poradím v Pythonu s čímkoli.)

Dík,

V.

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

Visit: http://www.py.cz


Re: [python] table querying

2018-03-06 Tema obsahu Petr Messner
Dne 5. března 2018 16:36 Petr Viktorin  napsal(a):

> Nebo s Pandas...
>
> import pandas
> pandas.Series(range(10)).map('map mame {}'.format)
>
>
Ano, to je ono :) Díky za doplnění.

Na takovémhle API se mi líbí, že když k tomu chci něco přidat, tak to
prostě přidám na konec, nemusím pak ještě lézt na začátek řádky a doplnit
tam závorku nebo nějakou omáčku. Příklad:

tady_mi.neco_vraci_data()

Teď si usmyslím, že to chci fitrovat, takže v (čistém) Pythonu musím udělat
něco takového:

*[x for x in *tady_mi.neco_vraci_data()* if x.něco()]*
nebo
*filter(lambda x: x.něco(), *tady_mi.neco_vraci_data()*)*

A když si rozmyslím, že s tím chci dělat ještě něco dalšího, třeba sesortit
a pak nějakou transformaci:

[nějaká_transformace(x) for x in sorted(x for x in
tady_mi.neco_vraci_data() if x.něco())]
nebo
map(nějaká_transformace, sorted(filter(lambda x: x.něco(),
tady_mi.neco_vraci_data(

Uf, začíná to být nepřehledné :)

Jeden způsob, jak toto řešit, je API, kdy vrácený objekt (array nebo nějaký
stream) má metody map, filter, sort apod.

tady_mi.neco_vraci_data().filter(x =>
x.něco()).sort().map(nějaká_transformace)

Něco takového tedy zřejmě umí Pandas, nebo např. SQLAlchemy Query objekt.

Také si všimněte, že je zde přirozené pořadí operací: a.b.c.d místo
d(c(b(a(

Druhý způsob je obohatit programovací jazyk o nějaký *pipe operátor*, jako
to má např. F#, Elixir a určitě i další jazyky (následující ukázka je jen
pseudokód):

tady_mi.neco_vraci_data() |> filter(x => x.něco()) |> sort |>
nějaká_transformace

Tenhle přístup je podle mě čitelnější a pokud si ho rozepíšete na více
řádků, tak při vývoji a ladění toho kódu můžete jednotlivé kroky snadno
přeskočit zakomentováním celého řádku - nemusíte lítat po složitém výrazu
sem tam a ubírat/přidávat závorky nebo list comprehension omáčku.

No a unixový shell funguje přesně stejně :) ./dej_mi_data | grep něco |
sort | sed ...

Pipe operátor teda v Pythonu není, a ani nevím, jestli by mělo smysl ho tam
přidávat z důvodu, aby Python nebyl zbytečně zesložiťován. Ale chtěl jsem
tu ukázat i jiný přistup.

Ani ten shell bych nepodceňoval - v mém minulém mailu jsem napsal o utilitě
jq. Díky přístupu, když si zpracování dat udělám pomocí příkazů v shellu,
pak můžu použít nástroje parallel, sort, gzip, ssh, sed, awk apod. a data
pak můžu zpracovávat v gigabajtech za sekundu, což by v samotném Pythonu
bylo velmi náročné (existuje modul multiprocess, ale už to pak zdaleka
nebude oneliner). Zase není potřeba kvůli všemu pouštět Hadoop :)

Tohle je oproti původnímu dotazu už docela offtopic, pro nějaké občasné
zpracování CSV z google spreadsheetu to je overkill, ale zase jsem se chtěl
rozepsat, jak nad tím přemýšlím a jaké jsou možnosti. Klidně na to nějak
reagujte. Napadlo mě třeba, že by se dala napsat nějaká Python funkce,
která by přijímala data a transformace v parametrech a vytvořila by právě
tu pipe mezi nimi.

Taky je možná problém s tím, že jsem si všiml, že pro lidi je funkce, která
přijímá nebo vrací funkci, aspoň ze začátku ne úplně stravitelná, natož
ještě s generátory, iterátory... Možná by toto mohlo být více probíráno v
kurzech Pythonu.

Petr Messner


>
> On 03/05/18 16:23, starenka . wrote:
>
>> In [2]: list(map(lambda x: 'map mame %s' % x, range(10)))
>> Out[2]:
>> ['map mame 0',
>>   'map mame 1',
>>   'map mame 2',
>>   'map mame 3',
>>   'map mame 4',
>>   'map mame 5',
>>   'map mame 6',
>>   'map mame 7',
>>   'map mame 8',
>>   'map mame 9']
>>
>>
>> ---
>> In Perl you shoot yourself in the foot, but nobody can understand how you
>> did it. Six months later, neither can you. | print 'aknerats'[::-1]
>>
>> 2018-03-05 16:02 GMT+01:00 Petr Messner > petr.mess...@gmail.com>>:
>>
>> No, je na to jeden takový super jazyk - Python :)
>>
>> I když teda existuje jazyk, ve kterém se nějaké adhoc datové
>> transformační pipelines dělají ještě lépe - Javascript. Škoda, že
>> Python list nemá metodu map, musí se to dělat minimálně přes list
>> comprehensions, což je sice obecnější, ale o něco pomaleji se to píše.
>>
>> Pro old-schoolery potom grep, sed a awk.
>>
>>
>> Dne 5. března 2018 14:31 Vláďa Macek > > napsal(a):
>>
>> Zdar,
>>
>> mějme tabulková data načtená třeba z CSV nebo Google Tabulku.
>> Víte o
>> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
>> dotazovací jazyk?
>>
>> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V
>> (příp.
>> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>>
>> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní
>> potřebu a hrdě
>> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>>
>> Díky,
>>
>> V.
>>
>>
>> ___
>> Python mailing list
>> python@py.cz 
>> http://www.py.cz/mailman/listinfo/python
>> 

Re: [python] table querying

2018-03-05 Tema obsahu Petr Viktorin

Nebo s Pandas...

import pandas
pandas.Series(range(10)).map('map mame {}'.format)


On 03/05/18 16:23, starenka . wrote:

In [2]: list(map(lambda x: 'map mame %s' % x, range(10)))
Out[2]:
['map mame 0',
  'map mame 1',
  'map mame 2',
  'map mame 3',
  'map mame 4',
  'map mame 5',
  'map mame 6',
  'map mame 7',
  'map mame 8',
  'map mame 9']


---
In Perl you shoot yourself in the foot, but nobody can understand how 
you did it. Six months later, neither can you. | print 'aknerats'[::-1]


2018-03-05 16:02 GMT+01:00 Petr Messner >:


No, je na to jeden takový super jazyk - Python :)

I když teda existuje jazyk, ve kterém se nějaké adhoc datové
transformační pipelines dělají ještě lépe - Javascript. Škoda, že
Python list nemá metodu map, musí se to dělat minimálně přes list
comprehensions, což je sice obecnější, ale o něco pomaleji se to píše.

Pro old-schoolery potom grep, sed a awk.


Dne 5. března 2018 14:31 Vláďa Macek mailto:ma...@sandbox.cz>> napsal(a):

Zdar,

mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
elegantním nástroji (modulu) pro Python implementujícím jednoduchý
dotazovací jazyk?

Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.

Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní
potřebu a hrdě
zveřejněného, aby si autor otestoval psaní setup.py. :-)

Díky,

V.


___
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


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

Visit: http://www.py.cz


Re: [python] table querying

2018-03-05 Tema obsahu starenka .
In [2]: list(map(lambda x: 'map mame %s' % x, range(10)))
Out[2]:
['map mame 0',
 'map mame 1',
 'map mame 2',
 'map mame 3',
 'map mame 4',
 'map mame 5',
 'map mame 6',
 'map mame 7',
 'map mame 8',
 'map mame 9']


---
In Perl you shoot yourself in the foot, but nobody can understand how you
did it. Six months later, neither can you. | print 'aknerats'[::-1]

2018-03-05 16:02 GMT+01:00 Petr Messner :

> No, je na to jeden takový super jazyk - Python :)
>
> I když teda existuje jazyk, ve kterém se nějaké adhoc datové transformační
> pipelines dělají ještě lépe - Javascript. Škoda, že Python list nemá metodu
> map, musí se to dělat minimálně přes list comprehensions, což je sice
> obecnější, ale o něco pomaleji se to píše.
>
> Pro old-schoolery potom grep, sed a awk.
>
>
> Dne 5. března 2018 14:31 Vláďa Macek  napsal(a):
>
> Zdar,
>>
>> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
>> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
>> dotazovací jazyk?
>>
>> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
>> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>>
>> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
>> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>>
>> Díky,
>>
>> V.
>>
>>
>> ___
>> 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] table querying

2018-03-05 Tema obsahu Petr Messner
Pokud si CSV převedeš do JSONL, což je podle mě vhodnější formát pro data,
tak potom doporučuji utilitu jq, je to něco jako XPath pro JSON:
https://stedolan.github.io/jq/ A díky streamování můžeš i zpracovávat data,
která se ti nevejdou ani do paměti, a paralelizovat přes všechna CPU (nebo
si CPU vypůjčit z cloudu), kdyby náhodou někdy bylo potřeba.

Dne 5. března 2018 16:02 Petr Messner  napsal(a):

> No, je na to jeden takový super jazyk - Python :)
>
> I když teda existuje jazyk, ve kterém se nějaké adhoc datové transformační
> pipelines dělají ještě lépe - Javascript. Škoda, že Python list nemá metodu
> map, musí se to dělat minimálně přes list comprehensions, což je sice
> obecnější, ale o něco pomaleji se to píše.
>
> Pro old-schoolery potom grep, sed a awk.
>
>
> Dne 5. března 2018 14:31 Vláďa Macek  napsal(a):
>
> Zdar,
>>
>> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
>> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
>> dotazovací jazyk?
>>
>> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
>> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>>
>> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
>> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>>
>> Díky,
>>
>> V.
>>
>>
>> ___
>> 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] table querying

2018-03-05 Tema obsahu Matěj Cepl
On 2018-03-05, 13:34 GMT, Ales Zoulek wrote:
> in-memory sqlite?

Natáhnout celou tabulku do SQLite a zpracovávat SQL příkazy.  
A SQLite umí pracovat nejenom nad souborem, ale i nad daty jenom 
v paměti.

Matěj
-- 
https://matej.ceplovi.cz/blog/, Jabber: mc...@ceplovi.cz
GPG Finger: 3C76 A027 CA45 AD70 98B5  BC1D 7920 5802 880B C9D8
 
To the well-organized mind, death is but the next great adventure.
  -- Albus Dumbledore
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] table querying

2018-03-05 Tema obsahu Petr Messner
No, je na to jeden takový super jazyk - Python :)

I když teda existuje jazyk, ve kterém se nějaké adhoc datové transformační
pipelines dělají ještě lépe - Javascript. Škoda, že Python list nemá metodu
map, musí se to dělat minimálně přes list comprehensions, což je sice
obecnější, ale o něco pomaleji se to píše.

Pro old-schoolery potom grep, sed a awk.


Dne 5. března 2018 14:31 Vláďa Macek  napsal(a):

> Zdar,
>
> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
> dotazovací jazyk?
>
> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>
> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>
> Díky,
>
> V.
>
>
> ___
> 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] table querying

2018-03-05 Tema obsahu starenka .
pandas

---
In Perl you shoot yourself in the foot, but nobody can understand how you
did it. Six months later, neither can you. | print 'aknerats'[::-1]

2018-03-05 14:51 GMT+01:00 Jirka Vejrazka :

> Ja si tohle vetsinou pisu na kolene, byva to rychlejsi nez pouzit nejaky
> hotovy nastroj. Vetsinou potrebuju jen dve nebo tri podminky a je pro mne
> jednodussi to pomoci "csv" modulu napsat, nez se zabyvat nejakym importem.
> Pokud je to hodne dat, poustim to pod pypy.
>
> Ale YMMV :)
>
>   Jirka
>
> 2018-03-05 14:31 GMT+01:00 Vláďa Macek :
>
>> Zdar,
>>
>> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
>> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
>> dotazovací jazyk?
>>
>> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
>> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>>
>> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
>> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>>
>> Díky,
>>
>> V.
>>
>>
>> ___
>> 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] table querying

2018-03-05 Tema obsahu Jirka Vejrazka
Ja si tohle vetsinou pisu na kolene, byva to rychlejsi nez pouzit nejaky
hotovy nastroj. Vetsinou potrebuju jen dve nebo tri podminky a je pro mne
jednodussi to pomoci "csv" modulu napsat, nez se zabyvat nejakym importem.
Pokud je to hodne dat, poustim to pod pypy.

Ale YMMV :)

  Jirka

2018-03-05 14:31 GMT+01:00 Vláďa Macek :

> Zdar,
>
> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
> dotazovací jazyk?
>
> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>
> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>
> Díky,
>
> V.
>
>
> ___
> 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] table querying

2018-03-05 Tema obsahu Petr Viktorin

On 03/05/2018 02:31 PM, Vláďa Macek wrote:

Zdar,

mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
elegantním nástroji (modulu) pro Python implementujícím jednoduchý
dotazovací jazyk?

Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.

Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
zveřejněného, aby si autor otestoval psaní setup.py. :-)


Pandas umí věci jako:

table = pandas.read_csv('foo.csv')
print(table[(table['B'].str.match(V_regex)) && (table['C'] != V1) && 
(table['C'] != V2)])


(Nevyzkoušeno; jestli tě zradí Google, dej vědět.)
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] table querying

2018-03-05 Tema obsahu Jakub Vysoky
in-memory sqlite se ti nezamlouva?

2018-03-05 14:31 GMT+01:00 Vláďa Macek :

> Zdar,
>
> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
> dotazovací jazyk?
>
> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>
> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>
> Díky,
>
> V.
>
>
> ___
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
> 
> Freehosting PIPNI - http://www.pipni.cz/
>
>


-- 
Jakub Vysoky

mob: +420 605 852 377
jab: jakub.vys...@gmail.com
twit: https://twitter.com/kvbik
___
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz


Re: [python] table querying

2018-03-05 Tema obsahu Ales Zoulek
Hola,

in-memory sqlite?


A.

On Mon, Mar 5, 2018 at 2:32 PM Vláďa Macek  wrote:

> Zdar,
>
> mějme tabulková data načtená třeba z CSV nebo Google Tabulku. Víte o
> elegantním nástroji (modulu) pro Python implementujícím jednoduchý
> dotazovací jazyk?
>
> Jako "dej mi všechny řádky, které mají ve sloupci B hodnotu V (příp.
> regexp), ve sloupci C nemají hodnoty V1 ani V2" atd.
>
> Jde mi o etablovanou věc. Ne něco spíchnutého pro vlastní potřebu a hrdě
> zveřejněného, aby si autor otestoval psaní setup.py. :-)
>
> Díky,
>
> V.
>
>
> ___
> 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