Python. Wykres na podstawie danych z csv. Błąd w kodzie.

Odpowiedz Nowy wątek
2018-09-25 20:45
0

Witam. Czy może ktoś pomóc z poprawnym napisaniem def funkcji dla odczytania danych z csv i ich otrzymania na wykresie? Jestem początkująca, dlatego nie udaje mi się właśnie to. Oto program jakim próbuję to realizować:

import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as dates

def readfile(x):
    data_pd = pd.read_csv(x, parse_dates=[['DATE', 'TIME']])
    format = '%Y%m%d %H%M'
    data_pd = data_pd.set_index(data_pd['DATE_TIME'])
    data_pd['DATE_TIME'] = pd.to_datetime(data_pd['DATE_TIME'], format = format)
    data_pd = data_pd.set_index(data_pd['DATE_TIME'])
    data_pd = data_pd.drop(columns = ['DATE_TIME'])
    return data_pd

readfile(r'C:\Users\Beata\Desktop\Duomenys\minute.csv')
print(readfile)

def draw(y):
    fig = plt.figure(figsize=(10,7))
    fig.add_axes()
    ax = fig.add_subplot(111)
    ax.xaxis.grid(True, which='minor')
    date_formatter = dates.DateFormatter('%H:%M')
    ax.xaxis.set_major_locator(dates.MinuteLocator(interval=35))
    ax.xaxis.set_major_formatter(date_formatter)
    plt.setp(ax.xaxis.get_majorticklabels(), rotation=90, fontsize=7)
    fig.autofmt_xdate()
    ax.autoscale_view()
    y['OPEN'].plot()
    ax.set(title='SPY 2012-03-30', ylabel='Cena', xlabel='Czas')
    plt.legend(loc='upper left')
    plt.grid()
    plt.show()

draw(data_pd)

Dane wyglądają:

DATE TIME OPEN HIGH LOW CLOSE VOLUME SPLITS EARNINGDIVIDENDS
20120330 400 140.66 140.66 140.66 140.66 2160 1 0 0
20120330 405 140.63 140.63 140.63 140.63 180 1 0 0
20120330 407 140.64 140.64 140.64 140.64 100 1 0 0
20120330 409 140.64 140.64 140.61 140.61 1110 1 0 0
20120330 410 140.58 140.58 140.58 140.58 100 1 0 0
20120330 420 140.51 140.51 140.51 140.51 500 1 0 0

Otrzymuję takie błędy:

Traceback (most recent call last):
File "C:/Users/Beata/PycharmProjects/1zad/1u.py", line 36, in <module>
draw(data_pd)
NameError: name 'data_pd' is not defined

edytowany 1x, ostatnio: Beata Griškevič, 2018-09-25 20:46

Pozostało 580 znaków

2018-09-25 20:52
0

Beato, data_pd to zmienna lokalna, więc draw() nie bardzo wie, co ma wywołać. Zresztą masz treść wyjątku, który to sygnalizuje:

NameError: name 'data_pd' is not defined

Przede wszystkim dołącz plik minute.csv.

Niżej umieściłam załącznik :) - Beata Griškevič 2018-09-25 20:53
Sam program bez funkcji działa idealnie. Ale chcę teraz go mieć z 2 funkcjami, no i mam trudności z tym - Beata Griškevič 2018-09-25 20:55

Pozostało 580 znaków

2018-09-25 20:53
0

Załącznik

Pozostało 580 znaków

2018-09-25 20:56

Proszę:

import pandas as pd
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as dates

def readfile(x):
    data_pd = pd.read_csv(x, parse_dates=[['DATE', 'TIME']])
    format = '%Y%m%d %H%M'
    data_pd = data_pd.set_index(data_pd['DATE_TIME'])
    data_pd['DATE_TIME'] = pd.to_datetime(data_pd['DATE_TIME'], format = format)
    data_pd = data_pd.set_index(data_pd['DATE_TIME'])
    data_pd = data_pd.drop(columns = ['DATE_TIME'])
    return data_pd

def draw(y):
    fig = plt.figure(figsize=(10,7))
    fig.add_axes()
    ax = fig.add_subplot(111)
    ax.xaxis.grid(True, which='minor')
    date_formatter = dates.DateFormatter('%H:%M')
    ax.xaxis.set_major_locator(dates.MinuteLocator(interval=35))
    ax.xaxis.set_major_formatter(date_formatter)
    plt.setp(ax.xaxis.get_majorticklabels(), rotation=90, fontsize=7)
    fig.autofmt_xdate()
    ax.autoscale_view()
    y['OPEN'].plot()
    ax.set(title='SPY 2012-03-30', ylabel='Cena', xlabel='Czas')
    plt.legend(loc='upper left')
    plt.grid()
    plt.show()

data_pd = readfile(r'C:\Users\Beata\Desktop\Duomenys\minute.csv')
draw(data_pd)
edytowany 1x, ostatnio: Pyxis, 2018-09-25 20:58
Dziękuję bardzo! - Beata Griškevič 2018-09-25 21:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0