kamil_zdun
Kolegi,

#python #programowanie i chyba #bigdata

Z CSVa odczytuje sobie wartości - ledwie około 1100, bo to próba, docelowo ma być ich.... no, średnio 16200.
Chcę sobie wyrzucić te wartości na matplotlibie, tak by po x był czas a po y wartość. Taka wizualizacja logów.

Problem w tym,że załadowanie tych 1100 wartości stanowi spory problem dla matplot liba. Trwa to długo, a wykres jest nieczytelny. Pytanie, co można zrobić, by utworzyć z tego czytelny wykres?
Na teraz odczytuje wszystko, nie pomijam, nie uśredniam. Dwie tablice [x] = czas z logu, [y] = wartość, po dokładnie 1084 elementów każda.
  • Najlepsze
  • Wszystkie komentarze
pp555
pp555
pp555
3
@kamil_zdun:

1. tak jak radzi @ludi889, najpierw zmierz czas - jabym sprawdził czas wykonywania poszczególnych fragmentów kodu:
- wczytywania pliku
- pętli wyciągającej dane z odpowiednich
mprzemo
mprzemo
@kamil_zdun: ja rysowałem ok 50k punktów matplotlibem i wykres pokazywał się szybko.
ludi889
@kamil_zdun to co powyżej. 1100 wpisów to z punktu widzenia danych tyle co nic. Może po drodze robisz jakieś zasobożercze transformacje? Albo odczyt jest źle przeprowadzony? Albo CSV źle skonstruowany?
ludi889
@kamil_zdun Osobiście nie mam konkretnego pomysłu, na ten moment.

Jeśli żaden z kolegów nie zaproponuje innego rozwiązania, sugeruję wrzucić timeit na poszczególne pętlę odczytu danych by sprawdzić z którymi najdłużej się męczy (bo tutaj idą głównie moje podejrzenia) i zawęzić możliwe problemy - https://www.geeksforgeeks.org/timeit-python-examples/
kamil_zdun
kamil_zdun Autor
0
@mprzemo: @ludi889: csv jest generowany przez urządzenie jako log.

Zobaczcie
ludi889
@kamil_zdun: 1. Po odczycie danych z csv możesz go zamknąć (https://docs.quantifiedcode.com/python-anti-patterns/maintainability/not_using_with_to_open_files.html)
2. Wszystkie dane są dobrze sformatowane w CSV?
kamil_zdun
kamil_zdun Autor
0
@ludi889: Wszystkie te liczbowe - tak. mają postać floatów (xxx.x), oprócz czasu defacto, bo ten ma postać XX:xx:xx
ludi889
@kamil_zdun I w takim formacie nanosisz je na wykres?
kamil_zdun
kamil_zdun Autor
0
@ludi889: jak zwróciłeś uwagę - tak jak są. x, y, y2 są tablicami z elementami odczytanymi w pętli z csv. Nic z nimi nie robię po drodze.
kamil_zdun
kamil_zdun Autor
0
@ludi889: po usunięciu w ogóle podstawy czasu - nic się nie zmienia - dalej to wszystko długo trwa
kamil_zdun
kamil_zdun Autor
0
@ludi889: tak czy inaczej dzięki za pomoc. :D
ludi889
@kamil_zdun Jeśli timeit da jakieś wyniki, daj znać :)
kamil_zdun
kamil_zdun Autor
0
@ludi889: po zahashowaniu plt.show - timeit = 1,526 ( ͡° ͜ʖ ͡°)
ludi889
@kamil_zdun Więc problem leży w odczycie danych
kamil_zdun
kamil_zdun Autor
0
moge, to tylko i wyłącznie moja fantazja ten program.
Ideą było wystawienie danych jako elementów w tablicy, łatwych dla matplot liba, ale spróbuję z pandasami i konwersją do flołtów! Stay tuned!

@pp555:
kamil_zdun
kamil_zdun Autor
0
Jeszcze jedna rzecz, skoro was tutaj mam.

Zakładamy, że wartości z konkretnych kolumn odczytujemy w pętli do listy przechowującej wartości.

Użytkownik na początku deklaruje ilość parametrów jaką chce nanieść na wykres np.parameters = 4

Robimy
ludi889
@kamil_zdun nie możesz inicjalizować listy w pętli, bo będzie nadpisywania. Jeśli uważasz że będzie to popularny feature, możesz inicjalizować listę jako placeholder razem z innymi. A całkowicie optymalnie będzie ją tworzyć w ifie (jeśli użytkownik chce wybrać listę z określoną ilością parametrów, inicjalizujesz listę). Różnica raczej niewielka w kwestii zarządzania zasobami.
kamil_zdun
kamil_zdun Autor
0
@ludi889: no właśnie chodzi mi o to, żeby program tworzył x list gdzie x podany przez użytkownika, po to, żeby móc tam zapisywać wartości z csv. W jaki inny sposób można to zdefiniować?
ludi889
@kamil_zdun Chodzi Ci o zrobienie list w listach?

Może lepiej będzie to ogarnąć dictionarem?
kamil_zdun
kamil_zdun Autor
0
@ludi889: Nie, zupełnie nie.
Zobacz, że w tej chwili mam na sztywno stworzone dwie listy y i y2.
Użytkownik wybiera sobie dwa parametry które chce narzucić na wykres i dziękuję pozdrawiam.

A chcę, żeby ilość list była definiowana przez użytkownika. Żeby program stworzył n list, zapytał o n parametrów od odczytu, odczytał tych n parametrów a potem nałożył na