Informatika2-2014/Gyakorlat04

A MathWikiből
(Változatok közti eltérés)
 
(egy szerkesztő egy közbeeső változata nincs mutatva)
1. sor: 1. sor:
== Google Link ==
 
[https://docs.google.com/document/d/1k8hpm1o9429d-Gs_OFAJMtkUWACGdYxvr0baZCnq6b8/edit]
 
== Osztályok ==
 
 
*Az osztályok egységbe zárnak és a felesleges információt elrejtik.
 
*Az osztályok metódusokat és változókat tartalmaznak. Metódusokat tekintsük osztályokon belüli függvényeknek.
 
*Tekintsünk erre úgy, hogy a kód egy részét (mind tárolókat, mind a függvényeket nézve) összefogjuk.
 
*Egy objektum egy osztály konkrét megvalósítása.
 
 
Egy metódust az alábbi módon definiálunk pythonban:
 
<python>
 
class Foo:
 
  def setx(self, x):
 
      self.x = x
 
  def bar(self):
 
      print self.x
 
</python>
 
* Itt a lényeges dolog a self változó, ami mindig az első argumentuma a metódusnak. Ez mindig a konkrét megvalósított objektumot jelöli. Tehát külön értékadás nélkül self.x az osztályon (objektumon) belüli x változó, aminek az értékét állítjuk be a setx függvénnyel.
 
* Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait:
 
<Python>
 
f = Foo()
 
f.setx(5)
 
f.bar()
 
Foo.setx(f,5)
 
Foo.bar(f)
 
</Python>
 
* Fontos, hogy Pythonban futási időben is változhatnak az osztályhoz tartozó változók:
 
<Python>
 
del f.x
 
</Python>
 
* Itt tehát magát a változót töröljük.
 
* Minden egyes objektum mögött a háttérben létezik egy szótár, ami tartalmazza az osztály elemeit:
 
<Python>
 
g = Foo()
 
vars(g)
 
g.__dict__
 
</Python>
 
* Konstruktornak hívjuk azt a metódust, ami az objektum létrehozásával együtt hívódik meg:
 
<Python>
 
class Test:
 
    def __init__(self):
 
        print "Mostmar elhiszed?"
 
 
x = Test()
 
</Python>
 
* A destruktor konzisztens módon az objektum  törlésével együtt hívódik meg.
 
<python>
 
>>> class A:
 
...  pass
 
...
 
>>> A.v1 = 10
 
>>> x=A() # létrehozok két példányt
 
>>> y=A()
 
>>> x.v1  # példányon belül is elérem az osztály szintű változót
 
10
 
>>> x.v1 = 34 # itt viszont létrehozok egy példány szintűt aminek a neve felülírja az osztály szintűt
 
>>> y.v1
 
10
 
>>> x.v1
 
34
 
>>> A.v1
 
10
 
>>> A.v1 = 12 # itt az osztályszintű változót változtatjuk
 
>>> x.v1 # mivel felülírtuk a v1-t az x példányban így ezen már nincs hatása
 
34
 
>>> y.v1
 
12
 
>>> A.v1
 
12
 
</python>
 
 
== Feladatok ==
 
== Feladatok ==
  
85. sor: 15. sor:
 
* [https://dl.dropboxusercontent.com/u/1100162/cancerTrainData.txt cancerTrainData]
 
* [https://dl.dropboxusercontent.com/u/1100162/cancerTrainData.txt cancerTrainData]
 
* [https://dl.dropboxusercontent.com/u/1100162/cancerTestData.txt cancerTestData]
 
* [https://dl.dropboxusercontent.com/u/1100162/cancerTestData.txt cancerTestData]
 
=== 2. feladat ===
 
* Írj mátrix osztályt az alábbi metófudokkal:
 
<python>
 
  class Matrix:
 
    def const(self,n,x):
 
      ...
 
    def zeros(self,n):
 
      ...
 
    def printer(self):
 
      ...
 
    def set(self,i,j,x):
 
      ...
 
    def get(self,i,j):
 
      ...
 
    def hasValue(self,i,j):
 
      ...
 
    def getLine(self,i):
 
      ...
 
    def pow(self):
 
      ...
 
    def product(self,v)
 
</python>
 
* próbálj meg hibakezelést beépíteni a függvényekbe (try --- except)
 

A lap jelenlegi, 2014. március 11., 00:21-kori változata

Feladatok

1. feladat

  • A feladat, hogy páciensek adatai alapján egy egyszerű jóslatot adjunk arról, hogy az illető beteg-e, vagy nem.
  • Minden betegnek van sok különböző attribútuma.
  • Ezeket egy sokoszlopos file-ban tároljuk.
  • Egy pácienst akkor nyilvánítunk betegnek, ha minimum 5 attribútumának értéke az adott atrribútum átlaga feletti.
  • A file-okban 1 + 10 + 1 oszlop szerepel.
  • Az első oszlop a beteg ID-ja, a következő 10 a különböző attribútumokat jelöli, az utolsó pedig az "igazság", 1/0 érték arról, hogy a páciens valóban beteg-e.
  • Számoljuk ki a "cancerTrainData.txt" adatai alapján az egyes attribútumok átlagait.
  • Ezek után jósoljuk meg, hogy a "cancerTestData.txt"-ben rögzített páciensek betegek-e!
  • Vessük össze predikciónkat a valósággal: számoljuk ki, hány páciens esetén egyezett a predikció a valósággal (utolsó oszlop).
  • File-ok:
  • cancerTrainData
  • cancerTestData
Személyes eszközök