Bei Analysewettbewerben wie Kaggle und Signate ist daher die Geschwindigkeit der ersten Aktion wichtig Organisieren Sie häufig verwendete Vorlagen vom Typ Jupyter Notebook, um die anfängliche Aktion zu beschleunigen. Von Zeit zu Zeit aktualisiert.
2020.5.25 Zufallszahleneinstellung ändern (Funktionalisierung)
Vorlage importieren
import pandas as pd
import numpy as np
import pandas_profiling as pdp
import lightgbm as lgb
import random
from numba import jit
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.dates import DateFormatter
%matplotlib inline
import seaborn as sns
def seed_everything(seed):
random.seed(seed)
np.random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
if "tr" in sys.modules:
tf.random.set_seed(seed)
seed_everything(28)
#Geben Sie die maximale Anzahl der anzuzeigenden Zeilen an (hier werden 50 Zeilen angegeben).
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)
%load_ext autoreload
%autoreload 2
import os
# windows
if os.name == 'nt':
path = '../input/data/'
import japanize_matplotlib
sns.set(font="IPAexGothic")
elif os.name == 'posix':
# Kaggle
if 'KAGGLE_DATA_PROXY_TOKEN' in os.environ.keys():
path = '/kaggle/input/'
# Google Colab
else:
from google.colab import drive
drive.mount('/content/drive')
!ls drive/My\ Drive/'Colab Notebooks'/xxx #xxx umschreiben
path = "./drive/My Drive/Colab Notebooks/xxx/input/data/" #xxx umschreiben
#Überprüfen Sie die verbleibende Sitzungszeit
!cat /proc/uptime | awk '{print $1 /60 /60 /24 "days (" $1 / 60 / 60 "h)"}'
print(os.name)
print(path)
Identifizieren der Plattform, auf der Python ausgeführt wird
import os
# windows
if os.name == 'nt':
#xxx
elif os.name == 'posix':
# Kaggle
if 'KAGGLE_DATA_PROXY_TOKEN' in os.environ.keys():
#xxx
# Google Colab
else:
#xxx
print(os.name)
Selbst wenn Sie die Bibliothek ändern, wird sie zur Laufzeit automatisch geladen.
%load_ext autoreload
%autoreload 2
Referenz https://qiita.com/Accent/items/f6bb4d4b7adf268662f4
Wenn Sie beschleunigen möchten, ist es wichtig, zuerst den Engpass zu finden. Wird voraussichtlich in Notebooks wie Jupyter verwendet. Einfach: %% Zeit ist nützlich, wenn Sie die Verarbeitungszeit in einer Zelle wissen möchten. Details:% lprun ist nützlich, wenn Sie die detaillierte Verarbeitungszeit jeder Zeile wissen möchten.
4.1 %%time Setzen Sie es an den Anfang j der Zelle. Es zeigt die Ausführungszeit der gesamten Zelle an.
%%time
def func(num):
sum = 0
for i in range(num):
sum += i
return sum
out = func(10000)
4.2 %lprun Es gibt die Ausführungszeit für jede Zeile aus. %% prun ist eine Moduleinheit, daher ist es möglicherweise schwer zu verstehen. % lprun ist zeilenweise leichter zu verstehen.
Unten 3 Schritte. Schritt 0. Installation Schritt 1. Straße Schritt 2. Ausführung
Überspringen, falls installiert. Google Coab, Kaggle Cloud-Befehl
!pip install line_profiler
%load_ext line_profiler
def func(num):
sum = 0
for i in range(num):
sum += i
return sum
%lprun -f func out = func(10000)
Wenn Sie eine Cloud-Plattform wie Google Colab verwenden, kann es schwierig sein, das System zu ändern. Es ist relativ einfach, da japanische Schriftarten und Pakete automatisch installiert werden.
Beachten Sie, dass seaborn beim Importieren auch die Schriftart festlegt. Führen Sie daher am Ende sns.set aus.
import seaborn as sns
import japanize_matplotlib
sns.set(font="IPAexGothic") ###Stellen Sie sicher, dass Sie zuletzt ausgeführt werden
Wenn der DataFrame von Pandas angezeigt wird, wird er nach einer bestimmten Anzahl von Zeilen / Spalten abgekürzt (...). Stellen Sie die maximale Anzahl von Anzeigen ein, um das Auslassen zu steuern.
#Geben Sie die maximale Anzahl der anzuzeigenden Zeilen an (hier werden 50 Zeilen angegeben).
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)
Der Typ wird automatisch aus dem Bereich der numerischen Werte im Datenrahmen festgelegt.
Referenz von @gemartin https://www.kaggle.com/gemartin/load-data-reduce-memory-usage
# Original code from https://www.kaggle.com/gemartin/load-data-reduce-memory-usage by @gemartin
# Modified to support timestamp type, categorical type
# Modified to add option to use float16 or not. feather format does not support float16.
from pandas.api.types import is_datetime64_any_dtype as is_datetime
from pandas.api.types import is_categorical_dtype
def reduce_mem_usage(df, use_float16=False):
""" iterate through all the columns of a dataframe and modify the data type
to reduce memory usage.
"""
start_mem = df.memory_usage().sum() / 1024**2
print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))
for col in df.columns:
if is_datetime(df[col]) or is_categorical_dtype(df[col]):
# skip datetime type or categorical type
continue
col_type = df[col].dtype
if col_type != object:
c_min = df[col].min()
c_max = df[col].max()
if str(col_type)[:3] == 'int':
if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
df[col] = df[col].astype(np.int8)
elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
df[col] = df[col].astype(np.int16)
elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
df[col] = df[col].astype(np.int32)
elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
df[col] = df[col].astype(np.int64)
else:
if use_float16 and c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
df[col] = df[col].astype(np.float16)
elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
df[col] = df[col].astype(np.float32)
else:
df[col] = df[col].astype(np.float64)
else:
df[col] = df[col].astype('category')
end_mem = df.memory_usage().sum() / 1024**2
print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))
print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))
return df
Wenn Sie den Startwert der Zufallszahl nicht festlegen, ändert sich das Vorhersageergebnis jedes Mal und der Effekt ist schwer zu verstehen. Korrigieren Sie ihn daher.
Einstellung von Modulen in Bezug auf Zufallszahlen
import numpy as np
import random
import os
def seed_everything(seed):
random.seed(seed)
np.random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
if "tr" in sys.modules:
tf.random.set_seed(seed)
LightGBM-Parameter in Bezug auf Zufallszahlen
lgb_params = {
'random_state':28,
'bagging_fraction_seed':28,
'feature_fraction_seed':28,
'data_random_seed':28,
'seed':28
}