Aktywne Wpisy
Ksiega_dusz +178
Mam w pracy analityczkę na stanowisku „Analityk Systemowy”. Oczywiście przebranżowiona w czasach ssania i gdzie brano do IT każdego kto miał puls i umiał powiedzieć słowo „JSON”. Jest po „europeistyce”. Była też na Erasmus, podczas gdy ja waliłem konia z depresji (żadna mnie nie chciała) i uczyłem się po nocach na kolokwium z języka C.
Zarabia coś koło 14-15k brutto na UoP, stażu ma 5 lat. Zarabia niewiele mniej ode mnie, bo ja mam 19k brutto na UoP jako programista Java z 7 latami expa.
Do czego pije? Przeglądałem ofertę pracy w mojej firmie na Analityka Systemowego i w wymaganiach jest jasno napisane że umiejętność SQL’a, znajomość REST API, umiejętność modelowania BPMN czy UML. Wspomaganie procesu wytwarzania oprogramowania.
Pracuje
Zarabia coś koło 14-15k brutto na UoP, stażu ma 5 lat. Zarabia niewiele mniej ode mnie, bo ja mam 19k brutto na UoP jako programista Java z 7 latami expa.
Do czego pije? Przeglądałem ofertę pracy w mojej firmie na Analityka Systemowego i w wymaganiach jest jasno napisane że umiejętność SQL’a, znajomość REST API, umiejętność modelowania BPMN czy UML. Wspomaganie procesu wytwarzania oprogramowania.
Pracuje
WielkiNos +278
Hej Mirki, tak sobie dlubie proste ETL w #pandas #numpy #python i glowkuje jak tu skrocic czas ladowania trzech duzych (1GB kazdy 900k x 200) CSV. Jedyne co przychodzi mi jeszcze do glowy to dorzucenie multiprocesingu bo duzo sie dzieje, z %pruna widze ze w tej chwili CPU jest waskim gardlem. Probowalem w prymitywny sposob zaladowac to w multi rozrzucajac kazdy plik na osobny proces ale naturalnie zabraklo RAMu, wiem, ze musze zchunkowac pliki i rozdystrybuowac chunki do workerow, probowalem chunksize= ale cos mi to nie bardzo chce w multi biegac. Bede jeszcze jutro probowal z np.arraysplit.
moj csvread wyglada tak:
paths = os.path.join(VOLUME_CSV, "volume PN FY*.csv")
files = glob.glob(paths)
def csv_reader(file):
df = pd.read_csv(file,
low_memory=False,
cache_dates=True,
thousands=',',
infer_datetime_format=True,
parse_dates=["Funded date", "Maturity date"],
dtype=col_types,
true_values=['Y'],
false_values=['N'],
na_values=['-'],
index_col=False
)
return df
df = pd.concat(map(csv_reader, files), ignore_index=True).reset_index(drop=True)
Czy macie jakis boiler plate jak to ugrysc, dobre rady, slowo na pocieszenie? Jak to zoptymalizowac. Wrzucilem pytanie na stacka ale narazie cisza:
https://stackoverflow.com/questions/72944450/pandas-chunks-from-multiple-files-to-list-collection-to-process-them-with-mult
Jeszcze jedno, chce to zrobic bez Daska, bede chcial dorzucic tam jeszcze jakies operacje ale generalnie wiekszosc manipulacji mam z uzycie wektoryzacji wiec nie warto ich ruszac.
Z gory dziekuje za pomoc.
https://www.pola.rs/
Ewentualnie Pyarrow - https://arrow.apache.org/docs/python/generated/pyarrow.csv.read_csv.html
@Acrylic: Zostaje w Pythonie, kolejne niepowodzenia w napisaniu tego skryptu z multiprocessingiem pchaja mnie w kierunku Dask'a lub PyArrowa, dzieki
Polars jest naprawdę spoko, piszę się w tym jak Pandas, u nas w firmie właśnie migrujemy z Pandas na Polars gdzie się da.
Możesz też użyć Ray lub bardziej high level Modin. Generalnie nie wiem jaki przyrost wydajności cię interesuje, na pewno jakbyś miał pliki w formacie Parquet to byłoby lepiej.
Dlaczego personalnie nie chce w tej chwili juz przejsc na Dask'a, chociaz dalej sie nad tym zastanawiam. CSV ktore mam sa syfiaste, ladujac je przez pandasa uzywam bardzo wielu parametrow (oznaczenie false/true values, znak dziesietny, parsowanie daty, navalues), metoda readcsv Pandasa zalatwia za mnie sporo rzeczy i nie chce mi sie tego teraz odtwarzac bo ani Dask, ani PyArrow nie maja az tak rozbudowanego interfejsu ladowania CSV, wszystko trzeba zaladowac w stringu i potem zrobic czyszczenie. Zbior z ktorym pracuje ma ponad 200 kolumn z mix typam. Generalnie jest jeszcze taka sytuacja, ze w sumie osiagnalem juz tak duzy skok wydajnosciowy, ze to juz bardziej dla sportu z tym walcze. Proces oparty o PowerQuery mielil 2 godziny, oczywiscie wszystko zwalnialo przez zle zarzadzanie RAMem ale PQ nie uzywa wektoryzacji. Dane maja duplikaty po normalizacji wiec nie zrobisz uppera na category, lecisz po calym series, kolumn na ktorych mialem to zrobic jest 139 z wysoka kardynalnoscia. To konsumuje duzo zasobow. Tak czy siak z 2 godzin zszedlem ponizej 5 minut. Wiem, ze Pandas i Numpy nie sa stworzone do takich celow ale na moje potrzeby, na ten moment wystacza oferujac spory bump wydajnosciowy.
Generalnie, gdyby to ode mnie zalezalo juz dawno caly dataset wyladowal by na SQL w chmurze, ale u mnie sie
Tak czy siak, dzieki za podrzucenie Polarisa, bede jeszcze to rozmasowywal az zacznie dzialac :)