JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Michał & Mateusz w zastępstwie za Marcin Lewandowski [ ]

Podobne dokumenty
JĘZYK PYTHON NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Dr Marcin Lewandowski [ mlew@ippt.pan.pl ] Strona kursu:

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

BIBLIOTEKA NUMPY, CZĘŚĆ 1

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Podstawy i języki programowania

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Smarty PHP. Leksykon kieszonkowy

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

JAVA W SUPER EXPRESOWEJ PIGUŁCE

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Wybrane zagadnienia w pracy z danymi rastrowymi w ArcGIS Marcin Paź Esri Polska

Komputerowe wspomaganie eksperymentu 5

Pisząc okienkowy program w Matlabie wykorzystujemy gotowe obiekty graficzne, lub możemy tworzyć własne obiekty dziedzicząc już zdefiniowane.

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Bazy danych. dr inż. Arkadiusz Mirakowski

Wykład 4. Tablice. Pliki

Wprowadzenie do projektu QualitySpy

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Język ludzki kod maszynowy

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Algorytmy i Struktury Danych. Anna Paszyńska

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

ROZSZERZANIE MOŻLIWOŚCI...

Standaryzacja danych w projekcie MICORE

Programowanie obiektowe

Tabela wewnętrzna - definicja

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Baza numerów Wersja 1.1

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Język Python (2) Język Python (2) 1/36

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Zanim zaczniemy GNU Octave

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

INFORMATYKA KLASA VII Wymagania na poszczególne oceny

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

KLASA 7 szk.podst. Stopień dostateczny Uczeń: wymienia cztery dziedziny,

Aplikacje w środowisku VBA. Visual Basic for Aplications

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

Krzysztof Markowicz. NetCDF - format danych meteorologicznych

Platformy Programistyczne Podstawy języka Java

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Wykład 2: Podstawy Języka

Microsoft Interface Definition Language

WTYCZKA FARA-TCM Dane techniczne dla twórców zewnętrznych aplikacji do obsługi map cmentarza

Obsługa blędów i zewnętrznych plików

Wykład pt Plik DXF. Jarosław Bydłosz

2 INSTALACJA OPROGRAMOWANIA. 3 3 GŁÓWNE OKNO PROGRAMU 3 4 MODUŁ OBSŁUGI ARCHIWUM 7

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Część I Rozpoczęcie pracy z usługami Reporting Services

MATLAB Z3. Rafał Woźniak. Warsaw, Faculty of Economic Sciences, University of Warsaw

Część 4 życie programu

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Przypisywanie bibliotek w architekturze SAS

PRZYRZĄDY WIRTUALNE. Część 6 Macierze, klastry, wzory. Prof. Krzysztof Jemielniak

DOKUMENTACJA TECHNICZNA KurJerzyAPI wersja 1.0

KOTLIN. Język programowania dla Androida

Podstawowe części projektu w Javie

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Instrukcja korzystania ze skryptu kroswalidacja.py

Tablice. Jones Stygar na tropie zmiennych

Programowanie obiektowe

Języki skryptowe w programie Plans

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Database Connectivity

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

SPIS TREŚCI: KARTY GRAFICZNE... 15

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie Obiektowe i C++

Tablice, DataGridView

Programowanie w języku Java

Języki i techniki programowania Ćwiczenia 2

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.


Umieszczanie kodu. kod skryptu

Ref. 7 - Język SQL - polecenia DDL i DML

Architektura komputerów

Programowanie obiektowe

Python. Wprowadzenie. Jolanta Bachan

Definiowanie własnych klas

Transkrypt:

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA Michał & Mateusz w zastępstwie za Marcin Lewandowski [ mlew@ippt.gov.pl ]

WYJAŚNIENIE Przepraszam Państwa, ale wyskoczyło mi ważne spotkanie i nie mogę dzisiaj poprowadzić wykładu. Poprosiłem moich kolegów z ZU o zajęcie się Państwem. Zgodnie z sugestią pogłębimy temat HDF5. Marcin Lewandowski 2

HDF5 3

HDF5 Hierarchical Data Format (HDF, HDF4, HDF5 ) określa format oraz zestaw bibliotek do zachowywania i manipulowania BARDZO DUŻYMI zestawami danych numerycznych Oryginalnie opracowany w National Center for Supercomputing Applications, obecnie rozwijany i wspierany przez organizację non-profit The HDF Group (http://www.hdfgroup.com) OTWARTY!!! 4

HDF5 cechy Uniwersalny i hierarchiczny model danych pozwala na reprezentację złożonych struktur danych oraz metadanych (a la system plikowy w pliku) W pełni przenośny pomiędzy różnymi platformami Obsługa plików > 2GB OFICJALNE biblioteki dla: C, C++, Fortran 90, Java INNE biblioteki: Matlab (7+), Perl, Python Dostępne narzędzia do zarządzania, przeglądania, analizy i manipulacji 5

HDF5 struktura HDF5 jest hierarchiczny struktury: Groups & Datasets Dodatkowo Attributes mogą być przypisane do danego Dataset HDF5 Groups zawierają: Strukturę grupującą 0 lub więcej Groups lub Datasets Dodatkowe metadane HDF5 Datasets zawiera: Nagłówek danych Tablicę danych 6

Structures to organize objects Groups / (root) 3-D array /foo palette lat lon temp ---- ----- ----- 12 23 3.1 15 24 4.2 17 21 3.6 Table Raster image Datasets Raster image 2-D array 7

HDF5 Dataset Klasy informacji w nagłówku Dataset: Nazwa Datasetu string ASCII Typ danych: Atomowe np. integer, float Złożone struktury Przestrzeń danych określa liczbę wymiarów Datasetu (nielimitowana) Układ Datasetu: Ciągły (domyślny) Blokowy w równych kawałkach zapamiętywanych w różnych częściach pliku (w celu optymalizacji I/O) 8

HDF5 Dataset Rank 3 Metadata Dataspace Dimensions Dim_1 = 4 Dim_2 = 5 Dim_3 = 7 Data Datatype Integer Properties Chunked Compressed (optional) Attributes Time = 32.4 Pressure = 987 Temp = 56 Na podstawie:introduction to HDF5 by Barbara Jones, The HDF Group, The 13th HDF & HDF-EOS Workshop, November 3-5, 2009 9

HDF5 typy danych 10

HDF5 Attributes Attributes małe nazwane Datasety związane z głównymi Datasets, Groups lub nazwanymi typami danych Używane do opisu danych (metadane) Attribute składają się z: Nazwy Wartości Attributes są pamiętane w nagłówkach obiektów, których dotyczą 11

HDFView przeglądarka HDF5 12

HDF5 i Matlab Domyślny format plików MAT od wersji 7.3+ Funkcje wysokiego poziomu zapis/odczyt plików MAT (workspace) Funkcje niskiego poziomu (300 funkcji) bezpośredni dostęp do biblioteki C API Patrz: MATLAB 7 Programming Fundamentals 13

HDF5-Matlab funkcje wysokiego poziomu hdf5info hdf5read hdf5write 14

hdf5info fileinfo = hdf5info(filename) fileinfo = hdf5info(...,'readattributes',bool) [...] = hdf5info(..., 'V71Dimensions', BOOL) Przykład: fileinfo = hdf5info('example.h5') fileinfo = Filename: 'example.h5' LibVersion: '1.8.3' Offset: 0 FileSize: 8172 GroupHierarchy: [1x1 struct] 15

hdf5read data = hdf5read(filename,datasetname) attr = hdf5read(filename,attributename) [data, attr] = hdf5read(...,'readattributes',bool) data = hdf5read(hinfo) [...] = hdf5read(..., 'V71Dimensions', BOOL) 16

HDF5 i Python h5py (http://h5py.googlecode.com) NumPy (http://new.scipy.org) Test: >>> import h5py.tests >>> h5py.tests.runtests() 17

EX: hdf5 Konwersja pliku tekstowego do HDF5 Skrypt T2Hconverter.py służy do konwersji pliku tekstowego (TXT), z danymi przykładowymi, do formatu HDF5 Jako wynik otrzymujemy plik HDF5 (H5) o nazwie identycznej z nazwą pliku danych T2Hconverter [nazwa pliku danych] 18

Tekstowe dane wejściowe ------- listing pliku dane.txt ----------------------------------------------- ; Przykładowy plik z danymi pomiarowymi. ; Średnik na początku linii oznacza komentarz ; Format danych: ; Czas [s] (float), Temperatura [st. C] (float) 0,25.6 5,27.3 10,29.1 15,30.7 20,31.2 25,34.5 30,42.2 35,37.5 40,32.0 45,27.6 50,25.3 55,25.1 60,25.0 -------- koniec listingu ------------------------------------------------------ 19

Struktura pliku wynikowego HDF5 /ROOT ----Header - ConversionDate (string) data i czas konwersji - Description (string) opis pliku - ScriptVersion (pomnożona x10) (int) wersja skryptu zapisu ----Data - Values (float) macierz danych ( rząd 1 - czas, rząd 2 - temp ) 20

Skrypty dla Matlaba Skrypt "h5reader_example.m" odczytuje dane z pliku wejściowego w formacie HDF5 i wyświetla zawartość w oknie roboczym. Nazwa pliku wejściowego znajduję się w zmiennej FILE_NAME deklarowanej na początku skryptu 21

H5PY KROK-PO-KROKU Na podstawie: http://h5py.alfven.org/docs/guide/quick.html 22

Pliki HDF5 Konstruktor plików HDF5 akceptuje tryby analogicznie jak zwykła funkcja open(): r, w, a (domyślny) # tworzy lub nadpisuje plik >>> f = h5py.file('file1.hdf5', 'w') # otwiera istniejący tylko do odczytu >>> f = h5py.file('file2.hdf5', 'r') 23

HDF5 Dataset Utworzenie HDF5 z datasetem (100,100) typu integer Inicjalizacja datasetu wartością 42 >>> import h5py # utworzenie HDF5 >>> f = h5py.file('myfile.hdf5') >>> dset=f.create_dataset("mydataset", (100, 100), 'i') >>> dset[...] = 42 24

HDF5 Dataset c.d. Własności dataset (utworzonego wcześniej) : >>> dset.shape (100, 100) >>> dset.dtype dtype('int32') Dataset można utworzyć z array wbudowanego w NumPy: >>> import numpy >>> arr = numpy.ones((2,3), '=i4') >>> dset = f.create_dataset('anotherdataset', data=arr) 25

Grupy Utworzony Dataset ma nazwę, która tworzy element ścieżki dostępu do niego: >>> dset.name '/MyDataset' Do złudzenia przypomina to system ścieżek w systemach plikowych. W powyższym przykładzie mówimy, że MyDataset znajduje się w Grupie root (/) pliku HDF5. Można tworzyć inne grupy i podgrupy: >>> subgroup = f.create_group("subgroup") >>> subgroup.name '/SubGroup' Każda z nich może z kolei zawierać Datasety i/lub kolejne Grupy: >>> dset2 = subgroup.create_dataset('myotherdataset', (4,5), '=f8') >>> dset2.name '/SubGroup/MyOtherDataset' 26

Grupy c.d. Dostęp do grup za pomocą ścieżki (z podgrupy lub ścieżka bezwzględna dla pliku): >>> dset2 = subgroup['myotherdataset'] >>> dset2 = f['/subgroup/myotherdataset'] # equivalent Grupy oraz obiekt plikowy HDF5 ( f w tym przykładzie) wspierają inne operacje słownikowe: >>> list(f) ['MyDataset', 'SubGroup'] >>> 'MyDataset' in f True >>> 'Subgroup/MyOtherDataset' in f True >>> del f['mydataset'] As a safety feature, you can t create an object with a pre-existing name; you have to manually delete the existing object first: >>> grp = f.create_group("newgroup") >>> grp = f.create_group("newgroup") ValueError: Name already exists (Symbol table: Object already exists) >>> del f['newgroup'] >>> grp = f.create_group("newgroup") 27

Atrybuty HDF5 pozwala na dodawanie dodatkowych małych danych do Grup i Datasetów, są to Atrybuty. Atrybuty mają funkcję metadanych czyli danych o danych, które mogą dodatkowo opisywać dane np. tytuł, timestamp, etc. Obiekt typu słownikowego (Dict) o nazwie attr jest związany z każdą Grupą/Datasetem i służy do dostępu do Atrybutów: >>> dset.attrs <Attributes of HDF5 object "MyDataset" (0)> >>> dset.attrs["name"] = "My Dataset" >>> dset.attrs[ My Index"] = 4 >>> dset.attrs["order Array"] = numpy.arange(10) >>> for name, value in dset.attrs.iteritems():... print name+":", value... Name: My Dataset My Index: 4 Order Array: [0 1 2 3 4 5 6 7 8 9] 28

Dataset funkcje specjalne Datasety HDF5 wspierają specjalne funkcje za pomocą opcji przekazanych do Group.create_dataset(): Chunked storage struktura danych typu bloki indeksowane w B- drzewo lub w sposób ciągły. Tego typu układ może drastycznie przyśpieszać operacje I/O dla pewnych wzorów dostępu do danych (np. co n-ty). Compression przezroczysta bezstratna kompresja danych; dostępne są typy kompresji gzip, lzf, szip. Error-Detection wszystkie pliki HDF5 zawierają sumę kontrolną (algorytm fletcher32), która umożliwia weryfikację zapisz/odczyt dla Datasetu. Błąd sumy kontrolne przy odczycie powoduje wyjątek! Resizing rozmiary Datasety HDF5 mogą być zmieniane w locie (do maksymalnego rozmiaru określonego w momencie tworzenia). 29

Dynamiczny resizing Funkcja Dataset.resize() modyfikuje rozmiar datasetu (w miejscu): >>> dset = grp.create_dataset("name", (10,10), '=f8', maxshape=(none, None)) >>> dset.shape (10, 10) >>> dset.resize((20,20)) >>> dset.shape (20, 20) 30

Dostęp i krojenie Datasetu Dosęp do Dataset za pomocą tradycyjnego slicingu oraz rozszerzonego a la NumPy. Przecięcia (slices) są tłumaczone na odpowiednik HDF5 zwany hyperslab, który zapewnia szybki i efektywny dostęp do danych. Rozpoznawane argumenty slicingu : Liczby: wszystko co jest konwertowalne do Python long Obiekty Slice UWAGA: ujemne indeksy niedozwolone! Nazwy pól dla danych złożonych (compound) Obiekt Ellipsis (...) maksymalnie jeden! 31

Dostęp i krojenie Datasetu przykłady >>> dset = f.create_dataset("mydataset", (10,10,10), 'f') >>> dset[0,0,0] >>> dset[0,2:10,1:9:3] >>> dset[:,::2,5] >>> dset[0] >>> dset[1,5] >>> dset[0,...] >>> dset[...,6] Dla danych złożonych można specyfikować wiele pól na raz: >>> dset["fielda"] >>> dset[0,:,4:5, "FieldA", "FieldB"] >>> dset[0,..., "FieldC"] 32

Broadcasting (rozgłaszanie) Dla prostego slicingu wspierane jest rozgłaszanie wartości: >>> dset[0,:,:] = np.arange(10) # wypełnij (10,10) h5py NIE używa NumPy do realizacji rozgłaszania. Rozgłaszanie jest zaimplementowane za pomocą wielokrotnych selekcji z użyciem HDF5 hyperslab. W tym przykładzie Dataset (1000, 1000) jest rozgłaszany do Datasetu (1000, 1000, 1000) : >>> dset2 = f.create_dataset("mydataset", (1000,1000,1000), 'f') >>> data = numpy.arange(1000*1000, dtype='f').reshape((1000,1000)) >>> dset2[:] = data # To nie wymaga alokacji 3.8GB! Broadcasting jest wspierany tylko dla prostego slicningu. 33

Zgodność z NumPy Datasety implementują następujące funkcje interfejsu obsługi tablic w NumPy (tzw. NumPy-array): Slicing proste i elementy zaawansowanego indeksowania shape atrybut dtype atrybut UWAGA: do tego tematu wrócimy omawiając NumPy 34