(kod ten służy wprowadzeniu definicji mediany, nie jest to optymalna ani nawet szczególnie dobra implementacja obliczania mediany w praktyce!

Podobne dokumenty
a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

znaleźć wszystkie rekordy dotyczące adresów przy ulicy Hożej (dowolnego miasta!);

Bazy danych. dr inż. Arkadiusz Mirakowski

Wykład 05 Bazy danych

Relacyjne bazy danych. Podstawy SQL

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

1. Połączenie z bazą danych. W wybranym edytorze tworzymy plik sqltest.py i umieszczamy w nim poniższy kod. #!/usr/bin/python3 import sqlite3

Relacyjne bazy danych. Podstawy SQL

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Programowanie w Ruby

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Język SQL, zajęcia nr 1

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Informatyka (5) SQL. dr inż. Katarzyna Palikowska Katedra Transportu Szynowego p. 4 Hydro

Systemy GIS Tworzenie zapytań w bazach danych

Przydatne sztuczki - sql. Na przykładzie postgres a.

Struktura bazy danych

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

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

Programowanie w języku Java. Bazy danych SQLite w Javie

ACESS- zadania z wykorzystaniem poleceń SQL

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Nowe technologie baz danych

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Wielojęzykowość w aplikacjach J2EE. Tomasz.Skutnik@e-point.pl

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Wykład 5. SQL praca z tabelami 2

akademia androida Składowanie danych część VI

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

EGZAMIN MATURALNY OD ROKU SZKOLNEGO

Biblioteka standardowa - operacje wejścia/wyjścia

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

SQL (ang. Structured Query Language)

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Hurtownia Świętego Mikołaja projekt bazy danych

Bazy danych. Polecenia SQL

Język SQL, zajęcia nr 2

Zaawansowany kurs języka Python

Widok Connections po utworzeniu połączenia. Obszar roboczy

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Liczniki odwiedzin. Licznik odwiedzin na plikach

SQL 4 Structured Query Lenguage

LAB 3 (część 1 Projektu)

Wykład 6. SQL praca z tabelami 3

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Python. Wprowadzenie. Jolanta Bachan

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Paweł Rajba

Bazy danych. Andrzej Łachwa, UJ, /15

SIECI KOMPUTEROWE I BAZY DANYCH

Przestrzenne bazy danych Podstawy języka SQL

NARZĘDZIA WIZUALIZACJI

Wykład 8. SQL praca z tabelami 5

Zaawansowany kurs języka Python

Szkolenie Oracle SQL podstawy. Terminy lutego 2010 First Minute! 1100zł!

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

SQL :: Data Definition Language

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Bazy danych wykład trzeci. Konrad Zdanowski

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

DMX DMX DMX DMX: CREATE MINING STRUCTURE. Tadeusz Pankowski

SQL SERVER 2016 IN MEMORY

Jerzy Nawrocki, Wprowadzenie do informatyki

Bazy danych 7. SQL podstawy

Agregacja i Grupowanie Danych. Funkcje Agregacji. Opcje GROUP BY oraz HAVING

Multimedialne bazy danych - laboratorium

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Bazy danych 10. SQL Widoki

Język SQL podstawy zapytań

BAZA DANYCH SIECI HOTELI

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

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

Podstawy programowania w Pythonie

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Pliki. Informacje ogólne. Obsługa plików w języku C

Bazy danych SQL Server 2005

050 SQL ELEMENTY ZAAWANSOWANE. Prof. dr hab. Marek Wisła

Baza danych dla potrzeb zgłębiania DMX

Bloki anonimowe w PL/SQL

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Oracle PL/SQL. Paweł Rajba.

Podstawy programowania w Pythonie

Bazy danych. Dr inż. Paweł Kasprowski

Bartosz Jachnik - Kino

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

Język PL/SQL Procedury i funkcje składowane

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

CREATE TABLE autorzy ( id_autora SERIAL PRIMARY KEY, imie TEXT, nazwisko TEXT );

1. Sprawdzenie ustawień konfiguracyjnych. Uruchomienie wiersza poleceń:..\ścieżka\bin>mysqladmin variables

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Transkrypt:

Spis treści 1 TI:WTBD/Kolokwium Poprawkowe 1.1 zadanie 1 1.1.1 1.2 zadanie 2 1.2.1 1.3 zadanie 3 1.3.1 TI:WTBD/Kolokwium Poprawkowe zadanie 1 Medianę sekwencji liczb można zdefiniować za pomocą następującego kodu: def median(x): xx = sorted(x) if not xx: return None if len(xx) == 1: return xx[] if len(xx) == 2: return sum(xx)/2. else: return median(xx[1:-1]) (kod ten służy wprowadzeniu definicji mediany, nie jest to optymalna ani nawet szczególnie dobra implementacja obliczania mediany w praktyce!) Niech T będzie tabelą, zawierającą (między innymi) kolumnę "X float not null". Napisać zapytanie SQL zwracające medianę wartości z kolumny X. Napisać program do testowania tego zapytania, tworzący tabelę z 10 000 liczb losowych (w pamięci) i porównujący medianę obliczoną za pomocą zapytania SQL z wynikiem rachunku w Pythonie na tych samych liczbach (ulepszając algorytm z powyższej definicji). def py_median(x): xx = sorted(x)

if not xx: return None limit, offset = 2 - len(xx) % 2, (len(xx) - 1) / 2 middle = xx[offset:offset+limit] return sum(middle) / float(limit) def sql_median(x): from sqlite3 import connect conn = connect(':memory:') conn.execute('create table T (X float not null)') conn.executemany('insert into T values (?)', zip(x)) #((X,) for X in x)) ((res,), ) = conn.execute(''' select avg(x) from ( select X from T order by X limit 2 - (select count(*) from T)%2 offset ((select count(*) from T) - 1)/2 )''' ) conn.close() return res def test_median(n=10000): from numpy.random import rand x = rand(n) m1 = py_median(x) m2 = sql_median(x) delta = m1 - m2 return delta N = 10000 if len(argv) == 2: N = int(argv[1]) print 'py_median - sql_median = {}'.format(test_median(n)) zadanie 2 Posługując się gotową bazą SQLite zawartą w pliku pl_lud.db napisać program, który: w odpowiedzi na argument 'q1' wypisuje listę nazw województw, po jednym na linijkę, i w tej samej linijce dla każdego z nich podaje liczbę powiatów, należących do danego województwa; w odpowiedzi na argument 'q2' wypisuje listę nazw 10 powiatów o największym zaludnieniu w

kraju, obok jego nazwy wypisując liczbę ludności i nazwę województwa, do którego należy; w odpowiedzi na argument 'q3' wypisuje średnią i odchylenie standardowe liczby ludności obliczone dla wszystkich powiatów w kraju. QUERIES = { 'q1' : ''' select w.nazwa as WOJEWODZTWO, count(*) as ILE_POWIATOW from WOJEWODZTWA w join POWIATY p on w.id=p.w_id group by w.nazwa order by w.nazwa ''', 'q2' : ''' select p.nazwa as POWIAT, p.ludnosc, w.nazwa as WOJEWODZTWO from POWIATY p join WOJEWODZTWA w on w.id=p.w_id order by p.ludnosc desc limit 10 ''', 'q3' : ''' select sum(ludnosc)/count(*), sum(ludnosc*ludnosc)/count(*) from POWIATY; ''' } def main(baza, arg): from sqlite3 import connect conn = connect(baza) cursor = conn.execute(queries[arg]) if arg in ('q1', 'q2'): rows = list() rows.append(tuple(r[] for r in cursor.description)) for r in cursor: rows.append(tuple(unicode(x) for x in r)) for r in rows: print u' '.join(r).encode('utf-8') #print r elif arg == 'q3': avg, avg2 = cursor.fetchall()[] stddev = (avg2 - avg**2)**0.5 print u'średnia: {}; sigma: {}'.format(avg,

round(stddev)).encode('utf-8') baza = 'pl_lud.db' try: arg = argv[1] except IndexError: print u'{}: wymaga dokładnie jednego argumentu.'.format( file ).encode('utf-8') exit(1) if arg in ('q1', 'q2', 'q3'): main(baza, arg) else: print u'{0}: {1}: nieznany argument.'.format( file, arg).encode('utf-8') zadanie 3 Napisać program, który na podstawie pliku tekstowego kodowanego w UTF-8 stworzy indeks słów występujących w tym pliku, w postaci tabeli SQLite zawierającej kolumny slowo (tekst słowa), wiersz (nr wiersza w którym wystąpiło) i kolumna (pozycja w wierszu). Sprawdzić działanie tego programu na podstawie pliku z tekstem 1. księgi Pana Tadeusza (Plik:PanTadeusz1.txt). W sformułowaniu tego zadania kryje się niestety pewna niejednoznaczność, której z początku nie zauważyłem:,,pozycja w wierszu" może oznaczać numer kolejny słowa w wierszu, lub pozycję w wierszu początku tego słowa jako numer kolejny znaku w wierszu -- ta druga interpretacja była zamierzona, ale oceniając traktowałem obie jako poprawne. Również jako równie poprawne traktowałem zaczynanie numeracji od zera lub od jedynki. import re import sqlite3 def words(plik): wordrx = re.compile(r'\b\w+\b', re.unicode) f = open(plik)

for num, line in enumerate(f): line = line.decode('utf-8') ## to jeśli kolumnę rozumieć jako nr słowa w linii #for pos, word in enumerate(wordrx.findall(line)): #yield word, num, pos ## a teraz wersja gdy kolumna oznacza pozycję początku słowa w znakach m = wordrx.search(line) while m: yield m.group(), num, m.start() m = wordrx.search(line, m.end()) f.close() def create(dbplik, plik): db = sqlite3.connect(dbplik) db.execute(''' drop table if exists indeks_slow db.execute(''' create table indeks_slow (slowo text, wiersz int, kolumna int, primary key (wiersz, kolumna)) db.executemany(''' insert into indeks_slow (slowo, wiersz, kolumna) values (?,?,?) ''', words(plik)) db.commit() ((n,),) = db.execute(''' select count(*) from indeks_slow return n try: plik = argv[1] except IndexError: print (u'{}: wymaga argumentu - nazwy pliku tekstowego w UTF-8.'. format( file ).encode('utf-8') ) exit(1) dbplik = plik + '.sqlite3' print u'tworzę tabelę indeks_slow w pliku {}...'.format(dbplik).encode('utf-8') nrows = create(dbplik, plik) print u'wstawiono {} wierszy.'.format(nrows).encode('utf-8')