2020. november 16., hétfő

Adatelemzés alapjai (python)




Python elemzés első lépése / Python for Data Analysis first step



## Python modulok betöltése / Import Python Libraries
%matplotlib inline

import numpy as np
import scipy as sp
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Panda csomag részei

  • Series (1D tömb / 1d array)
  • DataFrame (2D tömb / 2d labeled array)
  • Panel (3D tömb / general 3d array)

Panda sorozatok / Pandas Series

A Pandas Series egydimenziós és címkével ellátott tömb, amely többnyire azonos típusú adatokat tartalmaz (egész számok, karakterláncok, lebegőpontos számok, Python-objektumok stb.). A tengely címkéket indexnek is nevezik.


# Panda sorozat létrehozása / creating Pandas series :
s1 = pd.Series( [-42,-1,1,7,42] )     ## homogén
s2 = pd.Series( [-3,-1,'Lajos',1,5] ) ## inhomogén / heterogeneous
print('S1\n',s1)
print('-----------')
print('S2\n',s2)
S1
 0   -42
1    -1
2     1
3     7
4    42
dtype: int64
-----------
S2
 0       -3
1       -1
2    Lajos
3        1
4        5
dtype: object
# Index használata / View index values
print('Nincs index : ', s1.index)  ## nincs index

new_index =['a2', 'b2', 'c2', 'd2', 'e2'] 

# index beállítása / set the index 
s1.index=['a1', 'b1', 'c1', 'd1', 'e1'] 
s2.index = new_index 

print('Van index : ', s1.index)
Nincs index :  RangeIndex(start=0, stop=5, step=1)
Van index :  Index(['a1', 'b1', 'c1', 'd1', 'e1'], dtype='object')
# panda sorozat létrehozása index megadásával / Creating Pandas series with index:
s2 = pd.Series( np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'] )
print(s2)

print( 'v1 (index) :', s2['a'],' | v2 :',  s2[0])
a    0.372578
b    1.062642
c    0.319626
d   -2.380873
e   -0.038077
dtype: float64
v1 : 0.37257833425649717  | v2 : 0.37257833425649717
# Index értékek / View index values
print(s2.index)
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

data = {'pi': 3.1415, 'e': 2.71828}  # dictionary
print(data)
print('Könyvtár : ', data['pi'])

# Pand sorozat létrehozása könyvtárból / Create a Series from dictionary
s3 = pd.Series ( data )
print(s3)
print('Panda sorozat : ', s3['pi'])
{'pi': 3.1415, 'e': 2.71828}
Könyvtár :  3.1415
pi    3.14150
e     2.71828
dtype: float64
Panda sorozat :  3.1415

# Elemek átrendezése és bővítése / reordering the elements and insert
s4 = pd.Series ( data, index = ['e', 'pi', 'egyeb'])
print(s4)

## Ha nem kap értéket valami akkor használatos a panda sepciális jelzője
## NAN (non a number) - is used to specify a missing value in Pandas.
e        2.71828
pi       3.14150
egyeb        NaN
dtype: float64

## pozició hivatkozás (tulhivatkozást elbírja)
print(s1[:12])      # első tizenkét elem (de csak 4 van ténylegesen)/ First 12 elements

print('--------------')

print( s1[[2,1,0]])  # elemek konkrét sorrendjének megadása / Elements out of order
a1   -42
b1    -1
c1     1
d1     7
e1    42
dtype: int64
--------------
c1     1
b1    -1
a1   -42
dtype: int64

# nevezetes értékek megjelenítése ndarray szerint / Series can be used as ndarray:
print("Median:" , s4.median())
Median: 2.9298900000000003





































Link : https://github.com/klajosw/python/blob/master/kl_py_adatelemzes_01.ipynb

Python adat megjelenítés

 Napoleon orosz háború megjelenítése





## Python modulok betöltése / Import Python Libraries
%matplotlib inline
import matplotlib.pyplot as plt
import networkx as nx


def minard_graph():
    
## forras adatok / Source data    
##-----------------    Napoleon serege és csatái
    data1 = """\
24.0,54.9,340000,A,1
24.5,55.0,340000,A,1
25.5,54.5,340000,A,1
26.0,54.7,320000,A,1
27.0,54.8,300000,A,1
28.0,54.9,280000,A,1
28.5,55.0,240000,A,1
29.0,55.1,210000,A,1
30.0,55.2,180000,A,1
30.3,55.3,175000,A,1
32.0,54.8,145000,A,1
33.2,54.9,140000,A,1
34.4,55.5,127100,A,1
35.5,55.4,100000,A,1
36.0,55.5,100000,A,1
37.6,55.8,100000,A,1
37.7,55.7,100000,R,1
37.5,55.7,98000,R,1
37.0,55.0,97000,R,1
36.8,55.0,96000,R,1
35.4,55.3,87000,R,1
34.3,55.2,55000,R,1
33.3,54.8,37000,R,1
32.0,54.6,24000,R,1
30.4,54.4,20000,R,1
29.2,54.3,20000,R,1
28.5,54.2,20000,R,1
28.3,54.3,20000,R,1
27.5,54.5,20000,R,1
26.8,54.3,12000,R,1
26.4,54.4,14000,R,1
25.0,54.4,8000,R,1
24.4,54.4,4000,R,1
24.2,54.4,4000,R,1
24.1,54.4,4000,R,1"""
##-----------------    Jérôme herceg serege és csatái
    data2 = """\
24.0,55.1,60000,A,2
24.5,55.2,60000,A,2
25.5,54.7,60000,A,2
26.6,55.7,40000,A,2
27.4,55.6,33000,A,2
28.7,55.5,33000,R,2
29.2,54.2,30000,R,2
28.5,54.1,30000,R,2
28.3,54.2,28000,R,2"""
##------------------ Davout marsall serege és csatái
    data3 = """\
24.0,55.2,22000,A,3
24.5,55.3,22000,A,3
24.6,55.8,6000,A,3
24.6,55.8,6000,R,3
24.2,54.4,6000,R,3
24.1,54.4,6000,R,3"""
    
## ---------------- városok    
    cities = """\
24.0,55.0,Kowno
25.3,54.7,Wilna
26.4,54.4,Smorgoni
26.8,54.3,Moiodexno
27.7,55.2,Gloubokoe
27.6,53.9,Minsk
28.5,54.3,Studienska
28.7,55.5,Polotzk
29.2,54.4,Bobr
30.2,55.3,Witebsk
30.4,54.5,Orscha
30.4,53.9,Mohilow
32.0,54.8,Smolensk
33.2,54.9,Dorogobouge
34.3,55.2,Wixma
34.4,55.5,Chjat
36.0,55.5,Mojaisk
37.6,55.8,Moscou
36.6,55.3,Tarantino
36.5,55.0,Malo-Jarosewii"""
    
## ---------------------- Hőmérséklet
    teperatures    ='''\    
37.6    0    6  Oct 18  
36.0    0    6  Oct 24
33.2   -9   16  Nov 9
32.0  -21    5  Nov 14
29.2  -11   10          
28.5  -20    4  Nov 28
27.2  -24    3  Dec 1
26.7  -30    5  Dec 6
25.3  -26    1  Dec 7'''    
    
## Hőmérséklet betöltés / Teperatures loading
    c = {}
    for line in cities.split('\n'):
        x, y, name = line.split(',')
        c[name] = (float(x), float(y))    
    
## Városok betöltése / Cities load
    c = {}
    for line in cities.split('\n'):
        x, y, name = line.split(',')
        c[name] = (float(x), float(y))
        
## Csaták helye és létszám betöltése / Location pos and size loading
    g = []
    for data in [data1, data2, data3]:
        G = nx.Graph()
        i = 0
        G.pos = {}  # helyszinek / location
        G.pop = {}  # létszámok  / size
        last = None
        for line in data.split('\n'):
            x, y, p, r, n = line.split(',')
            G.pos[i] = (float(x), float(y))
            G.pop[i] = int(p)
            if last is None:
                last = i
            else:
                G.add_edge(i, last, **{r: int(n)})
                last = i
            i = i + 1
        g.append(G)

    return g, c


### Fő program folyamat / Main program session
if 1 == 1 :
    
    (g, city) = minard_graph()

    plt.figure(1, figsize=(14, 7))
    plt.clf()
    colors = ['r', 'g', 'b']
    for G in g:
        c = colors.pop(0)
        node_size = [int(G.pop[n] / 100.0) for n in G]                                  ## kör méretezés
        nx.draw_networkx_edges(G, G.pos, edge_color=c, width=4, alpha=0.5)              ## él rajzolás
        nx.draw_networkx_nodes(G, G.pos, node_size=node_size, node_color=c, alpha=0.5)  ## kör nagysága
        nx.draw_networkx_nodes(G, G.pos, node_size=5, node_color='k')                   ## kör középpont

    for c in city:
        x, y = city[c]
        plt.text(x, y + 0.1, c)                                                         ## városok
    plt.show()
    
## vége / end












Link:  https://github.com/klajosw/python/blob/master/kl_py_graph_napoleon.ipynb