5 Commits

Author SHA1 Message Date
Olli Graf
1dce636192 Programme für Diagrammtypen: Säule, gestapelte Säulen
Linien, gestapelte Balken, Torte
2024-01-17 14:19:16 +01:00
Olli Graf
2a998611bf share in .gitignore 2024-01-05 05:53:55 +01:00
0882dd06f3 Erster Schwung für Teil 22 2024-01-02 06:46:01 +01:00
ec60c85695 Readme updated 2023-12-11 07:50:37 +01:00
278d79f6d0 Code für Teil21 Interrupts 2023-12-11 07:49:21 +01:00
25 changed files with 479 additions and 3 deletions

View File

@@ -25,4 +25,8 @@ CC-BY-SA Olli Graf
|18 | Generatoren und list comprehension|
|19 | Webseiten (Flask)|
|20 | virtuelle Umgebungen|
|22 | Numpy|
|21 | Matplotlib|
|23 | Pandas|

View File

@@ -1,4 +1,4 @@
#!/home/pi/git/pythonkurs/teil20/bin/python
#!/home/pi/git/pythonkurs/teil20/bin/python3
# -*- coding: utf-8 -*-
import re
import sys

View File

@@ -1,4 +1,4 @@
#!/home/pi/git/pythonkurs/teil20/bin/python
#!/home/pi/git/pythonkurs/teil20/bin/python3
# -*- coding: utf-8 -*-
import re
import sys

View File

@@ -1,4 +1,4 @@
#!/home/pi/git/pythonkurs/teil20/bin/python
#!/home/pi/git/pythonkurs/teil20/bin/python3
# -*- coding: utf-8 -*-
import re
import sys

19
teil21/alarm.py Executable file
View File

@@ -0,0 +1,19 @@
#! /usr/bin/python3
# encoding:utf-8
import signal
import time
def handle_alarm(signum, frame):
print(f'Alarm ausgelöst bei {time.ctime()}')
signal.signal(signal.SIGALRM,handle_alarm)
signal.alarm(3)
print(f'aktuelle Zeit Start: {time.ctime()}')
time.sleep(13)
print(f'aktuelle Zeit Ende: {time.ctime()}')

41
teil21/interrupts.py Executable file
View File

@@ -0,0 +1,41 @@
#! /usr/bin/python3
import time
import signal
import sys
#Behandlung von SIGINT (CTRL-C)
def handle_sigint(signum, frame) :
print(f'Handling signal {signum} ({signal.Signals(signum).name}).')
if signum == signal.SIGINT:
print(f'SIGINT wird behandelt. {frame}')
time.sleep(1)
sys.exit(0)
#Behandlung von SIGTSTP (CTRL-Z)
def handle_sigtstp(signum,frame):
print(f'Behandle signal {signum} ({signal.Signals(signum).name}).')
print('Programm in Hintergrund')
# Behandlung von SiGCONT
def handle_sigcont(signum,frame):
print(f'Behandle signal {signum} ({signal.Signals(signum).name}).')
print('Programm im Vordergrund')
if __name__ == '__main__':
# Interrupt Handler registrieren
signal.signal(signal.SIGINT, handle_sigint)
signal.signal(signal.SIGTSTP, handle_sigtstp)
signal.signal(signal.SIGCONT, handle_sigcont)
for i in range(0,10000000):
print(f'Schleife: {i}')
time.sleep(0.5)
print('Schleifenende')

4
teil22/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
# created by virtualenv automatically
__pycache__
bin
lib

18
teil22/StressFile.py Normal file
View File

@@ -0,0 +1,18 @@
import io
import numpy as np
class StressFile:
def readOutFile(self,filename):
result = {
'frequency': [],
'temperatures': []
}
with open(filename,'r') as f:
content = f.readlines()
print(f'conent= {content}')
sf = StressFile()
sf.readOutFile('./kodos.out')

42
teil22/calc_array.py Normal file
View File

@@ -0,0 +1,42 @@
import numpy as np
# Array initialisieren
org = np.array([1,2,3,4,5,6])
# Kopiert das int64 Array in ein float64 Array
def copy_to_float64(source):
liste = []
for i in range(source.shape[1]):
liste.append(float(source[i]))
return np.array(liste,dtype=float64)
# Ein paar Kopien anlegen
copy_sum = org.copy()
copy_mult = org.copy()
copy_diff = org.copy()
copy_div = org.astype(np.float64).copy()
# Zu allen Elementen 2 dazuzählen
copy_sum += 2
print(f'copy_sum={copy_sum}')
# Alle Elemente mit 2 multiplizieren
copy_mult *= 2
print(f'copy_mult={copy_mult}')
# Von allen Elementen 1 abziehen
copy_diff -= 1
print(f'copy_diff={copy_diff}')
copy_div /=2
print(f'copy_div={copy_div}')

20
teil22/copyarray.py Normal file
View File

@@ -0,0 +1,20 @@
import numpy as np
org = np.array([1,2,3,4,5,6])
copy = org
print(f'org= {org}')
print(f'copy={copy}')
copy[2]= 7
print(f'org= {org}')
print(f'copy={copy}')
copy2 = org.copy()
copy2[2]= 3
print(f'org= {org}')
print(f'copy2={copy2}')

9
teil22/reshape.py Normal file
View File

@@ -0,0 +1,9 @@
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9,10])
print(f'orignal {a}')
reshaped = a.reshape(2,5)
print(f'reshaped {reshaped}')

7
teil22/rndm.py Normal file
View File

@@ -0,0 +1,7 @@
import numpy as np
#Erzeuge 1 Mio Zufallszahlen
random_np = np.random(100000)
random_list = list(random_np)

6
teil22/shape.py Normal file
View File

@@ -0,0 +1,6 @@
import numpy as np
twodim_array = np.array([[1,2,3,4,5],[1,4,9,16,25]])
print(f'shape is {twodim_array.shape}')

9
teil22/simplearray.py Normal file
View File

@@ -0,0 +1,9 @@
import numpy as np
simple_array = np.array([1,2,3,4,5,6])
print(f'simple_array={simple_array}')
print(f'ndim={simple_array.ndim}')
print(f'dtype={simple_array.dtype}')
print(f'shape is {simple_array.shape}')

9
teil22/twodimarray.py Normal file
View File

@@ -0,0 +1,9 @@
import numpy as np
twodim_array = np.array([[1,2,3,4,5],[1,4,9,16,25]],dtype='int32')
print(f'twodim_array={twodim_array}')
print(f'ndim={twodim_array.ndim}')
print(f'dtype={twodim_array.dtype}')
print(f'shape is {twodim_array.shape}')

6
teil23/.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
# created by virtualenv automatically
__pycache__
bin
lib
share
*.csv

20
teil23/iospeed_balken.py Executable file
View File

@@ -0,0 +1,20 @@
#! ./bin/python
#encoding: utf-8
import matplotlib.pyplot as plt
import numpy as np
labels = [ 'Pineberry Pi pcie1_gen=2','Pineberry Pi pcie1_gen=3', 'MicroSD Raspi 5', 'MicroSD Raspi 4']
io_read= np.array([148.50,171.99,30.85,10.15])
io_write = np.array([99.15,114.97,20.45,6.63])
legend = ['Schreiben','Lesen']
#Höhe der Balken
__hoehe__ =0.6
fig,ax = plt.subplots()
plt.barh(labels,io_write,__hoehe__)
plt.barh(labels,io_read,__hoehe__,left=io_write)
plt.legend(legend)
plt.show()

30
teil23/normparabel_graph.py Executable file
View File

@@ -0,0 +1,30 @@
#! ./bin/python
# encoding:utf-8
import matplotlib.pyplot as plt
import numpy as np
def plot_normal_parabel():
# Erzeuge Datenpunkte für x-Werte von -10 bis 10
x = np.linspace(-3, 3, 100)
# Berechne die y-Werte für die Normalparabel
y = x**2
# Erstelle das Diagramm
plt.plot(x, y, label='Normalparabel: $y=x^2$')
# Beschriftungen und Titel hinzufügen
plt.xlabel('x-Achse')
plt.ylabel('y-Achse')
plt.title('Normalparabel')
# Legende hinzufügen
plt.legend()
# Funktion aufrufen, um die Normalparabel zu zeichnen
plot_normal_parabel()
# Diagramm anzeigen
plt.grid(True)
plt.show()

8
teil23/pyvenv.cfg Normal file
View File

@@ -0,0 +1,8 @@
home = /usr/bin
implementation = CPython
version_info = 3.11.2.final.0
virtualenv = 20.17.1+ds
include-system-site-packages = false
base-prefix = /usr
base-exec-prefix = /usr
base-executable = /usr/bin/python3

45
teil23/sinus_parabel_graph.py Executable file
View File

@@ -0,0 +1,45 @@
#! ./bin/python
# encoding:utf-8
import matplotlib.pyplot as plt
import numpy as np
def plot_normal_parabel():
# Erzeuge Datenpunkte für x-Werte von -10 bis 10
x = np.linspace(-3, 3, 100)
# Berechne die y-Werte für die Normalparabel
y = x**2
# Erstelle das Diagramm
plt.plot(x, y, label='Normalparabel: $y=x^2$')
# Beschriftungen und Titel hinzufügen
plt.xlabel('x-Achse')
plt.ylabel('y-Achse')
plt.title('Normalparabel')
# Legende hinzufügen
plt.legend()
def plot_sinus_function():
# Erzeuge Datenpunkte für x-Werte von -2π bis 2π
x = np.linspace(-2 * np.pi, 2 * np.pi, 100)
# Berechne die y-Werte für die Sinusfunktion
y = np.sin(x)
# Erstelle das Diagramm für die Sinusfunktion
plt.plot(x, y, label='Sinusfunktion: $y = \sin(x)$', color='blue')
# Legende hinzufügen
plt.legend()
# Funktion aufrufen, um die Normalparabel zu zeichnen
plot_normal_parabel()
plot_sinus_function()
# Diagramm anzeigen
plt.grid(True)
plt.show()

24
teil23/test.py Normal file
View File

@@ -0,0 +1,24 @@
# encoding: utf-8
import numpy as np
import matplotlib.pyplot as plt
# Koordinaten
x = np.arange(5, 10)
y = np.arange(12, 17)
print(f'x={x}')
print(f'y={y}')
# Plot
plt.plot(x,y)
# Titel hinzufügen
plt.title("Matplotlib PLot NumPy Array")
# Beschriftung für die Achsen
plt.xlabel("x Achse")
plt.ylabel("y Achse")
# Fenster anzeigen
plt.show()

23
teil23/verkauf_stapel.py Executable file
View File

@@ -0,0 +1,23 @@
#! ./bin/python
#encoding: utf-8
import matplotlib.pyplot as plt
import numpy as np
jahre= np.array(['2018','2019', '2020'])
aepfel= np.array([1000,1500,2000])
erdbeeren =np.array([500,950,900])
bananen=np.array([400,800,750])
breite = 0.6
fig,ax = plt.subplots()
#ax.legend('Verkäufe')
ax.bar(jahre,bananen,color='yellow')
ax.bar(jahre,erdbeeren,bottom=bananen,color='red')
ax.bar(jahre,aepfel,bottom=erdbeeren,color='green')
plt.legend(['Bananen','Erdbeeren','Äpfel'])
plt.show()

47
teil23/vornamen_reader.py Normal file
View File

@@ -0,0 +1,47 @@
#encoding: utf-8
def read_vornamen(filename):
dict = {}
# Der Zähler dient nur dazu, die erste Zeile zu überspringen
count = 0
dict['mädchen'] = 0
dict['jungs'] = 0
dict['divers'] = 0
with open(filename,'r') as f:
for zeile in f:
if count >0:
# einzelne Zeile in seine Bestandteile zerlegen
splitted = zeile.strip().split(';')
anzahl = splitted[0]
vorname = splitted[1]
geschlecht= splitted[2]
position = splitted[3]
if geschlecht == 'w':
dict['mädchen'] += 1
elif geschlecht == 'm':
dict['jungs'] += 1
else:
dict['divers'] += 1
data = {}
data['vorname'] = vorname
data['anzahl'] = int(anzahl)
data['geschlecht'] = geschlecht
data['position'] = position
if vorname not in dict:
dict[vorname] = data
else:
# doppelte Einträge summieren wir auf.
e = dict[vorname]
e['anzahl'] = int(anzahl) + (e['anzahl'])
count +=1
gesamt = dict['jungs'] + dict['mädchen'] + dict['divers']
dict['gesamt'] = gesamt
return dict

42
teil23/vornamen_sauelen.py Executable file
View File

@@ -0,0 +1,42 @@
#! ./bin/python
#encondig: utf-8
import matplotlib.pyplot as plt
from vornamen_reader import read_vornamen
def plot_geschlecht(vornamen):
bez= ['Mädchen', 'Jungs','divers']
geburten = [vornamen['mädchen'], vornamen['jungs'],vornamen['divers']]
print(f'geburten={geburten}')
farben = ['red','blue','green']
fig, ax = plt.subplots()
print(f'fig={fig}')
print(f'ax={ax}')
ax.bar(bez,geburten,label=bez, color=farben)
ax.set_ylabel('Geburten')
ax.set_title('Geburten nach Geschlecht Wuppertal 2020')
ax.legend(title='Geburten')
plt.show()
if __name__ == '__main__':
vornamen = read_vornamen('./Vornamen_Wuppertal_2020.csv')
jungs= vornamen['jungs']
maedels = vornamen['mädchen']
divers = vornamen['divers']
print(f'Jungs: {jungs}')
print(f'Mädchen: {maedels}')
print(f'divers: {divers}')
# print(f'vornamen={vornamen}')
plot_geschlecht(vornamen)

43
teil23/vornamen_torte.py Executable file
View File

@@ -0,0 +1,43 @@
#! ./bin/python
#encondig: utf-8
import matplotlib.pyplot as plt
import logging
from vornamen_reader import read_vornamen
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.INFO)
def plot_geschlecht(vornamen):
bez= ['Mädchen', 'Jungs','divers']
geburten = [vornamen['mädchen'], vornamen['jungs'],vornamen['divers']]
logging.info(f'geburten={geburten}')
proz_maedels = round(vornamen['mädchen'] / vornamen['gesamt'] *100,2)
proz_jungs = round(vornamen['jungs'] / vornamen['gesamt'] *100,2)
proz_divers = round(vornamen['divers'] / vornamen['gesamt'] *100,2)
farben = ['red','blue','green']
sizes= [proz_maedels,proz_jungs,proz_divers]
logging.info(f'sizes={sizes}')
fig, ax = plt.subplots()
ax.pie(sizes,explode=(0,0,0), labels=bez,autopct='%1.1f%%',shadow=True,startangle=90)
ax.axis('equal')
plt.show()
if __name__ == '__main__':
vornamen = read_vornamen('./Vornamen_Wuppertal_2020.csv')
jungs= vornamen['jungs']
maedels = vornamen['mädchen']
divers = vornamen['divers']
plot_geschlecht(vornamen)