Organiser les outils Python pour accélérer le mouvement initial des compétitions d'analyse de données

Objectif

Dans les concours d'analyse tels que Kaggle et Signate, la vitesse de l'action initiale est importante, donc Organisez les modèles de type Jupyter Notebook fréquemment utilisés pour accélérer l'action initiale. Mis à jour de temps en temps.

Changement

2020.5.25 Modifier le paramètre de nombre aléatoire (fonctionnalisation)

table des matières

  1. modèle d'importation
  2. Données lues
  3. Chargement automatique de la bibliothèque
  4. Profil de performance (%% time /% lprun)
  5. localisation japonaise matplotlib (facile)
  6. Nombre maximum d'affichage des pandas
  7. Réduction de la mémoire des pandas
  8. Correction de la graine aléatoire

1. modèle d'importation

modèle d'importation

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)

#Spécifiez le nombre maximum de lignes à afficher (50 lignes sont spécifiées ici)
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 réécriture
        path = "./drive/My Drive/Colab Notebooks/xxx/input/data/" #xxx réécriture
        #Vérifiez le temps restant de la session
        !cat /proc/uptime | awk '{print $1 /60 /60 /24 "days (" $1 / 60 / 60 "h)"}'

print(os.name)
print(path)

2. Par plateforme de lecture de données

Identification de la plate-forme exécutant Python

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)

3. Chargement automatique de la bibliothèque

Même si vous modifiez la bibliothèque, elle sera automatiquement chargée lors de l'exécution.

%load_ext autoreload
%autoreload 2

référence https://qiita.com/Accent/items/f6bb4d4b7adf268662f4

4. Profil de performance

Si vous voulez accélérer, il est important de trouver d'abord le goulot d'étranglement. Devrait être utilisé dans les ordinateurs portables tels que Jupyter. Facile: %% time est utile si vous souhaitez connaître le temps de traitement dans une cellule. Détails:% lprun est utile si vous souhaitez connaître le temps de traitement détaillé de chaque ligne.

4.1 %%time Mettez-le au début j de la cellule. Il affiche le temps d'exécution de la cellule entière.

%%time
def func(num):
    sum = 0
    for i in range(num):
        sum += i

    return sum

out = func(10000)

4.2 %lprun Il affiche le temps d'exécution pour chaque ligne. %% prun est une unité de module, il peut donc être difficile à comprendre. % lprun est plus facile à comprendre ligne par ligne.

Ci-dessous, 3 étapes. Étape 0. Installation Étape 1. Route Étape 2. Exécution

Étape 0 installation

Ignorer si installé. Google Coab, Kaggle Cloud Command

!pip install line_profiler

Étape 1 Route

%load_ext line_profiler

Étape 2 exécuter

def func(num):
    sum = 0
    for i in range(num):
        sum += i

    return sum

%lprun -f func out = func(10000)

5. localisation japonaise matplotlib (facile)

Si vous utilisez une plateforme cloud telle que Google Colab, il peut être difficile de changer de système. C'est relativement facile car il installe automatiquement les polices et les packages japonais.

Notez que seaborn définit également la police lors de l'importation, alors exécutez sns.set à la fin.

import seaborn as sns
import japanize_matplotlib
sns.set(font="IPAexGothic") ###Assurez-vous de courir en dernier

6. Nombre maximum d'affichage des pandas

Lors de l'affichage du DataFrame des pandas, il est abrégé (...) après un certain nombre de lignes / colonnes. Définissez le nombre maximum d'affichages pour contrôler l'omission.

#Spécifiez le nombre maximum de lignes à afficher (50 lignes sont spécifiées ici)
pd.set_option('display.max_rows', 100)
pd.set_option('display.max_columns', 50)

7. Réduction de la mémoire des pandas

Le type est automatiquement défini à partir de la plage de valeurs numériques dans le bloc de données.

Référence par @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

8. Correction de la graine aléatoire

Si vous ne corrigez pas la graine du nombre aléatoire, le résultat de la prédiction changera à chaque fois et l'effet sera difficile à comprendre, alors corrigez-le.

Paramétrage des modules liés aux nombres aléatoires

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)

Paramètres LightGBM liés aux nombres aléatoires

lgb_params = {
    'random_state':28,
    'bagging_fraction_seed':28,
    'feature_fraction_seed':28,
    'data_random_seed':28,
    'seed':28
}

Recommended Posts

Organiser les outils Python pour accélérer le mouvement initial des compétitions d'analyse de données
Résumé des outils nécessaires pour analyser les données en Python
Numba pour accélérer en Python
Comment accélérer les calculs Python
Porté du langage R de "Sazae-san's Janken Data Analysis" vers Python
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
Comment accélérer la belle instanciation de soupe
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
[Introduction au Data Scientist] Bases de Python ♬
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Pour accélérer python, résumez la quantité de calcul du type de collection (liste / tuple / dictionnaire / ensemble) pour chaque objectif.
[Python] De l'analyse morphologique des données CSV à la sortie CSV et à l'affichage graphique [GiNZA]
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Introduction à la modélisation statistique pour l'analyse des données Élargissement de la gamme d'applications de GLM
Une introduction à l'analyse de données à l'aide de Python - Pour augmenter le nombre de vues vidéo -
Extension Python C / C ++: transmettre une partie des données à Python en tant que np.array (set stride)
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment utiliser les outils d'analyse de données pour les débutants
[Python] Flux du scraping Web à l'analyse des données
L'histoire de la lecture des données HSPICE en Python
Vitesse: ajouter un élément à la fin du tableau Python
[Python] Faites de votre mieux pour accélérer SQL Alchemy
Environnement enregistré pour l'analyse des données avec Python
Essayez de simuler le mouvement du système solaire
Analyse de données python
Quoi utiliser pour les piles et les files d'attente Python (comparaison de vitesse de chaque structure de données)
Obtenez des informations équivalentes à l'onglet Réseau des outils de développement Chrome avec Python + Selenium
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
Avoir réussi l'examen d'analyse des données de certification d'ingénieur Python
Modèle de script python pour lire le contenu du fichier
Explication du concept d'analyse de régression à l'aide de python Partie 2
Comment obtenir le nombre de chiffres en Python
[Python] [Word] [python-docx] Analyse simple des données de diff en utilisant python
[Pour les débutants] Comment étudier le test d'analyse de données Python3
J'ai essayé de prédire le match de la J League (analyse des données)
[python] option pour désactiver la sortie de click.progressbar
Calculer le coefficient de régression d'une analyse de régression simple avec python
Défiez l'analyse des composants principaux des données textuelles avec Python
Ne pas être conscient du contenu des données en python
Liste du code Python utilisé dans l'analyse de Big Data
Explication du concept d'analyse de régression à l'aide de Python Partie 1
Écrire des données dans KINTONE à l'aide du module de requêtes Python
Examen de atcoder ABC158, jusqu'à la question E (Python)
Utilisons les données ouvertes de "Mamebus" en Python
[Python] Résumé de la façon de spécifier la couleur de la figure
Explication du concept d'analyse de régression à l'aide de Python Extra 1
14 quiz pour comprendre la portée étonnamment compliquée de Python
Comprendre l'état de la perte de données - Python vs R
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Entièrement traduit le site du "Guide de l'auto-stoppeur de Python"
[Livre technique] Introduction à l'analyse de données avec Python -1 Chapitre Introduction-
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai essayé de résumer les opérations de chaîne de Python
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML
(Peut-être) Test d'analyse des données de certification d'ingénieur Python 3 que vous pouvez passer par lui-même