Python: Odczyt pliku CSV

2018-02-03

Załóżmy, że w pliku cities.csv znajduje sie następujący tekst

CityName,Number,YesNo
New York,80,0
San Francisco,95,1
Paris,95,0
Rome,100,1

czyli mamy do czynienia ze standardowym plikiem Comma Separated Values (CSV)

Żeby rozpocząć pracę z plikiem CSV zaimportuj najpierw moduł csv. Funkcja, która rzeczywiście wczyta i zinterpretuje plik CSV to csv.reader. Generalnie posiadając przetworzony przez reader plik w zmiennej, właściwie nic więcej nie trzeba. Problemem może być tylko to, że obiekt zwracany przez reader jest iteratorem, czyli można po nim „przejść” tylko jeden raz. Jeśli Twój plan to przetworzenie danych wiele razy i na różne sposoby, to można skonwertować do listy. Dlatego początek programu mógłby wyglądać tak:

import csv
with open('C:\\temp\\cities.csv', newline='') as csvfile:
 content = csv.reader(csvfile, delimiter=',', quotechar='|')
 contentList = list(content)

Jeśli chcesz „przejść” przez ten plik i wyświetlać tylko zerową kolumnę to można to zrobić tak:

print("Just column 0-----------------------")
 for row in contentList:
 print(row[0])
 

a ponieważ dane są zapisane w liście, to iteracja jest możliwa po raz drugi: Czytaj dalej »

By Rafał Kraik in Python

SQL: Certyfikacja SQL

2018-01-13

Jaki mam zdać egzamin, żeby zdobyć sensowny certyfikat z zakresu SQL? – To częste pytanie, jakie otrzymuję.

Zacznijmy od certyfikatu, którego już nie ma, ale jednak jest znany i rozpoznawalny. MCDBA jest certyfikatem specyficznym dla SQL 2000 i już nie można go uzyskać. Zamiast niego mamy cały szerego innych certyfikatów, które na dodatek od czasu do czasu się zmieniają, więc niestety to co dzisiaj tutaj pieszę za jakiś rok lub dwa może być nieaktualne. Zasada wyszukania aktualnych informacji będzie taka sama: Google i „Certification SQL Server”:

https://www.microsoft.com/en-us/learning/sql-certification.aspx

Najniższy level to  Microsoft Technology Associate (MTA). Nazwijmy go „półprofesjonalnym”. Na egzaminie jest sprawdzana podstawowa wiedza na temat baz danych. Co to rekord, co to tabela, co to transakcja, jak działają podstawowe komendy itp.

Kolejny poziom to Microsoft Certified Solutions Associate (MCSA). To już jest certyfikat profesjonalny. Można go zdawać na różne wersje SQL (obecnie 2012/2014 lub 2016). Ponieważ zdobywanie certyfikatu trochę trwa, zazwyczaj polecam zdawanie do najnowszej wersji. MCSA można zdawać w kilku  specjalizacjach:

-MCSA: SQL 2016 Database Development
-MCSA: SQL 2016 Database Administration
-MCSA: SQL 2016 Business Intelligence Development

Każdy z tych certyfikatów zdobywasz po dwóch egzaminach. I tu można łatwo wpaść w pułapkę, bo na pierwszy rzut oka jeśli np chcesz być administratorem to możesz celować w „MCSA: SQL 2016 Database Administration”. Do egzaminów są dedykowane specjalne kursy.  Niestety – z mojego doświadczenia do pomyślnego zdawania egzaminu nie wystarczy przerobienie jednego tylko kursu. Czy można sobie wyobrazić administratora, który nie zna zasad pisania zapytań? Raczej nie. A kursu z pisania zapytań w tej ścieżce nie ma!

Dlatego jeśli dopiero zaczynasz zabawę z SQL gorąco polecam „MCSA: SQL 2016 Database Development”. To dlatego materiały które obecnie publikuję na Udemy najbardziej dotyczą tej ścieżki. Na dodatek staram się, żeby kursy były konkretne i głęboko i dokładnie omawiały temat, więc poniekąd dobrze przygotowując się do jednego egzaminu już zdobywasz wiedzę potrzebną na inny. Tak jest np z modułem poświęconym XML, z którego pytają chyba na wszystkich egzaminach!

Więcej informacji: https://www.microsoft.com/en-us/learning/mcsa-sql-2016-certification.aspx

Kolejny poziom jest już ekspercki: Microsoft Certified Solutions Expert (MCSE). Ale spokojnie – wszystko dla ludzi. Osobiście te egzaminy zdawało mi się zawsze łatwiej niż na level MCSA, bo wymagają bardziej rozumienia o co chodzi w bazach danych a nie szczegółów składni.  Żeby zdobyć MCSE trzeba mieć MCSA i zdać jeden z egzaminów z listy: https://www.microsoft.com/en-us/learning/mcse-data-management-analytics.aspx

W zależności od wybranego egzaminu – uzyskujesz inny tytuł MCSE

Uwaga: skróty MCSA i MCSE miały kiedyś inne znaczenie: –
-MCSA Microsoft Certified System Administrator
-MCSE Microsoft Certified System Engineer (albo Expert)

Najnowsze certyfikaty wymagają odświeżania co 3 lata (żeby nie tracić kontaktu z technologią….)

Microsoft wydaje też ładny schemat certyfikacji – nasza ścieżka jest fioletowa – w każdym razie przedostatnia). Białe kropki to egzaminy:

 

By Rafał Kraik in Certyfikacja

Off -topic: Programy jakich używamy

2018-01-13

Tak sobie skojarzyłem z kilkoma ostatnimi wdrożeniami….

Obrazek pochodzi z

http://the9gag.com/Funny-Technology/typical-apple-product-4468

By Rafał Kraik in Humor

PowerShell: Emulowanie wcześniejszej wersji PowerShella na komputerze z wyższą wersją

2018-01-13

powershell.exe ma przełącznik pozwalający go uruchomić w trybie zgodności z niższą wersją.

pozwala to na przykład, tak jak na obrazku powyżej, przetestować, czy jakieś polecenie, którego z powodzeniem używamy w wyższej wersji powershella zadziała również na niższej. W tym przykładzie okazało się, że show-command nie jest rozpoznawane w powershell 2.0.

Ale czy aby na pewno zawsze to działa? Czytaj dalej »

By Rafał Kraik in Power Shell

PowerShell: Nie działa CIM Session. Co może być nie tak?

2018-01-13

Zacznij od najprostszej rzeczy, tzn wywołaj

New-CimSession

bez parametrów. Powinieneś dostać sesję do swojego lokalnego komputera

Możesz też próbować łączyć się do lokalnego komputera podając jego nazwę lub „localhost”

Potem

  • upewnij się że w nazwie komputera nie ma literówki
  • upewnij się że komputer do którego się łaczysz jest dostępny w sieci
  • upewnij się, że na komputerze do którego chcesz się połączyć ma skonfigurowany remoting (ew. lokalnie na zdalnym komputerze uruchom Enable-PSRemoting)
  • sprawdź czy się do tego zdalnego komputera dostaniesz przez remoting:
Enter-PSSession <nazwa komputera> -Credential (Get-Credential)
By Rafał Kraik in Power Shell

Python: callable object

2018-01-13

Każdy obiekt ma swój typ i pewne właściwości. Jedną z tych właściwości jest informacja, czy obiekt można wywołać (dziwnie to brzmi po polsku „jest wywoływalny” więc będę używał „is callable”). Oczywiście funkcje są przykładem obiektów wywoływalnych. Zobacz:

def f_just_print_1():
 return 1
 
print('is function callable? ', callable(f_just_print_1))

x=123
 
print('is integer callable? ',callable(x))
Jak to uruchomisz to zobaczysz, że funkcja jest callable a liczba nie - logiczne.

Ale funkcja coś zwraca. W naszym przypadku zwraca liczbę. Czy liczba jest callable?

print('is result of function callable? ',callable(f_just_print_1()))

Jak uruchomisz ten przykład to zobaczysz, że nie. Funkcja się wywołała, zwróciła liczbę a liczba już nie jest callable. Nadal logiczne.

Ale – co by było, gdyby funkcja zwróciła obiekt funkcji? To bardzo dziwne, ale popatrz na taki prosty przykład:

def DoOperation(OperationType):
    def PLUS(a,b):
        return a+b
    def MINUS(a,b):
        return a-b
    if OperationType == 'ADD':
        return PLUS
    else:
        return MINUS

Mamy funkcję, która jako argument przyjmuje napis OperationType

  • jeśli OperationType to napis „ADD” to zostanie zwrócona funkcja PLUS, która z kolei przyjmuje dwa argumenty a i b. Funkcja PLUS dodaje te liczby
  • jeżeli OperationType to cokolwiek innego, to zostanie zwrócona funkcja MINUS, która z kolei przyjmuje dwa argumenty a i b. Funkcja MINUS odejmuje te liczby

Czy to co zwraca funkcja DoOperation jest callable?

print('is this callable? ',callable(DoOperation('ADD')))

Jeśli uruchomisz powyższą linijkę to zobaczysz, że tak. To skoro wynik zwracany przez funkcję można wywołać to co się stanie przy takim zapisie:

print('result of operation ADD: ',DoOperation('ADD')(3,1))
print('result of operation SUBSTRACT: ',DoOperation('SUBSTRACT')(3,1))
  • DoOperation(‚ADD’)(3,1) – najpierw wywołaliśmy DoOperation, która zwróciła funkcję PLUS, a potem funkcja PLUS uruchomiła się z argumentami 3 i 1 i wynik to 4
  • DoOperation(‚SUBSTRACT’)(3,1) – najpierw wywołaliśmy DoOperation, która zwróciła funkcję MINUS, a potem funkcja MINUS uruchomiła się z argumentami 3 i 1 i wynik to 2

Oczywiście można by to zrobić też tak:

myNewFunction = DoOperation('ADD')
print('result is ',myNewFunction(3,1))

ale ten zapis rozciąga się na 2 linijki, a notacja o którą pytasz jest bardziej kompaktowa.

O funkcji callable:

https://www.programiz.com/python-programming/methods/built-in/callable

Inny przykład bazujący na definicji klasy i wywołania metody klasy:

https://stackoverflow.com/questions/111234/what-is-a-callable-in-python

Różnie programiści korzystają z tej notacji. Znajdziesz ją między innymi w Keras:

https://keras.io/getting-started/functional-api-guide/

zwróć uwagę na komentarz:

# a layer instance is callable on a tensor, and returns a tensor
w tym fragmencie:

from keras.layers import Input, Dense
from keras.models import Model
# This returns a tensor
inputs = Input(shape=(784,))
# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
 loss='categorical_crossentropy',
 metrics=['accuracy'])
model.fit(data, labels) # starts training
By Rafał Kraik in Python

PowerShell: Jak definiować tablice?

2018-01-13

Jak wiele rzeczy w PowerShellu można to zrobić na dziesiątki sposobów. Poniżej kilka propozycji:

a to tylko kilka propozycji, bo tablicę można jeszcze zainicjować wczytując zawartość pliku, zapisując w zmiennej wynik innego polecenia zwracającego większą liczbę obiektów itp.

Pierwszy z pokazanych powyżej sposobów jest chyba również najprostszy. $t1 składa się z liczb od 1 do 5

Drugi przypadek jawnie podkreśla, że chodzi o listę. Mówi o tym nawias i znak@ przed nim. Zapis ten jest szczególnie przydatny jeżeli lista ma być pusta @() lub jednoelementowa @(1). Bez tej notacji nic nie  można by powiedzieć o tym, że coś jest pustą listą albo listą jednoelementową.

Trzeci przypadek, to właściwie powtórzenie drugiego z tym, że tutaj elementy listy to napisy. Optycznie taka lista prezentuje się tak samo, ale poszczególne elementy listy mają różne typy, a co za tym idzie również właściwości i metody

 

By Rafał Kraik in Power Shell