2020. július 26., vasárnap

Python térkép kezelés OSM modullal



Használathoz szükséges csomagok:

import networkx as nx
import osmnx as ox
import requests
import matplotlib.cm as cm
import matplotlib.colors as colors
import matplotlib.pyplot as plt
from descartes import PolygonPatch
from shapely.geometry import Polygon, MultiPolygon
%matplotlib inline
ox.config(use_cache=True, log_console=True)
## ox.__version__
















Települések úthálózat kialakulása:
https://atlo.team/utak-epuletek-halozatok/


Értelmezése :

https://osmnx.readthedocs.io/en/stable/osmnx.html#module-osmnx.stats


Minták:
https://hub.gke.mybinder.org/user/klajosw-python-kjuuo8ij/tree

2020. július 15., szerda

Python és a gráf kezelés

Netwokx csomag használata




Networkx osztályú típusú önhurkok megengedettek. Párhuzamos élek megengedettek
Graph nem irányytott Igen Nem
DiGraph irányított Igen Nem
MultiGraph nem irányítot Igen Igen
MultiDiGraph irányított Igen Igen


## Minta 1:
import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#$plt.subplot(126)
nx.draw(G)

print('-------1-------')
G = nx.DiGraph()
G = nx.path_graph(4)
G =G.subgraph([0, 1, 2])
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(121)
nx.draw(G)
#G.clear()

print('-------2-------')
G = nx.MultiGraph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(122)
nx.draw(G)
G.clear()

print('-------3-------')
G = nx.MultiDiGraph()
G = nx.path_graph(4)
print(list(G.nodes))
print(list(G.edges))
#plt.subplot(123)
nx.draw(G)
G.clear()

g = nx.Graph()
g.add_edge('a','b',weight=0.1)
g.add_edge('b','c',weight=1.5)
g.add_edge('a','c',weight=1.0)
g.add_edge('c','d',weight=2.2)
print('----------11--------')
print (nx.shortest_path(g,'b','d'))  ##  [’b’, ’c’, ’d’]
print('---------12---------')
print (nx.shortest_path(g,'b','d', weight='weight')) ## sulytényező figyelembe vétele
nx.draw(g)

G1 = nx.DiGraph()
G1.add_edges_from([("A","B"), ("B","C"), ("C","A"), ("C","D")])
nx.draw(G1, with_labels=True)

info='''
# small famous graphs
petersen=nx.petersen_graph()
tutte=nx.tutte_graph()
maze=nx.sedgewick_maze_graph()
tet=nx.tetrahedral_graph()

# classic graphs
K_5=nx.complete_graph(5)
K_3_5=nx.complete_bipartite_graph(3,5)
barbell=nx.barbell_graph(10,10)
lollipop=nx.lollipop_graph(10,20)

# random graphs
er=nx.erdos_renyi_graph(100,0.15)
ws=nx.watts_strogatz_graph(30,3,0.1)
ba=nx.barabasi_albert_graph(100,5)
red=nx.random_lobster(100,0.9,0.9)

----
import pylab as plt #import Matplotlib plotting interface

g = nx.erdos_renyi_graph(100,0.15)
nx.draw(g)
nx.draw_random(g)
nx.draw_circular(g)
nx.draw_spectral(g)
plt.savefig(‘graph.png’)

---
from IPython.display import SVG
A = nx.nx_agraph.to_agraph(G)
A.draw("out.svg", prog="circo")
SVG("out.svg")

----
G1 = nx.cycle_graph(6)
>>> G2 = nx.wheel_graph(7)
>>> nx.graph_edit_distance(G1, G2)
7.0



### Minta 2

import networkx as nx
G = nx.Graph()        # Ez az osztály nem irányított gráfot valósít meg. Nem veszi figyelembe a két csomópont közötti több élt. Megengedi az önhurokat élek egy csomópont és önmaga között.
G = nx.DiGraph()         # Irányított grafikonok, azaz grafikonok irányított élekkel. Közös műveleteket biztosít a irányított gráfokhoz, (a a grafikon alosztálya).
G = nx.MultiGraph()     # Rugalmas grafikonosztály, amely több irányítatalan élt tesz lehetővé a csomópontok között. A kiegészítő
a rugalmasság a teljesítmény bizonyos mértékű romlásához vezet, bár általában nem jelentős.
G = nx.MultiDiGraph()  # A MultiGraph irányított változata.




### Minta 3

import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()

## csomopontok betöltése
G.add_node(1)  ## csomopont hozzáadása / létrehozása
G.add_node(7)  ## csomopont hozzáadása / létrehozása

G.add_nodes_from([12, 13, 14, 15]) ## csomopontok létrehozása tömbből
G.add_nodes_from(range(100, 110))  ## csompopontok léttrehozása tartományből

H = nx.path_graph(10) ## 10 csomopont otvonal létrehozás (egy vonal)
print('---------0---------')  
for n in H:        ## csomopontok listája
    print(n)

G.add_nodes_from(H)  ##  csomopontok átadása/feltöltése
G.add_node(H)

## élek betöltése
[n for n in G if n < 3] # iterate through nodes
for n in G : ## iterate through nodes
   if n < 3 :
      print('N értéke:',n)
     
for n, nbrsdict in G.adjacency():
    for nbr, eattr in nbrsdict.items():
        if 'weight' in eattr:
            pass

for u, v, weight in G.edges.data('weight'):
    if weight is not None:
        pass
  
G.add_edge(1, 2)             # él létrehozása default edge data=1
G.add_edge(2, 3, weight=0.9) # specify edge data


for n in G:        ## csomopontok listája
    print(n)
   
print('---------1---------')   
for nbr in G[2]:    ## Szomszéd csomopontok listája
    print(nbr)

print('---------2---------')   
print(G.adj)      ## csomopontok listája atributomokkal

G.add_edges_from([(21, 22), (21, 23)])  ## élek betöltése tulip-ből
G.add_edges_from(H.edges)               ## élek objektumok betöltése

#G = nx.cubical_graph()
plt.subplot(121)
nx.draw(G) # default spring_layout


G.add_edge(4, 5, color='blue', weight=0.84, size=300)
print(G[4][5]['size'])         ## -> 300
print(G.edges[4, 5]['color'])  ## -> red

print('Hossz : ', len(G))

plt.subplot(122)
nx.draw(G, pos=nx.circular_layout(G), node_color='b', edge_color='g')  ## formázott megjelenítés


##-- törlés, módosítás
helpem='''
Graph.remove_edge(u, v)                 ## Remove the edge between u and v.
Graph.remove_edges_from(ebunch) ## Remove all edges specified in ebunch.
Graph.update([edges, nodes])           ## Update the graph using nodes/edges/graphs as input.
Graph.clear()                                     ## Remove all nodes and edges from the graph.
Graph.clear_edges()                         ## Remove all edges from the graph.
-----



import networkx as nx
G = nx.Graph()  # Ez az osztály nem irányított gráfot valósít meg. Nem veszi figyelembe a két csomópont közötti több élt. Megengedi az önhurokat élek egy csomópont és önmaga között.
G = nx.DiGraph() # Irányított grafikonok, azaz grafikonok irányított élekkel. Közös műveleteket biztosít a irányított gráfokhoz, (a
a grafikon alosztálya).
G = nx.MultiGraph()  # Rugalmas grafikonosztály, amely több irányítatalan élt tesz lehetővé a csomópontok között. A kiegészítő
a rugalmasság a teljesítmény bizonyos mértékű romlásához vezet, bár általában nem jelentős.
G = nx.MultiDiGraph()  # A MultiGraph irányított változata.


##-------------------------------------

import networkx as nx

## csomopontok generálása

#K = nx.complete_bipartite_graph(3,3)

#K = nx.complete_graph(6)

K = nx.path_graph(6)

 

## másolása

#K33 = K.copy()

 

#pozició beállítása

positions = {0:[-1,1], 1:[0,1], 2:[1,3], 3:[-1,-1], 4:[0,-1], 5:[1,-1]}

 

 

K33.to_undirected()   ## Returns an undirected copy of the graph.

#K33.to_directed()    ## Returns a directed representation of the graph.

#K33.subgraph(nodes)  ##Returns a SubGraph view of the subgraph induced

 

#ax = plt.figure().gca()

#ax.set_axis_off()

options = {'node_size' : 500, 'node_color' : 'r'}

nx.draw_networkx(K33, positions, with_labels=True, **options)

plt.show()

 

 

 

G=nx.DiGraph()

G.add_node(1,pos=(1,1))

G.add_node(2,pos=(2,2))

G.add_edge(1,2)

options = {'node_size' : 300, 'node_color' : 'b'}

pos=nx.get_node_attributes(G,'pos')

 

nodes = nx.draw_networkx_nodes(G, pos, node_size=300, node_color='green', with_labels=True)

edges = nx.draw_networkx_edges(G, pos, node_size=300, arrowstyle='-|>', ## -> -|>

                               arrowsize=100, edge_color='blue',

                               width=2)

nyilhegy = '''

Curve   -           None

CurveB ->         head_length=0.4, head_width=0.2

BracketB          -[          widthB=1.0, lengthB=0.2, angleB=None

CurveFilledB     -|>        head_length=0.4, head_width=0.2

CurveA <-         head_length=0.4, head_width=0.2

CurveAB           <->       head_length=0.4, head_width=0.2

CurveFilledA     <|-        head_length=0.4, head_width=0.2

CurveFilledAB   <|-|>      head_length=0.4, head_width=0.2

BracketA          ]-          widthA=1.0, lengthA=0.2, angleA=None

BracketAB        ]-[         widthA=1.0, lengthA=0.2, angleA=None, widthB=1.0, lengthB=0.2, angleB=None

Fancy   fancy    head_length=0.4, head_width=0.4, tail_width=0.4

Simple  simple  head_length=0.5, head_width=0.5, tail_width=0.2

Wedge wedge  tail_width=0.3, shrink_factor=0.5

BarAB  |-|         widthA=1.0, angleA=None, widthB=1.0, angleB=None

'''

 

# nx.draw(G,pos, with_labels=True)

nx.draw(G,pos, with_labels=True, **options)

 

plt.show()





Egy kis összefoglaló: 



Minták:







2020. július 14., kedd

SqlDeveloper adatmodellezés

Az Orcale SqlDeveloper nagyon jól használható adatmodellezésre.














Automatizállás és gyorsítás céljára még scriptelhető is:
Indítása : Tools-> Data Modeler -> Design Rules And.. -> Transformations




 Nashorn engine (értelmező használata)

c:\apps\sqldeveloper192\jdk\jre\lib\ext\nashorn.jar

  Jruby  engine (értelmező használata)

c:\apps\sqldeveloper192\jdk\jre\lib\ext\jruby.jar


  Jpython engine (értelmező használata)

c:\apps\sqldeveloper192\jdk\jre\lib\ext\jython-standalone-2.7.1.jar



/// Minta kezdet

var t_name = "table_template";

var p_name = "ctemplateID";


template = model.getTableSet().getByName(t_name);

if(template!=null){

    tcolumns = template.getElements();

    tables = model.getTableSet().toArray();   // táblák tömbbe helyezése

    for (var t = 0; t<tables.length;t++){           // tábla tömb bejárása

          table = tables[t];

          // compare name ignoring the case

         if(!table.getName().equalsIgnoreCase(t_name)){

           for (var i = 0; i < tcolumns.length; i++) {

              column = tcolumns[i];

              col = table.getColumnByProperty(p_name,column.getObjectID());

              if(col!=null){

                    attr = col.getEngAttribute();

                         if(attr!=null){

                              ent = attr.getEntity();

                              attr.remove();

                              if(ent!=null){

                                   ent.setDirty(true);

                              }

                         }

                // col.remove();

               table.setDirty(true);

               }

        }

      }

  }

}

// Minta vége

Egy kis azonnal elérhető segítség

c:\apps\sqldeveloper192\sqldeveloper\extensions\oracle.datamodeler\xmlmetadata\doc\SQLDeveloperDataModelerScripting.docx

 


Hasznos minták:

https://github.com/ABestteti/SQLDataModeler



Készítettem egy bemutató fizikai adatmodell mintát a lehetőségek bemutatására:

 

 

Van benne minta jelleggel  :

   Tábla leíró

   Mező leíró

   Modell diagram

   Sub modell diagram

   Tárgykatalógus link

   Egymásba átfúró/meghívó linkek

 

Használata bal oldali menü terület + gomb le nyitásával megjelennek a sémák és az alatta levő tábla objektumok :


A tábla objektumon klikkelve a jobb oldalon  megjelenik az adattartalma. A tábla adatok között Used In Diagrams szekcióban a diagramra mutató link névre klikkeléssel :


Eljuthatunk a diagramhoz. Az egyes tábla nevek linkként működve visszavisznek a tábla adatlaphoz:

 

cid:image003.png@01D65B7E.9BF01DE0

 

Természetesen a modell digram a bal oldali menű terüretről is meg hívható (fő diagramm vagy az rész diagramok is):

 
Tábla objektum kiválasztáshoz a szűrés segítségül hívható:

Minta modell riport link:
https://klajosw.github.io/sqldeveloper/


Innen letölthető:






Telepítés után a létrejött könyvtárban demok is találhatóak:


c:\apps\sqldeveloper192\sqldeveloper\extensions\oracle.datamodeler\samples\Dimensional_model\Global11_demo.pdf

c:\apps\sqldeveloper192\sqldeveloper\extensions\oracle.datamodeler\reports\Reporting Schema diagrams\Related to Design.pdf


Hasznos linkek:








Hasznos gyorsgonbok:

1.   ctrl-enter : executes the current statement(s)

2.   F5 : executes the current code as a script (think SQL*Plus)

3.   ctrl-space : invokes code insight on demand

4.   ctrl-Up/Dn : replaces worksheet with previous/next SQL from SQL History

5.   ctrl-shift+Up/Dn : same as above but appends instead of replaces

6.   shift+F4 : opens a Describe window for current object at cursor

7.   ctrl+F7 : format SQL

8.   ctrl+/ : toggles line commenting

9.   ctrl+e: incremental search

Ctrl+Space, code insight provides a context-sensitive popup window that can help you select




 Nashorn nyelv használata


A Nashorn javascript engine melyen egyszerübb programozni JAVA környezetben.
Használatához a jjs.exe konzol alkalmazásra van szükség amely mindíg megtalálható a $JAVA_HOME/bin
könyvtárban.

konzol ablak elindítása (WIN környezetben)
c:\Program Files (x86)\Java\jre1.8.0_251\bin\jjs.exe 



Az elinduló ablakban prompt:

jjs>


A 'Hello Word' kiíratása:

jjs> print('Hello World');




Java prgramokba is beágyazható módon ugyan ez kiíratás így néz ki:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

engine.eval("print('Hello World!');");

 















Felirat hozzáadása






1=n kapcsolatnál: A nyíl a főegyedtől az alegyed felé mutat.

A logikai adatmodell szokásos ábrázolási módja szerint a „sok” oldalra „csirkelábat” vagy nyílhegyet rajzolunk



Python térkép kezelés OSM modullal

Használathoz szükséges csomagok: import networkx as nx import osmnx as ox import requests import matplotlib.cm as cm ...