Wykres

Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0

Witam. Napisałam część programu, który wyświetla mi moje dane z csv file. Próbowałam już mnóstwo razy narysować wykres, gdzie oś x - data, oś y - close price, ale mi się nie udaje. Biblioteki potrzebne do tego mam. Może ktoś się zna na tym?

Kopiuj
import pandas as pd
from datetime import datetime
import csv
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
headers = ['date','close','volume','open','high','low']

df = pd.read_csv('C:/Users\Beata\Desktop\Duomenys\FB_stock_prices_daily.csv',names=headers)
print (df)

Dane wyświetlone (csv file) wyglądają tak:
date close volume open high low
0 6/18/2018 198.310 16470990 194.800 199.5800 194.1300
1 6/19/2018 197.490 19968690 196.235 197.9600 193.7900
2 6/20/2018 202.000 28175590 199.100 203.5500 198.8050
..............................................................................................

Zobacz pozostałe 4 komentarze
arczinosek
Zapytam jeszcze raz: jakiej chcesz użyć biblioteki do wyświetlenia wykresu? Czy masz już jakiś kod?
superdurszlak
@arczinosek: pierwsza kolumna to najwyraźniej indeks dołożony przez pandas, tak się lubi podziać jak bodajże nie podasz kolumny indeksującej, a tu jest po prostu CSV wczytany "na pałę" do DataFrame. coś w rodzaju df.reset_index("jakas_kolumna", drop=True) i po sprawie.
Beata Griškevič
Ta siódma kolumna to ta numeracja w Excel file. To znaczy jest to teraz pierwsze kolumna po wyświetleniu. Mam narysować wykres za pomocą pandas, numpy biblioteki
Beata Griškevič
Może znasz jakąś sprawdzoną stronę z poprawnym kodem do mego zadania? Bo już wiele wyprobowalam, i coś mi się nie udaje
SE
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 3 lata
  • Postów:318
0

Próbowałam już mnóstwo razy narysować wykres, gdzie oś x - data, oś y - close price, ale mi się nie udaje

Się zapytam - jak próbowałaś i jaki był tego efekt? Oraz jaki być powinien?

superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Kraków
  • Postów:1999
1

Jest w Pythonie taki magiczny cosik, którym można przeniuchać plik CSV żeby np. sprawdzić, czy na pewno jest Comma Separated a nie Space Separated albo Semicolon Separated: https://docs.python.org/3/library/csv.html#csv.Sniffer


Zobacz pozostałe 4 komentarze
Beata Griškevič
:D sorry, coś się z rana mi nie myśli. No tak, to fakt. A czy mógłbyś pomoc z tym wykresem?
Beata Griškevič
Wiele kodów z netu już wyprobowalam, ale najprawdopodobniej gdzieś robię błąd
superdurszlak
df.plot(x='date', y='close', ax=jakis_matplotlib_ax)?
Beata Griškevič
Czym jest ten ostatni?
Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0

Chcę otrzymać coś w tym rodzaju

Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0
Serechiel napisał(a):

Próbowałam już mnóstwo razy narysować wykres, gdzie oś x - data, oś y - close price, ale mi się nie udaje

Się zapytam - jak próbowałaś i jaki był tego efekt? Oraz jaki być powinien?

Chce otrzymać tak: (załącznik)

Beata Griškevič
Niestety wiele kodów z netu mi nie działa. Jako że tylko rozpoczęłam pracować z pandas, najprościej chyba robię jakiś błąd.
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Kraków
  • Postów:1999
0
Beata Griškevič napisał(a):
Serechiel napisał(a):

Próbowałam już mnóstwo razy narysować wykres, gdzie oś x - data, oś y - close price, ale mi się nie udaje

Się zapytam - jak próbowałaś i jaki był tego efekt? Oraz jaki być powinien?

Chce otrzymać tak: (załącznik)

A jeszcze jedno, przekształciłaś kolumnę date do typu datetime?

Kopiuj
df['date'] = pd.to_datetime(df['date'])

Na 99% pandas wczytał kolumnę date jako str, więc trochę średnio z użyciem jej jako osi czasu na wykresie.


GS
  • Rejestracja:ponad 8 lat
  • Ostatnio:4 dni
  • Postów:1265
0
Beata Griškevič napisał(a):

Chcę otrzymać coś w tym rodzaju

Dałaś kod, w którym wczytujesz CSV, ale nie podałaś kodu, którym chcesz wyświetlić wykres. Podaj ten kod, to będziemy mogli poszukać błędu.

SE
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 3 lata
  • Postów:318
0

oś x - data, oś y - close price

Na początek zobacz jak odczytane zostały kolumny:

Kopiuj
print (df.columns)

powinno dać:

Kopiuj
Index(['date', 'close', 'volume', 'open', 'high', 'low''],
      dtype='object')

Skoro zaczynasz, to zacznij od rzeczy najprostszych:

Kopiuj
df.plot.line(x = df.columns[indeks(y)], y = df.columns[indeks(y)]) 

PS. Z indeksami kolumn obchodzi się jak z listą. 0 - pierwsza, 1 - druga itd. Można na osi umieścić kilka kolumn następujących po sobie.

edytowany 1x, ostatnio: Serechiel
Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0

Mam tak:

from matplotlib.finance import candlestick_ohlc
import matplotlib.dates as dates
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import timeit
from IPython.display import clear_output

df = pd.read_csv('C:\Users\Beata\Desktop\FB_stock_prices_daily.csv', chunksize=10000, low_memory=False, iterator=True, infer_datetime_format=True, parse_dates='Date', 'Time')
data_tik = pd.concat(df, ignore_index=True)

fig = plt.figure(figsize=(15,9))
fig.add_axes()
ax = fig.add_subplot(111)
ax.plot(data_tik['Date_Time'], data_tik['Close'], color='green', label="FB", linewidth=0.8)
ax.xaxis.set_minor_locator(dates.MinuteLocator(interval=360))
ax.xaxis.set_minor_formatter(dates.DateFormatter('%H:%M'))
plt.setp(ax.xaxis.get_minorticklabels(), rotation=90, fontsize=5)
ax.xaxis.grid(True, which="minor")
ax.xaxis.set_major_locator(dates.DayLocator(interval=2))
ax.xaxis.set_major_formatter(dates.DateFormatter('\n\n%Y/%m/%d'))
plt.title("FB")
ax.set(title='FB', ylabel='Price', xlabel='Date')
plt.legend(loc='upper left')
plt.grid()
plt.show()

Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 godzin
1

Czy możesz zdefiniować problem poprawnie (co ma być konkretnie wyrysowane) oraz dodać niezbędny plik z danymi (może być wycinek), tak by można było Ci pomóc?

Beata Griškevič
Niżej opisałam swoje zadanie.
Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0
Pyxis napisał(a):

Czy możesz zdefiniować problem poprawnie (co ma być konkretnie wyrysowane) oraz dodać niezbędny plik z danymi (może być wycinek), tak by można było Ci pomóc?

Ma być narysowany wykres, na osi xsów - "date" (dzień, miesiąc, rok) - jest to słupek 1 w moich danych, oś yków stanowi close price, tzn. słupek "close".
Inne słupki nie są używane.

Dane zamieszczam w załączniku.

Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 godzin
2
Kopiuj
#!/usr/bin/env python3

import warnings
warnings.filterwarnings("ignore", message="numpy.dtype size changed")
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

data = pd.read_csv("FB_stock_prices_daily.csv")

figure = plt.figure()
axis = figure.add_subplot(111)
axis.set_title("FB")
axis.set_xlabel("date", fontsize=1)
axis.set_ylabel("close")
axis.xaxis.set_major_locator(MaxNLocator(nbins=10))
figure.autofmt_xdate()
plt.plot(data['date'], data['close'])
plt.show()

Wykres

edytowany 1x, ostatnio: Pyxis
Beata Griškevič
Traceback (most recent call last): File "C:/Users/Beata/PycharmProjects/1uzd/1u.py", line 8, in <module> data = pd.read_csv("FB_stock_prices_daily.csv") File "C:\Users\Beata\PycharmProjects\1uzd\venv\lib\site-packages\pandas\io\parsers.py", line 678, in parser_f return _read(filepath_or_buffer, kwds) File "C:\Users\Beata\PycharmProjects\1uzd\venv\lib\site-packages\pandas\io\parsers.py", line 440, in _read parser = TextFileReader(filepath_or_buffer, **kwds)
Beata Griškevič
tyle błędów otrzyymałam :(
Beata Griškevič
W czym może być problem?
Beata Griškevič
Sorry, wszystko ok ! Dodałam konkretną lokalizację
GS
@{Beata Griškevič}: wypada podziękować koledze dając okejkę albo ptaszka
Beata Griškevič
Chętnie to zrobię!
Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0

Mam jeszcze jedno pytanie. Dlaczego na wykresie mam datę od 2018.06.15 do 2018.09.15, chociaż same dane rozpoczynają się od 2018.06.18 - 2018.09.18? I jak to naprawić? Następne pytanie to - dlaczego oś xsów tak nieładnie wygląda? Zostawiam wykres w załączniku.

Kopiuj
import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv(r'C:\Users\Beata\Desktop\Data\FB_stock_prices_daily.csv')
data['date'] = pd.to_datetime(data['date'])
print(data)


figure = data.plot(x = 'date', y = 'close')
plt.legend(['Close price'])

plt.xlabel('date')
plt.ylabel('close price')
plt.title('Facebook stock price daily')
plt.show()

edytowany 1x, ostatnio: Beata Griškevič
Beata Griškevič
bo jak próbowałam ją gdzieś wsadzić, to mi wyskakują błędy.
superdurszlak
to wrzucaj cały stack trace na jakiś pastebin i daj link, bo urywki nie zawsze wszystko powiedzą
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Kraków
  • Postów:1999
0

Na osi x nie masz oznaczonych faktycznych rekordów, tylko jakieś tam domyślne ticki - punkty w czasie jako daty. Wygląda na to, że major tick jest ustawiony na co 1, 15 i 29 dzień miesiąca, 1 i 29 są blisko i się nakładają. Podejrzewam, że załatwia to ta linijka kodu w odpowiedzi @Pyxis:

Kopiuj
axis.xaxis.set_major_locator(MaxNLocator(nbins=10))

Jak chcesz żeby ticki były naniesione np. na każdy N-ty i M-ty dzień miesiąca (np. tylko 1 i 15) możesz użyć tego, a format daty ogarnąć odpowiednim formatterem, jeśli Ci nie odpowiada.


edytowany 1x, ostatnio: superdurszlak
Beata Griškevič
Poniżej umieszczę co otrzymuję (dodam załącznik z wykresem). Wykres otrzymuje, wszystko ok, ale oś xsów - to tylko rok. Jak to naprawić? Ma być i miesiąc, dzień. Chcę rozpocząć od 2018.06.18 i skończyć 2018.09.18, ale też wybrać jakiś interval co 15 dni. Próbowałam zrobić to z axis.xaxis.set_major_locator(dates.DayLocator()), no i właściwie nie daję rady.
superdurszlak
jak nie wskażesz zakresu od-do dla osi to pod spodem matplotlib sam dopasuje zakres. kwestię formatu dat załatwi jakiś DateFormatter z matplotlib.dates. Wystarczy podać format np. "yyyy-mm-dd" czy coś w tym rodzaju, w dokumentacji jest pewnie podany. Poza tym odnoszę coraz silniejsze wrażenie, że nawet nie próbujesz w międzyczasie googlować.
Beata Griškevič
googluje i oglądam tutorials, ale z jakiejś przyczyny mi nie działają te kody. Już chyba wszystkie biblioteki włączyłam w Pycharm...
Beata Griškevič
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:40
0

Wykres otrzymuje, wszystko ok, ale oś xsów - to tylko rok (w załączniku umieszczam wykres). Jak to naprawić? Ma być i miesiąc, dzień. Chcę rozpocząć od 2018.06.18 i skończyć 2018.09.18, ale też wybrać jakiś interval = 15 dni. Próbowałam zrobić to z axis.xaxis.set_major_locator(dates.DayLocator()), no i właściwie nie daję rady. Chyba mi czegoś nie wczytuje..

Kopiuj
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import matplotlib.dates as dates
import pandas as pd


data = pd.read_csv(r'C:\Users\Beata\Desktop\Duomenys\FB_stock_prices_daily.csv')
data['date'] = pd.to_datetime(data['date'])

figure = plt.figure()
axis = figure.add_subplot(111)
axis.set_title("FB")
axis.set_xlabel("date")
axis.set_ylabel("close")
plt.setp(axis.xaxis.get_minorticklabels(), rotation=90, fontsize=5) 
axis.xaxis.grid(True, which="minor")
axis.xaxis.set_major_locator(dates.DayLocator())
axis.xaxis.set_major_locator(MaxNLocator(nbins=11)) 
axis.xaxis.set_minor_formatter(dates.DateFormatter('&d/$m/$Y'))

figure.autofmt_xdate() 
plt.plot(data['date'], data['close'])
plt.grid()
plt.show()



edytowany 2x, ostatnio: Beata Griškevič
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Kraków
  • Postów:1999
0
Beata Griškevič napisał(a):

Wykres otrzymuje, wszystko ok, ale oś xsów - to tylko rok (w załączniku umieszczam wykres). Jak to naprawić? Ma być i miesiąc, dzień. Chcę rozpocząć od 2018.06.18 i skończyć 2018.09.18, ale też wybrać jakiś interval = 15 dni. Próbowałam zrobić to z axis.xaxis.set_major_locator(dates.DayLocator()), no i właściwie nie daję rady. Chyba mi czegoś nie wczytuje..

Kopiuj
axis.xaxis.set_major_locator(dates.DayLocator())
axis.xaxis.set_major_locator(MaxNLocator(nbins=11)) 

Ustawiasz locator jako DayLocator bez parametrów, a zaraz potem ustawiasz locator jako MaxNLocator. Jak to ma działać, skoro nie tylko nie wskazujesz DayLocator'owi, które dni Cię interesują, ale jeszcze chwilę później zastępujesz go innym locatorem??

Poza tym gdyby wygooglować DateFormatter w dokumentacji matplotliba, co trudne raczej nie jest, dostajemy informację, że pod spodem używany jest strftime z biblioteki standardowej Pythona, który ma już podane obsługiwane formaty. Z których wynika, że "&a-$b-#c" czy coś w tym stylu nie ma prawa zadziałać, powinno być np. "%d-%m-%Y" aby otrzymać 18-09-2018.

Ale już nawet szkoda mi otwierać LMGTFY.


edytowany 2x, ostatnio: superdurszlak
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)