Typy danych dla marketerów: liczby, ciągi i wartości logiczne
Opublikowany: 2017-08-10Uwaga: ten wpis na blogu jest trzecim z serii napisanych przez naszego starszego analityka sieci Web, Adriana Palacios i ma na celu dostarczenie marketerom informacji i instrukcji wymaganych do zainstalowania języka programowania Python. Jeśli to przegapiłeś, pierwszy post Adriana wyjaśnia, dlaczego marketerzy powinni rozważyć zrobienie tego w pierwszej kolejności, a jego drugi post wyjaśnia, jak zainstalować Pythona.
Kiedy zacząłem uczyć się programowania, miałem wiele problemów z pojęciem „typów danych”. Zawsze był to jeden z pierwszych poruszanych tematów, ale też jeden z najbardziej abstrakcyjnych. Z frustracji spowodowanej niezrozumieniem zwykle pomijam wszelkie dyskusje na temat typów danych i racjonalizuję je, mówiąc sobie: „Co one w ogóle mają znaczenie?” Ale po kilku latach włączania programowania w moją codzienną pracę, typy danych (powoli) zaczęły nabierać sensu.
Jakie są typy danych?
Typy danych to zestaw reguł, które określają, co możesz (i czego nie możesz) zrobić w Pythonie. Każdego dnia doświadczasz podobnych ograniczeń w prawdziwym świecie: spróbuj zapłacić za posiłek kartą kredytową, gdy restauracja przyjmuje tylko gotówkę. Spróbuj jeździć rowerem po rzece, zamiast korzystać z kanu lub kajaka. Lub spróbuj upiec ciasto z solą zamiast cukru. Możesz spróbować tych rzeczy, jeśli naprawdę chcesz, ale wątpię, abyś był zadowolony z wyniku.
Podobnie, jeśli myślisz o programowaniu jako o pieczeniu, to typy danych są kluczowymi składnikami każdego kodu Pythona, tak jak jajka, mąka, masło, proszek do pieczenia i cukier są kluczowymi składnikami do robienia ciasta. A może chcesz ciasto? Użyj mniej mąki, całkowicie upuść proszek do pieczenia, może dodaj nadzienie owocowe i voila, jesteś w drodze do pieczenia ciasta. Widzisz, dokąd to zmierza? Zrozumienie, do czego zdolny jest każdy typ danych i jak je ze sobą mieszać, jest kluczem do bycia lepszym programistą.
Oto tylko kilka typowych typów danych w Pythonie:
Liczby, które są dalej podzielone na inne typy, takie jak:
Liczby całkowite: 0, 1, 2, 3
Pływaki: 0,0, 1,0, 2,5, 3,145
Ciągi znaków: „Myśl inaczej”, „Netflix i Chill”
Boole's: prawda, fałsz
W Pythonie jest o wiele więcej typów danych, ale na razie skupimy się na tych trzech.
W tym poście dowiesz się, co można zrobić z podstawowymi typami danych w Pythonie i dlaczego typy danych są ważne.
Z mojego doświadczenia wynika, że jest to najnudniejsza część każdego kursu książkowego/wideo/online „Naucz się programować”, ale ponieważ typy danych są tak ważne w programowaniu, zdecydowanie odradzam pomijanie tego postu.
Liczby
Dwa główne typy liczb w Pythonie to liczby całkowite (całkowite) i zmiennoprzecinkowe. Liczby zmiennopozycyjne można traktować jako ułamki dziesiętne, ale istnieją pewne duże różnice, z których jedna zostanie omówiona później.
Najbardziej oczywistą rzeczą, jaką możemy zrobić z liczbami, jest… matematyka! Oto kilka znaków specjalnych używanych do matematyki w Pythonie:
Dzięki tym podstawowym operacjom możemy teraz przejść przez kilka scenariuszy.
Scenariusz 1
Twój zespół ds. treści poinformował, że blog wygenerował 80 000 odsłon dwa tygodnie temu, aw tym tygodniu wygenerował 105 000 odsłon; jaki jest tygodniowy wzrost liczby odsłon? Przypomnij sobie, że aby obliczyć procentową zmianę, jaką możesz zrobić (Nowa liczba – Stara liczba) ÷ Stara liczba:
Cóż, to nie wydaje się właściwe. Dlaczego nie? Jak każdy dobry matematyk, Python przestrzegał kolejności operacji we wpisanej przez nas instrukcji. Tutaj możemy użyć nawiasów, aby wskazać Pythonowi kolejność, jakiej naprawdę chcemy:
Tak jest lepiej. Pamiętaj, że patrzymy na wartość procentową, więc w tym przypadku przesunięcie liczby dziesiętnej o dwa miejsca w prawo da nam to, czego potrzebujemy. Wygląda na to, że ruch na blogu wzrósł o 31,25% z tygodnia na tydzień.
Scenariusz 2
Współpracujesz z wydawcą internetowym, aby przeprowadzić specjalną kampanię, która obejmuje wielkoformatowe banery i reklamy wideo. Wydawca wysłał propozycję, w której stwierdza, że pakiet ma stały koszt 15 000 USD i oczekuje, że wygeneruje 550 000 wyświetleń; chcesz obliczyć CPM, aby lepiej porównać tę propozycję z innymi opcjami.
Aby znaleźć CPM, korzystamy ze wzoru Koszt kampanii ÷ (łączna liczba wyświetleń ÷ 1000):
Tym razem mamy poprawną kolejność operacji; wygląda na to, że CPM dla kampanii wynosi około 27,27 USD.
Używanie Pythona w ten sposób jest naprawdę żmudne, zwłaszcza gdy wpisywanie długich formuł zwraca tylko jedną metrykę. Chociaż te przykłady są uproszczone, istnieją sposoby na zastosowanie bardziej skomplikowanych operacji matematycznych do setek tysięcy (a nawet milionów) wierszy danych.
Starsze wersje Pythona (wersja 2.7 i starsze) dają dziwne odpowiedzi, jeśli chodzi o dzielenie liczb całkowitych, które dałyby w wyniku zmiennoprzecinkowe, takie jak dzielenie 1 ÷ 3. W tych dwóch przykładach dzieliliśmy liczby całkowite i kończyliśmy na liczbach zmiennoprzecinkowych bez żadnych problemów, co jest częścią magii korzystania z nowszej wersji Pythona. Nasuwa się pytanie: dlaczego liczby z kropką dziesiętną są określane jako zmiennoprzecinkowe, a nie dziesiętne? Jackie Kazil i Katharine Jarmul mają świetny przykład w swojej książce Data Wrangling With Python : w wielu językach programowania 0.1 + 0.2 nie równa się 0.3. Wypróbuj sam: wpisz 0.3 w terminalu, a następnie wykonaj 0.1 + 0.2
Dziwne, prawda? Mark Lutz bardziej szczegółowo omawia tę dziwność w swojej książce Learning Python , ale ponieważ marketerzy zazwyczaj nie muszą obliczać liczb z milionowym stopniem, pełne zrozumienie tego problemu nie jest konieczne i wystarczy po prostu wiedzieć, że istnieje. Ale jeśli jesteś naprawdę ciekawy, oto kilka postów, które wyjaśniają więcej:
- Zdemistyfikowana liczba zmiennoprzecinkowa, część 1
- Zdemistyfikowana liczba zmiennoprzecinkowa, część 2
Smyczki
Ciągi można traktować jako znaki ujęte w cudzysłowy. Jest to rażąco uproszczona definicja, ponieważ ignoruje niuanse między tablicami bajtowymi, Unicode, ASCII itp., ale myślę, że wchodzenie w tego rodzaju szczegóły jest na razie niepotrzebne.
Jak poprawnie wpisywać znaki ujęte w cudzysłów? Okazuje się, że istnieje więcej niż kilka różnych sposobów. Na przykład w większości przypadków nie ma znaczenia, czy używasz cudzysłowów pojedynczych, czy podwójnych, o ile zachowasz spójność:
Zaczynając od podwójnego cudzysłowu w trzecim ciągu i kończąc na pojedynczym cudzysłowie, napotkaliśmy błąd. Prawdopodobnie nie mieszałbyś celowo pojedynczych i podwójnych cudzysłowów, ale jedną rzeczą, na którą należy uważać, są apostrofy:
Zauważ, że pierwszy ciąg, który był ujęty w podwójne cudzysłowy, dobrze radził sobie z apostrofem, podczas gdy drugi nie. Czemu? Gdy Python napotkał drugi pojedynczy cudzysłów, oczekiwał końca ciągu, ale litery szły dalej. Obcięcie zdania wycisza błąd:
Ale posiadanie tylko części zdania nie jest przydatne. Jeśli naprawdę, naprawdę chcesz użyć pojedynczych cudzysłowów, jedną z opcji jest „ucieczka” apostrofowi. Można to zrobić, umieszczając ukośnik odwrotny (\) bezpośrednio przed apostrofem w zdaniu. To mówi Pythonowi, aby traktował następny znak w specjalny sposób:
Ucieczka od apostrofu pozwoliła nam dalej używać pojedynczych cudzysłowów i apostrofu w tym samym ciągu.
Jest jeszcze jeden sposób tworzenia łańcuchów w Pythonie: potrójne cudzysłowy. Zauważ, że kiedy wpisujesz ciąg wielowierszowy, musisz nacisnąć Enter, aby rozpocząć następny wiersz; zmienia to również Terminal, aby wyświetlał …: po lewej stronie nowej linii. Pojawi się to ponownie, gdy zaczniemy pisać wiele wierszy kodu.
Na koniec możesz zauważyć dziwne znaki w ciągu: \n. To mówi komputerowi, gdzie wprowadziłeś nową linię; jest to pomocne, jeśli musisz ponownie wydrukować ciąg i chcesz być precyzyjnym w zakresie formatowania.
Ok, teraz, gdy spędziliśmy cały ten czas, zastanawiając się, jak poprawnie wprowadzić ciąg znaków (wiem, prawda? Tyle pracy nad czymś tak prostym…), nadszedł czas, aby przejść do części zabawnej: manipulowania ciągami.
Istnieje wiele, wiele więcej metod dla łańcuchów; są też całe inne tematy, takie jak dopasowywanie wzorców i krojenie, które omówimy później. Pomijając podstawy, przeanalizujmy rzeczywisty przykład.
Scenariusz 1
Załóżmy, że masz nową kopię, którą musisz przesłać do AdWords, ale cała kopia jest pisana małymi literami i nie masz pewności, czy nagłówki mieszczą się w limicie 30 znaków. Sprawdźmy długość i wydrukujmy nagłówek „najtańsze loty do Paryża” w tytułowej literze:
Pierwszy przykład to technicznie funkcja, podczas gdy drugi to metoda. Jedyne, na czym nam teraz zależy, to to, że każdy jest wpisywany inaczej: za pomocą funkcji najpierw wpisujemy „len(”, potem sam ciąg, a na końcu ostatni nawias „)”. Dobrą wiadomością jest to, że nagłówek mieści się w limicie 30 znaków narzuconym przez AdWords.
Następnie za pomocą metody najpierw wpisujemy ciąg, a następnie dodajemy .title() po cudzysłowie zamykającym (bez spacji!).
Na koniec możesz zadać sobie pytanie „Dlaczego robię to w Pythonie, skoro te same formuły są dostępne w programie Excel?” To słuszny punkt.
Chociaż majstrowanie przy nagłówkach jest głupim przykładem, mam nadzieję, że sprawa jest jasna: istnieje wiele dostępnych opcji manipulowania tekstem za pomocą Pythona. Podobnie jak w poprzednim scenariuszu z obliczaniem CPM lub zmian procentowych, możliwość manipulowania tysiącami znaków tekstu w zaledwie kilku linijkach kodu jest bardzo przydatnym narzędziem.
Na przykład największym bólem głowy, który mi to zaoszczędziło, jest wyczyszczenie milionów wierszy adresów URL z Google Analytics. Drugim punktem tego ćwiczenia jest wskazanie czegoś, co może oszczędzić innym kłopotów w przyszłości: jeśli wiesz, jak używać formuł w programie Excel lub Dokumentach Google, jesteś już o krok do przodu w zrozumieniu, jak programować. Istnieje wiele podobieństw, które przełożą się z Excela na Pythona.
Boole'a
Dwie główne wartości logiczne w Pythonie to prawda i fałsz. Ich znaczenie jest naprawdę proste: prawda oznacza prawdę, a fałsz oznacza fałsz.
Dopóki nie zagłębimy się w używanie logiki w Pythonie, najlepiej wyjaśnić wartości logiczne za pomocą analogii. Tworząc kampanię reklam wideo na Facebooku, musisz zdecydować, jakiej kreacji użyć. Czy powinien to być nowy, modny film, który ma na celu budowanie świadomości marki, czy może pozostać przy starym, ale sprawdzonym w walce filmem, który zawiera wyraźne wezwanie do działania? To zależy od tego, co próbujesz osiągnąć, prawda? Podobnie będzie punkt, w którym będziesz musiał stworzyć logikę, aby powiedzieć komputerowi, którą ścieżką podążać, a wartości logiczne są jednym ze sposobów wykonania tego zadania.
Istnieją inne obiekty w Pythonie, które mogą zachowywać się jak wartości logiczne, ale na razie wystarczy wprowadzenie True i False. Bardziej szczegółowo zajmiemy się tym tematem w przyszłym poście.
Więc co?
Na początku tego postu wspomniałem, że kiedy po raz pierwszy próbowałem uczyć się o typach danych, proces był żmudny, a tematyka nudna. Tak jak niecierpliwy nastolatek na lekcji geometrii w liceum prowokujący nauczyciela pytaniem „Kiedy będę musiał poznać te bezużyteczne śmieci?”
Czułem, że przeglądanie wszystkich tych reguł dotyczących typów danych jest bezcelowe. Ale nauczyłem się doceniać zasady, ponieważ gdy spróbujesz je złamać (w większości przypadków), wystąpi błąd. Jeśli jesteś odpowiedzialnym programistą i testujesz swój kod z wyprzedzeniem, napotkanie tych błędów może uchronić Cię przed popełnieniem krytycznych błędów w kodzie, gdy jest to naprawdę ważne. Przyjrzyjmy się, w jaki sposób błędy mogą się pojawić.
Czy w scenariuszach, w których ćwiczyłeś matematykę z typami liczb, zauważyłeś, że podczas wykonywania tych obliczeń nie użyto przecinków? Prawdopodobnie jesteś przyzwyczajony do wpisywania liczb z przecinkami (lub ułamkami dziesiętnymi dla naszych europejskich przyjaciół!), ale jeśli spróbujesz tego w Pythonie, napotkasz dziwne zachowanie:
Hmmm; wcale nie to, czego się spodziewałeś. Umieszczając przecinek w tej liczbie, nieświadomie stworzyliśmy „krotkę”; w tej chwili nie trzeba wiedzieć, czym jest krotka, ale ważne jest, aby zobaczyć, że przecinek dzieli liczbę na 500 i 0, co znacznie różni się od pięciuset tysięcy.
Ten przykład podkreśla również kluczowy aspekt pisania kodu: tylko jeden błędnie wpisany znak może spowodować duże problemy. Korekta kodu jest na początku trudna, ale z praktyką będziesz coraz lepszy. Nieoczekiwane wyniki lub błędy nie są powodem do paniki; może wydawać się przerażające, ale zwykle oznacza to tylko, że coś zostało utracone w tłumaczeniu.
Jedną z reguł, której prawdopodobnie można się spodziewać, jest to, że próbując dodać liczbę całkowitą i łańcuch, otrzymasz błąd:
I miałbyś rację. W drugim wierszu kodu próbowaliśmy dodać liczbę całkowitą 1 do ciągu '1', co spowodowało błąd. Być może myślisz sobie: „To kiepski przykład; kiedy ktoś próbowałby dodać liczbę całkowitą do łańcucha?” Zdziwiłbyś się, jak wiele interfejsów API zwraca liczby w postaci ciągu. Są ku temu bardzo dobre powody, ale kiedy masz do czynienia z API, zakładanie, że numer będzie numerem, nie jest bezpiecznym zakładem. Świetnym przykładem jest najnowszy interfejs API raportowania Google Analytics. Spójrz na zrzut ekranu z danymi, które Google Analytics udostępnia, gdy poprosisz o raport. Niespodzianka! Wszystkie liczby (spójrz na pola „wartości”) są ujęte w cudzysłów.
Takie wkręcanie się w różne rzeczy, prawda? Tak, ale jeśli wcześniej przeczytasz dokumentację API, będziesz się spodziewać tego problemu. Na szczęście istnieje również kilka narzędzi w Pythonie, które mogą nam pomóc, takie jak funkcja int():
Umieszczając napis '1' wewnątrz funkcji int(), mówimy Pythonowi, że chcemy traktować to jako liczbę całkowitą; teraz możesz dodać te liczby do siebie i żyć dalej.
To tylko kilka możliwości, w jaki sposób typy danych mogą określić, co możesz zrobić w Pythonie, ale pokazują również, że prawie zawsze istnieje sposób na obejście tych problemów. Jeśli masz jakiekolwiek pytania dotyczące typów danych, skontaktuj się ze mną na Twitterze.