
Pracując od kilku lat przy różnych projektach Machine Learning, zacząłem budować “ściągę” z różnymi komendami.
Większość z nich stosuje się na tyle rzadko, że trudno jest je zapamiętać. Z drugiej strony, kiedy jej nie miałem, łapałem się, że wielokrotnie wyszukuję te same rzeczy na Stacku.
Chciałbym się podzielić z Tobą fragmentem mojej ściągi – może również będzie przydatna w Twojej pracy.
Technologie, które używam w większości projektów to:
- Jupyter notebook (w przeglądarce) – do szybkiej analizy danych oraz wykonywania eksperymentów.
- Visual Studio Code – do pisania kodu bibliotecznego w Pythonie.
- Zdalne repozytorium.
- Linux.
Podstawowe biblioteki do szybkiej i prostej analizy danych to Pandas oraz Matplotlib.
Zaczynajmy!
import pandas as pd
import matplotlib.pyplot as plt
from IPython.core.display import HTML
I. Pandas
1. Wyświetlanie wszystkich wierszy tabeli
# turn on
pd.set_option('display.max_rows', None)
# turn off
pandas.reset_option('display.max_rows')
lub
with pd.option_context("display.max_rows", 1000):
display(df)
Druga opcja jest o tyle lepsza, że nie musimy pamiętać o wyłączeniu opcji, gdy później nie chcemy z niej korzystać.
Zdarzało mi się wielokrotnie o tym zapomnieć i zawiesić notatnik, gdy chciałem wyświetlić dużą tabelę.
2. Operacje na tabeli w jednej linijce
df.rename(columns={'a': 'b'}) # zmiana nazwy kolumny z 'a' na 'b'
df.assign(one=1) # nowa kolumna 'one' z jedynkami
df.drop(columns=['campaign_id']) # usunięcie kolumny 'campaign_id'
3. Łączenie tabel
Wierszami:
df = df1.append(df2)
Kolumnami:
pd.concat([df1, df2], axis=1)
4. Dwukolumnowa tabela –> słownik
df.set_index('Position')['Letter'].to_dict()
Na odwrót:
pd.DataFrame.from_dict(my_dict, orient='index')
5. Dodatkowa kolumna z procentową statystyką w ramach grupy
Jeśli mamy liczbę kliknięć dla każdej kampanii reklamowej dla każdego dnia i chcemy obliczyć procentowy udział kliknięć dla każdej kampanii w każdym dniu, to piszemy:
df['clicks_perc'] = df[['clicks', 'campaign_id', 'day']].groupby(['campaign_id', 'day']).transform(lambda x: x / x.sum())
6. Dwie zmienne na jednym wykresie
df[['income', 'cost']].plot()
plt.show()
7. Wykres per kategoria
Jeśli mamy tabelkę z kliknięciami co godzinę dla każdej strony internetowej i chcemy na jednym wykresie pokazać kliknięcia godzinowe dla każdej strony z osobna to piszemy:
plot_df = df[['clicks', 'page', 'hour']].set_index(['page', 'hour']).unstack('hour')
plot_df.columns = [c for (_, c) in plot_df.columns]
plot_df.plot()
II. Wykresy
8. Ładne wykresy w matplotlib
plt.rcParams["figure.figsize"] = (20,10)
plt.rcParams["font.size"] = 22
plt.style.use('bmh')
# reset
plt.rcParams.update(plt.rcParamsDefault)
9. Pionowe i poziome linie na wykresie
Pionowa:
plt.axvline(x=0, color='grey', linestyle='-')
Pozioma:
plt.axhline(y=0.0, color='k', linestyle='-')
III. Jupyter
10. Notatnik + kod biblioteczny
W głównym katalogu projektu mam podkatalogi ipython z notatnikami jupyterowymi oraz lib z kodem bibliotecznym. Aby importować z katalogu lib należy w notatnikach wpisać:
import os
while 'ipython' in os.getcwd():
os.chdir("../")
11. Rozszerzane okna
Domyślnie okno w Jupyterze nie zajmuje całej szerokości przeglądarki – często jest to strata miejsca, która przeszkadza w odczytywaniu szerokich tabel. Możemy to zmienić poprzez:
display(HTML("<style>.container { width:100% !important; }</style>"))
12. Ładne tytuły HTML w notatniku
display(HTML(f'<h3>{title}</h3>'))
IV. Terminal + git
13. Format JSON-a w terminalu
echo '{"a":[2,3]}' | json_pp
14. Procesy najbardziej zużywające pamięć
ps aux --sort=-%mem | head
15. Uruchamianie notatników w terminalu
runipy -o my_notebook.ipynb
16. Wybranie jednej z wersji plików w razie konfliktów GIT
Pomocne zwłaszcza przy konflikcie notatników jupyterowych.
git checkout --theirs [--ours] path/to/file
17. Cofanie commitów
Od piątego do trzeciego włącznie, (HEAD~2 cofa tylko trzeci ostatni commit):
git revert HEAD~5..HEAD~2
Podsumowanie
Mam nadzieję, że część z tych komend była dla Ciebie odkrywcza.
Czy Ty również masz swoją “ściągę”? Jeśli tak, daj koniecznie znać w komentarzu!

