Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
notatki:studianoteaptaszniml [2025/05/07 13:30] – administrator | notatki:studianoteaptaszniml [2025/05/16 17:27] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ======= | + | ======= |
- | ====== Wprowadzenie do Pythona | + | ====== Wprowadzenie do przetwarzania danych z pakietami numpy i pandas |
- | ==== Typy proste ==== | + | <code python> |
+ | import numpy as np | ||
+ | import pandas as pd | ||
+ | # Wprowadzenie do numpy | ||
+ | lista=[4, | ||
+ | [x**2 for x in lista] | ||
- | ==== Typy zlożone ==== | + | tablica=np.array(lista) |
+ | print(tablica, | ||
+ | |||
+ | tablica**2 | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | [ 4 6 7 6 5 43 12 3 7 11 3 6] <class ' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | array([ | ||
+ | | ||
+ | </ | ||
<code python> | <code python> | ||
- | 6*7 | + | # Tablice wielowymiarowe |
+ | m1=np.array([[4, | ||
+ | m1 | ||
</ | </ | ||
< | < | ||
- | 42 | + | array([[4, 7, 2], |
+ | [3, 5, 8]]) | ||
</ | </ | ||
<code python> | <code python> | ||
- | _ | + | # TAblice specjalne |
+ | np.zeros((4, | ||
</ | </ | ||
< | < | ||
- | 42 | + | array([[0., 0., 0., 0., 0., 0.], |
+ | [0., 0., 0., 0., 0., 0.], | ||
+ | [0., 0., 0., 0., 0., 0.], | ||
+ | [0., 0., 0., 0., 0., 0.]]) | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm=_ | + | # TAblice specjalne |
- | print(zm,type(zm)) | + | np.ones((4,6)) |
</ | </ | ||
< | < | ||
- | 42 <class ' | + | array([[1., 1., 1., 1., 1., 1.], |
+ | [1., 1., 1., 1., 1., 1.], | ||
+ | [1., 1., 1., 1., 1., 1.], | ||
+ | [1., 1., 1., 1., 1., 1.]]) | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm.__dir__() | + | # genowanie sekwencji jako tablicy |
+ | t1=np.arange(-8,8,0.01) | ||
+ | t1 | ||
</ | </ | ||
< | < | ||
- | [' | + | array([-8. |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
- | ' | + | |
</ | </ | ||
<code python> | <code python> | ||
- | zm=7*6.4 | + | t2=np.linspace(-1,1,10) |
- | print(zm,type(zm)) | + | t2 |
</ | </ | ||
< | < | ||
- | 44.800000000000004 <class ' | + | array([-1. , -0.77777778, |
+ | 0.11111111, | ||
</ | </ | ||
- | ====== Typy złożone ====== | + | <code python> |
+ | # Indeksowanie tablicy | ||
+ | print(tablica[2]) | ||
+ | print(tablica[2: | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | 7 | ||
+ | [7 6 5] | ||
+ | </ | ||
<code python> | <code python> | ||
- | #Lista | + | # zmiana kształtu tablicy |
+ | m1=tablica.reshape((3, | ||
</ | </ | ||
<code python> | <code python> | ||
- | lista=list() | + | m1 |
- | print(lista, | + | |
</ | </ | ||
< | < | ||
- | [] <class ' | + | array([[ 4, 6, 7, 6], |
+ | [ 5, 43, 12, 3], | ||
+ | [ 7, 11, 3, 6]]) | ||
</ | </ | ||
<code python> | <code python> | ||
- | lista.append(' | + | m1**2 |
- | print(lista, | + | |
</ | </ | ||
< | < | ||
- | [' | + | array([[ 16, |
+ | | ||
+ | | ||
</ | </ | ||
<code python> | <code python> | ||
- | lista=[1,2, | + | m1[0:2,0:2] |
- | print(lista, | + | |
</ | </ | ||
< | < | ||
- | [1, 2, 3, ' | + | array([[ 4, 6], |
+ | [ 5, 43]]) | ||
</ | </ | ||
<code python> | <code python> | ||
- | lista[3] | + | # Operacje na tablicach |
+ | tb1=np.array([5,3,9]) | ||
+ | tb2=np.array([3, | ||
+ | |||
+ | print(tb1+tb2) | ||
+ | print(tb1*tb2) | ||
+ | print(tb1**2) | ||
+ | print(tb1> | ||
</ | </ | ||
< | < | ||
- | ' | + | [ 8 4 16] |
+ | [15 3 63] | ||
+ | [25 9 81] | ||
+ | [False False True] | ||
</ | </ | ||
<code python> | <code python> | ||
- | #krotki | + | # Funkcje statystyczne na tablicach |
+ | print(tablica) | ||
+ | np.mean(tablica) | ||
+ | </ | ||
- | zm=tuple(lista) | + | < |
- | print(zm,type(zm)) | + | [ 4 6 7 6 5 43 12 3 7 11 3 6] |
- | zm. | + | |
+ | |||
+ | |||
+ | |||
+ | |||
+ | np.float64(9.416666666666666) | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | print(tablica) | ||
+ | print(tablica.mean()) | ||
+ | print(tablica.std()) | ||
</ | </ | ||
< | < | ||
- | (1, 2, 3, ' | + | [ 4 6 7 6 5 43 12 |
+ | 9.416666666666666 | ||
+ | 10.467874134173035 | ||
</ | </ | ||
<code python> | <code python> | ||
- | print(zm) | + | # Wygenerowanie tablicy losowej |
- | zm[4].append(' | + | np.random.seed(33) |
- | print(zm) | + | m1=np.random.randint(0,10,(5,5)) |
+ | m1 | ||
</ | </ | ||
< | < | ||
- | (1, 2, 3, ' | + | array([[4, 7, 8, 2, 2], |
- | (1, 2, 3, ' | + | [9, 9, 3, 6, 3], |
+ | [3, 1, 7, 6, 0], | ||
+ | [0, 6, 6, 0, 4], | ||
+ | [8, 8, 3, 7, 9]]) | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm[2]=5 | + | # Statystyki z wierszy |
+ | print(m1.mean(axis=1)) | ||
+ | print(m1.max(axis=1)) | ||
</ | </ | ||
< | < | ||
- | --------------------------------------------------------------------------- | + | [4.6 6. 3.4 3.2 7. ] |
+ | [8 9 7 6 9] | ||
+ | </ | ||
- | TypeError | + | <code python> |
+ | # Statystyki z kolumn | ||
+ | print(m1.mean(axis=0)) | ||
+ | print(m1.max(axis=0)) | ||
+ | </ | ||
- | Cell In[20], line 1 | + | < |
- | ----> 1 zm[2]=5 | + | [4.8 6.2 5.4 4.2 3.6] |
+ | [9 9 8 7 9] | ||
+ | </ | ||
+ | ====== Wprowadzenie do pakietu pandas ====== | ||
- | TypeError: 'tuple' | + | <code python> |
+ | import numpy as np | ||
+ | import pandas as pd | ||
+ | # Typ danych series | ||
+ | |||
+ | s1=pd.Series([5, | ||
+ | print(s1, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | 0 5 | ||
+ | 1 7 | ||
+ | 2 3 | ||
+ | 3 2 | ||
+ | 4 8 | ||
+ | 5 9 | ||
+ | dtype: int64 < | ||
</ | </ | ||
<code python> | <code python> | ||
- | # typ słownikowy | + | print(s1[2]) |
+ | print(s1[1: | ||
+ | </ | ||
- | zm=dict() | + | < |
- | print(zm,type(zm)) | + | 3 |
+ | 1 7 | ||
+ | 2 3 | ||
+ | 3 2 | ||
+ | dtype: int64 | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | s1=pd.Series([5, | ||
+ | print(s1,type(s1)) | ||
</ | </ | ||
< | < | ||
- | {} <class 'dict'> | + | a 5 |
+ | a 7 | ||
+ | b 3 | ||
+ | c 2 | ||
+ | b 8 | ||
+ | a 9 | ||
+ | dtype: int64 <class 'pandas.core.series.Series'> | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm['Ula']=5600 | + | s1['a'] |
+ | </ | ||
- | zm[(1, | + | < |
+ | a 5 | ||
+ | a 7 | ||
+ | a 9 | ||
+ | dtype: int64 | ||
+ | </ | ||
- | print(zm) | + | <code python> |
+ | s1[1:4] | ||
</ | </ | ||
< | < | ||
- | {' | + | a 7 |
+ | b 3 | ||
+ | c | ||
+ | dtype: int64 | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm[' | + | # Operacje na sieriach |
- | print(zm) | + | s1**2 |
</ | </ | ||
< | < | ||
- | {' | + | a 25 |
+ | a 49 | ||
+ | b 9 | ||
+ | c 4 | ||
+ | b 64 | ||
+ | a 81 | ||
+ | dtype: int64 | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm[(1,2)] | + | # Typ DataFrame |
+ | dane={ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | |||
+ | tb=pd.DataFrame(dane) | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | tb.to_csv(" | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | tb=pd.read_csv(" | ||
+ | tb | ||
+ | </ | ||
+ | |||
+ | |||
+ | Unnamed: 0 | ||
+ | |||
+ | Imię | ||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Pensja | ||
+ | |||
+ | 0 | ||
+ | |||
+ | 0 | ||
+ | |||
+ | Ola | ||
+ | |||
+ | 23 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 6700 | ||
+ | |||
+ | 1 | ||
+ | |||
+ | 1 | ||
+ | |||
+ | Tola | ||
+ | |||
+ | 18 | ||
+ | |||
+ | Opole | ||
+ | |||
+ | 5432 | ||
+ | |||
+ | 2 | ||
+ | |||
+ | 2 | ||
+ | |||
+ | Ula | ||
+ | |||
+ | 34 | ||
+ | |||
+ | Opole | ||
+ | |||
+ | 8760 | ||
+ | |||
+ | 3 | ||
+ | |||
+ | 3 | ||
+ | |||
+ | Ala | ||
+ | |||
+ | 27 | ||
+ | |||
+ | Sopot | ||
+ | |||
+ | 6450 | ||
+ | |||
+ | 4 | ||
+ | |||
+ | 4 | ||
+ | |||
+ | Zula | ||
+ | |||
+ | 17 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 5670 | ||
+ | |||
+ | 5 | ||
+ | |||
+ | 5 | ||
+ | |||
+ | Ela | ||
+ | |||
+ | 32 | ||
+ | |||
+ | Sopot | ||
+ | |||
+ | 8245 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | #Wstępne badanie DataFrame | ||
+ | tb.info() | ||
</ | </ | ||
< | < | ||
- | 'Nie wiem co to jest' | + | < |
+ | RangeIndex: 6 entries, 0 to 5 | ||
+ | Data columns (total 5 columns): | ||
+ | # | ||
+ | --- ------ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | dtypes: int64(3), object(2) | ||
+ | memory usage: 368.0+ bytes | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm[1] | + | tb.shape |
</ | </ | ||
< | < | ||
- | --------------------------------------------------------------------------- | + | (6, 5) |
+ | </ | ||
- | KeyError | + | <code python> |
+ | tb.describe() | ||
+ | </ | ||
- | Cell In[26], line 1 | ||
- | ----> 1 zm[1] | ||
+ | Unnamed: 0 | ||
- | KeyError: | + | Wiek |
+ | |||
+ | Pensja | ||
+ | |||
+ | count | ||
+ | |||
+ | 6.000000 | ||
+ | |||
+ | 6.000000 | ||
+ | |||
+ | 6.000000 | ||
+ | |||
+ | mean | ||
+ | |||
+ | 2.500000 | ||
+ | |||
+ | 25.166667 | ||
+ | |||
+ | 6876.166667 | ||
+ | |||
+ | std | ||
+ | |||
+ | 1.870829 | ||
+ | |||
+ | 7.082843 | ||
+ | |||
+ | 1354.669025 | ||
+ | |||
+ | min | ||
+ | |||
+ | 0.000000 | ||
+ | |||
+ | 17.000000 | ||
+ | |||
+ | 5432.000000 | ||
+ | |||
+ | 25% | ||
+ | |||
+ | 1.250000 | ||
+ | |||
+ | 19.250000 | ||
+ | |||
+ | 5865.000000 | ||
+ | |||
+ | 50% | ||
+ | |||
+ | 2.500000 | ||
+ | |||
+ | 25.000000 | ||
+ | |||
+ | 6575.000000 | ||
+ | |||
+ | 75% | ||
+ | |||
+ | 3.750000 | ||
+ | |||
+ | 30.750000 | ||
+ | |||
+ | 7858.750000 | ||
+ | |||
+ | max | ||
+ | |||
+ | 5.000000 | ||
+ | |||
+ | 34.000000 | ||
+ | |||
+ | 8760.000000 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | w=tb[' | ||
+ | tb[w] | ||
</ | </ | ||
+ | |||
+ | |||
+ | Unnamed: 0 | ||
+ | |||
+ | Imię | ||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Pensja | ||
+ | |||
+ | 0 | ||
+ | |||
+ | 0 | ||
+ | |||
+ | Ola | ||
+ | |||
+ | 23 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 6700 | ||
+ | |||
+ | 2 | ||
+ | |||
+ | 2 | ||
+ | |||
+ | Ula | ||
+ | |||
+ | 34 | ||
+ | |||
+ | Opole | ||
+ | |||
+ | 8760 | ||
+ | |||
+ | 3 | ||
+ | |||
+ | 3 | ||
+ | |||
+ | Ala | ||
+ | |||
+ | 27 | ||
+ | |||
+ | Sopot | ||
+ | |||
+ | 6450 | ||
+ | |||
+ | 5 | ||
+ | |||
+ | 5 | ||
+ | |||
+ | Ela | ||
+ | |||
+ | 32 | ||
+ | |||
+ | Sopot | ||
+ | |||
+ | 8245 | ||
+ | |||
<code python> | <code python> | ||
- | zm=" | + | # Grupowanie danych |
+ | tb | ||
+ | </ | ||
- | for nr,słowo in enumerate(zm.split(' ')): | + | |
- | print(nr, | + | Unnamed: 0 |
- | print(" | + | |
- | print(" | + | Imię |
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Pensja | ||
+ | |||
+ | 0 | ||
+ | |||
+ | 0 | ||
+ | |||
+ | Ola | ||
+ | |||
+ | 23 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 6700 | ||
+ | |||
+ | 1 | ||
+ | |||
+ | 1 | ||
+ | |||
+ | Tola | ||
+ | |||
+ | 18 | ||
+ | |||
+ | Opole | ||
+ | |||
+ | 5432 | ||
+ | |||
+ | 2 | ||
+ | |||
+ | 2 | ||
+ | |||
+ | Ula | ||
+ | |||
+ | 34 | ||
+ | |||
+ | Opole | ||
+ | |||
+ | 8760 | ||
+ | |||
+ | 3 | ||
+ | |||
+ | 3 | ||
+ | |||
+ | Ala | ||
+ | |||
+ | 27 | ||
+ | |||
+ | Sopot | ||
+ | |||
+ | 6450 | ||
+ | |||
+ | 4 | ||
+ | |||
+ | 4 | ||
+ | |||
+ | Zula | ||
+ | |||
+ | 17 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 5670 | ||
+ | |||
+ | 5 | ||
+ | |||
+ | 5 | ||
+ | |||
+ | Ela | ||
+ | |||
+ | 32 | ||
+ | |||
+ | Sopot | ||
+ | |||
+ | 8245 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb.groupby('Miasto')[' | ||
</ | </ | ||
< | < | ||
- | 0 Witam | + | Miasto |
- | ======== | + | Opole 7096.0 |
- | 1 wszystkich | + | Sopot |
- | ======== | + | Warszawa |
- | 2 uczestników | + | Name: Pensja, dtype: float64 |
- | ======== | + | |
- | 3 kursu | + | |
- | ======== | + | |
- | Koniec roboty | + | |
</ | </ | ||
<code python> | <code python> | ||
- | zm1,zm2=45*7,3>8 | + | # Indeksowanie za pomocą metod iloc i loc |
+ | dane= { | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | } | ||
+ | tb1=pd.DataFrame(dane, | ||
+ | tb1 | ||
+ | </code> | ||
- | print(zm1, | + | |
- | print(zm2, | + | Imię |
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Dochód | ||
+ | |||
+ | a | ||
+ | |||
+ | Anna | ||
+ | |||
+ | 28 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 3500 | ||
+ | |||
+ | a | ||
+ | |||
+ | Marek | ||
+ | |||
+ | 35 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | 4000 | ||
+ | |||
+ | b | ||
+ | |||
+ | Ewa | ||
+ | |||
+ | 22 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 2800 | ||
+ | |||
+ | c | ||
+ | |||
+ | Piotr | ||
+ | |||
+ | 45 | ||
+ | |||
+ | Gdańsk | ||
+ | |||
+ | 5000 | ||
+ | |||
+ | d | ||
+ | |||
+ | Kasia | ||
+ | |||
+ | 30 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | 4200 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb1.head(3) | ||
+ | </ | ||
+ | |||
+ | |||
+ | Imię | ||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Dochód | ||
+ | |||
+ | a | ||
+ | |||
+ | Anna | ||
+ | |||
+ | 28 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 3500 | ||
+ | |||
+ | a | ||
+ | |||
+ | Marek | ||
+ | |||
+ | 35 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | 4000 | ||
+ | |||
+ | b | ||
+ | |||
+ | Ewa | ||
+ | |||
+ | 22 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 2800 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb1.tail(2) | ||
+ | </ | ||
+ | |||
+ | |||
+ | Imię | ||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Dochód | ||
+ | |||
+ | c | ||
+ | |||
+ | Piotr | ||
+ | |||
+ | 45 | ||
+ | |||
+ | Gdańsk | ||
+ | |||
+ | 5000 | ||
+ | |||
+ | d | ||
+ | |||
+ | Kasia | ||
+ | |||
+ | 30 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | 4200 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | tb1.loc[' | ||
+ | </ | ||
+ | |||
+ | |||
+ | Imię | ||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Dochód | ||
+ | |||
+ | a | ||
+ | |||
+ | Anna | ||
+ | |||
+ | 28 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 3500 | ||
+ | |||
+ | a | ||
+ | |||
+ | Marek | ||
+ | |||
+ | 35 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | 4000 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb1[' | ||
</ | </ | ||
< | < | ||
- | 315 <class ' | + | a 28 |
- | False <class ' | + | a 35 |
+ | b 22 | ||
+ | c 45 | ||
+ | d 30 | ||
+ | Name: Wiek, dtype: int64 | ||
</ | </ | ||
<code python> | <code python> | ||
- | zm=45*7,3>8 | + | tb1.loc[[' |
- | print(zm) | + | </ |
+ | |||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | a | ||
+ | |||
+ | 28 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | a | ||
+ | |||
+ | 35 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | c | ||
+ | |||
+ | 45 | ||
+ | |||
+ | Gdańsk | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb1.loc[' | ||
+ | </code> | ||
+ | |||
+ | |||
+ | Wiek | ||
+ | |||
+ | Miasto | ||
+ | |||
+ | Dochód | ||
+ | |||
+ | a | ||
+ | |||
+ | 28 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 3500 | ||
+ | |||
+ | a | ||
+ | |||
+ | 35 | ||
+ | |||
+ | Kraków | ||
+ | |||
+ | 4000 | ||
+ | |||
+ | b | ||
+ | |||
+ | 22 | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 2800 | ||
+ | |||
+ | c | ||
+ | |||
+ | 45 | ||
+ | |||
+ | Gdańsk | ||
+ | |||
+ | 5000 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | tb1.iloc[2] | ||
</ | </ | ||
< | < | ||
- | (315, False) | + | Imię Ewa |
+ | Wiek 22 | ||
+ | Miasto | ||
+ | Dochód | ||
+ | Name: b, dtype: object | ||
</ | </ | ||
+ | |||
+ | <code python> | ||
+ | tb1.iloc[2, | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | np.int64(2800) | ||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | tb1.iloc[1: | ||
+ | </ | ||
+ | |||
+ | |||
+ | Imię | ||
+ | |||
+ | Wiek | ||
+ | |||
+ | a | ||
+ | |||
+ | Marek | ||
+ | |||
+ | 35 | ||
+ | |||
+ | b | ||
+ | |||
+ | Ewa | ||
+ | |||
+ | 22 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb1.iloc[[0, | ||
+ | </ | ||
+ | |||
+ | |||
+ | Miasto | ||
+ | |||
+ | Dochód | ||
+ | |||
+ | a | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 3500 | ||
+ | |||
+ | b | ||
+ | |||
+ | Warszawa | ||
+ | |||
+ | 2800 | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | tb1[' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <Axes: > | ||
+ | </ | ||
+ | |||
+ | {{output_45_1.png|png}} | ||
+ | png | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code python> | ||
+ | |||
+ | </ | ||
+ | |||
+ | ====== Spotkanie 3 ====== | ||
+ | |||
+ | ====== Tutorial do wizualizacji danych ====== | ||
+ | |||
+ | ==== Autor: Chat GPT 4.5 ==== | ||
+ | |||
+ | ====== Wykres liniowy ====== | ||
+ | |||
+ | - Opis wykresu liniowego (Line plot) Wykres liniowy jest podstawowym i najczęściej wykorzystywanym rodzajem wykresu do przedstawiania danych ciągłych, które zmieniają się w czasie lub wzdłuż osi niezależnej. Pozwala w prosty i czytelny sposób pokazać trendy, wzrosty lub spadki oraz porównać kilka zbiorów danych jednocześnie. | ||
+ | |||
+ | Podstawowymi elementami wykresu liniowego są: | ||
+ | |||
+ | Oś pozioma (x) reprezentująca dane niezależne (np. czas, daty, numery indeksów). Oś pionowa (y) reprezentująca dane zależne. Punkty danych, które są połączone linią, pokazujące trend. | ||
+ | |||
+ | - Typowe zastosowania Analiza trendów – obserwacja zmian wartości w czasie (np. ceny akcji, zmiany temperatury). Porównywanie zbiorów danych – zestawienie wielu serii danych, np. wyniki eksperymentów lub porównanie różnych produktów. Prognozowanie – obserwacja dotychczasowego rozwoju oraz przewidywanie przyszłych wartości. Analiza danych finansowych – prezentowanie trendów cen, indeksów giełdowych, | ||
+ | - Maksymalny potencjał wykresu liniowego – przykład w Pythonie Poniżej kompleksowy przykład ukazujący pełnię możliwości wykresu liniowego, wykorzystujący bibliotekę Matplotlib: | ||
<code python> | <code python> | ||
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
import numpy as np | import numpy as np | ||
+ | import pandas as pd | ||
- | x=np.arange(-20,20,0.01) | + | # Generowanie realistycznych danych |
- | y=np.sin(x) | + | np.random.seed(42) |
- | plt.plot(x,y, | + | dni = pd.date_range(start=' |
- | plt.grid() | + | |
+ | # generowanie temperatur wokół zadanych średnich | ||
+ | temperatura_warszawa = np.random.normal(loc=2, scale=3, size=30) | ||
+ | temperatura_gdansk = np.random.normal(loc=0, | ||
+ | temperatura_krakow | ||
+ | |||
+ | # Tworzenie DataFrame | ||
+ | df = pd.DataFrame({ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | }) | ||
+ | |||
+ | # Rysowanie wykresu | ||
+ | plt.figure(figsize=(12, | ||
+ | |||
+ | # Linie z różnymi stylami | ||
+ | plt.plot(df[' | ||
+ | plt.plot(df[' | ||
+ | plt.plot(df[' | ||
+ | |||
+ | # Tytuł i opisy osi | ||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | |||
+ | # Siatka pomocnicza | ||
+ | plt.grid(True, linestyle=' | ||
+ | |||
+ | # Adnotacje – oznacz najwyższą temperaturę w Warszawie i najniższą w Gdańsku | ||
+ | max_warszawa = df[' | ||
+ | min_gdansk = df[' | ||
+ | |||
+ | plt.annotate(f" | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | plt.annotate(f" | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | # Poprawienie czytelności osi x | ||
+ | plt.xticks(rotation=45) | ||
+ | |||
+ | # Legenda | ||
+ | plt.legend(title=' | ||
+ | |||
+ | # Dopasowanie layoutu | ||
+ | plt.tight_layout() | ||
+ | |||
+ | # Wyświetlenie wykresu | ||
plt.show() | plt.show() | ||
</ | </ | ||
- | {{output_23_0.png|png}} | + | {{output_3_0.png|png}} |
png | png | ||
+ | |||
+ | - Omówienie uzyskanego efektu Kilka serii danych: Wyraźnie zaprezentowane trzy serie danych (temperatura w trzech miastach). Różne style linii: Rozróżnienie serii za pomocą koloru, stylu linii oraz markerów punktów. Adnotacje: Podkreślenie ważnych informacji (najwyższa/ | ||
+ | |||
+ | ====== Wykresy słupkowe ====== | ||
+ | |||
+ | . | ||
+ | |||
+ | 📌 1. Opis wykresów słupkowych Wykres słupkowy (bar chart) pozwala porównać wartości danych dla różnych kategorii. Każdy słupek reprezentuje wartość liczbową przypisaną do określonej kategorii. | ||
+ | |||
+ | Wykres słupkowy skumulowany (stacked bar chart) umożliwia porównanie sumarycznych wartości dla kategorii, jednocześnie pokazując wkład poszczególnych składowych w te sumy. | ||
+ | |||
+ | Cechy charakterystyczne: | ||
+ | |||
+ | Wizualizacja danych kategorycznych Czytelne porównanie wartości Pokazanie udziałów części składowych (słupki skumulowane) 📌 2. Typowe zastosowania 🔹 Wykres słupkowy: Porównanie sprzedaży według kategorii produktów. Wyniki wyborów lub badań opinii publicznej. Porównywanie wyników finansowych firm. 🔹 Wykres słupkowy skumulowany: | ||
<code python> | <code python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | import pandas as pd | ||
+ | import numpy as np | ||
+ | # Tworzenie przykładowych danych | ||
+ | produkty = [' | ||
+ | sprzedaz_2023 = [1200, 2500, 900, 400] | ||
+ | sprzedaz_2024 = [1500, 2700, 1100, 600] | ||
+ | |||
+ | # Pozycja słupków na osi x | ||
+ | x = np.arange(len(produkty)) | ||
+ | |||
+ | # Rysowanie wykresu | ||
+ | plt.figure(figsize=(10, | ||
+ | |||
+ | # Słupki dla 2023 i 2024 obok siebie | ||
+ | plt.bar(x - 0.2, sprzedaz_2023, | ||
+ | plt.bar(x + 0.2, sprzedaz_2024, | ||
+ | |||
+ | # Tytuł, etykiety, siatka | ||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | plt.xticks(x, | ||
+ | plt.grid(axis=' | ||
+ | |||
+ | # Dodanie wartości liczbowych na słupkach | ||
+ | for i in x: | ||
+ | plt.text(i - 0.2, sprzedaz_2023[i] + 50, sprzedaz_2023[i], | ||
+ | plt.text(i + 0.2, sprzedaz_2024[i] + 50, sprzedaz_2024[i], | ||
+ | |||
+ | # Legenda | ||
+ | plt.legend(title=' | ||
+ | |||
+ | # Wyświetlenie wykresu | ||
+ | plt.tight_layout() | ||
+ | plt.show() | ||
</ | </ | ||
+ | |||
+ | {{output_7_0.png|png}} | ||
+ | png | ||
+ | |||
+ | |||
+ | <code python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | import pandas as pd | ||
+ | import numpy as np | ||
+ | |||
+ | # Tworzenie przykładowych danych | ||
+ | miasta = [' | ||
+ | zarobki_niskie = [25, 35, 30, 28] | ||
+ | zarobki_srednie = [50, 45, 48, 52] | ||
+ | zarobki_wysokie = [25, 20, 22, 20] | ||
+ | |||
+ | # Tworzenie DataFrame | ||
+ | df = pd.DataFrame({ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | }) | ||
+ | |||
+ | # Pozycja słupków na osi x | ||
+ | x = np.arange(len(df)) | ||
+ | |||
+ | # Rysowanie wykresu | ||
+ | plt.figure(figsize=(10, | ||
+ | |||
+ | # Skumulowane słupki | ||
+ | plt.bar(df[' | ||
+ | plt.bar(df[' | ||
+ | plt.bar(df[' | ||
+ | |||
+ | # Tytuł, etykiety, siatka | ||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | plt.grid(axis=' | ||
+ | |||
+ | # Dodanie wartości liczbowych na słupkach | ||
+ | for i in range(len(df)): | ||
+ | plt.text(x[i], | ||
+ | plt.text(x[i], | ||
+ | plt.text(x[i], | ||
+ | |||
+ | # Legenda | ||
+ | plt.legend(title=' | ||
+ | |||
+ | # Wyświetlenie wykresu | ||
+ | plt.tight_layout() | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | {{output_8_0.png|png}} | ||
+ | png | ||
+ | |||
+ | |||
+ | ====== 📌 4. Podsumowanie możliwości wykresów słupkowych: | ||
+ | |||
+ | Dzięki zaawansowanym opcjom wizualizacyjnym Python oferuje potężne narzędzia do prezentowania danych kategorycznych w przejrzysty i estetyczny sposób. Dodając szczegółowe opisy, dane liczbowe, różnorodne style graficzne oraz układy skumulowane, | ||
+ | |||
+ | ====== Wykres kołowy ====== | ||
+ | |||
+ | 📌 1. Opis wykresu kołowego Wykres kołowy (ang. pie chart) jest wykresem używanym do prezentowania proporcji, czyli udziału poszczególnych kategorii w całości. Każdy fragment (wycinek koła) reprezentuje jedną kategorię, a rozmiar tego fragmentu odzwierciedla jego udział procentowy w całkowitej sumie wartości wszystkich kategorii. | ||
+ | |||
+ | Charakterystyczne cechy: Wizualizacja danych procentowych. Przedstawienie relacji między częścią a całością. Prosty, intuicyjny odbiór. 📌 2. Typowe zastosowania Wykresy kołowe są używane głównie do: | ||
+ | |||
+ | Prezentacji struktury przychodów lub kosztów firmy. Analizy wyników ankiet i badań rynkowych. Pokazania udziału różnych produktów w sprzedaży. Prezentacji udziałów rynkowych firm w sektorze. Ważne, by liczba kategorii była umiarkowana (najlepiej do 6-8), ponieważ duża liczba kategorii zmniejsza czytelność. | ||
+ | |||
+ | 📌 3. Zaawansowany przykład wykresu kołowego w Pythonie (pełny potencjał) Poniższy przykład maksymalnie wykorzystuje możliwości biblioteki Matplotlib do stworzenia atrakcyjnego i czytelnego wykresu kołowego. | ||
+ | |||
+ | <code python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | import pandas as pd | ||
+ | import numpy as np | ||
+ | |||
+ | # Dane – udział firm na rynku smartfonów | ||
+ | udzialy = [28, 35, 17, 13, 10, 7] | ||
+ | firmy = [' | ||
+ | |||
+ | # Automatyczne wyróżnienie największego kawałka | ||
+ | explode = [0.1 if val == max(udzialy) else 0 for val in udzialy] | ||
+ | |||
+ | # Kolory (opcjonalnie) | ||
+ | colors = plt.cm.Paired.colors | ||
+ | |||
+ | # Tworzenie wykresu kołowego | ||
+ | plt.figure(figsize=(9, | ||
+ | wedges, texts, autotexts = plt.pie( | ||
+ | udzialy, | ||
+ | labels=firmy, | ||
+ | autopct=' | ||
+ | startangle=140, | ||
+ | explode=explode, | ||
+ | colors=colors, | ||
+ | shadow=True, | ||
+ | wedgeprops=dict(edgecolor=' | ||
+ | textprops={' | ||
+ | ) | ||
+ | |||
+ | # Tytuł wykresu | ||
+ | plt.title(' | ||
+ | |||
+ | # Dodanie legendy | ||
+ | plt.legend(wedges, | ||
+ | |||
+ | # Zapewnienie równego koła (nie elipsy) | ||
+ | plt.axis(' | ||
+ | |||
+ | # Wyświetlenie wykresu | ||
+ | plt.tight_layout() | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | {{output_12_0.png|png}} | ||
+ | png | ||
+ | |||
+ | |||
+ | 📌 4. Omówienie efektów tego wykresu: Powyższy wykres demonstruje, | ||
+ | |||
+ | Eksplozja (explode) – wyróżnia szczególnie ważną kategorię. Wyświetlanie procentów – czytelna prezentacja udziałów każdej kategorii. Cienie i krawędzie – estetyczne dodatki poprawiające odbiór. Kolorystyka – wyraźne i różnorodne kolory zwiększają atrakcyjność wizualną. Legenda i opisy – ułatwiają szybkie odniesienie do kategorii danych. Dzięki temu wykres kołowy staje się czytelny, estetyczny, profesjonalny, | ||
+ | |||
+ | ⚠️ Ważna wskazówka na koniec: Używaj wykresów kołowych z rozwagą – pamiętaj, że ich największą zaletą jest prezentacja niewielkiej liczby kategorii. Przy dużej liczbie kategorii rozważ inne wykresy (np. słupkowe poziome lub wykresy typu donut). | ||
+ | |||
+ | ====== Wykres pudełkowy i skrzypcowy ====== | ||
+ | |||
+ | 📌 1. Opis wykresów 🟢 Wykres pudełkowy (Boxplot) Wykres pudełkowy (boxplot) wizualizuje rozkład danych za pomocą kilku kluczowych statystyk opisowych: | ||
+ | |||
+ | mediana (linia środkowa pudełka) pierwszy i trzeci kwartyl (Q1 i Q3 – brzegi pudełka) wąsy (rozstęp danych: min/max lub wartości odstające) wartości odstające, zaznaczane jako punkty poza pudełkiem. Dzięki temu umożliwia on szybkie porównanie rozkładów wielu grup danych oraz identyfikację wartości odstających. | ||
+ | |||
+ | 🟢 Wykres violinowy (Violin plot) Wykres violinowy łączy zalety wykresu pudełkowego z wykresem gęstości (KDE). Pokazuje nie tylko podstawowe statystyki rozkładu (mediana, kwartyle), ale też szczegółowy kształt rozkładu, uwypuklając takie cech jak wielomodalność, | ||
+ | |||
+ | 📌 2. Typowe zastosowania Oba typy wykresów są powszechnie stosowane do: | ||
+ | |||
+ | Analizy porównawczej kilku grup danych. Identyfikacji wartości odstających (boxplot). Badania rozkładów danych liczbowych (czas oczekiwania, | ||
+ | |||
+ | Analizy statystyczne i badania naukowe. Wizualizacja danych w finansach (np. zmienność cen akcji). Badania satysfakcji, | ||
+ | |||
+ | <code python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | import seaborn as sns | ||
+ | import numpy as np | ||
+ | import pandas as pd | ||
+ | |||
+ | # Generowanie danych przykładowych | ||
+ | np.random.seed(0) | ||
+ | df = pd.DataFrame({ | ||
+ | ' | ||
+ | ' | ||
+ | np.random.normal(70, | ||
+ | np.random.normal(75, | ||
+ | np.random.normal(65, | ||
+ | ]) | ||
+ | }) | ||
+ | |||
+ | # Rozmiar figur | ||
+ | plt.figure(figsize=(14, | ||
+ | |||
+ | # --------------- Wykres pudełkowy ---------------- | ||
+ | plt.subplot(1, | ||
+ | sns.boxplot(x=' | ||
+ | |||
+ | # Dodanie punktów indywidualnych obserwacji | ||
+ | sns.stripplot(x=' | ||
+ | |||
+ | # Tytuł i opisy | ||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | plt.grid(axis=' | ||
+ | |||
+ | # --------------- Violin Plot ---------------- | ||
+ | plt.subplot(1, | ||
+ | sns.violinplot(x=' | ||
+ | |||
+ | # Dodanie mediany | ||
+ | sns.pointplot(x=' | ||
+ | |||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | plt.grid(axis=' | ||
+ | |||
+ | # Poprawienie układu wykresów | ||
+ | plt.tight_layout() | ||
+ | |||
+ | # Wyświetlenie wykresów | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | / | ||
+ | |||
+ | Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. | ||
+ | |||
+ | sns.boxplot(x=' | ||
+ | / | ||
+ | |||
+ | Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect. | ||
+ | |||
+ | sns.violinplot(x=' | ||
+ | / | ||
+ | |||
+ | The `scale` parameter is deprecated and will be removed in v0.15.0. You can now control the size of each plot element using matplotlib `Line2D` parameters (e.g., `linewidth`, | ||
+ | |||
+ | sns.pointplot(x=' | ||
+ | </ | ||
+ | |||
+ | {{output_16_1.png|png}} | ||
+ | png | ||
+ | |||
+ | |||
+ | ====== Wykresy funkcji dwóch zmiennych ====== | ||
+ | |||
+ | 📌 Opis wykresu przestrzennego (3D Surface Plot) Wykres przestrzenny (ang. 3D surface plot) przedstawia zależność wartości jednej zmiennej od dwóch innych zmiennych. Dzięki trójwymiarowej reprezentacji łatwo można zaobserwować wzajemne powiązania oraz szybko zidentyfikować trendy, wzory lub ekstremalne wartości. | ||
+ | |||
+ | Wykresy powierzchniowe doskonale sprawdzają się przy analizie danych złożonych, | ||
+ | |||
+ | 📌 Zastosowania wykresów przestrzennych Wizualizacja danych naukowych (np. fizyka, chemia, biologia). Analiza funkcji matematycznych (np. rozkłady prawdopodobieństwa). Badanie efektywności modeli predykcyjnych (ML, Deep Learning). Prezentacja danych meteorologicznych (np. temperatury, | ||
+ | |||
+ | <code python> | ||
+ | import numpy as np | ||
+ | import matplotlib.pyplot as plt | ||
+ | from mpl_toolkits.mplot3d import Axes3D | ||
+ | # | ||
+ | %matplotlib ipympl | ||
+ | # Generowanie danych | ||
+ | x = np.linspace(-5, | ||
+ | y = np.linspace(-5, | ||
+ | X, Y = np.meshgrid(x, | ||
+ | |||
+ | # Funkcja Z zależna od X i Y | ||
+ | Z = np.sin(np.sqrt(X**2 + Y**2)) | ||
+ | |||
+ | # Tworzenie wykresu | ||
+ | fig = plt.figure(figsize=(10, | ||
+ | ax = fig.add_subplot(111, | ||
+ | |||
+ | # Tworzenie powierzchni (surface plot) | ||
+ | surf = ax.plot_surface(X, | ||
+ | |||
+ | # Dodanie paska kolorów | ||
+ | fig.colorbar(surf, | ||
+ | |||
+ | # Tytuł oraz opisy osi | ||
+ | ax.set_title(' | ||
+ | ax.set_xlabel(' | ||
+ | ax.set_ylabel(' | ||
+ | ax.set_zlabel(' | ||
+ | |||
+ | # Zmiana kąta widzenia | ||
+ | ax.view_init(elev=25, | ||
+ | |||
+ | # Wyświetlenie wykresu | ||
+ | plt.tight_layout() | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <div class=" | ||
+ | Figure | ||
+ | </ | ||
+ | <img src=' |