Seite 1 von 1

Tuple aus Dictionary Erzeugen (coordinaten_liste)

Verfasst: Dienstag 4. März 2008, 12:31
von sea-live
Servus Leute ich hab da mal wieder ein Problem:

aus einem csv File wird beim einlesen ein Dict erzeugt
das so aussieht
{'Volume': '611800', 'Adj Close': '9.03', 'High': '9.32', 'Low': '8.82', 'Date': '2008-02-27', 'Close': '9.03', 'Open': '9.29'}
in einer liste data[]
stehen z.B dann 25 dieser dicts drin

die Diagramm plot funktion bekommt(verlangt) ein tuple das so aussehen soll
coordinates_open = (
(1, 9.29), (2, 9.3), (3,9.28), .......)

wie kann man das geschickt umformen
INFO
toll wäre wenn das Diagramm unten in der X Achse das Datum anzeigen würde

Bitte um Hilfe
Danke

Code: Alles auswählen

neuer Quellcode im 4ten beitrag
Lauffähiges Programm CHART

Verfasst: Dienstag 4. März 2008, 14:54
von sea-live
So ich bin nun weiter das tuple hab ich

Code: Alles auswählen

        cord_open=()
        cord_low=()
        cord_high=()
        cord_close=()
        i=0
        liste=[]
        tmp=()
        for keys in data:
            tmp=(i,round(float(data[i]['Open']),2))
            liste.append(tmp)
            i=i+1
        cord_open=tuple(liste)
        print cord_open
  
nun um das zuvereinfachen damit ich nicht das ganze x mal machen muss ein dict mit den linie_keys

Code: Alles auswählen

        cord_open=()
        cord_low=()
        cord_high=()
        cord_close=()
        linien_key={'Open':cord_open,'Low':cord_low,'High':cord_high,'Close':cord_close}      
        for key,value in linien_key.iteritems():
            i=0
            liste=[]
            tmp=()
            for keys in data:
                tmp=(i,round(float(data[i][key]),2))
                liste.append(tmp)
                i=i+1
            value=tuple(liste)
            
        print cord_open
        print cord_close
 
wo liegt hier der fehler
DANKE

Re: Tuple aud Dictionary Erzeugen (coordinaten_liste)

Verfasst: Dienstag 4. März 2008, 15:56
von Leonidas
sea-live hat geschrieben:aus einem csv File wird beim einlesen ein Dict erzeugt
das so aussieht
{'Volume': '611800', 'Adj Close': '9.03', 'High': '9.32', 'Low': '8.82', 'Date': '2008-02-27', 'Close': '9.03', 'Open': '9.29'}
in einer liste data[]
stehen z.B dann 25 dieser dicts drin

die Diagramm plot funktion bekommt(verlangt) ein tuple das so aussehen soll
coordinates_open = (
(1, 9.29), (2, 9.3), (3,9.28), .......)

wie kann man das geschickt umformen
Findest du es nicht ungeschickt, einem Tupel, welches per-se schon einen Index hat, auch noch zusätzlich eine Index-Nummer zu verpassen, die einfach Index+1 ist? Außerdem haben Dictionaries keine Ordnung, aber so wie ich das sehe, soll dein Tupel die Werte irgendwie ordnen. Wie?

Und wo ist das eine wxPython-Frage?

Verfasst: Dienstag 4. März 2008, 16:14
von sea-live
Ich hab mal 5 Werte zum Testen in das Programm integriert

Code: Alles auswählen

# -*- coding: iso-8859-15 -*-

import wx
import wx.lib.plot as plot
import os
import types
import csv

wx.SetDefaultPyEncoding("iso-8859-15")
pfad="C:\\boerse\\"
dateiname='AIX.DE'
listenname='tecdax'
class Fenster(wx.Frame):
   
    def __init__(
        self, parent = None, id = -1, title = "CHART", size = wx.Size(500, 500)
    ):
        wx.Frame.__init__(self, parent, id, title, size = size)
       
        panel = wx.Panel(self)
       
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)       
       
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox_main.Add(vbox, 1, wx.ALL | wx.EXPAND, 5)
       
        self.client = plot.PlotCanvas(panel)
        vbox.Add(self.client, 1, wx.EXPAND | wx.ALL, 5)
        """
        # Einlesen der daten ("," ist bei csv der Default-Delimiter)
        content = csv.reader(open("%s%s\\%s.csv"%(pfad,listenname,dateiname), 'r'))
        # In der ersten Zeile stehen die Spaltennamen, die speichern wir uns
        keys = content.next()
        data = []
        for line in content:
              data.append(dict(zip(keys, line)))
        """
        data=[{'Volume': '528700', 'Adj Close': '8.81', 'High': '8.93', 'Low': '8.68', 'Date': '2008-02-29', 'Close': '8.81', 'Open': '8.84'},
              {'Volume': '747500', 'Adj Close': '8.96', 'High': '9.01', 'Low': '8.62', 'Date': '2008-02-28', 'Close': '8.96', 'Open': '8.94'},
              {'Volume': '611800', 'Adj Close': '9.03', 'High': '9.32', 'Low': '8.82', 'Date': '2008-02-27', 'Close': '9.03', 'Open': '9.29'},
              {'Volume': '515900', 'Adj Close': '9.23', 'High': '9.33', 'Low': '9.07', 'Date': '2008-02-26', 'Close': '9.23', 'Open': '9.07'},
              {'Volume': '624100', 'Adj Close': '9.03', 'High': '9.05', 'Low': '8.83', 'Date': '2008-02-25', 'Close': '9.03', 'Open': '8.94'},
              ]
        cord_open=()
        cord_low=()
        cord_high=()
        cord_close=()
        linien_key={'Open':cord_open,'Low':cord_low,'High':cord_high,'Close':cord_close}      
        i=0
        liste=[]
        tmp=()
        for keys in data:
            tmp=(i,round(float(data[i]['Open']),2))
            liste.append(tmp)
            i=i+1
        cord_open=tuple(liste)
        i=0
        liste=[]
        tmp=()
        for keys in data:
            tmp=(i,round(float(data[i]['Low']),2))
            liste.append(tmp)
            i=i+1
        cord_low=tuple(liste)
        i=0
        liste=[]
        tmp=()
        for keys in data:
            tmp=(i,round(float(data[i]['High']),2))
            liste.append(tmp)
            i=i+1
        cord_high=tuple(liste)
        i=0
        liste=[]
        tmp=()
        for keys in data:
            tmp=(i,round(float(data[i]['Close']),2))
            liste.append(tmp)
            i=i+1
        cord_close=tuple(liste)
        lines = (
            plot.PolyLine(
                cord_open, colour = "green", legend = u" Open", width = 1
            ),
            plot.PolyLine(
                cord_low, colour = "blue", legend = u" Low", width = 1
            ),
            plot.PolyLine(
                cord_high, colour = "cyan", legend = u" High", width = 1
            ),
            plot.PolyLine(
                cord_close, colour = "red", legend = u" Close", width = 1
            ),
           
            
        )
       
        graphics = plot.PlotGraphics(
            objects = lines, title = u"CHART %s"%dateiname, xLabel = u"Zeit",
            yLabel = u"KURS"
        )
       
        self.client.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
        self.client.SetFontSizeAxis(10)
        self.client.SetFontSizeLegend(7)
        self.client.SetEnableLegend(True)
        self.client.SetXSpec('auto')
        self.client.SetYSpec('auto')
        self.client.SetEnableGrid(True)
        ##Activate Labels       
        self.client.SetEnablePointLabel(True)
        self.client.Draw(graphics)
        ##show Statusbar for Mouse Position
        self.CreateStatusBar(1)       

    ##Functions from plot.py
    def DrawPointLabel(self, dc, mDataDict):
        dc.SetPen(wx.Pen(wx.BLACK))
        dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) )
        sx, sy = mDataDict["scaledXY"] #scaled x,y of closest point
        dc.DrawRectangle( sx-5,sy-5, 10, 10)  #10by10 square centered on point
        px,py = mDataDict["pointXY"]
        cNum = mDataDict["curveNum"]
        pntIn = mDataDict["pIndex"]
        legend = mDataDict["legend"]
        #make a string to display
        s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" %(cNum, legend, px, py, pntIn)
        dc.DrawText(s, sx , sy+1)

   
def main():
    app = wx.PySimpleApp()
    f = Fenster()
    f.Center()
    f.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()