2020-05-31
Zazwyczaj kiedy pracujemy z data frame i mamy dane powstające wskutek grupowania wpadamy na pomysł założenia multiindeksu dla wierszy. Jednak czasami specyfika danych jest taka, że nawet struktura w kolumnach ma postać pogrupowaną, więc zgodną ze strukturą multiindeksu. Jak więc zbudować multiindeks zarówno na wierszach, jak i na kolumnach? Oto prosty przykład, który ilustruje ten proces:
Więcej na ten temat: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html
import pandas as pd
colindex = pd.MultiIndex.from_tuples(
(('Green','L'),('Green','XL'),('Blue','L'),('Blue','XL')),
names=('Color','Size')
)
rowindex = pd.MultiIndex.from_tuples(
(('T-Shirt','Class 1'),('T-Shirt','Class 2'),
('Jeans','Class 1'),('Jeans','Class 2')),
names=('Type', 'Quality')
)
data = [
[11,12,13,14],
[21,22,23,24],
[31,32,33,34],
[41,42,43,44]
]
df = pd.DataFrame(data = data,
index = rowindex,
columns = colindex)
df
2020-05-31
W idealnym świecie idealnie jest wyświetlać każdą liczbę z maksymalną dokładnością, ale… świat nie jest idealny. Bywa, że wyliczoną wartość 1.0000001 wolelibyśmy wyświetlić po prostu jako 1. Jedną z możliwością byłoby wykonanie odpowiednich obliczeń na DataFrame i pozbycie się problemu właściwie raz na zawsze. Jeśli jednak wolisz po prostu zmienić parametry tak, aby dane wyświetlały się z mniejszą liczbą cyfr po przecinku wystarczy zmienić parametr
pd.options.display.float_format
W tej zmiennej określasz styl formatowania, który będzie wykorzystywany podczas wyświetlania liczb zmienno-przecinkowych. Jedna instrukcja i po sprawie!
import pandas as pd
pd.options.display.float_format = "{:,.10f}".format
x = [ [0.123456789, 0.987654321],
[0.123456789, 0.987654321]]
pd.DataFrame(x)
2020-05-26
Utrzymanie wysokiego poziomu wiedzy jest w IT zupełnie naturalna. Są jednak takie chwile, kiedy dbałość o kwalifikacje jest szczególnie ważna. Takie czasy zbliżają się wraz z kryzysem po epidemii. W tej bardzo niekorzystnej sytuacji, trzeba próbować znajdować okazje. Ciekawostką jest to, że w czasie miesięcy kwarantanny zdalne formy nauczania zyskały na popularności. Przyczyn można pewnie upatrywać w ograniczonych możliwościach szkoleń stacjonarnych, ale również większej ilości wolnego czasu, kiedy nie można korzystać ze sportu, spacerów, kina i innych rozrywek. Z całą pewnością ci, którzy zamiast Netflixa zdecydowali się na zdobywanie nowych kwalifikacji, mogą powiedzieć, że wychodzą z kwarantanny wzmocnieni o nową wiedzę.
Mówi się, że na naukę nigdy nie jest za późno. Dlatego nawet jeśli kwarantanna już za nami, proponuję wzmocnić się kursem o Azure:

Kurs ma dwa główne cele:
- Wprowadzenie do korzystania z MS Azuzre. Liczy sie tutaj umiejętność poruszania w portalu Azure, pracy z podstawowymi usługami Azure, ale też znajomość zasad rozliczania opłat, obliczania SLA, korzystania ze wsparcia technicznego, terminologii stosowanej w pracy z chmurą
- Przygotowanie do egzaminu Azure Fundamentals AZ-900. Wymogi egzaminacyjne są publikowane na stronie Microsoft i od czasu do czasu aktualizowane. Ten kurs jest zgodny ze stanem wymagań z roku 2020.
Budowanie kompetencji w Azure może być tym bardziej interesujące, że Microsoft rozpoczął w Polsce budowanie nowego regionu Azure. Wartość inwestycji to ok. 1 mld USD. Wydaje się więc, że już niebawem firmy wspierające i korzystające z Azure będą poszukiwać specjalistów w tym zakresie: administratorów, programistów, project managerów, architektów, analityków i specjalistów w innych dziedzinach – nawet księgowych!
Więcej na ten temat:
https://www.centrumxp.pl/Publikacja/Azure-dociera-do-Polski-Microsoft-buduje-centrum-danych-nad-Wisla
Daj się porwać chmurze Azure!
2020-05-06
Oprogramowanie Open Source jest fajne. Ciągle się dziwię i nadziwić się nie mogę, jak to się dzieje, że darmowe i na prawdę dobre oprogramowanie istnieje i się rozwija. Przecież stoją za nim ludzie, którzy poświęcają swój czas w celu tworzenia oprogramowania za darmo (!) i z otwartym kodem (!!). Dlatego jeśli napotkasz błąd w Open Source, postaraj się poszukać rozwiązania, bez wyrzutów względem autorów. Znając tych szlachetnych ludzi, to i tak pewnie chętnie poprawią błędy…
No dobrze, ostatnimi czasy podczas generowania wykresów i ogólnie grafiki w R, ale też w Python zdarzyło się spotkać błąd:
'Invalid argument’ Graphics error: Plot rendering error
Chwila grzebania po sieci, pozwoliła ustalić, że możliwa przyczyna to polskie literki występujące w nazwie użytkownika. Tymczasem wiele programów pracuje z plikami tymczasowymi, które są tworzone w katalogu tymczasowym użytkownika… w efekcie pliki tymczasowe w nazwie zawierały polskie literki i to się już bibliotekom graficznym nie podobało…
Obejściem problemu jest zmiana katalogu na pliki tymczasowe. Kliknij prawą myszką na „Komputer” i wybierz właściwości:

W polu oznaczonym jako „6” wprowadź ścieżkę do katalogu na dysku, który będzie wykorzystywany jako katalog na pliki tymczasowe, np. c:\temp. Upewnij się oczywiście, że ten katalog jest na dysku.
Potem zapisz zmiany, zrestartuj komputer i już powinno wszystko być dobrze!
2020-04-25
Co może póść nie tak, kiedy idziesz krok po kroku zgodnie z łopatologiczną instrukcją z helpa Microsoft? Poprawna odpowiedź to wszystko albo nic.
https://docs.microsoft.com/en-us/azure/event-grid/monitor-virtual-machine-changes-event-grid-logic-app
Miałem dziwny przypadek, bo w jednej subskrypcji ta metoda zadziałała, a w innej nie. Porównałem kod logic app zapisany w formacie JSON linijka po linijce i był taki sam. O co więc chodzi?
Rzut oka na „overview” applikacji wykazywał, że trigger wcale sie nie uruchomił. Trigger z kolei był oparty o event hub. Najprawdopodobniej więc to coś nie tak z event hub. Właściwie ten wniosek, to już 90% rozwiązania.
Jak to jest ładnie opisane tutaj: https://toonvanhoutte.wordpress.com/2019/01/08/logic-apps-event-grid-trigger-not-firing/
należało:
- wejść do swojej subskrypcji
- przejść do zakładki „Resource provider”
- i odszukać na liście EventGrid
- jeśli w statusie zobaczysz wartość „Not Registered”, to znalazłeś przyczynę!
- zaznacz linijkę i kliknij register

Za radą z artykułu, wróciłem jeszcze do aplikacji i ją wyłączyłem (Disable) i włączyłem (Enable). Gotowe. Przy najbliższej okazji trigger się odpalił i aplikacja zadziałała tak jak należało 🙂
2020-04-14
Cześć! Chodziłaś do tej klasy? Liceum Ogólnokształcące nr 2 w Opolu – klasa 4i w latach 1988-1992? Daj mi znać. Zorganizowaliśmy się lata po studiach, ale nadal się szukamy. Odezwij się do mnie i dołącz do wesołego grona. Brakuje nam Ciebie. Nie zastanawiaj się tylko pisz:

Dzięki!
Rafał
2020-04-10
Dane to dane i kiedy przetwarzasz je w data frame, to generalnie nie należy się przejmować wyglądem tych danych. Jednak od czasu do czasu chcesz zadbać również o to jak te dane mają wyglądać.
Oto dataframe:
import pandas
d = {'col1': [1, 22, 333, 4444], 'col2': [4, 55, 666, 7777]}
df = pd.DataFrame(d)
df
Data Frame ma metodę to_string, a metoda to_string przyjmuje parametr formatter, który wpływa na sposób wyświetlania danych:
formatters={"col1": "{:,.2f}".format, "col2": "{:,.2f}".format}
print(df.to_string(formatters = formatters))
A co jeśli data frame zawiera dane napisowe – string? Te polecenia skonwertują nasz data frame do tekstu:
df = df.applymap(str)
df
df.dtypes
Tu przy pomocy parametru formatters określasz, że kolumna col1 ma być wyrównana do lewej strony i napis ma być umieszczony na 10 znakach, a col2 ma być wyrównany do prawej i też na 10 znakach:
formatters={"col1": "{:<10}".format, "col2": "{:>10}".format}
print(df.to_string(formatters = formatters))