Photo by Jess Bailey on Unsplash
Moim pierwszym projektem w Pythonie był Model Produktywności, który stworzyłem dla firmy, w której pracowałem w tamtym czasie. Naszym głównym zadaniem jako działu produktywności było wskazanie jakie jest zapotrzebowanie w godzinach na pokrycie wszystkich operacji sklepowych w podziale na odpowiednie stoiska i obszary. Narzędzie które stworzyłem było wydajne i bardzo dokładne.
Modele produktywności były i nadal są tworzone głównie w oparciu o Microsoft Excel. Oczywiście, każdy właściciel modelu ma możliwość korzystania z innych technologii, ale Excel jest najbardziej powszechny.
Ja byłem odpowiedzialny za większość działów handlowych takich jak:
Warto nadmienić, że liczyliśmy zapotrzebowanie na godziny do budżetów dla prawie 1000 sklepów w 4 krajach (Czechy, Słowacja, Węgry i Polska). Przejmując wyżej wymienione obszary miałem 4 oddzielne pliki Excel wielkości ok 40MB. Natomiast każdy z nich miał wiele cech wspólnych.
Budżetowanie to była tylko część naszych obowiązków i występowała maksymalnie 4 razy w roku. Pozostałe nasze obowiązki związane z modelami to:
Z czasem zauważałem, że analizy, aktualizacje modelów oraz większość kalkulacji różnych procesów trwały zdecydowanie zbyt długo. Poza tym wykonywałem za każdym razem podobne czynności, które nie koniecznie były czymś fascynującym - szczególnie jak się to robiło setny raz.
W związku z tym doszedłem do wniosku, że muszę coś z tym zrobić…
Moim pierwszym celem, który przed samym sobą postawiłem, było połączenie czterech modeli w jeden, co zaoszczędziło by zarówno sporo miejsca na dysku, ale co najważniejsze - również czasu. Z założenia nie musiałbym liczyć wszystkiego 4 razy, ponieważ wszystkie obszary byłyby w jednym pliku. Ot, cała filozofia.
Krótko cieszyłem się z nowego modelu towarowania, bo zauważyłem, że nie jest tak szybki, jak powinien wedug mnie być. Dużo pamięci zabierały zakładki zawierające wyliczenia (formuły), co sprawiało, że model był zbyt wolny. W związku z tym doszedłem do wniosku, że lepiej to wszystko już mieć przeliczone gdzieś poza Excelem. I tak trafiłem na Microsoft Access, który z założenia miał zawierać całą bazę z przeliczonymi wartościami w SQL i łączyć się z zakładką w modelu, w której miały być już tylko wartości.
Działało to bardzo dobrze, do czasu…
W naszej firmie pojawił się Hadoop. Oczywiście słyszałem o tym narzędziu wcześniej i jak tylko dowiedziałem się, że będziemy mogli używać tego systemu, od razu się zgłosiłem do wzięcia udziału w szkoleniu.
Okazało się, że w jednym miejscu będą znajdować się wszystkie dane dotyczące sprzedaży, zapasu, ruchu na kasach i wiele więcej, a to wszystko dla pojedynczego produktu na każdym sklepie w całej sieci. Mówiąc wprost, mogłem zdobyć wszystko czego potrzebowałem w kilka sekund bez wychodzenia z biura. Żeby zobrazować czym dla mnie była ta zmiana, posłużę się krótkim przykładem.
Wyobraźcie sobie, że chcecie dowiedzieć się jaki jest stosunek ilości produktów na paletach do produktów na półkach w wybranym obszarze. Musiałem pojechać na wybrany sklep (im więcej sklepów tym lepsza średnia) i policzyć ilości oraz podzielić je przez siebie. Następnie używałem danego udziału procentowego dla wszystkich sklepów.
W Hadoop miałem to wszystko i wiele więcej na wyciągnięcie ręki. Oczywiście, zawsze jest dobrze co jakiś czas weryfikować dane jadąc na wybrany sklep i porównać je z rzeczywistością. W każdym razie, był to ogromny skok technologicznym, z którego mogłem i oczywiście chciałem skorzystać.
Na mój kontakt z językiem programowania Python wpłynęły dwie kwestie:
Zgodę otrzymałem bez problemu z tym, że oczywiście musiałem nadal utrzymywać pierwotny model w Microsoft Excel.
Nowy Model dla działów handlowych budowałem około roku. Może to długo, ale tworzyłem i uczyłem się w tym samym czasie.
Aby zobrazować na czym mniej więcej polegała zmiana, przygotowałem dwa schematy. Pierwszy schemat przedstawia logikę działania modelu podstawowego w Excelu, z którego korzystałem przed zmianą. Większośc danych w tym modelu była zbierana podczas moich wizyt na sklepach.
Poniższy schemat z kolei przedstawia jak wygląda model aktualnie:
Jak widać, duża część danych jest wyciągana obecnie z systemu i są to dane bardzo detaliczne. Nadal są obszary, których z oczywistych względów nie można wyciągnąć z systemu np.:
Aby zrozumieć jakie Python daje możliwości i jak wpłynął na działanie modelu produktywności, posłużę się porównaniem między dwoma narzędziami, jakimi są właśnie Python oraz Excel.
Główną zaletą programu Excel jest jego prostota i łatwość uruchamiania. Najlepiej przy wykonywaniu małych i jednorazowych analiz lub szybkim tworzeniu podstawowych wizualizacji. Dzięki graficznemu interfejsowi użytkownika Excel jest łatwy w użyciu bez zbytniego doświadczenia.
Python z kolei jest trudniejszy do nauczenia, z uwagi na wyższy próg wejścia. Do prawidłowego działania należy pobrać i ustawić odpowiednie środowisko programistyczne na swoim komputerze. Jednakże gdy przez ten proces przejdziemy, to Python zapewnia wielką przewagę podczas pracy z dużymi zbiorami danych i tworzenia powtarzalnych, zautomatyzowanych analiz i dogłębnych wizualizacji. Jest narzędziem znacznie szybszym, skrypty są zdecydowanie lżejsze od odpowiedników stworzonych w Excel. Dzięki czemu możemy cały model (wszystkie funkcje, kalkulacje i analizy) trzymać w jednym małym pliku, który po wrzuceniu do repozytorium w GitHub daje nam wiele dodatkowych możliwości, takich jak backup danych czy pełną historię zmian w modelu, a także eliminuje temat redundancji plików.
Praca w Dziale Produktywności dała mi mnóstwo możliwi, z których chętnie korzystałem. Mogłem się rozwijać i próbować nowych rozwiązań wdrażając je w życie, mimo iż nikt inny w dziale z nich nie korzystał. Uważam, że była to odważna decyzja moich przełożonych, która opłaciła się dwum stronom. Ja poznałem nowe narzędzia i znalazłem nowe hobby, a mój były dział otrzymał narzędzie, które daje mnóstwo możliości rozwoju.
Wszystkie skrypty, wraz z ich opisem znajdują się w moim repozytorium na platformie GitHub, na którą serdecznie zapraszam.
1 comment
anconda - Aug. 23, 2021, 6:42 p.m.
perfecto